diff --git a/.gitattributes b/.gitattributes index d7dbb40f43..d01653a888 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,2 +1 @@ text eol=lf - diff --git a/.gitignore b/.gitignore index c37bc1dfcb..b8492d3ca8 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,13 @@ -*.o -TAGS -*.o -TAGS +# binaries +bin +src/pd +src/pd-watchdog +src/pdreceive +src/pdsend +*.app +*.exe + +# autotools autom4te.cache Makefile Makefile.in @@ -15,22 +21,35 @@ libtool m4/generated m4/config makefile.dependencies +dist +tags +tcl/pd-gui + +# build +*.o +lib*.a + +# libtool .deps .libs *.lo *.la + +# externals *.pd_linux *.pd_darwin *.d_fat *.d_fat_o -po/*.msg -bin -src/makefile -src/pd -src/pd-watchdog -src/pdreceive -src/pdsend -ASIOSDK2 +*.dll + +# windows build artifacts +src/*.com +src/*.def +src/*.lib +src/*.res +src/*.a + +# distribution tarballs pd-0.* dist *.creator @@ -51,4 +70,4 @@ ceammc/extra/m_pd_doc/doc .DS_Store build/ *.snap - +CMakeLists.txt.user* diff --git a/.gitmodules b/.gitmodules index f0fee70e0f..dc5f26e256 100644 --- a/.gitmodules +++ b/.gitmodules @@ -41,3 +41,9 @@ [submodule "ceammc/extra/re2"] path = ceammc/extra/re2 url = https://github.com/google/re2.git +[submodule "ceammc/extra/HoaLibrary-Light"] + path = ceammc/extra/HoaLibrary-Light + url = https://github.com/uliss/HoaLibrary-Light.git +[submodule "ceammc/ext/src/proto/extra/hw_alpaca"] + path = ceammc/ext/src/proto/extra/hw_alpaca + url = https://github.com/uliss/hw_alpaca diff --git a/.travis.yml b/.travis.yml index 08f83e2975..c34564abc5 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,5 +1,5 @@ language: cpp -dist: trusty +dist: xenial sudo: required git: depth: 5 @@ -10,22 +10,29 @@ addons: sources: - ubuntu-toolchain-r-test packages: - - gcc-5 - - g++-5 + - gcc-7 + - g++-7 + - libasound2-dev + - libmodplug-dev + - libavahi-compat-libdnssd-dev + - libsndfile1-dev + - libjack-jackd2-dev + - libfftw3-dev + - libboost-dev env: global: - secure: ifC0UBN+k/lpPL3+amsz8lBNpbmDxi/XGRMIXLpRlNq67cSxOK3pF67HSvM1rFtVS5q9pN+MF2Cfq0jEoeqOJht9SiP+gvb1YlKZITNz4XiNgx2oxKnQLxJhc/EH1bd5hkJ9rpgoOAJGGgDGiI/GFsiwb6wrGQ52i3GPNw3QDPMHjDL8lMPCJQ+GP444j+maXQscWsKqLLa0Eeov0hd60T9fYwvDEGzA95X/UcMW9LFEqq9gW1neiv82ga1y7S/pR8ovqasER+wjFBNdfYh9JekRZv7mRjXK45gRWFg3vArEprfbsgQhPNXsXqXP/HbzMV/cpF0Atn+cyd+GxVRn5PdqiJvn73H9612QQQfXc195JcJXFN79ZeoIYxZI9gZt8emHZE1V90AoTthqCDv0lC/qKwH1SpqqrJ07gGh08ZiUTpN5xBerMzWBdhaUpAGRWeC9xO2xDXz3QKmDb8onWpuoQSCfvM8L2uw2UZnB7Hi93wwyb3nb1kw4CW+3HbgdWIOYtNFc8NAnqbk5BHQLZwCYHOAKPZc6Wae1y2sz5Lm/cOHBdN9msA1jTp5A2K/NjBIhOB6k//uTeSZvkwAWeIcxuNG/xxyk1a76sXGN3WNRSiWeR4jAuNt0k6j0QrEI03Vmv7u12MRiwGBI5WDMhvaMHzltCSmSz2tGsfIEfm8= - COVERITY_SCAN_NOTIFICATION_EMAIL="serge.poltavski@gmail.com" - - COVERITY_SCAN_BRANCH_PATTERN="(master|travis-ci|coverity-.*)" + - COVERITY_SCAN_BRANCH_PATTERN="(master|ceammc|devel|coverity-.*)" - COVERITY_SCAN_BUILD_COMMAND="make" - CTEST_OUTPUT_ON_FAILURE=1 - CEAMMC_BUILD_DIR="build" matrix: include: - #- compiler: clang - # env: CEAMMC_BUILD_TYPE="Debug" CEAMMC_COVERAGE="OFF" + - compiler: clang + env: CEAMMC_BUILD_TYPE="Debug" CEAMMC_COVERAGE="OFF" - compiler: gcc env: CEAMMC_BUILD_TYPE="Debug" CEAMMC_COVERAGE="ON" - compiler: gcc @@ -33,7 +40,7 @@ matrix: before_install: - ./ceammc/scripts/travis_before_install.sh -- if [ "$CXX" = "g++" ]; then export CXX="g++-5" CC="gcc-5"; fi +- if [ "$CXX" = "g++" ]; then export CXX="g++-7" CC="gcc-7"; fi before_script: - ./ceammc/scripts/travis_configure.sh @@ -59,4 +66,3 @@ deploy: on: branch: deploy condition: ${CEAMMC_BUILD_TYPE} = Release - diff --git a/CHANGELOG.md b/CHANGELOG.md index f15234f968..9430fcb8d0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,17 @@ # CEAMMC Pd distribution changelog +## [2020.02] +### Added: +- migration to Pd version 0.51 done + +## [2019.10] +### Added: +- migration to Pd version 0.50 done +- **CEAMMC** external library v0.8 - [ceammc/CHANGELOG.md](ceammc/CHANGELOG.md) + +### Removed: +- hcs external removed (because system.cursor and system.colorpanel are moved into ceammc library) + ## [2019.04] - migration to Pd version 0.49 done - **CEAMMC** external library v0.7.1 - [ceammc/CHANGELOG.md](ceammc/CHANGELOG.md) diff --git a/CMakeLists.txt b/CMakeLists.txt index e266f8f145..0fee874589 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,3 +1,6 @@ +cmake_minimum_required(VERSION 3.1) +project(puredata) + if(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR}) message(FATAL_ERROR "CMake generation for pure-data is not allowed within the source directory!" @@ -11,13 +14,8 @@ if(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR}) "\n") endif() -cmake_minimum_required(VERSION 2.8) if(APPLE) - if(ARCH) - set(CMAKE_OSX_ARCHITECTURES ${ARCH}) - else() - set(CMAKE_OSX_ARCHITECTURES "x86_64;i386") - endif() + set(CMAKE_OSX_ARCHITECTURES "x86_64") if(MACOSX_SDK) set(CMAKE_OSX_SYSROOT ${MACOSX_SDK}) endif() @@ -40,13 +38,6 @@ elseif(WIN32) endif() endif() -if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11") -else() - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") -endif() - - if(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE Debug) endif() @@ -68,10 +59,10 @@ if(UNIX) endif() endif() -project(puredata) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu99") enable_language(CXX C) +set(CMAKE_CXX_STANDARD 11) + list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake) include(version) include(build_options) @@ -91,9 +82,8 @@ if(WITH_LIBSNDFILE) endif() # FFTW3 -option(WITH_FFTW "Use fftw3 library (http://www.fftw.org/)" ON) if(WITH_FFTW) - include(FindFFTW) + find_package(FFTW REQUIRED) if(NOT FFTW_FOUND) set(WITH_FFTW OFF CACHE BOOL "" FORCE) endif() @@ -119,7 +109,7 @@ include(summary) include(package) if(APPLE) - add_custom_target(mac_deploy SOURCES mac/cmake-build-mac.sh.in mac/codesign.sh mac/dmg.sh) + add_custom_target(mac_deploy SOURCES mac/ceammc_build.sh.in mac/codesign.sh mac/dmg.sh) endif() add_custom_target(puredata_changelog SOURCES CHANGELOG.md) diff --git a/INSTALL.txt b/INSTALL.txt index cf605b0415..36ed4d5d0c 100644 --- a/INSTALL.txt +++ b/INSTALL.txt @@ -81,12 +81,12 @@ script settings on the commandline: # build Pd using a system installed PortAudio ./configure --without-local-portaudio -An important configure option is --enable-universal which allows you to specify -the desired architecture(s) when building Pd. For Intel/AMD processors, 32 bit -is called "i386" and 64 bit is "x86_64". By default, Pd is built for the -architecture of the current system, however you may want a 32 bit Pd to work -with existing 32 bit externals on a 64 bit system. You can override the defaults -with --enable-universal: +An important configure option for some platforms is --enable-universal which +allows you to specify the desired architecture(s) when building Pd. For Intel +and AMD processors, 32 bit is called "i386" and 64 bit is "x86_64". By default, +Pd is built for the architecture of the current system, however you may want a +32 bit Pd to work with existing 32 bit externals on a 64 bit system. You can +override the defaults with --enable-universal: # build 32 bit Pd ./configure --enable-universal=i386 @@ -94,12 +94,6 @@ with --enable-universal: # build 64 bit Pd ./configure --with-universal=x86_64 - # build a "fat" Pd for both 32 and 64 bit (not useful on all platforms) - ./configure --enable-universal=i386,x86_64 - - # build a "fat" Pd for all detected architectures (macOS: i386, x86_64, ppc) - ./configure --enable-universal - The full list of available configuration options can printed by running: ./configure --help @@ -203,12 +197,30 @@ need. For example, to install the autotools & gettext using Homebrew: brew link --force gettext By default, Pd is built for the current system architecture, usually 64 bit. If +you want to override this you can use the --enable-universal configure option +which allows you to specify the desired architecture(s) when building Pd. For +Intel/AMD processors, 32 bit is called "i386" and 64 bit is "x86_64". By +default, Pd is built for the architecture of the current system, however you may +want a 32 bit Pd to work with existing 32 bit externals on a 64 bit system. You +can override the defaults with --enable-universal: you want to override this you can use the --enable-universal configure option, as mentioned in the main Autotools Build section. On macOS, running this option -without arguments will build Pd for all architectures supported by the compiler: +without arguments will build a "fat" Pd for all architectures supported by the +compiler: + +* macOS 10.6: i386, x86_64, ppc +* macOS 10.7+: i386, x86_64 -* 10.6: i386, x86_64, ppc -* 10.7+: i386, x86_64 +Note: a "fat" Pd may not work on all systems and/or be able to load both 32 or +64 bit externals. Additonally, you can specify multiple architectures directly: + + # build a "fat" Pd for both 32 and 64 bit + # may not work on all systems + ./configure --enable-universal=i386,x86_64 + + # build a "fat" Pd for all detected architectures (macOS: i386, x86_64, ppc) + # may not work on all systems + ./configure --enable-universal The JACK audio server is supported by Pd on macOS. By default, Pd can use the Jack OS X runtime framework from http://www.jackosx.com if it is installed on @@ -216,7 +228,7 @@ the system. Optionally, Pd can also be built with Jack installed via Homebrew or Macports, however the runtime framework support must be disabled: brew install jack - ./configure --without-jack-framework + ./configure --disable-jack-framework You should now be ready to build Pd. Once built, there are two options for installation: @@ -228,9 +240,9 @@ To build the Pd macOS application, simply run: make app -This builds Pd-#.#.#.app in the Pd source directory which can be then be -double-clicked and/or copied to /Applications. For more info & -options regarding the Pd .app bundle, see mac/README.txt +This builds Pd-#.##.#.app in the Pd source directory which can be then be +double-clicked and/or copied to /Applications. For more info & options regarding +the Pd .app bundle, see mac/README.txt If you want to have both the Pd application *and* use Pd from the commandline, add command aliases to the binaries inside the .app to your ~/.bash_profile: @@ -245,9 +257,9 @@ Next, reload the profile by either opening a new Terminal window or running: source ~/.bash_profile -If you install Pd to your system with "make install", the Tk 8.5.9 -currently included with the system is buggy and should *not* be used. It is -recommended to install a newer version, either via Homebrew or from the +If you install Pd to your system with "make install", the Tk 8.5.9 currently +included with the system (as of macOS 10.14) is buggy and should *not* be used. +It is recommended to install a newer version, either via Homebrew or from the ActiveState Tcl/Tk downloads. To see which version the Pd GUI is using: set the log level to 3 & look for the diff --git a/ceammc/CHANGELOG.md b/ceammc/CHANGELOG.md index 4254236af6..a2b81ce7ef 100644 --- a/ceammc/CHANGELOG.md +++ b/ceammc/CHANGELOG.md @@ -1,5 +1,75 @@ # CEAMMC external library changelog +## [0.8] +### Added: +- conv.car2pol converter from Cartesian to Polar coordinates added (with alias car->pol) +- conv.pol2car converter from Polar to Cartesian coordinates added (with alias pol->car) +- conv.rad2phase added (with alias rad->phase) +- conv.rad2phase~ added (with alias rad->phase~) +- conv.phase2rad added (with alias phase->rad) +- conv.phase2rad~ added (with alias phase->rad~) +- canvas.dir added +- canvas.name added +- canvas.path added +- flow.pack added +- flow.sync_pack (flow.pack') added +- list->props second outlet added for non-props elements +- list.at @default property added (that outputs if element is not found) +- list.walk second outlet added (with bang after reaching list last element) +- list.separate enumeration support added +- popup menu added to ui.radio in check list mode +- @mouse_events property added to some UI object, that allows do some tricky user interaction things +- ui.rslider move added (with SHIFT, change with ALT) +- ui.hgain~ alias added to create horizontal ui.gain~ +- ui.hgain2~ alias added to create horizontal ui.gain2~ +- ui.gain~/ui.gain2~ @relative property added for relative input mode (by default) +- ui.gain~/ui.gain2~ slow value change added in relative mode while holding SHIFT +- ui.gain~/ui.gain2~ mouse wheel support added (with slow on SHIFT) +- ui.gain~/ui.gain2~ popup added +- ui.gain~/ui.gain2~ MIDI learn added (double-click + SHIFT) +- ui.polar added +- ui.slider slow change with SHIFT added +- ui.slider log scale support added with @scale property +- ui.knob slow value change with SHIFT added +- ui.knob log scale support added with @scale property +- ui.knob mouse wheel support added (with slow on SHIFT) +- ui.mouse_filter added to filter specified mouse event types +- ui.mouse_route added to route specified mouse event types +- popup menu added to ui.preset with read/write actions +- math sync binary operations added (all inlets are hot): + - math.sync_add (math.+', +') + - math.sync_sub (math.-', -') + - math.sync_mul (math.*', *') + - math.sync_div (math./', /') + - math.sync_mod (math.%', %') + - math.sync_eq (math.==', ==') + - math.sync_ne (math.!=', !=') + - math.sync_lt (math.<', <') + - math.sync_le (math.<=', <=') + - math.sync_gt (math.>', >') + - math.sync_ge (math.>=', >=') + - math.sync_and (math.&&', &&') + - math.sync_or (math.||', ||') + - math.sync_xor (math.^', ^') +- system.cursor @relative property added to output coords relative to window +- system.colorpanel moved into ceammc library and @float, @int and @hex properties are added + +### Changed: +- ui.tab in single mode outputs like ui.menu: list pair - INDEX TAB_NAME +- flow.demux by default handles @index and @index? properties. To pass this values use @noprops flag +- default range for ui.slider2d now is from -1 (left) to 1 (right) and from 1 (top) to -1 (bottom) +- in ui.slider2d following properties are renamed: + - @x_min renamed to @x_left + - @x_max renamed to @x_right + - @y_min renamed to @y_top + - @y_max renamed to @y_bottom +- in ui.sliders knobs are added + +### Fixed: +- ui.vrd - invalid draw in check list mode +- ui.* - various label fixes +- ui.* @label property handles space in property dialog without entering '' + ## [0.7.1] ### Added: - properties dialogs for ui.* objects are improved: diff --git a/ceammc/CMakeLists.txt b/ceammc/CMakeLists.txt index 1b956eaa1f..1c89a99598 100644 --- a/ceammc/CMakeLists.txt +++ b/ceammc/CMakeLists.txt @@ -1,4 +1,4 @@ -set(CEAMMC_LIB_VERSION "0.7.1") +set(CEAMMC_LIB_VERSION "0.8.0") set(CEAMMC_LIB_HOME "https://github.com/uliss/pure-data") # we need 1.50.0 for boost random uniform distribution @@ -21,6 +21,7 @@ add_subdirectory(ext) add_subdirectory(distrib) add_subdirectory(faust) add_subdirectory(py) +add_subdirectory(scripts) set(POT_TEMPLATE "${CMAKE_SOURCE_DIR}/po/template.pot") find_program(XGETTEXT xgettext) @@ -30,7 +31,7 @@ if(XGETTEXT) file(GLOB _CEAMMC_FILES RELATIVE ${CMAKE_SOURCE_DIR}/po "${CMAKE_CURRENT_SOURCE_DIR}/ext/src/*.cpp" "${CMAKE_CURRENT_SOURCE_DIR}/ext/src/*.h") file(GLOB _CEAMMC_LIB_FILES RELATIVE ${CMAKE_SOURCE_DIR}/po "${CMAKE_CURRENT_SOURCE_DIR}/ext/src/lib/*.cpp" "${CMAKE_CURRENT_SOURCE_DIR}/ext/src/lib/*.h") file(GLOB _UI_FILES RELATIVE ${CMAKE_SOURCE_DIR}/po "${CMAKE_CURRENT_SOURCE_DIR}/ext/src/ui/*.cpp" "${CMAKE_CURRENT_SOURCE_DIR}/ext/src/ui/*.h") - + file(GLOB _HOA_FILES RELATIVE ${CMAKE_SOURCE_DIR}/po "${CMAKE_CURRENT_SOURCE_DIR}/ext/src/spat/*.cpp" "${CMAKE_CURRENT_SOURCE_DIR}/ext/src/spat/*.h") add_custom_target(ceammc_messages COMMAND ${XGETTEXT} --join-existing --from-code=UTF-8 @@ -40,10 +41,10 @@ if(XGETTEXT) --package-name="Pure Data" --package-version=${PD_TEXT_VERSION_FULL} --copyright-holder='This file is put in the public domain' --foreign-user --msgid-bugs-address=pd-dev@iem.at - ${_CICM_FILES} ${_CEAMMC_FILES} ${_CEAMMC_LIB_FILES} ${_UI_FILES} + ${_CICM_FILES} ${_CEAMMC_FILES} ${_CEAMMC_LIB_FILES} ${_UI_FILES} ${_HOA_FILES} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) endif() -add_custom_target(ceammc_extra_files SOURCES CHANGELOG.md) +add_custom_target(ceammc_extra_files SOURCES CHANGELOG.md cppcheck_suppressions.txt) diff --git a/ceammc/ceammc_config.h.in b/ceammc/ceammc_config.h.in index 13289a97cf..d6e3babf45 100644 --- a/ceammc/ceammc_config.h.in +++ b/ceammc/ceammc_config.h.in @@ -3,9 +3,9 @@ #cmakedefine CEAMMC_LIB_VERSION "@CEAMMC_LIB_VERSION@" #cmakedefine CEAMMC_LIB_HOME "@CEAMMC_LIB_HOME@" -#cmakedefine CEAMMC_HAVE_MODPLUG #cmakedefine CEAMMC_HAVE_GLIB #cmakedefine CEAMMC_HAVE_FLUIDSYNTH +#cmakedefine CEAMMC_HAVE_TTS_FLITE /* Define if building for Mac OS X Darwin */ #cmakedefine DARWIN @DARWIN@ diff --git a/ceammc/cppcheck_suppressions.txt b/ceammc/cppcheck_suppressions.txt new file mode 100644 index 0000000000..4eb14bf284 --- /dev/null +++ b/ceammc/cppcheck_suppressions.txt @@ -0,0 +1,4 @@ +cppcheckError +*:*tl_lexer.cpp +uninitMemberVar:*Hoa_Tools.hpp +pureVirtualCall:*Hoa_Scope.hpp diff --git a/ceammc/distrib/CMakeLists.txt b/ceammc/distrib/CMakeLists.txt index 72ac9c4fc7..35985178e5 100644 --- a/ceammc/distrib/CMakeLists.txt +++ b/ceammc/distrib/CMakeLists.txt @@ -5,13 +5,21 @@ add_subdirectory(docker) set(MAKELIB_SCRIPT "") +if(CMAKE_SIZEOF_VOID_P EQUAL 8) + set(CEAMMC_DISTRIB_ARCH "64-bit") +elseif(CMAKE_SIZEOF_VOID_P EQUAL 4) + set(CEAMMC_DISTRIB_ARCH "32-bit") +endif() + if(APPLE) set(DYLIBBUNDLER "${CMAKE_CURRENT_BINARY_DIR}/mac/dylibbundler") - set(MAKELIB_SCRIPT "${CMAKE_CURRENT_BINARY_DIR}/mac/make_lib_mac.sh") + set(MAKELIB_SCRIPT "${PROJECT_BINARY_DIR}/dist/make_lib_mac.sh") configure_file(${CMAKE_CURRENT_SOURCE_DIR}/mac/make_lib_mac.sh - ${CMAKE_CURRENT_BINARY_DIR}/mac/make_lib_mac.sh @ONLY) + ${MAKELIB_SCRIPT} @ONLY) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/mac/github_upload_release.sh ${PROJECT_BINARY_DIR}/dist/github_upload_release.sh @ONLY) + configure_file(${CMAKE_CURRENT_SOURCE_DIR}/mac/install_external.sh + ${PROJECT_BINARY_DIR}/dist/install_external.sh @ONLY) endif() if(UNIX AND NOT APPLE) @@ -20,6 +28,10 @@ if(UNIX AND NOT APPLE) endif() if(WIN32 OR MSYS) + find_program(7Z_EXE NAMES "7z" "7z.exe") + if(7Z_EXE) + message(STATUS "7z found at: ${7Z_EXE}") + endif() set(MAKELIB_SCRIPT "${PROJECT_BINARY_DIR}/dist/make_lib_win.sh") configure_file(${CMAKE_CURRENT_SOURCE_DIR}/win/make_lib_win.sh ${MAKELIB_SCRIPT} @ONLY) endif() @@ -27,26 +39,13 @@ endif() if(MAKELIB_SCRIPT) if(APPLE) add_custom_target(ceammc_lib - COMMAND "${MAKELIB_SCRIPT}" - "${CMAKE_CURRENT_SOURCE_DIR}/.." - "${CMAKE_CURRENT_BINARY_DIR}/../ext" - "${CMAKE_BINARY_DIR}/dist" - "${CEAMMC_LIB_VERSION}" + COMMAND "${MAKELIB_SCRIPT}" "${CMAKE_BINARY_DIR}/dist" SOURCES mac/make_lib_mac.sh) - elseif(WIN32) - if(CMAKE_SIZEOF_VOID_P EQUAL 8) - set(CEAMMC_DISTRIB_ARCH "64-bit") - elseif(CMAKE_SIZEOF_VOID_P EQUAL 4) - set(CEAMMC_DISTRIB_ARCH "32-bit") - endif() + add_custom_target(install_external COMMAND ${PROJECT_BINARY_DIR}/dist/install_external.sh) + elseif(WIN32) add_custom_target(ceammc_lib - COMMAND "${MAKELIB_SCRIPT}" - "${CMAKE_SOURCE_DIR}/ceammc" - "${CMAKE_INSTALL_PREFIX}" - "${CMAKE_BINARY_DIR}/dist" - "${CEAMMC_LIB_VERSION}" - "${CEAMMC_DISTRIB_ARCH}" + COMMAND "${MAKELIB_SCRIPT}" "${CMAKE_BINARY_DIR}/dist" SOURCES win/make_lib_win.sh) endif() endif() @@ -70,6 +69,7 @@ endif() configure_file(${CMAKE_CURRENT_SOURCE_DIR}/list_all_doc_externals.sh ${PROJECT_BINARY_DIR} @ONLY) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/check_doc_external.py ${PROJECT_BINARY_DIR} @ONLY) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/doc_check_methods.sh ${PROJECT_BINARY_DIR} @ONLY) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/check_all_pddoc_refs.sh ${PROJECT_BINARY_DIR} @ONLY) add_custom_target(ceammc_doc_check_methods COMMAND ${PROJECT_BINARY_DIR}/doc_check_methods.sh diff --git a/ceammc/distrib/check_all_pddoc_refs.sh b/ceammc/distrib/check_all_pddoc_refs.sh new file mode 100755 index 0000000000..00c6a351d6 --- /dev/null +++ b/ceammc/distrib/check_all_pddoc_refs.sh @@ -0,0 +1,15 @@ +#!/bin/bash + +PDDOC_LS="pd_doc2ls" +OBJ_CHECK="pd_objcheck" +DB="@PROJECT_SOURCE_DIR@/ceammc/ext/doc/ceammc.db" + +for pddoc in @PROJECT_SOURCE_DIR@/ceammc/ext/doc/*.pddoc +do + echo "checking $(basename $pddoc) ..." + ${PDDOC_LS} "$pddoc" | sort | uniq | while read line + do + echo " - $line" + ${OBJ_CHECK} --xlet-db "${DB}" $line 1>/dev/null + done +done diff --git a/ceammc/distrib/check_doc_external.py b/ceammc/distrib/check_doc_external.py index 20048f0fe9..550e0348b0 100755 --- a/ceammc/distrib/check_doc_external.py +++ b/ceammc/distrib/check_doc_external.py @@ -16,8 +16,10 @@ def signal_handler(sig, frame): import json import jamspell +SRC_PATH = "@PROJECT_SOURCE_DIR@/" BIN_PATH = "@PROJECT_BINARY_DIR@/ceammc/ext/src/lib/" DOC_PATH = "@PROJECT_SOURCE_DIR@/ceammc/ext/doc/" +STK_RAWWAVES_PATH = "@PROJECT_SOURCE_DIR@/ceammc/extra/stk/stk/rawwaves" EXT_LIST = BIN_PATH + "ext_list" EXT_METHODS = BIN_PATH + "ext_methods" @@ -43,18 +45,24 @@ def valid_method(x): args.append(SPECIAL_OBJ[name]) return set(filter(valid_method, - subprocess.check_output(args, stderr=subprocess.DEVNULL).decode().split('\n'))) + subprocess.check_output(args, stderr=subprocess.DEVNULL, env={"RAWWAVES": STK_RAWWAVES_PATH}).decode().split('\n'))) except(subprocess.CalledProcessError): cprint(f"[{name}] can't get methods", "red") return set() def read_props(name): try: - s = subprocess.check_output([EXT_PROPS, name], stderr=subprocess.DEVNULL).decode() + args = [EXT_PROPS, name] + if name in SPECIAL_OBJ: + args.append(SPECIAL_OBJ[name]) + + s = subprocess.check_output(args, stderr=subprocess.DEVNULL, env={"RAWWAVES": STK_RAWWAVES_PATH}).decode() js = json.loads(s) return set(js.keys()), js - except(subprocess.CalledProcessError): - cprint(f"[{name}] can't get properties", "red") + except(subprocess.CalledProcessError) as e: + if e.returncode != 4: + cprint(f"[{name}] can't get properties", "red") + return set(), dict() def check_spell(obj): @@ -155,7 +163,7 @@ def check_spell(obj): ignored_methods = {'dump', 'dsp', 'signal', 'mouseup', 'mouseenter', 'dialog', 'iscicm', 'zoom', 'mousewheel', 'mousemove', 'mousedown', 'mouseleave', 'symbol', 'float', 'bang', 'dblclick', 'list', 'dsp_add', 'loadbang', - 'click', 'dsp_add_aliased', 'vis', 'popup', 'eobjreadfrom', 'eobjwriteto'} + 'click', 'dsp_add_aliased', 'vis', 'popup', 'eobjreadfrom', 'eobjwriteto', 'rightclick', 'key' } undoc_methods_set = ext_methods - doc_methods_set - ignored_methods unknown_methods = doc_methods_set - ext_methods if len(undoc_methods_set): @@ -165,7 +173,7 @@ def check_spell(obj): cprint(f"[{ext_name}] unknown methods in doc: {unknown_methods}", 'yellow') if args.props: - ignored_props = {'@*'} + ignored_props = {'@*', '@label', '@label_margins', '@label_valign', '@label_align', '@label_inner', '@label_side', '@label_color'} ext_props_set, ext_props_dict = read_props(ext_name) undoc_props_set = ext_props_set - doc_props_set - ignored_props @@ -178,24 +186,42 @@ def check_spell(obj): if len(unknown_props): cprint(f"[{ext_name}] unknown properties in doc: {unknown_props}", 'yellow') + HAVE_PDDOC = -1 + HAVE_EXTERNAL = 1 + HAVE_NONE = 0 + HAVE_BOTH = 2 + + def check_attr(name, p0, p1): + a0 = name in p0 + a1 = name in p1 + + if a0 == a1: + if a0: + return HAVE_BOTH + else: + return HAVE_NONE + else: + if a0: + return HAVE_EXTERNAL + else: + return HAVE_PDDOC + for p in exists_props: p0 = ext_props_dict[p] p1 = doc_props_dict[p] - # readonly checks + # readonly in external if p0.get("readonly", False): - # has external readonly but not in doc + # but not in doc if not p1.get("readonly", False): cprint(f"[{ext_name}] missing readonly attribute in \"{p}\"", 'magenta') - continue - + # readonly in docs if "readonly" in p1 and p1["readonly"] == "true": - if p0.get("readonly", False): + # but not readonly in external + if not p0.get("readonly", False): cprint(f"[{ext_name}] non-readonly attribute in \"{p}\"", 'red') - continue - # units checks if p1.get("units", False): if not p0.get("units", False): @@ -210,17 +236,17 @@ def check_spell(obj): cprint(f"[{ext_name}] missing units attribute in pddoc \"{p}\"", 'magenta') if p0["type"] == "bool": - if p1["type"] == "flag": + if p1["type"] in ("flag", "alias"): continue if "enum" not in p1: cprint(f"[{ext_name}] missing attribute enum for bool in \"{p}\"", 'magenta') # no default bool value - if "default" in p0 and "default" not in p1: - cprint(f"[{ext_name}] missing attribute default in \"{p}\"", 'magenta') + if ("default" in p0) and ("readonly" not in p0) and ("default" not in p1): + cprint(f"[{ext_name}] missing attribute default for bool in \"{p}\"", 'magenta') - # invalid default bool value + # non-equal default bool values if "default" in p0 and "default" in p1: v0 = str(p0["default"]) v1 = str(p1["default"]) @@ -229,22 +255,18 @@ def check_spell(obj): continue - if p0["type"] not in ("float", "int"): - if p0["type"] == "bool" and p1["type"] != "int": - cprint(f"[{ext_name}] invalid bool type (not int) in \"{p}\"", 'magenta') - - if p0["type"] == "symbol" and p1["type"] not in ("symbol", "alias"): - cprint(f"[{ext_name}] invalid symbol type in \"{p}\"", 'magenta') - - if p0["type"] == "list" and p1["type"] != "list": - cprint(f"[{ext_name}] invalid list type in \"{p}\"", 'magenta') - - continue - if p0["type"] != p1["type"]: - t0 = p0["type"] - t1 = p1["type"] - cprint(f"[{ext_name}] different attr types: {t0} != {t1} in \"{p}\"", 'magenta') + if p0["type"] == "symbol": + if p1["type"] not in ("symbol", "alias"): + cprint(f"[{ext_name}] invalid symbol type in \"{p}\"", 'magenta') + else: + pass + elif p0["type"] == "bool" and p1["type"] != "int": + cprint(f"[{ext_name}] invalid bool type (not int) in \"{p}\"", 'magenta') + else: + t0 = p0["type"] + t1 = p1["type"] + cprint(f"[{ext_name}] different attr types: {t0} != {t1} in \"{p}\"", 'magenta') if "min" in p0 and "minvalue" not in p1: cprint(f"[{ext_name}] missing attribute minvalue in \"{p}\"", 'magenta') @@ -252,15 +274,6 @@ def check_spell(obj): if "max" in p0 and "maxvalue" not in p1: cprint(f"[{ext_name}] missing attribute maxvalue in \"{p}\"", 'magenta') - if "default" in p0 and "default" not in p1: - cprint(f"[{ext_name}] missing attribute default in \"{p}\"", 'magenta') - - if "default" in p0 and "default" in p1: - v0 = str(p0["default"]) - v1 = str(p1["default"]) - if v0 != v1: - cprint(f"[{ext_name}] invalid value for default attribute \"{p}\": {v0} != {v1}", 'magenta') - if "min" in p0 and "minvalue" in p1: v0 = str(p0["min"]) v1 = str(p1["minvalue"]) @@ -273,6 +286,46 @@ def check_spell(obj): if v0 != v1: cprint(f"[{ext_name}] invalid value for maxvalue attribute \"{p}\": {v0} != {v1}", 'magenta') + attr = check_attr("default", p0, p1) + if attr == HAVE_BOTH: + if isinstance(p0["default"], list): + v0 = p0["default"] + v1 = p1["default"].split(" ") + + if len(v0) > 0 and isinstance(v0[0], int): + v1 = list(map(int, v1)) + else: + v0 = str(p0["default"]) + v1 = p1["default"] + + if v0 != v1: + cprint(f"[{ext_name}] invalid value for default attribute \"{p}\": {v0} != {v1}", 'magenta') + elif attr == HAVE_EXTERNAL and "readonly" not in p0: + cprint(f"[{ext_name}] missing attribute default in \"{p}\"", 'magenta') + + attr = check_attr("enum", p0, p1) + if attr == HAVE_BOTH: + v0 = set(p0["enum"]) + v1 = set(p1["enum"].split(" ")) + + if len(p0["enum"]) > 0 and isinstance(p0["enum"][0], int): + v1 = set(map(lambda x: int(x), p1["enum"].split(" "))) + + if v0 != v1: + cprint(f"[{ext_name}] invalid value for enum attribute \"{p}\": {v0} != {v1}", 'magenta') + d0 = v0 - v1 + d1 = v1 - v0 + if len(d0): + cprint(f"[{ext_name}] non-documented elements are: {d0}", 'magenta') + if len(d1): + cprint(f"[{ext_name}] invalid elements in doc are: {d1}", 'magenta') + + elif attr == HAVE_EXTERNAL: + if ext_name.startswith("ui.") and p not in ("@fontname"): + cprint(f"[{ext_name}] missing enum attribute in pddoc \"{p}\"", 'magenta') + elif attr == HAVE_PDDOC: + cprint(f"[{ext_name}] pddoc enum for attribute \"{p}\" not exists", 'magenta') + if args.spell: corrector.LoadLangModel('ceammc.bin') diff --git a/ceammc/distrib/git-archive-all b/ceammc/distrib/git-archive-all index fed1f48f12..0d1806dc3e 160000 --- a/ceammc/distrib/git-archive-all +++ b/ceammc/distrib/git-archive-all @@ -1 +1 @@ -Subproject commit fed1f48f1287c84220be08d63181a2816bde7a64 +Subproject commit 0d1806dc3ef81e0b8605f90df3df56340b4d2b53 diff --git a/ceammc/distrib/mac/check_bundle.sh b/ceammc/distrib/mac/check_bundle.sh index b0db4fd464..9ebb8905f9 100755 --- a/ceammc/distrib/mac/check_bundle.sh +++ b/ceammc/distrib/mac/check_bundle.sh @@ -1,10 +1,9 @@ #!/bin/bash - # Text color variables -red=$(tput setaf 1) # red -blu=$(tput setaf 4) # blue -rst=$(tput sgr0) # Reset +red=$(tput setaf 1) # red +blu=$(tput setaf 4) # blue +rst=$(tput sgr0) # reset if [ $# -ne 1 ]; then echo "${red}Usage: $(basename $0) APP_BUNDLE${rst}" @@ -21,7 +20,13 @@ fi find $BUNDLE -name *.d_fat | while read external do short_name=$(basename $external) - dep=`otool -L $external | grep -v '/System/Library' | grep -v '@loader_path' | grep -v $short_name | grep -v libc++ | grep -v libSystem` + dep=$(otool -L $external | grep -v -e '/System/Library' \ + -e '@loader_path' \ + -e $short_name \ + -e 'libc++' \ + -e 'libSystem' \ + -e 'libgcc') + if [ "$dep" ]; then echo "${red}WARNING:${rst} external ${blu}${short_name}${rst} has this dependency:" echo " $dep" diff --git a/ceammc/distrib/mac/install_external.sh b/ceammc/distrib/mac/install_external.sh new file mode 100755 index 0000000000..af268c4bf6 --- /dev/null +++ b/ceammc/distrib/mac/install_external.sh @@ -0,0 +1,27 @@ +#!/bin/sh + +BIN_DIR="@PROJECT_BINARY_DIR@" +DIST_DIR="@PROJECT_BINARY_DIR@/dist" +VERSION="@CEAMMC_LIB_VERSION@" +SYSVER=$(sw_vers | grep ProductVersion | cut -f2 | cut -f1,2 -d.) +OUTFILE="ceammc-${VERSION}-macosx-${SYSVER}-pd-@PD_TEXT_VERSION_SHORT@.tar.gz" +DEST="${HOME}/Documents/Pd/externals" + +if [ ! -f "${BIN_DIR}/${OUTFILE}" ] +then + echo "file not found: ${OUTFILE}" + echo 'you have to run `make ceammc_lib` first' + exit 1 +fi + +mkdir -p "${DEST}" + +if [ -d "${DEST}/ceammc" ] +then + echo "renaming ceammc directory to ceammc.old ..." + rm -rf "${DEST}/ceammc.old" + mv -f "${DEST}/ceammc" "${DEST}/ceammc.old" +fi + +tar -C "${DEST}" -xzf "${BIN_DIR}/${OUTFILE}" +echo "Done" diff --git a/ceammc/distrib/mac/make_lib_mac.sh b/ceammc/distrib/mac/make_lib_mac.sh index ed58e298af..238751f1b7 100755 --- a/ceammc/distrib/mac/make_lib_mac.sh +++ b/ceammc/distrib/mac/make_lib_mac.sh @@ -1,18 +1,22 @@ #!/bin/sh -if [ $# -ne 4 ] +if [ $# -ne 1 ] then - echo "Usage: $0 SRCDIR BINDIR OUTDIR VERSION" + echo "Usage: $0 OUTDIR" fi -SRCDIR="$1" -BINDIR="$2" -VERSION="$4" -OUTDIR="$3/ceammc" +SRCDIR="@PROJECT_SOURCE_DIR@/ceammc" +BINDIR="@PROJECT_BINARY_DIR@" +OUTDIR="$1/ceammc" +VERSION="@CEAMMC_LIB_VERSION@" SYSVER=$(sw_vers | grep ProductVersion | cut -f2 | cut -f1,2 -d.) OUTFILE="ceammc-${VERSION}-macosx-${SYSVER}-pd-@PD_TEXT_VERSION_SHORT@.tar.gz" DYLIBBUNDLER="@DYLIBBUNDLER@" +CURRENT_DATE=$(LANG=C date -u '+%d %h %Y %Z %H:%M:%S') +GIT_BRANCH=$(git --git-dir '@PROJECT_SOURCE_DIR@/.git' symbolic-ref --short HEAD) +GIT_COMMIT=$(git --git-dir '@PROJECT_SOURCE_DIR@/.git' describe --tags) + function skip_ext { #skip experimental extensions @@ -30,7 +34,7 @@ mkdir -p "${OUTDIR}" rm -f "${OUTDIR}/*" echo "Copying libraries to ${OUTDIR} ..." -find "${BINDIR}" -name *.dylib -print0 | while read -r -d '' file +find "${BINDIR}/ceammc/ext" -name *.dylib -print0 | while read -r -d '' file do cp "$file" "${OUTDIR}" echo "+ Lib: $(basename $file)" @@ -45,7 +49,7 @@ find_ext() { echo "Copying extension files to ${OUTDIR} ..." -find_ext ${BINDIR} "*" | while read file +find_ext ${BINDIR}/ceammc/ext "*" | while read file do ext_name=$(basename $file) skip_ext $file @@ -61,7 +65,7 @@ do done echo "Copying [system.serial] extension files to ${OUTDIR} ..." -find_ext "${BINDIR}/../extra/comport" "*" | while read file +find_ext "${BINDIR}/ceammc/extra/comport" "*" | while read file do ext_name=$(basename $file) skip_ext $file @@ -76,17 +80,16 @@ do ${DYLIBBUNDLER} -x ${OUTDIR}/$ext_name -b -d ${OUTDIR} -p @loader_path/ -of done -ceammc_lib=$(find_ext "${BINDIR}" ceammc) +ceammc_lib=$(find_ext "${BINDIR}/ceammc/ext" ceammc) cp $ceammc_lib "${OUTDIR}" ${DYLIBBUNDLER} -x ${OUTDIR}/$(basename $ceammc_lib) -b -d ${OUTDIR} -p @loader_path/ -of echo "Copying help files to ${OUTDIR} ..." -find "${SRCDIR}/ext/doc" -name *-help\\.pd | while read file +find "@PROJECT_SOURCE_DIR@/ceammc/ext/doc" -name *-help\\.pd -maxdepth 1 | while read file do help=$(basename $file) - cat "$file" | - sed 's/ceammc\/ceammc-help\.pd/ceammc-help.pd/' | - sed 's/\.\.\/index-help\.pd/index-help.pd/' > "${OUTDIR}/${help}" + cat "$file" | sed -e 's/ceammc\/ceammc-help\.pd/ceammc-help.pd/' \ + -e 's/\.\.\/index-help\.pd/index-help.pd/' > "${OUTDIR}/${help}" echo "+ Help: '$help'" done @@ -94,12 +97,26 @@ echo "Copying wrapper help files to ${OUTDIR} ..." find "${SRCDIR}/ext/class-wrapper/modules" -name *-help\\.pd | while read file do help=$(basename $file) - cat "$file" | - sed 's/ceammc\/ceammc-help\.pd/ceammc-help.pd/' | - sed 's/\.\.\/index-help\.pd/index-help.pd/' > "${OUTDIR}/${help}" + cat "$file" | sed -e 's/ceammc\/ceammc-help\.pd/ceammc-help.pd/' \ + -e 's/\.\.\/index-help\.pd/index-help.pd/' > "${OUTDIR}/${help}" echo "+ Help: '$help'" done +echo "Copying HOA help files to ${OUTDIR} ..." +mkdir -p "${OUTDIR}/hoa" +find "@PROJECT_SOURCE_DIR@/ceammc/ext/doc/hoa" -type f | while read file +do + help=$(basename $file) + cp "$file" "${OUTDIR}/hoa" + echo "+ HOA: '$help'" +done + +echo "Copying about.pd to ${OUTDIR} ..." +cat "@PROJECT_BINARY_DIR@/ceammc/ext/doc/about.pd" | sed -e "s/%GIT_BRANCH%/$GIT_BRANCH/g" \ + -e "s/%GIT_COMMIT%/$GIT_COMMIT/g" \ + -e "s/%BUILD_DATE%/$CURRENT_DATE/g" > ${OUTDIR}/about.pd +echo "+ Help: 'about.pd'" + echo "Copying STK rawwaves files to ${OUTDIR}/stk ..." mkdir -p "${OUTDIR}/stk" find "${SRCDIR}/extra/stk/stk/rawwaves" -name *\\.raw | while read file @@ -133,17 +150,19 @@ cp "${SRCDIR}/ext/doc/stargazing.mod" "${OUTDIR}" echo " prs.txt" cp "${SRCDIR}/ext/doc/prs.txt" "${OUTDIR}" echo " soundtouch~" -soundtouch_ext=$(find_ext "${BINDIR}/../extra/SoundTouch/pd" "soundtouch~") +soundtouch_ext=$(find_ext "${BINDIR}/ceammc/extra/SoundTouch/pd" "soundtouch~") cp "$soundtouch_ext" "${OUTDIR}" ${DYLIBBUNDLER} -x ${OUTDIR}/$(basename $soundtouch_ext) -b -d ${OUTDIR} -p @loader_path/ -of echo " soundtouch~-help.pd" -cp "${BINDIR}/../extra/SoundTouch/pd/soundtouch~-help.pd" "${OUTDIR}" +cp "@PROJECT_SOURCE_DIR@/ceammc/extra/SoundTouch/pd/soundtouch~-help.pd" "${OUTDIR}" echo " soundtouch-help.pd" -cp "${BINDIR}/../extra/SoundTouch/pd/soundtouch-help.pd" "${OUTDIR}" +cp "@PROJECT_SOURCE_DIR@/ceammc/extra/SoundTouch/pd/soundtouch-help.pd" "${OUTDIR}" echo "+ Fix soundtouch link in index-help.pd..." sed -i "" 's/ceammc\/soundtouch-help\.pd/soundtouch-help.pd/' "${OUTDIR}/index-help.pd" +sed -i -e 's|\.\./index-help\.pd|index-help.pd|' "${OUTDIR}/soundtouch-help.pd" +sed -i -e 's|\.\./index-help\.pd|index-help.pd|' "${OUTDIR}/soundtouch~-help.pd" -cd "$3" +cd "$1" tar cfvz "${OUTFILE}" $(basename $OUTDIR) -mv "${OUTFILE}" .. +mv "${OUTFILE}" "@PROJECT_BINARY_DIR@" diff --git a/ceammc/distrib/win/CMakeLists.txt b/ceammc/distrib/win/CMakeLists.txt index 7fdb690bff..cced8ce901 100644 --- a/ceammc/distrib/win/CMakeLists.txt +++ b/ceammc/distrib/win/CMakeLists.txt @@ -10,10 +10,27 @@ if(WIN32) elseif(CMAKE_SIZEOF_VOID_P EQUAL 4) set(CEAMMC_DISTRIB_ARCH "32-bit") endif() + + configure_file(${CMAKE_CURRENT_SOURCE_DIR}/pd.iss ${CMAKE_BINARY_DIR}) + configure_file(${CMAKE_CURRENT_SOURCE_DIR}/fix_dll_deps.sh ${CMAKE_BINARY_DIR} @ONLY) + configure_file(${CMAKE_CURRENT_SOURCE_DIR}/win_upload_to_github.sh ${CMAKE_BINARY_DIR} @ONLY) + configure_file(${CMAKE_CURRENT_SOURCE_DIR}/win_fix_pddoc_key_modifiers.sh ${CMAKE_BINARY_DIR} @ONLY) + + add_custom_target(install0 + COMMAND ${CMAKE_COMMAND} -E copy $ "${CMAKE_INSTALL_PREFIX}/${PD_INTERNAL_EXT_INSTALL_PATH}/ceammc" + COMMAND ${CMAKE_COMMAND} -E copy $ "${CMAKE_INSTALL_PREFIX}/${PD_INTERNAL_EXT_INSTALL_PATH}/ceammc") + add_dependencies(install0 ceammc ceammc_core) + + add_custom_target(run0 COMMAND "${CMAKE_INSTALL_PREFIX}/${PD_EXE_INSTALL_PATH}/$") + add_dependencies(run0 install0) + add_custom_target(run1 COMMAND "${CMAKE_INSTALL_PREFIX}/${PD_EXE_INSTALL_PATH}/$" -d 1) + add_dependencies(run1 install0) + add_custom_target(run2 COMMAND "${CMAKE_INSTALL_PREFIX}/${PD_EXE_INSTALL_PATH}/$" -d 2) + add_dependencies(run2 install0) + add_custom_target(run3 COMMAND "${CMAKE_INSTALL_PREFIX}/${PD_EXE_INSTALL_PATH}/$" -d 3) + add_dependencies(run3 install0) endif() -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/pd.iss ${CMAKE_BINARY_DIR}) -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/fix_dll_deps.sh ${CMAKE_BINARY_DIR}) if(WIN32 OR MSYS OR MINGW) install(FILES fonts/DejaVuSansMono.ttf @@ -48,4 +65,4 @@ if(WIN32) install(DIRECTORY fonts DESTINATION ${CMAKE_INSTALL_PREFIX}) endif() -add_custom_target(window_installer SOURCES pd.iss) +add_custom_target(window_installer SOURCES fix_dll_deps.sh win_upload_to_github.sh pd.iss) diff --git a/ceammc/distrib/win/make_lib_win.sh b/ceammc/distrib/win/make_lib_win.sh index 384eaaefbd..16da590646 100755 --- a/ceammc/distrib/win/make_lib_win.sh +++ b/ceammc/distrib/win/make_lib_win.sh @@ -1,17 +1,19 @@ #!/bin/bash -if [ $# -ne 5 ] +if [ $# -ne 1 ] then - echo "Usage: $0 SRCDIR BINDIR OUTDIR VERSION ARCH" + echo "Usage: $0 OUTDIR" exit 1 fi -SRCDIR="$1" -BINDIR="$2" -VERSION="$4" -OUTDIR="$3/ceammc" -ARCH="$5" -OUTFILE="ceammc-${VERSION}-win-pd-0.49-${ARCH}.zip" +OUTDIR="$1/ceammc" +SRCDIR="@PROJECT_SOURCE_DIR@/ceammc" +BINDIR="@CMAKE_INSTALL_PREFIX@" +VERSION="@CEAMMC_LIB_VERSION@" +ARCH="@CEAMMC_DISTRIB_ARCH@" +PD_VERSION="@PD_TEXT_VERSION_FULL@" +OUTFILE="ceammc-${VERSION}-win-pd-${PD_VERSION}-${ARCH}.zip" +P7Z_EXE="@7Z_EXE@" echo " - source dir: ${SRCDIR}" echo " - binary dir: ${BINDIR}" @@ -30,6 +32,12 @@ function skip_ext { fi } +if [ ! -d "${BINDIR}" ] +then + echo "ERROR: directory with installed binaries not exists: ${BINDIR} ..." + exit 1 +fi + echo "Making CEAMMC library from build directory: $BINDIR" mkdir -p "${OUTDIR}" rm -f "${OUTDIR}/*" @@ -137,6 +145,11 @@ cp "${SRCDIR}/extra/SoundTouch/pd/soundtouch~-help.pd" "${OUTDIR}" cat "${OUTDIR}/index-help.pd" | sed 's/ceammc\/soundtouch-help\.pd/soundtouch-help.pd/' > tmp mv tmp "${OUTDIR}/index-help.pd" -cd "$3" -7z a "${OUTFILE}" $(basename $OUTDIR) -mv "${OUTFILE}" .. +if [ -x "${P7Z_EXE}" ] +then + cd "${OUTDIR}/.." + ${P7Z_EXE} a "${OUTFILE}" $(basename $OUTDIR) + mv "${OUTFILE}" .. +else + echo "7z is not found. Create zip archive manually..." +fi diff --git a/ceammc/distrib/win/pd.iss b/ceammc/distrib/win/pd.iss index 902eb4b990..1e107b9198 100644 --- a/ceammc/distrib/win/pd.iss +++ b/ceammc/distrib/win/pd.iss @@ -52,6 +52,7 @@ Source: "{#AppRoot}/po/*.msg"; DestDir: "{app}/po"; Source: "{#AppRoot}/tcl/*.tcl"; DestDir: "{app}/tcl"; Flags: ignoreversion recursesubdirs ; completion files Source: "{#AppRoot}/tcl/*.txt"; DestDir: "{app}/tcl"; Flags: ignoreversion recursesubdirs +Source: "{#AppRoot}/tcl/*.cfg"; DestDir: "{app}/tcl"; Flags: ignoreversion recursesubdirs Source: "{#AppRoot}/tcl/pd.ico"; DestDir: "{app}/tcl"; Source: "{#AppRoot}/tcl/pd_ceammc.ico"; DestDir: "{app}/tcl"; Source: "{#AppRoot}/lib/*"; DestDir: "{app}/lib"; Flags: ignoreversion recursesubdirs diff --git a/ceammc/distrib/win/win_fix_pddoc_key_modifiers.sh b/ceammc/distrib/win/win_fix_pddoc_key_modifiers.sh new file mode 100644 index 0000000000..e2745a57b1 --- /dev/null +++ b/ceammc/distrib/win/win_fix_pddoc_key_modifiers.sh @@ -0,0 +1,11 @@ +#!/bin/bash +SRCDIR="@PROJECT_SOURCE_DIR@/ceammc" +BINDIR="@CMAKE_INSTALL_PREFIX@" + +echo "Fixing help files in ${SRCDIR} ..." +find "${BINDIR}/extra/ceammc" -name *-help\\.pd | while read file +do + help=$(basename $file) + sed -i -e 's/⌘/⌃/g' "$file" + echo "+ Done: '$help'" +done diff --git a/ceammc/distrib/win/win_upload_to_github.sh b/ceammc/distrib/win/win_upload_to_github.sh new file mode 100644 index 0000000000..88d2e24704 --- /dev/null +++ b/ceammc/distrib/win/win_upload_to_github.sh @@ -0,0 +1,23 @@ +#!/bin/bash + +if [ $# -ne 1 ] +then + echo "Usage: $(basename $0) FILE" + exit 1 +fi + +if [ -z "$GITHUB_TOKEN" ] +then + echo "env variable GITHUB_TOKEN is not set..." + exit 2 +fi + +TAG="v@CEAMMC_DISTRIB_VERSION@" +NAME=$(basename $1) +USER="uliss" +REPO="pure-data" + +echo "Uploading $NAME to github release $TAG ..." + +github-release upload -u $USER -r $REPO -t ${TAG} --name $NAME -f $1 -R + diff --git a/ceammc/ext/CMakeLists.txt b/ceammc/ext/CMakeLists.txt index 013bca2d8a..de236d4866 100644 --- a/ceammc/ext/CMakeLists.txt +++ b/ceammc/ext/CMakeLists.txt @@ -18,9 +18,10 @@ if(WITH_BENCHMARK) endif() endif() -add_custom_target(ceammc_completion_src SOURCES ceammc_objects.txt) +add_custom_target(ceammc_completion_src SOURCES ceammc_objects.txt extra_objects.txt) # install completion -install(FILES ceammc_objects.txt DESTINATION ${PD_GUI_PLUGINS_PATH}/ceammc) +install(FILES ceammc_objects.txt DESTINATION ${PD_GUI_PLUGINS_PATH}/ceammc/custom_completions) +install(FILES extra_objects.txt DESTINATION ${PD_GUI_PLUGINS_PATH}/ceammc/custom_completions) add_custom_target(ceammc_completion COMMAND ${CMAKE_CURRENT_BINARY_DIR}/src/lib/ext_list > ${CMAKE_CURRENT_SOURCE_DIR}/ceammc_objects.txt COMMAND ${CMAKE_CURRENT_BINARY_DIR}/src/lib/ext_list -v > ${CMAKE_CURRENT_SOURCE_DIR}/core_objects.txt diff --git a/ceammc/ext/abstractions/abstractions.txt b/ceammc/ext/abstractions/abstractions.txt index a408baf453..88c0929fa7 100644 --- a/ceammc/ext/abstractions/abstractions.txt +++ b/ceammc/ext/abstractions/abstractions.txt @@ -31,6 +31,7 @@ gfx.freeverb~ gfx.granulator~ gfx.greyhole~ gfx.pitchshift~ +gfx.sdelay~ gfx.vocoder~ gfx.wahwah~ gfx.zita_rev1~ diff --git a/ceammc/ext/abstractions/gdyn.comp2~.pd b/ceammc/ext/abstractions/gdyn.comp2~.pd index f1d6af510a..d7a808eaf8 100644 --- a/ceammc/ext/abstractions/gdyn.comp2~.pd +++ b/ceammc/ext/abstractions/gdyn.comp2~.pd @@ -15,25 +15,25 @@ -262144 0; #X text 10 218 attack(ms):; #X obj 12 237 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/dyn.comp2~/slider0 @min 1 @max 100; +/gui/$1/dyn.comp2~/slider0 @min 1 @max 100; #X obj 140 237 ui.number @size 40 12 @digits 3 @min 1 @max 100; #X obj 190 237 msg set; #X msg 260 237 @attack \$1; #X text 10 251 ratio:; #X obj 12 270 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/dyn.comp2~/slider1 @min 1 @max 10; +/gui/$1/dyn.comp2~/slider1 @min 1 @max 10; #X obj 140 270 ui.number @size 40 12 @digits 3 @min 1 @max 10; #X obj 190 270 msg set; #X msg 260 270 @ratio \$1; #X text 10 284 release(ms):; #X obj 12 303 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/dyn.comp2~/slider2 @min 1 @max 500; +/gui/$1/dyn.comp2~/slider2 @min 1 @max 500; #X obj 140 303 ui.number @size 40 12 @digits 3 @min 1 @max 500; #X obj 190 303 msg set; #X msg 260 303 @release \$1; #X text 10 317 threshold(db):; #X obj 12 336 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/dyn.comp2~/slider3 @min 0 @max 100; +/gui/$1/dyn.comp2~/slider3 @min 0 @max 100; #X obj 140 336 ui.number @size 40 12 @digits 3 @min 0 @max 100; #X obj 190 336 msg set; #X msg 260 336 @threshold \$1; diff --git a/ceammc/ext/abstractions/gdyn.comp~.pd b/ceammc/ext/abstractions/gdyn.comp~.pd index 0225592942..6061a59b72 100644 --- a/ceammc/ext/abstractions/gdyn.comp~.pd +++ b/ceammc/ext/abstractions/gdyn.comp~.pd @@ -13,25 +13,25 @@ -262144 0; #X text 10 218 attack(ms):; #X obj 12 237 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/dyn.comp~/slider0 @min 1 @max 100; +/gui/$1/dyn.comp~/slider0 @min 1 @max 100; #X obj 140 237 ui.number @size 40 12 @digits 3 @min 1 @max 100; #X obj 190 237 msg set; #X msg 260 237 @attack \$1; #X text 10 251 ratio:; #X obj 12 270 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/dyn.comp~/slider1 @min 1 @max 10; +/gui/$1/dyn.comp~/slider1 @min 1 @max 10; #X obj 140 270 ui.number @size 40 12 @digits 3 @min 1 @max 10; #X obj 190 270 msg set; #X msg 260 270 @ratio \$1; #X text 10 284 release(ms):; #X obj 12 303 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/dyn.comp~/slider2 @min 1 @max 500; +/gui/$1/dyn.comp~/slider2 @min 1 @max 500; #X obj 140 303 ui.number @size 40 12 @digits 3 @min 1 @max 500; #X obj 190 303 msg set; #X msg 260 303 @release \$1; #X text 10 317 threshold(db):; #X obj 12 336 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/dyn.comp~/slider3 @min 0 @max 100; +/gui/$1/dyn.comp~/slider3 @min 0 @max 100; #X obj 140 336 ui.number @size 40 12 @digits 3 @min 0 @max 100; #X obj 190 336 msg set; #X msg 260 336 @threshold \$1; diff --git a/ceammc/ext/abstractions/gdyn.gate2~.pd b/ceammc/ext/abstractions/gdyn.gate2~.pd index 123ddaceca..5793fd1c39 100644 --- a/ceammc/ext/abstractions/gdyn.gate2~.pd +++ b/ceammc/ext/abstractions/gdyn.gate2~.pd @@ -15,25 +15,25 @@ -262144 0; #X text 10 218 attack(ms):; #X obj 12 237 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/dyn.gate2~/slider0 @min 0 @max 500; +/gui/$1/dyn.gate2~/slider0 @min 0 @max 500; #X obj 140 237 ui.number @size 40 12 @digits 3 @min 0 @max 500; #X obj 190 237 msg set; #X msg 260 237 @attack \$1; #X text 10 251 hold(ms):; #X obj 12 270 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/dyn.gate2~/slider1 @min 1 @max 500; +/gui/$1/dyn.gate2~/slider1 @min 1 @max 500; #X obj 140 270 ui.number @size 40 12 @digits 3 @min 1 @max 500; #X obj 190 270 msg set; #X msg 260 270 @hold \$1; #X text 10 284 release(ms):; #X obj 12 303 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/dyn.gate2~/slider2 @min 1 @max 500; +/gui/$1/dyn.gate2~/slider2 @min 1 @max 500; #X obj 140 303 ui.number @size 40 12 @digits 3 @min 1 @max 500; #X obj 190 303 msg set; #X msg 260 303 @release \$1; #X text 10 317 threshold(db):; #X obj 12 336 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/dyn.gate2~/slider3 @min 0 @max 100; +/gui/$1/dyn.gate2~/slider3 @min 0 @max 100; #X obj 140 336 ui.number @size 40 12 @digits 3 @min 0 @max 100; #X obj 190 336 msg set; #X msg 260 336 @threshold \$1; diff --git a/ceammc/ext/abstractions/gdyn.gate~.pd b/ceammc/ext/abstractions/gdyn.gate~.pd index d66a29b1fc..2a52209a04 100644 --- a/ceammc/ext/abstractions/gdyn.gate~.pd +++ b/ceammc/ext/abstractions/gdyn.gate~.pd @@ -13,25 +13,25 @@ -262144 0; #X text 10 218 attack(ms):; #X obj 12 237 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/dyn.gate~/slider0 @min 0 @max 500; +/gui/$1/dyn.gate~/slider0 @min 0 @max 500; #X obj 140 237 ui.number @size 40 12 @digits 3 @min 0 @max 500; #X obj 190 237 msg set; #X msg 260 237 @attack \$1; #X text 10 251 hold(ms):; #X obj 12 270 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/dyn.gate~/slider1 @min 1 @max 500; +/gui/$1/dyn.gate~/slider1 @min 1 @max 500; #X obj 140 270 ui.number @size 40 12 @digits 3 @min 1 @max 500; #X obj 190 270 msg set; #X msg 260 270 @hold \$1; #X text 10 284 release(ms):; #X obj 12 303 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/dyn.gate~/slider2 @min 1 @max 500; +/gui/$1/dyn.gate~/slider2 @min 1 @max 500; #X obj 140 303 ui.number @size 40 12 @digits 3 @min 1 @max 500; #X obj 190 303 msg set; #X msg 260 303 @release \$1; #X text 10 317 threshold(db):; #X obj 12 336 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/dyn.gate~/slider3 @min 0 @max 100; +/gui/$1/dyn.gate~/slider3 @min 0 @max 100; #X obj 140 336 ui.number @size 40 12 @digits 3 @min 0 @max 100; #X obj 190 336 msg set; #X msg 260 336 @threshold \$1; diff --git a/ceammc/ext/abstractions/gflt.bpf12~.pd b/ceammc/ext/abstractions/gflt.bpf12~.pd index 4df41224e8..c937e74377 100644 --- a/ceammc/ext/abstractions/gflt.bpf12~.pd +++ b/ceammc/ext/abstractions/gflt.bpf12~.pd @@ -13,13 +13,13 @@ -262144 0; #X text 10 218 freq(Hz):; #X obj 12 237 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/flt.bpf12~/slider0 @min 20 @max 20000; +/gui/$1/flt.bpf12~/slider0 @min 20 @max 20000; #X obj 140 237 ui.number @size 40 12 @digits 3 @min 20 @max 20000; #X obj 190 237 msg set; #X msg 260 237 @freq \$1; #X text 10 251 q:; #X obj 12 270 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/flt.bpf12~/slider1 @min 0.01 @max 100; +/gui/$1/flt.bpf12~/slider1 @min 0.01 @max 100; #X obj 140 270 ui.number @size 40 12 @digits 3 @min 0.01 @max 100; #X obj 190 270 msg set; #X msg 260 270 @q \$1; diff --git a/ceammc/ext/abstractions/gflt.bpf24~.pd b/ceammc/ext/abstractions/gflt.bpf24~.pd index c333b037d6..8dbff719e4 100644 --- a/ceammc/ext/abstractions/gflt.bpf24~.pd +++ b/ceammc/ext/abstractions/gflt.bpf24~.pd @@ -13,13 +13,13 @@ -262144 0; #X text 10 218 freq(Hz):; #X obj 12 237 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/flt.bpf24~/slider0 @min 20 @max 20000; +/gui/$1/flt.bpf24~/slider0 @min 20 @max 20000; #X obj 140 237 ui.number @size 40 12 @digits 3 @min 20 @max 20000; #X obj 190 237 msg set; #X msg 260 237 @freq \$1; #X text 10 251 q:; #X obj 12 270 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/flt.bpf24~/slider1 @min 0.01 @max 100; +/gui/$1/flt.bpf24~/slider1 @min 0.01 @max 100; #X obj 140 270 ui.number @size 40 12 @digits 3 @min 0.01 @max 100; #X obj 190 270 msg set; #X msg 260 270 @q \$1; diff --git a/ceammc/ext/abstractions/gflt.eq10~.pd b/ceammc/ext/abstractions/gflt.eq10~.pd index f68fb37e41..c74e0739a6 100644 --- a/ceammc/ext/abstractions/gflt.eq10~.pd +++ b/ceammc/ext/abstractions/gflt.eq10~.pd @@ -14,61 +14,61 @@ -262144 0; #X text 10 218 f1000(db):; #X obj 12 237 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/flt.eq10~/slider0 @min -70 @max 10; +/gui/$1/flt.eq10~/slider0 @min -70 @max 10; #X obj 140 237 ui.number @size 40 12 @digits 3 @min -70 @max 10; #X obj 190 237 msg set; #X msg 260 237 @f1000 \$1; #X text 10 251 f125(db):; #X obj 12 270 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/flt.eq10~/slider1 @min -70 @max 10; +/gui/$1/flt.eq10~/slider1 @min -70 @max 10; #X obj 140 270 ui.number @size 40 12 @digits 3 @min -70 @max 10; #X obj 190 270 msg set; #X msg 260 270 @f125 \$1; #X text 10 284 f16000(db):; #X obj 12 303 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/flt.eq10~/slider2 @min -70 @max 10; +/gui/$1/flt.eq10~/slider2 @min -70 @max 10; #X obj 140 303 ui.number @size 40 12 @digits 3 @min -70 @max 10; #X obj 190 303 msg set; #X msg 260 303 @f16000 \$1; #X text 10 317 f2000(db):; #X obj 12 336 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/flt.eq10~/slider3 @min -70 @max 10; +/gui/$1/flt.eq10~/slider3 @min -70 @max 10; #X obj 140 336 ui.number @size 40 12 @digits 3 @min -70 @max 10; #X obj 190 336 msg set; #X msg 260 336 @f2000 \$1; #X text 10 350 f250(db):; #X obj 12 369 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/flt.eq10~/slider4 @min -70 @max 10; +/gui/$1/flt.eq10~/slider4 @min -70 @max 10; #X obj 140 369 ui.number @size 40 12 @digits 3 @min -70 @max 10; #X obj 190 369 msg set; #X msg 260 369 @f250 \$1; #X text 10 383 f31(db):; #X obj 12 402 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/flt.eq10~/slider5 @min -70 @max 10; +/gui/$1/flt.eq10~/slider5 @min -70 @max 10; #X obj 140 402 ui.number @size 40 12 @digits 3 @min -70 @max 10; #X obj 190 402 msg set; #X msg 260 402 @f31 \$1; #X text 10 416 f4000(db):; #X obj 12 435 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/flt.eq10~/slider6 @min -70 @max 10; +/gui/$1/flt.eq10~/slider6 @min -70 @max 10; #X obj 140 435 ui.number @size 40 12 @digits 3 @min -70 @max 10; #X obj 190 435 msg set; #X msg 260 435 @f4000 \$1; #X text 10 449 f500(db):; #X obj 12 468 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/flt.eq10~/slider7 @min -70 @max 10; +/gui/$1/flt.eq10~/slider7 @min -70 @max 10; #X obj 140 468 ui.number @size 40 12 @digits 3 @min -70 @max 10; #X obj 190 468 msg set; #X msg 260 468 @f500 \$1; #X text 10 482 f62(db):; #X obj 12 501 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/flt.eq10~/slider8 @min -70 @max 10; +/gui/$1/flt.eq10~/slider8 @min -70 @max 10; #X obj 140 501 ui.number @size 40 12 @digits 3 @min -70 @max 10; #X obj 190 501 msg set; #X msg 260 501 @f62 \$1; #X text 10 515 f8000(db):; #X obj 12 534 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/flt.eq10~/slider9 @min -70 @max 10; +/gui/$1/flt.eq10~/slider9 @min -70 @max 10; #X obj 140 534 ui.number @size 40 12 @digits 3 @min -70 @max 10; #X obj 190 534 msg set; #X msg 260 534 @f8000 \$1; diff --git a/ceammc/ext/abstractions/gflt.eq_peak_cq~.pd b/ceammc/ext/abstractions/gflt.eq_peak_cq~.pd index 891220271e..ff3e1800b7 100644 --- a/ceammc/ext/abstractions/gflt.eq_peak_cq~.pd +++ b/ceammc/ext/abstractions/gflt.eq_peak_cq~.pd @@ -13,19 +13,19 @@ -104026 -262144 0; #X text 10 218 freq(Hz):; #X obj 12 237 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/flt.eq_peak_cq~/slider0 @min 20 @max 20000; +/gui/$1/flt.eq_peak_cq~/slider0 @min 20 @max 20000; #X obj 140 237 ui.number @size 40 12 @digits 3 @min 20 @max 20000; #X obj 190 237 msg set; #X msg 260 237 @freq \$1; #X text 10 251 gain(db):; #X obj 12 270 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/flt.eq_peak_cq~/slider1 @min -15 @max 15; +/gui/$1/flt.eq_peak_cq~/slider1 @min -15 @max 15; #X obj 140 270 ui.number @size 40 12 @digits 3 @min -15 @max 15; #X obj 190 270 msg set; #X msg 260 270 @gain \$1; #X text 10 284 q:; #X obj 12 303 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/flt.eq_peak_cq~/slider2 @min 0.1 @max 100; +/gui/$1/flt.eq_peak_cq~/slider2 @min 0.1 @max 100; #X obj 140 303 ui.number @size 40 12 @digits 3 @min 0.1 @max 100; #X obj 190 303 msg set; #X msg 260 303 @q \$1; diff --git a/ceammc/ext/abstractions/gflt.eq_peak~.pd b/ceammc/ext/abstractions/gflt.eq_peak~.pd index 1709e02ee4..8d53cca829 100644 --- a/ceammc/ext/abstractions/gflt.eq_peak~.pd +++ b/ceammc/ext/abstractions/gflt.eq_peak~.pd @@ -13,19 +13,19 @@ -262144 0; #X text 10 218 bandwidth(Hz):; #X obj 12 237 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/flt.eq_peak~/slider0 @min 1 @max 5000; +/gui/$1/flt.eq_peak~/slider0 @min 1 @max 5000; #X obj 140 237 ui.number @size 40 12 @digits 3 @min 1 @max 5000; #X obj 190 237 msg set; #X msg 260 237 @bandwidth \$1; #X text 10 251 freq(Hz):; #X obj 12 270 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/flt.eq_peak~/slider1 @min 20 @max 20000; +/gui/$1/flt.eq_peak~/slider1 @min 20 @max 20000; #X obj 140 270 ui.number @size 40 12 @digits 3 @min 20 @max 20000; #X obj 190 270 msg set; #X msg 260 270 @freq \$1; #X text 10 284 gain(db):; #X obj 12 303 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/flt.eq_peak~/slider2 @min -15 @max 15; +/gui/$1/flt.eq_peak~/slider2 @min -15 @max 15; #X obj 140 303 ui.number @size 40 12 @digits 3 @min -15 @max 15; #X obj 190 303 msg set; #X msg 260 303 @gain \$1; diff --git a/ceammc/ext/abstractions/gflt.highshelf~.pd b/ceammc/ext/abstractions/gflt.highshelf~.pd index b3c05085cd..c1d6ffcc09 100644 --- a/ceammc/ext/abstractions/gflt.highshelf~.pd +++ b/ceammc/ext/abstractions/gflt.highshelf~.pd @@ -13,13 +13,13 @@ -104026 -262144 0; #X text 10 218 freq(Hz):; #X obj 12 237 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/flt.highshelf~/slider0 @min 20 @max 20000; +/gui/$1/flt.highshelf~/slider0 @min 20 @max 20000; #X obj 140 237 ui.number @size 40 12 @digits 3 @min 20 @max 20000; #X obj 190 237 msg set; #X msg 260 237 @freq \$1; #X text 10 251 gain(db):; #X obj 12 270 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/flt.highshelf~/slider1 @min -15 @max 15; +/gui/$1/flt.highshelf~/slider1 @min -15 @max 15; #X obj 140 270 ui.number @size 40 12 @digits 3 @min -15 @max 15; #X obj 190 270 msg set; #X msg 260 270 @gain \$1; diff --git a/ceammc/ext/abstractions/gflt.hpf12~.pd b/ceammc/ext/abstractions/gflt.hpf12~.pd index c4de78d572..f85c293428 100644 --- a/ceammc/ext/abstractions/gflt.hpf12~.pd +++ b/ceammc/ext/abstractions/gflt.hpf12~.pd @@ -13,7 +13,7 @@ -262144 0; #X text 10 218 freq(Hz):; #X obj 12 237 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/flt.hpf12~/slider0 @min 20 @max 20000; +/gui/$1/flt.hpf12~/slider0 @min 20 @max 20000; #X obj 140 237 ui.number @size 40 12 @digits 3 @min 20 @max 20000; #X obj 190 237 msg set; #X msg 260 237 @freq \$1; diff --git a/ceammc/ext/abstractions/gflt.hpf24~.pd b/ceammc/ext/abstractions/gflt.hpf24~.pd index e84a96e9ef..b3cd7c1d3c 100644 --- a/ceammc/ext/abstractions/gflt.hpf24~.pd +++ b/ceammc/ext/abstractions/gflt.hpf24~.pd @@ -13,7 +13,7 @@ -262144 0; #X text 10 218 freq(Hz):; #X obj 12 237 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/flt.hpf24~/slider0 @min 20 @max 20000; +/gui/$1/flt.hpf24~/slider0 @min 20 @max 20000; #X obj 140 237 ui.number @size 40 12 @digits 3 @min 20 @max 20000; #X obj 190 237 msg set; #X msg 260 237 @freq \$1; diff --git a/ceammc/ext/abstractions/gflt.lowshelf~.pd b/ceammc/ext/abstractions/gflt.lowshelf~.pd index 760f6d375b..7b752c18b0 100644 --- a/ceammc/ext/abstractions/gflt.lowshelf~.pd +++ b/ceammc/ext/abstractions/gflt.lowshelf~.pd @@ -13,13 +13,13 @@ -262144 0; #X text 10 218 freq(Hz):; #X obj 12 237 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/flt.lowshelf~/slider0 @min 20 @max 20000; +/gui/$1/flt.lowshelf~/slider0 @min 20 @max 20000; #X obj 140 237 ui.number @size 40 12 @digits 3 @min 20 @max 20000; #X obj 190 237 msg set; #X msg 260 237 @freq \$1; #X text 10 251 gain(db):; #X obj 12 270 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/flt.lowshelf~/slider1 @min -15 @max 15; +/gui/$1/flt.lowshelf~/slider1 @min -15 @max 15; #X obj 140 270 ui.number @size 40 12 @digits 3 @min -15 @max 15; #X obj 190 270 msg set; #X msg 260 270 @gain \$1; diff --git a/ceammc/ext/abstractions/gflt.lpf12~.pd b/ceammc/ext/abstractions/gflt.lpf12~.pd index 2c3833fd11..df5403f3c2 100644 --- a/ceammc/ext/abstractions/gflt.lpf12~.pd +++ b/ceammc/ext/abstractions/gflt.lpf12~.pd @@ -13,7 +13,7 @@ -262144 0; #X text 10 218 freq(Hz):; #X obj 12 237 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/flt.lpf12~/slider0 @min 20 @max 20000; +/gui/$1/flt.lpf12~/slider0 @min 20 @max 20000; #X obj 140 237 ui.number @size 40 12 @digits 3 @min 20 @max 20000; #X obj 190 237 msg set; #X msg 260 237 @freq \$1; diff --git a/ceammc/ext/abstractions/gflt.lpf24~.pd b/ceammc/ext/abstractions/gflt.lpf24~.pd index b1808ef6fe..a17799f54e 100644 --- a/ceammc/ext/abstractions/gflt.lpf24~.pd +++ b/ceammc/ext/abstractions/gflt.lpf24~.pd @@ -13,7 +13,7 @@ -262144 0; #X text 10 218 freq(Hz):; #X obj 12 237 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/flt.lpf24~/slider0 @min 20 @max 20000; +/gui/$1/flt.lpf24~/slider0 @min 20 @max 20000; #X obj 140 237 ui.number @size 40 12 @digits 3 @min 20 @max 20000; #X obj 190 237 msg set; #X msg 260 237 @freq \$1; diff --git a/ceammc/ext/abstractions/gflt.moog_vcf~.pd b/ceammc/ext/abstractions/gflt.moog_vcf~.pd index 7b17382324..79a8b1eee9 100644 --- a/ceammc/ext/abstractions/gflt.moog_vcf~.pd +++ b/ceammc/ext/abstractions/gflt.moog_vcf~.pd @@ -14,7 +14,7 @@ -262144 0; #X text 10 218 res:; #X obj 12 237 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/flt.moog_vcf~/slider0 @min 0 @max 1; +/gui/$1/flt.moog_vcf~/slider0 @min 0 @max 1; #X obj 140 237 ui.number @size 40 12 @digits 3 @min 0 @max 1; #X obj 190 237 msg set; #X msg 260 237 @res \$1; diff --git a/ceammc/ext/abstractions/gflt.notch~.pd b/ceammc/ext/abstractions/gflt.notch~.pd index 4066e60b49..160dce1e2c 100644 --- a/ceammc/ext/abstractions/gflt.notch~.pd +++ b/ceammc/ext/abstractions/gflt.notch~.pd @@ -13,13 +13,13 @@ -262144 0; #X text 10 218 freq(Hz):; #X obj 12 237 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/flt.notch~/slider0 @min 20 @max 20000; +/gui/$1/flt.notch~/slider0 @min 20 @max 20000; #X obj 140 237 ui.number @size 40 12 @digits 3 @min 20 @max 20000; #X obj 190 237 msg set; #X msg 260 237 @freq \$1; #X text 10 251 width(Hz):; #X obj 12 270 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/flt.notch~/slider1 @min 1 @max 10000; +/gui/$1/flt.notch~/slider1 @min 1 @max 10000; #X obj 140 270 ui.number @size 40 12 @digits 3 @min 1 @max 10000; #X obj 190 270 msg set; #X msg 260 270 @width \$1; diff --git a/ceammc/ext/abstractions/gflt.resonbp~.pd b/ceammc/ext/abstractions/gflt.resonbp~.pd index 781debf4f1..6f3c98b59e 100644 --- a/ceammc/ext/abstractions/gflt.resonbp~.pd +++ b/ceammc/ext/abstractions/gflt.resonbp~.pd @@ -13,13 +13,13 @@ -262144 0; #X text 10 218 freq(Hz):; #X obj 12 237 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/flt.resonbp~/slider0 @min 20 @max 20000; +/gui/$1/flt.resonbp~/slider0 @min 20 @max 20000; #X obj 140 237 ui.number @size 40 12 @digits 3 @min 20 @max 20000; #X obj 190 237 msg set; #X msg 260 237 @freq \$1; #X text 10 251 q:; #X obj 12 270 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/flt.resonbp~/slider1 @min 0.1 @max 300; +/gui/$1/flt.resonbp~/slider1 @min 0.1 @max 300; #X obj 140 270 ui.number @size 40 12 @digits 3 @min 0.1 @max 300; #X obj 190 270 msg set; #X msg 260 270 @q \$1; diff --git a/ceammc/ext/abstractions/gfx.bitdown~.pd b/ceammc/ext/abstractions/gfx.bitdown~.pd index 8e0792be7f..8df28406bf 100644 --- a/ceammc/ext/abstractions/gfx.bitdown~.pd +++ b/ceammc/ext/abstractions/gfx.bitdown~.pd @@ -13,17 +13,17 @@ -262144 0; #X text 10 218 bits:; #X obj 12 237 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/fx.bitdown~/slider0 @min 1 @max 16; +/gui/$1/fx.bitdown~/slider0 @min 1 @max 16; #X obj 140 237 ui.number @size 40 12 @digits 3 @min 1 @max 16; #X obj 190 237 msg set; #X msg 260 237 @bits \$1; #X obj 12 259 ui.toggle @size 12 12 @presetname -/gui/fx.bitdown~/checkbox1; +/gui/$1/fx.bitdown~/checkbox1; #X text 26 254 bypass; #X msg 260 251 @bypass \$1; #X text 10 271 downsamp:; #X obj 12 290 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/fx.bitdown~/slider2 @min 1 @max 200; +/gui/$1/fx.bitdown~/slider2 @min 1 @max 200; #X obj 140 290 ui.number @size 40 12 @digits 3 @min 1 @max 200; #X obj 190 290 msg set; #X msg 260 290 @downsamp \$1; diff --git a/ceammc/ext/abstractions/gfx.chorus~.pd b/ceammc/ext/abstractions/gfx.chorus~.pd index debed3b1f9..0dfa28f292 100644 --- a/ceammc/ext/abstractions/gfx.chorus~.pd +++ b/ceammc/ext/abstractions/gfx.chorus~.pd @@ -12,30 +12,30 @@ #X obj 3 202 cnv 8 198 18 empty empty [fx.chorus~] 3 9 0 12 -104026 -262144 0; #X obj 12 226 ui.toggle @size 12 12 @presetname -/gui/fx.chorus~/checkbox0; +/gui/$1/fx.chorus~/checkbox0; #X text 26 221 bypass; #X msg 260 218 @bypass \$1; #X text 10 238 delay(ms):; #X obj 12 257 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/fx.chorus~/slider1 @min 0 @max 200; +/gui/$1/fx.chorus~/slider1 @min 0 @max 200; #X obj 140 257 ui.number @size 40 12 @digits 3 @min 0 @max 200; #X obj 190 257 msg set; #X msg 260 257 @delay \$1; #X text 10 271 depth:; #X obj 12 290 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/fx.chorus~/slider2 @min 0 @max 1; +/gui/$1/fx.chorus~/slider2 @min 0 @max 1; #X obj 140 290 ui.number @size 40 12 @digits 3 @min 0 @max 1; #X obj 190 290 msg set; #X msg 260 290 @depth \$1; #X text 10 304 drywet:; #X obj 12 323 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/fx.chorus~/slider3 @min 0 @max 1; +/gui/$1/fx.chorus~/slider3 @min 0 @max 1; #X obj 140 323 ui.number @size 40 12 @digits 3 @min 0 @max 1; #X obj 190 323 msg set; #X msg 260 323 @drywet \$1; #X text 10 337 freq(Hz):; #X obj 12 356 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/fx.chorus~/slider4 @min 0 @max 10; +/gui/$1/fx.chorus~/slider4 @min 0 @max 10; #X obj 140 356 ui.number @size 40 12 @digits 3 @min 0 @max 10; #X obj 190 356 msg set; #X msg 260 356 @freq \$1; diff --git a/ceammc/ext/abstractions/gfx.distortion1~.pd b/ceammc/ext/abstractions/gfx.distortion1~.pd index 47b7029cf4..8c67c66116 100644 --- a/ceammc/ext/abstractions/gfx.distortion1~.pd +++ b/ceammc/ext/abstractions/gfx.distortion1~.pd @@ -17,123 +17,123 @@ -104026 -262144 0; #X text 10 218 drive:; #X obj 12 237 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/fx.distortion1~/slider0 @min 0 @max 1; +/gui/$1/fx.distortion1~/slider0 @min 0 @max 1; #X obj 140 237 ui.number @size 40 12 @digits 3 @min 0 @max 1; #X obj 190 237 msg set; #X msg 260 237 @drive \$1; #X text 10 251 gain(db):; #X obj 12 270 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/fx.distortion1~/slider1 @min -10 @max 10; +/gui/$1/fx.distortion1~/slider1 @min -10 @max 10; #X obj 140 270 ui.number @size 40 12 @digits 3 @min -10 @max 10; #X obj 190 270 msg set; #X msg 260 270 @gain \$1; #X text 10 284 high_drive:; #X obj 12 303 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/fx.distortion1~/slider2 @min 0 @max 1; +/gui/$1/fx.distortion1~/slider2 @min 0 @max 1; #X obj 140 303 ui.number @size 40 12 @digits 3 @min 0 @max 1; #X obj 190 303 msg set; #X msg 260 303 @high_drive \$1; #X text 10 317 high_gain(db):; #X obj 12 336 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/fx.distortion1~/slider3 @min -10 @max 20; +/gui/$1/fx.distortion1~/slider3 @min -10 @max 20; #X obj 140 336 ui.number @size 40 12 @digits 3 @min -10 @max 20; #X obj 190 336 msg set; #X msg 260 336 @high_gain \$1; #X text 10 350 level:; #X obj 12 369 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/fx.distortion1~/slider4 @min 0 @max 0.5; +/gui/$1/fx.distortion1~/slider4 @min 0 @max 0.5; #X obj 140 369 ui.number @size 40 12 @digits 3 @min 0 @max 0.5; #X obj 190 369 msg set; #X msg 260 369 @level \$1; #X text 10 383 low_drive:; #X obj 12 402 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/fx.distortion1~/slider5 @min 0 @max 1; +/gui/$1/fx.distortion1~/slider5 @min 0 @max 1; #X obj 140 402 ui.number @size 40 12 @digits 3 @min 0 @max 1; #X obj 190 402 msg set; #X msg 260 402 @low_drive \$1; #X text 10 416 low_gain(db):; #X obj 12 435 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/fx.distortion1~/slider6 @min -10 @max 20; +/gui/$1/fx.distortion1~/slider6 @min -10 @max 20; #X obj 140 435 ui.number @size 40 12 @digits 3 @min -10 @max 20; #X obj 190 435 msg set; #X msg 260 435 @low_gain \$1; #X text 10 449 sp_high_freq(Hz):; #X obj 12 468 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/fx.distortion1~/slider7 @min 1000 @max 12000; +/gui/$1/fx.distortion1~/slider7 @min 1000 @max 12000; #X obj 140 468 ui.number @size 40 12 @digits 3 @min 1000 @max 12000; #X obj 190 468 msg set; #X msg 260 468 @sp_high_freq \$1; #X text 10 482 sp_low_freq(Hz):; #X obj 12 501 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/fx.distortion1~/slider8 @min 20 @max 1000; +/gui/$1/fx.distortion1~/slider8 @min 20 @max 1000; #X obj 140 501 ui.number @size 40 12 @digits 3 @min 20 @max 1000; #X obj 190 501 msg set; #X msg 260 501 @sp_low_freq \$1; #X obj 12 523 ui.toggle @size 12 12 @presetname -/gui/fx.distortion1~/checkbox9; +/gui/$1/fx.distortion1~/checkbox9; #X text 26 518 sp_on_off; #X msg 260 515 @sp_on_off \$1; #X obj 12 543 ui.toggle @size 12 12 @presetname -/gui/fx.distortion1~/checkbox10; +/gui/$1/fx.distortion1~/checkbox10; #X text 26 538 flt_on_off; #X msg 260 535 @flt_on_off \$1; #X text 10 555 hp_freq:; #X obj 12 574 ui.number @size 60 12 @presetname -/gui/fx.distortion1~/numbox11 @min 20 @max 7040 @step 10; +/gui/$1/fx.distortion1~/numbox11 @min 20 @max 7040 @step 10; #X msg 260 574 @hp_freq \$1; #X text 10 588 lp_freq:; #X obj 12 607 ui.number @size 60 12 @presetname -/gui/fx.distortion1~/numbox12 @min 20 @max 12000 @step 10; +/gui/$1/fx.distortion1~/numbox12 @min 20 @max 12000 @step 10; #X msg 260 607 @lp_freq \$1; #X text 10 621 middle_h_drive:; #X obj 12 640 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/fx.distortion1~/slider13 @min 0 @max 1; +/gui/$1/fx.distortion1~/slider13 @min 0 @max 1; #X obj 140 640 ui.number @size 40 12 @digits 3 @min 0 @max 1; #X obj 190 640 msg set; #X msg 260 640 @middle_h_drive \$1; #X text 10 654 middle_h_gain(db):; #X obj 12 673 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/fx.distortion1~/slider14 @min -10 @max 20; +/gui/$1/fx.distortion1~/slider14 @min -10 @max 20; #X obj 140 673 ui.number @size 40 12 @digits 3 @min -10 @max 20; #X obj 190 673 msg set; #X msg 260 673 @middle_h_gain \$1; #X text 10 687 middle_l_drive:; #X obj 12 706 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/fx.distortion1~/slider15 @min 0 @max 1; +/gui/$1/fx.distortion1~/slider15 @min 0 @max 1; #X obj 140 706 ui.number @size 40 12 @digits 3 @min 0 @max 1; #X obj 190 706 msg set; #X msg 260 706 @middle_l_drive \$1; #X text 10 720 middle_l_gain(db):; #X obj 12 739 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/fx.distortion1~/slider16 @min -10 @max 20; +/gui/$1/fx.distortion1~/slider16 @min -10 @max 20; #X obj 140 739 ui.number @size 40 12 @digits 3 @min -10 @max 20; #X obj 190 739 msg set; #X msg 260 739 @middle_l_gain \$1; #X obj 12 761 ui.toggle @size 12 12 @presetname -/gui/fx.distortion1~/checkbox17; +/gui/$1/fx.distortion1~/checkbox17; #X text 26 756 res_on_off; #X msg 260 753 @res_on_off \$1; #X text 10 773 split_high_freq:; #X obj 12 792 ui.number @size 60 12 @presetname -/gui/fx.distortion1~/numbox18 @min 1250 @max 12000 @step 10; +/gui/$1/fx.distortion1~/numbox18 @min 1250 @max 12000 @step 10; #X msg 260 792 @split_high_freq \$1; #X text 10 806 split_low_freq:; #X obj 12 825 ui.number @size 60 12 @presetname -/gui/fx.distortion1~/numbox19 @min 20 @max 600 @step 10; +/gui/$1/fx.distortion1~/numbox19 @min 20 @max 600 @step 10; #X msg 260 825 @split_low_freq \$1; #X text 10 839 split_middle_freq:; #X obj 12 858 ui.number @size 60 12 @presetname -/gui/fx.distortion1~/numbox20 @min 600 @max 1250 @step 10; +/gui/$1/fx.distortion1~/numbox20 @min 600 @max 1250 @step 10; #X msg 260 858 @split_middle_freq \$1; #X text 10 872 trigger:; #X obj 12 891 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/fx.distortion1~/slider21 @min 0 @max 1; +/gui/$1/fx.distortion1~/slider21 @min 0 @max 1; #X obj 140 891 ui.number @size 40 12 @digits 3 @min 0 @max 1; #X obj 190 891 msg set; #X msg 260 891 @trigger \$1; #X text 10 905 vibrato:; #X obj 12 924 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/fx.distortion1~/slider22 @min 0 @max 1; +/gui/$1/fx.distortion1~/slider22 @min 0 @max 1; #X obj 140 924 ui.number @size 40 12 @digits 3 @min 0 @max 1; #X obj 190 924 msg set; #X msg 260 924 @vibrato \$1; diff --git a/ceammc/ext/abstractions/gfx.distortion2~.pd b/ceammc/ext/abstractions/gfx.distortion2~.pd index e0b1469996..7d7dc66e47 100644 --- a/ceammc/ext/abstractions/gfx.distortion2~.pd +++ b/ceammc/ext/abstractions/gfx.distortion2~.pd @@ -15,63 +15,63 @@ -104026 -262144 0; #X text 10 218 drive:; #X obj 12 237 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/fx.distortion2~/slider0 @min 0 @max 1; +/gui/$1/fx.distortion2~/slider0 @min 0 @max 1; #X obj 140 237 ui.number @size 40 12 @digits 3 @min 0 @max 1; #X obj 190 237 msg set; #X msg 260 237 @drive \$1; #X text 10 251 gain(db):; #X obj 12 270 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/fx.distortion2~/slider1 @min -10 @max 10; +/gui/$1/fx.distortion2~/slider1 @min -10 @max 10; #X obj 140 270 ui.number @size 40 12 @digits 3 @min -10 @max 10; #X obj 190 270 msg set; #X msg 260 270 @gain \$1; #X text 10 284 level:; #X obj 12 303 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/fx.distortion2~/slider2 @min 0 @max 0.5; +/gui/$1/fx.distortion2~/slider2 @min 0 @max 0.5; #X obj 140 303 ui.number @size 40 12 @digits 3 @min 0 @max 0.5; #X obj 190 303 msg set; #X msg 260 303 @level \$1; #X text 10 317 sp_high_freq(Hz):; #X obj 12 336 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/fx.distortion2~/slider3 @min 1000 @max 12000; +/gui/$1/fx.distortion2~/slider3 @min 1000 @max 12000; #X obj 140 336 ui.number @size 40 12 @digits 3 @min 1000 @max 12000; #X obj 190 336 msg set; #X msg 260 336 @sp_high_freq \$1; #X text 10 350 sp_low_freq(Hz):; #X obj 12 369 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/fx.distortion2~/slider4 @min 20 @max 1000; +/gui/$1/fx.distortion2~/slider4 @min 20 @max 1000; #X obj 140 369 ui.number @size 40 12 @digits 3 @min 20 @max 1000; #X obj 190 369 msg set; #X msg 260 369 @sp_low_freq \$1; #X obj 12 391 ui.toggle @size 12 12 @presetname -/gui/fx.distortion2~/checkbox5; +/gui/$1/fx.distortion2~/checkbox5; #X text 26 386 sp_on_off; #X msg 260 383 @sp_on_off \$1; #X obj 12 411 ui.toggle @size 12 12 @presetname -/gui/fx.distortion2~/checkbox6; +/gui/$1/fx.distortion2~/checkbox6; #X text 26 406 flt_on_off; #X msg 260 403 @flt_on_off \$1; #X text 10 423 hp_freq:; #X obj 12 442 ui.number @size 60 12 @presetname -/gui/fx.distortion2~/numbox7 @min 20 @max 7040 @step 10; +/gui/$1/fx.distortion2~/numbox7 @min 20 @max 7040 @step 10; #X msg 260 442 @hp_freq \$1; #X text 10 456 lp_freq:; #X obj 12 475 ui.number @size 60 12 @presetname -/gui/fx.distortion2~/numbox8 @min 20 @max 12000 @step 10; +/gui/$1/fx.distortion2~/numbox8 @min 20 @max 12000 @step 10; #X msg 260 475 @lp_freq \$1; #X obj 12 497 ui.toggle @size 12 12 @presetname -/gui/fx.distortion2~/checkbox9; +/gui/$1/fx.distortion2~/checkbox9; #X text 26 492 res_on_off; #X msg 260 489 @res_on_off \$1; #X text 10 509 trigger:; #X obj 12 528 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/fx.distortion2~/slider10 @min 0 @max 1; +/gui/$1/fx.distortion2~/slider10 @min 0 @max 1; #X obj 140 528 ui.number @size 40 12 @digits 3 @min 0 @max 1; #X obj 190 528 msg set; #X msg 260 528 @trigger \$1; #X text 10 542 vibrato:; #X obj 12 561 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/fx.distortion2~/slider11 @min 0 @max 1; +/gui/$1/fx.distortion2~/slider11 @min 0 @max 1; #X obj 140 561 ui.number @size 40 12 @digits 3 @min 0 @max 1; #X obj 190 561 msg set; #X msg 260 561 @vibrato \$1; diff --git a/ceammc/ext/abstractions/gfx.distortion3~.pd b/ceammc/ext/abstractions/gfx.distortion3~.pd index e951ad7e81..7663cf5501 100644 --- a/ceammc/ext/abstractions/gfx.distortion3~.pd +++ b/ceammc/ext/abstractions/gfx.distortion3~.pd @@ -12,36 +12,36 @@ #X obj 3 202 cnv 8 198 18 empty empty [fx.distortion3~] 3 9 0 12 -104026 -262144 0; #X obj 12 226 ui.toggle @size 12 12 @presetname -/gui/fx.distortion3~/checkbox0; +/gui/$1/fx.distortion3~/checkbox0; #X text 26 221 bypass; #X msg 260 218 @bypass \$1; #X text 10 238 drive:; #X obj 12 257 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/fx.distortion3~/slider1 @min 0 @max 1; +/gui/$1/fx.distortion3~/slider1 @min 0 @max 1; #X obj 140 257 ui.number @size 40 12 @digits 3 @min 0 @max 1; #X obj 190 257 msg set; #X msg 260 257 @drive \$1; #X text 10 271 drywet:; #X obj 12 290 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/fx.distortion3~/slider2 @min 0 @max 1; +/gui/$1/fx.distortion3~/slider2 @min 0 @max 1; #X obj 140 290 ui.number @size 40 12 @digits 3 @min 0 @max 1; #X obj 190 290 msg set; #X msg 260 290 @drywet \$1; #X text 10 304 gain(db):; #X obj 12 323 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/fx.distortion3~/slider3 @min -30 @max 10; +/gui/$1/fx.distortion3~/slider3 @min -30 @max 10; #X obj 140 323 ui.number @size 40 12 @digits 3 @min -30 @max 10; #X obj 190 323 msg set; #X msg 260 323 @gain \$1; #X text 10 337 hp_freq(Hz):; #X obj 12 356 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/fx.distortion3~/slider4 @min 20 @max 2000; +/gui/$1/fx.distortion3~/slider4 @min 20 @max 2000; #X obj 140 356 ui.number @size 40 12 @digits 3 @min 20 @max 2000; #X obj 190 356 msg set; #X msg 260 356 @hp_freq \$1; #X text 10 370 lp_freq(Hz):; #X obj 12 389 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/fx.distortion3~/slider5 @min 1000 @max 20000; +/gui/$1/fx.distortion3~/slider5 @min 1000 @max 20000; #X obj 140 389 ui.number @size 40 12 @digits 3 @min 1000 @max 20000; #X obj 190 389 msg set; #X msg 260 389 @lp_freq \$1; diff --git a/ceammc/ext/abstractions/gfx.distortion~.pd b/ceammc/ext/abstractions/gfx.distortion~.pd index ee68a25d80..25c744a883 100644 --- a/ceammc/ext/abstractions/gfx.distortion~.pd +++ b/ceammc/ext/abstractions/gfx.distortion~.pd @@ -12,24 +12,24 @@ #X obj 3 202 cnv 8 198 18 empty empty [fx.distortion~] 3 9 0 12 -104026 -262144 0; #X obj 12 226 ui.toggle @size 12 12 @presetname -/gui/fx.distortion~/checkbox0; +/gui/$1/fx.distortion~/checkbox0; #X text 26 221 bypass; #X msg 260 218 @bypass \$1; #X text 10 238 drive:; #X obj 12 257 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/fx.distortion~/slider1 @min 0 @max 1; +/gui/$1/fx.distortion~/slider1 @min 0 @max 1; #X obj 140 257 ui.number @size 40 12 @digits 3 @min 0 @max 1; #X obj 190 257 msg set; #X msg 260 257 @drive \$1; #X text 10 271 drywet:; #X obj 12 290 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/fx.distortion~/slider2 @min 0 @max 1; +/gui/$1/fx.distortion~/slider2 @min 0 @max 1; #X obj 140 290 ui.number @size 40 12 @digits 3 @min 0 @max 1; #X obj 190 290 msg set; #X msg 260 290 @drywet \$1; #X text 10 304 offset:; #X obj 12 323 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/fx.distortion~/slider3 @min 0 @max 0.5; +/gui/$1/fx.distortion~/slider3 @min 0 @max 0.5; #X obj 140 323 ui.number @size 40 12 @digits 3 @min 0 @max 0.5; #X obj 190 323 msg set; #X msg 260 323 @offset \$1; diff --git a/ceammc/ext/abstractions/gfx.drive~.pd b/ceammc/ext/abstractions/gfx.drive~.pd index 22d81176f0..d048add634 100644 --- a/ceammc/ext/abstractions/gfx.drive~.pd +++ b/ceammc/ext/abstractions/gfx.drive~.pd @@ -12,12 +12,12 @@ #X obj 3 202 cnv 8 198 18 empty empty [fx.drive~] 3 9 0 12 -104026 -262144 0; #X obj 12 226 ui.toggle @size 12 12 @presetname -/gui/fx.drive~/checkbox0; +/gui/$1/fx.drive~/checkbox0; #X text 26 221 bypass; #X msg 260 218 @bypass \$1; #X text 10 238 drive:; #X obj 12 257 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/fx.drive~/slider1 @min 1 @max 10; +/gui/$1/fx.drive~/slider1 @min 1 @max 10; #X obj 140 257 ui.number @size 40 12 @digits 3 @min 1 @max 10; #X obj 190 257 msg set; #X msg 260 257 @drive \$1; diff --git a/ceammc/ext/abstractions/gfx.drone_box~.pd b/ceammc/ext/abstractions/gfx.drone_box~.pd index 8a8bd186b6..4232fb5318 100644 --- a/ceammc/ext/abstractions/gfx.drone_box~.pd +++ b/ceammc/ext/abstractions/gfx.drone_box~.pd @@ -12,24 +12,24 @@ #X obj 3 202 cnv 8 198 18 empty empty [fx.drone_box~] 3 9 0 12 -104026 -262144 0; #X obj 12 226 ui.toggle @size 12 12 @presetname -/gui/fx.drone_box~/checkbox0; +/gui/$1/fx.drone_box~/checkbox0; #X text 26 221 bypass; #X msg 260 218 @bypass \$1; #X text 10 238 decay(ms):; #X obj 12 257 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/fx.drone_box~/slider1 @min 100 @max 120000; +/gui/$1/fx.drone_box~/slider1 @min 100 @max 120000; #X obj 140 257 ui.number @size 40 12 @digits 3 @min 100 @max 120000; #X obj 190 257 msg set; #X msg 260 257 @decay \$1; #X text 10 271 drywet:; #X obj 12 290 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/fx.drone_box~/slider2 @min 0 @max 1; +/gui/$1/fx.drone_box~/slider2 @min 0 @max 1; #X obj 140 290 ui.number @size 40 12 @digits 3 @min 0 @max 1; #X obj 190 290 msg set; #X msg 260 290 @drywet \$1; #X text 10 304 pitch(semitones):; #X obj 12 323 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/fx.drone_box~/slider3 @min 36 @max 60; +/gui/$1/fx.drone_box~/slider3 @min 36 @max 60; #X obj 140 323 ui.number @size 40 12 @digits 3 @min 36 @max 60; #X obj 190 323 msg set; #X msg 260 323 @pitch \$1; diff --git a/ceammc/ext/abstractions/gfx.echo~.pd b/ceammc/ext/abstractions/gfx.echo~.pd index edf92fb332..79295f8032 100644 --- a/ceammc/ext/abstractions/gfx.echo~.pd +++ b/ceammc/ext/abstractions/gfx.echo~.pd @@ -12,24 +12,24 @@ #X obj 3 202 cnv 8 198 18 empty empty [fx.echo~] 3 9 0 12 -104026 -262144 0; #X obj 12 226 ui.toggle @size 12 12 @presetname -/gui/fx.echo~/checkbox0; +/gui/$1/fx.echo~/checkbox0; #X text 26 221 bypass; #X msg 260 218 @bypass \$1; #X text 10 238 delay(ms):; #X obj 12 257 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/fx.echo~/slider1 @min 10 @max 10000; +/gui/$1/fx.echo~/slider1 @min 10 @max 10000; #X obj 140 257 ui.number @size 40 12 @digits 3 @min 10 @max 10000; #X obj 190 257 msg set; #X msg 260 257 @delay \$1; #X text 10 271 drywet:; #X obj 12 290 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/fx.echo~/slider2 @min 0 @max 1; +/gui/$1/fx.echo~/slider2 @min 0 @max 1; #X obj 140 290 ui.number @size 40 12 @digits 3 @min 0 @max 1; #X obj 190 290 msg set; #X msg 260 290 @drywet \$1; #X text 10 304 feedback:; #X obj 12 323 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/fx.echo~/slider3 @min 0 @max 0.99; +/gui/$1/fx.echo~/slider3 @min 0 @max 0.99; #X obj 140 323 ui.number @size 40 12 @digits 3 @min 0 @max 0.99; #X obj 190 323 msg set; #X msg 260 323 @feedback \$1; diff --git a/ceammc/ext/abstractions/gfx.flanger~.pd b/ceammc/ext/abstractions/gfx.flanger~.pd index deb3f9b500..09cda94931 100644 --- a/ceammc/ext/abstractions/gfx.flanger~.pd +++ b/ceammc/ext/abstractions/gfx.flanger~.pd @@ -13,40 +13,40 @@ #X obj 3 202 cnv 8 198 18 empty empty [fx.flanger~] 3 9 0 12 -104026 -262144 0; #X obj 12 226 ui.toggle @size 12 12 @presetname -/gui/fx.flanger~/checkbox0; +/gui/$1/fx.flanger~/checkbox0; #X text 26 221 bypass; #X msg 260 218 @bypass \$1; #X text 10 238 delay(ms):; #X obj 12 257 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/fx.flanger~/slider1 @min 0 @max 20; +/gui/$1/fx.flanger~/slider1 @min 0 @max 20; #X obj 140 257 ui.number @size 40 12 @digits 3 @min 0 @max 20; #X obj 190 257 msg set; #X msg 260 257 @delay \$1; #X text 10 271 drywet:; #X obj 12 290 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/fx.flanger~/slider2 @min 0 @max 1; +/gui/$1/fx.flanger~/slider2 @min 0 @max 1; #X obj 140 290 ui.number @size 40 12 @digits 3 @min 0 @max 1; #X obj 190 290 msg set; #X msg 260 290 @drywet \$1; #X text 10 304 feedback:; #X obj 12 323 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/fx.flanger~/slider3 @min 0 @max 1; +/gui/$1/fx.flanger~/slider3 @min 0 @max 1; #X obj 140 323 ui.number @size 40 12 @digits 3 @min 0 @max 1; #X obj 190 323 msg set; #X msg 260 323 @feedback \$1; #X obj 12 345 ui.toggle @size 12 12 @presetname -/gui/fx.flanger~/checkbox4; +/gui/$1/fx.flanger~/checkbox4; #X text 26 340 invert; #X msg 260 337 @invert \$1; #X text 10 357 offset(ms):; #X obj 12 376 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/fx.flanger~/slider5 @min 0 @max 20; +/gui/$1/fx.flanger~/slider5 @min 0 @max 20; #X obj 140 376 ui.number @size 40 12 @digits 3 @min 0 @max 20; #X obj 190 376 msg set; #X msg 260 376 @offset \$1; #X text 10 390 speed(Hz):; #X obj 12 409 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/fx.flanger~/slider6 @min 0 @max 10; +/gui/$1/fx.flanger~/slider6 @min 0 @max 10; #X obj 140 409 ui.number @size 40 12 @digits 3 @min 0 @max 10; #X obj 190 409 msg set; #X msg 260 409 @speed \$1; diff --git a/ceammc/ext/abstractions/gfx.freeverb2~.pd b/ceammc/ext/abstractions/gfx.freeverb2~.pd index dca52b6730..ba3feaa658 100644 --- a/ceammc/ext/abstractions/gfx.freeverb2~.pd +++ b/ceammc/ext/abstractions/gfx.freeverb2~.pd @@ -14,24 +14,24 @@ #X obj 3 202 cnv 8 198 18 empty empty [fx.freeverb2~] 3 9 0 12 -104026 -262144 0; #X obj 12 226 ui.toggle @size 12 12 @presetname -/gui/fx.freeverb2~/checkbox0; +/gui/$1/fx.freeverb2~/checkbox0; #X text 26 221 bypass; #X msg 260 218 @bypass \$1; #X text 10 238 damp:; #X obj 12 257 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/fx.freeverb2~/slider1 @min 0 @max 1; +/gui/$1/fx.freeverb2~/slider1 @min 0 @max 1; #X obj 140 257 ui.number @size 40 12 @digits 3 @min 0 @max 1; #X obj 190 257 msg set; #X msg 260 257 @damp \$1; #X text 10 271 drywet:; #X obj 12 290 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/fx.freeverb2~/slider2 @min 0 @max 1; +/gui/$1/fx.freeverb2~/slider2 @min 0 @max 1; #X obj 140 290 ui.number @size 40 12 @digits 3 @min 0 @max 1; #X obj 190 290 msg set; #X msg 260 290 @drywet \$1; #X text 10 304 room:; #X obj 12 323 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/fx.freeverb2~/slider3 @min 0 @max 1; +/gui/$1/fx.freeverb2~/slider3 @min 0 @max 1; #X obj 140 323 ui.number @size 40 12 @digits 3 @min 0 @max 1; #X obj 190 323 msg set; #X msg 260 323 @room \$1; diff --git a/ceammc/ext/abstractions/gfx.freeverb~.pd b/ceammc/ext/abstractions/gfx.freeverb~.pd index 7f6ee34ba5..27487bd72c 100644 --- a/ceammc/ext/abstractions/gfx.freeverb~.pd +++ b/ceammc/ext/abstractions/gfx.freeverb~.pd @@ -12,24 +12,24 @@ #X obj 3 202 cnv 8 198 18 empty empty [fx.freeverb~] 3 9 0 12 -104026 -262144 0; #X obj 12 226 ui.toggle @size 12 12 @presetname -/gui/fx.freeverb~/checkbox0; +/gui/$1/fx.freeverb~/checkbox0; #X text 26 221 bypass; #X msg 260 218 @bypass \$1; #X text 10 238 damp:; #X obj 12 257 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/fx.freeverb~/slider1 @min 0 @max 1; +/gui/$1/fx.freeverb~/slider1 @min 0 @max 1; #X obj 140 257 ui.number @size 40 12 @digits 3 @min 0 @max 1; #X obj 190 257 msg set; #X msg 260 257 @damp \$1; #X text 10 271 drywet:; #X obj 12 290 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/fx.freeverb~/slider2 @min 0 @max 1; +/gui/$1/fx.freeverb~/slider2 @min 0 @max 1; #X obj 140 290 ui.number @size 40 12 @digits 3 @min 0 @max 1; #X obj 190 290 msg set; #X msg 260 290 @drywet \$1; #X text 10 304 room:; #X obj 12 323 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/fx.freeverb~/slider3 @min 0 @max 1; +/gui/$1/fx.freeverb~/slider3 @min 0 @max 1; #X obj 140 323 ui.number @size 40 12 @digits 3 @min 0 @max 1; #X obj 190 323 msg set; #X msg 260 323 @room \$1; diff --git a/ceammc/ext/abstractions/gfx.granulator~.pd b/ceammc/ext/abstractions/gfx.granulator~.pd index 75b69f5710..aefa4bb09a 100644 --- a/ceammc/ext/abstractions/gfx.granulator~.pd +++ b/ceammc/ext/abstractions/gfx.granulator~.pd @@ -14,19 +14,19 @@ -104026 -262144 0; #X text 10 218 delay(sec):; #X obj 12 237 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/fx.granulator~/slider0 @min 0.5 @max 10; +/gui/$1/fx.granulator~/slider0 @min 0.5 @max 10; #X obj 140 237 ui.number @size 40 12 @digits 3 @min 0.5 @max 10; #X obj 190 237 msg set; #X msg 260 237 @delay \$1; #X text 10 251 density:; #X obj 12 270 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/fx.granulator~/slider1 @min 1 @max 64; +/gui/$1/fx.granulator~/slider1 @min 1 @max 64; #X obj 140 270 ui.number @size 40 12 @digits 3 @min 1 @max 64; #X obj 190 270 msg set; #X msg 260 270 @density \$1; #X text 10 284 length(ms):; #X obj 12 303 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/fx.granulator~/slider2 @min 10 @max 500; +/gui/$1/fx.granulator~/slider2 @min 10 @max 500; #X obj 140 303 ui.number @size 40 12 @digits 3 @min 10 @max 500; #X obj 190 303 msg set; #X msg 260 303 @length \$1; diff --git a/ceammc/ext/abstractions/gfx.greyhole~.pd b/ceammc/ext/abstractions/gfx.greyhole~.pd index e7a8606bea..65797e8fa3 100644 --- a/ceammc/ext/abstractions/gfx.greyhole~.pd +++ b/ceammc/ext/abstractions/gfx.greyhole~.pd @@ -15,54 +15,54 @@ #X obj 3 202 cnv 8 198 18 empty empty [fx.greyhole~] 3 9 0 12 -104026 -262144 0; #X obj 12 226 ui.toggle @size 12 12 @presetname -/gui/fx.greyhole~/checkbox0; +/gui/$1/fx.greyhole~/checkbox0; #X text 26 221 bypass; #X msg 260 218 @bypass \$1; #X text 10 238 damping:; #X obj 12 257 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/fx.greyhole~/slider1 @min 0 @max 0.99; +/gui/$1/fx.greyhole~/slider1 @min 0 @max 0.99; #X obj 140 257 ui.number @size 40 12 @digits 3 @min 0 @max 0.99; #X obj 190 257 msg set; #X msg 260 257 @damping \$1; #X text 10 271 delaytime:; #X obj 12 290 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/fx.greyhole~/slider2 @min 0.001 @max 1.45; +/gui/$1/fx.greyhole~/slider2 @min 0.001 @max 1.45; #X obj 140 290 ui.number @size 40 12 @digits 3 @min 0.001 @max 1.45; #X obj 190 290 msg set; #X msg 260 290 @delaytime \$1; #X text 10 304 diffusion:; #X obj 12 323 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/fx.greyhole~/slider3 @min 0 @max 0.99; +/gui/$1/fx.greyhole~/slider3 @min 0 @max 0.99; #X obj 140 323 ui.number @size 40 12 @digits 3 @min 0 @max 0.99; #X obj 190 323 msg set; #X msg 260 323 @diffusion \$1; #X text 10 337 drywet:; #X obj 12 356 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/fx.greyhole~/slider4 @min 0 @max 1; +/gui/$1/fx.greyhole~/slider4 @min 0 @max 1; #X obj 140 356 ui.number @size 40 12 @digits 3 @min 0 @max 1; #X obj 190 356 msg set; #X msg 260 356 @drywet \$1; #X text 10 370 feedback:; #X obj 12 389 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/fx.greyhole~/slider5 @min 0 @max 1; +/gui/$1/fx.greyhole~/slider5 @min 0 @max 1; #X obj 140 389 ui.number @size 40 12 @digits 3 @min 0 @max 1; #X obj 190 389 msg set; #X msg 260 389 @feedback \$1; #X text 10 403 moddepth:; #X obj 12 422 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/fx.greyhole~/slider6 @min 0 @max 1; +/gui/$1/fx.greyhole~/slider6 @min 0 @max 1; #X obj 140 422 ui.number @size 40 12 @digits 3 @min 0 @max 1; #X obj 190 422 msg set; #X msg 260 422 @moddepth \$1; #X text 10 436 modfreq:; #X obj 12 455 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/fx.greyhole~/slider7 @min 0 @max 10; +/gui/$1/fx.greyhole~/slider7 @min 0 @max 10; #X obj 140 455 ui.number @size 40 12 @digits 3 @min 0 @max 10; #X obj 190 455 msg set; #X msg 260 455 @modfreq \$1; #X text 10 469 size:; #X obj 12 488 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/fx.greyhole~/slider8 @min 0.5 @max 3; +/gui/$1/fx.greyhole~/slider8 @min 0.5 @max 3; #X obj 140 488 ui.number @size 40 12 @digits 3 @min 0.5 @max 3; #X obj 190 488 msg set; #X msg 260 488 @size \$1; diff --git a/ceammc/ext/abstractions/gfx.pitchshift~.pd b/ceammc/ext/abstractions/gfx.pitchshift~.pd index 27dd0c515b..e282855dce 100644 --- a/ceammc/ext/abstractions/gfx.pitchshift~.pd +++ b/ceammc/ext/abstractions/gfx.pitchshift~.pd @@ -12,30 +12,30 @@ #X obj 3 202 cnv 8 198 18 empty empty [fx.pitchshift~] 3 9 0 12 -104026 -262144 0; #X obj 12 226 ui.toggle @size 12 12 @presetname -/gui/fx.pitchshift~/checkbox0; +/gui/$1/fx.pitchshift~/checkbox0; #X text 26 221 bypass; #X msg 260 218 @bypass \$1; #X text 10 238 drywet:; #X obj 12 257 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/fx.pitchshift~/slider1 @min 0 @max 1; +/gui/$1/fx.pitchshift~/slider1 @min 0 @max 1; #X obj 140 257 ui.number @size 40 12 @digits 3 @min 0 @max 1; #X obj 190 257 msg set; #X msg 260 257 @drywet \$1; #X text 10 271 fade(ms):; #X obj 12 290 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/fx.pitchshift~/slider2 @min 0 @max 1000; +/gui/$1/fx.pitchshift~/slider2 @min 0 @max 1000; #X obj 140 290 ui.number @size 40 12 @digits 3 @min 0 @max 1000; #X obj 190 290 msg set; #X msg 260 290 @fade \$1; #X text 10 304 pitch:; #X obj 12 323 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/fx.pitchshift~/slider3 @min -38 @max 60; +/gui/$1/fx.pitchshift~/slider3 @min -38 @max 60; #X obj 140 323 ui.number @size 40 12 @digits 3 @min -38 @max 60; #X obj 190 323 msg set; #X msg 260 323 @pitch \$1; #X text 10 337 window(ms):; #X obj 12 356 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/fx.pitchshift~/slider4 @min 10 @max 2000; +/gui/$1/fx.pitchshift~/slider4 @min 10 @max 2000; #X obj 140 356 ui.number @size 40 12 @digits 3 @min 10 @max 2000; #X obj 190 356 msg set; #X msg 260 356 @window \$1; diff --git a/ceammc/ext/abstractions/gfx.sdelay~.pd b/ceammc/ext/abstractions/gfx.sdelay~.pd new file mode 100644 index 0000000000..0c6a1f2039 --- /dev/null +++ b/ceammc/ext/abstractions/gfx.sdelay~.pd @@ -0,0 +1,77 @@ +#N canvas 0 0 950 600 12; +#X obj 25 125 fx.sdelay~; +#X obj 25 25 inlet~; +#X obj 425 25 inlet; +#X obj 425 200 route fx.sdelay; +#X obj 425 250 route @bypass @delay @drywet @feedback @interpolation; +#X obj 675 350 print unknown property; +#X msg 325 75 @delay 1 \, @drywet 1 \, @feedback 0 \, @interpolation 20 \,; +#X obj 325 25 msg.onload; +#X obj 500 550 outlet~; +#X obj 600 550 outlet ctl; +#X obj 3 202 cnv 8 198 18 empty empty [fx.sdelay~] 3 9 0 12 -104026 +-262144 0; +#X obj 12 226 ui.toggle @size 12 12 @presetname +/gui/$1/fx.sdelay~/checkbox0; +#X text 26 221 bypass; +#X msg 260 218 @bypass \$1; +#X text 10 238 delay:; +#X obj 12 257 ui.slider @size 120 12 @active_scale 1 @presetname +/gui/$1/fx.sdelay~/slider1 @min 0 @max 6000; +#X obj 140 257 ui.number @size 40 12 @digits 3 @min 0 @max 6000; +#X obj 190 257 msg set; +#X msg 260 257 @delay \$1; +#X text 10 271 drywet:; +#X obj 12 290 ui.slider @size 120 12 @active_scale 1 @presetname +/gui/$1/fx.sdelay~/slider2 @min 0 @max 1; +#X obj 140 290 ui.number @size 40 12 @digits 3 @min 0 @max 1; +#X obj 190 290 msg set; +#X msg 260 290 @drywet \$1; +#X text 10 304 feedback:; +#X obj 12 323 ui.slider @size 120 12 @active_scale 1 @presetname +/gui/$1/fx.sdelay~/slider3 @min 0 @max 1; +#X obj 140 323 ui.number @size 40 12 @digits 3 @min 0 @max 1; +#X obj 190 323 msg set; +#X msg 260 323 @feedback \$1; +#X text 10 337 interpolation:; +#X obj 12 356 ui.slider @size 120 12 @active_scale 1 @presetname +/gui/$1/fx.sdelay~/slider4 @min 1 @max 200; +#X obj 140 356 ui.number @size 40 12 @digits 3 @min 1 @max 200; +#X obj 190 356 msg set; +#X msg 260 356 @interpolation \$1; +#X connect 1 0 0 0; +#X connect 2 0 3 0; +#X connect 3 0 4 0; +#X connect 4 5 5 0; +#X connect 6 0 4 0; +#X connect 7 0 6 0; +#X connect 0 0 8 0; +#X connect 3 1 9 0; +#X connect 11 0 13 0; +#X connect 13 0 0 0; +#X connect 4 0 11 0; +#X connect 15 0 16 0; +#X connect 16 0 17 0; +#X connect 17 0 15 0; +#X connect 15 0 18 0; +#X connect 18 0 0 0; +#X connect 4 1 15 0; +#X connect 20 0 21 0; +#X connect 21 0 22 0; +#X connect 22 0 20 0; +#X connect 20 0 23 0; +#X connect 23 0 0 0; +#X connect 4 2 20 0; +#X connect 25 0 26 0; +#X connect 26 0 27 0; +#X connect 27 0 25 0; +#X connect 25 0 28 0; +#X connect 28 0 0 0; +#X connect 4 3 25 0; +#X connect 30 0 31 0; +#X connect 31 0 32 0; +#X connect 32 0 30 0; +#X connect 30 0 33 0; +#X connect 33 0 0 0; +#X connect 4 4 30 0; +#X coords 0 -1 1 1 200 178 2 2 200; diff --git a/ceammc/ext/abstractions/gfx.vocoder~.pd b/ceammc/ext/abstractions/gfx.vocoder~.pd index 13a02e0769..618fcb56f0 100644 --- a/ceammc/ext/abstractions/gfx.vocoder~.pd +++ b/ceammc/ext/abstractions/gfx.vocoder~.pd @@ -14,19 +14,19 @@ -262144 0; #X text 10 218 attack(ms):; #X obj 12 237 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/fx.vocoder~/slider0 @min 0.1 @max 100; +/gui/$1/fx.vocoder~/slider0 @min 0.1 @max 100; #X obj 140 237 ui.number @size 40 12 @digits 3 @min 0.1 @max 100; #X obj 190 237 msg set; #X msg 260 237 @attack \$1; #X text 10 251 bwratio:; #X obj 12 270 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/fx.vocoder~/slider1 @min 0.1 @max 2; +/gui/$1/fx.vocoder~/slider1 @min 0.1 @max 2; #X obj 140 270 ui.number @size 40 12 @digits 3 @min 0.1 @max 2; #X obj 190 270 msg set; #X msg 260 270 @bwratio \$1; #X text 10 284 release(ms):; #X obj 12 303 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/fx.vocoder~/slider2 @min 0.1 @max 100; +/gui/$1/fx.vocoder~/slider2 @min 0.1 @max 100; #X obj 140 303 ui.number @size 40 12 @digits 3 @min 0.1 @max 100; #X obj 190 303 msg set; #X msg 260 303 @release \$1; diff --git a/ceammc/ext/abstractions/gfx.wahwah~.pd b/ceammc/ext/abstractions/gfx.wahwah~.pd index 4893fe90ae..22f8a41dd8 100644 --- a/ceammc/ext/abstractions/gfx.wahwah~.pd +++ b/ceammc/ext/abstractions/gfx.wahwah~.pd @@ -13,23 +13,23 @@ -262144 0; #X text 10 218 angle:; #X obj 12 237 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/fx.wahwah~/slider0 @min 0 @max 1; +/gui/$1/fx.wahwah~/slider0 @min 0 @max 1; #X obj 140 237 ui.number @size 40 12 @digits 3 @min 0 @max 1; #X obj 190 237 msg set; #X msg 260 237 @angle \$1; #X obj 12 259 ui.toggle @size 12 12 @presetname -/gui/fx.wahwah~/checkbox1; +/gui/$1/fx.wahwah~/checkbox1; #X text 26 254 bypass; #X msg 260 251 @bypass \$1; #X text 10 271 drywet:; #X obj 12 290 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/fx.wahwah~/slider2 @min 0 @max 1; +/gui/$1/fx.wahwah~/slider2 @min 0 @max 1; #X obj 140 290 ui.number @size 40 12 @digits 3 @min 0 @max 1; #X obj 190 290 msg set; #X msg 260 290 @drywet \$1; #X text 10 304 speed(bpm):; #X obj 12 323 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/fx.wahwah~/slider3 @min 360 @max 780; +/gui/$1/fx.wahwah~/slider3 @min 360 @max 780; #X obj 140 323 ui.number @size 40 12 @digits 3 @min 360 @max 780; #X obj 190 323 msg set; #X msg 260 323 @speed \$1; diff --git a/ceammc/ext/abstractions/gfx.zita_rev1~.pd b/ceammc/ext/abstractions/gfx.zita_rev1~.pd index daeb87adad..970dac8fe7 100644 --- a/ceammc/ext/abstractions/gfx.zita_rev1~.pd +++ b/ceammc/ext/abstractions/gfx.zita_rev1~.pd @@ -15,42 +15,42 @@ #X obj 3 202 cnv 8 198 18 empty empty [fx.zita_rev1~] 3 9 0 12 -104026 -262144 0; #X obj 12 226 ui.toggle @size 12 12 @presetname -/gui/fx.zita_rev1~/checkbox0; +/gui/$1/fx.zita_rev1~/checkbox0; #X text 26 221 bypass; #X msg 260 218 @bypass \$1; #X text 10 238 decay_low(s):; #X obj 12 257 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/fx.zita_rev1~/slider1 @min 1 @max 25; +/gui/$1/fx.zita_rev1~/slider1 @min 1 @max 25; #X obj 140 257 ui.number @size 40 12 @digits 3 @min 1 @max 25; #X obj 190 257 msg set; #X msg 260 257 @decay_low \$1; #X text 10 271 decay_mid(s):; #X obj 12 290 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/fx.zita_rev1~/slider2 @min 1 @max 25; +/gui/$1/fx.zita_rev1~/slider2 @min 1 @max 25; #X obj 140 290 ui.number @size 40 12 @digits 3 @min 1 @max 25; #X obj 190 290 msg set; #X msg 260 290 @decay_mid \$1; #X text 10 304 delay(ms):; #X obj 12 323 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/fx.zita_rev1~/slider3 @min 20 @max 100; +/gui/$1/fx.zita_rev1~/slider3 @min 20 @max 100; #X obj 140 323 ui.number @size 40 12 @digits 3 @min 20 @max 100; #X obj 190 323 msg set; #X msg 260 323 @delay \$1; #X text 10 337 drywet:; #X obj 12 356 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/fx.zita_rev1~/slider4 @min 0 @max 1; +/gui/$1/fx.zita_rev1~/slider4 @min 0 @max 1; #X obj 140 356 ui.number @size 40 12 @digits 3 @min 0 @max 1; #X obj 190 356 msg set; #X msg 260 356 @drywet \$1; #X text 10 370 dump_hf(Hz):; #X obj 12 389 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/fx.zita_rev1~/slider5 @min 1500 @max 47040; +/gui/$1/fx.zita_rev1~/slider5 @min 1500 @max 47040; #X obj 140 389 ui.number @size 40 12 @digits 3 @min 1500 @max 47040; #X obj 190 389 msg set; #X msg 260 389 @dump_hf \$1; #X text 10 403 freq_low(Hz):; #X obj 12 422 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/fx.zita_rev1~/slider6 @min 50 @max 1000; +/gui/$1/fx.zita_rev1~/slider6 @min 50 @max 1000; #X obj 140 422 ui.number @size 40 12 @digits 3 @min 50 @max 1000; #X obj 190 422 msg set; #X msg 260 422 @freq_low \$1; diff --git a/ceammc/ext/abstractions/gnoise.crackle~.pd b/ceammc/ext/abstractions/gnoise.crackle~.pd index 0a227892eb..6cec16a28b 100644 --- a/ceammc/ext/abstractions/gnoise.crackle~.pd +++ b/ceammc/ext/abstractions/gnoise.crackle~.pd @@ -12,7 +12,7 @@ -104026 -262144 0; #X text 10 218 freq(Hz):; #X obj 12 237 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/noise.crackle~/slider0 @min 0 @max 100; +/gui/$1/noise.crackle~/slider0 @min 0 @max 100; #X obj 140 237 ui.number @size 40 12 @digits 3 @min 0 @max 100; #X obj 190 237 msg set; #X msg 260 237 @freq \$1; diff --git a/ceammc/ext/abstractions/gnoise.lfreq0~.pd b/ceammc/ext/abstractions/gnoise.lfreq0~.pd index abb3742cf7..71424a1f50 100644 --- a/ceammc/ext/abstractions/gnoise.lfreq0~.pd +++ b/ceammc/ext/abstractions/gnoise.lfreq0~.pd @@ -12,7 +12,7 @@ -262144 0; #X text 10 218 freq(Hz):; #X obj 12 237 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/noise.lfreq0~/slider0 @min 5 @max 22050; +/gui/$1/noise.lfreq0~/slider0 @min 5 @max 22050; #X obj 140 237 ui.number @size 40 12 @digits 3 @min 5 @max 22050; #X obj 190 237 msg set; #X msg 260 237 @freq \$1; diff --git a/ceammc/ext/abstractions/gnoise.lfreq~.pd b/ceammc/ext/abstractions/gnoise.lfreq~.pd index ee009727f0..585afb1a2e 100644 --- a/ceammc/ext/abstractions/gnoise.lfreq~.pd +++ b/ceammc/ext/abstractions/gnoise.lfreq~.pd @@ -12,7 +12,7 @@ -262144 0; #X text 10 218 freq(Hz):; #X obj 12 237 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/noise.lfreq~/slider0 @min 5 @max 22050; +/gui/$1/noise.lfreq~/slider0 @min 5 @max 22050; #X obj 140 237 ui.number @size 40 12 @digits 3 @min 5 @max 22050; #X obj 190 237 msg set; #X msg 260 237 @freq \$1; diff --git a/ceammc/ext/abstractions/gspat.pan4~.pd b/ceammc/ext/abstractions/gspat.pan4~.pd index ccb35bb5ef..3ec9b33685 100644 --- a/ceammc/ext/abstractions/gspat.pan4~.pd +++ b/ceammc/ext/abstractions/gspat.pan4~.pd @@ -16,13 +16,13 @@ -262144 0; #X text 10 218 angle(rad):; #X obj 12 237 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/spat.pan4~/slider0 @min 0 @max 6.28319; +/gui/$1/spat.pan4~/slider0 @min 0 @max 6.28319; #X obj 140 237 ui.number @size 40 12 @digits 3 @min 0 @max 6.28319; #X obj 190 237 msg set; #X msg 260 237 @angle \$1; #X text 10 251 dist:; #X obj 12 270 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/spat.pan4~/slider1 @min 0 @max 1; +/gui/$1/spat.pan4~/slider1 @min 0 @max 1; #X obj 140 270 ui.number @size 40 12 @digits 3 @min 0 @max 1; #X obj 190 270 msg set; #X msg 260 270 @dist \$1; diff --git a/ceammc/ext/abstractions/gspat.pan8~.pd b/ceammc/ext/abstractions/gspat.pan8~.pd index ebea76e849..e07cd749f4 100644 --- a/ceammc/ext/abstractions/gspat.pan8~.pd +++ b/ceammc/ext/abstractions/gspat.pan8~.pd @@ -20,13 +20,13 @@ -262144 0; #X text 10 218 angle(rad):; #X obj 12 237 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/spat.pan8~/slider0 @min 0 @max 6.28319; +/gui/$1/spat.pan8~/slider0 @min 0 @max 6.28319; #X obj 140 237 ui.number @size 40 12 @digits 3 @min 0 @max 6.28319; #X obj 190 237 msg set; #X msg 260 237 @angle \$1; #X text 10 251 dist:; #X obj 12 270 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/spat.pan8~/slider1 @min 0 @max 1; +/gui/$1/spat.pan8~/slider1 @min 0 @max 1; #X obj 140 270 ui.number @size 40 12 @digits 3 @min 0 @max 1; #X obj 190 270 msg set; #X msg 260 270 @dist \$1; diff --git a/ceammc/ext/abstractions/gsynth.birds~.pd b/ceammc/ext/abstractions/gsynth.birds~.pd index 846ad60da1..03a7504088 100644 --- a/ceammc/ext/abstractions/gsynth.birds~.pd +++ b/ceammc/ext/abstractions/gsynth.birds~.pd @@ -13,13 +13,13 @@ -262144 0; #X text 10 218 probability(%):; #X obj 12 237 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/synth.birds~/slider0 @min 25 @max 100; +/gui/$1/synth.birds~/slider0 @min 25 @max 100; #X obj 140 237 ui.number @size 40 12 @digits 3 @min 25 @max 100; #X obj 190 237 msg set; #X msg 260 237 @probability \$1; #X text 10 251 speed:; #X obj 12 270 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/synth.birds~/slider1 @min 120 @max 480; +/gui/$1/synth.birds~/slider1 @min 120 @max 480; #X obj 140 270 ui.number @size 40 12 @digits 3 @min 120 @max 480; #X obj 190 270 msg set; #X msg 260 270 @speed \$1; diff --git a/ceammc/ext/abstractions/gsynth.church_bell~.pd b/ceammc/ext/abstractions/gsynth.church_bell~.pd index 8f3d50b858..ce6a920c8f 100644 --- a/ceammc/ext/abstractions/gsynth.church_bell~.pd +++ b/ceammc/ext/abstractions/gsynth.church_bell~.pd @@ -12,13 +12,13 @@ -104026 -262144 0; #X text 10 218 cutoff:; #X obj 12 237 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/synth.church_bell~/slider0 @min 20 @max 20000; +/gui/$1/synth.church_bell~/slider0 @min 20 @max 20000; #X obj 140 237 ui.number @size 40 12 @digits 3 @min 20 @max 20000; #X obj 190 237 msg set; #X msg 260 237 @cutoff \$1; #X text 10 251 gain:; #X obj 12 270 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/synth.church_bell~/slider1 @min 0 @max 1; +/gui/$1/synth.church_bell~/slider1 @min 0 @max 1; #X obj 140 270 ui.number @size 40 12 @digits 3 @min 0 @max 1; #X obj 190 270 msg set; #X msg 260 270 @gain \$1; @@ -27,11 +27,11 @@ #X msg 260 284 @gate \$1; #X text 10 304 pos:; #X obj 12 323 ui.number @size 60 12 @presetname -/gui/synth.church_bell~/numbox3 @min 0 @max 6 @step 1; +/gui/$1/synth.church_bell~/numbox3 @min 0 @max 6 @step 1; #X msg 260 323 @pos \$1; #X text 10 337 sharp:; #X obj 12 356 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/synth.church_bell~/slider4 @min 0.01 @max 5; +/gui/$1/synth.church_bell~/slider4 @min 0.01 @max 5; #X obj 140 356 ui.number @size 40 12 @digits 3 @min 0.01 @max 5; #X obj 190 356 msg set; #X msg 260 356 @sharp \$1; diff --git a/ceammc/ext/abstractions/gsynth.dubdub~.pd b/ceammc/ext/abstractions/gsynth.dubdub~.pd index e43adb8f31..493908e40d 100644 --- a/ceammc/ext/abstractions/gsynth.dubdub~.pd +++ b/ceammc/ext/abstractions/gsynth.dubdub~.pd @@ -12,7 +12,7 @@ -262144 0; #X text 10 218 cutoff:; #X obj 12 237 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/synth.dubdub~/slider0 @min 20 @max 20000; +/gui/$1/synth.dubdub~/slider0 @min 20 @max 20000; #X obj 140 237 ui.number @size 40 12 @digits 3 @min 20 @max 20000; #X obj 190 237 msg set; #X msg 260 237 @cutoff \$1; @@ -21,13 +21,13 @@ #X msg 260 251 @gate \$1; #X text 10 271 pitch:; #X obj 12 290 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/synth.dubdub~/slider2 @min 24 @max 84; +/gui/$1/synth.dubdub~/slider2 @min 24 @max 84; #X obj 140 290 ui.number @size 40 12 @digits 3 @min 24 @max 84; #X obj 190 290 msg set; #X msg 260 290 @pitch \$1; #X text 10 304 q:; #X obj 12 323 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/synth.dubdub~/slider3 @min 0.01 @max 100; +/gui/$1/synth.dubdub~/slider3 @min 0.01 @max 100; #X obj 140 323 ui.number @size 40 12 @digits 3 @min 0.01 @max 100; #X obj 190 323 msg set; #X msg 260 323 @q \$1; diff --git a/ceammc/ext/abstractions/gsynth.dx7~.pd b/ceammc/ext/abstractions/gsynth.dx7~.pd index 97b7bd9861..35c808da5c 100644 --- a/ceammc/ext/abstractions/gsynth.dx7~.pd +++ b/ceammc/ext/abstractions/gsynth.dx7~.pd @@ -27,21 +27,21 @@ -262144 0; #X text 10 218 algorithm:; #X obj 12 237 ui.number @size 60 12 @presetname -/gui/synth.dx7~/numbox0 @min 0 @max 31 @step 1; +/gui/$1/synth.dx7~/numbox0 @min 0 @max 31 @step 1; #X msg 260 237 @algorithm \$1; #X text 10 251 feedback:; #X obj 12 270 ui.number @size 60 12 @presetname -/gui/synth.dx7~/numbox1 @min 0 @max 99 @step 1; +/gui/$1/synth.dx7~/numbox1 @min 0 @max 99 @step 1; #X msg 260 270 @feedback \$1; #X text 10 284 freq:; #X obj 12 303 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/synth.dx7~/slider2 @min 50 @max 1000; +/gui/$1/synth.dx7~/slider2 @min 50 @max 1000; #X obj 140 303 ui.number @size 40 12 @digits 3 @min 50 @max 1000; #X obj 190 303 msg set; #X msg 260 303 @freq \$1; #X text 10 317 gain:; #X obj 12 336 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/synth.dx7~/slider3 @min 0 @max 1; +/gui/$1/synth.dx7~/slider3 @min 0 @max 1; #X obj 140 336 ui.number @size 40 12 @digits 3 @min 0 @max 1; #X obj 190 336 msg set; #X msg 260 336 @gain \$1; @@ -50,339 +50,339 @@ #X msg 260 350 @gate \$1; #X text 10 370 op0:egL1:; #X obj 12 389 ui.number @size 60 12 @presetname -/gui/synth.dx7~/numbox5 @min 0 @max 99 @step 1; +/gui/$1/synth.dx7~/numbox5 @min 0 @max 99 @step 1; #X msg 260 389 @op0:egL1 \$1; #X text 10 403 op0:egL2:; #X obj 12 422 ui.number @size 60 12 @presetname -/gui/synth.dx7~/numbox6 @min 0 @max 99 @step 1; +/gui/$1/synth.dx7~/numbox6 @min 0 @max 99 @step 1; #X msg 260 422 @op0:egL2 \$1; #X text 10 436 op0:egL3:; #X obj 12 455 ui.number @size 60 12 @presetname -/gui/synth.dx7~/numbox7 @min 0 @max 99 @step 1; +/gui/$1/synth.dx7~/numbox7 @min 0 @max 99 @step 1; #X msg 260 455 @op0:egL3 \$1; #X text 10 469 op0:egL4:; #X obj 12 488 ui.number @size 60 12 @presetname -/gui/synth.dx7~/numbox8 @min 0 @max 99 @step 1; +/gui/$1/synth.dx7~/numbox8 @min 0 @max 99 @step 1; #X msg 260 488 @op0:egL4 \$1; #X text 10 502 op0:egR1:; #X obj 12 521 ui.number @size 60 12 @presetname -/gui/synth.dx7~/numbox9 @min 0 @max 99 @step 1; +/gui/$1/synth.dx7~/numbox9 @min 0 @max 99 @step 1; #X msg 260 521 @op0:egR1 \$1; #X text 10 535 op0:egR2:; #X obj 12 554 ui.number @size 60 12 @presetname -/gui/synth.dx7~/numbox10 @min 0 @max 99 @step 1; +/gui/$1/synth.dx7~/numbox10 @min 0 @max 99 @step 1; #X msg 260 554 @op0:egR2 \$1; #X text 10 568 op0:egR3:; #X obj 12 587 ui.number @size 60 12 @presetname -/gui/synth.dx7~/numbox11 @min 0 @max 99 @step 1; +/gui/$1/synth.dx7~/numbox11 @min 0 @max 99 @step 1; #X msg 260 587 @op0:egR3 \$1; #X text 10 601 op0:egR4:; #X obj 12 620 ui.number @size 60 12 @presetname -/gui/synth.dx7~/numbox12 @min 0 @max 99 @step 1; +/gui/$1/synth.dx7~/numbox12 @min 0 @max 99 @step 1; #X msg 260 620 @op0:egR4 \$1; #X text 10 634 op0:keyVelSens:; #X obj 12 653 ui.number @size 60 12 @presetname -/gui/synth.dx7~/numbox13 @min 0 @max 8 @step 1; +/gui/$1/synth.dx7~/numbox13 @min 0 @max 8 @step 1; #X msg 260 653 @op0:keyVelSens \$1; #X text 10 667 op0:level:; #X obj 12 686 ui.number @size 60 12 @presetname -/gui/synth.dx7~/numbox14 @min 0 @max 99 @step 1; +/gui/$1/synth.dx7~/numbox14 @min 0 @max 99 @step 1; #X msg 260 686 @op0:level \$1; #X text 10 700 op0:opDetune:; #X obj 12 719 ui.number @size 60 12 @presetname -/gui/synth.dx7~/numbox15 @min -10 @max 10 @step 1; +/gui/$1/synth.dx7~/numbox15 @min -10 @max 10 @step 1; #X msg 260 719 @op0:opDetune \$1; #X text 10 733 op0:opFreq:; #X obj 12 752 ui.number @size 60 12 @presetname -/gui/synth.dx7~/numbox16 @min 0 @max 2 @step 0.01; +/gui/$1/synth.dx7~/numbox16 @min 0 @max 2 @step 0.01; #X msg 260 752 @op0:opFreq \$1; #X text 10 766 op0:opMode:; #X obj 12 785 ui.number @size 60 12 @presetname -/gui/synth.dx7~/numbox17 @min 0 @max 1 @step 1; +/gui/$1/synth.dx7~/numbox17 @min 0 @max 1 @step 1; #X msg 260 785 @op0:opMode \$1; #X text 10 799 op0:opRateScale:; #X obj 12 818 ui.number @size 60 12 @presetname -/gui/synth.dx7~/numbox18 @min 0 @max 10 @step 1; +/gui/$1/synth.dx7~/numbox18 @min 0 @max 10 @step 1; #X msg 260 818 @op0:opRateScale \$1; #X text 10 832 op1:egL1:; #X obj 12 851 ui.number @size 60 12 @presetname -/gui/synth.dx7~/numbox19 @min 0 @max 99 @step 1; +/gui/$1/synth.dx7~/numbox19 @min 0 @max 99 @step 1; #X msg 260 851 @op1:egL1 \$1; #X text 10 865 op1:egL2:; #X obj 12 884 ui.number @size 60 12 @presetname -/gui/synth.dx7~/numbox20 @min 0 @max 99 @step 1; +/gui/$1/synth.dx7~/numbox20 @min 0 @max 99 @step 1; #X msg 260 884 @op1:egL2 \$1; #X text 10 898 op1:egL3:; #X obj 12 917 ui.number @size 60 12 @presetname -/gui/synth.dx7~/numbox21 @min 0 @max 99 @step 1; +/gui/$1/synth.dx7~/numbox21 @min 0 @max 99 @step 1; #X msg 260 917 @op1:egL3 \$1; #X text 10 931 op1:egL4:; #X obj 12 950 ui.number @size 60 12 @presetname -/gui/synth.dx7~/numbox22 @min 0 @max 99 @step 1; +/gui/$1/synth.dx7~/numbox22 @min 0 @max 99 @step 1; #X msg 260 950 @op1:egL4 \$1; #X text 10 964 op1:egR1:; #X obj 12 983 ui.number @size 60 12 @presetname -/gui/synth.dx7~/numbox23 @min 0 @max 99 @step 1; +/gui/$1/synth.dx7~/numbox23 @min 0 @max 99 @step 1; #X msg 260 983 @op1:egR1 \$1; #X text 10 997 op1:egR2:; #X obj 12 1016 ui.number @size 60 12 @presetname -/gui/synth.dx7~/numbox24 @min 0 @max 99 @step 1; +/gui/$1/synth.dx7~/numbox24 @min 0 @max 99 @step 1; #X msg 260 1016 @op1:egR2 \$1; #X text 10 1030 op1:egR3:; #X obj 12 1049 ui.number @size 60 12 @presetname -/gui/synth.dx7~/numbox25 @min 0 @max 99 @step 1; +/gui/$1/synth.dx7~/numbox25 @min 0 @max 99 @step 1; #X msg 260 1049 @op1:egR3 \$1; #X text 10 1063 op1:egR4:; #X obj 12 1082 ui.number @size 60 12 @presetname -/gui/synth.dx7~/numbox26 @min 0 @max 99 @step 1; +/gui/$1/synth.dx7~/numbox26 @min 0 @max 99 @step 1; #X msg 260 1082 @op1:egR4 \$1; #X text 10 1096 op1:keyVelSens:; #X obj 12 1115 ui.number @size 60 12 @presetname -/gui/synth.dx7~/numbox27 @min 0 @max 8 @step 1; +/gui/$1/synth.dx7~/numbox27 @min 0 @max 8 @step 1; #X msg 260 1115 @op1:keyVelSens \$1; #X text 10 1129 op1:level:; #X obj 12 1148 ui.number @size 60 12 @presetname -/gui/synth.dx7~/numbox28 @min 0 @max 99 @step 1; +/gui/$1/synth.dx7~/numbox28 @min 0 @max 99 @step 1; #X msg 260 1148 @op1:level \$1; #X text 10 1162 op1:opDetune:; #X obj 12 1181 ui.number @size 60 12 @presetname -/gui/synth.dx7~/numbox29 @min -10 @max 10 @step 1; +/gui/$1/synth.dx7~/numbox29 @min -10 @max 10 @step 1; #X msg 260 1181 @op1:opDetune \$1; #X text 10 1195 op1:opFreq:; #X obj 12 1214 ui.number @size 60 12 @presetname -/gui/synth.dx7~/numbox30 @min 0 @max 2 @step 0.01; +/gui/$1/synth.dx7~/numbox30 @min 0 @max 2 @step 0.01; #X msg 260 1214 @op1:opFreq \$1; #X text 10 1228 op1:opMode:; #X obj 12 1247 ui.number @size 60 12 @presetname -/gui/synth.dx7~/numbox31 @min 0 @max 1 @step 1; +/gui/$1/synth.dx7~/numbox31 @min 0 @max 1 @step 1; #X msg 260 1247 @op1:opMode \$1; #X text 10 1261 op1:opRateScale:; #X obj 12 1280 ui.number @size 60 12 @presetname -/gui/synth.dx7~/numbox32 @min 0 @max 10 @step 1; +/gui/$1/synth.dx7~/numbox32 @min 0 @max 10 @step 1; #X msg 260 1280 @op1:opRateScale \$1; #X text 10 1294 op2:egL1:; #X obj 12 1313 ui.number @size 60 12 @presetname -/gui/synth.dx7~/numbox33 @min 0 @max 99 @step 1; +/gui/$1/synth.dx7~/numbox33 @min 0 @max 99 @step 1; #X msg 260 1313 @op2:egL1 \$1; #X text 10 1327 op2:egL2:; #X obj 12 1346 ui.number @size 60 12 @presetname -/gui/synth.dx7~/numbox34 @min 0 @max 99 @step 1; +/gui/$1/synth.dx7~/numbox34 @min 0 @max 99 @step 1; #X msg 260 1346 @op2:egL2 \$1; #X text 10 1360 op2:egL3:; #X obj 12 1379 ui.number @size 60 12 @presetname -/gui/synth.dx7~/numbox35 @min 0 @max 99 @step 1; +/gui/$1/synth.dx7~/numbox35 @min 0 @max 99 @step 1; #X msg 260 1379 @op2:egL3 \$1; #X text 10 1393 op2:egL4:; #X obj 12 1412 ui.number @size 60 12 @presetname -/gui/synth.dx7~/numbox36 @min 0 @max 99 @step 1; +/gui/$1/synth.dx7~/numbox36 @min 0 @max 99 @step 1; #X msg 260 1412 @op2:egL4 \$1; #X text 10 1426 op2:egR1:; #X obj 12 1445 ui.number @size 60 12 @presetname -/gui/synth.dx7~/numbox37 @min 0 @max 99 @step 1; +/gui/$1/synth.dx7~/numbox37 @min 0 @max 99 @step 1; #X msg 260 1445 @op2:egR1 \$1; #X text 10 1459 op2:egR2:; #X obj 12 1478 ui.number @size 60 12 @presetname -/gui/synth.dx7~/numbox38 @min 0 @max 99 @step 1; +/gui/$1/synth.dx7~/numbox38 @min 0 @max 99 @step 1; #X msg 260 1478 @op2:egR2 \$1; #X text 10 1492 op2:egR3:; #X obj 12 1511 ui.number @size 60 12 @presetname -/gui/synth.dx7~/numbox39 @min 0 @max 99 @step 1; +/gui/$1/synth.dx7~/numbox39 @min 0 @max 99 @step 1; #X msg 260 1511 @op2:egR3 \$1; #X text 10 1525 op2:egR4:; #X obj 12 1544 ui.number @size 60 12 @presetname -/gui/synth.dx7~/numbox40 @min 0 @max 99 @step 1; +/gui/$1/synth.dx7~/numbox40 @min 0 @max 99 @step 1; #X msg 260 1544 @op2:egR4 \$1; #X text 10 1558 op2:keyVelSens:; #X obj 12 1577 ui.number @size 60 12 @presetname -/gui/synth.dx7~/numbox41 @min 0 @max 8 @step 1; +/gui/$1/synth.dx7~/numbox41 @min 0 @max 8 @step 1; #X msg 260 1577 @op2:keyVelSens \$1; #X text 10 1591 op2:level:; #X obj 12 1610 ui.number @size 60 12 @presetname -/gui/synth.dx7~/numbox42 @min 0 @max 99 @step 1; +/gui/$1/synth.dx7~/numbox42 @min 0 @max 99 @step 1; #X msg 260 1610 @op2:level \$1; #X text 10 1624 op2:opDetune:; #X obj 12 1643 ui.number @size 60 12 @presetname -/gui/synth.dx7~/numbox43 @min -10 @max 10 @step 1; +/gui/$1/synth.dx7~/numbox43 @min -10 @max 10 @step 1; #X msg 260 1643 @op2:opDetune \$1; #X text 10 1657 op2:opFreq:; #X obj 12 1676 ui.number @size 60 12 @presetname -/gui/synth.dx7~/numbox44 @min 0 @max 2 @step 0.01; +/gui/$1/synth.dx7~/numbox44 @min 0 @max 2 @step 0.01; #X msg 260 1676 @op2:opFreq \$1; #X text 10 1690 op2:opMode:; #X obj 12 1709 ui.number @size 60 12 @presetname -/gui/synth.dx7~/numbox45 @min 0 @max 1 @step 1; +/gui/$1/synth.dx7~/numbox45 @min 0 @max 1 @step 1; #X msg 260 1709 @op2:opMode \$1; #X text 10 1723 op2:opRateScale:; #X obj 12 1742 ui.number @size 60 12 @presetname -/gui/synth.dx7~/numbox46 @min 0 @max 10 @step 1; +/gui/$1/synth.dx7~/numbox46 @min 0 @max 10 @step 1; #X msg 260 1742 @op2:opRateScale \$1; #X text 10 1756 op3:egL1:; #X obj 12 1775 ui.number @size 60 12 @presetname -/gui/synth.dx7~/numbox47 @min 0 @max 99 @step 1; +/gui/$1/synth.dx7~/numbox47 @min 0 @max 99 @step 1; #X msg 260 1775 @op3:egL1 \$1; #X text 10 1789 op3:egL2:; #X obj 12 1808 ui.number @size 60 12 @presetname -/gui/synth.dx7~/numbox48 @min 0 @max 99 @step 1; +/gui/$1/synth.dx7~/numbox48 @min 0 @max 99 @step 1; #X msg 260 1808 @op3:egL2 \$1; #X text 10 1822 op3:egL3:; #X obj 12 1841 ui.number @size 60 12 @presetname -/gui/synth.dx7~/numbox49 @min 0 @max 99 @step 1; +/gui/$1/synth.dx7~/numbox49 @min 0 @max 99 @step 1; #X msg 260 1841 @op3:egL3 \$1; #X text 10 1855 op3:egL4:; #X obj 12 1874 ui.number @size 60 12 @presetname -/gui/synth.dx7~/numbox50 @min 0 @max 99 @step 1; +/gui/$1/synth.dx7~/numbox50 @min 0 @max 99 @step 1; #X msg 260 1874 @op3:egL4 \$1; #X text 10 1888 op3:egR1:; #X obj 12 1907 ui.number @size 60 12 @presetname -/gui/synth.dx7~/numbox51 @min 0 @max 99 @step 1; +/gui/$1/synth.dx7~/numbox51 @min 0 @max 99 @step 1; #X msg 260 1907 @op3:egR1 \$1; #X text 10 1921 op3:egR2:; #X obj 12 1940 ui.number @size 60 12 @presetname -/gui/synth.dx7~/numbox52 @min 0 @max 99 @step 1; +/gui/$1/synth.dx7~/numbox52 @min 0 @max 99 @step 1; #X msg 260 1940 @op3:egR2 \$1; #X text 10 1954 op3:egR3:; #X obj 12 1973 ui.number @size 60 12 @presetname -/gui/synth.dx7~/numbox53 @min 0 @max 99 @step 1; +/gui/$1/synth.dx7~/numbox53 @min 0 @max 99 @step 1; #X msg 260 1973 @op3:egR3 \$1; #X text 10 1987 op3:egR4:; #X obj 12 2006 ui.number @size 60 12 @presetname -/gui/synth.dx7~/numbox54 @min 0 @max 99 @step 1; +/gui/$1/synth.dx7~/numbox54 @min 0 @max 99 @step 1; #X msg 260 2006 @op3:egR4 \$1; #X text 10 2020 op3:keyVelSens:; #X obj 12 2039 ui.number @size 60 12 @presetname -/gui/synth.dx7~/numbox55 @min 0 @max 8 @step 1; +/gui/$1/synth.dx7~/numbox55 @min 0 @max 8 @step 1; #X msg 260 2039 @op3:keyVelSens \$1; #X text 10 2053 op3:level:; #X obj 12 2072 ui.number @size 60 12 @presetname -/gui/synth.dx7~/numbox56 @min 0 @max 99 @step 1; +/gui/$1/synth.dx7~/numbox56 @min 0 @max 99 @step 1; #X msg 260 2072 @op3:level \$1; #X text 10 2086 op3:opDetune:; #X obj 12 2105 ui.number @size 60 12 @presetname -/gui/synth.dx7~/numbox57 @min -10 @max 10 @step 1; +/gui/$1/synth.dx7~/numbox57 @min -10 @max 10 @step 1; #X msg 260 2105 @op3:opDetune \$1; #X text 10 2119 op3:opFreq:; #X obj 12 2138 ui.number @size 60 12 @presetname -/gui/synth.dx7~/numbox58 @min 0 @max 2 @step 0.01; +/gui/$1/synth.dx7~/numbox58 @min 0 @max 2 @step 0.01; #X msg 260 2138 @op3:opFreq \$1; #X text 10 2152 op3:opMode:; #X obj 12 2171 ui.number @size 60 12 @presetname -/gui/synth.dx7~/numbox59 @min 0 @max 1 @step 1; +/gui/$1/synth.dx7~/numbox59 @min 0 @max 1 @step 1; #X msg 260 2171 @op3:opMode \$1; #X text 10 2185 op3:opRateScale:; #X obj 12 2204 ui.number @size 60 12 @presetname -/gui/synth.dx7~/numbox60 @min 0 @max 10 @step 1; +/gui/$1/synth.dx7~/numbox60 @min 0 @max 10 @step 1; #X msg 260 2204 @op3:opRateScale \$1; #X text 10 2218 op4:egL1:; #X obj 12 2237 ui.number @size 60 12 @presetname -/gui/synth.dx7~/numbox61 @min 0 @max 99 @step 1; +/gui/$1/synth.dx7~/numbox61 @min 0 @max 99 @step 1; #X msg 260 2237 @op4:egL1 \$1; #X text 10 2251 op4:egL2:; #X obj 12 2270 ui.number @size 60 12 @presetname -/gui/synth.dx7~/numbox62 @min 0 @max 99 @step 1; +/gui/$1/synth.dx7~/numbox62 @min 0 @max 99 @step 1; #X msg 260 2270 @op4:egL2 \$1; #X text 10 2284 op4:egL3:; #X obj 12 2303 ui.number @size 60 12 @presetname -/gui/synth.dx7~/numbox63 @min 0 @max 99 @step 1; +/gui/$1/synth.dx7~/numbox63 @min 0 @max 99 @step 1; #X msg 260 2303 @op4:egL3 \$1; #X text 10 2317 op4:egL4:; #X obj 12 2336 ui.number @size 60 12 @presetname -/gui/synth.dx7~/numbox64 @min 0 @max 99 @step 1; +/gui/$1/synth.dx7~/numbox64 @min 0 @max 99 @step 1; #X msg 260 2336 @op4:egL4 \$1; #X text 10 2350 op4:egR1:; #X obj 12 2369 ui.number @size 60 12 @presetname -/gui/synth.dx7~/numbox65 @min 0 @max 99 @step 1; +/gui/$1/synth.dx7~/numbox65 @min 0 @max 99 @step 1; #X msg 260 2369 @op4:egR1 \$1; #X text 10 2383 op4:egR2:; #X obj 12 2402 ui.number @size 60 12 @presetname -/gui/synth.dx7~/numbox66 @min 0 @max 99 @step 1; +/gui/$1/synth.dx7~/numbox66 @min 0 @max 99 @step 1; #X msg 260 2402 @op4:egR2 \$1; #X text 10 2416 op4:egR3:; #X obj 12 2435 ui.number @size 60 12 @presetname -/gui/synth.dx7~/numbox67 @min 0 @max 99 @step 1; +/gui/$1/synth.dx7~/numbox67 @min 0 @max 99 @step 1; #X msg 260 2435 @op4:egR3 \$1; #X text 10 2449 op4:egR4:; #X obj 12 2468 ui.number @size 60 12 @presetname -/gui/synth.dx7~/numbox68 @min 0 @max 99 @step 1; +/gui/$1/synth.dx7~/numbox68 @min 0 @max 99 @step 1; #X msg 260 2468 @op4:egR4 \$1; #X text 10 2482 op4:keyVelSens:; #X obj 12 2501 ui.number @size 60 12 @presetname -/gui/synth.dx7~/numbox69 @min 0 @max 8 @step 1; +/gui/$1/synth.dx7~/numbox69 @min 0 @max 8 @step 1; #X msg 260 2501 @op4:keyVelSens \$1; #X text 10 2515 op4:level:; #X obj 12 2534 ui.number @size 60 12 @presetname -/gui/synth.dx7~/numbox70 @min 0 @max 99 @step 1; +/gui/$1/synth.dx7~/numbox70 @min 0 @max 99 @step 1; #X msg 260 2534 @op4:level \$1; #X text 10 2548 op4:opDetune:; #X obj 12 2567 ui.number @size 60 12 @presetname -/gui/synth.dx7~/numbox71 @min -10 @max 10 @step 1; +/gui/$1/synth.dx7~/numbox71 @min -10 @max 10 @step 1; #X msg 260 2567 @op4:opDetune \$1; #X text 10 2581 op4:opFreq:; #X obj 12 2600 ui.number @size 60 12 @presetname -/gui/synth.dx7~/numbox72 @min 0 @max 2 @step 0.01; +/gui/$1/synth.dx7~/numbox72 @min 0 @max 2 @step 0.01; #X msg 260 2600 @op4:opFreq \$1; #X text 10 2614 op4:opMode:; #X obj 12 2633 ui.number @size 60 12 @presetname -/gui/synth.dx7~/numbox73 @min 0 @max 1 @step 1; +/gui/$1/synth.dx7~/numbox73 @min 0 @max 1 @step 1; #X msg 260 2633 @op4:opMode \$1; #X text 10 2647 op4:opRateScale:; #X obj 12 2666 ui.number @size 60 12 @presetname -/gui/synth.dx7~/numbox74 @min 0 @max 10 @step 1; +/gui/$1/synth.dx7~/numbox74 @min 0 @max 10 @step 1; #X msg 260 2666 @op4:opRateScale \$1; #X text 10 2680 op5:egL1:; #X obj 12 2699 ui.number @size 60 12 @presetname -/gui/synth.dx7~/numbox75 @min 0 @max 99 @step 1; +/gui/$1/synth.dx7~/numbox75 @min 0 @max 99 @step 1; #X msg 260 2699 @op5:egL1 \$1; #X text 10 2713 op5:egL2:; #X obj 12 2732 ui.number @size 60 12 @presetname -/gui/synth.dx7~/numbox76 @min 0 @max 99 @step 1; +/gui/$1/synth.dx7~/numbox76 @min 0 @max 99 @step 1; #X msg 260 2732 @op5:egL2 \$1; #X text 10 2746 op5:egL3:; #X obj 12 2765 ui.number @size 60 12 @presetname -/gui/synth.dx7~/numbox77 @min 0 @max 99 @step 1; +/gui/$1/synth.dx7~/numbox77 @min 0 @max 99 @step 1; #X msg 260 2765 @op5:egL3 \$1; #X text 10 2779 op5:egL4:; #X obj 12 2798 ui.number @size 60 12 @presetname -/gui/synth.dx7~/numbox78 @min 0 @max 99 @step 1; +/gui/$1/synth.dx7~/numbox78 @min 0 @max 99 @step 1; #X msg 260 2798 @op5:egL4 \$1; #X text 10 2812 op5:egR1:; #X obj 12 2831 ui.number @size 60 12 @presetname -/gui/synth.dx7~/numbox79 @min 0 @max 99 @step 1; +/gui/$1/synth.dx7~/numbox79 @min 0 @max 99 @step 1; #X msg 260 2831 @op5:egR1 \$1; #X text 10 2845 op5:egR2:; #X obj 12 2864 ui.number @size 60 12 @presetname -/gui/synth.dx7~/numbox80 @min 0 @max 99 @step 1; +/gui/$1/synth.dx7~/numbox80 @min 0 @max 99 @step 1; #X msg 260 2864 @op5:egR2 \$1; #X text 10 2878 op5:egR3:; #X obj 12 2897 ui.number @size 60 12 @presetname -/gui/synth.dx7~/numbox81 @min 0 @max 99 @step 1; +/gui/$1/synth.dx7~/numbox81 @min 0 @max 99 @step 1; #X msg 260 2897 @op5:egR3 \$1; #X text 10 2911 op5:egR4:; #X obj 12 2930 ui.number @size 60 12 @presetname -/gui/synth.dx7~/numbox82 @min 0 @max 99 @step 1; +/gui/$1/synth.dx7~/numbox82 @min 0 @max 99 @step 1; #X msg 260 2930 @op5:egR4 \$1; #X text 10 2944 op5:keyVelSens:; #X obj 12 2963 ui.number @size 60 12 @presetname -/gui/synth.dx7~/numbox83 @min 0 @max 8 @step 1; +/gui/$1/synth.dx7~/numbox83 @min 0 @max 8 @step 1; #X msg 260 2963 @op5:keyVelSens \$1; #X text 10 2977 op5:level:; #X obj 12 2996 ui.number @size 60 12 @presetname -/gui/synth.dx7~/numbox84 @min 0 @max 99 @step 1; +/gui/$1/synth.dx7~/numbox84 @min 0 @max 99 @step 1; #X msg 260 2996 @op5:level \$1; #X text 10 3010 op5:opDetune:; #X obj 12 3029 ui.number @size 60 12 @presetname -/gui/synth.dx7~/numbox85 @min -10 @max 10 @step 1; +/gui/$1/synth.dx7~/numbox85 @min -10 @max 10 @step 1; #X msg 260 3029 @op5:opDetune \$1; #X text 10 3043 op5:opFreq:; #X obj 12 3062 ui.number @size 60 12 @presetname -/gui/synth.dx7~/numbox86 @min 0 @max 2 @step 0.01; +/gui/$1/synth.dx7~/numbox86 @min 0 @max 2 @step 0.01; #X msg 260 3062 @op5:opFreq \$1; #X text 10 3076 op5:opMode:; #X obj 12 3095 ui.number @size 60 12 @presetname -/gui/synth.dx7~/numbox87 @min 0 @max 1 @step 1; +/gui/$1/synth.dx7~/numbox87 @min 0 @max 1 @step 1; #X msg 260 3095 @op5:opMode \$1; #X text 10 3109 op5:opRateScale:; #X obj 12 3128 ui.number @size 60 12 @presetname -/gui/synth.dx7~/numbox88 @min 0 @max 10 @step 1; +/gui/$1/synth.dx7~/numbox88 @min 0 @max 10 @step 1; #X msg 260 3128 @op5:opRateScale \$1; #X connect 1 0 2 0; #X connect 2 0 3 0; diff --git a/ceammc/ext/abstractions/gsynth.eguitar~.pd b/ceammc/ext/abstractions/gsynth.eguitar~.pd index 5592283aae..895951645b 100644 --- a/ceammc/ext/abstractions/gsynth.eguitar~.pd +++ b/ceammc/ext/abstractions/gsynth.eguitar~.pd @@ -12,7 +12,7 @@ -104026 -262144 0; #X text 10 218 gain:; #X obj 12 237 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/synth.eguitar~/slider0 @min 0 @max 1; +/gui/$1/synth.eguitar~/slider0 @min 0 @max 1; #X obj 140 237 ui.number @size 40 12 @digits 3 @min 0 @max 1; #X obj 190 237 msg set; #X msg 260 237 @gain \$1; @@ -21,19 +21,19 @@ #X msg 260 251 @gate \$1; #X text 10 271 mute:; #X obj 12 290 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/synth.eguitar~/slider2 @min 0 @max 1; +/gui/$1/synth.eguitar~/slider2 @min 0 @max 1; #X obj 140 290 ui.number @size 40 12 @digits 3 @min 0 @max 1; #X obj 190 290 msg set; #X msg 260 290 @mute \$1; #X text 10 304 pitch:; #X obj 12 323 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/synth.eguitar~/slider3 @min 36 @max 84; +/gui/$1/synth.eguitar~/slider3 @min 36 @max 84; #X obj 140 323 ui.number @size 40 12 @digits 3 @min 36 @max 84; #X obj 190 323 msg set; #X msg 260 323 @pitch \$1; #X text 10 337 pos:; #X obj 12 356 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/synth.eguitar~/slider4 @min 0 @max 1; +/gui/$1/synth.eguitar~/slider4 @min 0 @max 1; #X obj 140 356 ui.number @size 40 12 @digits 3 @min 0 @max 1; #X obj 190 356 msg set; #X msg 260 356 @pos \$1; diff --git a/ceammc/ext/abstractions/gsynth.ks~.pd b/ceammc/ext/abstractions/gsynth.ks~.pd index a1e3a7fbcd..44c27bea48 100644 --- a/ceammc/ext/abstractions/gsynth.ks~.pd +++ b/ceammc/ext/abstractions/gsynth.ks~.pd @@ -13,13 +13,13 @@ -262144 0; #X text 10 218 cutoff:; #X obj 12 237 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/synth.ks~/slider0 @min 0.1 @max 1; +/gui/$1/synth.ks~/slider0 @min 0.1 @max 1; #X obj 140 237 ui.number @size 40 12 @digits 3 @min 0.1 @max 1; #X obj 190 237 msg set; #X msg 260 237 @cutoff \$1; #X text 10 251 gain:; #X obj 12 270 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/synth.ks~/slider1 @min 0 @max 1; +/gui/$1/synth.ks~/slider1 @min 0 @max 1; #X obj 140 270 ui.number @size 40 12 @digits 3 @min 0 @max 1; #X obj 190 270 msg set; #X msg 260 270 @gain \$1; @@ -28,31 +28,31 @@ #X msg 260 284 @gate \$1; #X text 10 304 mode:; #X obj 12 323 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/synth.ks~/slider3 @min 0 @max 1; +/gui/$1/synth.ks~/slider3 @min 0 @max 1; #X obj 140 323 ui.number @size 40 12 @digits 3 @min 0 @max 1; #X obj 190 323 msg set; #X msg 260 323 @mode \$1; #X text 10 337 mute:; #X obj 12 356 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/synth.ks~/slider4 @min 0 @max 1; +/gui/$1/synth.ks~/slider4 @min 0 @max 1; #X obj 140 356 ui.number @size 40 12 @digits 3 @min 0 @max 1; #X obj 190 356 msg set; #X msg 260 356 @mute \$1; #X text 10 370 pitch:; #X obj 12 389 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/synth.ks~/slider5 @min 36 @max 84; +/gui/$1/synth.ks~/slider5 @min 36 @max 84; #X obj 140 389 ui.number @size 40 12 @digits 3 @min 36 @max 84; #X obj 190 389 msg set; #X msg 260 389 @pitch \$1; #X text 10 403 pos:; #X obj 12 422 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/synth.ks~/slider6 @min 0 @max 1; +/gui/$1/synth.ks~/slider6 @min 0 @max 1; #X obj 140 422 ui.number @size 40 12 @digits 3 @min 0 @max 1; #X obj 190 422 msg set; #X msg 260 422 @pos \$1; #X text 10 436 sharp:; #X obj 12 455 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/synth.ks~/slider7 @min 0.01 @max 1; +/gui/$1/synth.ks~/slider7 @min 0.01 @max 1; #X obj 140 455 ui.number @size 40 12 @digits 3 @min 0.01 @max 1; #X obj 190 455 msg set; #X msg 260 455 @sharp \$1; diff --git a/ceammc/ext/abstractions/gsynth.marimba~.pd b/ceammc/ext/abstractions/gsynth.marimba~.pd index 6c82a6caeb..e96641d1f2 100644 --- a/ceammc/ext/abstractions/gsynth.marimba~.pd +++ b/ceammc/ext/abstractions/gsynth.marimba~.pd @@ -12,13 +12,13 @@ -104026 -262144 0; #X text 10 218 cutoff:; #X obj 12 237 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/synth.marimba~/slider0 @min 1000 @max 10000; +/gui/$1/synth.marimba~/slider0 @min 1000 @max 10000; #X obj 140 237 ui.number @size 40 12 @digits 3 @min 1000 @max 10000; #X obj 190 237 msg set; #X msg 260 237 @cutoff \$1; #X text 10 251 gain:; #X obj 12 270 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/synth.marimba~/slider1 @min 0 @max 1; +/gui/$1/synth.marimba~/slider1 @min 0 @max 1; #X obj 140 270 ui.number @size 40 12 @digits 3 @min 0 @max 1; #X obj 190 270 msg set; #X msg 260 270 @gain \$1; @@ -27,19 +27,19 @@ #X msg 260 284 @gate \$1; #X text 10 304 pitch:; #X obj 12 323 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/synth.marimba~/slider3 @min 36 @max 84; +/gui/$1/synth.marimba~/slider3 @min 36 @max 84; #X obj 140 323 ui.number @size 40 12 @digits 3 @min 36 @max 84; #X obj 190 323 msg set; #X msg 260 323 @pitch \$1; #X text 10 337 pos:; #X obj 12 356 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/synth.marimba~/slider4 @min 0 @max 4; +/gui/$1/synth.marimba~/slider4 @min 0 @max 4; #X obj 140 356 ui.number @size 40 12 @digits 3 @min 0 @max 4; #X obj 190 356 msg set; #X msg 260 356 @pos \$1; #X text 10 370 sharp:; #X obj 12 389 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/synth.marimba~/slider5 @min 0.01 @max 1; +/gui/$1/synth.marimba~/slider5 @min 0.01 @max 1; #X obj 140 389 ui.number @size 40 12 @digits 3 @min 0.01 @max 1; #X obj 190 389 msg set; #X msg 260 389 @sharp \$1; diff --git a/ceammc/ext/abstractions/gsynth.risset_arp~.pd b/ceammc/ext/abstractions/gsynth.risset_arp~.pd index f913a053e2..2b421cdb93 100644 --- a/ceammc/ext/abstractions/gsynth.risset_arp~.pd +++ b/ceammc/ext/abstractions/gsynth.risset_arp~.pd @@ -14,67 +14,67 @@ -104026 -262144 0; #X text 10 218 detune:; #X obj 12 237 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/synth.risset_arp~/slider0 @min 0 @max 1000; +/gui/$1/synth.risset_arp~/slider0 @min 0 @max 1000; #X obj 140 237 ui.number @size 40 12 @digits 3 @min 0 @max 1000; #X obj 190 237 msg set; #X msg 260 237 @detune \$1; #X text 10 251 freq:; #X obj 12 270 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/synth.risset_arp~/slider1 @min 40 @max 500; +/gui/$1/synth.risset_arp~/slider1 @min 40 @max 500; #X obj 140 270 ui.number @size 40 12 @digits 3 @min 40 @max 500; #X obj 190 270 msg set; #X msg 260 270 @freq \$1; #X text 10 284 harmonic1:; #X obj 12 303 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/synth.risset_arp~/slider2 @min 0 @max 1; +/gui/$1/synth.risset_arp~/slider2 @min 0 @max 1; #X obj 140 303 ui.number @size 40 12 @digits 3 @min 0 @max 1; #X obj 190 303 msg set; #X msg 260 303 @harmonic1 \$1; #X text 10 317 harmonic2:; #X obj 12 336 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/synth.risset_arp~/slider3 @min 0 @max 1; +/gui/$1/synth.risset_arp~/slider3 @min 0 @max 1; #X obj 140 336 ui.number @size 40 12 @digits 3 @min 0 @max 1; #X obj 190 336 msg set; #X msg 260 336 @harmonic2 \$1; #X text 10 350 harmonic3:; #X obj 12 369 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/synth.risset_arp~/slider4 @min 0 @max 1; +/gui/$1/synth.risset_arp~/slider4 @min 0 @max 1; #X obj 140 369 ui.number @size 40 12 @digits 3 @min 0 @max 1; #X obj 190 369 msg set; #X msg 260 369 @harmonic3 \$1; #X text 10 383 harmonic4:; #X obj 12 402 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/synth.risset_arp~/slider5 @min 0 @max 1; +/gui/$1/synth.risset_arp~/slider5 @min 0 @max 1; #X obj 140 402 ui.number @size 40 12 @digits 3 @min 0 @max 1; #X obj 190 402 msg set; #X msg 260 402 @harmonic4 \$1; #X text 10 416 harmonic5:; #X obj 12 435 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/synth.risset_arp~/slider6 @min 0 @max 1; +/gui/$1/synth.risset_arp~/slider6 @min 0 @max 1; #X obj 140 435 ui.number @size 40 12 @digits 3 @min 0 @max 1; #X obj 190 435 msg set; #X msg 260 435 @harmonic5 \$1; #X text 10 449 harmonic6:; #X obj 12 468 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/synth.risset_arp~/slider7 @min 0 @max 1; +/gui/$1/synth.risset_arp~/slider7 @min 0 @max 1; #X obj 140 468 ui.number @size 40 12 @digits 3 @min 0 @max 1; #X obj 190 468 msg set; #X msg 260 468 @harmonic6 \$1; #X text 10 482 harmonic7:; #X obj 12 501 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/synth.risset_arp~/slider8 @min 0 @max 1; +/gui/$1/synth.risset_arp~/slider8 @min 0 @max 1; #X obj 140 501 ui.number @size 40 12 @digits 3 @min 0 @max 1; #X obj 190 501 msg set; #X msg 260 501 @harmonic7 \$1; #X text 10 515 harmonic8:; #X obj 12 534 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/synth.risset_arp~/slider9 @min 0 @max 1; +/gui/$1/synth.risset_arp~/slider9 @min 0 @max 1; #X obj 140 534 ui.number @size 40 12 @digits 3 @min 0 @max 1; #X obj 190 534 msg set; #X msg 260 534 @harmonic8 \$1; #X text 10 548 spread:; #X obj 12 567 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/synth.risset_arp~/slider10 @min 0 @max 1; +/gui/$1/synth.risset_arp~/slider10 @min 0 @max 1; #X obj 140 567 ui.number @size 40 12 @digits 3 @min 0 @max 1; #X obj 190 567 msg set; #X msg 260 567 @spread \$1; diff --git a/ceammc/ext/abstractions/gsynth.risset_tone~.pd b/ceammc/ext/abstractions/gsynth.risset_tone~.pd index d8bda9c6b7..269410a97e 100644 --- a/ceammc/ext/abstractions/gsynth.risset_tone~.pd +++ b/ceammc/ext/abstractions/gsynth.risset_tone~.pd @@ -12,19 +12,19 @@ -104026 -262144 0; #X text 10 218 centroid:; #X obj 12 237 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/synth.risset_tone~/slider0 @min 20 @max 120; +/gui/$1/synth.risset_tone~/slider0 @min 20 @max 120; #X obj 140 237 ui.number @size 40 12 @digits 3 @min 20 @max 120; #X obj 190 237 msg set; #X msg 260 237 @centroid \$1; #X text 10 251 range:; #X obj 12 270 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/synth.risset_tone~/slider1 @min 1 @max 120; +/gui/$1/synth.risset_tone~/slider1 @min 1 @max 120; #X obj 140 270 ui.number @size 40 12 @digits 3 @min 1 @max 120; #X obj 190 270 msg set; #X msg 260 270 @range \$1; #X text 10 284 rate:; #X obj 12 303 ui.slider @size 120 12 @active_scale 1 @presetname -/gui/synth.risset_tone~/slider2 @min -2 @max 2; +/gui/$1/synth.risset_tone~/slider2 @min -2 @max 2; #X obj 140 303 ui.number @size 40 12 @digits 3 @min -2 @max 2; #X obj 190 303 msg set; #X msg 260 303 @rate \$1; diff --git a/ceammc/ext/ceammc_objects.txt b/ceammc/ext/ceammc_objects.txt index ad00ac0f20..93dbaa231f 100644 --- a/ceammc/ext/ceammc_objects.txt +++ b/ceammc/ext/ceammc_objects.txt @@ -1,10 +1,23 @@ +!=' +%' +&&' +*' ++' +-' .f .float .i .int +/' 1/x +<' +<=' +==' +>' +>=' @-> @~> +^' _tcl.version amp->dbfs an.pitchtrack~ @@ -38,7 +51,11 @@ bpm->hz bpm->ms bpm->sec canvas.current +canvas.dir +canvas.name +canvas.path canvas.top +car->pol cc->amp cdiv~ click~ @@ -47,6 +64,7 @@ conv.amp2dbfs conv.bpm2hz conv.bpm2ms conv.bpm2sec +conv.car2pol conv.cc2amp conv.dbfs2amp conv.lin2curve @@ -54,7 +72,12 @@ conv.lin2exp conv.lin2lin conv.list2props conv.midi2freq +conv.phase2rad +conv.phase2rad~ conv.pitch2midi +conv.pol2car +conv.rad2phase +conv.rad2phase~ conv.samp2sec conv.sec2samp conv.sec2str @@ -120,6 +143,7 @@ flow.group flow.interval flow.less flow.less_eq +flow.match flow.multiplex flow.multiplex2~ flow.multiplex~ @@ -127,6 +151,8 @@ flow.mux flow.mux2~ flow.mux~ flow.once +flow.pack +flow.pack' flow.pass flow.pass_if flow.reject @@ -135,6 +161,7 @@ flow.route flow.speedlim flow.split flow.sync +flow.sync_pack flow.tee~ flt.biquad~ flt.bpf12~ @@ -198,6 +225,29 @@ global.mlist global.set group helmholtz~ +hoa.2d.decoder~ +hoa.2d.encoder~ +hoa.2d.map~ +hoa.2d.optim~ +hoa.2d.projector~ +hoa.2d.recomposer~ +hoa.2d.rotate~ +hoa.2d.wider~ +hoa.@process +hoa.decoder~ +hoa.encoder~ +hoa.in +hoa.in~ +hoa.map~ +hoa.optim~ +hoa.out +hoa.out~ +hoa.process~ +hoa.projector~ +hoa.recomposer~ +hoa.rotate~ +hoa.scope~ +hoa.wider~ hw.apple_smc hw.apple_sms hw.arduino @@ -318,8 +368,21 @@ local.mlist local.set m m->f +math.!=' +math.%' +math.&&' math.* +math.*' +math.+' +math.-' math./ +math./' +math.<' +math.<=' +math.==' +math.>' +math.>=' +math.^' math.abs math.acos math.acosh @@ -361,9 +424,24 @@ math.sin math.sinh math.sqrt math.squared +math.sync_add +math.sync_and +math.sync_div +math.sync_eq +math.sync_ge +math.sync_gt +math.sync_le +math.sync_lt +math.sync_mod +math.sync_mul +math.sync_ne +math.sync_or +math.sync_sub +math.sync_xor math.tan math.tanh math.trunc +math.||' matrix~ metro.pattern metro.seq @@ -448,7 +526,10 @@ path.dirname path.exists path.ls path.lsdir +phase->rad +phase->rad~ pitch->midi +pol->car prepend preset.float preset.list @@ -463,6 +544,9 @@ prop.set prop<- prop~> proto.firmata +proto.sp.alpaca +rad->phase +rad->phase~ radio random.discrete random.float @@ -538,6 +622,8 @@ synth.risset_arp~ synth.risset_tone~ synth.shakers~ synth.wurley~ +system.colorpanel +system.cursor system.getenv system.hostname system.memsize @@ -563,7 +649,10 @@ ui.dsp~ ui.env ui.gain2~ ui.gain~ +ui.hgain2~ +ui.hgain~ ui.hrd +ui.hrd* ui.hsl ui.icon ui.incdec @@ -574,13 +663,19 @@ ui.link ui.matrix ui.menu ui.meter~ +ui.mf +ui.mouse_filter +ui.mouse_route +ui.mr ui.m~ ui.n ui.number ui.number~ ui.n~ +ui.polar ui.preset ui.radio +ui.radio* ui.rsl ui.rslider ui.scope~ @@ -592,12 +687,17 @@ ui.ssc~ ui.t ui.tab ui.toggle +ui.vgain2~ +ui.vgain~ ui.vrd +ui.vrd* ui.vsl vline->env vline2env win window +xdac~ xfade2~ xfade~ +||' ~-> diff --git a/ceammc/ext/class-wrapper/modules/matrix/doc/completion_matrix.txt b/ceammc/ext/class-wrapper/modules/matrix/doc/completion_matrix.txt index 5ce313ac36..2385bf4376 100644 --- a/ceammc/ext/class-wrapper/modules/matrix/doc/completion_matrix.txt +++ b/ceammc/ext/class-wrapper/modules/matrix/doc/completion_matrix.txt @@ -26,6 +26,7 @@ matrix.det matrix.diag matrix.div matrix./ +matrix.eq matrix.== matrix.exp matrix.exp10 @@ -34,7 +35,9 @@ matrix.fill matrix.from_list list->matrix matrix.full +matrix.ge matrix.>= +matrix.gt matrix.> matrix.hist matrix.identity @@ -43,10 +46,12 @@ matrix.insert_col matrix.insert_row matrix.inverse matrix.-1 +matrix.le matrix.<= matrix.linspace matrix.load matrix.logspace +matrix.lt matrix.< matrix.matmul matrix.dot @@ -61,6 +66,7 @@ matrix.min matrix.mul matrix.* matrix.ncols +matrix.ne matrix.!= matrix.nrows matrix.ones diff --git a/ceammc/ext/class-wrapper/modules/matrix/doc/lib_matrix.xml b/ceammc/ext/class-wrapper/modules/matrix/doc/lib_matrix.xml index 78684f19c8..43f2293ca2 100644 --- a/ceammc/ext/class-wrapper/modules/matrix/doc/lib_matrix.xml +++ b/ceammc/ext/class-wrapper/modules/matrix/doc/lib_matrix.xml @@ -1,24 +1,6 @@ - - - - - - - - - - - - - - - - - - @@ -94,6 +76,9 @@ + + + @@ -112,6 +97,12 @@ + + + + + + @@ -127,6 +118,9 @@ + + + @@ -136,6 +130,9 @@ + + + @@ -169,6 +166,9 @@ + + + diff --git a/ceammc/ext/class-wrapper/modules/matrix/doc/matrix.db b/ceammc/ext/class-wrapper/modules/matrix/doc/matrix.db index 15c0fed02e..4cfe0eb9cf 100644 --- a/ceammc/ext/class-wrapper/modules/matrix/doc/matrix.db +++ b/ceammc/ext/class-wrapper/modules/matrix/doc/matrix.db @@ -24,25 +24,25 @@ matrix.cosh . . matrix.det . . matrix.diag .. . matrix.div,matrix./ .. . -matrix.== .. . +matrix.eq,matrix.== .. . matrix.exp . . matrix.exp10 . . matrix.exp2 . . matrix.fill .. . matrix.from_list,list->matrix . . matrix.full ... . -matrix.>= .. . -matrix.> .. . +matrix.ge,matrix.>= .. . +matrix.gt,matrix.> .. . matrix.hist .. . matrix.identity,matrix.id . . matrix.insert_col ... . matrix.insert_row ... . matrix.inverse,matrix.-1 . . -matrix.<= .. . +matrix.le,matrix.<= .. . matrix.linspace ... . matrix.load . . matrix.logspace ... . -matrix.< .. . +matrix.lt,matrix.< .. . matrix.matmul,matrix.dot .. . matrix.max . . matrix.mean . . @@ -54,7 +54,7 @@ matrix.median_row . . matrix.min . . matrix.mul,matrix.* .. . matrix.ncols . . -matrix.!= .. . +matrix.ne,matrix.!= .. . matrix.nrows . . matrix.ones .. . matrix.ones_like . . diff --git a/ceammc/ext/class-wrapper/modules/matrix/doc/matrix.==.pddoc b/ceammc/ext/class-wrapper/modules/matrix/doc/matrix.eq.pddoc similarity index 90% rename from ceammc/ext/class-wrapper/modules/matrix/doc/matrix.==.pddoc rename to ceammc/ext/class-wrapper/modules/matrix/doc/matrix.eq.pddoc index 1dfb29ed37..713b09762f 100644 --- a/ceammc/ext/class-wrapper/modules/matrix/doc/matrix.==.pddoc +++ b/ceammc/ext/class-wrapper/modules/matrix/doc/matrix.eq.pddoc @@ -1,7 +1,7 @@ - - matrix.== + + matrix.eq Serge Poltavski @@ -12,6 +12,9 @@ matrix 0.1 0.1 + + matrix.== + matrix.> matrix.< diff --git a/ceammc/ext/class-wrapper/modules/matrix/doc/matrix.>=.pddoc b/ceammc/ext/class-wrapper/modules/matrix/doc/matrix.ge.pddoc similarity index 90% rename from ceammc/ext/class-wrapper/modules/matrix/doc/matrix.>=.pddoc rename to ceammc/ext/class-wrapper/modules/matrix/doc/matrix.ge.pddoc index 35273988df..d2e1e6c23d 100644 --- a/ceammc/ext/class-wrapper/modules/matrix/doc/matrix.>=.pddoc +++ b/ceammc/ext/class-wrapper/modules/matrix/doc/matrix.ge.pddoc @@ -1,7 +1,7 @@ - - matrix.>= + + matrix.ge Serge Poltavski @@ -12,6 +12,9 @@ matrix 0.1 0.1 + + matrix.>= + matrix.> diff --git a/ceammc/ext/class-wrapper/modules/matrix/doc/matrix.>.pddoc b/ceammc/ext/class-wrapper/modules/matrix/doc/matrix.gt.pddoc similarity index 91% rename from ceammc/ext/class-wrapper/modules/matrix/doc/matrix.>.pddoc rename to ceammc/ext/class-wrapper/modules/matrix/doc/matrix.gt.pddoc index 3e87e1e554..71448b354d 100644 --- a/ceammc/ext/class-wrapper/modules/matrix/doc/matrix.>.pddoc +++ b/ceammc/ext/class-wrapper/modules/matrix/doc/matrix.gt.pddoc @@ -1,7 +1,7 @@ - - matrix.> + + matrix.gt Serge Poltavski @@ -12,6 +12,9 @@ matrix 0.1 0.1 + + matrix.> + matrix.== matrix.>= diff --git a/ceammc/ext/class-wrapper/modules/matrix/doc/matrix.<=.pddoc b/ceammc/ext/class-wrapper/modules/matrix/doc/matrix.le.pddoc similarity index 90% rename from ceammc/ext/class-wrapper/modules/matrix/doc/matrix.<=.pddoc rename to ceammc/ext/class-wrapper/modules/matrix/doc/matrix.le.pddoc index b3633a3c28..ef65ac459d 100644 --- a/ceammc/ext/class-wrapper/modules/matrix/doc/matrix.<=.pddoc +++ b/ceammc/ext/class-wrapper/modules/matrix/doc/matrix.le.pddoc @@ -1,7 +1,7 @@ - - matrix.<= + + matrix.le Serge Poltavski @@ -12,6 +12,9 @@ matrix 0.1 0.1 + + matrix.<= + matrix.< diff --git a/ceammc/ext/class-wrapper/modules/matrix/doc/matrix.<.pddoc b/ceammc/ext/class-wrapper/modules/matrix/doc/matrix.lt.pddoc similarity index 90% rename from ceammc/ext/class-wrapper/modules/matrix/doc/matrix.<.pddoc rename to ceammc/ext/class-wrapper/modules/matrix/doc/matrix.lt.pddoc index 19935e68df..5a0ed6de74 100644 --- a/ceammc/ext/class-wrapper/modules/matrix/doc/matrix.<.pddoc +++ b/ceammc/ext/class-wrapper/modules/matrix/doc/matrix.lt.pddoc @@ -1,7 +1,7 @@ - - matrix.< + + matrix.lt Serge Poltavski @@ -12,6 +12,9 @@ matrix 0.1 0.1 + + matrix.< + matrix.<= diff --git a/ceammc/ext/class-wrapper/modules/matrix/doc/matrix.!=.pddoc b/ceammc/ext/class-wrapper/modules/matrix/doc/matrix.ne.pddoc similarity index 90% rename from ceammc/ext/class-wrapper/modules/matrix/doc/matrix.!=.pddoc rename to ceammc/ext/class-wrapper/modules/matrix/doc/matrix.ne.pddoc index 0e97d18242..b58a891269 100644 --- a/ceammc/ext/class-wrapper/modules/matrix/doc/matrix.!=.pddoc +++ b/ceammc/ext/class-wrapper/modules/matrix/doc/matrix.ne.pddoc @@ -1,7 +1,7 @@ - - matrix.!= + + matrix.ne Serge Poltavski @@ -12,6 +12,9 @@ matrix 0.1 0.1 + + matrix.!= + matrix.== diff --git a/ceammc/ext/class-wrapper/modules/matrix/gen_matrix.cpp b/ceammc/ext/class-wrapper/modules/matrix/gen_matrix.cpp index 2831f2bedb..e24665b920 100644 --- a/ceammc/ext/class-wrapper/modules/matrix/gen_matrix.cpp +++ b/ceammc/ext/class-wrapper/modules/matrix/gen_matrix.cpp @@ -182,28 +182,34 @@ void matrix_setup() { SINGLE_ARG(Matrix(Matrix::*)(const Matrix &) const), SINGLE_ARG(&Matrix::conv2)); // method: &Matrix::gt - WRAP_METHOD(Matrix, "matrix.>", m_id_matrix_gt, + WRAP_METHOD(Matrix, "matrix.gt", m_id_matrix_gt, SINGLE_ARG(Matrix(Matrix::*)(const Matrix &) const, Matrix(Matrix::*)(float) const), SINGLE_ARG(&Matrix::gt, &Matrix::gt)); + WRAP_METHOD_ALIAS(m_id_matrix_gt, "matrix.>"); // method: &Matrix::ge - WRAP_METHOD(Matrix, "matrix.>=", m_id_matrix_ge, + WRAP_METHOD(Matrix, "matrix.ge", m_id_matrix_ge, SINGLE_ARG(Matrix(Matrix::*)(const Matrix &) const, Matrix(Matrix::*)(float) const), SINGLE_ARG(&Matrix::ge, &Matrix::ge)); + WRAP_METHOD_ALIAS(m_id_matrix_ge, "matrix.>="); // method: &Matrix::le - WRAP_METHOD(Matrix, "matrix.<=", m_id_matrix_le, + WRAP_METHOD(Matrix, "matrix.le", m_id_matrix_le, SINGLE_ARG(Matrix(Matrix::*)(const Matrix &) const, Matrix(Matrix::*)(float) const), SINGLE_ARG(&Matrix::le, &Matrix::le)); + WRAP_METHOD_ALIAS(m_id_matrix_le, "matrix.<="); // method: &Matrix::lt - WRAP_METHOD(Matrix, "matrix.<", m_id_matrix_lt, + WRAP_METHOD(Matrix, "matrix.lt", m_id_matrix_lt, SINGLE_ARG(Matrix(Matrix::*)(const Matrix &) const, Matrix(Matrix::*)(float) const), SINGLE_ARG(&Matrix::lt, &Matrix::lt)); + WRAP_METHOD_ALIAS(m_id_matrix_lt, "matrix.<"); // method: &Matrix::eq - WRAP_METHOD(Matrix, "matrix.==", m_id_matrix_eq, + WRAP_METHOD(Matrix, "matrix.eq", m_id_matrix_eq, SINGLE_ARG(Matrix(Matrix::*)(float) const, Matrix(Matrix::*)(const Matrix &) const), SINGLE_ARG(&Matrix::eq, &Matrix::eq)); + WRAP_METHOD_ALIAS(m_id_matrix_eq, "matrix.=="); // method: &Matrix::ne - WRAP_METHOD(Matrix, "matrix.!=", m_id_matrix_ne, + WRAP_METHOD(Matrix, "matrix.ne", m_id_matrix_ne, SINGLE_ARG(Matrix(Matrix::*)(float) const, Matrix(Matrix::*)(const Matrix &) const), SINGLE_ARG(&Matrix::ne, &Matrix::ne)); + WRAP_METHOD_ALIAS(m_id_matrix_ne, "matrix.!="); // static method using mtype_matrix_load = Matrix(*)(const std::string &); diff --git a/ceammc/ext/class-wrapper/modules/matrix/help/matrix-help.pd b/ceammc/ext/class-wrapper/modules/matrix/help/matrix-help.pd index a31ba75abb..d6840b557e 100644 --- a/ceammc/ext/class-wrapper/modules/matrix/help/matrix-help.pd +++ b/ceammc/ext/class-wrapper/modules/matrix/help/matrix-help.pd @@ -2,206 +2,206 @@ #X obj 20 50 cnv 5 69 31 empty empty matrix 4 13 0 17 -262144 -49933 0; #X obj 20 91 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 30 102 matrix.!=; -#X text 200 102 element-wise matrix not equal comparasion; -#X obj 30 129 matrix.<; -#X text 200 129 element-wise less then comparasion; -#X obj 30 156 matrix.<=; -#X text 200 156 element-wise less equal comparasion; -#X obj 30 183 matrix.==; -#X text 200 183 element-wise matrix equal comparasion; -#X obj 30 210 matrix.>; -#X text 200 210 element-wise greater then comparasion; -#X obj 30 237 matrix.>=; -#X text 200 237 element-wise greater equal comparasion; -#X obj 30 264 matrix.abs; -#X text 200 264 calc abs value for each matrix element; -#X obj 30 291 matrix.accu; -#X text 200 291 accumulate (sum) all elements of matrix; -#X obj 30 318 matrix.acos; -#X text 200 318 element-wise acrcosine; -#X obj 30 345 matrix.acosh; -#X text 200 345 element-wise hyperbolic acrcosine; -#X obj 30 372 matrix.add; -#X text 200 372 element-wise matrix addition; -#X obj 30 399 matrix.all; -#X text 200 399 check if all elements of the matrix are non-zero; -#X obj 30 426 matrix.all_col; -#X text 200 426 row with each element (0 or 1) indicating whether the +#X obj 30 102 matrix.abs; +#X text 200 102 calc abs value for each matrix element; +#X obj 30 129 matrix.accu; +#X text 200 129 accumulate (sum) all elements of matrix; +#X obj 30 156 matrix.acos; +#X text 200 156 element-wise acrcosine; +#X obj 30 183 matrix.acosh; +#X text 200 183 element-wise hyperbolic acrcosine; +#X obj 30 210 matrix.add; +#X text 200 210 element-wise matrix addition; +#X obj 30 237 matrix.all; +#X text 200 237 check if all elements of the matrix are non-zero; +#X obj 30 264 matrix.all_col; +#X text 200 264 row with each element (0 or 1) indicating whether the corresponding column has all non-zero elements; -#X obj 30 463 matrix.all_row; -#X text 200 463 column with each element (0 or 1) indicating whether +#X obj 30 304 matrix.all_row; +#X text 200 304 column with each element (0 or 1) indicating whether the corresponding row has all non-zero elements; -#X obj 30 500 matrix.any; -#X text 200 500 check if any elements of the matrix are non-zero; -#X obj 30 527 matrix.any_col; -#X text 200 527 row with each element (0 or 1) indicating whether the +#X obj 30 344 matrix.any; +#X text 200 344 check if any elements of the matrix are non-zero; +#X obj 30 371 matrix.any_col; +#X text 200 371 row with each element (0 or 1) indicating whether the corresponding column has any non-zero elements; -#X obj 30 564 matrix.any_row; -#X text 200 564 column with each element (0 or 1) indicating whether +#X obj 30 411 matrix.any_row; +#X text 200 411 column with each element (0 or 1) indicating whether the corresponding row has any non-zero elements; -#X obj 30 601 matrix.asin; -#X text 200 601 element-wise acrsine; -#X obj 30 628 matrix.asinh; -#X text 200 628 element-wise hyperbolic acrsine; -#X obj 30 655 matrix.at; -#X text 200 655 select matrix element at specified position; -#X obj 30 682 matrix.atan; -#X text 200 682 element-wise arctangent; -#X obj 30 709 matrix.atanh; -#X text 200 709 element-wise hyperbolic acrtangent; -#X obj 30 736 matrix.clip; -#X text 200 736 clip matrix value to range [min \, max]; -#X obj 30 763 matrix.col; -#X text 200 763 create Matrix column with specified values; -#X obj 30 790 matrix.col_at; -#X text 200 790 get specified column; -#X obj 30 817 matrix.conv2; -#X text 200 817 2D matrix convolution; -#X obj 30 844 matrix.cos; -#X text 200 844 element-wise cosine; -#X obj 30 871 matrix.cosh; -#X text 200 871 element-wise hyperbolic cosine; -#X obj 30 898 matrix.det; -#X text 200 898 determinant of square matrix; -#X obj 30 925 matrix.diag; -#X text 200 925 get matrix diagonals; -#X obj 30 952 matrix.div; -#X text 200 952 element-wise matrix division; -#X obj 30 979 matrix.exp; -#X text 200 979 element-wise base-e exponent: e^x; -#X obj 30 1006 matrix.exp10; -#X text 200 1006 element-wise base-10 exponent: 10^x; -#X obj 30 1033 matrix.exp2; -#X text 200 1033 element-wise base-2 exponent: 2^x; -#X obj 30 1060 matrix.fill; -#X text 200 1060 fill input Matrix with value; -#X obj 30 1087 matrix.from_list; -#X text 200 1087 create Matrix from list values; -#X obj 30 1114 matrix.full; -#X text 200 1114 create Matrix filled with specified value; -#X obj 30 1141 matrix.hist; -#X text 200 1141 produce a matrix containing column histogram counts; -#X obj 30 1168 matrix.identity; -#X text 200 1168 create identity Matrix; -#X obj 30 1195 matrix.insert_col; -#X text 200 1195 insert vector at specified matrix column; -#X obj 30 1222 matrix.insert_row; -#X text 200 1222 insert vector at specified matrix row; -#X obj 30 1249 matrix.inverse; -#X text 200 1249 inverse square matrix; -#X obj 30 1276 matrix.linspace; -#X text 200 1276 generate row with linearly spaced N elements; -#X obj 30 1303 matrix.load; -#X text 200 1303 load matrix from CSV format; -#X obj 30 1330 matrix.logspace; -#X text 200 1330 generate row with N elements spaced logarithmically; -#X obj 30 1357 matrix.matmul; -#X text 200 1357 matrix product; -#X obj 30 1384 matrix.max; -#X text 200 1384 returns maximum in Matrix; -#X obj 30 1411 matrix.mean; -#X text 200 1411 mean matrix value; -#X obj 30 1438 matrix.mean_col; -#X text 200 1438 mean value for each matrix column; -#X obj 30 1465 matrix.mean_row; -#X text 200 1465 mean value for each matrix row; -#X obj 30 1492 matrix.median; -#X text 200 1492 median matrix value; -#X obj 30 1519 matrix.median_col; -#X text 200 1519 median matrix value for each column; -#X obj 30 1546 matrix.median_row; -#X text 200 1546 median matrix value for each row; -#X obj 30 1573 matrix.min; -#X text 200 1573 returns minimum value in Matrix; -#X obj 30 1600 matrix.mul; -#X text 200 1600 element-wise matrix multiplication; -#X obj 30 1627 matrix.ncols; -#X text 200 1627 return number of columns in Matrix; -#X obj 30 1654 matrix.new; -#X text 200 1654 Matrix data type; -#X obj 30 1681 matrix.nrows; -#X text 200 1681 return number of rows in Matrix; -#X obj 30 1708 matrix.ones; -#X text 200 1708 create Matrix with ones; -#X obj 30 1735 matrix.ones_like; -#X text 200 1735 create Matrix filled with ones with the same shape as -input; -#X obj 30 1762 matrix.randn; -#X text 200 1762 generates Matrix using Gaussian distribution with +#X obj 30 451 matrix.asin; +#X text 200 451 element-wise acrsine; +#X obj 30 478 matrix.asinh; +#X text 200 478 element-wise hyperbolic acrsine; +#X obj 30 505 matrix.at; +#X text 200 505 select matrix element at specified position; +#X obj 30 532 matrix.atan; +#X text 200 532 element-wise arctangent; +#X obj 30 559 matrix.atanh; +#X text 200 559 element-wise hyperbolic acrtangent; +#X obj 30 586 matrix.clip; +#X text 200 586 clip matrix value to range [min \, max]; +#X obj 30 613 matrix.col; +#X text 200 613 create Matrix column with specified values; +#X obj 30 640 matrix.col_at; +#X text 200 640 get specified column; +#X obj 30 667 matrix.conv2; +#X text 200 667 2D matrix convolution; +#X obj 30 694 matrix.cos; +#X text 200 694 element-wise cosine; +#X obj 30 721 matrix.cosh; +#X text 200 721 element-wise hyperbolic cosine; +#X obj 30 748 matrix.det; +#X text 200 748 determinant of square matrix; +#X obj 30 775 matrix.diag; +#X text 200 775 get matrix diagonals; +#X obj 30 802 matrix.div; +#X text 200 802 element-wise matrix division; +#X obj 30 829 matrix.eq; +#X text 200 829 element-wise matrix equal comparasion; +#X obj 30 856 matrix.exp; +#X text 200 856 element-wise base-e exponent: e^x; +#X obj 30 883 matrix.exp10; +#X text 200 883 element-wise base-10 exponent: 10^x; +#X obj 30 910 matrix.exp2; +#X text 200 910 element-wise base-2 exponent: 2^x; +#X obj 30 937 matrix.fill; +#X text 200 937 fill input Matrix with value; +#X obj 30 964 matrix.from_list; +#X text 200 964 create Matrix from list values; +#X obj 30 991 matrix.full; +#X text 200 991 create Matrix filled with specified value; +#X obj 30 1018 matrix.ge; +#X text 200 1018 element-wise greater equal comparasion; +#X obj 30 1045 matrix.gt; +#X text 200 1045 element-wise greater then comparasion; +#X obj 30 1072 matrix.hist; +#X text 200 1072 produce a matrix containing column histogram counts; +#X obj 30 1099 matrix.identity; +#X text 200 1099 create identity Matrix; +#X obj 30 1126 matrix.insert_col; +#X text 200 1126 insert vector at specified matrix column; +#X obj 30 1153 matrix.insert_row; +#X text 200 1153 insert vector at specified matrix row; +#X obj 30 1180 matrix.inverse; +#X text 200 1180 inverse square matrix; +#X obj 30 1207 matrix.le; +#X text 200 1207 element-wise less equal comparasion; +#X obj 30 1234 matrix.linspace; +#X text 200 1234 generate row with linearly spaced N elements; +#X obj 30 1261 matrix.load; +#X text 200 1261 load matrix from CSV format; +#X obj 30 1288 matrix.logspace; +#X text 200 1288 generate row with N elements spaced logarithmically; +#X obj 30 1315 matrix.lt; +#X text 200 1315 element-wise less then comparasion; +#X obj 30 1342 matrix.matmul; +#X text 200 1342 matrix product; +#X obj 30 1369 matrix.max; +#X text 200 1369 returns maximum in Matrix; +#X obj 30 1396 matrix.mean; +#X text 200 1396 mean matrix value; +#X obj 30 1423 matrix.mean_col; +#X text 200 1423 mean value for each matrix column; +#X obj 30 1450 matrix.mean_row; +#X text 200 1450 mean value for each matrix row; +#X obj 30 1477 matrix.median; +#X text 200 1477 median matrix value; +#X obj 30 1504 matrix.median_col; +#X text 200 1504 median matrix value for each column; +#X obj 30 1531 matrix.median_row; +#X text 200 1531 median matrix value for each row; +#X obj 30 1558 matrix.min; +#X text 200 1558 returns minimum value in Matrix; +#X obj 30 1585 matrix.mul; +#X text 200 1585 element-wise matrix multiplication; +#X obj 30 1612 matrix.ncols; +#X text 200 1612 return number of columns in Matrix; +#X obj 30 1639 matrix.ne; +#X text 200 1639 element-wise matrix not equal comparasion; +#X obj 30 1666 matrix.new; +#X text 200 1666 Matrix data type; +#X obj 30 1693 matrix.nrows; +#X text 200 1693 return number of rows in Matrix; +#X obj 30 1720 matrix.ones; +#X text 200 1720 create Matrix with ones; +#X obj 30 1747 matrix.ones_like; +#X text 200 1747 create Matrix filled with ones with the same shape +as input; +#X obj 30 1774 matrix.randn; +#X text 200 1774 generates Matrix using Gaussian distribution with zero mean and unit variance; -#X obj 30 1799 matrix.randu; -#X text 200 1799 generates Matrix with uniform distribution [0-1]; -#X obj 30 1826 matrix.range; -#X text 200 1826 matrix range (difference between max and min); -#X obj 30 1853 matrix.range_col; -#X text 200 1853 matrix column range (difference between max and min); -#X obj 30 1880 matrix.range_row; -#X text 200 1880 matrix row range (difference between max and min); -#X obj 30 1907 matrix.rank; -#X text 200 1907 rank of the matrix; -#X obj 30 1934 matrix.remove_col; -#X text 200 1934 remove specified matrix column; -#X obj 30 1961 matrix.remove_row; -#X text 200 1961 remove specified matrix row; -#X obj 30 1988 matrix.replace; -#X text 200 1988 replace specific elements with a new value; -#X obj 30 2015 matrix.reshape; -#X text 200 2015 change size while keeping elements; -#X obj 30 2042 matrix.resize; -#X text 200 2042 change size while keeping elements and preserving +#X obj 30 1814 matrix.randu; +#X text 200 1814 generates Matrix with uniform distribution [0-1]; +#X obj 30 1841 matrix.range; +#X text 200 1841 matrix range (difference between max and min); +#X obj 30 1868 matrix.range_col; +#X text 200 1868 matrix column range (difference between max and min); +#X obj 30 1895 matrix.range_row; +#X text 200 1895 matrix row range (difference between max and min); +#X obj 30 1922 matrix.rank; +#X text 200 1922 rank of the matrix; +#X obj 30 1949 matrix.remove_col; +#X text 200 1949 remove specified matrix column; +#X obj 30 1976 matrix.remove_row; +#X text 200 1976 remove specified matrix row; +#X obj 30 2003 matrix.replace; +#X text 200 2003 replace specific elements with a new value; +#X obj 30 2030 matrix.reshape; +#X text 200 2030 change size while keeping elements; +#X obj 30 2057 matrix.resize; +#X text 200 2057 change size while keeping elements and preserving layout; -#X obj 30 2069 matrix.row; -#X text 200 2069 create Matrix row with specified values; -#X obj 30 2096 matrix.row_at; -#X text 200 2096 get specified row; -#X obj 30 2123 matrix.save; -#X text 200 2123 save matrix in CSV format; -#X obj 30 2150 matrix.shift_col; -#X text 200 2150 shift Matrix elements by N positions in each column; -#X obj 30 2177 matrix.shift_row; -#X text 200 2177 shift Matrix elements by N positions in each row; -#X obj 30 2204 matrix.sign; -#X text 200 2204 element-wise signum function; -#X obj 30 2231 matrix.sin; -#X text 200 2231 element-wise sine; -#X obj 30 2258 matrix.sinh; -#X text 200 2258 element-wise hyperbolic sine; -#X obj 30 2285 matrix.size; -#X text 200 2285 return Matrix size (rows \, columns); -#X obj 30 2312 matrix.solve; -#X text 200 2312 Solve a system of linear equations \, A*X = B \, -where X is unknown; -#X obj 30 2349 matrix.stddev; -#X text 200 2349 standart deviation for matrix values; -#X obj 30 2376 matrix.stddev_col; -#X text 200 2376 standart deviation matrix value for each column; -#X obj 30 2403 matrix.stddev_row; -#X text 200 2403 standart deviation matrix value for each row; -#X obj 30 2430 matrix.sub; -#X text 200 2430 element-wise matrix subtraction; -#X obj 30 2457 matrix.swap_cols; -#X text 200 2457 swaps specified columns in matrix; -#X obj 30 2484 matrix.swap_rows; -#X text 200 2484 swaps specified rows in matrix; -#X obj 30 2511 matrix.tan; -#X text 200 2511 element-wise tangent; -#X obj 30 2538 matrix.tanh; -#X text 200 2538 element-wise hyperbolic tangent; -#X obj 30 2565 matrix.to_list; -#X text 200 2565 convert Matrix to list; -#X obj 30 2592 matrix.transpose; -#X text 200 2592 transpose Matrix; -#X obj 30 2619 matrix.trunc_exp; -#X text 200 2619 element-wise base-e exponent \, truncated to avoid +#X obj 30 2084 matrix.row; +#X text 200 2084 create Matrix row with specified values; +#X obj 30 2111 matrix.row_at; +#X text 200 2111 get specified row; +#X obj 30 2138 matrix.save; +#X text 200 2138 save matrix in CSV format; +#X obj 30 2165 matrix.shift_col; +#X text 200 2165 shift Matrix elements by N positions in each column; +#X obj 30 2192 matrix.shift_row; +#X text 200 2192 shift Matrix elements by N positions in each row; +#X obj 30 2219 matrix.sign; +#X text 200 2219 element-wise signum function; +#X obj 30 2246 matrix.sin; +#X text 200 2246 element-wise sine; +#X obj 30 2273 matrix.sinh; +#X text 200 2273 element-wise hyperbolic sine; +#X obj 30 2300 matrix.size; +#X text 200 2300 return Matrix size (rows \, columns); +#X obj 30 2327 matrix.solve; +#X text 200 2327 Solve a system of linear equations \, A*X = B \, where +X is unknown; +#X obj 30 2367 matrix.stddev; +#X text 200 2367 standart deviation for matrix values; +#X obj 30 2394 matrix.stddev_col; +#X text 200 2394 standart deviation matrix value for each column; +#X obj 30 2421 matrix.stddev_row; +#X text 200 2421 standart deviation matrix value for each row; +#X obj 30 2448 matrix.sub; +#X text 200 2448 element-wise matrix subtraction; +#X obj 30 2475 matrix.swap_cols; +#X text 200 2475 swaps specified columns in matrix; +#X obj 30 2502 matrix.swap_rows; +#X text 200 2502 swaps specified rows in matrix; +#X obj 30 2529 matrix.tan; +#X text 200 2529 element-wise tangent; +#X obj 30 2556 matrix.tanh; +#X text 200 2556 element-wise hyperbolic tangent; +#X obj 30 2583 matrix.to_list; +#X text 200 2583 convert Matrix to list; +#X obj 30 2610 matrix.transpose; +#X text 200 2610 transpose Matrix; +#X obj 30 2637 matrix.trunc_exp; +#X text 200 2637 element-wise base-e exponent \, truncated to avoid infinity; -#X obj 30 2646 matrix.vectorise; -#X text 200 2646 generate a column vector or row vector from matrix; -#X obj 30 2673 matrix.zeros; -#X text 200 2673 create Matrix with zeros; -#X obj 30 2700 matrix.zeros_like; -#X text 200 2700 create Matrix filled with zeros with the same shape +#X obj 30 2664 matrix.vectorise; +#X text 200 2664 generate a column vector or row vector from matrix; +#X obj 30 2691 matrix.zeros; +#X text 200 2691 create Matrix with zeros; +#X obj 30 2718 matrix.zeros_like; +#X text 200 2718 create Matrix filled with zeros with the same shape as input; #X obj 1 1 cnv 5 740 40 empty empty matrix 20 20 0 20 -104026 -4096 0; -#X obj 1 2737 cnv 5 740 40 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 20 2737 version: v0.1 \, license:; \ No newline at end of file +#X obj 1 2745 cnv 5 740 40 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 20 2745 version: v0.1 \, license:; \ No newline at end of file diff --git a/ceammc/ext/class-wrapper/modules/matrix/help/matrix.!=-help.pd b/ceammc/ext/class-wrapper/modules/matrix/help/matrix.!=-help.pd deleted file mode 100644 index 0122edc9d8..0000000000 --- a/ceammc/ext/class-wrapper/modules/matrix/help/matrix.!=-help.pd +++ /dev/null @@ -1,73 +0,0 @@ -#N canvas 0 0 760 555 12; -#X declare -lib ceammc; -#X declare -lib matrix; -#X obj 409 50 cnv 1 331 21 empty empty empty 17 7 0 10 -245760 -1 0; -#X text 409 50 element-wise matrix not equal comparasion; -#X obj 1 1 cnv 5 740 40 empty empty matrix.!= 20 20 0 20 -104026 -4096 -0; -#X obj 649 11 matrix.!=; -#X obj 50 118 declare -lib matrix; -#X msg 50 162 2 2 1 2 3 4; -#X floatatom 261 162 5 0 0 0 - - -; -#X msg 318 162 2 2 1 4 3 6; -#X obj 50 190 matrix.!= Matrix 2 2 1 2 3 4; -#X obj 50 219 ui.display @display_type 1 @size 150 18; -#X obj 20 259 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 264 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 --49933 0; -#X text 120 269 1\.; -#X text 150 269 list; -#X obj 281 270 cnv 1 17 18 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 280 269 V: float to compare or matrix to compare (Matrix NROWS -NCOLS ...).; -#X obj 20 311 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 316 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 -0; -#X text 120 321 1\.; -#X text 150 321 *list*; -#X text 280 321 Matrix data constructor: NROWS NCOLS ....; -#X text 150 339 *data*; -#X text 280 339 Matrix data.; -#X text 120 357 2\.; -#X text 150 357 *float*; -#X text 280 357 float to compare.; -#X text 150 375 *data*; -#X text 280 375 matrix to compare (NROWS NCOLS ...).; -#X obj 20 403 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 408 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 --49933 0; -#X text 120 413 1\.; -#X text 280 413 output compare result - matrix with 1 and 0 (Matrix); -#X obj 10 48 ui.link @title index @url ../index-help.pd; -#X text 51 45 ::; -#X obj 67 48 ui.link @title matrix @url matrix-help.pd; -#X text 116 45 ::; -#X obj 132 48 ui.link @title matrix @url matrix.matrix-help.pd; -#X obj 1 505 cnv 5 740 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: matrix v0.1; -#X text 578 520 see also:; -#X obj 654 520 matrix.==; -#N canvas 10 527 400 290 info 0; -#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; -#X text 10 10 library:; -#X text 120 10 matrix; -#X text 10 32 version:; -#X text 120 32 0.1; -#X text 10 54 object:; -#X text 120 54 matrix.!=; -#X text 10 76 category:; -#X text 120 76 matrix; -#X text 10 98 since:; -#X text 120 98 0.1; -#X text 10 120 authors:; -#X text 120 120 Serge Poltavski; -#X text 10 142 license:; -#X text 120 142 GPLv3; -#X obj 120 164 declare -lib ceammc; -#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 120 268 generated by pddoc; -#X restore 10 527 pd info; -#X connect 5 0 8 0; -#X connect 6 0 8 1; -#X connect 7 0 8 1; -#X connect 8 0 9 0; \ No newline at end of file diff --git a/ceammc/ext/class-wrapper/modules/matrix/help/matrix.<-help.pd b/ceammc/ext/class-wrapper/modules/matrix/help/matrix.<-help.pd deleted file mode 100644 index 705939230d..0000000000 --- a/ceammc/ext/class-wrapper/modules/matrix/help/matrix.<-help.pd +++ /dev/null @@ -1,73 +0,0 @@ -#N canvas 0 0 760 555 12; -#X declare -lib ceammc; -#X declare -lib matrix; -#X obj 464 50 cnv 1 276 21 empty empty empty 17 7 0 10 -245760 -1 0; -#X text 464 50 element-wise less then comparasion; -#X obj 1 1 cnv 5 740 40 empty empty matrix.< 20 20 0 20 -104026 -4096 -0; -#X obj 656 11 matrix.<; -#X obj 50 118 declare -lib matrix; -#X msg 50 162 2 2 1 2 3 4; -#X floatatom 261 162 5 0 0 0 - - -; -#X obj 50 190 matrix.< Matrix 2 2 4 3 2 1; -#X obj 50 219 ui.display @display_type 1 @size 150 18; -#X obj 20 259 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 264 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 --49933 0; -#X text 120 269 1\.; -#X text 150 269 list; -#X obj 281 270 cnv 1 16 18 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 280 269 B: matrix to compare (Matrix NROWS NCOLS ...) or float -to compare.; -#X obj 20 311 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 316 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 -0; -#X text 120 321 1\.; -#X text 150 321 *list*; -#X text 280 321 Matrix data constructor: NROWS NCOLS ....; -#X text 150 339 *data*; -#X text 280 339 Matrix data.; -#X text 120 357 2\.; -#X text 150 357 *list*; -#X text 280 357 matrix to compare: NROWS NCOLS ....; -#X text 150 375 *data*; -#X text 280 375 matrix to compare.; -#X text 150 393 *float*; -#X text 280 393 float to compare.; -#X obj 20 421 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 426 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 --49933 0; -#X text 120 431 1\.; -#X text 280 431 output compare result - matrix with 1 and 0 (Matrix); -#X obj 10 48 ui.link @title index @url ../index-help.pd; -#X text 51 45 ::; -#X obj 67 48 ui.link @title matrix @url matrix-help.pd; -#X text 116 45 ::; -#X obj 132 48 ui.link @title matrix @url matrix.matrix-help.pd; -#X obj 1 505 cnv 5 740 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: matrix v0.1; -#X text 578 520 see also:; -#X obj 654 520 matrix.<=; -#N canvas 10 527 400 290 info 0; -#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; -#X text 10 10 library:; -#X text 120 10 matrix; -#X text 10 32 version:; -#X text 120 32 0.1; -#X text 10 54 object:; -#X text 120 54 matrix.<; -#X text 10 76 category:; -#X text 120 76 matrix; -#X text 10 98 since:; -#X text 120 98 0.1; -#X text 10 120 authors:; -#X text 120 120 Serge Poltavski; -#X text 10 142 license:; -#X text 120 142 GPLv3; -#X obj 120 164 declare -lib ceammc; -#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 120 268 generated by pddoc; -#X restore 10 527 pd info; -#X connect 5 0 7 0; -#X connect 6 0 7 1; -#X connect 7 0 8 0; \ No newline at end of file diff --git a/ceammc/ext/class-wrapper/modules/matrix/help/matrix.<-xlet_db.txt b/ceammc/ext/class-wrapper/modules/matrix/help/matrix.<-xlet_db.txt deleted file mode 100644 index 56332409b0..0000000000 --- a/ceammc/ext/class-wrapper/modules/matrix/help/matrix.<-xlet_db.txt +++ /dev/null @@ -1 +0,0 @@ -matrix.< .. . diff --git a/ceammc/ext/class-wrapper/modules/matrix/help/matrix.<=-help.pd b/ceammc/ext/class-wrapper/modules/matrix/help/matrix.<=-help.pd deleted file mode 100644 index 955bcb3863..0000000000 --- a/ceammc/ext/class-wrapper/modules/matrix/help/matrix.<=-help.pd +++ /dev/null @@ -1,73 +0,0 @@ -#N canvas 0 0 760 555 12; -#X declare -lib ceammc; -#X declare -lib matrix; -#X obj 456 50 cnv 1 284 21 empty empty empty 17 7 0 10 -245760 -1 0; -#X text 456 50 element-wise less equal comparasion; -#X obj 1 1 cnv 5 740 40 empty empty matrix.<= 20 20 0 20 -104026 -4096 -0; -#X obj 649 11 matrix.<=; -#X obj 50 118 declare -lib matrix; -#X msg 50 162 2 2 1 2 3 4; -#X floatatom 309 162 5 0 0 0 - - -; -#X obj 50 190 matrix.<= Matrix 2 2 4 3 2 1; -#X obj 50 219 ui.display @display_type 1 @size 150 18; -#X obj 20 259 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 264 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 --49933 0; -#X text 120 269 1\.; -#X text 150 269 list; -#X obj 281 270 cnv 1 16 18 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 280 269 B: matrix to compare (Matrix NROWS NCOLS ...) or float -to compare.; -#X obj 20 311 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 316 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 -0; -#X text 120 321 1\.; -#X text 150 321 *list*; -#X text 280 321 Matrix data constructor: NROWS NCOLS ....; -#X text 150 339 *data*; -#X text 280 339 Matrix data.; -#X text 120 357 2\.; -#X text 150 357 *list*; -#X text 280 357 matrix to compare: NROWS NCOLS ....; -#X text 150 375 *data*; -#X text 280 375 matrix to compare.; -#X text 150 393 *float*; -#X text 280 393 float to compare.; -#X obj 20 421 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 426 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 --49933 0; -#X text 120 431 1\.; -#X text 280 431 output compare result - matrix with 1 and 0 (Matrix); -#X obj 10 48 ui.link @title index @url ../index-help.pd; -#X text 51 45 ::; -#X obj 67 48 ui.link @title matrix @url matrix-help.pd; -#X text 116 45 ::; -#X obj 132 48 ui.link @title matrix @url matrix.matrix-help.pd; -#X obj 1 505 cnv 5 740 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: matrix v0.1; -#X text 585 520 see also:; -#X obj 661 520 matrix.<; -#N canvas 10 527 400 290 info 0; -#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; -#X text 10 10 library:; -#X text 120 10 matrix; -#X text 10 32 version:; -#X text 120 32 0.1; -#X text 10 54 object:; -#X text 120 54 matrix.<=; -#X text 10 76 category:; -#X text 120 76 matrix; -#X text 10 98 since:; -#X text 120 98 0.1; -#X text 10 120 authors:; -#X text 120 120 Serge Poltavski; -#X text 10 142 license:; -#X text 120 142 GPLv3; -#X obj 120 164 declare -lib ceammc; -#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 120 268 generated by pddoc; -#X restore 10 527 pd info; -#X connect 5 0 7 0; -#X connect 6 0 7 1; -#X connect 7 0 8 0; \ No newline at end of file diff --git a/ceammc/ext/class-wrapper/modules/matrix/help/matrix.<=-xlet_db.txt b/ceammc/ext/class-wrapper/modules/matrix/help/matrix.<=-xlet_db.txt deleted file mode 100644 index 684e9b867c..0000000000 --- a/ceammc/ext/class-wrapper/modules/matrix/help/matrix.<=-xlet_db.txt +++ /dev/null @@ -1 +0,0 @@ -matrix.<= .. . diff --git a/ceammc/ext/class-wrapper/modules/matrix/help/matrix.==-help.pd b/ceammc/ext/class-wrapper/modules/matrix/help/matrix.==-help.pd deleted file mode 100644 index f7a9de7159..0000000000 --- a/ceammc/ext/class-wrapper/modules/matrix/help/matrix.==-help.pd +++ /dev/null @@ -1,74 +0,0 @@ -#N canvas 0 0 760 555 12; -#X declare -lib ceammc; -#X declare -lib matrix; -#X obj 440 50 cnv 1 300 21 empty empty empty 17 7 0 10 -245760 -1 0; -#X text 440 50 element-wise matrix equal comparasion; -#X obj 1 1 cnv 5 740 40 empty empty matrix.== 20 20 0 20 -104026 -4096 -0; -#X obj 649 11 matrix.==; -#X obj 50 118 declare -lib matrix; -#X msg 50 162 2 2 1 2 3 4; -#X floatatom 251 162 5 0 0 0 - - -; -#X msg 309 162 2 2 1 4 3 6; -#X obj 50 190 matrix.== Matrix 2 2 1 2 3 4; -#X obj 50 219 ui.display @display_type 1 @size 150 18; -#X obj 20 259 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 264 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 --49933 0; -#X text 120 269 1\.; -#X text 150 269 list; -#X obj 281 270 cnv 1 17 18 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 280 269 V: float to compare or matrix to compare (Matrix NROWS -NCOLS ...).; -#X obj 20 311 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 316 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 -0; -#X text 120 321 1\.; -#X text 150 321 *list*; -#X text 280 321 Matrix data constructor: NROWS NCOLS ....; -#X text 150 339 *data*; -#X text 280 339 Matrix data.; -#X text 120 357 2\.; -#X text 150 357 *float*; -#X text 280 357 float to compare.; -#X text 150 375 *data*; -#X text 280 375 matrix to compare (NROWS NCOLS ...).; -#X obj 20 403 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 408 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 --49933 0; -#X text 120 413 1\.; -#X text 280 413 output compare result - matrix with 1 and 0 (Matrix); -#X obj 10 48 ui.link @title index @url ../index-help.pd; -#X text 51 45 ::; -#X obj 67 48 ui.link @title matrix @url matrix-help.pd; -#X text 116 45 ::; -#X obj 132 48 ui.link @title matrix @url matrix.matrix-help.pd; -#X obj 1 505 cnv 5 740 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: matrix v0.1; -#X text 511 520 see also:; -#X obj 587 520 matrix.>; -#X obj 661 520 matrix.<; -#N canvas 10 527 400 290 info 0; -#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; -#X text 10 10 library:; -#X text 120 10 matrix; -#X text 10 32 version:; -#X text 120 32 0.1; -#X text 10 54 object:; -#X text 120 54 matrix.==; -#X text 10 76 category:; -#X text 120 76 matrix; -#X text 10 98 since:; -#X text 120 98 0.1; -#X text 10 120 authors:; -#X text 120 120 Serge Poltavski; -#X text 10 142 license:; -#X text 120 142 GPLv3; -#X obj 120 164 declare -lib ceammc; -#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 120 268 generated by pddoc; -#X restore 10 527 pd info; -#X connect 5 0 8 0; -#X connect 6 0 8 1; -#X connect 7 0 8 1; -#X connect 8 0 9 0; \ No newline at end of file diff --git a/ceammc/ext/class-wrapper/modules/matrix/help/matrix.>-help.pd b/ceammc/ext/class-wrapper/modules/matrix/help/matrix.>-help.pd deleted file mode 100644 index f392d96b2a..0000000000 --- a/ceammc/ext/class-wrapper/modules/matrix/help/matrix.>-help.pd +++ /dev/null @@ -1,74 +0,0 @@ -#N canvas 0 0 760 555 12; -#X declare -lib ceammc; -#X declare -lib matrix; -#X obj 440 50 cnv 1 300 21 empty empty empty 17 7 0 10 -245760 -1 0; -#X text 440 50 element-wise greater then comparasion; -#X obj 1 1 cnv 5 740 40 empty empty matrix.> 20 20 0 20 -104026 -4096 -0; -#X obj 656 11 matrix.>; -#X obj 50 118 declare -lib matrix; -#X msg 50 162 2 2 1 2 3 4; -#X floatatom 299 162 5 0 0 0 - - -; -#X obj 50 190 matrix.> Matrix 2 2 4 3 2 1; -#X obj 50 219 ui.display @display_type 1 @size 150 18; -#X obj 20 259 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 264 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 --49933 0; -#X text 120 269 1\.; -#X text 150 269 list; -#X obj 281 270 cnv 1 16 18 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 280 269 B: matrix to compare (Matrix NROWS NCOLS ...) or float -to compare.; -#X obj 20 311 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 316 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 -0; -#X text 120 321 1\.; -#X text 150 321 *list*; -#X text 280 321 Matrix data constructor: NROWS NCOLS ....; -#X text 150 339 *data*; -#X text 280 339 Matrix data.; -#X text 120 357 2\.; -#X text 150 357 *list*; -#X text 280 357 matrix to compare: NROWS NCOLS ....; -#X text 150 375 *data*; -#X text 280 375 matrix to compare.; -#X text 150 393 *float*; -#X text 280 393 float to compare.; -#X obj 20 421 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 426 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 --49933 0; -#X text 120 431 1\.; -#X text 280 431 output compare result - matrix with 1 and 0 (Matrix); -#X obj 10 48 ui.link @title index @url ../index-help.pd; -#X text 51 45 ::; -#X obj 67 48 ui.link @title matrix @url matrix-help.pd; -#X text 116 45 ::; -#X obj 132 48 ui.link @title matrix @url matrix.matrix-help.pd; -#X obj 1 505 cnv 5 740 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: matrix v0.1; -#X text 497 520 see also:; -#X obj 573 520 matrix.==; -#X obj 654 520 matrix.>=; -#N canvas 10 527 400 290 info 0; -#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; -#X text 10 10 library:; -#X text 120 10 matrix; -#X text 10 32 version:; -#X text 120 32 0.1; -#X text 10 54 object:; -#X text 120 54 matrix.>; -#X text 10 76 category:; -#X text 120 76 matrix; -#X text 10 98 since:; -#X text 120 98 0.1; -#X text 10 120 authors:; -#X text 120 120 Serge Poltavski; -#X text 10 142 license:; -#X text 120 142 GPLv3; -#X obj 120 164 declare -lib ceammc; -#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 120 268 generated by pddoc; -#X restore 10 527 pd info; -#X connect 5 0 7 0; -#X connect 6 0 7 1; -#X connect 7 0 8 0; \ No newline at end of file diff --git a/ceammc/ext/class-wrapper/modules/matrix/help/matrix.>-xlet_db.txt b/ceammc/ext/class-wrapper/modules/matrix/help/matrix.>-xlet_db.txt deleted file mode 100644 index 510bb1e77e..0000000000 --- a/ceammc/ext/class-wrapper/modules/matrix/help/matrix.>-xlet_db.txt +++ /dev/null @@ -1 +0,0 @@ -matrix.> .. . diff --git a/ceammc/ext/class-wrapper/modules/matrix/help/matrix.>=-help.pd b/ceammc/ext/class-wrapper/modules/matrix/help/matrix.>=-help.pd deleted file mode 100644 index fc729fd415..0000000000 --- a/ceammc/ext/class-wrapper/modules/matrix/help/matrix.>=-help.pd +++ /dev/null @@ -1,73 +0,0 @@ -#N canvas 0 0 760 555 12; -#X declare -lib ceammc; -#X declare -lib matrix; -#X obj 432 50 cnv 1 308 21 empty empty empty 17 7 0 10 -245760 -1 0; -#X text 432 50 element-wise greater equal comparasion; -#X obj 1 1 cnv 5 740 40 empty empty matrix.>= 20 20 0 20 -104026 -4096 -0; -#X obj 649 11 matrix.>=; -#X obj 50 118 declare -lib matrix; -#X msg 50 162 2 2 1 2 3 4; -#X floatatom 299 162 5 0 0 0 - - -; -#X obj 50 190 matrix.>= Matrix 2 2 4 3 2 1; -#X obj 50 219 ui.display @display_type 1 @size 150 18; -#X obj 20 259 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 264 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 --49933 0; -#X text 120 269 1\.; -#X text 150 269 list; -#X obj 281 270 cnv 1 16 18 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 280 269 B: matrix to compare (Matrix NROWS NCOLS ...) or float -to compare.; -#X obj 20 311 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 316 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 -0; -#X text 120 321 1\.; -#X text 150 321 *list*; -#X text 280 321 Matrix data constructor: NROWS NCOLS ....; -#X text 150 339 *data*; -#X text 280 339 Matrix data.; -#X text 120 357 2\.; -#X text 150 357 *list*; -#X text 280 357 matrix to compare: NROWS NCOLS ....; -#X text 150 375 *data*; -#X text 280 375 matrix to compare.; -#X text 150 393 *float*; -#X text 280 393 float to compare.; -#X obj 20 421 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 426 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 --49933 0; -#X text 120 431 1\.; -#X text 280 431 output compare result - matrix with 1 and 0 (Matrix); -#X obj 10 48 ui.link @title index @url ../index-help.pd; -#X text 51 45 ::; -#X obj 67 48 ui.link @title matrix @url matrix-help.pd; -#X text 116 45 ::; -#X obj 132 48 ui.link @title matrix @url matrix.matrix-help.pd; -#X obj 1 505 cnv 5 740 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: matrix v0.1; -#X text 585 520 see also:; -#X obj 661 520 matrix.>; -#N canvas 10 527 400 290 info 0; -#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; -#X text 10 10 library:; -#X text 120 10 matrix; -#X text 10 32 version:; -#X text 120 32 0.1; -#X text 10 54 object:; -#X text 120 54 matrix.>=; -#X text 10 76 category:; -#X text 120 76 matrix; -#X text 10 98 since:; -#X text 120 98 0.1; -#X text 10 120 authors:; -#X text 120 120 Serge Poltavski; -#X text 10 142 license:; -#X text 120 142 GPLv3; -#X obj 120 164 declare -lib ceammc; -#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 120 268 generated by pddoc; -#X restore 10 527 pd info; -#X connect 5 0 7 0; -#X connect 6 0 7 1; -#X connect 7 0 8 0; \ No newline at end of file diff --git a/ceammc/ext/class-wrapper/modules/matrix/help/matrix.>=-xlet_db.txt b/ceammc/ext/class-wrapper/modules/matrix/help/matrix.>=-xlet_db.txt deleted file mode 100644 index eba50a2cff..0000000000 --- a/ceammc/ext/class-wrapper/modules/matrix/help/matrix.>=-xlet_db.txt +++ /dev/null @@ -1 +0,0 @@ -matrix.>= .. . diff --git a/ceammc/ext/class-wrapper/modules/matrix/help/matrix.eq-example.pd b/ceammc/ext/class-wrapper/modules/matrix/help/matrix.eq-example.pd new file mode 100644 index 0000000000..8aa7a0ae4d --- /dev/null +++ b/ceammc/ext/class-wrapper/modules/matrix/help/matrix.eq-example.pd @@ -0,0 +1,12 @@ +#N canvas 0 0 388 159 12; +#X declare -lib matrix; +#X obj 20 48 declare -lib matrix; +#X msg 20 92 2 2 1 2 3 4; +#X floatatom 221 92 5 0 0 0 - - -; +#X msg 279 92 2 2 1 4 3 6; +#X obj 20 120 matrix.== Matrix 2 2 1 2 3 4; +#X obj 20 149 ui.display @display_type 1 @size 150 18; +#X connect 1 0 4 0; +#X connect 2 0 4 1; +#X connect 3 0 4 1; +#X connect 4 0 5 0; diff --git a/ceammc/ext/class-wrapper/modules/matrix/help/matrix.eq-help.pd b/ceammc/ext/class-wrapper/modules/matrix/help/matrix.eq-help.pd new file mode 100644 index 0000000000..ac6edcf6f3 --- /dev/null +++ b/ceammc/ext/class-wrapper/modules/matrix/help/matrix.eq-help.pd @@ -0,0 +1,75 @@ +#N canvas 0 0 785 555 12; +#X declare -lib ceammc; +#X declare -lib matrix; +#X obj 476 50 cnv 1 289 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 476 50 element-wise matrix equal comparasion; +#X obj 1 1 cnv 5 765 40 empty empty matrix.eq 20 20 0 20 -104026 -4096 +0; +#X obj 584 11 matrix.==; +#X obj 675 11 matrix.eq; +#X obj 50 118 declare -lib matrix; +#X msg 50 162 2 2 1 2 3 4; +#X floatatom 251 162 5 0 0 0 - - -; +#X msg 309 162 2 2 1 4 3 6; +#X obj 50 190 matrix.== Matrix 2 2 1 2 3 4; +#X obj 50 219 ui.display @display_type 1 @size 150 18; +#X obj 20 259 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 264 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +-49933 0; +#X text 110 299 1\.; +#X text 150 299 list; +#X obj 246 300 cnv 1 16 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 299 V: float to compare or matrix to compare (Matrix NROWS +NCOLS ...).; +#X obj 20 344 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 349 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +0; +#X text 110 350 1\.; +#X text 150 350 *list*; +#X text 245 350 Matrix data constructor: NROWS NCOLS ...; +#X text 150 370 *data*; +#X text 245 370 Matrix data.; +#X text 110 390 2\.; +#X text 150 390 *float*; +#X text 245 390 float to compare.; +#X text 150 410 *data*; +#X text 245 410 matrix to compare (NROWS NCOLS ...).; +#X obj 20 440 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 445 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 446 1\.; +#X text 245 446 output compare result - matrix with 1 and 0 (Matrix).; +#X obj 10 48 ui.link @title index @url ../index-help.pd; +#X text 51 45 ::; +#X obj 67 48 ui.link @title matrix @url matrix-help.pd; +#X text 116 45 ::; +#X obj 132 48 ui.link @title matrix @url matrix.matrix-help.pd; +#X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 508 library: matrix v0.1; +#X text 533 520 see also:; +#X obj 607 520 matrix.>; +#X obj 681 520 matrix.<; +#N canvas 10 527 400 290 info 0; +#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; +#X text 10 10 library:; +#X text 120 10 matrix; +#X text 10 32 version:; +#X text 120 32 0.1; +#X text 10 54 object:; +#X text 120 54 matrix.eq; +#X text 10 76 category:; +#X text 120 76 matrix; +#X text 10 98 since:; +#X text 120 98 0.1; +#X text 10 120 authors:; +#X text 120 120 Serge Poltavski; +#X text 10 142 license:; +#X text 120 142 GPLv3; +#X obj 120 164 declare -lib ceammc; +#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 120 268 generated by pddoc; +#X restore 10 527 pd info; +#X connect 6 0 9 0; +#X connect 7 0 9 1; +#X connect 8 0 9 1; +#X connect 9 0 10 0; \ No newline at end of file diff --git a/ceammc/ext/class-wrapper/modules/matrix/help/matrix.eq-xlet_db.txt b/ceammc/ext/class-wrapper/modules/matrix/help/matrix.eq-xlet_db.txt new file mode 100644 index 0000000000..95b852be28 --- /dev/null +++ b/ceammc/ext/class-wrapper/modules/matrix/help/matrix.eq-xlet_db.txt @@ -0,0 +1 @@ +matrix.eq,matrix.== .. . diff --git a/ceammc/ext/class-wrapper/modules/matrix/help/matrix.>=-example.pd b/ceammc/ext/class-wrapper/modules/matrix/help/matrix.ge-example.pd similarity index 100% rename from ceammc/ext/class-wrapper/modules/matrix/help/matrix.>=-example.pd rename to ceammc/ext/class-wrapper/modules/matrix/help/matrix.ge-example.pd diff --git a/ceammc/ext/class-wrapper/modules/matrix/help/matrix.ge-help.pd b/ceammc/ext/class-wrapper/modules/matrix/help/matrix.ge-help.pd new file mode 100644 index 0000000000..fbd8b2e439 --- /dev/null +++ b/ceammc/ext/class-wrapper/modules/matrix/help/matrix.ge-help.pd @@ -0,0 +1,74 @@ +#N canvas 0 0 785 555 12; +#X declare -lib ceammc; +#X declare -lib matrix; +#X obj 468 50 cnv 1 297 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 468 50 element-wise greater equal comparasion; +#X obj 1 1 cnv 5 765 40 empty empty matrix.ge 20 20 0 20 -104026 -4096 +0; +#X obj 583 11 matrix.>=; +#X obj 674 11 matrix.ge; +#X obj 50 118 declare -lib matrix; +#X msg 50 162 2 2 1 2 3 4; +#X floatatom 299 162 5 0 0 0 - - -; +#X obj 50 190 matrix.>= Matrix 2 2 4 3 2 1; +#X obj 50 219 ui.display @display_type 1 @size 150 18; +#X obj 20 259 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 264 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +-49933 0; +#X text 110 299 1\.; +#X text 150 299 list; +#X obj 246 300 cnv 1 16 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 299 B: matrix to compare (Matrix NROWS NCOLS ...) or float +to compare.; +#X obj 20 344 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 349 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +0; +#X text 110 350 1\.; +#X text 150 350 *list*; +#X text 245 350 Matrix data constructor: NROWS NCOLS ...; +#X text 150 370 *data*; +#X text 245 370 Matrix data.; +#X text 110 390 2\.; +#X text 150 390 *list*; +#X text 245 390 matrix to compare: NROWS NCOLS ...; +#X text 150 410 *data*; +#X text 245 410 matrix to compare.; +#X text 150 430 *float*; +#X text 245 430 float to compare.; +#X obj 20 460 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 465 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 466 1\.; +#X text 245 466 output compare result - matrix with 1 and 0 (Matrix).; +#X obj 10 48 ui.link @title index @url ../index-help.pd; +#X text 51 45 ::; +#X obj 67 48 ui.link @title matrix @url matrix-help.pd; +#X text 116 45 ::; +#X obj 132 48 ui.link @title matrix @url matrix.matrix-help.pd; +#X obj 1 516 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 519 library: matrix v0.1; +#X text 607 531 see also:; +#X obj 681 531 matrix.>; +#N canvas 10 538 400 290 info 0; +#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; +#X text 10 10 library:; +#X text 120 10 matrix; +#X text 10 32 version:; +#X text 120 32 0.1; +#X text 10 54 object:; +#X text 120 54 matrix.ge; +#X text 10 76 category:; +#X text 120 76 matrix; +#X text 10 98 since:; +#X text 120 98 0.1; +#X text 10 120 authors:; +#X text 120 120 Serge Poltavski; +#X text 10 142 license:; +#X text 120 142 GPLv3; +#X obj 120 164 declare -lib ceammc; +#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 120 268 generated by pddoc; +#X restore 10 538 pd info; +#X connect 6 0 8 0; +#X connect 7 0 8 1; +#X connect 8 0 9 0; \ No newline at end of file diff --git a/ceammc/ext/class-wrapper/modules/matrix/help/matrix.ge-xlet_db.txt b/ceammc/ext/class-wrapper/modules/matrix/help/matrix.ge-xlet_db.txt new file mode 100644 index 0000000000..6ced4f813d --- /dev/null +++ b/ceammc/ext/class-wrapper/modules/matrix/help/matrix.ge-xlet_db.txt @@ -0,0 +1 @@ +matrix.ge,matrix.>= .. . diff --git a/ceammc/ext/class-wrapper/modules/matrix/help/matrix.>-example.pd b/ceammc/ext/class-wrapper/modules/matrix/help/matrix.gt-example.pd similarity index 100% rename from ceammc/ext/class-wrapper/modules/matrix/help/matrix.>-example.pd rename to ceammc/ext/class-wrapper/modules/matrix/help/matrix.gt-example.pd diff --git a/ceammc/ext/class-wrapper/modules/matrix/help/matrix.gt-help.pd b/ceammc/ext/class-wrapper/modules/matrix/help/matrix.gt-help.pd new file mode 100644 index 0000000000..361b00277a --- /dev/null +++ b/ceammc/ext/class-wrapper/modules/matrix/help/matrix.gt-help.pd @@ -0,0 +1,75 @@ +#N canvas 0 0 785 555 12; +#X declare -lib ceammc; +#X declare -lib matrix; +#X obj 476 50 cnv 1 289 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 476 50 element-wise greater then comparasion; +#X obj 1 1 cnv 5 765 40 empty empty matrix.gt 20 20 0 20 -104026 -4096 +0; +#X obj 591 11 matrix.>; +#X obj 675 11 matrix.gt; +#X obj 50 118 declare -lib matrix; +#X msg 50 162 2 2 1 2 3 4; +#X floatatom 299 162 5 0 0 0 - - -; +#X obj 50 190 matrix.> Matrix 2 2 4 3 2 1; +#X obj 50 219 ui.display @display_type 1 @size 150 18; +#X obj 20 259 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 264 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +-49933 0; +#X text 110 299 1\.; +#X text 150 299 list; +#X obj 246 300 cnv 1 16 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 299 B: matrix to compare (Matrix NROWS NCOLS ...) or float +to compare.; +#X obj 20 344 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 349 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +0; +#X text 110 350 1\.; +#X text 150 350 *list*; +#X text 245 350 Matrix data constructor: NROWS NCOLS ...; +#X text 150 370 *data*; +#X text 245 370 Matrix data.; +#X text 110 390 2\.; +#X text 150 390 *list*; +#X text 245 390 matrix to compare: NROWS NCOLS ...; +#X text 150 410 *data*; +#X text 245 410 matrix to compare.; +#X text 150 430 *float*; +#X text 245 430 float to compare.; +#X obj 20 460 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 465 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 466 1\.; +#X text 245 466 output compare result - matrix with 1 and 0 (Matrix).; +#X obj 10 48 ui.link @title index @url ../index-help.pd; +#X text 51 45 ::; +#X obj 67 48 ui.link @title matrix @url matrix-help.pd; +#X text 116 45 ::; +#X obj 132 48 ui.link @title matrix @url matrix.matrix-help.pd; +#X obj 1 516 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 519 library: matrix v0.1; +#X text 519 531 see also:; +#X obj 593 531 matrix.==; +#X obj 674 531 matrix.>=; +#N canvas 10 538 400 290 info 0; +#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; +#X text 10 10 library:; +#X text 120 10 matrix; +#X text 10 32 version:; +#X text 120 32 0.1; +#X text 10 54 object:; +#X text 120 54 matrix.gt; +#X text 10 76 category:; +#X text 120 76 matrix; +#X text 10 98 since:; +#X text 120 98 0.1; +#X text 10 120 authors:; +#X text 120 120 Serge Poltavski; +#X text 10 142 license:; +#X text 120 142 GPLv3; +#X obj 120 164 declare -lib ceammc; +#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 120 268 generated by pddoc; +#X restore 10 538 pd info; +#X connect 6 0 8 0; +#X connect 7 0 8 1; +#X connect 8 0 9 0; \ No newline at end of file diff --git a/ceammc/ext/class-wrapper/modules/matrix/help/matrix.gt-xlet_db.txt b/ceammc/ext/class-wrapper/modules/matrix/help/matrix.gt-xlet_db.txt new file mode 100644 index 0000000000..3821a3e84d --- /dev/null +++ b/ceammc/ext/class-wrapper/modules/matrix/help/matrix.gt-xlet_db.txt @@ -0,0 +1 @@ +matrix.gt,matrix.> .. . diff --git a/ceammc/ext/class-wrapper/modules/matrix/help/matrix.<=-example.pd b/ceammc/ext/class-wrapper/modules/matrix/help/matrix.le-example.pd similarity index 100% rename from ceammc/ext/class-wrapper/modules/matrix/help/matrix.<=-example.pd rename to ceammc/ext/class-wrapper/modules/matrix/help/matrix.le-example.pd diff --git a/ceammc/ext/class-wrapper/modules/matrix/help/matrix.le-help.pd b/ceammc/ext/class-wrapper/modules/matrix/help/matrix.le-help.pd new file mode 100644 index 0000000000..7535287f50 --- /dev/null +++ b/ceammc/ext/class-wrapper/modules/matrix/help/matrix.le-help.pd @@ -0,0 +1,74 @@ +#N canvas 0 0 785 555 12; +#X declare -lib ceammc; +#X declare -lib matrix; +#X obj 491 50 cnv 1 274 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 491 50 element-wise less equal comparasion; +#X obj 1 1 cnv 5 765 40 empty empty matrix.le 20 20 0 20 -104026 -4096 +0; +#X obj 583 11 matrix.<=; +#X obj 674 11 matrix.le; +#X obj 50 118 declare -lib matrix; +#X msg 50 162 2 2 1 2 3 4; +#X floatatom 309 162 5 0 0 0 - - -; +#X obj 50 190 matrix.<= Matrix 2 2 4 3 2 1; +#X obj 50 219 ui.display @display_type 1 @size 150 18; +#X obj 20 259 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 264 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +-49933 0; +#X text 110 299 1\.; +#X text 150 299 list; +#X obj 246 300 cnv 1 16 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 299 B: matrix to compare (Matrix NROWS NCOLS ...) or float +to compare.; +#X obj 20 344 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 349 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +0; +#X text 110 350 1\.; +#X text 150 350 *list*; +#X text 245 350 Matrix data constructor: NROWS NCOLS ...; +#X text 150 370 *data*; +#X text 245 370 Matrix data.; +#X text 110 390 2\.; +#X text 150 390 *list*; +#X text 245 390 matrix to compare: NROWS NCOLS ...; +#X text 150 410 *data*; +#X text 245 410 matrix to compare.; +#X text 150 430 *float*; +#X text 245 430 float to compare.; +#X obj 20 460 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 465 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 466 1\.; +#X text 245 466 output compare result - matrix with 1 and 0 (Matrix).; +#X obj 10 48 ui.link @title index @url ../index-help.pd; +#X text 51 45 ::; +#X obj 67 48 ui.link @title matrix @url matrix-help.pd; +#X text 116 45 ::; +#X obj 132 48 ui.link @title matrix @url matrix.matrix-help.pd; +#X obj 1 516 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 519 library: matrix v0.1; +#X text 607 531 see also:; +#X obj 681 531 matrix.<; +#N canvas 10 538 400 290 info 0; +#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; +#X text 10 10 library:; +#X text 120 10 matrix; +#X text 10 32 version:; +#X text 120 32 0.1; +#X text 10 54 object:; +#X text 120 54 matrix.le; +#X text 10 76 category:; +#X text 120 76 matrix; +#X text 10 98 since:; +#X text 120 98 0.1; +#X text 10 120 authors:; +#X text 120 120 Serge Poltavski; +#X text 10 142 license:; +#X text 120 142 GPLv3; +#X obj 120 164 declare -lib ceammc; +#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 120 268 generated by pddoc; +#X restore 10 538 pd info; +#X connect 6 0 8 0; +#X connect 7 0 8 1; +#X connect 8 0 9 0; \ No newline at end of file diff --git a/ceammc/ext/class-wrapper/modules/matrix/help/matrix.le-xlet_db.txt b/ceammc/ext/class-wrapper/modules/matrix/help/matrix.le-xlet_db.txt new file mode 100644 index 0000000000..a198252062 --- /dev/null +++ b/ceammc/ext/class-wrapper/modules/matrix/help/matrix.le-xlet_db.txt @@ -0,0 +1 @@ +matrix.le,matrix.<= .. . diff --git a/ceammc/ext/class-wrapper/modules/matrix/help/matrix.<-example.pd b/ceammc/ext/class-wrapper/modules/matrix/help/matrix.lt-example.pd similarity index 100% rename from ceammc/ext/class-wrapper/modules/matrix/help/matrix.<-example.pd rename to ceammc/ext/class-wrapper/modules/matrix/help/matrix.lt-example.pd diff --git a/ceammc/ext/class-wrapper/modules/matrix/help/matrix.lt-help.pd b/ceammc/ext/class-wrapper/modules/matrix/help/matrix.lt-help.pd new file mode 100644 index 0000000000..0cfab1f215 --- /dev/null +++ b/ceammc/ext/class-wrapper/modules/matrix/help/matrix.lt-help.pd @@ -0,0 +1,74 @@ +#N canvas 0 0 785 555 12; +#X declare -lib ceammc; +#X declare -lib matrix; +#X obj 499 50 cnv 1 266 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 499 50 element-wise less then comparasion; +#X obj 1 1 cnv 5 765 40 empty empty matrix.lt 20 20 0 20 -104026 -4096 +0; +#X obj 591 11 matrix.<; +#X obj 675 11 matrix.lt; +#X obj 50 118 declare -lib matrix; +#X msg 50 162 2 2 1 2 3 4; +#X floatatom 261 162 5 0 0 0 - - -; +#X obj 50 190 matrix.< Matrix 2 2 4 3 2 1; +#X obj 50 219 ui.display @display_type 1 @size 150 18; +#X obj 20 259 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 264 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +-49933 0; +#X text 110 299 1\.; +#X text 150 299 list; +#X obj 246 300 cnv 1 16 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 299 B: matrix to compare (Matrix NROWS NCOLS ...) or float +to compare.; +#X obj 20 344 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 349 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +0; +#X text 110 350 1\.; +#X text 150 350 *list*; +#X text 245 350 Matrix data constructor: NROWS NCOLS ...; +#X text 150 370 *data*; +#X text 245 370 Matrix data.; +#X text 110 390 2\.; +#X text 150 390 *list*; +#X text 245 390 matrix to compare: NROWS NCOLS ...; +#X text 150 410 *data*; +#X text 245 410 matrix to compare.; +#X text 150 430 *float*; +#X text 245 430 float to compare.; +#X obj 20 460 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 465 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 466 1\.; +#X text 245 466 output compare result - matrix with 1 and 0 (Matrix).; +#X obj 10 48 ui.link @title index @url ../index-help.pd; +#X text 51 45 ::; +#X obj 67 48 ui.link @title matrix @url matrix-help.pd; +#X text 116 45 ::; +#X obj 132 48 ui.link @title matrix @url matrix.matrix-help.pd; +#X obj 1 516 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 519 library: matrix v0.1; +#X text 600 531 see also:; +#X obj 674 531 matrix.<=; +#N canvas 10 538 400 290 info 0; +#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; +#X text 10 10 library:; +#X text 120 10 matrix; +#X text 10 32 version:; +#X text 120 32 0.1; +#X text 10 54 object:; +#X text 120 54 matrix.lt; +#X text 10 76 category:; +#X text 120 76 matrix; +#X text 10 98 since:; +#X text 120 98 0.1; +#X text 10 120 authors:; +#X text 120 120 Serge Poltavski; +#X text 10 142 license:; +#X text 120 142 GPLv3; +#X obj 120 164 declare -lib ceammc; +#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 120 268 generated by pddoc; +#X restore 10 538 pd info; +#X connect 6 0 8 0; +#X connect 7 0 8 1; +#X connect 8 0 9 0; \ No newline at end of file diff --git a/ceammc/ext/class-wrapper/modules/matrix/help/matrix.lt-xlet_db.txt b/ceammc/ext/class-wrapper/modules/matrix/help/matrix.lt-xlet_db.txt new file mode 100644 index 0000000000..a75acc4d9a --- /dev/null +++ b/ceammc/ext/class-wrapper/modules/matrix/help/matrix.lt-xlet_db.txt @@ -0,0 +1 @@ +matrix.lt,matrix.< .. . diff --git a/ceammc/ext/class-wrapper/modules/matrix/help/matrix.matrix-help.pd b/ceammc/ext/class-wrapper/modules/matrix/help/matrix.matrix-help.pd index a64dbc5f70..20fc556fdc 100644 --- a/ceammc/ext/class-wrapper/modules/matrix/help/matrix.matrix-help.pd +++ b/ceammc/ext/class-wrapper/modules/matrix/help/matrix.matrix-help.pd @@ -2,207 +2,207 @@ #X obj 20 53 ui.link @title index @url ../index-help.pd; #X text 62 50 ::; #X obj 79 53 ui.link @title matrix @url matrix-help.pd; -#X obj 30 116 matrix.!=; -#X text 200 116 element-wise matrix not equal comparasion; -#X obj 30 143 matrix.<; -#X text 200 143 element-wise less then comparasion; -#X obj 30 170 matrix.<=; -#X text 200 170 element-wise less equal comparasion; -#X obj 30 197 matrix.==; -#X text 200 197 element-wise matrix equal comparasion; -#X obj 30 224 matrix.>; -#X text 200 224 element-wise greater then comparasion; -#X obj 30 251 matrix.>=; -#X text 200 251 element-wise greater equal comparasion; -#X obj 30 278 matrix.abs; -#X text 200 278 calc abs value for each matrix element; -#X obj 30 305 matrix.accu; -#X text 200 305 accumulate (sum) all elements of matrix; -#X obj 30 332 matrix.acos; -#X text 200 332 element-wise acrcosine; -#X obj 30 359 matrix.acosh; -#X text 200 359 element-wise hyperbolic acrcosine; -#X obj 30 386 matrix.add; -#X text 200 386 element-wise matrix addition; -#X obj 30 413 matrix.all; -#X text 200 413 check if all elements of the matrix are non-zero; -#X obj 30 440 matrix.all_col; -#X text 200 440 row with each element (0 or 1) indicating whether the +#X obj 30 116 matrix.abs; +#X text 200 116 calc abs value for each matrix element; +#X obj 30 143 matrix.accu; +#X text 200 143 accumulate (sum) all elements of matrix; +#X obj 30 170 matrix.acos; +#X text 200 170 element-wise acrcosine; +#X obj 30 197 matrix.acosh; +#X text 200 197 element-wise hyperbolic acrcosine; +#X obj 30 224 matrix.add; +#X text 200 224 element-wise matrix addition; +#X obj 30 251 matrix.all; +#X text 200 251 check if all elements of the matrix are non-zero; +#X obj 30 278 matrix.all_col; +#X text 200 278 row with each element (0 or 1) indicating whether the corresponding column has all non-zero elements; -#X obj 30 477 matrix.all_row; -#X text 200 477 column with each element (0 or 1) indicating whether +#X obj 30 318 matrix.all_row; +#X text 200 318 column with each element (0 or 1) indicating whether the corresponding row has all non-zero elements; -#X obj 30 514 matrix.any; -#X text 200 514 check if any elements of the matrix are non-zero; -#X obj 30 541 matrix.any_col; -#X text 200 541 row with each element (0 or 1) indicating whether the +#X obj 30 358 matrix.any; +#X text 200 358 check if any elements of the matrix are non-zero; +#X obj 30 385 matrix.any_col; +#X text 200 385 row with each element (0 or 1) indicating whether the corresponding column has any non-zero elements; -#X obj 30 578 matrix.any_row; -#X text 200 578 column with each element (0 or 1) indicating whether +#X obj 30 425 matrix.any_row; +#X text 200 425 column with each element (0 or 1) indicating whether the corresponding row has any non-zero elements; -#X obj 30 615 matrix.asin; -#X text 200 615 element-wise acrsine; -#X obj 30 642 matrix.asinh; -#X text 200 642 element-wise hyperbolic acrsine; -#X obj 30 669 matrix.at; -#X text 200 669 select matrix element at specified position; -#X obj 30 696 matrix.atan; -#X text 200 696 element-wise arctangent; -#X obj 30 723 matrix.atanh; -#X text 200 723 element-wise hyperbolic acrtangent; -#X obj 30 750 matrix.clip; -#X text 200 750 clip matrix value to range [min \, max]; -#X obj 30 777 matrix.col; -#X text 200 777 create Matrix column with specified values; -#X obj 30 804 matrix.col_at; -#X text 200 804 get specified column; -#X obj 30 831 matrix.conv2; -#X text 200 831 2D matrix convolution; -#X obj 30 858 matrix.cos; -#X text 200 858 element-wise cosine; -#X obj 30 885 matrix.cosh; -#X text 200 885 element-wise hyperbolic cosine; -#X obj 30 912 matrix.det; -#X text 200 912 determinant of square matrix; -#X obj 30 939 matrix.diag; -#X text 200 939 get matrix diagonals; -#X obj 30 966 matrix.div; -#X text 200 966 element-wise matrix division; -#X obj 30 993 matrix.exp; -#X text 200 993 element-wise base-e exponent: e^x; -#X obj 30 1020 matrix.exp10; -#X text 200 1020 element-wise base-10 exponent: 10^x; -#X obj 30 1047 matrix.exp2; -#X text 200 1047 element-wise base-2 exponent: 2^x; -#X obj 30 1074 matrix.fill; -#X text 200 1074 fill input Matrix with value; -#X obj 30 1101 matrix.from_list; -#X text 200 1101 create Matrix from list values; -#X obj 30 1128 matrix.full; -#X text 200 1128 create Matrix filled with specified value; -#X obj 30 1155 matrix.hist; -#X text 200 1155 produce a matrix containing column histogram counts; -#X obj 30 1182 matrix.identity; -#X text 200 1182 create identity Matrix; -#X obj 30 1209 matrix.insert_col; -#X text 200 1209 insert vector at specified matrix column; -#X obj 30 1236 matrix.insert_row; -#X text 200 1236 insert vector at specified matrix row; -#X obj 30 1263 matrix.inverse; -#X text 200 1263 inverse square matrix; -#X obj 30 1290 matrix.linspace; -#X text 200 1290 generate row with linearly spaced N elements; -#X obj 30 1317 matrix.load; -#X text 200 1317 load matrix from CSV format; -#X obj 30 1344 matrix.logspace; -#X text 200 1344 generate row with N elements spaced logarithmically; -#X obj 30 1371 matrix.matmul; -#X text 200 1371 matrix product; -#X obj 30 1398 matrix.max; -#X text 200 1398 returns maximum in Matrix; -#X obj 30 1425 matrix.mean; -#X text 200 1425 mean matrix value; -#X obj 30 1452 matrix.mean_col; -#X text 200 1452 mean value for each matrix column; -#X obj 30 1479 matrix.mean_row; -#X text 200 1479 mean value for each matrix row; -#X obj 30 1506 matrix.median; -#X text 200 1506 median matrix value; -#X obj 30 1533 matrix.median_col; -#X text 200 1533 median matrix value for each column; -#X obj 30 1560 matrix.median_row; -#X text 200 1560 median matrix value for each row; -#X obj 30 1587 matrix.min; -#X text 200 1587 returns minimum value in Matrix; -#X obj 30 1614 matrix.mul; -#X text 200 1614 element-wise matrix multiplication; -#X obj 30 1641 matrix.ncols; -#X text 200 1641 return number of columns in Matrix; -#X obj 30 1668 matrix.new; -#X text 200 1668 Matrix data type; -#X obj 30 1695 matrix.nrows; -#X text 200 1695 return number of rows in Matrix; -#X obj 30 1722 matrix.ones; -#X text 200 1722 create Matrix with ones; -#X obj 30 1749 matrix.ones_like; -#X text 200 1749 create Matrix filled with ones with the same shape as -input; -#X obj 30 1776 matrix.randn; -#X text 200 1776 generates Matrix using Gaussian distribution with +#X obj 30 465 matrix.asin; +#X text 200 465 element-wise acrsine; +#X obj 30 492 matrix.asinh; +#X text 200 492 element-wise hyperbolic acrsine; +#X obj 30 519 matrix.at; +#X text 200 519 select matrix element at specified position; +#X obj 30 546 matrix.atan; +#X text 200 546 element-wise arctangent; +#X obj 30 573 matrix.atanh; +#X text 200 573 element-wise hyperbolic acrtangent; +#X obj 30 600 matrix.clip; +#X text 200 600 clip matrix value to range [min \, max]; +#X obj 30 627 matrix.col; +#X text 200 627 create Matrix column with specified values; +#X obj 30 654 matrix.col_at; +#X text 200 654 get specified column; +#X obj 30 681 matrix.conv2; +#X text 200 681 2D matrix convolution; +#X obj 30 708 matrix.cos; +#X text 200 708 element-wise cosine; +#X obj 30 735 matrix.cosh; +#X text 200 735 element-wise hyperbolic cosine; +#X obj 30 762 matrix.det; +#X text 200 762 determinant of square matrix; +#X obj 30 789 matrix.diag; +#X text 200 789 get matrix diagonals; +#X obj 30 816 matrix.div; +#X text 200 816 element-wise matrix division; +#X obj 30 843 matrix.eq; +#X text 200 843 element-wise matrix equal comparasion; +#X obj 30 870 matrix.exp; +#X text 200 870 element-wise base-e exponent: e^x; +#X obj 30 897 matrix.exp10; +#X text 200 897 element-wise base-10 exponent: 10^x; +#X obj 30 924 matrix.exp2; +#X text 200 924 element-wise base-2 exponent: 2^x; +#X obj 30 951 matrix.fill; +#X text 200 951 fill input Matrix with value; +#X obj 30 978 matrix.from_list; +#X text 200 978 create Matrix from list values; +#X obj 30 1005 matrix.full; +#X text 200 1005 create Matrix filled with specified value; +#X obj 30 1032 matrix.ge; +#X text 200 1032 element-wise greater equal comparasion; +#X obj 30 1059 matrix.gt; +#X text 200 1059 element-wise greater then comparasion; +#X obj 30 1086 matrix.hist; +#X text 200 1086 produce a matrix containing column histogram counts; +#X obj 30 1113 matrix.identity; +#X text 200 1113 create identity Matrix; +#X obj 30 1140 matrix.insert_col; +#X text 200 1140 insert vector at specified matrix column; +#X obj 30 1167 matrix.insert_row; +#X text 200 1167 insert vector at specified matrix row; +#X obj 30 1194 matrix.inverse; +#X text 200 1194 inverse square matrix; +#X obj 30 1221 matrix.le; +#X text 200 1221 element-wise less equal comparasion; +#X obj 30 1248 matrix.linspace; +#X text 200 1248 generate row with linearly spaced N elements; +#X obj 30 1275 matrix.load; +#X text 200 1275 load matrix from CSV format; +#X obj 30 1302 matrix.logspace; +#X text 200 1302 generate row with N elements spaced logarithmically; +#X obj 30 1329 matrix.lt; +#X text 200 1329 element-wise less then comparasion; +#X obj 30 1356 matrix.matmul; +#X text 200 1356 matrix product; +#X obj 30 1383 matrix.max; +#X text 200 1383 returns maximum in Matrix; +#X obj 30 1410 matrix.mean; +#X text 200 1410 mean matrix value; +#X obj 30 1437 matrix.mean_col; +#X text 200 1437 mean value for each matrix column; +#X obj 30 1464 matrix.mean_row; +#X text 200 1464 mean value for each matrix row; +#X obj 30 1491 matrix.median; +#X text 200 1491 median matrix value; +#X obj 30 1518 matrix.median_col; +#X text 200 1518 median matrix value for each column; +#X obj 30 1545 matrix.median_row; +#X text 200 1545 median matrix value for each row; +#X obj 30 1572 matrix.min; +#X text 200 1572 returns minimum value in Matrix; +#X obj 30 1599 matrix.mul; +#X text 200 1599 element-wise matrix multiplication; +#X obj 30 1626 matrix.ncols; +#X text 200 1626 return number of columns in Matrix; +#X obj 30 1653 matrix.ne; +#X text 200 1653 element-wise matrix not equal comparasion; +#X obj 30 1680 matrix.new; +#X text 200 1680 Matrix data type; +#X obj 30 1707 matrix.nrows; +#X text 200 1707 return number of rows in Matrix; +#X obj 30 1734 matrix.ones; +#X text 200 1734 create Matrix with ones; +#X obj 30 1761 matrix.ones_like; +#X text 200 1761 create Matrix filled with ones with the same shape +as input; +#X obj 30 1788 matrix.randn; +#X text 200 1788 generates Matrix using Gaussian distribution with zero mean and unit variance; -#X obj 30 1813 matrix.randu; -#X text 200 1813 generates Matrix with uniform distribution [0-1]; -#X obj 30 1840 matrix.range; -#X text 200 1840 matrix range (difference between max and min); -#X obj 30 1867 matrix.range_col; -#X text 200 1867 matrix column range (difference between max and min); -#X obj 30 1894 matrix.range_row; -#X text 200 1894 matrix row range (difference between max and min); -#X obj 30 1921 matrix.rank; -#X text 200 1921 rank of the matrix; -#X obj 30 1948 matrix.remove_col; -#X text 200 1948 remove specified matrix column; -#X obj 30 1975 matrix.remove_row; -#X text 200 1975 remove specified matrix row; -#X obj 30 2002 matrix.replace; -#X text 200 2002 replace specific elements with a new value; -#X obj 30 2029 matrix.reshape; -#X text 200 2029 change size while keeping elements; -#X obj 30 2056 matrix.resize; -#X text 200 2056 change size while keeping elements and preserving +#X obj 30 1828 matrix.randu; +#X text 200 1828 generates Matrix with uniform distribution [0-1]; +#X obj 30 1855 matrix.range; +#X text 200 1855 matrix range (difference between max and min); +#X obj 30 1882 matrix.range_col; +#X text 200 1882 matrix column range (difference between max and min); +#X obj 30 1909 matrix.range_row; +#X text 200 1909 matrix row range (difference between max and min); +#X obj 30 1936 matrix.rank; +#X text 200 1936 rank of the matrix; +#X obj 30 1963 matrix.remove_col; +#X text 200 1963 remove specified matrix column; +#X obj 30 1990 matrix.remove_row; +#X text 200 1990 remove specified matrix row; +#X obj 30 2017 matrix.replace; +#X text 200 2017 replace specific elements with a new value; +#X obj 30 2044 matrix.reshape; +#X text 200 2044 change size while keeping elements; +#X obj 30 2071 matrix.resize; +#X text 200 2071 change size while keeping elements and preserving layout; -#X obj 30 2083 matrix.row; -#X text 200 2083 create Matrix row with specified values; -#X obj 30 2110 matrix.row_at; -#X text 200 2110 get specified row; -#X obj 30 2137 matrix.save; -#X text 200 2137 save matrix in CSV format; -#X obj 30 2164 matrix.shift_col; -#X text 200 2164 shift Matrix elements by N positions in each column; -#X obj 30 2191 matrix.shift_row; -#X text 200 2191 shift Matrix elements by N positions in each row; -#X obj 30 2218 matrix.sign; -#X text 200 2218 element-wise signum function; -#X obj 30 2245 matrix.sin; -#X text 200 2245 element-wise sine; -#X obj 30 2272 matrix.sinh; -#X text 200 2272 element-wise hyperbolic sine; -#X obj 30 2299 matrix.size; -#X text 200 2299 return Matrix size (rows \, columns); -#X obj 30 2326 matrix.solve; -#X text 200 2326 Solve a system of linear equations \, A*X = B \, -where X is unknown; -#X obj 30 2363 matrix.stddev; -#X text 200 2363 standart deviation for matrix values; -#X obj 30 2390 matrix.stddev_col; -#X text 200 2390 standart deviation matrix value for each column; -#X obj 30 2417 matrix.stddev_row; -#X text 200 2417 standart deviation matrix value for each row; -#X obj 30 2444 matrix.sub; -#X text 200 2444 element-wise matrix subtraction; -#X obj 30 2471 matrix.swap_cols; -#X text 200 2471 swaps specified columns in matrix; -#X obj 30 2498 matrix.swap_rows; -#X text 200 2498 swaps specified rows in matrix; -#X obj 30 2525 matrix.tan; -#X text 200 2525 element-wise tangent; -#X obj 30 2552 matrix.tanh; -#X text 200 2552 element-wise hyperbolic tangent; -#X obj 30 2579 matrix.to_list; -#X text 200 2579 convert Matrix to list; -#X obj 30 2606 matrix.transpose; -#X text 200 2606 transpose Matrix; -#X obj 30 2633 matrix.trunc_exp; -#X text 200 2633 element-wise base-e exponent \, truncated to avoid +#X obj 30 2098 matrix.row; +#X text 200 2098 create Matrix row with specified values; +#X obj 30 2125 matrix.row_at; +#X text 200 2125 get specified row; +#X obj 30 2152 matrix.save; +#X text 200 2152 save matrix in CSV format; +#X obj 30 2179 matrix.shift_col; +#X text 200 2179 shift Matrix elements by N positions in each column; +#X obj 30 2206 matrix.shift_row; +#X text 200 2206 shift Matrix elements by N positions in each row; +#X obj 30 2233 matrix.sign; +#X text 200 2233 element-wise signum function; +#X obj 30 2260 matrix.sin; +#X text 200 2260 element-wise sine; +#X obj 30 2287 matrix.sinh; +#X text 200 2287 element-wise hyperbolic sine; +#X obj 30 2314 matrix.size; +#X text 200 2314 return Matrix size (rows \, columns); +#X obj 30 2341 matrix.solve; +#X text 200 2341 Solve a system of linear equations \, A*X = B \, where +X is unknown; +#X obj 30 2381 matrix.stddev; +#X text 200 2381 standart deviation for matrix values; +#X obj 30 2408 matrix.stddev_col; +#X text 200 2408 standart deviation matrix value for each column; +#X obj 30 2435 matrix.stddev_row; +#X text 200 2435 standart deviation matrix value for each row; +#X obj 30 2462 matrix.sub; +#X text 200 2462 element-wise matrix subtraction; +#X obj 30 2489 matrix.swap_cols; +#X text 200 2489 swaps specified columns in matrix; +#X obj 30 2516 matrix.swap_rows; +#X text 200 2516 swaps specified rows in matrix; +#X obj 30 2543 matrix.tan; +#X text 200 2543 element-wise tangent; +#X obj 30 2570 matrix.tanh; +#X text 200 2570 element-wise hyperbolic tangent; +#X obj 30 2597 matrix.to_list; +#X text 200 2597 convert Matrix to list; +#X obj 30 2624 matrix.transpose; +#X text 200 2624 transpose Matrix; +#X obj 30 2651 matrix.trunc_exp; +#X text 200 2651 element-wise base-e exponent \, truncated to avoid infinity; -#X obj 30 2660 matrix.vectorise; -#X text 200 2660 generate a column vector or row vector from matrix; -#X obj 30 2687 matrix.zeros; -#X text 200 2687 create Matrix with zeros; -#X obj 30 2714 matrix.zeros_like; -#X text 200 2714 create Matrix filled with zeros with the same shape +#X obj 30 2678 matrix.vectorise; +#X text 200 2678 generate a column vector or row vector from matrix; +#X obj 30 2705 matrix.zeros; +#X text 200 2705 create Matrix with zeros; +#X obj 30 2732 matrix.zeros_like; +#X text 200 2732 create Matrix filled with zeros with the same shape as input; #X obj 1 1 cnv 5 740 40 empty empty matrix::matrix 20 20 0 20 -104026 -4096 0; -#X obj 1 2751 cnv 5 740 40 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 20 2761 library: matrix; \ No newline at end of file +#X obj 1 2759 cnv 5 740 40 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 20 2769 library: matrix; \ No newline at end of file diff --git a/ceammc/ext/class-wrapper/modules/matrix/help/matrix.ne-example.pd b/ceammc/ext/class-wrapper/modules/matrix/help/matrix.ne-example.pd new file mode 100644 index 0000000000..a363fe60d1 --- /dev/null +++ b/ceammc/ext/class-wrapper/modules/matrix/help/matrix.ne-example.pd @@ -0,0 +1,12 @@ +#N canvas 0 0 397 159 12; +#X declare -lib matrix; +#X obj 20 48 declare -lib matrix; +#X msg 20 92 2 2 1 2 3 4; +#X floatatom 231 92 5 0 0 0 - - -; +#X msg 288 92 2 2 1 4 3 6; +#X obj 20 120 matrix.!= Matrix 2 2 1 2 3 4; +#X obj 20 149 ui.display @display_type 1 @size 150 18; +#X connect 1 0 4 0; +#X connect 2 0 4 1; +#X connect 3 0 4 1; +#X connect 4 0 5 0; diff --git a/ceammc/ext/class-wrapper/modules/matrix/help/matrix.ne-help.pd b/ceammc/ext/class-wrapper/modules/matrix/help/matrix.ne-help.pd new file mode 100644 index 0000000000..351f3721c6 --- /dev/null +++ b/ceammc/ext/class-wrapper/modules/matrix/help/matrix.ne-help.pd @@ -0,0 +1,74 @@ +#N canvas 0 0 785 555 12; +#X declare -lib ceammc; +#X declare -lib matrix; +#X obj 445 50 cnv 1 320 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 445 50 element-wise matrix not equal comparasion; +#X obj 1 1 cnv 5 765 40 empty empty matrix.ne 20 20 0 20 -104026 -4096 +0; +#X obj 583 11 matrix.!=; +#X obj 674 11 matrix.ne; +#X obj 50 118 declare -lib matrix; +#X msg 50 162 2 2 1 2 3 4; +#X floatatom 261 162 5 0 0 0 - - -; +#X msg 318 162 2 2 1 4 3 6; +#X obj 50 190 matrix.!= Matrix 2 2 1 2 3 4; +#X obj 50 219 ui.display @display_type 1 @size 150 18; +#X obj 20 259 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 264 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +-49933 0; +#X text 110 299 1\.; +#X text 150 299 list; +#X obj 246 300 cnv 1 16 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 299 V: float to compare or matrix to compare (Matrix NROWS +NCOLS ...).; +#X obj 20 344 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 349 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +0; +#X text 110 350 1\.; +#X text 150 350 *list*; +#X text 245 350 Matrix data constructor: NROWS NCOLS ...; +#X text 150 370 *data*; +#X text 245 370 Matrix data.; +#X text 110 390 2\.; +#X text 150 390 *float*; +#X text 245 390 float to compare.; +#X text 150 410 *data*; +#X text 245 410 matrix to compare (NROWS NCOLS ...).; +#X obj 20 440 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 445 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 446 1\.; +#X text 245 446 output compare result - matrix with 1 and 0 (Matrix).; +#X obj 10 48 ui.link @title index @url ../index-help.pd; +#X text 51 45 ::; +#X obj 67 48 ui.link @title matrix @url matrix-help.pd; +#X text 116 45 ::; +#X obj 132 48 ui.link @title matrix @url matrix.matrix-help.pd; +#X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 508 library: matrix v0.1; +#X text 600 520 see also:; +#X obj 674 520 matrix.==; +#N canvas 10 527 400 290 info 0; +#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; +#X text 10 10 library:; +#X text 120 10 matrix; +#X text 10 32 version:; +#X text 120 32 0.1; +#X text 10 54 object:; +#X text 120 54 matrix.ne; +#X text 10 76 category:; +#X text 120 76 matrix; +#X text 10 98 since:; +#X text 120 98 0.1; +#X text 10 120 authors:; +#X text 120 120 Serge Poltavski; +#X text 10 142 license:; +#X text 120 142 GPLv3; +#X obj 120 164 declare -lib ceammc; +#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 120 268 generated by pddoc; +#X restore 10 527 pd info; +#X connect 6 0 9 0; +#X connect 7 0 9 1; +#X connect 8 0 9 1; +#X connect 9 0 10 0; \ No newline at end of file diff --git a/ceammc/ext/class-wrapper/modules/matrix/help/matrix.ne-xlet_db.txt b/ceammc/ext/class-wrapper/modules/matrix/help/matrix.ne-xlet_db.txt new file mode 100644 index 0000000000..69680d9242 --- /dev/null +++ b/ceammc/ext/class-wrapper/modules/matrix/help/matrix.ne-xlet_db.txt @@ -0,0 +1 @@ +matrix.ne,matrix.!= .. . diff --git a/ceammc/ext/class-wrapper/modules/matrix/iface_matrix.h b/ceammc/ext/class-wrapper/modules/matrix/iface_matrix.h index 0276327820..a857bbc120 100644 --- a/ceammc/ext/class-wrapper/modules/matrix/iface_matrix.h +++ b/ceammc/ext/class-wrapper/modules/matrix/iface_matrix.h @@ -785,7 +785,7 @@ class Matrix : public DataIFace { /** * @brief element-wise greater then comparasion * @param b - matrix to compare - * @pd_name > + * @pd_alias matrix.> * @see matrix.== matrix.>= * @since 0.1 * @return compare result - matrix with 1 and 0 @@ -805,7 +805,7 @@ class Matrix : public DataIFace { /** * @brief element-wise greater equal comparasion * @param b - matrix to compare - * @pd_name >= + * @pd_alias matrix.>= * @see matrix.> * @since 0.1 * @return compare result - matrix with 1 and 0 @@ -825,7 +825,7 @@ class Matrix : public DataIFace { /** * @brief element-wise less equal comparasion * @param b - matrix to compare - * @pd_name <= + * @pd_alias matrix.<= * @see matrix.< * @since 0.1 * @return compare result - matrix with 1 and 0 @@ -845,7 +845,7 @@ class Matrix : public DataIFace { /** * @brief element-wise less then comparasion * @param b - matrix to compare - * @pd_name < + * @pd_alias matrix.< * @see matrix.<= * @since 0.1 * @return compare result - matrix with 1 and 0 @@ -868,7 +868,7 @@ class Matrix : public DataIFace { * @return compare result - matrix with 1 and 0 * @since 0.1 * @see matrix.> matrix.< - * @pd_name == + * @pd_alias matrix.== * @example * [2 2 1 2 3 4( [F] [2 2 1 4 3 6( * | |. |. @@ -888,7 +888,7 @@ class Matrix : public DataIFace { * @return compare result - matrix with 1 and 0 * @since 0.1 * @see matrix.== - * @pd_name != + * @pd_alias matrix.!= * @example * [2 2 1 2 3 4( [F] [2 2 1 4 3 6( * | |. |. diff --git a/ceammc/ext/class-wrapper/modules/matrix/library.json b/ceammc/ext/class-wrapper/modules/matrix/library.json index 2e6783d154..5247a67db7 100644 --- a/ceammc/ext/class-wrapper/modules/matrix/library.json +++ b/ceammc/ext/class-wrapper/modules/matrix/library.json @@ -1370,7 +1370,7 @@ } ] ], - "doc_name": "matrix.==", + "doc_name": "matrix.eq", "doc_outlets": [ { "info": "compare result - matrix with 1 and 0", @@ -1394,8 +1394,9 @@ "params": [ "float to compare" ], - "pd_aliases": [], - "pd_name": "==", + "pd_aliases": [ + "matrix.==" + ], "pddoc_args": [ { "info": "float to compare or matrix to compare (Matrix NROWS NCOLS ...)", @@ -1776,7 +1777,7 @@ } ] ], - "doc_name": "matrix.>=", + "doc_name": "matrix.ge", "doc_outlets": [ { "info": "compare result - matrix with 1 and 0", @@ -1800,8 +1801,9 @@ "params": [ "matrix to compare" ], - "pd_aliases": [], - "pd_name": ">=", + "pd_aliases": [ + "matrix.>=" + ], "pddoc_args": [ { "info": "matrix to compare (Matrix NROWS NCOLS ...) or float to compare", @@ -1855,7 +1857,7 @@ } ] ], - "doc_name": "matrix.>", + "doc_name": "matrix.gt", "doc_outlets": [ { "info": "compare result - matrix with 1 and 0", @@ -1879,8 +1881,9 @@ "params": [ "matrix to compare" ], - "pd_aliases": [], - "pd_name": ">", + "pd_aliases": [ + "matrix.>" + ], "pddoc_args": [ { "info": "matrix to compare (Matrix NROWS NCOLS ...) or float to compare", @@ -2260,7 +2263,7 @@ } ] ], - "doc_name": "matrix.<=", + "doc_name": "matrix.le", "doc_outlets": [ { "info": "compare result - matrix with 1 and 0", @@ -2284,8 +2287,9 @@ "params": [ "matrix to compare" ], - "pd_aliases": [], - "pd_name": "<=", + "pd_aliases": [ + "matrix.<=" + ], "pddoc_args": [ { "info": "matrix to compare (Matrix NROWS NCOLS ...) or float to compare", @@ -2550,7 +2554,7 @@ } ] ], - "doc_name": "matrix.<", + "doc_name": "matrix.lt", "doc_outlets": [ { "info": "compare result - matrix with 1 and 0", @@ -2574,8 +2578,9 @@ "params": [ "matrix to compare" ], - "pd_aliases": [], - "pd_name": "<", + "pd_aliases": [ + "matrix.<" + ], "pddoc_args": [ { "info": "matrix to compare (Matrix NROWS NCOLS ...) or float to compare", @@ -3168,7 +3173,7 @@ } ] ], - "doc_name": "matrix.!=", + "doc_name": "matrix.ne", "doc_outlets": [ { "info": "compare result - matrix with 1 and 0", @@ -3192,8 +3197,9 @@ "params": [ "float to compare" ], - "pd_aliases": [], - "pd_name": "!=", + "pd_aliases": [ + "matrix.!=" + ], "pddoc_args": [ { "info": "float to compare or matrix to compare (Matrix NROWS NCOLS ...)", diff --git a/ceammc/ext/class-wrapper/modules/numeric/doc/complex.polar.pddoc b/ceammc/ext/class-wrapper/modules/numeric/doc/complex.polar.pddoc index affc7dc717..735109fedc 100644 --- a/ceammc/ext/class-wrapper/modules/numeric/doc/complex.polar.pddoc +++ b/ceammc/ext/class-wrapper/modules/numeric/doc/complex.polar.pddoc @@ -14,7 +14,7 @@ 0.1 0.1 - complex + complex.new diff --git a/ceammc/ext/class-wrapper/modules/numeric/help/complex.polar-help.pd b/ceammc/ext/class-wrapper/modules/numeric/help/complex.polar-help.pd index 066fb87f5b..f6f9b9f5b1 100644 --- a/ceammc/ext/class-wrapper/modules/numeric/help/complex.polar-help.pd +++ b/ceammc/ext/class-wrapper/modules/numeric/help/complex.polar-help.pd @@ -1,51 +1,51 @@ -#N canvas 0 0 760 555 12; +#N canvas 0 0 785 555 12; #X declare -lib ceammc; #X declare -lib numeric; -#X obj 393 50 cnv 1 347 21 empty empty empty 17 7 0 10 -245760 -1 0; -#X text 393 50 creates Complex number in polar coordinates; -#X obj 1 1 cnv 5 740 40 empty empty complex.polar 20 20 0 20 -104026 +#X obj 431 50 cnv 1 334 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 431 50 creates Complex number in polar coordinates; +#X obj 1 1 cnv 5 765 40 empty empty complex.polar 20 20 0 20 -104026 -4096 0; -#X obj 621 11 complex.polar; +#X obj 646 11 complex.polar; #X obj 50 118 declare -lib numeric; #X msg 50 162 bang; #X msg 117 162 1 3.1415926; #X msg 251 162 1 6.2831852; #X obj 50 190 complex.polar 1 1.5707963; #X obj 50 219 ui.display @size 150 18 display_type 1; -#X obj 20 259 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 259 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 264 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 -49933 0; -#X text 120 269 1\.; -#X text 150 269 float; -#X obj 281 270 cnv 1 16 18 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 280 269 R: magnitude.; -#X text 120 287 2\.; -#X text 150 287 float; -#X obj 281 288 cnv 1 49 18 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 280 287 THETA: phase angle in radians.; -#X obj 20 315 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 320 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X text 110 299 1\.; +#X text 150 299 float; +#X obj 246 300 cnv 1 16 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 299 R: magnitude.; +#X text 110 319 2\.; +#X text 150 319 float; +#X obj 246 320 cnv 1 47 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 319 THETA: phase angle in radians.; +#X obj 20 349 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 354 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 120 325 1\.; -#X text 150 325 *float*; -#X text 280 325 magnitude.; -#X text 120 343 2\.; -#X text 150 343 *float*; -#X text 280 343 phase angle in radians.; -#X obj 20 371 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 376 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 355 1\.; +#X text 150 355 *float*; +#X text 245 355 magnitude.; +#X text 110 375 2\.; +#X text 150 375 *float*; +#X text 245 375 phase angle in radians.; +#X obj 20 405 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 410 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 120 381 1\.; -#X text 280 381 output Complex number (Complex); +#X text 110 411 1\.; +#X text 245 411 output Complex number (Complex).; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title numeric @url numeric-help.pd; #X text 122 45 ::; #X obj 138 48 ui.link @title complex @url numeric.complex-help.pd; -#X obj 1 505 cnv 5 740 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; #X text 10 508 library: numeric v0.1; -#X text 593 520 see also:; -#X obj 669 520 complex; +#X text 586 520 see also:; +#X obj 660 520 complex.new; #N canvas 10 527 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; diff --git a/ceammc/ext/class-wrapper/modules/numeric/help/numeric-help.pd b/ceammc/ext/class-wrapper/modules/numeric/help/numeric-help.pd index 73dc714c78..a7e2f17600 100644 --- a/ceammc/ext/class-wrapper/modules/numeric/help/numeric-help.pd +++ b/ceammc/ext/class-wrapper/modules/numeric/help/numeric-help.pd @@ -13,89 +13,87 @@ #X obj 30 210 complex.arg; #X text 200 210 the phase angle of the complex number x \, expressed in radians; -#X obj 30 247 complex.conj; -#X text 200 247 the complex conjugate; -#X obj 30 274 complex.cos; -#X text 200 274 cosine of complex number; -#X obj 30 301 complex.div; -#X text 200 301 divide complex numbers; -#X obj 30 328 complex.exp; -#X text 200 328 complex base e exponential; -#X obj 30 355 complex.imag; -#X text 200 355 get imaginary part of complex number; -#X obj 30 382 complex.log; -#X text 200 382 complex natural logarithm with the branch cuts along +#X obj 30 237 complex.conj; +#X text 200 237 the complex conjugate; +#X obj 30 264 complex.cos; +#X text 200 264 cosine of complex number; +#X obj 30 291 complex.div; +#X text 200 291 divide complex numbers; +#X obj 30 318 complex.exp; +#X text 200 318 complex base e exponential; +#X obj 30 345 complex.imag; +#X text 200 345 get imaginary part of complex number; +#X obj 30 372 complex.log; +#X text 200 372 complex natural logarithm with the branch cuts along the negative real axis; -#X obj 30 419 complex.log10; -#X text 200 419 complex common logarithm with the branch cuts along +#X obj 30 412 complex.log10; +#X text 200 412 complex common logarithm with the branch cuts along the negative real axis; -#X obj 30 456 complex.mul; -#X text 200 456 multiply complex numbers; -#X obj 30 483 complex.new; -#X text 200 483 Complex data; -#X obj 30 510 complex.norm; -#X text 200 510 the squared magnitude; -#X obj 30 537 complex.polar; -#X text 200 537 creates Complex number in polar coordinates; -#X obj 30 564 complex.pow; -#X text 200 564 complex power; -#X obj 30 591 complex.real; -#X text 200 591 get real part of complex number; -#X obj 30 618 complex.sin; -#X text 200 618 sine of complex number; -#X obj 30 645 complex.sqrt; -#X text 200 645 complex square root in the range of the right half- -plane; -#X obj 30 672 complex.sub; -#X text 200 672 substruct complex numbers; -#X obj 30 699 complex.tan; -#X text 200 699 tangent of complex number; -#X obj 30 726 complex.to_list; -#X text 200 726 real and imaginary part as list; -#X obj 30 753 complex.unpack; -#X text 200 753 unpacks complex number to real and imaginary parts; -#X obj 20 780 cnv 5 87 31 empty empty rational 4 13 0 17 -262144 +#X obj 30 452 complex.mul; +#X text 200 452 multiply complex numbers; +#X obj 30 479 complex.new; +#X text 200 479 Complex data; +#X obj 30 506 complex.norm; +#X text 200 506 the squared magnitude; +#X obj 30 533 complex.polar; +#X text 200 533 creates Complex number in polar coordinates; +#X obj 30 560 complex.pow; +#X text 200 560 complex power; +#X obj 30 587 complex.real; +#X text 200 587 get real part of complex number; +#X obj 30 614 complex.sin; +#X text 200 614 sine of complex number; +#X obj 30 641 complex.sqrt; +#X text 200 641 complex square root in the range of the right half-plane; +#X obj 30 668 complex.sub; +#X text 200 668 substruct complex numbers; +#X obj 30 695 complex.tan; +#X text 200 695 tangent of complex number; +#X obj 30 722 complex.to_list; +#X text 200 722 real and imaginary part as list; +#X obj 30 749 complex.unpack; +#X text 200 749 unpacks complex number to real and imaginary parts; +#X obj 20 776 cnv 5 87 31 empty empty rational 4 13 0 17 -262144 -49933 0; -#X obj 20 821 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 30 832 rational.!=; -#X text 200 832 not equal check; -#X obj 30 859 rational.==; -#X text 200 859 equal check; -#X obj 30 886 rational.abs; -#X text 200 886 abs absolute value; -#X obj 30 913 rational.add; -#X text 200 913 add two rational numbers; -#X obj 30 940 rational.div; -#X text 200 940 divide rational numbers; -#X obj 30 967 rational.from_float; -#X text 200 967 converts input float to rational with specified -precision; -#X obj 30 994 rational.ge; -#X text 200 994 greater equal compare operator; -#X obj 30 1021 rational.gt; -#X text 200 1021 greater than compare operator; -#X obj 30 1048 rational.le; -#X text 200 1048 less equal compare operator; -#X obj 30 1075 rational.lt; -#X text 200 1075 less than compare operator; -#X obj 30 1102 rational.mul; -#X text 200 1102 multiply rational numbers; -#X obj 30 1129 rational.new; -#X text 200 1129 The Rational class; -#X obj 30 1156 rational.pow; -#X text 200 1156 rational power; -#X obj 30 1183 rational.reciprocal; -#X text 200 1183 reciprocal rational number; -#X obj 30 1210 rational.sub; -#X text 200 1210 substruct rational numbers; -#X obj 30 1237 rational.to_float; -#X text 200 1237 convert to float value; -#X obj 30 1264 rational.to_list; -#X text 200 1264 numerator and denominator part as list; -#X obj 30 1291 rational.unpack; -#X text 200 1291 unpacks rational number to numerator and denominator +#X obj 20 817 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 30 828 rational.!=; +#X text 200 828 not equal check; +#X obj 30 855 rational.==; +#X text 200 855 equal check; +#X obj 30 882 rational.abs; +#X text 200 882 abs absolute value; +#X obj 30 909 rational.add; +#X text 200 909 add two rational numbers; +#X obj 30 936 rational.div; +#X text 200 936 divide rational numbers; +#X obj 30 963 rational.from_float; +#X text 200 963 converts input float to rational with specified precision; +#X obj 30 990 rational.ge; +#X text 200 990 greater equal compare operator; +#X obj 30 1017 rational.gt; +#X text 200 1017 greater than compare operator; +#X obj 30 1044 rational.le; +#X text 200 1044 less equal compare operator; +#X obj 30 1071 rational.lt; +#X text 200 1071 less than compare operator; +#X obj 30 1098 rational.mul; +#X text 200 1098 multiply rational numbers; +#X obj 30 1125 rational.new; +#X text 200 1125 The Rational class; +#X obj 30 1152 rational.pow; +#X text 200 1152 rational power; +#X obj 30 1179 rational.reciprocal; +#X text 200 1179 reciprocal rational number; +#X obj 30 1206 rational.sub; +#X text 200 1206 substruct rational numbers; +#X obj 30 1233 rational.to_float; +#X text 200 1233 convert to float value; +#X obj 30 1260 rational.to_list; +#X text 200 1260 numerator and denominator part as list; +#X obj 30 1287 rational.unpack; +#X text 200 1287 unpacks rational number to numerator and denominator parts; #X obj 1 1 cnv 5 740 40 empty empty numeric 20 20 0 20 -104026 -4096 0; -#X obj 1 1318 cnv 5 740 40 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 20 1318 version: v0.1 \, license:; \ No newline at end of file +#X obj 1 1314 cnv 5 740 40 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 20 1314 version: v0.1 \, license:; \ No newline at end of file diff --git a/ceammc/ext/class-wrapper/modules/numeric/help/numeric.complex-help.pd b/ceammc/ext/class-wrapper/modules/numeric/help/numeric.complex-help.pd index 78814079fa..4cc0e8b31d 100644 --- a/ceammc/ext/class-wrapper/modules/numeric/help/numeric.complex-help.pd +++ b/ceammc/ext/class-wrapper/modules/numeric/help/numeric.complex-help.pd @@ -13,48 +13,47 @@ #X obj 30 224 complex.arg; #X text 200 224 the phase angle of the complex number x \, expressed in radians; -#X obj 30 261 complex.conj; -#X text 200 261 the complex conjugate; -#X obj 30 288 complex.cos; -#X text 200 288 cosine of complex number; -#X obj 30 315 complex.div; -#X text 200 315 divide complex numbers; -#X obj 30 342 complex.exp; -#X text 200 342 complex base e exponential; -#X obj 30 369 complex.imag; -#X text 200 369 get imaginary part of complex number; -#X obj 30 396 complex.log; -#X text 200 396 complex natural logarithm with the branch cuts along +#X obj 30 251 complex.conj; +#X text 200 251 the complex conjugate; +#X obj 30 278 complex.cos; +#X text 200 278 cosine of complex number; +#X obj 30 305 complex.div; +#X text 200 305 divide complex numbers; +#X obj 30 332 complex.exp; +#X text 200 332 complex base e exponential; +#X obj 30 359 complex.imag; +#X text 200 359 get imaginary part of complex number; +#X obj 30 386 complex.log; +#X text 200 386 complex natural logarithm with the branch cuts along the negative real axis; -#X obj 30 433 complex.log10; -#X text 200 433 complex common logarithm with the branch cuts along +#X obj 30 426 complex.log10; +#X text 200 426 complex common logarithm with the branch cuts along the negative real axis; -#X obj 30 470 complex.mul; -#X text 200 470 multiply complex numbers; -#X obj 30 497 complex.new; -#X text 200 497 Complex data; -#X obj 30 524 complex.norm; -#X text 200 524 the squared magnitude; -#X obj 30 551 complex.polar; -#X text 200 551 creates Complex number in polar coordinates; -#X obj 30 578 complex.pow; -#X text 200 578 complex power; -#X obj 30 605 complex.real; -#X text 200 605 get real part of complex number; -#X obj 30 632 complex.sin; -#X text 200 632 sine of complex number; -#X obj 30 659 complex.sqrt; -#X text 200 659 complex square root in the range of the right half- -plane; -#X obj 30 686 complex.sub; -#X text 200 686 substruct complex numbers; -#X obj 30 713 complex.tan; -#X text 200 713 tangent of complex number; -#X obj 30 740 complex.to_list; -#X text 200 740 real and imaginary part as list; -#X obj 30 767 complex.unpack; -#X text 200 767 unpacks complex number to real and imaginary parts; +#X obj 30 466 complex.mul; +#X text 200 466 multiply complex numbers; +#X obj 30 493 complex.new; +#X text 200 493 Complex data; +#X obj 30 520 complex.norm; +#X text 200 520 the squared magnitude; +#X obj 30 547 complex.polar; +#X text 200 547 creates Complex number in polar coordinates; +#X obj 30 574 complex.pow; +#X text 200 574 complex power; +#X obj 30 601 complex.real; +#X text 200 601 get real part of complex number; +#X obj 30 628 complex.sin; +#X text 200 628 sine of complex number; +#X obj 30 655 complex.sqrt; +#X text 200 655 complex square root in the range of the right half-plane; +#X obj 30 682 complex.sub; +#X text 200 682 substruct complex numbers; +#X obj 30 709 complex.tan; +#X text 200 709 tangent of complex number; +#X obj 30 736 complex.to_list; +#X text 200 736 real and imaginary part as list; +#X obj 30 763 complex.unpack; +#X text 200 763 unpacks complex number to real and imaginary parts; #X obj 1 1 cnv 5 740 40 empty empty numeric::complex 20 20 0 20 -104026 -4096 0; -#X obj 1 794 cnv 5 740 40 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 20 804 library: numeric; \ No newline at end of file +#X obj 1 790 cnv 5 740 40 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 20 800 library: numeric; \ No newline at end of file diff --git a/ceammc/ext/class-wrapper/modules/numeric/help/numeric.rational-help.pd b/ceammc/ext/class-wrapper/modules/numeric/help/numeric.rational-help.pd index 3493695d2f..1e5e462cfb 100644 --- a/ceammc/ext/class-wrapper/modules/numeric/help/numeric.rational-help.pd +++ b/ceammc/ext/class-wrapper/modules/numeric/help/numeric.rational-help.pd @@ -13,8 +13,7 @@ #X obj 30 224 rational.div; #X text 200 224 divide rational numbers; #X obj 30 251 rational.from_float; -#X text 200 251 converts input float to rational with specified -precision; +#X text 200 251 converts input float to rational with specified precision; #X obj 30 278 rational.ge; #X text 200 278 greater equal compare operator; #X obj 30 305 rational.gt; diff --git a/ceammc/ext/class-wrapper/modules/numeric/iface_numeric.h b/ceammc/ext/class-wrapper/modules/numeric/iface_numeric.h index 32a2113b2c..61fc443e0b 100644 --- a/ceammc/ext/class-wrapper/modules/numeric/iface_numeric.h +++ b/ceammc/ext/class-wrapper/modules/numeric/iface_numeric.h @@ -35,7 +35,7 @@ class Complex : public DataIFace { * @param theta - phase angle in radians * @return Complex number * @since 0.1 - * @see complex + * @see complex.new * @keywords polar * @example * [bang( [1 3.1415926( [1 6.2831852( diff --git a/ceammc/ext/class-wrapper/modules/numeric/library.json b/ceammc/ext/class-wrapper/modules/numeric/library.json index 804f0661ed..faa5da3daa 100644 --- a/ceammc/ext/class-wrapper/modules/numeric/library.json +++ b/ceammc/ext/class-wrapper/modules/numeric/library.json @@ -864,7 +864,7 @@ "Complex number" ], "see": [ - "complex" + "complex.new" ], "since": "0.1" }, diff --git a/ceammc/ext/core_objects.txt b/ceammc/ext/core_objects.txt index a4af503102..45dc2e3291 100644 --- a/ceammc/ext/core_objects.txt +++ b/ceammc/ext/core_objects.txt @@ -150,6 +150,7 @@ outlet~ pack page pd +pdcontrol pgmin pgmout phasor~ @@ -201,6 +202,7 @@ set setsize sig~ sin +slop~ snapshot~ soundfiler spigot diff --git a/ceammc/ext/doc/CMakeLists.txt b/ceammc/ext/doc/CMakeLists.txt index c78204e641..60e7b92cd5 100644 --- a/ceammc/ext/doc/CMakeLists.txt +++ b/ceammc/ext/doc/CMakeLists.txt @@ -150,3 +150,5 @@ add_custom_target(pddoc_files SOURCES ${_PDDOC_FILES} ${_PDDOC_XML_FILES} ceammc file(GLOB _PDDOC_PD_FILES "*.pd") add_custom_target(pddoc_pd_files SOURCES ${_PDDOC_PD_FILES}) +# install HOA library docs and examples +install(DIRECTORY hoa DESTINATION ${DOC_INSTALL_PATH}) diff --git a/ceammc/ext/doc/an.pitchtrack~-help.pd b/ceammc/ext/doc/an.pitchtrack~-help.pd index c3d1c0c641..35daad2536 100644 --- a/ceammc/ext/doc/an.pitchtrack~-help.pd +++ b/ceammc/ext/doc/an.pitchtrack~-help.pd @@ -44,14 +44,14 @@ float. Default value: 0.2\. Range: 0\...1\.; Type: float. Default value: 0.95\. Range: 0\...1\.; #X msg 110 570 @framesize; #X text 245 570 Get/Set frame size in samples. Type: int. Units: samp. -Default value: 1024\. Allowed values: 126 \, 256 \, 512 \, 1024 \, +Default value: 1024\. Allowed values: 128 \, 256 \, 512 \, 1024 \, 2048\.; #X msg 110 627 @maxfreq; #X text 245 627 Get/Set max tracked frequency. Type: float. Units: Hz. Default value: 1500\. Range: 10\...10000\.; #X msg 110 669 @overlap; #X text 245 669 Get/Set overlap of analysis frames. Type: int. Default -value: 1\. Allowed values: 1 \, 2 \, 3 \, 4 \, 8\.; +value: 1\. Allowed values: 1 \, 2 \, 4 \, 8\.; #X obj 20 721 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 726 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; @@ -74,7 +74,7 @@ be considered to indicate a periodic signal.; #X text 115 45 ::; #X obj 131 48 ui.link @title an @url ceammc.an-help.pd; #X obj 1 883 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 886 library: ceammc v0.7.1; +#X text 10 886 library: ceammc v0.8.0; #X text 542 898 see also:; #X obj 616 898 sigmund~; #X obj 689 898 fiddle~; @@ -83,7 +83,7 @@ be considered to indicate a periodic signal.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 an.pitchtrack~; #X text 10 76 category:; @@ -93,7 +93,7 @@ be considered to indicate a periodic signal.; #X text 10 120 authors:; #X text 120 120 Katja Vetter \, Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 pitchtrack; #X text 10 186 website:; diff --git a/ceammc/ext/doc/an.pitchtrack~.pddoc b/ceammc/ext/doc/an.pitchtrack~.pddoc index 79f46299c9..12d450ed6a 100644 --- a/ceammc/ext/doc/an.pitchtrack~.pddoc +++ b/ceammc/ext/doc/an.pitchtrack~.pddoc @@ -8,7 +8,7 @@ Serge Poltavsky pitch tracker - GPL3 + GPL3 or later ceammc an pitchtrack @@ -26,15 +26,15 @@ function (SNAC) - frame size in + frame size in samples overlap of analysis frames - frame size in samples - overlap of analysis + overlap of analysis frames bias which favours small lags over large lags in the period detection, thereby avoiding low-octave diff --git a/ceammc/ext/doc/array.bpm-help.pd b/ceammc/ext/doc/array.bpm-help.pd index 80eddba7d5..459df24fd5 100644 --- a/ceammc/ext/doc/array.bpm-help.pd +++ b/ceammc/ext/doc/array.bpm-help.pd @@ -53,13 +53,13 @@ library; #X text 115 45 ::; #X obj 131 48 ui.link @title array @url ceammc.array-help.pd; #X obj 1 611 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 614 library: ceammc v0.7.1; +#X text 10 614 library: ceammc v0.8.0; #N canvas 10 633 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 array.bpm; #X text 10 76 category:; @@ -69,7 +69,7 @@ library; #X text 10 120 authors:; #X text 120 120 Olli Parviainen \, Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 array \, bpm; #X text 10 186 website:; diff --git a/ceammc/ext/doc/array.bpm.pddoc b/ceammc/ext/doc/array.bpm.pddoc index b37001b69a..8390f8428b 100644 --- a/ceammc/ext/doc/array.bpm.pddoc +++ b/ceammc/ext/doc/array.bpm.pddoc @@ -8,7 +8,7 @@ Serge Poltavsky BPM calculator - GPL3 + GPL3 or later ceammc array array bpm diff --git a/ceammc/ext/doc/array.copy-help.pd b/ceammc/ext/doc/array.copy-help.pd index c36ce341b0..e2d77eaaa3 100644 --- a/ceammc/ext/doc/array.copy-help.pd +++ b/ceammc/ext/doc/array.copy-help.pd @@ -92,7 +92,7 @@ destination position. Arguments are:; #X text 115 45 ::; #X obj 131 48 ui.link @title array @url ceammc.array-help.pd; #X obj 1 1131 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1134 library: ceammc v0.7.1; +#X text 10 1134 library: ceammc v0.8.0; #X text 594 1146 see also:; #X obj 668 1146 array.each; #N canvas 10 1153 400 290 info 0; @@ -100,7 +100,7 @@ destination position. Arguments are:; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 array.copy; #X text 10 76 category:; @@ -110,7 +110,7 @@ destination position. Arguments are:; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 array \, copy; #X text 10 186 website:; diff --git a/ceammc/ext/doc/array.copy.pddoc b/ceammc/ext/doc/array.copy.pddoc index e618260a07..dce6bff0d3 100644 --- a/ceammc/ext/doc/array.copy.pddoc +++ b/ceammc/ext/doc/array.copy.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky copy samples from one array to another - GPL3 + GPL3 or later ceammc array array copy diff --git a/ceammc/ext/doc/array.do-help.pd b/ceammc/ext/doc/array.do-help.pd index 19c1d430a4..6c6cf44621 100644 --- a/ceammc/ext/doc/array.do-help.pd +++ b/ceammc/ext/doc/array.do-help.pd @@ -52,7 +52,7 @@ SAMPLE_POS \, TOTAL_SAMPLES.; #X text 115 45 ::; #X obj 131 48 ui.link @title array @url ceammc.array-help.pd; #X obj 1 618 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 621 library: ceammc v0.7.1; +#X text 10 621 library: ceammc v0.8.0; #X text 594 633 see also:; #X obj 668 633 array.each; #N canvas 10 640 400 290 info 0; @@ -60,7 +60,7 @@ SAMPLE_POS \, TOTAL_SAMPLES.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 array.do; #X text 10 76 category:; @@ -70,7 +70,7 @@ SAMPLE_POS \, TOTAL_SAMPLES.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 array \, do; #X text 10 186 website:; diff --git a/ceammc/ext/doc/array.do.pddoc b/ceammc/ext/doc/array.do.pddoc index 26b511596d..7129da79b8 100644 --- a/ceammc/ext/doc/array.do.pddoc +++ b/ceammc/ext/doc/array.do.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky iterate and modify array content via side-chain - GPL3 + GPL3 or later ceammc array array do diff --git a/ceammc/ext/doc/array.each-help.pd b/ceammc/ext/doc/array.each-help.pd index e03db55ac0..b91fd6a258 100644 --- a/ceammc/ext/doc/array.each-help.pd +++ b/ceammc/ext/doc/array.each-help.pd @@ -57,7 +57,7 @@ value: 1\. Allowed values: 1 \, 0\.; #X text 115 45 ::; #X obj 131 48 ui.link @title array @url ceammc.array-help.pd; #X obj 1 587 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 590 library: ceammc v0.7.1; +#X text 10 590 library: ceammc v0.8.0; #X text 601 602 see also:; #X obj 675 602 list.each; #N canvas 10 609 400 290 info 0; @@ -65,7 +65,7 @@ value: 1\. Allowed values: 1 \, 0\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 array.each; #X text 10 76 category:; @@ -75,7 +75,7 @@ value: 1\. Allowed values: 1 \, 0\.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 array \, each; #X text 10 186 website:; diff --git a/ceammc/ext/doc/array.each.pddoc b/ceammc/ext/doc/array.each.pddoc index 437e6203dd..4a6886deef 100644 --- a/ceammc/ext/doc/array.each.pddoc +++ b/ceammc/ext/doc/array.each.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky process each array elements via side-chain - GPL3 + GPL3 or later ceammc array array each diff --git a/ceammc/ext/doc/array.fill-help.pd b/ceammc/ext/doc/array.fill-help.pd index 46928db21a..cdf324690f 100644 --- a/ceammc/ext/doc/array.fill-help.pd +++ b/ceammc/ext/doc/array.fill-help.pd @@ -28,7 +28,7 @@ #X msg 50 305 fill @from 20 @to -10 -0.5; #X msg 366 305 saw 60 0.9; #X msg 530 305 tri 80 0.6; -#X obj 155 334 ui.knob @size 40 40; +#X obj 155 334 ui.knob; #X msg 155 392 sin 100 0.8 \$1; #X obj 50 421 array.fill @array afill; #X obj 50 449 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 @@ -120,7 +120,7 @@ Arguments are:; #X text 115 45 ::; #X obj 131 48 ui.link @title array @url ceammc.array-help.pd; #X obj 1 1443 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1446 library: ceammc v0.7.1; +#X text 10 1446 library: ceammc v0.8.0; #X text 594 1458 see also:; #X obj 668 1458 array.each; #N canvas 10 1465 400 290 info 0; @@ -128,7 +128,7 @@ Arguments are:; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 array.fill; #X text 10 76 category:; @@ -138,7 +138,7 @@ Arguments are:; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 array \, fill; #X text 10 186 website:; diff --git a/ceammc/ext/doc/array.fill.pddoc b/ceammc/ext/doc/array.fill.pddoc index 58feb78b60..e09a5f4c42 100644 --- a/ceammc/ext/doc/array.fill.pddoc +++ b/ceammc/ext/doc/array.fill.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky fill array with single value or pattern - GPL3 + GPL3 or later ceammc array array fill diff --git a/ceammc/ext/doc/array.hist-help.pd b/ceammc/ext/doc/array.hist-help.pd index 0cdacfe7d9..48a03cefb2 100644 --- a/ceammc/ext/doc/array.hist-help.pd +++ b/ceammc/ext/doc/array.hist-help.pd @@ -26,7 +26,7 @@ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0; #X coords 0 1 512 -1 330 100 1; #X restore 50 143 graph; -#X obj 386 143 ui.sliders @auto_range 1 @receive ahist-r @size 40 100; +#X obj 386 143 ui.sliders @size 40 100 @receive ahist-r @auto_range 1; #X obj 50 259 loadbang; #X msg 50 287 uniform -1 -0.2; #X msg 222 287 gauss 0.5 0.2; @@ -48,7 +48,7 @@ #X text 110 559 2\.; #X text 150 559 int; #X obj 246 560 cnv 1 39 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 559 BINS: number of bins. Range: 10\...1000; +#X text 245 559 BINS: number of bins. Range: 2\...1000; #X text 110 579 3\.; #X text 150 579 float; #X obj 246 580 cnv 1 32 20 empty empty empty 17 7 0 10 -245695 -1 0; @@ -64,7 +64,7 @@ #X text 245 669 Get/Set array name. Type: symbol.; #X msg 110 698 @bins; #X text 245 698 Get/Set number of bins. Type: int. Default value: 100\. -Range: 10\...1000\.; +Range: 2\...1000\.; #X msg 110 740 @max; #X text 245 740 Get/Set maximum value. Type: float. Default value: 1\.; @@ -88,15 +88,15 @@ Range: 10\...1000\.; #X text 115 45 ::; #X obj 131 48 ui.link @title array @url ceammc.array-help.pd; #X obj 1 900 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 903 library: ceammc v0.7.1; -#X text 602 915 see also:; -#X obj 676 915 list.hist; +#X text 10 903 library: ceammc v0.8.0; +#X text 565 915 see also:; +#X obj 639 915 list.histogram; #N canvas 10 922 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 array.hist; #X text 10 76 category:; @@ -106,7 +106,7 @@ Range: 10\...1000\.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 array \, histogram; #X text 10 186 website:; diff --git a/ceammc/ext/doc/array.hist.pddoc b/ceammc/ext/doc/array.hist.pddoc index 8e246dc628..b0e5727fc6 100644 --- a/ceammc/ext/doc/array.hist.pddoc +++ b/ceammc/ext/doc/array.hist.pddoc @@ -7,13 +7,13 @@ Serge Poltavsky calculates array histogram - GPL3 + GPL3 or later ceammc array array histogram 0.7.1 - list.hist + list.histogram @@ -21,14 +21,13 @@ array name - number of - bins + number of bins minimal value maximum value array name - number of + number of bins minimal value maximum value @@ -44,7 +43,7 @@ Serge Poltavsky calculates array arithmetic mean value - GPL3 + GPL3 or later ceammc array array mean diff --git a/ceammc/ext/doc/array.minmax-help.pd b/ceammc/ext/doc/array.minmax-help.pd index 7c1f14d156..7de591fbaf 100644 --- a/ceammc/ext/doc/array.minmax-help.pd +++ b/ceammc/ext/doc/array.minmax-help.pd @@ -55,13 +55,13 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title array @url ceammc.array-help.pd; #X obj 1 611 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 614 library: ceammc v0.7.1; +#X text 10 614 library: ceammc v0.8.0; #N canvas 10 633 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 array.minmax; #X text 10 76 category:; @@ -71,7 +71,7 @@ #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 array \, minmax; #X text 10 186 website:; diff --git a/ceammc/ext/doc/array.minmax.pddoc b/ceammc/ext/doc/array.minmax.pddoc index bc87ea8ad6..e2e5039441 100644 --- a/ceammc/ext/doc/array.minmax.pddoc +++ b/ceammc/ext/doc/array.minmax.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky find array min and max element value - GPL3 + GPL3 or later ceammc array array minmax diff --git a/ceammc/ext/doc/array.p2s-help.pd b/ceammc/ext/doc/array.p2s-help.pd index c1dfc60ef8..6eeb9c962d 100644 --- a/ceammc/ext/doc/array.p2s-help.pd +++ b/ceammc/ext/doc/array.p2s-help.pd @@ -58,7 +58,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title conv @url ceammc.conv-help.pd; #X obj 1 689 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 692 library: ceammc v0.7.1; +#X text 10 692 library: ceammc v0.8.0; #X text 600 704 see also:; #X obj 674 704 array.s2p; #N canvas 10 711 400 290 info 0; @@ -66,7 +66,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 array.p2s; #X text 10 76 category:; @@ -76,7 +76,7 @@ #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 array \, phase \, sample; #X text 10 186 website:; diff --git a/ceammc/ext/doc/array.p2s.pddoc b/ceammc/ext/doc/array.p2s.pddoc index 8f9fdd0319..772787dc64 100644 --- a/ceammc/ext/doc/array.p2s.pddoc +++ b/ceammc/ext/doc/array.p2s.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky convert array phase [0..1] to sample position - GPL3 + GPL3 or later ceammc conv array phase sample diff --git a/ceammc/ext/doc/array.rms-help.pd b/ceammc/ext/doc/array.rms-help.pd index 1fef21b021..e8e78d6b01 100644 --- a/ceammc/ext/doc/array.rms-help.pd +++ b/ceammc/ext/doc/array.rms-help.pd @@ -62,7 +62,7 @@ Root mean square @url https://en.wikipedia.org/wiki/Root_mean_square; #X text 115 45 ::; #X obj 131 48 ui.link @title array @url ceammc.array-help.pd; #X obj 1 594 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 597 library: ceammc v0.7.1; +#X text 10 597 library: ceammc v0.8.0; #X text 507 609 see also:; #X obj 581 609 array.mean; #X obj 668 609 array.sum2; @@ -71,7 +71,7 @@ Root mean square @url https://en.wikipedia.org/wiki/Root_mean_square; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 array.rms; #X text 10 76 category:; @@ -81,7 +81,7 @@ Root mean square @url https://en.wikipedia.org/wiki/Root_mean_square; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 array \, mean \, rms \, square; #X text 10 186 website:; diff --git a/ceammc/ext/doc/array.rms.pddoc b/ceammc/ext/doc/array.rms.pddoc index bb708db236..80bdc5a585 100644 --- a/ceammc/ext/doc/array.rms.pddoc +++ b/ceammc/ext/doc/array.rms.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky calculates root mean square value for array - GPL3 + GPL3 or later ceammc array array mean rms square diff --git a/ceammc/ext/doc/array.s2p-help.pd b/ceammc/ext/doc/array.s2p-help.pd index f3d82d4569..215399ab50 100644 --- a/ceammc/ext/doc/array.s2p-help.pd +++ b/ceammc/ext/doc/array.s2p-help.pd @@ -55,7 +55,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title conv @url ceammc.conv-help.pd; #X obj 1 587 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 590 library: ceammc v0.7.1; +#X text 10 590 library: ceammc v0.8.0; #X text 601 602 see also:; #X obj 675 602 array.p2s; #N canvas 10 609 400 290 info 0; @@ -63,7 +63,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 array.s2p; #X text 10 76 category:; @@ -73,7 +73,7 @@ #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 array \, phase \, sample; #X text 10 186 website:; diff --git a/ceammc/ext/doc/array.s2p.pddoc b/ceammc/ext/doc/array.s2p.pddoc index a8677b36f8..2f05b9185b 100644 --- a/ceammc/ext/doc/array.s2p.pddoc +++ b/ceammc/ext/doc/array.s2p.pddoc @@ -8,7 +8,7 @@ convert array sample position to relative phase position [0..1] - GPL3 + GPL3 or later ceammc conv array phase sample diff --git a/ceammc/ext/doc/array.set-help.pd b/ceammc/ext/doc/array.set-help.pd index ec486795de..f934f11b9c 100644 --- a/ceammc/ext/doc/array.set-help.pd +++ b/ceammc/ext/doc/array.set-help.pd @@ -50,7 +50,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title array @url ceammc.array-help.pd; #X obj 1 612 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 615 library: ceammc v0.7.1; +#X text 10 615 library: ceammc v0.8.0; #X text 594 627 see also:; #X obj 668 627 array.each; #N canvas 10 634 400 290 info 0; @@ -58,7 +58,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 array.set; #X text 10 76 category:; @@ -68,7 +68,7 @@ #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 array \, set; #X text 10 186 website:; diff --git a/ceammc/ext/doc/array.set.pddoc b/ceammc/ext/doc/array.set.pddoc index 1898cfd858..20bc2f35f3 100644 --- a/ceammc/ext/doc/array.set.pddoc +++ b/ceammc/ext/doc/array.set.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky set array content from list - GPL3 + GPL3 or later ceammc array array set diff --git a/ceammc/ext/doc/array.stddev-help.pd b/ceammc/ext/doc/array.stddev-help.pd index 686b289533..85c069dd36 100644 --- a/ceammc/ext/doc/array.stddev-help.pd +++ b/ceammc/ext/doc/array.stddev-help.pd @@ -57,7 +57,7 @@ https://en.wikipedia.org/wiki/Standard_deviation; #X text 115 45 ::; #X obj 131 48 ui.link @title array @url ceammc.array-help.pd; #X obj 1 565 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 568 library: ceammc v0.7.1; +#X text 10 568 library: ceammc v0.8.0; #X text 564 580 see also:; #X obj 638 580 array.variance; #N canvas 10 587 400 290 info 0; @@ -65,7 +65,7 @@ https://en.wikipedia.org/wiki/Standard_deviation; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 array.stddev; #X text 10 76 category:; @@ -75,7 +75,7 @@ https://en.wikipedia.org/wiki/Standard_deviation; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 array \, deviation; #X text 10 186 website:; diff --git a/ceammc/ext/doc/array.stddev.pddoc b/ceammc/ext/doc/array.stddev.pddoc index 82d2e4aa5a..81e89c946a 100644 --- a/ceammc/ext/doc/array.stddev.pddoc +++ b/ceammc/ext/doc/array.stddev.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky calculates standard deviation for array values - GPL3 + GPL3 or later ceammc array array deviation diff --git a/ceammc/ext/doc/array.stretch-help.pd b/ceammc/ext/doc/array.stretch-help.pd index f4b7ce066c..949c3170ff 100644 --- a/ceammc/ext/doc/array.stretch-help.pd +++ b/ceammc/ext/doc/array.stretch-help.pd @@ -43,7 +43,7 @@ source to destination array; #X obj 357 404 array.stretch A1 A2 @tempo -30 @speech; #X text 50 433 Play; #X obj 50 461 ui.tab @items A1 A2; -#X msg 50 490 set \$1 \, bang; +#X msg 50 490 set \$2 \, bang; #X msg 194 490 stop; #X obj 50 519 tabplay~ A2; #X obj 50 548 ui.gain~ @size 120 16; @@ -135,13 +135,13 @@ sound pitch. Type: float. Units: %. Default value: 0\. Range: -50\...100\.; #X text 115 45 ::; #X obj 131 48 ui.link @title array @url ceammc.array-help.pd; #X obj 1 1736 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1739 library: ceammc v0.7.1; +#X text 10 1739 library: ceammc v0.8.0; #N canvas 10 1758 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 array.stretch; #X text 10 76 category:; @@ -151,7 +151,7 @@ sound pitch. Type: float. Units: %. Default value: 0\. Range: -50\...100\.; #X text 10 120 authors:; #X text 120 120 Olli Parviainen \, Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 array \, stretch; #X text 10 186 website:; diff --git a/ceammc/ext/doc/array.stretch.pddoc b/ceammc/ext/doc/array.stretch.pddoc index f67bcf8abf..75e7f4d28a 100644 --- a/ceammc/ext/doc/array.stretch.pddoc +++ b/ceammc/ext/doc/array.stretch.pddoc @@ -8,7 +8,7 @@ Serge Poltavsky array time-stretch, pitch-shift or rate-change - GPL3 + GPL3 or later ceammc array array stretch @@ -96,7 +96,7 @@ [ui.tab @items A1 A2] | -[set $1, bang( [stop( +[set $2, bang( [stop( | | [tabplay~ A2] | diff --git a/ceammc/ext/doc/array.sum-help.pd b/ceammc/ext/doc/array.sum-help.pd index aaf93034d8..d847b01309 100644 --- a/ceammc/ext/doc/array.sum-help.pd +++ b/ceammc/ext/doc/array.sum-help.pd @@ -47,7 +47,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title array @url ceammc.array-help.pd; #X obj 1 514 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 517 library: ceammc v0.7.1; +#X text 10 517 library: ceammc v0.8.0; #X text 594 529 see also:; #X obj 668 529 array.sum2; #N canvas 10 536 400 290 info 0; @@ -55,7 +55,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 array.sum; #X text 10 76 category:; @@ -65,7 +65,7 @@ #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 array \, sum; #X text 10 186 website:; diff --git a/ceammc/ext/doc/array.sum.pddoc b/ceammc/ext/doc/array.sum.pddoc index 1e2816358b..289feec083 100644 --- a/ceammc/ext/doc/array.sum.pddoc +++ b/ceammc/ext/doc/array.sum.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky calculates sum of array elements - GPL3 + GPL3 or later ceammc array array sum diff --git a/ceammc/ext/doc/array.sum2-help.pd b/ceammc/ext/doc/array.sum2-help.pd index 2373c8e368..256cf6e8aa 100644 --- a/ceammc/ext/doc/array.sum2-help.pd +++ b/ceammc/ext/doc/array.sum2-help.pd @@ -47,7 +47,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title array @url ceammc.array-help.pd; #X obj 1 514 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 517 library: ceammc v0.7.1; +#X text 10 517 library: ceammc v0.8.0; #X text 600 529 see also:; #X obj 674 529 array.sum; #N canvas 10 536 400 290 info 0; @@ -55,7 +55,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 array.sum2; #X text 10 76 category:; @@ -65,7 +65,7 @@ #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 array \, sum; #X text 10 186 website:; diff --git a/ceammc/ext/doc/array.sum2.pddoc b/ceammc/ext/doc/array.sum2.pddoc index 5ddeb86566..cd77977fcc 100644 --- a/ceammc/ext/doc/array.sum2.pddoc +++ b/ceammc/ext/doc/array.sum2.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky calculates sum of squares of array elements - GPL3 + GPL3 or later ceammc array array sum diff --git a/ceammc/ext/doc/array.variance-help.pd b/ceammc/ext/doc/array.variance-help.pd index 1a6bf9d881..129cc1552f 100644 --- a/ceammc/ext/doc/array.variance-help.pd +++ b/ceammc/ext/doc/array.variance-help.pd @@ -56,7 +56,7 @@ Variance @url https://en.wikipedia.org/wiki/Variance; #X text 115 45 ::; #X obj 131 48 ui.link @title array @url ceammc.array-help.pd; #X obj 1 565 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 568 library: ceammc v0.7.1; +#X text 10 568 library: ceammc v0.8.0; #X text 579 580 see also:; #X obj 653 580 array.stddev; #N canvas 10 587 400 290 info 0; @@ -64,7 +64,7 @@ Variance @url https://en.wikipedia.org/wiki/Variance; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 array.variance; #X text 10 76 category:; @@ -74,7 +74,7 @@ Variance @url https://en.wikipedia.org/wiki/Variance; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 array \, deviation \, variance; #X text 10 186 website:; diff --git a/ceammc/ext/doc/array.variance.pddoc b/ceammc/ext/doc/array.variance.pddoc index 88091d6904..f268706e44 100644 --- a/ceammc/ext/doc/array.variance.pddoc +++ b/ceammc/ext/doc/array.variance.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky calculates variance of array values - GPL3 + GPL3 or later ceammc array array deviation variance diff --git a/ceammc/ext/doc/array.vplay-help.pd b/ceammc/ext/doc/array.vplay-help.pd index 99bc9ba48b..7391752bfb 100644 --- a/ceammc/ext/doc/array.vplay-help.pd +++ b/ceammc/ext/doc/array.vplay-help.pd @@ -11,8 +11,8 @@ #A 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0; -#X coords 0 1 100 -1 120 95 1; -#X restore 434 133 graph; +#X coords 0 1 100 -1 120 80 1; +#X restore 443 133 graph; #X obj 50 147 expand_env; #X msg 184 147 0.3; #X msg 242 147 1; @@ -23,19 +23,20 @@ #X msg 50 219 stop \, play; #X msg 184 219 @speed \$1; #X msg 299 219 @reversed \$1; -#X obj 434 234 ui.rslider @size 120 16; +#X obj 443 219 ui.rslider @mouse_events 1; #X obj 69 248 r pos; #X obj 146 248 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 -1; -#X msg 434 262 range \$1 phase \$2 phase; +#X obj 443 248 ui.mouse_filter @up; #X obj 50 277 array.vplay @array vplay; +#X msg 443 277 range \$1 phase \$2 phase; #X obj 50 305 vline~; #X obj 251 305 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 -1; -#X msg 453 305 @begin 0; -#X msg 558 305 @end -1; +#X msg 462 305 @begin 0; +#X msg 568 305 @end -1; #X obj 50 334 tabread4~ vplay; -#X obj 434 334 s pos; +#X obj 443 334 s pos; #X obj 50 363 ui.gain~ @size 120 16; #X obj 328 363 ui.dsp~; #X obj 50 392 dac~; @@ -114,7 +115,7 @@ sample. Type: float.; #X text 115 45 ::; #X obj 131 48 ui.link @title array @url ceammc.array-help.pd; #X obj 1 1287 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1290 library: ceammc v0.7.1; +#X text 10 1290 library: ceammc v0.8.0; #X text 601 1302 see also:; #X obj 675 1302 list.each; #N canvas 10 1309 400 290 info 0; @@ -122,7 +123,7 @@ sample. Type: float.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 array.vplay; #X text 10 76 category:; @@ -132,7 +133,7 @@ sample. Type: float.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 array \, play \, vline; #X text 10 186 website:; @@ -155,12 +156,13 @@ https://github.com/uliss/pure-data; #X connect 18 0 20 0; #X connect 14 0 20 0; #X connect 15 0 20 0; -#X connect 20 0 21 0; -#X connect 20 1 22 0; -#X connect 21 0 25 0; -#X connect 19 0 26 0; -#X connect 23 0 26 0; -#X connect 24 0 26 0; +#X connect 19 0 21 0; +#X connect 20 0 22 0; +#X connect 20 1 23 0; +#X connect 22 0 26 0; +#X connect 21 0 27 0; +#X connect 24 0 27 0; #X connect 25 0 27 0; -#X connect 27 0 29 0; -#X connect 27 0 29 1; \ No newline at end of file +#X connect 26 0 28 0; +#X connect 28 0 30 0; +#X connect 28 0 30 1; \ No newline at end of file diff --git a/ceammc/ext/doc/array.vplay.pddoc b/ceammc/ext/doc/array.vplay.pddoc index 00f43c5541..73bc20092e 100644 --- a/ceammc/ext/doc/array.vplay.pddoc +++ b/ceammc/ext/doc/array.vplay.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky simple array player for using with vline~ - GPL3 + GPL3 or later ceammc array array play vline @@ -62,21 +62,21 @@ Serge Poltavsky fill array with window - GPL3 + GPL3 or later ceammc array array window diff --git a/ceammc/ext/doc/canvas.current-help.pd b/ceammc/ext/doc/canvas.current-help.pd index 52bc3d4ebf..6f3765734e 100644 --- a/ceammc/ext/doc/canvas.current-help.pd +++ b/ceammc/ext/doc/canvas.current-help.pd @@ -22,65 +22,66 @@ #X obj 20 307 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 342 @abstraction; -#X text 245 342 (readonly) Get 1 if canvas is abstraction. Type: int.; -#X msg 110 371 @args; -#X text 245 371 (readonly) Get canvas creation arguments. Type: list.; -#X msg 110 400 @dir; -#X text 245 400 (readonly) Get canvas directory (only if top level +#X text 245 342 (readonly) Get 1 if canvas is abstraction. Type: int. +Allowed values: 0 \, 1\.; +#X msg 110 384 @args; +#X text 245 384 (readonly) Get canvas creation arguments. Type: list.; +#X msg 110 413 @dir; +#X text 245 413 (readonly) Get canvas directory (only if top level or abstraction). Type: symbol.; -#X msg 110 442 @height; -#X text 245 442 (readonly) Get canvas height (window or GOP). Type: +#X msg 110 455 @height; +#X text 245 455 (readonly) Get canvas height (window or GOP). Type: int.; -#X msg 110 471 @name; -#X text 245 471 (readonly) Get canvas name. Type: symbol.; -#X msg 110 500 @paths; -#X text 245 500 (readonly) Get canvas search paths. Type: list.; -#X msg 110 529 @root; -#X text 245 529 (readonly) Get 1 if canvas is top-level (window). Type: +#X msg 110 484 @name; +#X text 245 484 (readonly) Get canvas name. Type: symbol.; +#X msg 110 513 @paths; +#X text 245 513 (readonly) Get canvas search paths. Type: list.; +#X msg 110 542 @root; +#X text 245 542 (readonly) Get 1 if canvas is top-level (window). Type: +int. Allowed values: 0 \, 1\.; +#X msg 110 584 @width; +#X text 245 584 (readonly) Get canvas width (window or GOP). Type: int.; -#X msg 110 558 @width; -#X text 245 558 (readonly) Get canvas width (window or GOP). Type: +#X msg 110 613 @x; +#X text 245 613 (readonly) Get canvas x-pos (window or GOP). Type: int.; -#X msg 110 587 @x; -#X text 245 587 (readonly) Get canvas x-pos (window or GOP). Type: +#X msg 110 642 @y; +#X text 245 642 (readonly) Get canvas y-pos (window or GOP). Type: int.; -#X msg 110 616 @y; -#X text 245 616 (readonly) Get canvas y-pos (window or GOP). Type: -int.; -#X msg 110 645 @font; -#X text 245 645 (readonly) Get canvas font size. Type: float.; -#X msg 110 674 @size; -#X text 245 674 (readonly) Get canvas dimensions. If root canvas (window) +#X msg 110 671 @font; +#X text 245 671 (readonly) Get canvas font size. Type: int.; +#X msg 110 700 @size; +#X text 245 700 (readonly) Get canvas dimensions. If root canvas (window) return window size \, if subpatch return Graph on Parent size. Type: list.; -#X obj 20 741 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 746 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X obj 20 767 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 772 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 747 1\.; -#X text 245 747 property request.; -#X text 150 767 *bang*; -#X text 245 767 output dict with all properties.; -#X obj 20 797 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 802 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 773 1\.; +#X text 245 773 property request.; +#X text 150 793 *bang*; +#X text 245 793 output dict with all properties.; +#X obj 20 823 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 828 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 803 1\.; -#X text 245 803 dict or property output.; +#X text 110 829 1\.; +#X text 245 829 dict or property output.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title patch @url ceammc.patch-help.pd; -#X obj 1 853 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 856 library: ceammc v0.7.1; -#X text 507 868 see also:; -#X obj 581 868 patch.args; -#X obj 668 868 canvas.top; -#N canvas 10 875 400 290 info 0; +#X obj 1 879 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 882 library: ceammc v0.8.0; +#X text 507 894 see also:; +#X obj 581 894 patch.args; +#X obj 668 894 canvas.top; +#N canvas 10 901 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 canvas.current; #X text 10 76 category:; @@ -90,7 +91,7 @@ list.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 canvas; #X text 10 186 website:; @@ -99,7 +100,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 875 pd info; +#X restore 10 901 pd info; #X connect 4 0 14 0; #X connect 7 0 14 0; #X connect 10 0 14 0; diff --git a/ceammc/ext/doc/canvas.current.pddoc b/ceammc/ext/doc/canvas.current.pddoc index 90a7eec8ce..b516dd46f6 100644 --- a/ceammc/ext/doc/canvas.current.pddoc +++ b/ceammc/ext/doc/canvas.current.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky verbose information about current canvas - GPL3 + GPL3 or later ceammc patch canvas @@ -22,13 +22,13 @@ canvas directory (only if top level or abstraction) canvas creation arguments - 1 if canvas is top-level + 1 if canvas is top-level (window) - 1 if canvas is + 1 if canvas is abstraction canvas dimensions. If root canvas (window) return window size, if subpatch return Graph on Parent size - canvas font size + canvas font size canvas search paths canvas width (window or GOP) diff --git a/ceammc/ext/doc/canvas.dir-help.pd b/ceammc/ext/doc/canvas.dir-help.pd new file mode 100644 index 0000000000..66a8b012ae --- /dev/null +++ b/ceammc/ext/doc/canvas.dir-help.pd @@ -0,0 +1,62 @@ +#N canvas 0 0 785 555 12; +#X declare -lib ceammc; +#X obj 575 50 cnv 1 190 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 575 50 current canvas directory; +#X obj 1 1 cnv 5 765 40 empty empty canvas.dir 20 20 0 20 -104026 +-4096 0; +#X obj 667 11 canvas.dir; +#X obj 50 118 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 +-1; +#X obj 50 147 canvas.dir; +#X obj 174 147 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 +-1; +#X obj 50 176 ui.display @size 150 18; +#X obj 20 216 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 221 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +0; +#X text 110 222 1\.; +#X text 150 222 *bang*; +#X text 245 222 output current canvas directory.; +#X obj 20 252 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 257 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 258 1\.; +#X text 245 258 current canvas directory as symbol.; +#X obj 10 48 ui.link @title index @url ../index-help.pd; +#X text 51 45 ::; +#X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; +#X text 115 45 ::; +#X obj 131 48 ui.link @title patch @url ceammc.patch-help.pd; +#X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 508 library: ceammc v0.8.0; +#X text 492 520 see also:; +#X obj 566 520 canvas.name; +#X obj 661 520 canvas.path; +#N canvas 10 527 400 290 info 0; +#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; +#X text 10 10 library:; +#X text 120 10 ceammc; +#X text 10 32 version:; +#X text 120 32 0.8.0; +#X text 10 54 object:; +#X text 120 54 canvas.dir; +#X text 10 76 category:; +#X text 120 76 patch; +#X text 10 98 since:; +#X text 120 98 0.8; +#X text 10 120 authors:; +#X text 120 120 Serge Poltavsky; +#X text 10 142 license:; +#X text 120 142 GPL3 or later; +#X text 10 164 keywords:; +#X text 120 164 canvas \, directory; +#X text 10 186 website:; +#X obj 120 189 ui.link @title https://github.com/uliss/pure-data @url +https://github.com/uliss/pure-data; +#X obj 120 208 declare -lib ceammc; +#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 120 268 generated by pddoc; +#X restore 10 527 pd info; +#X connect 4 0 5 0; +#X connect 5 0 7 0; +#X connect 6 0 7 0; \ No newline at end of file diff --git a/ceammc/ext/doc/canvas.dir.pddoc b/ceammc/ext/doc/canvas.dir.pddoc new file mode 100644 index 0000000000..3016953999 --- /dev/null +++ b/ceammc/ext/doc/canvas.dir.pddoc @@ -0,0 +1,40 @@ + + + + canvas.dir + + + Serge Poltavsky + + current canvas directory + GPL3 or later + ceammc + patch + canvas directory + + canvas.name + canvas.path + + 0.8 + + + + output current canvas directory + + + + current canvas directory as symbol + + + + + + + + diff --git a/ceammc/ext/doc/canvas.name-help.pd b/ceammc/ext/doc/canvas.name-help.pd new file mode 100644 index 0000000000..c07f759530 --- /dev/null +++ b/ceammc/ext/doc/canvas.name-help.pd @@ -0,0 +1,58 @@ +#N canvas 0 0 785 555 12; +#X declare -lib ceammc; +#X obj 614 50 cnv 1 151 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 614 50 current canvas name; +#X obj 1 1 cnv 5 765 40 empty empty canvas.name 20 20 0 20 -104026 +-4096 0; +#X obj 660 11 canvas.name; +#X obj 50 118 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 +-1; +#X obj 50 147 canvas.name; +#X symbolatom 50 176 20 0 0 0 - - -; +#X obj 20 215 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 220 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +0; +#X text 110 221 1\.; +#X text 150 221 *bang*; +#X text 245 221 output current canvas name.; +#X obj 20 251 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 256 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 257 1\.; +#X text 245 257 current canvas name.; +#X obj 10 48 ui.link @title index @url ../index-help.pd; +#X text 51 45 ::; +#X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; +#X text 115 45 ::; +#X obj 131 48 ui.link @title patch @url ceammc.patch-help.pd; +#X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 508 library: ceammc v0.8.0; +#X text 565 520 see also:; +#X obj 639 520 canvas.current; +#N canvas 10 527 400 290 info 0; +#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; +#X text 10 10 library:; +#X text 120 10 ceammc; +#X text 10 32 version:; +#X text 120 32 0.8.0; +#X text 10 54 object:; +#X text 120 54 canvas.name; +#X text 10 76 category:; +#X text 120 76 patch; +#X text 10 98 since:; +#X text 120 98 0.8; +#X text 10 120 authors:; +#X text 120 120 Serge Poltavsky; +#X text 10 142 license:; +#X text 120 142 GPL3 or later; +#X text 10 164 keywords:; +#X text 120 164 canvas \, name; +#X text 10 186 website:; +#X obj 120 189 ui.link @title https://github.com/uliss/pure-data @url +https://github.com/uliss/pure-data; +#X obj 120 208 declare -lib ceammc; +#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 120 268 generated by pddoc; +#X restore 10 527 pd info; +#X connect 4 0 5 0; +#X connect 5 0 6 0; \ No newline at end of file diff --git a/ceammc/ext/doc/canvas.name.pddoc b/ceammc/ext/doc/canvas.name.pddoc new file mode 100644 index 0000000000..b7b707a573 --- /dev/null +++ b/ceammc/ext/doc/canvas.name.pddoc @@ -0,0 +1,39 @@ + + + + canvas.name + + + Serge Poltavsky + + current canvas name + GPL3 or later + ceammc + patch + canvas name + + canvas.current + + 0.8 + + + + output current canvas name + + + + current canvas name + + + + + + + + diff --git a/ceammc/ext/doc/canvas.path-help.pd b/ceammc/ext/doc/canvas.path-help.pd new file mode 100644 index 0000000000..26d7e55e05 --- /dev/null +++ b/ceammc/ext/doc/canvas.path-help.pd @@ -0,0 +1,62 @@ +#N canvas 0 0 785 555 12; +#X declare -lib ceammc; +#X obj 584 50 cnv 1 181 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 584 50 current canvas fullpath; +#X obj 1 1 cnv 5 765 40 empty empty canvas.path 20 20 0 20 -104026 +-4096 0; +#X obj 661 11 canvas.path; +#X obj 50 118 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 +-1; +#X obj 50 147 canvas.path; +#X obj 184 147 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 +-1; +#X obj 50 176 ui.display @size 150 18; +#X obj 20 216 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 221 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +0; +#X text 110 222 1\.; +#X text 150 222 *bang*; +#X text 245 222 output current canvas fullpath.; +#X obj 20 252 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 257 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 258 1\.; +#X text 245 258 current canvas fullpath as symbol.; +#X obj 10 48 ui.link @title index @url ../index-help.pd; +#X text 51 45 ::; +#X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; +#X text 115 45 ::; +#X obj 131 48 ui.link @title patch @url ceammc.patch-help.pd; +#X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 508 library: ceammc v0.8.0; +#X text 498 520 see also:; +#X obj 572 520 canvas.name; +#X obj 667 520 canvas.dir; +#N canvas 10 527 400 290 info 0; +#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; +#X text 10 10 library:; +#X text 120 10 ceammc; +#X text 10 32 version:; +#X text 120 32 0.8.0; +#X text 10 54 object:; +#X text 120 54 canvas.path; +#X text 10 76 category:; +#X text 120 76 patch; +#X text 10 98 since:; +#X text 120 98 0.8; +#X text 10 120 authors:; +#X text 120 120 Serge Poltavsky; +#X text 10 142 license:; +#X text 120 142 GPL3 or later; +#X text 10 164 keywords:; +#X text 120 164 canvas \, path; +#X text 10 186 website:; +#X obj 120 189 ui.link @title https://github.com/uliss/pure-data @url +https://github.com/uliss/pure-data; +#X obj 120 208 declare -lib ceammc; +#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 120 268 generated by pddoc; +#X restore 10 527 pd info; +#X connect 4 0 5 0; +#X connect 5 0 7 0; +#X connect 6 0 7 0; \ No newline at end of file diff --git a/ceammc/ext/doc/canvas.path.pddoc b/ceammc/ext/doc/canvas.path.pddoc new file mode 100644 index 0000000000..b716859af6 --- /dev/null +++ b/ceammc/ext/doc/canvas.path.pddoc @@ -0,0 +1,40 @@ + + + + canvas.path + + + Serge Poltavsky + + current canvas fullpath + GPL3 or later + ceammc + patch + canvas path + + canvas.name + canvas.dir + + 0.8 + + + + output current canvas fullpath + + + + current canvas fullpath as symbol + + + + + + + + diff --git a/ceammc/ext/doc/canvas.top-help.pd b/ceammc/ext/doc/canvas.top-help.pd index 6413c4c929..2caa83348e 100644 --- a/ceammc/ext/doc/canvas.top-help.pd +++ b/ceammc/ext/doc/canvas.top-help.pd @@ -54,7 +54,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title patch @url ceammc.patch-help.pd; #X obj 1 697 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 700 library: ceammc v0.7.1; +#X text 10 700 library: ceammc v0.8.0; #X text 478 712 see also:; #X obj 552 712 patch.args; #X obj 639 712 canvas.current; @@ -63,7 +63,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 canvas.top; #X text 10 76 category:; @@ -73,7 +73,7 @@ #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 canvas; #X text 10 186 website:; diff --git a/ceammc/ext/doc/canvas.top.pddoc b/ceammc/ext/doc/canvas.top.pddoc index d705dad896..f75cd7dbe6 100644 --- a/ceammc/ext/doc/canvas.top.pddoc +++ b/ceammc/ext/doc/canvas.top.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky verbose information about top-level canvas - GPL3 + GPL3 or later ceammc patch canvas diff --git a/ceammc/ext/doc/ceammc-help.pd b/ceammc/ext/doc/ceammc-help.pd index 4daaf1c75c..b6147645c9 100644 --- a/ceammc/ext/doc/ceammc-help.pd +++ b/ceammc/ext/doc/ceammc-help.pd @@ -65,975 +65,1073 @@ purposes in centre of electroacoustic music of Moscow Conservatory #X text 200 961 float index to outlet values as radio switch; #X obj 30 988 window; #X text 200 988 returns window value by given window position; -#X obj 30 1015 xfade2~; -#X text 200 1015 multi stereo-signal crossfade; -#X obj 30 1042 xfade~; -#X text 200 1042 multi signal crossfade; -#X obj 20 1069 cnv 5 48 31 empty empty conv 4 13 0 17 -262144 -49933 +#X obj 30 1015 xdac~; +#X text 200 1015 dac~ with channel ranges; +#X obj 30 1042 xfade2~; +#X text 200 1042 multi stereo-signal crossfade; +#X obj 30 1069 xfade~; +#X text 200 1069 multi signal crossfade; +#X obj 20 1096 cnv 5 48 31 empty empty conv 4 13 0 17 -262144 -49933 0; -#X obj 20 1110 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 30 1121 array.p2s; -#X text 200 1121 convert array phase [0\..1] to sample position; -#X obj 30 1148 array.s2p; -#X text 200 1148 convert array sample position to relative phase position +#X obj 20 1137 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 30 1148 array.p2s; +#X text 200 1148 convert array phase [0\..1] to sample position; +#X obj 30 1175 array.s2p; +#X text 200 1175 convert array sample position to relative phase position [0\..1]; -#X obj 30 1188 conv.amp2dbfs; -#X text 200 1188 convert from amplitude to decibel full scale; -#X obj 30 1215 conv.bpm2hz; -#X text 200 1215 converts BPM to frequency in herz; -#X obj 30 1242 conv.bpm2ms; -#X text 200 1242 convert frequency in BPM to period in milliseconds; -#X obj 30 1269 conv.bpm2sec; -#X text 200 1269 convert frequency in BPM to period in seconds; -#X obj 30 1296 conv.cc2amp; -#X text 200 1296 convert from MIDI Control Change range; -#X obj 30 1323 conv.dbfs2amp; -#X text 200 1323 convert decibel full scale to amplitude; -#X obj 30 1350 conv.lin2curve; -#X text 200 1350 map linear to exponential range with 0 allowed.; -#X obj 30 1377 conv.lin2exp; -#X text 200 1377 maps linear range to exponential range; -#X obj 30 1404 conv.lin2lin; -#X text 200 1404 convert from one linear range to another; -#X obj 30 1431 conv.list2props; -#X text 200 1431 converts list to series of property messages; -#X obj 30 1458 conv.midi2freq; -#X text 200 1458 convert from midi pitch to frequency in hz (with various +#X obj 30 1215 conv.amp2dbfs; +#X text 200 1215 convert from amplitude to decibel full scale; +#X obj 30 1242 conv.bpm2hz; +#X text 200 1242 converts BPM to frequency in herz; +#X obj 30 1269 conv.bpm2ms; +#X text 200 1269 convert frequency in BPM to period in milliseconds; +#X obj 30 1296 conv.bpm2sec; +#X text 200 1296 convert frequency in BPM to period in seconds; +#X obj 30 1323 conv.car2pol; +#X text 200 1323 convert cartesian coords to polar; +#X obj 30 1350 conv.cc2amp; +#X text 200 1350 convert from MIDI Control Change range; +#X obj 30 1377 conv.dbfs2amp; +#X text 200 1377 convert decibel full scale to amplitude; +#X obj 30 1404 conv.lin2curve; +#X text 200 1404 map linear to exponential range with 0 allowed.; +#X obj 30 1431 conv.lin2exp; +#X text 200 1431 maps linear range to exponential range; +#X obj 30 1458 conv.lin2lin; +#X text 200 1458 convert from one linear range to another; +#X obj 30 1485 conv.list2props; +#X text 200 1485 converts list to series of property messages; +#X obj 30 1512 conv.midi2freq; +#X text 200 1512 convert from midi pitch to frequency in hz (with various base A and temperament); -#X obj 30 1498 conv.pitch2midi; -#X text 200 1498 converts symbol pitch name to MIDI note number; -#X obj 30 1525 conv.samp2sec; -#X text 200 1525 convert samples to time according to samplerate; -#X obj 30 1552 conv.sec2samp; -#X text 200 1552 convert time in seconds to number of samples according +#X obj 30 1552 conv.phase2rad; +#X text 200 1552 convert phase value [0-1] to radians; +#X obj 30 1579 conv.phase2rad~; +#X text 200 1579 convert phase value [0-1] to radians; +#X obj 30 1606 conv.pitch2midi; +#X text 200 1606 converts symbol pitch name to MIDI note number; +#X obj 30 1633 conv.pol2car; +#X text 200 1633 convert from polar coordinates to cartesian; +#X obj 30 1660 conv.rad2phase; +#X text 200 1660 convert radians value to phase; +#X obj 30 1687 conv.rad2phase~; +#X text 200 1687 convert radians value to phase; +#X obj 30 1714 conv.samp2sec; +#X text 200 1714 convert samples to time according to samplerate; +#X obj 30 1741 conv.sec2samp; +#X text 200 1741 convert time in seconds to number of samples according to current samplerate; -#X obj 30 1592 conv.sec2str; -#X text 200 1592 converts float time in seconds to formated symbol +#X obj 30 1781 conv.sec2str; +#X text 200 1781 converts float time in seconds to formated symbol (or string); -#X obj 30 1619 conv.str2sec; -#X text 200 1619 converts formatted time to float value in seconds; -#X obj 20 1646 cnv 5 48 31 empty empty data 4 13 0 17 -262144 -49933 +#X obj 30 1808 conv.str2sec; +#X text 200 1808 converts formatted time to float value in seconds; +#X obj 20 1835 cnv 5 48 31 empty empty data 4 13 0 17 -262144 -49933 0; -#X obj 20 1687 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 30 1698 data.dict; -#X text 200 1698 dictionary container: store values by key; -#X obj 30 1725 data.fifo; -#X text 200 1725 First-In-First-Out (FIFO) queue data container; -#X obj 30 1752 data.float; -#X text 200 1752 robust float object; -#X obj 30 1779 data.int; -#X text 200 1779 robust int object; -#X obj 30 1806 data.list; -#X text 200 1806 list container; -#X obj 30 1833 data.mlist; -#X text 200 1833 multidimensional list container; -#X obj 30 1860 data.set; -#X text 200 1860 container that store unique elements; -#X obj 30 1887 data.set2list; -#X text 200 1887 converts set to list; -#X obj 30 1914 dict.contains; -#X text 200 1914 predicate to check dict contains key; -#X obj 30 1941 dict.each; -#X text 200 1941 map each value in dict; -#X obj 30 1968 dict.from_list; -#X text 200 1968 creates dictionary from list; -#X obj 30 1995 dict.get; -#X text 200 1995 on input dict outputs value to corresponding key outlet; -#X obj 30 2022 dict.keys; -#X text 200 2022 get list of dict keys; -#X obj 30 2049 dict.pass; -#X text 200 2049 passes specified keys in dict; -#X obj 30 2076 dict.reject; -#X text 200 2076 rejects specified keys from dict; -#X obj 30 2103 dict.size; -#X text 200 2103 dictionary size; -#X obj 30 2130 dict.to_list; -#X text 200 2130 converts dictionary to plain list; -#X obj 30 2157 dict.values; -#X text 200 2157 dictionary values as mlist; -#X obj 30 2184 mlist.flatten; -#X text 200 2184 flatten nested mlist; -#X obj 30 2211 set.contains; -#X text 200 2211 check if specified element is in set; -#X obj 30 2238 set.diff; -#X text 200 2238 difference between two sets; -#X obj 30 2265 set.equal; -#X text 200 2265 checks if two sets are equal (contains same elements); -#X obj 30 2292 set.intersect; -#X text 200 2292 output intersection of given sets; -#X obj 30 2319 set.size; -#X text 200 2319 get number of elements in set; -#X obj 30 2346 set.symdiff; -#X text 200 2346 symmetric difference between two sets; -#X obj 30 2373 set.union; -#X text 200 2373 output union of given sets; -#X obj 20 2400 cnv 5 38 31 empty empty dyn 4 13 0 17 -262144 -49933 0; -#X obj 20 2441 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 30 2452 dyn.comp2~; -#X text 200 2452 stereo dynamic range compressor; -#X obj 30 2479 dyn.comp~; -#X text 200 2479 mono dynamic range compressors; -#X obj 30 2506 dyn.gate2~; -#X text 200 2506 stereo signal gate; -#X obj 30 2533 dyn.gate~; -#X text 200 2533 mono signal gate; -#X obj 30 2560 dyn.limit2~; -#X text 200 2560 stereo 1176LN Peak Limiter; -#X obj 30 2587 dyn.limit~; -#X text 200 2587 mono 1176LN Peak Limiter; -#X obj 30 2614 dyn.softclip~; -#X text 200 2614 soft signal clip; -#X obj 20 2641 cnv 5 38 31 empty empty env 4 13 0 17 -262144 -49933 0; -#X obj 20 2682 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 30 2693 env.adsr~; -#X text 200 2693 ADSR (Attack \, Decay \, Sustain \, Release) envelope +#X obj 20 1876 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 30 1887 data.dict; +#X text 200 1887 dictionary container: store values by key; +#X obj 30 1914 data.fifo; +#X text 200 1914 First-In-First-Out (FIFO) queue data container; +#X obj 30 1941 data.float; +#X text 200 1941 robust float object; +#X obj 30 1968 data.int; +#X text 200 1968 robust int object; +#X obj 30 1995 data.list; +#X text 200 1995 list container; +#X obj 30 2022 data.mlist; +#X text 200 2022 multidimensional list container; +#X obj 30 2049 data.set; +#X text 200 2049 container that store unique elements; +#X obj 30 2076 data.set2list; +#X text 200 2076 converts set to list; +#X obj 30 2103 dict.contains; +#X text 200 2103 predicate to check dict contains key; +#X obj 30 2130 dict.each; +#X text 200 2130 map each value in dict; +#X obj 30 2157 dict.from_list; +#X text 200 2157 creates dictionary from list; +#X obj 30 2184 dict.get; +#X text 200 2184 on input dict outputs value to corresponding key outlet; +#X obj 30 2211 dict.keys; +#X text 200 2211 get list of dict keys; +#X obj 30 2238 dict.pass; +#X text 200 2238 passes specified keys in dict; +#X obj 30 2265 dict.reject; +#X text 200 2265 rejects specified keys from dict; +#X obj 30 2292 dict.size; +#X text 200 2292 dictionary size; +#X obj 30 2319 dict.to_list; +#X text 200 2319 converts dictionary to plain list; +#X obj 30 2346 dict.values; +#X text 200 2346 dictionary values as mlist; +#X obj 30 2373 mlist.flatten; +#X text 200 2373 flatten nested mlist; +#X obj 30 2400 set.contains; +#X text 200 2400 check if specified element is in set; +#X obj 30 2427 set.diff; +#X text 200 2427 difference between two sets; +#X obj 30 2454 set.equal; +#X text 200 2454 checks if two sets are equal (contains same elements); +#X obj 30 2481 set.intersect; +#X text 200 2481 output intersection of given sets; +#X obj 30 2508 set.size; +#X text 200 2508 get number of elements in set; +#X obj 30 2535 set.symdiff; +#X text 200 2535 symmetric difference between two sets; +#X obj 30 2562 set.union; +#X text 200 2562 output union of given sets; +#X obj 20 2589 cnv 5 38 31 empty empty dyn 4 13 0 17 -262144 -49933 0; +#X obj 20 2630 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 30 2641 dyn.comp2~; +#X text 200 2641 stereo dynamic range compressor; +#X obj 30 2668 dyn.comp~; +#X text 200 2668 mono dynamic range compressors; +#X obj 30 2695 dyn.gate2~; +#X text 200 2695 stereo signal gate; +#X obj 30 2722 dyn.gate~; +#X text 200 2722 mono signal gate; +#X obj 30 2749 dyn.limit2~; +#X text 200 2749 stereo 1176LN Peak Limiter; +#X obj 30 2776 dyn.limit~; +#X text 200 2776 mono 1176LN Peak Limiter; +#X obj 30 2803 dyn.softclip~; +#X text 200 2803 soft signal clip; +#X obj 20 2830 cnv 5 38 31 empty empty env 4 13 0 17 -262144 -49933 0; +#X obj 20 2871 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 30 2882 env.adsr~; +#X text 200 2882 ADSR (Attack \, Decay \, Sustain \, Release) envelope generator; -#X obj 30 2720 env.ar~; -#X text 200 2720 Attack/Release envelope generator; -#X obj 30 2747 env.asr~; -#X text 200 2747 Attack/Sustain/Release envelope generator; -#X obj 30 2774 env.concat; -#X text 200 2774 Envelope concatenation; -#X obj 30 2801 env.follow~; -#X text 200 2801 Envelope follower with independent attack and release +#X obj 30 2909 env.ar~; +#X text 200 2909 Attack/Release envelope generator; +#X obj 30 2936 env.asr~; +#X text 200 2936 Attack/Sustain/Release envelope generator; +#X obj 30 2963 env.concat; +#X text 200 2963 Envelope concatenation; +#X obj 30 2990 env.follow~; +#X text 200 2990 Envelope follower with independent attack and release times; -#X obj 30 2828 env.mix; -#X text 200 2828 Mix between two envelopes. Envelopes should contain +#X obj 30 3017 env.mix; +#X text 200 3017 Mix between two envelopes. Envelopes should contain equal number of segments; -#X obj 30 2868 env.smooth~; -#X text 200 2868 An envelope with an exponential attack and release; -#X obj 30 2895 env.tscale; -#X text 200 2895 Envelope time-scale; -#X obj 30 2922 env.tshift; -#X text 200 2922 Envelope time-shift (horizontal); -#X obj 30 2949 env.vscale; -#X text 200 2949 Envelope value-scale; -#X obj 30 2976 env2array; -#X text 200 2976 Renders envelope to specified array; -#X obj 30 3003 env2vline; -#X text 200 3003 Converts envelope to bunch of vline messages; -#X obj 30 3030 envelope; -#X text 200 3030 Envelope data type; -#X obj 30 3057 vline2env; -#X text 200 3057 Converts vline messages to env; -#X obj 20 3084 cnv 5 49 31 empty empty flow 4 13 0 17 -262144 -49933 +#X obj 30 3057 env.smooth~; +#X text 200 3057 An envelope with an exponential attack and release; +#X obj 30 3084 env.tscale; +#X text 200 3084 Envelope time-scale; +#X obj 30 3111 env.tshift; +#X text 200 3111 Envelope time-shift (horizontal); +#X obj 30 3138 env.vscale; +#X text 200 3138 Envelope value-scale; +#X obj 30 3165 env2array; +#X text 200 3165 Renders envelope to specified array; +#X obj 30 3192 env2vline; +#X text 200 3192 Converts envelope to bunch of vline messages; +#X obj 30 3219 envelope; +#X text 200 3219 Envelope data type; +#X obj 30 3246 vline2env; +#X text 200 3246 Converts vline messages to env; +#X obj 20 3273 cnv 5 49 31 empty empty flow 4 13 0 17 -262144 -49933 0; -#X obj 20 3125 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 30 3136 expand_env; -#X text 200 3136 Substitute enviroment variables in data stream; -#X obj 30 3163 flow.append; -#X text 200 3163 inject message into flow; -#X obj 30 3190 flow.change; -#X text 200 3190 rejects redundant input values; -#X obj 30 3217 flow.count; -#X text 200 3217 control flow event counter; -#X obj 30 3244 flow.demultiplex; -#X text 200 3244 control flow demultiplexer; -#X obj 30 3271 flow.demultiplex2~; -#X text 200 3271 audio stream stereo demultiplexer; -#X obj 30 3298 flow.demultiplex~; -#X text 200 3298 audio stream demultiplexer; -#X obj 30 3325 flow.gate; -#X text 200 3325 control flow gate. [spigot] analog; -#X obj 30 3352 flow.group; -#X text 200 3352 group data atoms in list of specified size; -#X obj 30 3379 flow.interval; -#X text 200 3379 measure time between flow events; -#X obj 30 3406 flow.less; -#X text 200 3406 numeric stream router \, like many [moses]; -#X obj 30 3433 flow.less_eq; -#X text 200 3433 numeric stream router \, like many [moses]; -#X obj 30 3460 flow.match; -#X text 200 3460 route data flow by regexp match; -#X obj 30 3487 flow.multiplex; -#X text 200 3487 control flow multiplexer; -#X obj 30 3514 flow.multiplex2~; -#X text 200 3514 audio stream stereo multiplexer; -#X obj 30 3541 flow.multiplex~; -#X text 200 3541 audio stream multiplexer; -#X obj 30 3568 flow.once; -#X text 200 3568 one message pass thru; -#X obj 30 3595 flow.pass; -#X text 200 3595 pass specified values; -#X obj 30 3622 flow.pass_if; -#X text 200 3622 pass values that accepted by predicate object; -#X obj 30 3649 flow.reject; -#X text 200 3649 reject specified values; -#X obj 30 3676 flow.reject_if; -#X text 200 3676 reject values by predicate; -#X obj 30 3703 flow.route; -#X text 200 3703 advanced message router; -#X obj 30 3730 flow.speedlim; -#X text 200 3730 control stream speed limiter; -#X obj 30 3757 flow.split; -#X text 200 3757 split data flow by external side-chain predicate; -#X obj 30 3784 flow.sync; -#X text 200 3784 bus with only hot inlets; -#X obj 30 3811 flow.tee~; -#X text 200 3811 separate audio and control streams; -#X obj 30 3838 replace; -#X text 200 3838 Replace atoms in data stream; -#X obj 20 3865 cnv 5 37 31 empty empty flt 4 13 0 17 -262144 -49933 0; -#X obj 20 3906 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 30 3917 flt.biquad~; -#X text 200 3917 second order IIR filter.; -#X obj 30 3944 flt.bpf12~; -#X text 200 3944 Band-pass filter with 12/db per octave slope; -#X obj 30 3971 flt.bpf24~; -#X text 200 3971 Band-pass filter with 24/db per octave slope; -#X obj 30 3998 flt.c_bpf~; -#X text 200 3998 BPF coefficient calculator for biquad filter; -#X obj 30 4025 flt.c_highshelf~; -#X text 200 4025 Highshelf filter coefficient calculator for biquad; -#X obj 30 4052 flt.c_hpf~; -#X text 200 4052 HPF coefficient calculator for biquad filter; -#X obj 30 4079 flt.c_lowshelf~; -#X text 200 4079 Lowshelf filter coefficient calculator for biquad; -#X obj 30 4106 flt.c_lpf~; -#X text 200 4106 LPF coefficient calculator for biquad filter; -#X obj 30 4133 flt.c_notch~; -#X text 200 4133 Band-reject coefficient calculator for biquad filter; -#X obj 30 4160 flt.c_peak~; -#X text 200 4160 Peaking equalizer calculator for biquad; -#X obj 30 4187 flt.dcblock2~; -#X text 200 4187 stereo DC blocker; -#X obj 30 4214 flt.dcblock~; -#X text 200 4214 mono DC blocker; -#X obj 30 4241 flt.eq10~; -#X text 200 4241 graphic 10 band equalizer; -#X obj 30 4268 flt.eq_peak_cq~; -#X text 200 4268 constant-Q second order peaking equalizer section; -#X obj 30 4295 flt.eq_peak~; -#X text 200 4295 second order "peaking equalizer" section (gain boost +#X obj 20 3314 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 30 3325 expand_env; +#X text 200 3325 Substitute enviroment variables in data stream; +#X obj 30 3352 flow.append; +#X text 200 3352 inject message into flow; +#X obj 30 3379 flow.change; +#X text 200 3379 rejects redundant input values; +#X obj 30 3406 flow.count; +#X text 200 3406 control flow event counter; +#X obj 30 3433 flow.demultiplex; +#X text 200 3433 control flow demultiplexer; +#X obj 30 3460 flow.demultiplex2~; +#X text 200 3460 audio stream stereo demultiplexer; +#X obj 30 3487 flow.demultiplex~; +#X text 200 3487 audio stream demultiplexer; +#X obj 30 3514 flow.gate; +#X text 200 3514 control flow gate. [spigot] analog; +#X obj 30 3541 flow.group; +#X text 200 3541 group data atoms in list of specified size; +#X obj 30 3568 flow.interval; +#X text 200 3568 measure time between flow events; +#X obj 30 3595 flow.less; +#X text 200 3595 numeric stream router \, like many [moses]; +#X obj 30 3622 flow.less_eq; +#X text 200 3622 numeric stream router \, like many [moses]; +#X obj 30 3649 flow.match; +#X text 200 3649 route data flow by regexp match; +#X obj 30 3676 flow.multiplex; +#X text 200 3676 control flow multiplexer; +#X obj 30 3703 flow.multiplex2~; +#X text 200 3703 audio stream stereo multiplexer; +#X obj 30 3730 flow.multiplex~; +#X text 200 3730 audio stream multiplexer; +#X obj 30 3757 flow.once; +#X text 200 3757 one message pass thru; +#X obj 30 3784 flow.pack; +#X text 200 3784 flow pack; +#X obj 30 3811 flow.pass; +#X text 200 3811 pass specified values; +#X obj 30 3838 flow.pass_if; +#X text 200 3838 pass values that accepted by predicate object; +#X obj 30 3865 flow.reject; +#X text 200 3865 reject specified values; +#X obj 30 3892 flow.reject_if; +#X text 200 3892 reject values by predicate; +#X obj 30 3919 flow.route; +#X text 200 3919 advanced message router; +#X obj 30 3946 flow.speedlim; +#X text 200 3946 control stream speed limiter; +#X obj 30 3973 flow.split; +#X text 200 3973 split data flow by external side-chain predicate; +#X obj 30 4000 flow.sync; +#X text 200 4000 bus with only hot inlets; +#X obj 30 4027 flow.sync_pack; +#X text 200 4027 flow pack with all hot inlets; +#X obj 30 4054 flow.tee~; +#X text 200 4054 separate audio and control streams; +#X obj 30 4081 replace; +#X text 200 4081 Replace atoms in data stream; +#X obj 20 4108 cnv 5 37 31 empty empty flt 4 13 0 17 -262144 -49933 0; +#X obj 20 4149 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 30 4160 flt.biquad~; +#X text 200 4160 second order IIR filter.; +#X obj 30 4187 flt.bpf12~; +#X text 200 4187 Band-pass filter with 12/db per octave slope; +#X obj 30 4214 flt.bpf24~; +#X text 200 4214 Band-pass filter with 24/db per octave slope; +#X obj 30 4241 flt.c_bpf~; +#X text 200 4241 BPF coefficient calculator for biquad filter; +#X obj 30 4268 flt.c_highshelf~; +#X text 200 4268 Highshelf filter coefficient calculator for biquad; +#X obj 30 4295 flt.c_hpf~; +#X text 200 4295 HPF coefficient calculator for biquad filter; +#X obj 30 4322 flt.c_lowshelf~; +#X text 200 4322 Lowshelf filter coefficient calculator for biquad; +#X obj 30 4349 flt.c_lpf~; +#X text 200 4349 LPF coefficient calculator for biquad filter; +#X obj 30 4376 flt.c_notch~; +#X text 200 4376 Band-reject coefficient calculator for biquad filter; +#X obj 30 4403 flt.c_peak~; +#X text 200 4403 Peaking equalizer calculator for biquad; +#X obj 30 4430 flt.dcblock2~; +#X text 200 4430 stereo DC blocker; +#X obj 30 4457 flt.dcblock~; +#X text 200 4457 mono DC blocker; +#X obj 30 4484 flt.eq10~; +#X text 200 4484 graphic 10 band equalizer; +#X obj 30 4511 flt.eq_peak_cq~; +#X text 200 4511 constant-Q second order peaking equalizer section; +#X obj 30 4538 flt.eq_peak~; +#X text 200 4538 second order "peaking equalizer" section (gain boost or cut near some frequency). Also called a "parametric equalizer" section.; -#X obj 30 4350 flt.highshelf~; -#X text 200 4350 gain boost|cut above some frequency; -#X obj 30 4377 flt.hpf12~; -#X text 200 4377 High-pass filter with 12/db per octave slope; -#X obj 30 4404 flt.hpf24~; -#X text 200 4404 High-pass filter with 24/db per octave slope; -#X obj 30 4431 flt.lowshelf~; -#X text 200 4431 gain boost|cut below some frequency; -#X obj 30 4458 flt.lpf12~; -#X text 200 4458 Low-pass filter with 12/db per octave slope; -#X obj 30 4485 flt.lpf24~; -#X text 200 4485 Low-pass filter with 24/db per octave slope; -#X obj 30 4512 flt.median; -#X text 200 4512 Median control flow filter; -#X obj 30 4539 flt.moog_vcf~; -#X text 200 4539 Moog Voltage Controlled Filter; -#X obj 30 4566 flt.notch~; -#X text 200 4566 band-rejection filter; -#X obj 30 4593 flt.resonbp~; -#X text 200 4593 Simple resonant bandpass filter; -#X obj 20 4620 cnv 5 28 31 empty empty fx 4 13 0 17 -262144 -49933 0; -#X obj 20 4661 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 30 4672 fx.bitdown~; -#X text 200 4672 bit downer and downsampler effect; -#X obj 30 4699 fx.chorus~; -#X text 200 4699 Chorus effect; -#X obj 30 4726 fx.distortion1~; -#X text 200 4726 distortion #1 from Guitarix effects set; -#X obj 30 4753 fx.distortion2~; -#X text 200 4753 distortion #2 from Guitarix effects set; -#X obj 30 4780 fx.distortion3~; -#X text 200 4780 simple distortion #3 from Guitarix effects set; -#X obj 30 4807 fx.distortion~; -#X text 200 4807 cubic nonlinearity distortion; -#X obj 30 4834 fx.drive~; -#X text 200 4834 Guitarix drive effect; -#X obj 30 4861 fx.drone_box~; -#X text 200 4861 mono sympathetic resonance generator; -#X obj 30 4888 fx.echo~; -#X text 200 4888 simple echo effect; -#X obj 30 4915 fx.flanger~; -#X text 200 4915 mono flanging effect; -#X obj 30 4942 fx.freeverb2~; -#X text 200 4942 freeverb2 - stereo version of freeverb; -#X obj 30 4969 fx.freeverb~; -#X text 200 4969 freeverb - common used open-source reverb; -#X obj 30 4996 fx.freqshift~; -#X text 200 4996 frequency shifter or single-sideband ring modulation; -#X obj 30 5023 fx.granulator~; -#X text 200 5023 simple input stream granulator; -#X obj 30 5050 fx.greyhole~; -#X text 200 5050 A complex echo-like effect; -#X obj 30 5077 fx.looper~; -#X text 200 5077 One track looper; -#X obj 30 5104 fx.pitchshift~; -#X text 200 5104 simple pitch shifter based on 2 delay lines; -#X obj 30 5131 fx.sdelay~; -#X text 200 5131 smooth delay with a feedback control; -#X obj 30 5158 fx.vocoder~; -#X text 200 5158 very simple vocoder where the spectrum of the modulation +#X obj 30 4593 flt.highshelf~; +#X text 200 4593 gain boost|cut above some frequency; +#X obj 30 4620 flt.hpf12~; +#X text 200 4620 High-pass filter with 12/db per octave slope; +#X obj 30 4647 flt.hpf24~; +#X text 200 4647 High-pass filter with 24/db per octave slope; +#X obj 30 4674 flt.lowshelf~; +#X text 200 4674 gain boost|cut below some frequency; +#X obj 30 4701 flt.lpf12~; +#X text 200 4701 Low-pass filter with 12/db per octave slope; +#X obj 30 4728 flt.lpf24~; +#X text 200 4728 Low-pass filter with 24/db per octave slope; +#X obj 30 4755 flt.median; +#X text 200 4755 Median control flow filter; +#X obj 30 4782 flt.moog_vcf~; +#X text 200 4782 Moog Voltage Controlled Filter; +#X obj 30 4809 flt.notch~; +#X text 200 4809 band-rejection filter; +#X obj 30 4836 flt.resonbp~; +#X text 200 4836 Simple resonant bandpass filter; +#X obj 20 4863 cnv 5 28 31 empty empty fx 4 13 0 17 -262144 -49933 0; +#X obj 20 4904 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 30 4915 fx.bitdown~; +#X text 200 4915 bit downer and downsampler effect; +#X obj 30 4942 fx.chorus~; +#X text 200 4942 Chorus effect; +#X obj 30 4969 fx.distortion1~; +#X text 200 4969 distortion #1 from Guitarix effects set; +#X obj 30 4996 fx.distortion2~; +#X text 200 4996 distortion #2 from Guitarix effects set; +#X obj 30 5023 fx.distortion3~; +#X text 200 5023 simple distortion #3 from Guitarix effects set; +#X obj 30 5050 fx.distortion~; +#X text 200 5050 cubic nonlinearity distortion; +#X obj 30 5077 fx.drive~; +#X text 200 5077 Guitarix drive effect; +#X obj 30 5104 fx.drone_box~; +#X text 200 5104 mono sympathetic resonance generator; +#X obj 30 5131 fx.echo~; +#X text 200 5131 simple echo effect; +#X obj 30 5158 fx.flanger~; +#X text 200 5158 mono flanging effect; +#X obj 30 5185 fx.freeverb2~; +#X text 200 5185 freeverb2 - stereo version of freeverb; +#X obj 30 5212 fx.freeverb~; +#X text 200 5212 freeverb - common used open-source reverb; +#X obj 30 5239 fx.freqshift~; +#X text 200 5239 frequency shifter or single-sideband ring modulation; +#X obj 30 5266 fx.granulator~; +#X text 200 5266 simple input stream granulator; +#X obj 30 5293 fx.greyhole~; +#X text 200 5293 A complex echo-like effect; +#X obj 30 5320 fx.looper~; +#X text 200 5320 One track looper; +#X obj 30 5347 fx.pitchshift~; +#X text 200 5347 simple pitch shifter based on 2 delay lines; +#X obj 30 5374 fx.sdelay~; +#X text 200 5374 smooth delay with a feedback control; +#X obj 30 5401 fx.vocoder~; +#X text 200 5401 very simple vocoder where the spectrum of the modulation signal is analyzed using a 32-band filter bank; -#X obj 30 5198 fx.wahwah~; -#X text 200 5198 digitized CryBaby wah pedal; -#X obj 30 5225 fx.zita_rev1~; -#X text 200 5225 Zita stereo reverb; -#X obj 20 5252 cnv 5 69 31 empty empty global 4 13 0 17 -262144 -49933 +#X obj 30 5441 fx.wahwah~; +#X text 200 5441 digitized CryBaby wah pedal; +#X obj 30 5468 fx.zita_rev1~; +#X text 200 5468 Zita stereo reverb; +#X obj 20 5495 cnv 5 69 31 empty empty global 4 13 0 17 -262144 -49933 0; -#X obj 20 5293 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 30 5304 global.dict; -#X text 200 5304 global named dict object; -#X obj 30 5331 global.float; -#X text 200 5331 global named float object; -#X obj 30 5358 global.int; -#X text 200 5358 global named integer object; -#X obj 30 5385 global.list; -#X text 200 5385 global named list object; -#X obj 30 5412 global.mlist; -#X text 200 5412 global named mlist object; -#X obj 30 5439 global.set; -#X text 200 5439 global named set object; -#X obj 20 5466 cnv 5 28 31 empty empty hw 4 13 0 17 -262144 -49933 0; -#X obj 20 5507 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 30 5518 hw.apple_smc; -#X text 200 5518 query the system management control in Apples; -#X obj 30 5545 hw.apple_sms; -#X text 200 5545 query the sudden motion sensor in Apples; -#X obj 30 5572 hw.arduino; -#X text 200 5572 Arduino device; -#X obj 30 5599 hw.cpu_temp; -#X text 200 5599 get CPU temperature; -#X obj 30 5626 hw.display; -#X text 200 5626 get/set display properties; -#X obj 30 5653 hw.kbd_light; -#X text 200 5653 Get/set keyboard light on some devices; -#X obj 20 5680 cnv 5 37 31 empty empty lfo 4 13 0 17 -262144 -49933 0; -#X obj 20 5721 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 30 5732 lfo.+pulse~; -#X text 200 5732 Unit-amplitude nonnegative low frequency pulse train; -#X obj 30 5759 lfo.+saw~; -#X text 200 5759 Positive unit-amplitude low frequency saw wave; -#X obj 30 5786 lfo.+square~; -#X text 200 5786 Positive low frequency square wave; -#X obj 30 5813 lfo.+tri~; -#X text 200 5813 Positive unit-amplitude low frequency triangle wave; -#X obj 30 5840 lfo.impulse~; -#X text 200 5840 Unit-amplitude low-frequency impulse train; -#X obj 30 5867 lfo.pulse~; -#X text 200 5867 Full-range unit-amplitude low frequency pulse train; -#X obj 30 5894 lfo.saw~; -#X text 200 5894 Full-range unit-amplitude low frequency saw; -#X obj 30 5921 lfo.square~; -#X text 200 5921 Zero-mean unit-amplitude low frequency square wave; -#X obj 30 5948 lfo.tri~; -#X text 200 5948 Zero-mean unit-amplitude low frequency triangle wave; -#X obj 20 5975 cnv 5 47 31 empty empty list 4 13 0 17 -262144 -49933 +#X obj 20 5536 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 30 5547 global.dict; +#X text 200 5547 global named dict object; +#X obj 30 5574 global.float; +#X text 200 5574 global named float object; +#X obj 30 5601 global.int; +#X text 200 5601 global named integer object; +#X obj 30 5628 global.list; +#X text 200 5628 global named list object; +#X obj 30 5655 global.mlist; +#X text 200 5655 global named mlist object; +#X obj 30 5682 global.set; +#X text 200 5682 global named set object; +#X obj 20 5709 cnv 5 28 31 empty empty hw 4 13 0 17 -262144 -49933 0; +#X obj 20 5750 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 30 5761 hw.apple_smc; +#X text 200 5761 query the system management control in Apples; +#X obj 30 5788 hw.apple_sms; +#X text 200 5788 query the sudden motion sensor in Apples; +#X obj 30 5815 hw.arduino; +#X text 200 5815 Arduino device; +#X obj 30 5842 hw.cpu_temp; +#X text 200 5842 get CPU temperature; +#X obj 30 5869 hw.display; +#X text 200 5869 get/set display properties; +#X obj 30 5896 hw.kbd_light; +#X text 200 5896 Get/set keyboard light on some devices; +#X obj 20 5923 cnv 5 37 31 empty empty lfo 4 13 0 17 -262144 -49933 0; +#X obj 20 5964 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 30 5975 lfo.+pulse~; +#X text 200 5975 Unit-amplitude nonnegative low frequency pulse train; +#X obj 30 6002 lfo.+saw~; +#X text 200 6002 Positive unit-amplitude low frequency saw wave; +#X obj 30 6029 lfo.+square~; +#X text 200 6029 Positive low frequency square wave; +#X obj 30 6056 lfo.+tri~; +#X text 200 6056 Positive unit-amplitude low frequency triangle wave; +#X obj 30 6083 lfo.impulse~; +#X text 200 6083 Unit-amplitude low-frequency impulse train; +#X obj 30 6110 lfo.pulse~; +#X text 200 6110 Full-range unit-amplitude low frequency pulse train; +#X obj 30 6137 lfo.saw~; +#X text 200 6137 Full-range unit-amplitude low frequency saw; +#X obj 30 6164 lfo.square~; +#X text 200 6164 Zero-mean unit-amplitude low frequency square wave; +#X obj 30 6191 lfo.tri~; +#X text 200 6191 Zero-mean unit-amplitude low frequency triangle wave; +#X obj 20 6218 cnv 5 47 31 empty empty list 4 13 0 17 -262144 -49933 0; -#X obj 20 6016 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 30 6027 list.^at; -#X text 200 6027 on input index(es) outputs list element(s); -#X obj 30 6054 list.^contains; -#X text 200 6054 on input atom or list checks if specified list contains +#X obj 20 6259 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 30 6270 list.^at; +#X text 200 6270 on input index(es) outputs list element(s); +#X obj 30 6297 list.^contains; +#X text 200 6297 on input atom or list checks if specified list contains it; -#X obj 30 6081 list.^search; -#X text 200 6081 on input atom returns it index in list; -#X obj 30 6108 list.all_of; -#X text 200 6108 checks if all list atoms accepted by predicate; -#X obj 30 6135 list.any_of; -#X text 200 6135 checks if at least one list element is accepted by +#X obj 30 6324 list.^search; +#X text 200 6324 on input atom returns it index in list; +#X obj 30 6351 list.all_of; +#X text 200 6351 checks if all list atoms accepted by predicate; +#X obj 30 6378 list.any_of; +#X text 200 6378 checks if at least one list element is accepted by predicate; -#X obj 30 6162 list.append; -#X text 200 6162 append atom or list to the end of input list; -#X obj 30 6189 list.apply_to; -#X text 200 6189 modifies list value at specified position \, filtering +#X obj 30 6405 list.append; +#X text 200 6405 append atom or list to the end of input list; +#X obj 30 6432 list.apply_to; +#X text 200 6432 modifies list value at specified position \, filtering it via external object.; -#X obj 30 6229 list.at; -#X text 200 6229 on input list outputs element(s) at specified index(es); -#X obj 30 6256 list.choice; -#X text 200 6256 returns random element from list; -#X obj 30 6283 list.contains; -#X text 200 6283 on input list checks if it contains specified subsequence; -#X obj 30 6310 list.count; -#X text 200 6310 returns the number of items that equal to specified +#X obj 30 6472 list.at; +#X text 200 6472 on input list outputs element(s) at specified index(es); +#X obj 30 6499 list.choice; +#X text 200 6499 returns random element from list; +#X obj 30 6526 list.contains; +#X text 200 6526 on input list checks if it contains specified subsequence; +#X obj 30 6553 list.count; +#X text 200 6553 returns the number of items that equal to specified value; -#X obj 30 6337 list.count_if; -#X text 200 6337 returns the number of items that satisfy to external +#X obj 30 6580 list.count_if; +#X text 200 6580 returns the number of items that satisfy to external predicate.; -#X obj 30 6377 list.delta; -#X text 200 6377 returns the difference between the current list of +#X obj 30 6620 list.delta; +#X text 200 6620 returns the difference between the current list of floats and the previous one.; -#X obj 30 6417 list.distribution; -#X text 200 6417 list value distribution; -#X obj 30 6444 list.do; -#X text 200 6444 iterate and modify list contents via side-chain; -#X obj 30 6471 list.each; -#X text 200 6471 maps each list value via external object(s); -#X obj 30 6498 list.enumerate; -#X text 200 6498 enumerates input list; -#X obj 30 6525 list.equal; -#X text 200 6525 checks if given lists are equal; -#X obj 30 6552 list.first; -#X text 200 6552 returns first list element; -#X obj 30 6579 list.gen; -#X text 200 6579 generates list of specified length via external generator; -#X obj 30 6606 list.histogram; -#X text 200 6606 outputs distribution histogram; -#X obj 30 6633 list.insert; -#X text 200 6633 insert atom or list to the specified position of input +#X obj 30 6660 list.distribution; +#X text 200 6660 list value distribution; +#X obj 30 6687 list.do; +#X text 200 6687 iterate and modify list contents via side-chain; +#X obj 30 6714 list.each; +#X text 200 6714 maps each list value via external object(s); +#X obj 30 6741 list.enumerate; +#X text 200 6741 enumerates input list; +#X obj 30 6768 list.equal; +#X text 200 6768 checks if given lists are equal; +#X obj 30 6795 list.first; +#X text 200 6795 returns first list element; +#X obj 30 6822 list.gen; +#X text 200 6822 generates list of specified length via external generator; +#X obj 30 6849 list.histogram; +#X text 200 6849 outputs distribution histogram; +#X obj 30 6876 list.insert; +#X text 200 6876 insert atom or list to the specified position of input list; -#X obj 30 6660 list.integrator; -#X text 200 6660 returns the sum of the previously stored list and +#X obj 30 6903 list.integrator; +#X text 200 6903 returns the sum of the previously stored list and the current one then stores this sum; -#X obj 30 6700 list.last; -#X text 200 6700 returns last list element; -#X obj 30 6727 list.length; -#X text 200 6727 returns the number of atoms in the list; -#X obj 30 6754 list.max; -#X text 200 6754 returns largest element in the list; -#X obj 30 6781 list.mean; -#X text 200 6781 calculates average of list of floats; -#X obj 30 6808 list.min; -#X text 200 6808 returns smallest element in the list; -#X obj 30 6835 list.none_of; -#X text 200 6835 checks if none of list atoms is accepted by predicate; -#X obj 30 6862 list.normalize; -#X text 200 6862 normalizes float list values to get their sum = 1.0; -#X obj 30 6889 list.pass_if; -#X text 200 6889 leave only elements accepted by predicate; -#X obj 30 6916 list.prepend; -#X text 200 6916 prepend atom or list before input list; -#X obj 30 6943 list.product; -#X text 200 6943 calculates product of floats in list; -#X obj 30 6970 list.range; -#X text 200 6970 returns list smallest and largest value; -#X obj 30 6997 list.reduce; -#X text 200 6997 apply function of two arguments cumulatively to the +#X obj 30 6943 list.last; +#X text 200 6943 returns last list element; +#X obj 30 6970 list.length; +#X text 200 6970 returns the number of atoms in the list; +#X obj 30 6997 list.max; +#X text 200 6997 returns largest element in the list; +#X obj 30 7024 list.mean; +#X text 200 7024 calculates average of list of floats; +#X obj 30 7051 list.min; +#X text 200 7051 returns smallest element in the list; +#X obj 30 7078 list.none_of; +#X text 200 7078 checks if none of list atoms is accepted by predicate; +#X obj 30 7105 list.normalize; +#X text 200 7105 normalizes float list values to get their sum = 1.0; +#X obj 30 7132 list.pass_if; +#X text 200 7132 leave only elements accepted by predicate; +#X obj 30 7159 list.prepend; +#X text 200 7159 prepend atom or list before input list; +#X obj 30 7186 list.product; +#X text 200 7186 calculates product of floats in list; +#X obj 30 7213 list.range; +#X text 200 7213 returns list smallest and largest value; +#X obj 30 7240 list.reduce; +#X text 200 7240 apply function of two arguments cumulatively to the list; -#X obj 30 7024 list.remove; -#X text 200 7024 on input list remove element(s) at specified positions; -#X obj 30 7051 list.remove_if; -#X text 200 7051 remove elements by predicate; -#X obj 30 7078 list.repack; -#X text 200 7078 repack input list to specified size; -#X obj 30 7105 list.repeat; -#X text 200 7105 creates new list by repeating given list specified +#X obj 30 7267 list.remove; +#X text 200 7267 on input list remove element(s) at specified positions; +#X obj 30 7294 list.remove_if; +#X text 200 7294 remove elements by predicate; +#X obj 30 7321 list.repack; +#X text 200 7321 repack input list to specified size; +#X obj 30 7348 list.repeat; +#X text 200 7348 creates new list by repeating given list specified times; -#X obj 30 7132 list.resize; -#X text 200 7132 changes list size; -#X obj 30 7159 list.reverse; -#X text 200 7159 reverses the order of the elements in the list; -#X obj 30 7186 list.rldecode; -#X text 200 7186 Run-length list decoder (RLE); -#X obj 30 7213 list.rlencode; -#X text 200 7213 RLE (run-length encoding) for lists; -#X obj 30 7240 list.rotate; -#X text 200 7240 rotates list; -#X obj 30 7267 list.route; -#X text 200 7267 acts like [route] but for lists; -#X obj 30 7294 list.search; -#X text 200 7294 search specified items in input list; -#X obj 30 7321 list.separate; -#X text 200 7321 sends list elements one by one separately; -#X obj 30 7348 list.seq; -#X text 200 7348 numeric sequence list generator; -#X obj 30 7375 list.set; -#X text 200 7375 on input list set value at specified position; -#X obj 30 7402 list.shift; -#X text 200 7402 shifts the contents of the list with linear interpolation; -#X obj 30 7429 list.shuffle; -#X text 200 7429 randomly rearranges elements in list; -#X obj 30 7456 list.slice; -#X text 200 7456 extract sublist; -#X obj 30 7483 list.sort; -#X text 200 7483 sorts list values by ascending order; -#X obj 30 7510 list.sort_with; -#X text 200 7510 sort list with user defined side-chain; -#X obj 30 7537 list.split; -#X text 200 7537 splits list into two parts \, the length of first +#X obj 30 7375 list.resize; +#X text 200 7375 changes list size; +#X obj 30 7402 list.reverse; +#X text 200 7402 reverses the order of the elements in the list; +#X obj 30 7429 list.rldecode; +#X text 200 7429 Run-length list decoder (RLE); +#X obj 30 7456 list.rlencode; +#X text 200 7456 RLE (run-length encoding) for lists; +#X obj 30 7483 list.rotate; +#X text 200 7483 rotates list; +#X obj 30 7510 list.route; +#X text 200 7510 acts like [route] but for lists; +#X obj 30 7537 list.search; +#X text 200 7537 search specified items in input list; +#X obj 30 7564 list.separate; +#X text 200 7564 sends list elements one by one separately; +#X obj 30 7591 list.seq; +#X text 200 7591 numeric sequence list generator; +#X obj 30 7618 list.set; +#X text 200 7618 on input list set value at specified position; +#X obj 30 7645 list.shift; +#X text 200 7645 shifts the contents of the list with linear interpolation; +#X obj 30 7672 list.shuffle; +#X text 200 7672 randomly rearranges elements in list; +#X obj 30 7699 list.slice; +#X text 200 7699 extract sublist; +#X obj 30 7726 list.sort; +#X text 200 7726 sorts list values by ascending order; +#X obj 30 7753 list.sort_with; +#X text 200 7753 sort list with user defined side-chain; +#X obj 30 7780 list.split; +#X text 200 7780 splits list into two parts \, the length of first list is specified by the argument.; -#X obj 30 7577 list.stretch; -#X text 200 7577 stretches list - chenges its size with linear interpolation.; -#X obj 30 7604 list.sum; -#X text 200 7604 calculates sum of floats in list; -#X obj 30 7631 list.unique; -#X text 200 7631 removes duplicates from input list; -#X obj 30 7658 list.unpack; -#X text 200 7658 unpack list elements to separate outlets; -#X obj 30 7685 list.unzip; -#X text 200 7685 splits list to N lists \, each to separate output; -#X obj 30 7712 list.walk; -#X text 200 7712 Walks thru the list; -#X obj 30 7739 list.zip; -#X text 200 7739 takes n lists from n inlets (specified by argument) +#X obj 30 7820 list.stretch; +#X text 200 7820 stretches list - chenges its size with linear interpolation.; +#X obj 30 7847 list.sum; +#X text 200 7847 calculates sum of floats in list; +#X obj 30 7874 list.unique; +#X text 200 7874 removes duplicates from input list; +#X obj 30 7901 list.unpack; +#X text 200 7901 unpack list elements to separate outlets; +#X obj 30 7928 list.unzip; +#X text 200 7928 splits list to N lists \, each to separate output; +#X obj 30 7955 list.walk; +#X text 200 7955 Walks thru the list; +#X obj 30 7982 list.zip; +#X text 200 7982 takes n lists from n inlets (specified by argument) and output their elements sequentially (list1-1 list2-1 list1-2 list2-2 etc.).; -#X obj 20 7794 cnv 5 48 31 empty empty live 4 13 0 17 -262144 -49933 +#X obj 20 8037 cnv 5 48 31 empty empty live 4 13 0 17 -262144 -49933 0; -#X obj 20 7835 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 30 7846 live.capture~; -#X text 200 7846 record up to 32s of sound and playback the recorded +#X obj 20 8078 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 30 8089 live.capture~; +#X text 200 8089 record up to 32s of sound and playback the recorded sound in loop; -#X obj 20 7886 cnv 5 58 31 empty empty local 4 13 0 17 -262144 -49933 +#X obj 20 8129 cnv 5 58 31 empty empty local 4 13 0 17 -262144 -49933 0; -#X obj 20 7927 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 30 7938 local.dict; -#X text 200 7938 local named dict object; -#X obj 30 7965 local.float; -#X text 200 7965 canvas-scoped named float variable; -#X obj 30 7992 local.int; -#X text 200 7992 canvas-scoped named integer variable; -#X obj 30 8019 local.list; -#X text 200 8019 local named list object; -#X obj 30 8046 local.mlist; -#X text 200 8046 local named mlist object; -#X obj 30 8073 local.set; -#X text 200 8073 local named set object; -#X obj 20 8100 cnv 5 48 31 empty empty math 4 13 0 17 -262144 -49933 +#X obj 20 8170 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 30 8181 local.dict; +#X text 200 8181 local named dict object; +#X obj 30 8208 local.float; +#X text 200 8208 canvas-scoped named float variable; +#X obj 30 8235 local.int; +#X text 200 8235 canvas-scoped named integer variable; +#X obj 30 8262 local.list; +#X text 200 8262 local named list object; +#X obj 30 8289 local.mlist; +#X text 200 8289 local named mlist object; +#X obj 30 8316 local.set; +#X text 200 8316 local named set object; +#X obj 20 8343 cnv 5 48 31 empty empty math 4 13 0 17 -262144 -49933 0; -#X obj 20 8141 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 30 8152 math.abs; -#X text 200 8152 absolute value function; -#X obj 30 8179 math.acos; -#X text 200 8179 arc cosine function; -#X obj 30 8206 math.acosh; -#X text 200 8206 inverse hyperbolic cosine function; -#X obj 30 8233 math.and; -#X text 200 8233 operation AND for multiple arguments; -#X obj 30 8260 math.approx; -#X text 200 8260 check if input value approximately equal to pattern; -#X obj 30 8287 math.asin; -#X text 200 8287 arc sine function; -#X obj 30 8314 math.asinh; -#X text 200 8314 inverse hyperbolic sine function; -#X obj 30 8341 math.atan; -#X text 200 8341 arc tangent function; -#X obj 30 8368 math.atanh; -#X text 200 8368 inverse hyperbolic tangent function; -#X obj 30 8395 math.cbrt; -#X text 200 8395 cube root function; -#X obj 30 8422 math.cdiv~; -#X text 200 8422 division of complex signals; -#X obj 30 8449 math.ceil; -#X text 200 8449 round to smallest integral value not less than input +#X obj 20 8384 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 30 8395 math.abs; +#X text 200 8395 absolute value function; +#X obj 30 8422 math.acos; +#X text 200 8422 arc cosine function; +#X obj 30 8449 math.acosh; +#X text 200 8449 inverse hyperbolic cosine function; +#X obj 30 8476 math.and; +#X text 200 8476 operation AND for multiple arguments; +#X obj 30 8503 math.approx; +#X text 200 8503 check if input value approximately equal to pattern; +#X obj 30 8530 math.asin; +#X text 200 8530 arc sine function; +#X obj 30 8557 math.asinh; +#X text 200 8557 inverse hyperbolic sine function; +#X obj 30 8584 math.atan; +#X text 200 8584 arc tangent function; +#X obj 30 8611 math.atanh; +#X text 200 8611 inverse hyperbolic tangent function; +#X obj 30 8638 math.cbrt; +#X text 200 8638 cube root function; +#X obj 30 8665 math.cdiv~; +#X text 200 8665 division of complex signals; +#X obj 30 8692 math.ceil; +#X text 200 8692 round to smallest integral value not less than input value; -#X obj 30 8476 math.cmul~; -#X text 200 8476 multiplication of complex signals; -#X obj 30 8503 math.cos; -#X text 200 8503 cosine function; -#X obj 30 8530 math.cosh; -#X text 200 8530 hyperbolic cosine function; -#X obj 30 8557 math.div; -#X text 200 8557 division (on lists too); -#X obj 30 8584 math.e; -#X text 200 8584 mathematical constant \, base of the natural logarithm; -#X obj 30 8611 math.exp; -#X text 200 8611 exponential functions; -#X obj 30 8638 math.exp2; -#X text 200 8638 exponential functions; -#X obj 30 8665 math.expr; -#X text 200 8665 dynamic [expr]; -#X obj 30 8692 math.floor; -#X text 200 8692 round to largest integral value not greater than x; -#X obj 30 8719 math.gcd; -#X text 200 8719 calculate greatest common divisor; -#X obj 30 8746 math.inf; -#X text 200 8746 infinity value that cannot be represented accurately; -#X obj 30 8773 math.lcm; -#X text 200 8773 calculate least common multiple; -#X obj 30 8800 math.log; -#X text 200 8800 logarithm functions; -#X obj 30 8827 math.log10; -#X text 200 8827 logarithm functions; -#X obj 30 8854 math.log2; -#X text 200 8854 logarithm functions; -#X obj 30 8881 math.mul; -#X text 200 8881 multiplication (on lists too); -#X obj 30 8908 math.nan; -#X text 200 8908 Not a Number \, unrepresentable value; -#X obj 30 8935 math.neg; -#X text 200 8935 negate function; -#X obj 30 8962 math.or; -#X text 200 8962 operation OR for multiple arguments; -#X obj 30 8989 math.pi; -#X text 200 8989 mathematical constant; -#X obj 30 9016 math.polyeval; -#X text 200 9016 evaluates the polynomial described by the coefficients +#X obj 30 8719 math.cmul~; +#X text 200 8719 multiplication of complex signals; +#X obj 30 8746 math.cos; +#X text 200 8746 cosine function; +#X obj 30 8773 math.cosh; +#X text 200 8773 hyperbolic cosine function; +#X obj 30 8800 math.div; +#X text 200 8800 division (on lists too); +#X obj 30 8827 math.e; +#X text 200 8827 mathematical constant \, base of the natural logarithm; +#X obj 30 8854 math.exp; +#X text 200 8854 exponential functions; +#X obj 30 8881 math.exp2; +#X text 200 8881 exponential functions; +#X obj 30 8908 math.expr; +#X text 200 8908 dynamic [expr]; +#X obj 30 8935 math.floor; +#X text 200 8935 round to largest integral value not greater than x; +#X obj 30 8962 math.gcd; +#X text 200 8962 calculate greatest common divisor; +#X obj 30 8989 math.inf; +#X text 200 8989 infinity value that cannot be represented accurately; +#X obj 30 9016 math.lcm; +#X text 200 9016 calculate least common multiple; +#X obj 30 9043 math.log; +#X text 200 9043 logarithm functions; +#X obj 30 9070 math.log10; +#X text 200 9070 logarithm functions; +#X obj 30 9097 math.log2; +#X text 200 9097 logarithm functions; +#X obj 30 9124 math.mul; +#X text 200 9124 multiplication (on lists too); +#X obj 30 9151 math.nan; +#X text 200 9151 Not a Number \, unrepresentable value; +#X obj 30 9178 math.neg; +#X text 200 9178 negate function; +#X obj 30 9205 math.or; +#X text 200 9205 operation OR for multiple arguments; +#X obj 30 9232 math.pi; +#X text 200 9232 mathematical constant; +#X obj 30 9259 math.polyeval; +#X text 200 9259 evaluates the polynomial described by the coefficients list; -#X obj 30 9043 math.reciprocal; -#X text 200 9043 calculate reciprocal number; -#X obj 30 9070 math.round; -#X text 200 9070 round to integral value \, regardless of rounding +#X obj 30 9286 math.reciprocal; +#X text 200 9286 calculate reciprocal number; +#X obj 30 9313 math.round; +#X text 200 9313 round to integral value \, regardless of rounding direction; -#X obj 30 9097 math.round~; -#X text 200 9097 signal round; -#X obj 30 9124 math.sign; -#X text 200 9124 sign function; -#X obj 30 9151 math.sin; -#X text 200 9151 sine function; -#X obj 30 9178 math.sinh; -#X text 200 9178 hyperbolic sine function; -#X obj 30 9205 math.sqrt; -#X text 200 9205 square root function; -#X obj 30 9232 math.squared; -#X text 200 9232 value square; -#X obj 30 9259 math.tan; -#X text 200 9259 tangent function; -#X obj 30 9286 math.tanh; -#X text 200 9286 hyperbolic tangent function; -#X obj 30 9313 math.trunc; -#X text 200 9313 truncate to integer value; -#X obj 20 9340 cnv 5 49 31 empty empty midi 4 13 0 17 -262144 -49933 +#X obj 30 9340 math.round~; +#X text 200 9340 signal round; +#X obj 30 9367 math.sign; +#X text 200 9367 sign function; +#X obj 30 9394 math.sin; +#X text 200 9394 sine function; +#X obj 30 9421 math.sinh; +#X text 200 9421 hyperbolic sine function; +#X obj 30 9448 math.sqrt; +#X text 200 9448 square root function; +#X obj 30 9475 math.squared; +#X text 200 9475 value square; +#X obj 30 9502 math.sync_add; +#X text 200 9502 sync addition; +#X obj 30 9529 math.sync_and; +#X text 200 9529 sync logical AND operation; +#X obj 30 9556 math.sync_div; +#X text 200 9556 sync division; +#X obj 30 9583 math.sync_eq; +#X text 200 9583 sync equal numbers check; +#X obj 30 9610 math.sync_ge; +#X text 200 9610 sync greater equal numbers compare; +#X obj 30 9637 math.sync_gt; +#X text 200 9637 sync greater then numbers compare; +#X obj 30 9664 math.sync_le; +#X text 200 9664 sync less equal numbers compare; +#X obj 30 9691 math.sync_lt; +#X text 200 9691 sync less then numbers compare; +#X obj 30 9718 math.sync_mod; +#X text 200 9718 sync remainder of modulo division (float or integer); +#X obj 30 9745 math.sync_mul; +#X text 200 9745 sync multiplication; +#X obj 30 9772 math.sync_ne; +#X text 200 9772 sync numbers for not equality; +#X obj 30 9799 math.sync_or; +#X text 200 9799 sync logical OR operation; +#X obj 30 9826 math.sync_sub; +#X text 200 9826 sync subtraction; +#X obj 30 9853 math.sync_xor; +#X text 200 9853 sync logical XOR operation; +#X obj 30 9880 math.tan; +#X text 200 9880 tangent function; +#X obj 30 9907 math.tanh; +#X text 200 9907 hyperbolic tangent function; +#X obj 30 9934 math.trunc; +#X text 200 9934 truncate to integer value; +#X obj 20 9961 cnv 5 49 31 empty empty midi 4 13 0 17 -262144 -49933 0; -#X obj 20 9381 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 30 9392 midi.ctl2str; -#X text 200 9392 convert Standard MIDI Controllers number to name; -#X obj 30 9419 midi.event2ctl; -#X text 200 9419 convert MidiEvent message to controller channel/value +#X obj 20 10002 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 30 10013 midi.ctl2str; +#X text 200 10013 convert Standard MIDI Controllers number to name; +#X obj 30 10040 midi.event2ctl; +#X text 200 10040 convert MidiEvent message to controller channel/value pair; -#X obj 30 9446 midi.event2note; -#X text 200 9446 convert MidiEvent message to midi note/velocity pair; -#X obj 30 9473 midi.event2prg; -#X text 200 9473 convert MidiEvent message to midi program change value; -#X obj 30 9500 midi.file; -#X text 200 9500 standard midi file SMF reader and writer; -#X obj 30 9527 midi.key2str; -#X text 200 9527 convert key number to SPN name according to tonality; -#X obj 30 9554 midi.prg2str; -#X text 200 9554 convert GM Instrument number to name (string or symbol); -#X obj 30 9581 midi.track; -#X text 200 9581 extract track from MidiFile; -#X obj 20 9608 cnv 5 48 31 empty empty misc 4 13 0 17 -262144 -49933 +#X obj 30 10067 midi.event2note; +#X text 200 10067 convert MidiEvent message to midi note/velocity pair; +#X obj 30 10094 midi.event2prg; +#X text 200 10094 convert MidiEvent message to midi program change +value; +#X obj 30 10121 midi.file; +#X text 200 10121 standard midi file SMF reader and writer; +#X obj 30 10148 midi.key2str; +#X text 200 10148 convert key number to SPN name according to tonality; +#X obj 30 10175 midi.prg2str; +#X text 200 10175 convert GM Instrument number to name (string or symbol); +#X obj 30 10202 midi.track; +#X text 200 10202 extract track from MidiFile; +#X obj 20 10229 cnv 5 48 31 empty empty misc 4 13 0 17 -262144 -49933 +0; +#X obj 20 10270 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 30 10281 click~; +#X text 200 10281 Output single impulse on bang; +#X obj 30 10308 fluid~; +#X text 200 10308 FluidSynth SoundFont 2 player; +#X obj 30 10335 modplug~; +#X text 200 10335 MOD file player (using libmodplug); +#X obj 30 10362 speech.flite; +#X text 200 10362 render speech to array; +#X obj 20 10389 cnv 5 38 31 empty empty msg 4 13 0 17 -262144 -49933 +0; +#X obj 20 10430 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 30 10441 msg; +#X text 200 10441 message constructor; +#X obj 30 10468 msg.after; +#X text 200 10468 send specified message after incoming message; +#X obj 30 10495 msg.onload; +#X text 200 10495 send message when patch loads; +#X obj 20 10522 cnv 5 37 31 empty empty net 4 13 0 17 -262144 -49933 0; -#X obj 20 9649 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 30 9660 click~; -#X text 200 9660 Output single impulse on bang; -#X obj 30 9687 fluid~; -#X text 200 9687 FluidSynth SoundFont 2 player; -#X obj 30 9714 modplug~; -#X text 200 9714 MOD file player (using libmodplug); -#X obj 30 9741 speech.flite; -#X text 200 9741 render speech to array; -#X obj 20 9768 cnv 5 38 31 empty empty msg 4 13 0 17 -262144 -49933 0; -#X obj 20 9809 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 30 9820 msg; -#X text 200 9820 message constructor; -#X obj 30 9847 msg.after; -#X text 200 9847 send specified message after incoming message; -#X obj 30 9874 msg.onload; -#X text 200 9874 send message when patch loads; -#X obj 20 9901 cnv 5 37 31 empty empty net 4 13 0 17 -262144 -49933 0; -#X obj 20 9942 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 30 9953 net.host2ip; -#X text 200 9953 returns IP address by DNS name; -#X obj 20 9980 cnv 5 58 31 empty empty noise 4 13 0 17 -262144 -49933 +#X obj 20 10563 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 30 10574 net.host2ip; +#X text 200 10574 returns IP address by DNS name; +#X obj 20 10601 cnv 5 58 31 empty empty noise 4 13 0 17 -262144 -49933 0; -#X obj 20 10021 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 30 10032 noise.crackle~; -#X text 200 10032 sparse noise generator; -#X obj 30 10059 noise.lfreq0~; -#X text 200 10059 sampled/held noise (piecewise constant); -#X obj 30 10086 noise.lfreq~; -#X text 200 10086 noise.lfreq0~ smoothed with no overshoot; -#X obj 30 10113 noise.pink~; -#X text 200 10113 Pink noise generator; -#X obj 30 10140 noise.white~; -#X text 200 10140 White noise generator; -#X obj 20 10167 cnv 5 38 31 empty empty osc 4 13 0 17 -262144 -49933 +#X obj 20 10642 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 30 10653 noise.crackle~; +#X text 200 10653 sparse noise generator; +#X obj 30 10680 noise.lfreq0~; +#X text 200 10680 sampled/held noise (piecewise constant); +#X obj 30 10707 noise.lfreq~; +#X text 200 10707 noise.lfreq0~ smoothed with no overshoot; +#X obj 30 10734 noise.pink~; +#X text 200 10734 Pink noise generator; +#X obj 30 10761 noise.white~; +#X text 200 10761 White noise generator; +#X obj 20 10788 cnv 5 38 31 empty empty osc 4 13 0 17 -262144 -49933 0; -#X obj 20 10208 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 30 10219 osc.blit~; -#X text 200 10219 Bandlimited impulse train oscillator; -#X obj 30 10246 osc.impulse~; -#X text 200 10246 Bandlimited impulse train generator; -#X obj 30 10273 osc.pulse~; -#X text 200 10273 Bandlimited pulse train oscillator; -#X obj 30 10300 osc.saw4~; -#X text 200 10300 Bandlimited sawtooth wave; -#X obj 30 10327 osc.saw~; -#X text 200 10327 Alias-free sawtooth wave; -#X obj 30 10354 osc.sinfb~; -#X text 200 10354 Sine oscilator with feedback; -#X obj 30 10381 osc.sin~; -#X text 200 10381 Sine wave oscillator; -#X obj 30 10408 osc.square~; -#X text 200 10408 Bandlimited square wave oscillator; -#X obj 30 10435 osc.tri~; -#X text 200 10435 Bandlimited triangle wave oscillator; -#X obj 20 10462 cnv 5 58 31 empty empty patch 4 13 0 17 -262144 -49933 +#X obj 20 10829 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 30 10840 osc.blit~; +#X text 200 10840 Bandlimited impulse train oscillator; +#X obj 30 10867 osc.impulse~; +#X text 200 10867 Bandlimited impulse train generator; +#X obj 30 10894 osc.pulse~; +#X text 200 10894 Bandlimited pulse train oscillator; +#X obj 30 10921 osc.saw4~; +#X text 200 10921 Bandlimited sawtooth wave; +#X obj 30 10948 osc.saw~; +#X text 200 10948 Alias-free sawtooth wave; +#X obj 30 10975 osc.sinfb~; +#X text 200 10975 Sine oscilator with feedback; +#X obj 30 11002 osc.sin~; +#X text 200 11002 Sine wave oscillator; +#X obj 30 11029 osc.square~; +#X text 200 11029 Bandlimited square wave oscillator; +#X obj 30 11056 osc.tri~; +#X text 200 11056 Bandlimited triangle wave oscillator; +#X obj 20 11083 cnv 5 58 31 empty empty patch 4 13 0 17 -262144 -49933 0; -#X obj 20 10503 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 30 10514 canvas.current; -#X text 200 10514 verbose information about current canvas; -#X obj 30 10541 canvas.top; -#X text 200 10541 verbose information about top-level canvas; -#X obj 30 10568 patch.args; -#X text 200 10568 Get patch or subpatch arguments; -#X obj 20 10595 cnv 5 47 31 empty empty path 4 13 0 17 -262144 -49933 +#X obj 20 11124 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 30 11135 canvas.current; +#X text 200 11135 verbose information about current canvas; +#X obj 30 11162 canvas.dir; +#X text 200 11162 current canvas directory; +#X obj 30 11189 canvas.name; +#X text 200 11189 current canvas name; +#X obj 30 11216 canvas.path; +#X text 200 11216 current canvas fullpath; +#X obj 30 11243 canvas.top; +#X text 200 11243 verbose information about top-level canvas; +#X obj 30 11270 patch.args; +#X text 200 11270 Get patch or subpatch arguments; +#X obj 20 11297 cnv 5 47 31 empty empty path 4 13 0 17 -262144 -49933 0; -#X obj 20 10636 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 30 10647 path.basename; -#X text 200 10647 outputs filename portion of pathname; -#X obj 30 10674 path.dirname; -#X text 200 10674 outputs directory portion of pathname; -#X obj 30 10701 path.exists; -#X text 200 10701 checks if given path exists; -#X obj 30 10728 path.lsdir; -#X text 200 10728 list directory contents; -#X obj 20 10755 cnv 5 109 31 empty empty predicates 4 13 0 17 -262144 +#X obj 20 11338 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 30 11349 path.basename; +#X text 200 11349 outputs filename portion of pathname; +#X obj 30 11376 path.dirname; +#X text 200 11376 outputs directory portion of pathname; +#X obj 30 11403 path.exists; +#X text 200 11403 checks if given path exists; +#X obj 30 11430 path.lsdir; +#X text 200 11430 list directory contents; +#X obj 20 11457 cnv 5 109 31 empty empty predicates 4 13 0 17 -262144 -49933 0; -#X obj 20 10796 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 30 10807 is_any; -#X text 200 10807 checks if input data has *any* type; -#X obj 30 10834 is_bang; -#X text 200 10834 checks if input data has *bang* type; -#X obj 30 10861 is_data; -#X text 200 10861 checks if input data has *data* type; -#X obj 30 10888 is_dict; -#X text 200 10888 checks if input data has *dict* type; -#X obj 30 10915 is_even; -#X text 200 10915 checks if input number is even; -#X obj 30 10942 is_file; -#X text 200 10942 checks if file exists and accessible; -#X obj 30 10969 is_float; -#X text 200 10969 checks if input data has *float* type; -#X obj 30 10996 is_list; -#X text 200 10996 checks if input data has *list* type; -#X obj 30 11023 is_odd; -#X text 200 11023 checks if input number is odd; -#X obj 30 11050 is_pointer; -#X text 200 11050 checks if input data has *pointer* type; -#X obj 30 11077 is_symbol; -#X text 200 11077 checks if input data has *symbol* type; -#X obj 20 11104 cnv 5 68 31 empty empty preset 4 13 0 17 -262144 +#X obj 20 11498 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 30 11509 is_any; +#X text 200 11509 checks if input data has *any* type; +#X obj 30 11536 is_bang; +#X text 200 11536 checks if input data has *bang* type; +#X obj 30 11563 is_data; +#X text 200 11563 checks if input data has *data* type; +#X obj 30 11590 is_dict; +#X text 200 11590 checks if input data has *dict* type; +#X obj 30 11617 is_even; +#X text 200 11617 checks if input number is even; +#X obj 30 11644 is_file; +#X text 200 11644 checks if file exists and accessible; +#X obj 30 11671 is_float; +#X text 200 11671 checks if input data has *float* type; +#X obj 30 11698 is_list; +#X text 200 11698 checks if input data has *list* type; +#X obj 30 11725 is_odd; +#X text 200 11725 checks if input number is odd; +#X obj 30 11752 is_pointer; +#X text 200 11752 checks if input data has *pointer* type; +#X obj 30 11779 is_symbol; +#X text 200 11779 checks if input data has *symbol* type; +#X obj 20 11806 cnv 5 68 31 empty empty preset 4 13 0 17 -262144 -49933 0; -#X obj 20 11145 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 30 11156 preset.float; -#X text 200 11156 load/store float preset; -#X obj 30 11183 preset.list; -#X text 200 11183 load/store symbol preset; -#X obj 30 11210 preset.storage; -#X text 200 11210 preset storage control; -#X obj 30 11237 preset.symbol; -#X text 200 11237 load/store symbol preset; -#X obj 20 11264 cnv 5 89 31 empty empty property 4 13 0 17 -262144 +#X obj 20 11847 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 30 11858 preset.float; +#X text 200 11858 load/store float preset; +#X obj 30 11885 preset.list; +#X text 200 11885 load/store symbol preset; +#X obj 30 11912 preset.storage; +#X text 200 11912 preset storage control; +#X obj 30 11939 preset.symbol; +#X text 200 11939 load/store symbol preset; +#X obj 20 11966 cnv 5 89 31 empty empty property 4 13 0 17 -262144 -49933 0; -#X obj 20 11305 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 30 11316 patch.props; -#X text 200 11316 patch properties manager; -#X obj 30 11343 prop; -#X text 200 11343 get/set named property value for subpatch or abstraction; -#X obj 30 11370 prop.declare; -#X text 200 11370 declare named property for subpatch or abstraction; -#X obj 30 11397 prop.get; -#X text 200 11397 Property extractor; -#X obj 30 11424 prop.get~; -#X text 200 11424 Property extractor from sound stream; -#X obj 30 11451 prop.set; -#X text 200 11451 Property injector; -#X obj 20 11478 cnv 5 58 31 empty empty proto 4 13 0 17 -262144 -49933 +#X obj 20 12007 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 30 12018 patch.props; +#X text 200 12018 patch properties manager; +#X obj 30 12045 prop; +#X text 200 12045 get/set named property value for subpatch or abstraction; +#X obj 30 12072 prop.declare; +#X text 200 12072 declare named property for subpatch or abstraction; +#X obj 30 12099 prop.get; +#X text 200 12099 Property extractor; +#X obj 30 12126 prop.get~; +#X text 200 12126 Property extractor from sound stream; +#X obj 30 12153 prop.set; +#X text 200 12153 Property injector; +#X obj 20 12180 cnv 5 58 31 empty empty proto 4 13 0 17 -262144 -49933 0; -#X obj 20 11519 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 30 11530 proto.firmata; -#X text 200 11530 Firmata Arduino protocol support; -#X obj 20 11557 cnv 5 67 31 empty empty random 4 13 0 17 -262144 +#X obj 20 12221 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 30 12232 proto.firmata; +#X text 200 12232 Firmata Arduino protocol support; +#X obj 30 12259 proto.sp.alpaca; +#X text 200 12259 protocol parser for Arduino-based CEAMMC footswitch; +#X obj 20 12286 cnv 5 67 31 empty empty random 4 13 0 17 -262144 -49933 0; -#X obj 20 11598 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 30 11609 random.discrete; -#X text 200 11609 random weighted integers on interval [0 \, n); -#X obj 30 11636 random.float; -#X text 200 11636 random float generator in specified range; -#X obj 30 11663 random.gauss; -#X text 200 11663 gaussian random distribution; -#X obj 30 11690 random.int; -#X text 200 11690 Random integer generator in specified range; -#X obj 30 11717 random.linear; -#X text 200 11717 random linear distribution; -#X obj 30 11744 random.pw_const; -#X text 200 11744 piecewise constant random distribution; -#X obj 30 11771 random.pw_lin; -#X text 200 11771 piecewise linear random distribution; -#X obj 20 11798 cnv 5 37 31 empty empty snd 4 13 0 17 -262144 -49933 +#X obj 20 12327 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 30 12338 random.discrete; +#X text 200 12338 random weighted integers on interval [0 \, n); +#X obj 30 12365 random.float; +#X text 200 12365 random float generator in specified range; +#X obj 30 12392 random.gauss; +#X text 200 12392 gaussian random distribution; +#X obj 30 12419 random.int; +#X text 200 12419 Random integer generator in specified range; +#X obj 30 12446 random.linear; +#X text 200 12446 random linear distribution; +#X obj 30 12473 random.pw_const; +#X text 200 12473 piecewise constant random distribution; +#X obj 30 12500 random.pw_lin; +#X text 200 12500 piecewise linear random distribution; +#X obj 20 12527 cnv 5 37 31 empty empty snd 4 13 0 17 -262144 -49933 0; -#X obj 20 11839 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 30 11850 snd.file; -#X text 200 11850 Sound file loader on steroids; -#X obj 20 11877 cnv 5 47 31 empty empty spat 4 13 0 17 -262144 -49933 +#X obj 20 12568 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 30 12579 snd.file; +#X text 200 12579 Sound file loader on steroids; +#X obj 20 12606 cnv 5 47 31 empty empty spat 4 13 0 17 -262144 -49933 0; -#X obj 20 11918 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 30 11929 pan.cos~; -#X text 200 11929 two channel equal power sine/cosine panner; -#X obj 30 11956 pan.linsig~; -#X text 200 11956 two channel linear panner with signal control; -#X obj 30 11983 pan.lin~; -#X text 200 11983 two channel linear panner; -#X obj 30 12010 pan.spread~; -#X text 200 12010 spreads input channels across the stereo field; -#X obj 30 12037 pan.sqrt~; -#X text 200 12037 two channel equal power square root panner; -#X obj 30 12064 spat.pan4~; -#X text 200 12064 GMEM SPAT: 4-outputs spatializer; -#X obj 30 12091 spat.pan8~; -#X text 200 12091 GMEM SPAT: 8-outputs spatializer; -#X obj 20 12118 cnv 5 68 31 empty empty string 4 13 0 17 -262144 +#X obj 20 12647 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 30 12658 hoa.2d.decoder~; +#X text 200 12658 hoa 2d decoder; +#X obj 30 12685 hoa.2d.encoder~; +#X text 200 12685 hoa 2d encoder; +#X obj 30 12712 hoa.2d.map~; +#X text 200 12712 a 2d ambisonic multisource spatializer; +#X obj 30 12739 hoa.2d.optim~; +#X text 200 12739 a 2D ambisonic optimization tool; +#X obj 30 12766 hoa.2d.projector~; +#X text 200 12766 a plane waves decomposer from circular harmonics +domain; +#X obj 30 12793 hoa.2d.recomposer~; +#X text 200 12793 recomposes a 2d plane wave decomposition into circular +harmonics; +#X obj 30 12833 hoa.2d.rotate~; +#X text 200 12833 a 2D ambisonic sound field rotation; +#X obj 30 12860 hoa.2d.wider~; +#X text 200 12860 a 2d fractional ambisonic order simulator; +#X obj 30 12887 hoa.@process; +#X text 200 12887 process properties manager for hoa.process~; +#X obj 30 12914 hoa.in; +#X text 200 12914 message inlet for a patcher loaded by hoa.process~; +#X obj 30 12941 hoa.in~; +#X text 200 12941 signal inlet for a patcher loaded by hoa.process~; +#X obj 30 12968 hoa.out; +#X text 200 12968 message outlet for a patcher loaded by hoa.process~; +#X obj 30 12995 hoa.out~; +#X text 200 12995 signal inlet for a patcher loaded by hoa.process~; +#X obj 30 13022 hoa.process~; +#X text 200 13022 patcher loader for multichannel processing; +#X obj 30 13052 ui.link @title [hoa.scope~] @url hoa.scope~-help.pd; +#X text 200 13049 a 2d ambisonic harmonic scope; +#X obj 30 13074 pan.cos~; +#X text 200 13074 two channel equal power sine/cosine panner; +#X obj 30 13101 pan.linsig~; +#X text 200 13101 two channel linear panner with signal control; +#X obj 30 13128 pan.lin~; +#X text 200 13128 two channel linear panner; +#X obj 30 13155 pan.spread~; +#X text 200 13155 spreads input channels across the stereo field; +#X obj 30 13182 pan.sqrt~; +#X text 200 13182 two channel equal power square root panner; +#X obj 30 13209 spat.pan4~; +#X text 200 13209 GMEM SPAT: 4-outputs spatializer; +#X obj 30 13236 spat.pan8~; +#X text 200 13236 GMEM SPAT: 8-outputs spatializer; +#X obj 20 13263 cnv 5 68 31 empty empty string 4 13 0 17 -262144 -49933 0; -#X obj 20 12159 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 30 12170 string; -#X text 200 12170 string constructor; -#X obj 30 12197 string.contains; -#X text 200 12197 checks if given string contains specified substring; -#X obj 30 12224 string.ends_with; -#X text 200 12224 checks if given string ends with specified suffix; -#X obj 30 12251 string.equal; -#X text 200 12251 check strings for equality; -#X obj 30 12278 string.format; -#X text 200 12278 formats string like printf.; -#X obj 30 12305 string.join; -#X text 200 12305 joins (concatenates) strings with separator; -#X obj 30 12332 string.length; -#X text 200 12332 number of characters in string (unicode supported); -#X obj 30 12359 string.match; -#X text 200 12359 check if string match regular expression; -#X obj 30 12386 string.remove; -#X text 200 12386 remove substring from input string; -#X obj 30 12413 string.replace; -#X text 200 12413 replace from one substring to another in input string; -#X obj 30 12440 string.split; -#X text 200 12440 split string by separator; -#X obj 30 12467 string.starts_with; -#X text 200 12467 checks if given string starts with specified prefix; -#X obj 30 12494 string.substr; -#X text 200 12494 extract substring from input string; -#X obj 30 12521 string2symbol; -#X text 200 12521 converts string to symbol; -#X obj 20 12548 cnv 5 68 31 empty empty symbol 4 13 0 17 -262144 +#X obj 20 13304 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 30 13315 string; +#X text 200 13315 string constructor; +#X obj 30 13342 string.contains; +#X text 200 13342 checks if given string contains specified substring; +#X obj 30 13369 string.ends_with; +#X text 200 13369 checks if given string ends with specified suffix; +#X obj 30 13396 string.equal; +#X text 200 13396 check strings for equality; +#X obj 30 13423 string.format; +#X text 200 13423 formats string like printf.; +#X obj 30 13450 string.join; +#X text 200 13450 joins (concatenates) strings with separator; +#X obj 30 13477 string.length; +#X text 200 13477 number of characters in string (unicode supported); +#X obj 30 13504 string.match; +#X text 200 13504 check if string match regular expression; +#X obj 30 13531 string.remove; +#X text 200 13531 remove substring from input string; +#X obj 30 13558 string.replace; +#X text 200 13558 replace from one substring to another in input string; +#X obj 30 13585 string.split; +#X text 200 13585 split string by separator; +#X obj 30 13612 string.starts_with; +#X text 200 13612 checks if given string starts with specified prefix; +#X obj 30 13639 string.substr; +#X text 200 13639 extract substring from input string; +#X obj 30 13666 string2symbol; +#X text 200 13666 converts string to symbol; +#X obj 20 13693 cnv 5 68 31 empty empty symbol 4 13 0 17 -262144 -49933 0; -#X obj 20 12589 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 30 12600 symbol.equal; -#X text 200 12600 check symbols for equality; -#X obj 30 12627 symbol.length; -#X text 200 12627 number of characters in symbol (unicode supported); -#X obj 30 12654 symbol.num_compare; -#X text 200 12654 numeric symbol compare; -#X obj 20 12681 cnv 5 57 31 empty empty synth 4 13 0 17 -262144 -49933 +#X obj 20 13734 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 30 13745 symbol.equal; +#X text 200 13745 check symbols for equality; +#X obj 30 13772 symbol.length; +#X text 200 13772 number of characters in symbol (unicode supported); +#X obj 30 13799 symbol.num_compare; +#X text 200 13799 numeric symbol compare; +#X obj 20 13826 cnv 5 57 31 empty empty synth 4 13 0 17 -262144 -49933 0; -#X obj 20 12722 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 30 12733 synth.bee3~; -#X text 200 12733 Hammond-oid organ FM synthesis instrument; -#X obj 30 12760 synth.birds~; -#X text 200 12760 bird singing generator; -#X obj 30 12787 synth.church_bell~; -#X text 200 12787 generic church bell modal model; -#X obj 30 12814 synth.dubdub~; -#X text 200 12814 simple synth based on a sawtooth wave filtered by +#X obj 20 13867 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 30 13878 synth.bee3~; +#X text 200 13878 Hammond-oid organ FM synthesis instrument; +#X obj 30 13905 synth.birds~; +#X text 200 13905 bird singing generator; +#X obj 30 13932 synth.church_bell~; +#X text 200 13932 generic church bell modal model; +#X obj 30 13959 synth.dubdub~; +#X text 200 13959 simple synth based on a sawtooth wave filtered by a resonant lowpass; -#X obj 30 12854 synth.eguitar~; -#X text 200 12854 simple electric guitar model with steel strings; -#X obj 30 12881 synth.fgrain~; -#X text 200 12881 file granulator from STK; -#X obj 30 12908 synth.ks~; -#X text 200 12908 Karplus-Strong string; -#X obj 30 12935 synth.marimba~; -#X text 200 12935 simple marimba physical model implementing a single +#X obj 30 13999 synth.eguitar~; +#X text 200 13999 simple electric guitar model with steel strings; +#X obj 30 14026 synth.fgrain~; +#X text 200 14026 file granulator from STK; +#X obj 30 14053 synth.ks~; +#X text 200 14053 Karplus-Strong string; +#X obj 30 14080 synth.marimba~; +#X text 200 14080 simple marimba physical model implementing a single tone bar connected to tube; -#X obj 30 12975 synth.rhodey~; -#X text 200 12975 STK Fender Rhodes electric piano FM synthesis instrument; -#X obj 30 13002 synth.risset_arp~; -#X text 200 13002 Jean Claude Risset's harmonic arpeggio effect; -#X obj 30 13029 synth.risset_tone~; -#X text 200 13029 Jean Claude Risset's endless glissando; -#X obj 30 13056 synth.shakers~; -#X text 200 13056 various percussion sounds from STK library; -#X obj 30 13083 synth.wurley~; -#X text 200 13083 Wurlitzer electric piano FM synthesis instrument; -#X obj 20 13110 cnv 5 68 31 empty empty system 4 13 0 17 -262144 +#X obj 30 14120 synth.rhodey~; +#X text 200 14120 STK Fender Rhodes electric piano FM synthesis instrument; +#X obj 30 14147 synth.risset_arp~; +#X text 200 14147 Jean Claude Risset's harmonic arpeggio effect; +#X obj 30 14174 synth.risset_tone~; +#X text 200 14174 Jean Claude Risset's endless glissando; +#X obj 30 14201 synth.shakers~; +#X text 200 14201 various percussion sounds from STK library; +#X obj 30 14228 synth.wurley~; +#X text 200 14228 Wurlitzer electric piano FM synthesis instrument; +#X obj 20 14255 cnv 5 68 31 empty empty system 4 13 0 17 -262144 -49933 0; -#X obj 20 13151 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 30 13162 system.cursor; -#X text 200 13162 Get information about cursor motion \, mousewheel -and buttonclick; -#X obj 30 13202 system.getenv; -#X text 200 13202 Get system environment variables; -#X obj 30 13229 system.hostname; -#X text 200 13229 outputs system hostname; -#X obj 30 13256 system.memsize; -#X text 200 13256 returns the size of physical memory (RAM) in bytes +#X obj 20 14296 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 30 14307 system.colorpanel; +#X text 200 14307 System color panel dialog popup; +#X obj 30 14334 system.cursor; +#X text 200 14334 Output cursor motion \, mousewheel and buttonclicks; +#X obj 30 14361 system.getenv; +#X text 200 14361 Get system environment variables; +#X obj 30 14388 system.hostname; +#X text 200 14388 outputs system hostname; +#X obj 30 14415 system.memsize; +#X text 200 14415 returns the size of physical memory (RAM) in bytes round to float data type.; -#X obj 30 13296 system.memused; -#X text 200 13296 returns the process physical memory use - current +#X obj 30 14455 system.memused; +#X text 200 14455 returns the process physical memory use - current and peak; -#X obj 30 13323 system.screen_size; -#X text 200 13323 returns current screen size in pixels; -#X obj 30 13350 system.shell; -#X text 200 13350 run external command in separate process; -#X obj 20 13377 cnv 5 28 31 empty empty tl 4 13 0 17 -262144 -49933 0; -#X obj 20 13418 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 30 13429 tl.bang; -#X text 200 13429 Timeline bang (with possible delay); -#X obj 30 13459 ui.link @title [tl.cue] @url tl.cue-help.pd; -#X text 200 13456 Timeline section; -#X obj 30 13481 tl.timeline; -#X text 200 13481 Timeline - event scheduler; -#X obj 30 13508 tl.toggle; -#X text 200 13508 Timeline bang; -#X obj 30 13535 tl.transport; -#X text 200 13535 Timeline transport control; -#X obj 20 13562 cnv 5 28 31 empty empty ui 4 13 0 17 -262144 -49933 0; -#X obj 20 13603 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 30 13617 ui.link @title [ui.aview] @url ui.aview-help.pd; -#X text 200 13614 array view with cursor and selection; -#X obj 30 13642 ui.link @title [ui.bang] @url ui.bang-help.pd; -#X text 200 13639 A bang... that's all; -#X obj 30 13667 ui.link @title [ui.colorpanel] @url +#X obj 30 14482 system.screen_size; +#X text 200 14482 returns current screen size in pixels; +#X obj 30 14509 system.shell; +#X text 200 14509 run external command in separate process; +#X obj 20 14536 cnv 5 28 31 empty empty tl 4 13 0 17 -262144 -49933 0; +#X obj 20 14577 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 30 14588 tl.bang; +#X text 200 14588 Timeline bang (with possible delay); +#X obj 30 14618 ui.link @title [tl.cue] @url tl.cue-help.pd; +#X text 200 14615 Timeline section; +#X obj 30 14640 tl.timeline; +#X text 200 14640 Timeline - event scheduler; +#X obj 30 14667 tl.toggle; +#X text 200 14667 Timeline bang; +#X obj 30 14694 tl.transport; +#X text 200 14694 Timeline transport control; +#X obj 20 14721 cnv 5 28 31 empty empty ui 4 13 0 17 -262144 -49933 0; +#X obj 20 14762 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 30 14776 ui.link @title [ui.aview] @url ui.aview-help.pd; +#X text 200 14773 array view with cursor and selection; +#X obj 30 14801 ui.link @title [ui.bang] @url ui.bang-help.pd; +#X text 200 14798 A bang... that's all; +#X obj 30 14826 ui.link @title [ui.colorpanel] @url ui.colorpanel-help.pd; -#X text 200 13664 colorchooser widget; -#X obj 30 13692 ui.link @title [ui.display] @url ui.display-help.pd; -#X text 200 13689 Display GUI object; -#X obj 30 13717 ui.link @title [ui.dsp~] @url ui.dsp~-help.pd; -#X text 200 13714 GUI for turning DSP on/off; -#X obj 30 13742 ui.link @title [ui.env] @url ui.env-help.pd; -#X text 200 13739 envelope editor widget; -#X obj 30 13767 ui.link @title [ui.gain2~] @url ui.gain2~-help.pd; -#X text 200 13764 UI stereo gain control; -#X obj 30 13792 ui.link @title [ui.gain~] @url ui.gain~-help.pd; -#X text 200 13789 UI gain control; -#X obj 30 13817 ui.link @title [ui.icon] @url ui.icon-help.pd; -#X text 200 13814 simple icon with button capabilities; -#X obj 30 13842 ui.link @title [ui.incdec] @url ui.incdec-help.pd; -#X text 200 13839 value increment/decrement; -#X obj 30 13867 ui.link @title [ui.keyboard] @url ui.keyboard-help.pd; -#X text 200 13864 keyboard widget; -#X obj 30 13892 ui.link @title [ui.knob] @url ui.knob-help.pd; -#X text 200 13889 knob widget; -#X obj 30 13917 ui.link @title [ui.label] @url ui.label-help.pd; -#X text 200 13914 simple label widget; -#X obj 30 13942 ui.link @title [ui.link] @url ui.link-help.pd; -#X text 200 13939 Hyperlink widget; -#X obj 30 13967 ui.link @title [ui.matrix] @url ui.matrix-help.pd; -#X text 200 13964 The matrix of toggles has you.; -#X obj 30 13992 ui.link @title [ui.menu] @url ui.menu-help.pd; -#X text 200 13989 Dropdown menu; -#X obj 30 14017 ui.link @title [ui.meter~] @url ui.meter~-help.pd; -#X text 200 14014 Shows peak and rms signal level; -#X obj 30 14042 ui.link @title [ui.number] @url ui.number-help.pd; -#X text 200 14039 counterpart of the vanilla [nbx]; -#X obj 30 14067 ui.link @title [ui.number~] @url ui.number~-help.pd; -#X text 200 14064 counterpart of the vanilla [nbx] for signal; -#X obj 30 14092 ui.link @title [ui.preset] @url ui.preset-help.pd; -#X text 200 14089 Preset manager; -#X obj 30 14117 ui.link @title [ui.radio] @url ui.radio-help.pd; -#X text 200 14114 counterpart of the vanilla radio toggle; -#X obj 30 14142 ui.link @title [ui.rslider] @url ui.rslider-help.pd; -#X text 200 14139 range slider; -#X obj 30 14167 ui.link @title [ui.scope~] @url ui.scope~-help.pd; -#X text 200 14164 Scope GUI object; -#X obj 30 14192 ui.link @title [ui.slider] @url ui.slider-help.pd; -#X text 200 14189 counterpart of the vanilla slider; -#X obj 30 14217 ui.link @title [ui.slider2d] @url ui.slider2d-help.pd; -#X text 200 14214 2D slider widget; -#X obj 30 14242 ui.link @title [ui.sliders] @url ui.sliders-help.pd; -#X text 200 14239 Multiple slider widget; -#X obj 30 14267 ui.link @title [ui.spectroscope~] @url +#X text 200 14823 colorchooser widget; +#X obj 30 14851 ui.link @title [ui.display] @url ui.display-help.pd; +#X text 200 14848 Display GUI object; +#X obj 30 14876 ui.link @title [ui.dsp~] @url ui.dsp~-help.pd; +#X text 200 14873 GUI for turning DSP on/off; +#X obj 30 14901 ui.link @title [ui.env] @url ui.env-help.pd; +#X text 200 14898 envelope editor widget; +#X obj 30 14926 ui.link @title [ui.gain2~] @url ui.gain2~-help.pd; +#X text 200 14923 UI stereo gain control; +#X obj 30 14951 ui.link @title [ui.gain~] @url ui.gain~-help.pd; +#X text 200 14948 UI gain control; +#X obj 30 14976 ui.link @title [ui.icon] @url ui.icon-help.pd; +#X text 200 14973 simple icon with button capabilities; +#X obj 30 15001 ui.link @title [ui.incdec] @url ui.incdec-help.pd; +#X text 200 14998 value increment/decrement; +#X obj 30 15026 ui.link @title [ui.keyboard] @url ui.keyboard-help.pd; +#X text 200 15023 keyboard widget; +#X obj 30 15051 ui.link @title [ui.knob] @url ui.knob-help.pd; +#X text 200 15048 knob widget; +#X obj 30 15076 ui.link @title [ui.label] @url ui.label-help.pd; +#X text 200 15073 simple label widget; +#X obj 30 15101 ui.link @title [ui.link] @url ui.link-help.pd; +#X text 200 15098 Hyperlink widget; +#X obj 30 15126 ui.link @title [ui.matrix] @url ui.matrix-help.pd; +#X text 200 15123 The matrix of toggles has you.; +#X obj 30 15151 ui.link @title [ui.menu] @url ui.menu-help.pd; +#X text 200 15148 Dropdown menu; +#X obj 30 15176 ui.link @title [ui.meter~] @url ui.meter~-help.pd; +#X text 200 15173 Shows peak and rms signal level; +#X obj 30 15201 ui.link @title [ui.mouse_filter] @url +ui.mouse_filter-help.pd; +#X text 200 15198 filter mouse events from ui objects; +#X obj 30 15226 ui.link @title [ui.mouse_route] @url +ui.mouse_route-help.pd; +#X text 200 15223 routes mouse events from ui objects; +#X obj 30 15251 ui.link @title [ui.number] @url ui.number-help.pd; +#X text 200 15248 counterpart of the vanilla [nbx]; +#X obj 30 15276 ui.link @title [ui.number~] @url ui.number~-help.pd; +#X text 200 15273 counterpart of the vanilla [nbx] for signal; +#X obj 30 15301 ui.link @title [ui.polar] @url ui.polar-help.pd; +#X text 200 15298 2D slider in polar coordinates; +#X obj 30 15326 ui.link @title [ui.preset] @url ui.preset-help.pd; +#X text 200 15323 Preset manager; +#X obj 30 15351 ui.link @title [ui.radio] @url ui.radio-help.pd; +#X text 200 15348 counterpart of the vanilla radio toggle; +#X obj 30 15376 ui.link @title [ui.rslider] @url ui.rslider-help.pd; +#X text 200 15373 range slider; +#X obj 30 15401 ui.link @title [ui.scope~] @url ui.scope~-help.pd; +#X text 200 15398 Scope GUI object; +#X obj 30 15426 ui.link @title [ui.slider] @url ui.slider-help.pd; +#X text 200 15423 counterpart of the vanilla slider; +#X obj 30 15451 ui.link @title [ui.slider2d] @url ui.slider2d-help.pd; +#X text 200 15448 2D slider widget; +#X obj 30 15476 ui.link @title [ui.sliders] @url ui.sliders-help.pd; +#X text 200 15473 Multiple slider widget; +#X obj 30 15501 ui.link @title [ui.spectroscope~] @url ui.spectroscope~-help.pd; -#X text 200 14264 Spectroscope GUI object; -#X obj 30 14292 ui.link @title [ui.tab] @url ui.tab-help.pd; -#X text 200 14289 displays a list of text buttons or text toggles; -#X obj 30 14317 ui.link @title [ui.toggle] @url ui.toggle-help.pd; -#X text 200 14314 modern toggle widget; +#X text 200 15498 Spectroscope GUI object; +#X obj 30 15526 ui.link @title [ui.tab] @url ui.tab-help.pd; +#X text 200 15523 displays a list of text buttons or text toggles; +#X obj 30 15551 ui.link @title [ui.toggle] @url ui.toggle-help.pd; +#X text 200 15548 modern toggle widget; #X obj 1 1 cnv 5 740 40 empty empty ceammc 20 20 0 20 -104026 -4096 0; -#X obj 1 14339 cnv 5 740 40 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 20 14339 version: v0.7.1 \, license: GPL3; -#X obj 20 14360 ui.link @title https://github.com/uliss/pure-data @url +#X obj 1 15573 cnv 5 740 40 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 20 15573 version: v0.8.0 \, license: GPL3; +#X obj 20 15594 ui.link @title https://github.com/uliss/pure-data @url https://github.com/uliss/pure-data; \ No newline at end of file diff --git a/ceammc/ext/doc/ceammc.base-help.pd b/ceammc/ext/doc/ceammc.base-help.pd index a02e79a9f0..44c49267f7 100644 --- a/ceammc/ext/doc/ceammc.base-help.pd +++ b/ceammc/ext/doc/ceammc.base-help.pd @@ -22,10 +22,12 @@ #X text 200 330 float index to outlet values as radio switch; #X obj 30 357 window; #X text 200 357 returns window value by given window position; -#X obj 30 384 xfade2~; -#X text 200 384 multi stereo-signal crossfade; -#X obj 30 411 xfade~; -#X text 200 411 multi signal crossfade; +#X obj 30 384 xdac~; +#X text 200 384 dac~ with channel ranges; +#X obj 30 411 xfade2~; +#X text 200 411 multi stereo-signal crossfade; +#X obj 30 438 xfade~; +#X text 200 438 multi signal crossfade; #X obj 1 1 cnv 5 740 40 empty empty ceammc::base 20 20 0 20 -104026 -4096 0; #X obj 1 513 cnv 5 740 40 empty empty empty 17 7 0 10 -203890 -1 0; diff --git a/ceammc/ext/doc/ceammc.conv-help.pd b/ceammc/ext/doc/ceammc.conv-help.pd index 1fa0b960f0..9eba358cb0 100644 --- a/ceammc/ext/doc/ceammc.conv-help.pd +++ b/ceammc/ext/doc/ceammc.conv-help.pd @@ -15,34 +15,46 @@ #X text 200 237 convert frequency in BPM to period in milliseconds; #X obj 30 264 conv.bpm2sec; #X text 200 264 convert frequency in BPM to period in seconds; -#X obj 30 291 conv.cc2amp; -#X text 200 291 convert from MIDI Control Change range; -#X obj 30 318 conv.dbfs2amp; -#X text 200 318 convert decibel full scale to amplitude; -#X obj 30 345 conv.lin2curve; -#X text 200 345 map linear to exponential range with 0 allowed.; -#X obj 30 372 conv.lin2exp; -#X text 200 372 maps linear range to exponential range; -#X obj 30 399 conv.lin2lin; -#X text 200 399 convert from one linear range to another; -#X obj 30 426 conv.list2props; -#X text 200 426 converts list to series of property messages; -#X obj 30 453 conv.midi2freq; -#X text 200 453 convert from midi pitch to frequency in hz (with various +#X obj 30 291 conv.car2pol; +#X text 200 291 convert cartesian coords to polar; +#X obj 30 318 conv.cc2amp; +#X text 200 318 convert from MIDI Control Change range; +#X obj 30 345 conv.dbfs2amp; +#X text 200 345 convert decibel full scale to amplitude; +#X obj 30 372 conv.lin2curve; +#X text 200 372 map linear to exponential range with 0 allowed.; +#X obj 30 399 conv.lin2exp; +#X text 200 399 maps linear range to exponential range; +#X obj 30 426 conv.lin2lin; +#X text 200 426 convert from one linear range to another; +#X obj 30 453 conv.list2props; +#X text 200 453 converts list to series of property messages; +#X obj 30 480 conv.midi2freq; +#X text 200 480 convert from midi pitch to frequency in hz (with various base A and temperament); -#X obj 30 493 conv.pitch2midi; -#X text 200 493 converts symbol pitch name to MIDI note number; -#X obj 30 520 conv.samp2sec; -#X text 200 520 convert samples to time according to samplerate; -#X obj 30 547 conv.sec2samp; -#X text 200 547 convert time in seconds to number of samples according +#X obj 30 520 conv.phase2rad; +#X text 200 520 convert phase value [0-1] to radians; +#X obj 30 547 conv.phase2rad~; +#X text 200 547 convert phase value [0-1] to radians; +#X obj 30 574 conv.pitch2midi; +#X text 200 574 converts symbol pitch name to MIDI note number; +#X obj 30 601 conv.pol2car; +#X text 200 601 convert from polar coordinates to cartesian; +#X obj 30 628 conv.rad2phase; +#X text 200 628 convert radians value to phase; +#X obj 30 655 conv.rad2phase~; +#X text 200 655 convert radians value to phase; +#X obj 30 682 conv.samp2sec; +#X text 200 682 convert samples to time according to samplerate; +#X obj 30 709 conv.sec2samp; +#X text 200 709 convert time in seconds to number of samples according to current samplerate; -#X obj 30 587 conv.sec2str; -#X text 200 587 converts float time in seconds to formated symbol (or +#X obj 30 749 conv.sec2str; +#X text 200 749 converts float time in seconds to formated symbol (or string); -#X obj 30 614 conv.str2sec; -#X text 200 614 converts formatted time to float value in seconds; +#X obj 30 776 conv.str2sec; +#X text 200 776 converts formatted time to float value in seconds; #X obj 1 1 cnv 5 740 40 empty empty ceammc::conv 20 20 0 20 -104026 -4096 0; -#X obj 1 641 cnv 5 740 40 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 20 651 library: ceammc; \ No newline at end of file +#X obj 1 803 cnv 5 740 40 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 20 813 library: ceammc; \ No newline at end of file diff --git a/ceammc/ext/doc/ceammc.db b/ceammc/ext/doc/ceammc.db index 10ec23ed50..e964769cf7 100644 --- a/ceammc/ext/doc/ceammc.db +++ b/ceammc/ext/doc/ceammc.db @@ -19,20 +19,29 @@ array.variance . . array.vplay . .. array.window . . canvas.current . . +canvas.dir . . +canvas.name . . +canvas.path . . canvas.top . . click~ . ~ conv.amp2dbfs,amp->dbfs . . conv.bpm2hz,bpm->hz . . conv.bpm2ms,bpm->ms . . conv.bpm2sec,bpm->sec . . +conv.car2pol,car->pol . . conv.cc2amp,cc->amp . . conv.dbfs2amp,dbfs->amp . . conv.lin2curve,lin->curve . . conv.lin2exp,lin->exp . . conv.lin2lin,lin->lin,l->l . . -conv.list2props,list->props,any->props . . +conv.list2props,list->props,any->props . .. conv.midi2freq,midi->freq,m->f . . +conv.phase2rad,phase->rad . . +conv.phase2rad~,phase->rad~ ~ ~ conv.pitch2midi,pitch->midi . . +conv.pol2car,pol->car . . +conv.rad2phase,rad->phase . . +conv.rad2phase~,rad->phase~ ~ ~ conv.samp2sec,samp->sec . . conv.sec2samp,sec->samp . . conv.sec2str,sec->str . . @@ -92,6 +101,7 @@ flow.multiplex,flow.mux ? . flow.multiplex2~,flow.mux2~,mux2~ ? ~~ flow.multiplex~,flow.mux~,mux~ ? ~ flow.once,once . . +flow.pack ? . flow.pass,pass . . flow.pass_if,pass_if .. .. flow.reject,reject . . @@ -100,6 +110,7 @@ flow.route . ? flow.speedlim,speedlim . . flow.split,split .. ... flow.sync ? ? +flow.sync_pack,flow.pack' ? . flow.tee~,tee~,~-> ~ ~. flt.biquad~ ~~~~~~ ~ flt.bpf12~ ~ ~ @@ -157,6 +168,22 @@ global.int . . global.list . . global.mlist . . global.set . . +hoa.2d.decoder~,hoa.decoder~ ? ? +hoa.2d.encoder~,hoa.encoder~ ~~ ? +hoa.2d.map~,hoa.map~ ? ? +hoa.2d.optim~,hoa.optim~ ? ? +hoa.2d.projector~,hoa.projector~ ? ? +hoa.2d.recomposer~,hoa.recomposer~ ? ? +hoa.2d.rotate~,hoa.rotate~ ? ? +hoa.2d.wider~,hoa.wider~ ? ? +hoa.@process . . +hoa.in - . +hoa.in~ - ~ +hoa.out . - +hoa.out~ - ~ +hoa.process.route . ? +hoa.process~ ? ? +hoa.scope~ ? - hw.apple_smc . . hw.apple_sms . . hw.arduino . . @@ -293,6 +320,20 @@ math.sin . . math.sinh . . math.sqrt . . math.squared . . +math.sync_add,math.+',+' .. . +math.sync_and,math.&&',&&' .. . +math.sync_div,math./',/' .. . +math.sync_eq,math.==',==' .. . +math.sync_ge,math.>=',>=' .. . +math.sync_gt,math.>',>' .. . +math.sync_le,math.<=',<=' .. . +math.sync_lt,math.<',<' .. . +math.sync_mod,math.%',%' .. . +math.sync_mul,math.*',*' .. . +math.sync_ne,math.!=',!=' .. . +math.sync_or,math.||',||' .. . +math.sync_sub,math.-',-' .. . +math.sync_xor,math.^',^' .. . math.tan . . math.tanh . . math.trunc . . @@ -350,6 +391,7 @@ prop.get,prop->,@-> . ? prop.get~,prop~>,@~> ~ ? prop.set,prop<- ? . proto.firmata . . +proto.sp.alpaca . . radio . ? random.discrete . . random.float . . @@ -400,6 +442,7 @@ synth.risset_arp~ . ~~ synth.risset_tone~ . ~ synth.shakers~ . ~ synth.wurley~ . ~ +system.colorpanel . . system.cursor . . system.getenv . . system.hostname . . @@ -418,8 +461,8 @@ ui.colorpanel . . ui.display,ui.d . - ui.dsp~ . - ui.env . . -ui.gain2~ ~~ ~~ -ui.gain~ ~ ~ +ui.gain2~,ui.hgain2~,ui.vgain2~ ~~ ~~ +ui.gain~,ui.hgain~,ui.vgain~ ~ ~ ui.icon . . ui.incdec . . ui.keyboard . . @@ -429,10 +472,13 @@ ui.link - - ui.matrix . . ui.menu . . ui.meter~,ui.m~ ~ . +ui.mouse_filter,ui.mf . . +ui.mouse_route,ui.mr . ? ui.number,ui.n . . ui.number~,ui.n~ ~ ~ +ui.polar . . ui.preset . - -ui.radio,ui.hrd,ui.vrd . . +ui.radio,ui.radio*,ui.hrd,ui.hrd*,ui.vrd,ui.vrd* . . ui.rslider,ui.rsl . . ui.scope~ . - ui.slider,ui.hsl,ui.vsl . . @@ -443,5 +489,6 @@ ui.tab . . ui.toggle,ui.t . . vline2env,vline->env . . window,win . . +xdac~ ? - xfade2~ ? ~~ xfade~ ? ~ diff --git a/ceammc/ext/doc/ceammc.flow-help.pd b/ceammc/ext/doc/ceammc.flow-help.pd index 8c5d0ad271..1c01a2c2b2 100644 --- a/ceammc/ext/doc/ceammc.flow-help.pd +++ b/ceammc/ext/doc/ceammc.flow-help.pd @@ -36,27 +36,31 @@ #X text 200 521 audio stream multiplexer; #X obj 30 548 flow.once; #X text 200 548 one message pass thru; -#X obj 30 575 flow.pass; -#X text 200 575 pass specified values; -#X obj 30 602 flow.pass_if; -#X text 200 602 pass values that accepted by predicate object; -#X obj 30 629 flow.reject; -#X text 200 629 reject specified values; -#X obj 30 656 flow.reject_if; -#X text 200 656 reject values by predicate; -#X obj 30 683 flow.route; -#X text 200 683 advanced message router; -#X obj 30 710 flow.speedlim; -#X text 200 710 control stream speed limiter; -#X obj 30 737 flow.split; -#X text 200 737 split data flow by external side-chain predicate; -#X obj 30 764 flow.sync; -#X text 200 764 bus with only hot inlets; -#X obj 30 791 flow.tee~; -#X text 200 791 separate audio and control streams; -#X obj 30 818 replace; -#X text 200 818 Replace atoms in data stream; +#X obj 30 575 flow.pack; +#X text 200 575 flow pack; +#X obj 30 602 flow.pass; +#X text 200 602 pass specified values; +#X obj 30 629 flow.pass_if; +#X text 200 629 pass values that accepted by predicate object; +#X obj 30 656 flow.reject; +#X text 200 656 reject specified values; +#X obj 30 683 flow.reject_if; +#X text 200 683 reject values by predicate; +#X obj 30 710 flow.route; +#X text 200 710 advanced message router; +#X obj 30 737 flow.speedlim; +#X text 200 737 control stream speed limiter; +#X obj 30 764 flow.split; +#X text 200 764 split data flow by external side-chain predicate; +#X obj 30 791 flow.sync; +#X text 200 791 bus with only hot inlets; +#X obj 30 818 flow.sync_pack; +#X text 200 818 flow pack with all hot inlets; +#X obj 30 845 flow.tee~; +#X text 200 845 separate audio and control streams; +#X obj 30 872 replace; +#X text 200 872 Replace atoms in data stream; #X obj 1 1 cnv 5 740 40 empty empty ceammc::flow 20 20 0 20 -104026 -4096 0; -#X obj 1 845 cnv 5 740 40 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 20 855 library: ceammc; \ No newline at end of file +#X obj 1 899 cnv 5 740 40 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 20 909 library: ceammc; \ No newline at end of file diff --git a/ceammc/ext/doc/ceammc.math-help.pd b/ceammc/ext/doc/ceammc.math-help.pd index b78da75328..76e4c781d9 100644 --- a/ceammc/ext/doc/ceammc.math-help.pd +++ b/ceammc/ext/doc/ceammc.math-help.pd @@ -89,13 +89,41 @@ direction; #X text 200 1169 square root function; #X obj 30 1196 math.squared; #X text 200 1196 value square; -#X obj 30 1223 math.tan; -#X text 200 1223 tangent function; -#X obj 30 1250 math.tanh; -#X text 200 1250 hyperbolic tangent function; -#X obj 30 1277 math.trunc; -#X text 200 1277 truncate to integer value; +#X obj 30 1223 math.sync_add; +#X text 200 1223 sync addition; +#X obj 30 1250 math.sync_and; +#X text 200 1250 sync logical AND operation; +#X obj 30 1277 math.sync_div; +#X text 200 1277 sync division; +#X obj 30 1304 math.sync_eq; +#X text 200 1304 sync equal numbers check; +#X obj 30 1331 math.sync_ge; +#X text 200 1331 sync greater equal numbers compare; +#X obj 30 1358 math.sync_gt; +#X text 200 1358 sync greater then numbers compare; +#X obj 30 1385 math.sync_le; +#X text 200 1385 sync less equal numbers compare; +#X obj 30 1412 math.sync_lt; +#X text 200 1412 sync less then numbers compare; +#X obj 30 1439 math.sync_mod; +#X text 200 1439 sync remainder of modulo division (float or integer); +#X obj 30 1466 math.sync_mul; +#X text 200 1466 sync multiplication; +#X obj 30 1493 math.sync_ne; +#X text 200 1493 sync numbers for not equality; +#X obj 30 1520 math.sync_or; +#X text 200 1520 sync logical OR operation; +#X obj 30 1547 math.sync_sub; +#X text 200 1547 sync subtraction; +#X obj 30 1574 math.sync_xor; +#X text 200 1574 sync logical XOR operation; +#X obj 30 1601 math.tan; +#X text 200 1601 tangent function; +#X obj 30 1628 math.tanh; +#X text 200 1628 hyperbolic tangent function; +#X obj 30 1655 math.trunc; +#X text 200 1655 truncate to integer value; #X obj 1 1 cnv 5 740 40 empty empty ceammc::math 20 20 0 20 -104026 -4096 0; -#X obj 1 1304 cnv 5 740 40 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 20 1314 library: ceammc; \ No newline at end of file +#X obj 1 1682 cnv 5 740 40 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 20 1692 library: ceammc; \ No newline at end of file diff --git a/ceammc/ext/doc/ceammc.patch-help.pd b/ceammc/ext/doc/ceammc.patch-help.pd index d1028c22aa..5681f369b4 100644 --- a/ceammc/ext/doc/ceammc.patch-help.pd +++ b/ceammc/ext/doc/ceammc.patch-help.pd @@ -4,10 +4,16 @@ #X obj 79 53 ui.link @title ceammc @url ceammc-help.pd; #X obj 30 116 canvas.current; #X text 200 116 verbose information about current canvas; -#X obj 30 143 canvas.top; -#X text 200 143 verbose information about top-level canvas; -#X obj 30 170 patch.args; -#X text 200 170 Get patch or subpatch arguments; +#X obj 30 143 canvas.dir; +#X text 200 143 current canvas directory; +#X obj 30 170 canvas.name; +#X text 200 170 current canvas name; +#X obj 30 197 canvas.path; +#X text 200 197 current canvas fullpath; +#X obj 30 224 canvas.top; +#X text 200 224 verbose information about top-level canvas; +#X obj 30 251 patch.args; +#X text 200 251 Get patch or subpatch arguments; #X obj 1 1 cnv 5 740 40 empty empty ceammc::patch 20 20 0 20 -104026 -4096 0; #X obj 1 513 cnv 5 740 40 empty empty empty 17 7 0 10 -203890 -1 0; diff --git a/ceammc/ext/doc/ceammc.proto-help.pd b/ceammc/ext/doc/ceammc.proto-help.pd index 56e77594a0..0254121b58 100644 --- a/ceammc/ext/doc/ceammc.proto-help.pd +++ b/ceammc/ext/doc/ceammc.proto-help.pd @@ -4,6 +4,8 @@ #X obj 79 53 ui.link @title ceammc @url ceammc-help.pd; #X obj 30 116 proto.firmata; #X text 200 116 Firmata Arduino protocol support; +#X obj 30 143 proto.sp.alpaca; +#X text 200 143 protocol parser for Arduino-based CEAMMC footswitch; #X obj 1 1 cnv 5 740 40 empty empty ceammc::proto 20 20 0 20 -104026 -4096 0; #X obj 1 513 cnv 5 740 40 empty empty empty 17 7 0 10 -203890 -1 0; diff --git a/ceammc/ext/doc/ceammc.spat-help.pd b/ceammc/ext/doc/ceammc.spat-help.pd index adedecefbd..0928fe911f 100644 --- a/ceammc/ext/doc/ceammc.spat-help.pd +++ b/ceammc/ext/doc/ceammc.spat-help.pd @@ -2,21 +2,52 @@ #X obj 20 53 ui.link @title index @url ../index-help.pd; #X text 62 50 ::; #X obj 79 53 ui.link @title ceammc @url ceammc-help.pd; -#X obj 30 116 pan.cos~; -#X text 200 116 two channel equal power sine/cosine panner; -#X obj 30 143 pan.linsig~; -#X text 200 143 two channel linear panner with signal control; -#X obj 30 170 pan.lin~; -#X text 200 170 two channel linear panner; -#X obj 30 197 pan.spread~; -#X text 200 197 spreads input channels across the stereo field; -#X obj 30 224 pan.sqrt~; -#X text 200 224 two channel equal power square root panner; -#X obj 30 251 spat.pan4~; -#X text 200 251 GMEM SPAT: 4-outputs spatializer; -#X obj 30 278 spat.pan8~; -#X text 200 278 GMEM SPAT: 8-outputs spatializer; +#X obj 30 116 hoa.2d.decoder~; +#X text 200 116 hoa 2d decoder; +#X obj 30 143 hoa.2d.encoder~; +#X text 200 143 hoa 2d encoder; +#X obj 30 170 hoa.2d.map~; +#X text 200 170 a 2d ambisonic multisource spatializer; +#X obj 30 197 hoa.2d.optim~; +#X text 200 197 a 2D ambisonic optimization tool; +#X obj 30 224 hoa.2d.projector~; +#X text 200 224 a plane waves decomposer from circular harmonics domain; +#X obj 30 251 hoa.2d.recomposer~; +#X text 200 251 recomposes a 2d plane wave decomposition into circular +harmonics; +#X obj 30 291 hoa.2d.rotate~; +#X text 200 291 a 2D ambisonic sound field rotation; +#X obj 30 318 hoa.2d.wider~; +#X text 200 318 a 2d fractional ambisonic order simulator; +#X obj 30 345 hoa.@process; +#X text 200 345 process properties manager for hoa.process~; +#X obj 30 372 hoa.in; +#X text 200 372 message inlet for a patcher loaded by hoa.process~; +#X obj 30 399 hoa.in~; +#X text 200 399 signal inlet for a patcher loaded by hoa.process~; +#X obj 30 426 hoa.out; +#X text 200 426 message outlet for a patcher loaded by hoa.process~; +#X obj 30 453 hoa.out~; +#X text 200 453 signal inlet for a patcher loaded by hoa.process~; +#X obj 30 480 hoa.process~; +#X text 200 480 patcher loader for multichannel processing; +#X obj 30 510 ui.link @title [hoa.scope~] @url hoa.scope~-help.pd; +#X text 200 507 a 2d ambisonic harmonic scope; +#X obj 30 532 pan.cos~; +#X text 200 532 two channel equal power sine/cosine panner; +#X obj 30 559 pan.linsig~; +#X text 200 559 two channel linear panner with signal control; +#X obj 30 586 pan.lin~; +#X text 200 586 two channel linear panner; +#X obj 30 613 pan.spread~; +#X text 200 613 spreads input channels across the stereo field; +#X obj 30 640 pan.sqrt~; +#X text 200 640 two channel equal power square root panner; +#X obj 30 667 spat.pan4~; +#X text 200 667 GMEM SPAT: 4-outputs spatializer; +#X obj 30 694 spat.pan8~; +#X text 200 694 GMEM SPAT: 8-outputs spatializer; #X obj 1 1 cnv 5 740 40 empty empty ceammc::spat 20 20 0 20 -104026 -4096 0; -#X obj 1 513 cnv 5 740 40 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 20 523 library: ceammc; \ No newline at end of file +#X obj 1 721 cnv 5 740 40 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 20 731 library: ceammc; \ No newline at end of file diff --git a/ceammc/ext/doc/ceammc.system-help.pd b/ceammc/ext/doc/ceammc.system-help.pd index b1d9c7ccd9..97e7a62e3e 100644 --- a/ceammc/ext/doc/ceammc.system-help.pd +++ b/ceammc/ext/doc/ceammc.system-help.pd @@ -2,23 +2,24 @@ #X obj 20 53 ui.link @title index @url ../index-help.pd; #X text 62 50 ::; #X obj 79 53 ui.link @title ceammc @url ceammc-help.pd; -#X obj 30 116 system.cursor; -#X text 200 116 Get information about cursor motion \, mousewheel and -buttonclick; -#X obj 30 156 system.getenv; -#X text 200 156 Get system environment variables; -#X obj 30 183 system.hostname; -#X text 200 183 outputs system hostname; -#X obj 30 210 system.memsize; -#X text 200 210 returns the size of physical memory (RAM) in bytes +#X obj 30 116 system.colorpanel; +#X text 200 116 System color panel dialog popup; +#X obj 30 143 system.cursor; +#X text 200 143 Output cursor motion \, mousewheel and buttonclicks; +#X obj 30 170 system.getenv; +#X text 200 170 Get system environment variables; +#X obj 30 197 system.hostname; +#X text 200 197 outputs system hostname; +#X obj 30 224 system.memsize; +#X text 200 224 returns the size of physical memory (RAM) in bytes round to float data type.; -#X obj 30 250 system.memused; -#X text 200 250 returns the process physical memory use - current and +#X obj 30 264 system.memused; +#X text 200 264 returns the process physical memory use - current and peak; -#X obj 30 277 system.screen_size; -#X text 200 277 returns current screen size in pixels; -#X obj 30 304 system.shell; -#X text 200 304 run external command in separate process; +#X obj 30 291 system.screen_size; +#X text 200 291 returns current screen size in pixels; +#X obj 30 318 system.shell; +#X text 200 318 run external command in separate process; #X obj 1 1 cnv 5 740 40 empty empty ceammc::system 20 20 0 20 -104026 -4096 0; #X obj 1 513 cnv 5 740 40 empty empty empty 17 7 0 10 -203890 -1 0; diff --git a/ceammc/ext/doc/ceammc.ui-help.pd b/ceammc/ext/doc/ceammc.ui-help.pd index 75e2fd5f2c..d2a7bde908 100644 --- a/ceammc/ext/doc/ceammc.ui-help.pd +++ b/ceammc/ext/doc/ceammc.ui-help.pd @@ -37,32 +37,40 @@ ui.colorpanel-help.pd; #X text 200 491 Dropdown menu; #X obj 30 519 ui.link @title [ui.meter~] @url ui.meter~-help.pd; #X text 200 516 Shows peak and rms signal level; -#X obj 30 544 ui.link @title [ui.number] @url ui.number-help.pd; -#X text 200 541 counterpart of the vanilla [nbx]; -#X obj 30 569 ui.link @title [ui.number~] @url ui.number~-help.pd; -#X text 200 566 counterpart of the vanilla [nbx] for signal; -#X obj 30 594 ui.link @title [ui.preset] @url ui.preset-help.pd; -#X text 200 591 Preset manager; -#X obj 30 619 ui.link @title [ui.radio] @url ui.radio-help.pd; -#X text 200 616 counterpart of the vanilla radio toggle; -#X obj 30 644 ui.link @title [ui.rslider] @url ui.rslider-help.pd; -#X text 200 641 range slider; -#X obj 30 669 ui.link @title [ui.scope~] @url ui.scope~-help.pd; -#X text 200 666 Scope GUI object; -#X obj 30 694 ui.link @title [ui.slider] @url ui.slider-help.pd; -#X text 200 691 counterpart of the vanilla slider; -#X obj 30 719 ui.link @title [ui.slider2d] @url ui.slider2d-help.pd; -#X text 200 716 2D slider widget; -#X obj 30 744 ui.link @title [ui.sliders] @url ui.sliders-help.pd; -#X text 200 741 Multiple slider widget; -#X obj 30 769 ui.link @title [ui.spectroscope~] @url +#X obj 30 544 ui.link @title [ui.mouse_filter] @url +ui.mouse_filter-help.pd; +#X text 200 541 filter mouse events from ui objects; +#X obj 30 569 ui.link @title [ui.mouse_route] @url +ui.mouse_route-help.pd; +#X text 200 566 routes mouse events from ui objects; +#X obj 30 594 ui.link @title [ui.number] @url ui.number-help.pd; +#X text 200 591 counterpart of the vanilla [nbx]; +#X obj 30 619 ui.link @title [ui.number~] @url ui.number~-help.pd; +#X text 200 616 counterpart of the vanilla [nbx] for signal; +#X obj 30 644 ui.link @title [ui.polar] @url ui.polar-help.pd; +#X text 200 641 2D slider in polar coordinates; +#X obj 30 669 ui.link @title [ui.preset] @url ui.preset-help.pd; +#X text 200 666 Preset manager; +#X obj 30 694 ui.link @title [ui.radio] @url ui.radio-help.pd; +#X text 200 691 counterpart of the vanilla radio toggle; +#X obj 30 719 ui.link @title [ui.rslider] @url ui.rslider-help.pd; +#X text 200 716 range slider; +#X obj 30 744 ui.link @title [ui.scope~] @url ui.scope~-help.pd; +#X text 200 741 Scope GUI object; +#X obj 30 769 ui.link @title [ui.slider] @url ui.slider-help.pd; +#X text 200 766 counterpart of the vanilla slider; +#X obj 30 794 ui.link @title [ui.slider2d] @url ui.slider2d-help.pd; +#X text 200 791 2D slider widget; +#X obj 30 819 ui.link @title [ui.sliders] @url ui.sliders-help.pd; +#X text 200 816 Multiple slider widget; +#X obj 30 844 ui.link @title [ui.spectroscope~] @url ui.spectroscope~-help.pd; -#X text 200 766 Spectroscope GUI object; -#X obj 30 794 ui.link @title [ui.tab] @url ui.tab-help.pd; -#X text 200 791 displays a list of text buttons or text toggles; -#X obj 30 819 ui.link @title [ui.toggle] @url ui.toggle-help.pd; -#X text 200 816 modern toggle widget; +#X text 200 841 Spectroscope GUI object; +#X obj 30 869 ui.link @title [ui.tab] @url ui.tab-help.pd; +#X text 200 866 displays a list of text buttons or text toggles; +#X obj 30 894 ui.link @title [ui.toggle] @url ui.toggle-help.pd; +#X text 200 891 modern toggle widget; #X obj 1 1 cnv 5 740 40 empty empty ceammc::ui 20 20 0 20 -104026 -4096 0; -#X obj 1 841 cnv 5 740 40 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 20 851 library: ceammc; \ No newline at end of file +#X obj 1 916 cnv 5 740 40 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 20 926 library: ceammc; \ No newline at end of file diff --git a/ceammc/ext/doc/ceammc_lib.xml b/ceammc/ext/doc/ceammc_lib.xml index a386ae432c..f45b9a22cb 100644 --- a/ceammc/ext/doc/ceammc_lib.xml +++ b/ceammc/ext/doc/ceammc_lib.xml @@ -89,6 +89,9 @@ + + + @@ -115,6 +118,9 @@ + + + @@ -136,9 +142,24 @@ + + + + + + + + + + + + + + + @@ -351,6 +372,9 @@ + + + @@ -375,6 +399,9 @@ + + + @@ -931,6 +958,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -1048,6 +1117,15 @@ + + + + + + + + + @@ -1142,6 +1220,9 @@ + + + @@ -1172,6 +1253,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -1291,7 +1417,10 @@ - + + + + @@ -1382,12 +1511,21 @@ + + + + + + + + + @@ -1420,10 +1558,11 @@ - 0.7.1 + 0.8.0 Albert Graef Alex Nadzharov + Eliott Paris Hans-Christoph Steiner Julian Parker Katja Vetter @@ -1432,8 +1571,10 @@ Olli Parviainen Pierre Cochard Pierre Guillot + Serge Poltavski Serge Poltavsky Serge Potlavsky + Thomas Le Meur Till Bovermann Viacheslav Lotsmanov Yann Orlarey diff --git a/ceammc/ext/doc/click~-help.pd b/ceammc/ext/doc/click~-help.pd index 5806da5233..c07d3aae9f 100644 --- a/ceammc/ext/doc/click~-help.pd +++ b/ceammc/ext/doc/click~-help.pd @@ -26,13 +26,13 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title misc @url ceammc.misc-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #N canvas 10 527 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 click~; #X text 10 76 category:; @@ -42,7 +42,7 @@ #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 click; #X text 10 186 website:; diff --git a/ceammc/ext/doc/click~.pddoc b/ceammc/ext/doc/click~.pddoc index d8bf839553..a4a0bafa25 100644 --- a/ceammc/ext/doc/click~.pddoc +++ b/ceammc/ext/doc/click~.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky Output single impulse on bang - GPL3 + GPL3 or later ceammc misc click diff --git a/ceammc/ext/doc/conv.amp2dbfs-help.pd b/ceammc/ext/doc/conv.amp2dbfs-help.pd index b85f6246fd..0fdde02a1a 100644 --- a/ceammc/ext/doc/conv.amp2dbfs-help.pd +++ b/ceammc/ext/doc/conv.amp2dbfs-help.pd @@ -36,7 +36,7 @@ range); #X text 115 45 ::; #X obj 131 48 ui.link @title conv @url ceammc.conv-help.pd; #X obj 1 511 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 514 library: ceammc v0.7.1; +#X text 10 514 library: ceammc v0.8.0; #X text 600 526 see also:; #X obj 674 526 dbfs->amp; #N canvas 10 533 400 290 info 0; @@ -44,7 +44,7 @@ range); #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 conv.amp2dbfs; #X text 10 76 category:; @@ -54,7 +54,7 @@ range); #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 conv \, amp \, dbfs \, decibel; #X text 10 186 website:; diff --git a/ceammc/ext/doc/conv.amp2dbfs.pddoc b/ceammc/ext/doc/conv.amp2dbfs.pddoc index 6754d95a16..3070842476 100644 --- a/ceammc/ext/doc/conv.amp2dbfs.pddoc +++ b/ceammc/ext/doc/conv.amp2dbfs.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky convert from amplitude to decibel full scale - GPL3 + GPL3 or later ceammc conv conv amp dbfs decibel diff --git a/ceammc/ext/doc/conv.bpm2hz-help.pd b/ceammc/ext/doc/conv.bpm2hz-help.pd index cb4a279c2a..caa310b357 100644 --- a/ceammc/ext/doc/conv.bpm2hz-help.pd +++ b/ceammc/ext/doc/conv.bpm2hz-help.pd @@ -35,7 +35,7 @@ It is simple as /60 \, but more readable.; #X text 115 45 ::; #X obj 131 48 ui.link @title conv @url ceammc.conv-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #X text 587 520 see also:; #X obj 661 520 conv.bpm2ms; #N canvas 10 527 400 290 info 0; @@ -43,7 +43,7 @@ It is simple as /60 \, but more readable.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 conv.bpm2hz; #X text 10 76 category:; @@ -53,7 +53,7 @@ It is simple as /60 \, but more readable.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 conv \, time; #X text 10 186 website:; diff --git a/ceammc/ext/doc/conv.bpm2hz.pddoc b/ceammc/ext/doc/conv.bpm2hz.pddoc index 0665908cbd..bd0172689d 100644 --- a/ceammc/ext/doc/conv.bpm2hz.pddoc +++ b/ceammc/ext/doc/conv.bpm2hz.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky converts BPM to frequency in herz - GPL3 + GPL3 or later ceammc conv conv time diff --git a/ceammc/ext/doc/conv.bpm2ms-help.pd b/ceammc/ext/doc/conv.bpm2ms-help.pd index 2ea0d2a32f..8746960a6f 100644 --- a/ceammc/ext/doc/conv.bpm2ms-help.pd +++ b/ceammc/ext/doc/conv.bpm2ms-help.pd @@ -40,7 +40,7 @@ in ms. It is simple as (60 / f) * 1000 \, but more readable.; #X text 115 45 ::; #X obj 131 48 ui.link @title conv @url ceammc.conv-help.pd; #X obj 1 577 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 580 library: ceammc v0.7.1; +#X text 10 580 library: ceammc v0.8.0; #X text 485 592 see also:; #X obj 559 592 conv.bpm2sec; #X obj 661 592 conv.bpm2hz; @@ -49,7 +49,7 @@ in ms. It is simple as (60 / f) * 1000 \, but more readable.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 conv.bpm2ms; #X text 10 76 category:; @@ -59,7 +59,7 @@ in ms. It is simple as (60 / f) * 1000 \, but more readable.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 conv \, time; #X text 10 186 website:; diff --git a/ceammc/ext/doc/conv.bpm2ms.pddoc b/ceammc/ext/doc/conv.bpm2ms.pddoc index 14e297a8c4..5fb19487f9 100644 --- a/ceammc/ext/doc/conv.bpm2ms.pddoc +++ b/ceammc/ext/doc/conv.bpm2ms.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky convert frequency in BPM to period in milliseconds - GPL3 + GPL3 or later ceammc conv conv time diff --git a/ceammc/ext/doc/conv.bpm2sec-help.pd b/ceammc/ext/doc/conv.bpm2sec-help.pd index 1ed794d880..929763abb6 100644 --- a/ceammc/ext/doc/conv.bpm2sec-help.pd +++ b/ceammc/ext/doc/conv.bpm2sec-help.pd @@ -26,7 +26,7 @@ in seconds. It's simple as 60/f \, but more readable.; #X text 115 45 ::; #X obj 131 48 ui.link @title conv @url ceammc.conv-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #X text 493 520 see also:; #X obj 567 520 conv.bpm2ms; #X obj 661 520 conv.bpm2hz; @@ -35,7 +35,7 @@ in seconds. It's simple as 60/f \, but more readable.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 conv.bpm2sec; #X text 10 76 category:; @@ -45,7 +45,7 @@ in seconds. It's simple as 60/f \, but more readable.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 conv \, time; #X text 10 186 website:; diff --git a/ceammc/ext/doc/conv.bpm2sec.pddoc b/ceammc/ext/doc/conv.bpm2sec.pddoc index 5fc011a766..f286b4dc76 100644 --- a/ceammc/ext/doc/conv.bpm2sec.pddoc +++ b/ceammc/ext/doc/conv.bpm2sec.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky convert frequency in BPM to period in seconds - GPL3 + GPL3 or later ceammc conv conv time diff --git a/ceammc/ext/doc/conv.car2pol-help.pd b/ceammc/ext/doc/conv.car2pol-help.pd new file mode 100644 index 0000000000..465ece758e --- /dev/null +++ b/ceammc/ext/doc/conv.car2pol-help.pd @@ -0,0 +1,58 @@ +#N canvas 0 0 785 555 12; +#X declare -lib ceammc; +#X obj 506 50 cnv 1 259 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 506 50 convert cartesian coords to polar; +#X obj 1 1 cnv 5 765 40 empty empty conv.car2pol 20 20 0 20 -104026 +-4096 0; +#X obj 570 11 car->pol; +#X obj 653 11 conv.car2pol; +#X obj 50 118 ui.slider2d @size 100 100; +#X obj 50 234 car->pol; +#X obj 50 262 ui.display @display_type 1 @size 150 18; +#X obj 20 302 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 307 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +0; +#X text 110 308 1\.; +#X text 150 308 *list*; +#X text 245 308 x \, y coord pair.; +#X obj 20 338 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 343 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 344 1\.; +#X text 245 344 radius and angle (in radians) pair.; +#X obj 10 48 ui.link @title index @url ../index-help.pd; +#X text 51 45 ::; +#X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; +#X text 115 45 ::; +#X obj 131 48 ui.link @title conv @url ceammc.conv-help.pd; +#X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 508 library: ceammc v0.8.0; +#X text 579 520 see also:; +#X obj 653 520 conv.pol2car; +#N canvas 10 527 400 290 info 0; +#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; +#X text 10 10 library:; +#X text 120 10 ceammc; +#X text 10 32 version:; +#X text 120 32 0.8.0; +#X text 10 54 object:; +#X text 120 54 conv.car2pol; +#X text 10 76 category:; +#X text 120 76 conv; +#X text 10 98 since:; +#X text 120 98 0.8; +#X text 10 120 authors:; +#X text 120 120 Serge Poltavsky; +#X text 10 142 license:; +#X text 120 142 GPL3 or later; +#X text 10 164 keywords:; +#X text 120 164 conv \, polar \, cartesian; +#X text 10 186 website:; +#X obj 120 189 ui.link @title https://github.com/uliss/pure-data @url +https://github.com/uliss/pure-data; +#X obj 120 208 declare -lib ceammc; +#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 120 268 generated by pddoc; +#X restore 10 527 pd info; +#X connect 5 0 6 0; +#X connect 6 0 7 0; \ No newline at end of file diff --git a/ceammc/ext/doc/conv.car2pol.pddoc b/ceammc/ext/doc/conv.car2pol.pddoc new file mode 100644 index 0000000000..6d4cad3001 --- /dev/null +++ b/ceammc/ext/doc/conv.car2pol.pddoc @@ -0,0 +1,48 @@ + + + + conv.car2pol + + + Serge Poltavsky + + convert cartesian coords to polar + GPL3 or later + ceammc + conv + conv polar cartesian + 0.8 + + conv.pol2car + + + car->pol + + + + + x, y coord pair + + + + radius and angle (in radians) pair + + + +pol] +| +[ui.display @display_type=1] +]]> + + + + diff --git a/ceammc/ext/doc/conv.cc2amp-help.pd b/ceammc/ext/doc/conv.cc2amp-help.pd index 679d9479c1..b003e592e0 100644 --- a/ceammc/ext/doc/conv.cc2amp-help.pd +++ b/ceammc/ext/doc/conv.cc2amp-help.pd @@ -52,7 +52,7 @@ value: 1\.; #X text 115 45 ::; #X obj 131 48 ui.link @title conv @url ceammc.conv-help.pd; #X obj 1 585 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 588 library: ceammc v0.7.1; +#X text 10 588 library: ceammc v0.8.0; #X text 522 600 see also:; #X obj 596 600 lin->lin; #X obj 668 600 lin->curve; @@ -61,7 +61,7 @@ value: 1\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 conv.cc2amp; #X text 10 76 category:; @@ -71,7 +71,7 @@ value: 1\.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 conv \, cc \, amp; #X text 10 186 website:; diff --git a/ceammc/ext/doc/conv.cc2amp.pddoc b/ceammc/ext/doc/conv.cc2amp.pddoc index e78511edfe..114d1c34f8 100644 --- a/ceammc/ext/doc/conv.cc2amp.pddoc +++ b/ceammc/ext/doc/conv.cc2amp.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky convert from MIDI Control Change range - GPL3 + GPL3 or later ceammc conv conv cc amp diff --git a/ceammc/ext/doc/conv.dbfs2amp-help.pd b/ceammc/ext/doc/conv.dbfs2amp-help.pd index c8f704d359..f9f5d9a479 100644 --- a/ceammc/ext/doc/conv.dbfs2amp-help.pd +++ b/ceammc/ext/doc/conv.dbfs2amp-help.pd @@ -8,12 +8,12 @@ #X obj 646 11 conv.dbfs2amp; #X obj 210 80 cnv 1 555 35 empty empty empty 17 7 0 10 -257983 -1 0; #X text 215 80 Note: db values <= -144 are converted to 0; -#X obj 50 143 ui.hsl; -#X floatatom 50 172 5 0 0 0 - - -; +#X obj 50 143 ui.hsl @min -144 @max 6; +#X floatatom 50 172 8 0 0 0 - - -; #X obj 50 201 dbfs->amp; -#X floatatom 50 230 5 0 0 0 - - -; +#X floatatom 50 230 8 0 0 0 - - -; #X obj 50 259 amp->dbfs; -#X floatatom 50 287 5 0 0 0 - - -; +#X floatatom 50 287 8 0 0 0 - - -; #X obj 20 326 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 331 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; @@ -33,7 +33,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title conv @url ceammc.conv-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #X text 601 520 see also:; #X obj 675 520 amp->dbfs; #N canvas 10 527 400 290 info 0; @@ -41,7 +41,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 conv.dbfs2amp; #X text 10 76 category:; @@ -51,7 +51,7 @@ #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 conv \, amp \, dbfs \, decibel; #X text 10 186 website:; diff --git a/ceammc/ext/doc/conv.dbfs2amp.pddoc b/ceammc/ext/doc/conv.dbfs2amp.pddoc index 59119a2cb5..60b12d2adf 100644 --- a/ceammc/ext/doc/conv.dbfs2amp.pddoc +++ b/ceammc/ext/doc/conv.dbfs2amp.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky convert decibel full scale to amplitude - GPL3 + GPL3 or later ceammc conv conv amp dbfs decibel @@ -34,17 +34,17 @@ amp] | -[F] +[F digits=8] | [amp->dbfs] | -[F] +[F digits=8] ]]> diff --git a/ceammc/ext/doc/conv.lin2curve-help.pd b/ceammc/ext/doc/conv.lin2curve-help.pd index ae732e87b8..28436db613 100644 --- a/ceammc/ext/doc/conv.lin2curve-help.pd +++ b/ceammc/ext/doc/conv.lin2curve-help.pd @@ -122,7 +122,7 @@ value: 0\.; #X text 115 45 ::; #X obj 131 48 ui.link @title conv @url ceammc.conv-help.pd; #X obj 1 1037 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1040 library: ceammc v0.7.1; +#X text 10 1040 library: ceammc v0.8.0; #X text 579 1052 see also:; #X obj 653 1052 conv.lin2exp; #N canvas 10 1059 400 290 info 0; @@ -130,7 +130,7 @@ value: 0\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 conv.lin2curve; #X text 10 76 category:; @@ -140,7 +140,7 @@ value: 0\.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 convert \, exponential \, curve; #X text 10 186 website:; diff --git a/ceammc/ext/doc/conv.lin2curve.pddoc b/ceammc/ext/doc/conv.lin2curve.pddoc index 8ff1ddbba7..c302761572 100644 --- a/ceammc/ext/doc/conv.lin2curve.pddoc +++ b/ceammc/ext/doc/conv.lin2curve.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky map linear to exponential range with 0 allowed. - GPL3 + GPL3 or later ceammc conv convert exponential curve diff --git a/ceammc/ext/doc/conv.lin2exp-help.pd b/ceammc/ext/doc/conv.lin2exp-help.pd index 9c4d227785..c49766fe6a 100644 --- a/ceammc/ext/doc/conv.lin2exp-help.pd +++ b/ceammc/ext/doc/conv.lin2exp-help.pd @@ -110,7 +110,7 @@ value: 0.01\.; #X text 115 45 ::; #X obj 131 48 ui.link @title conv @url ceammc.conv-help.pd; #X obj 1 894 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 897 library: ceammc v0.7.1; +#X text 10 897 library: ceammc v0.8.0; #X text 464 909 see also:; #X obj 538 909 conv.lin2lin; #X obj 639 909 conv.lin2curve; @@ -119,7 +119,7 @@ value: 0.01\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 conv.lin2exp; #X text 10 76 category:; @@ -129,7 +129,7 @@ value: 0.01\.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 convert \, exponential; #X text 10 186 website:; diff --git a/ceammc/ext/doc/conv.lin2exp.pddoc b/ceammc/ext/doc/conv.lin2exp.pddoc index 564de3f8fb..a47fbbc4fd 100644 --- a/ceammc/ext/doc/conv.lin2exp.pddoc +++ b/ceammc/ext/doc/conv.lin2exp.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky maps linear range to exponential range - GPL3 + GPL3 or later ceammc conv convert exponential diff --git a/ceammc/ext/doc/conv.lin2lin-help.pd b/ceammc/ext/doc/conv.lin2lin-help.pd index 05d733b436..2d5f37b603 100644 --- a/ceammc/ext/doc/conv.lin2lin-help.pd +++ b/ceammc/ext/doc/conv.lin2lin-help.pd @@ -63,27 +63,29 @@ value: 0\.; 0; #X text 110 732 1\.; #X text 150 732 *float*; -#X text 245 732 input value.; -#X obj 20 762 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 767 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 245 732 input float.; +#X text 150 752 *list*; +#X text 245 752 input list.; +#X obj 20 782 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 787 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 768 1\.; -#X text 245 768 converted value.; +#X text 110 788 1\.; +#X text 245 788 converted float/list.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title conv @url ceammc.conv-help.pd; -#X obj 1 818 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 821 library: ceammc v0.7.1; -#X text 586 833 see also:; -#X obj 660 833 conv.cc2amp; -#N canvas 10 840 400 290 info 0; +#X obj 1 838 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 841 library: ceammc v0.8.0; +#X text 586 853 see also:; +#X obj 660 853 conv.cc2amp; +#N canvas 10 860 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 conv.lin2lin; #X text 10 76 category:; @@ -93,7 +95,7 @@ value: 0\.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 convert \, linear; #X text 10 186 website:; @@ -102,7 +104,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 840 pd info; +#X restore 10 860 pd info; #X connect 7 0 8 0; #X connect 6 0 9 0; #X connect 8 0 9 0; diff --git a/ceammc/ext/doc/conv.lin2lin.pddoc b/ceammc/ext/doc/conv.lin2lin.pddoc index c7d49c3516..1958d5e3b2 100644 --- a/ceammc/ext/doc/conv.lin2lin.pddoc +++ b/ceammc/ext/doc/conv.lin2lin.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky convert from one linear range to another - GPL3 + GPL3 or later ceammc conv convert linear @@ -40,11 +40,12 @@ - input value + input float + input list - converted value + converted float/list diff --git a/ceammc/ext/doc/conv.list2props-help.pd b/ceammc/ext/doc/conv.list2props-help.pd index 48eeddabcf..a0080f5a82 100644 --- a/ceammc/ext/doc/conv.list2props-help.pd +++ b/ceammc/ext/doc/conv.list2props-help.pd @@ -7,10 +7,11 @@ #X obj 431 11 list->props; #X obj 535 11 any->props; #X obj 632 11 conv.list2props; -#X msg 50 118 @prop1 100 @prop2 A B C @prop3; -#X obj 50 147 list->props; +#X msg 50 118 list 1 2 3 @prop1 100 @prop2 A B C @prop3; +#X obj 50 147 list->props, f 20; #X obj 50 176 route @prop1; #X obj 203 176 print; +#X obj 280 176 ui.display @size 150 18; #X floatatom 50 205 5 0 0 0 - - -; #X obj 20 244 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 249 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 @@ -25,19 +26,21 @@ -49933 0; #X text 110 306 1\.; #X text 245 306 sequence of @prop messages.; +#X text 110 326 2\.; +#X text 245 326 list of non prop arguments.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title conv @url ceammc.conv-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #N canvas 10 527 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 conv.list2props; #X text 10 76 category:; @@ -47,7 +50,7 @@ #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 conv \, properties; #X text 10 186 website:; @@ -60,4 +63,5 @@ https://github.com/uliss/pure-data; #X connect 6 0 7 0; #X connect 7 0 8 0; #X connect 7 0 9 0; -#X connect 8 0 10 0; \ No newline at end of file +#X connect 7 1 10 0; +#X connect 8 0 11 0; \ No newline at end of file diff --git a/ceammc/ext/doc/conv.list2props.pddoc b/ceammc/ext/doc/conv.list2props.pddoc index f71c642cb1..c096e985b4 100644 --- a/ceammc/ext/doc/conv.list2props.pddoc +++ b/ceammc/ext/doc/conv.list2props.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky converts list to series of property messages - GPL3 + GPL3 or later ceammc conv conv properties @@ -25,15 +25,16 @@ sequence of @prop messages + list of non prop arguments props ] -| | -[route @prop1] [print] +[list->props {w=20} ] +| | ^| +[route @prop1] [print] [ui.display] | [F] ]]> diff --git a/ceammc/ext/doc/conv.midi2freq-help.pd b/ceammc/ext/doc/conv.midi2freq-help.pd index a1eb02282e..a76e328567 100644 --- a/ceammc/ext/doc/conv.midi2freq-help.pd +++ b/ceammc/ext/doc/conv.midi2freq-help.pd @@ -37,7 +37,7 @@ pythagorean rameau valotti zarlino; #X msg 110 583 @t; #X text 245 583 Get/Set temperament. Type: symbol. Default value: eq. Allowed values: eq \, just \, ganassi \, meantone \, kirnberger3 \, -pythagorean \, rameau \, valotti \, zarlino.; +pythagorean \, valotti \, zarlino.; #X obj 20 650 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 655 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; @@ -57,7 +57,7 @@ pythagorean \, rameau \, valotti \, zarlino.; #X text 115 45 ::; #X obj 131 48 ui.link @title conv @url ceammc.conv-help.pd; #X obj 1 762 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 765 library: ceammc v0.7.1; +#X text 10 765 library: ceammc v0.8.0; #X text 637 777 see also:; #X obj 711 777 mtof; #N canvas 10 784 400 290 info 0; @@ -65,7 +65,7 @@ pythagorean \, rameau \, valotti \, zarlino.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 conv.midi2freq; #X text 10 76 category:; @@ -75,7 +75,7 @@ pythagorean \, rameau \, valotti \, zarlino.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 conv \, freq \, midi; #X text 10 186 website:; diff --git a/ceammc/ext/doc/conv.midi2freq.pddoc b/ceammc/ext/doc/conv.midi2freq.pddoc index bcc37bd53d..d0cb675aab 100644 --- a/ceammc/ext/doc/conv.midi2freq.pddoc +++ b/ceammc/ext/doc/conv.midi2freq.pddoc @@ -8,7 +8,7 @@ convert from midi pitch to frequency in hz (with various base A and temperament) - GPL3 + GPL3 or later ceammc conv conv freq midi @@ -29,7 +29,7 @@ A pitch frequency + enum="eq just ganassi meantone kirnberger3 pythagorean valotti zarlino"> temperament diff --git a/ceammc/ext/doc/conv.phase2rad-help.pd b/ceammc/ext/doc/conv.phase2rad-help.pd new file mode 100644 index 0000000000..cb55e78054 --- /dev/null +++ b/ceammc/ext/doc/conv.phase2rad-help.pd @@ -0,0 +1,66 @@ +#N canvas 0 0 785 555 12; +#X declare -lib ceammc; +#X obj 484 50 cnv 1 281 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 484 50 convert phase value [0-1] to radians; +#X obj 1 1 cnv 5 765 40 empty empty conv.phase2rad 20 20 0 20 -104026 +-4096 0; +#X obj 542 11 phase->rad; +#X obj 639 11 conv.phase2rad; +#X obj 50 118 ui.knob; +#X floatatom 50 176 5 0 0 0 - - -; +#X obj 50 205 phase->rad; +#X floatatom 50 234 5 0 0 0 - - -; +#X obj 50 262 rad->phase; +#X obj 50 291 ui.knob; +#X obj 20 330 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 335 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +0; +#X text 110 336 1\.; +#X text 150 336 *float*; +#X text 245 336 input value.; +#X text 150 356 *list*; +#X text 245 356 input values.; +#X obj 20 386 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 391 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 392 1\.; +#X text 245 392 converted value.; +#X obj 10 48 ui.link @title index @url ../index-help.pd; +#X text 51 45 ::; +#X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; +#X text 115 45 ::; +#X obj 131 48 ui.link @title conv @url ceammc.conv-help.pd; +#X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 508 library: ceammc v0.8.0; +#X text 565 520 see also:; +#X obj 639 520 conv.rad2phase; +#N canvas 10 527 400 290 info 0; +#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; +#X text 10 10 library:; +#X text 120 10 ceammc; +#X text 10 32 version:; +#X text 120 32 0.8.0; +#X text 10 54 object:; +#X text 120 54 conv.phase2rad; +#X text 10 76 category:; +#X text 120 76 conv; +#X text 10 98 since:; +#X text 120 98 0.8; +#X text 10 120 authors:; +#X text 120 120 Serge Poltavsky; +#X text 10 142 license:; +#X text 120 142 GPL3 or later; +#X text 10 164 keywords:; +#X text 120 164 conv \, phase \, radians; +#X text 10 186 website:; +#X obj 120 189 ui.link @title https://github.com/uliss/pure-data @url +https://github.com/uliss/pure-data; +#X obj 120 208 declare -lib ceammc; +#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 120 268 generated by pddoc; +#X restore 10 527 pd info; +#X connect 5 0 6 0; +#X connect 6 0 7 0; +#X connect 7 0 8 0; +#X connect 8 0 9 0; +#X connect 9 0 10 0; \ No newline at end of file diff --git a/ceammc/ext/doc/conv.phase2rad.pddoc b/ceammc/ext/doc/conv.phase2rad.pddoc new file mode 100644 index 0000000000..6f5ed83179 --- /dev/null +++ b/ceammc/ext/doc/conv.phase2rad.pddoc @@ -0,0 +1,51 @@ + + + + conv.phase2rad + + + Serge Poltavsky + + convert phase value [0-1] to radians + GPL3 or later + ceammc + conv + conv phase radians + 0.8 + + conv.rad2phase + + + phase->rad + + + + + input value + input values + + + + converted value + + + +rad] +| +[F] +| +[rad->phase] +| +[ui.knob] +]]> + + + + diff --git a/ceammc/ext/doc/conv.phase2rad~-help.pd b/ceammc/ext/doc/conv.phase2rad~-help.pd new file mode 100644 index 0000000000..c8cdf2da14 --- /dev/null +++ b/ceammc/ext/doc/conv.phase2rad~-help.pd @@ -0,0 +1,58 @@ +#N canvas 0 0 785 555 12; +#X declare -lib ceammc; +#X obj 484 50 cnv 1 281 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 484 50 convert phase value [0-1] to radians; +#X obj 1 1 cnv 5 765 40 empty empty conv.phase2rad~ 20 20 0 20 -104026 +-4096 0; +#X obj 526 11 phase->rad~; +#X obj 631 11 conv.phase2rad~; +#X obj 50 118 lfo.saw~ 0.1; +#X obj 203 118 ui.dsp~; +#X obj 50 147 phase->rad~; +#X obj 50 176 ui.n~; +#X obj 20 215 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 220 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +0; +#X text 110 221 1\.; +#X text 245 221 input value.; +#X obj 20 251 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 256 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 257 1\.; +#X text 245 257 converted value.; +#X obj 10 48 ui.link @title index @url ../index-help.pd; +#X text 51 45 ::; +#X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; +#X text 115 45 ::; +#X obj 131 48 ui.link @title conv @url ceammc.conv-help.pd; +#X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 508 library: ceammc v0.8.0; +#X text 557 520 see also:; +#X obj 631 520 conv.rad2phase~; +#N canvas 10 527 400 290 info 0; +#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; +#X text 10 10 library:; +#X text 120 10 ceammc; +#X text 10 32 version:; +#X text 120 32 0.8.0; +#X text 10 54 object:; +#X text 120 54 conv.phase2rad~; +#X text 10 76 category:; +#X text 120 76 conv; +#X text 10 98 since:; +#X text 120 98 0.8; +#X text 10 120 authors:; +#X text 120 120 Serge Poltavsky; +#X text 10 142 license:; +#X text 120 142 GPL3 or later; +#X text 10 164 keywords:; +#X text 120 164 conv \, phase \, radians; +#X text 10 186 website:; +#X obj 120 189 ui.link @title https://github.com/uliss/pure-data @url +https://github.com/uliss/pure-data; +#X obj 120 208 declare -lib ceammc; +#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 120 268 generated by pddoc; +#X restore 10 527 pd info; +#X connect 5 0 7 0; +#X connect 7 0 8 0; \ No newline at end of file diff --git a/ceammc/ext/doc/conv.phase2rad~.pddoc b/ceammc/ext/doc/conv.phase2rad~.pddoc new file mode 100644 index 0000000000..d761d96752 --- /dev/null +++ b/ceammc/ext/doc/conv.phase2rad~.pddoc @@ -0,0 +1,42 @@ + + + + conv.phase2rad~ + + + Serge Poltavsky + + convert phase value [0-1] to radians + GPL3 or later + ceammc + conv + conv phase radians + 0.8 + + conv.rad2phase~ + + + phase->rad~ + + + + + input value + + + + converted value + + + +rad~] +| +[ui.n~] +]]> + + + + diff --git a/ceammc/ext/doc/conv.pitch2midi-help.pd b/ceammc/ext/doc/conv.pitch2midi-help.pd index 5e2e751c8b..6a186884ec 100644 --- a/ceammc/ext/doc/conv.pitch2midi-help.pd +++ b/ceammc/ext/doc/conv.pitch2midi-help.pd @@ -37,13 +37,13 @@ C4 is middle C (MIDI: 60); #X text 115 45 ::; #X obj 131 48 ui.link @title conv @url ceammc.conv-help.pd; #X obj 1 535 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 538 library: ceammc v0.7.1; +#X text 10 538 library: ceammc v0.8.0; #N canvas 10 557 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 conv.pitch2midi; #X text 10 76 category:; @@ -53,7 +53,7 @@ C4 is middle C (MIDI: 60); #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 conv \, pitch \, midi; #X text 10 186 website:; diff --git a/ceammc/ext/doc/conv.pitch2midi.pddoc b/ceammc/ext/doc/conv.pitch2midi.pddoc index 59608a29cd..8b9e5c210a 100644 --- a/ceammc/ext/doc/conv.pitch2midi.pddoc +++ b/ceammc/ext/doc/conv.pitch2midi.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky converts symbol pitch name to MIDI note number - GPL3 + GPL3 or later ceammc conv conv pitch midi diff --git a/ceammc/ext/doc/conv.pol2car-help.pd b/ceammc/ext/doc/conv.pol2car-help.pd new file mode 100644 index 0000000000..372062c2ed --- /dev/null +++ b/ceammc/ext/doc/conv.pol2car-help.pd @@ -0,0 +1,64 @@ +#N canvas 0 0 785 555 12; +#X declare -lib ceammc; +#X obj 431 50 cnv 1 334 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 431 50 convert from polar coordinates to cartesian; +#X obj 1 1 cnv 5 765 40 empty empty conv.pol2car 20 20 0 20 -104026 +-4096 0; +#X obj 570 11 pol->car; +#X obj 653 11 conv.pol2car; +#X obj 50 118 ui.knob; +#X floatatom 50 176 5 0 0 0 - - -; +#X obj 50 205 phase->rad; +#X msg 50 234 1 \$1; +#X obj 50 262 pol->car; +#X obj 50 291 ui.slider2d @size 100 100; +#X obj 20 413 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 418 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +0; +#X text 110 419 1\.; +#X text 150 419 *list*; +#X text 245 419 radius and angle (in radians) pair.; +#X obj 20 449 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 454 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 455 1\.; +#X text 245 455 x \, y coordinates pair.; +#X obj 10 48 ui.link @title index @url ../index-help.pd; +#X text 51 45 ::; +#X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; +#X text 115 45 ::; +#X obj 131 48 ui.link @title conv @url ceammc.conv-help.pd; +#X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 508 library: ceammc v0.8.0; +#X text 579 520 see also:; +#X obj 653 520 conv.car2pol; +#N canvas 10 527 400 290 info 0; +#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; +#X text 10 10 library:; +#X text 120 10 ceammc; +#X text 10 32 version:; +#X text 120 32 0.8.0; +#X text 10 54 object:; +#X text 120 54 conv.pol2car; +#X text 10 76 category:; +#X text 120 76 conv; +#X text 10 98 since:; +#X text 120 98 0.8; +#X text 10 120 authors:; +#X text 120 120 Serge Poltavsky; +#X text 10 142 license:; +#X text 120 142 GPL3 or later; +#X text 10 164 keywords:; +#X text 120 164 conv \, polar \, cartesian; +#X text 10 186 website:; +#X obj 120 189 ui.link @title https://github.com/uliss/pure-data @url +https://github.com/uliss/pure-data; +#X obj 120 208 declare -lib ceammc; +#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 120 268 generated by pddoc; +#X restore 10 527 pd info; +#X connect 5 0 6 0; +#X connect 6 0 7 0; +#X connect 7 0 8 0; +#X connect 8 0 9 0; +#X connect 9 0 10 0; \ No newline at end of file diff --git a/ceammc/ext/doc/conv.pol2car.pddoc b/ceammc/ext/doc/conv.pol2car.pddoc new file mode 100644 index 0000000000..ea6fe4d896 --- /dev/null +++ b/ceammc/ext/doc/conv.pol2car.pddoc @@ -0,0 +1,53 @@ + + + + conv.pol2car + + + Serge Poltavsky + + convert from polar coordinates to cartesian + GPL3 or later + ceammc + conv + conv polar cartesian + 0.8 + + conv.car2pol + + + pol->car + + + + + radius and angle (in radians) pair + + + + x, y coordinates pair + + + +rad] +| +[1 $1( +| +[pol->car] +| +[ui.slider2d] + + + +]]> + + + + diff --git a/ceammc/ext/doc/conv.rad2phase-help.pd b/ceammc/ext/doc/conv.rad2phase-help.pd new file mode 100644 index 0000000000..3096dc00ee --- /dev/null +++ b/ceammc/ext/doc/conv.rad2phase-help.pd @@ -0,0 +1,64 @@ +#N canvas 0 0 785 555 12; +#X declare -lib ceammc; +#X obj 530 50 cnv 1 235 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 530 50 convert radians value to phase; +#X obj 1 1 cnv 5 765 40 empty empty conv.rad2phase 20 20 0 20 -104026 +-4096 0; +#X obj 543 11 rad->phase; +#X obj 639 11 conv.rad2phase; +#X obj 50 118 ui.hsl @min 0 @max 7; +#X obj 50 147 rad->phase; +#X obj 50 176 ui.knob; +#X obj 50 234 phase->rad; +#X floatatom 50 262 5 0 0 0 - - -; +#X obj 20 301 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 306 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +0; +#X text 110 307 1\.; +#X text 150 307 *float*; +#X text 245 307 input value.; +#X text 150 327 *list*; +#X text 245 327 input values.; +#X obj 20 357 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 362 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 363 1\.; +#X text 245 363 converted value.; +#X obj 10 48 ui.link @title index @url ../index-help.pd; +#X text 51 45 ::; +#X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; +#X text 115 45 ::; +#X obj 131 48 ui.link @title conv @url ceammc.conv-help.pd; +#X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 508 library: ceammc v0.8.0; +#X text 565 520 see also:; +#X obj 639 520 conv.phase2rad; +#N canvas 10 527 400 290 info 0; +#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; +#X text 10 10 library:; +#X text 120 10 ceammc; +#X text 10 32 version:; +#X text 120 32 0.8.0; +#X text 10 54 object:; +#X text 120 54 conv.rad2phase; +#X text 10 76 category:; +#X text 120 76 conv; +#X text 10 98 since:; +#X text 120 98 0.8; +#X text 10 120 authors:; +#X text 120 120 Serge Poltavsky; +#X text 10 142 license:; +#X text 120 142 GPL3 or later; +#X text 10 164 keywords:; +#X text 120 164 conv \, phase \, radians; +#X text 10 186 website:; +#X obj 120 189 ui.link @title https://github.com/uliss/pure-data @url +https://github.com/uliss/pure-data; +#X obj 120 208 declare -lib ceammc; +#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 120 268 generated by pddoc; +#X restore 10 527 pd info; +#X connect 5 0 6 0; +#X connect 6 0 7 0; +#X connect 7 0 8 0; +#X connect 8 0 9 0; \ No newline at end of file diff --git a/ceammc/ext/doc/conv.rad2phase.pddoc b/ceammc/ext/doc/conv.rad2phase.pddoc new file mode 100644 index 0000000000..9d07c36610 --- /dev/null +++ b/ceammc/ext/doc/conv.rad2phase.pddoc @@ -0,0 +1,49 @@ + + + + conv.rad2phase + + + Serge Poltavsky + + convert radians value to phase + GPL3 or later + ceammc + conv + conv phase radians + 0.8 + + conv.phase2rad + + + rad->phase + + + + + input value + input values + + + + converted value + + + +phase] +| +[ui.knob] +| +| +| +[phase->rad] +| +[F] +]]> + + + + diff --git a/ceammc/ext/doc/conv.rad2phase~-help.pd b/ceammc/ext/doc/conv.rad2phase~-help.pd new file mode 100644 index 0000000000..2716b90b48 --- /dev/null +++ b/ceammc/ext/doc/conv.rad2phase~-help.pd @@ -0,0 +1,60 @@ +#N canvas 0 0 785 555 12; +#X declare -lib ceammc; +#X obj 530 50 cnv 1 235 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 530 50 convert radians value to phase; +#X obj 1 1 cnv 5 765 40 empty empty conv.rad2phase~ 20 20 0 20 -104026 +-4096 0; +#X obj 527 11 rad->phase~; +#X obj 631 11 conv.rad2phase~; +#X obj 50 118 lfo.saw~ 0.1; +#X obj 203 118 ui.dsp~; +#X obj 50 147 phase->rad~; +#X obj 50 176 rad->phase~; +#X obj 50 205 ui.scope~ @size 150 100; +#X obj 20 327 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 332 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +0; +#X text 110 333 1\.; +#X text 245 333 input value.; +#X obj 20 363 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 368 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 369 1\.; +#X text 245 369 converted value.; +#X obj 10 48 ui.link @title index @url ../index-help.pd; +#X text 51 45 ::; +#X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; +#X text 115 45 ::; +#X obj 131 48 ui.link @title conv @url ceammc.conv-help.pd; +#X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 508 library: ceammc v0.8.0; +#X text 557 520 see also:; +#X obj 631 520 conv.phase2rad~; +#N canvas 10 527 400 290 info 0; +#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; +#X text 10 10 library:; +#X text 120 10 ceammc; +#X text 10 32 version:; +#X text 120 32 0.8.0; +#X text 10 54 object:; +#X text 120 54 conv.rad2phase~; +#X text 10 76 category:; +#X text 120 76 conv; +#X text 10 98 since:; +#X text 120 98 0.8; +#X text 10 120 authors:; +#X text 120 120 Serge Poltavsky; +#X text 10 142 license:; +#X text 120 142 GPL3 or later; +#X text 10 164 keywords:; +#X text 120 164 conv \, phase \, radians; +#X text 10 186 website:; +#X obj 120 189 ui.link @title https://github.com/uliss/pure-data @url +https://github.com/uliss/pure-data; +#X obj 120 208 declare -lib ceammc; +#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 120 268 generated by pddoc; +#X restore 10 527 pd info; +#X connect 5 0 7 0; +#X connect 7 0 8 0; +#X connect 8 0 9 0; \ No newline at end of file diff --git a/ceammc/ext/doc/conv.rad2phase~.pddoc b/ceammc/ext/doc/conv.rad2phase~.pddoc new file mode 100644 index 0000000000..93a53ff0aa --- /dev/null +++ b/ceammc/ext/doc/conv.rad2phase~.pddoc @@ -0,0 +1,44 @@ + + + + conv.rad2phase~ + + + Serge Poltavsky + + convert radians value to phase + GPL3 or later + ceammc + conv + conv phase radians + 0.8 + + conv.phase2rad~ + + + rad->phase~ + + + + + input value + + + + converted value + + + +rad~] +| +[rad->phase~] +| +[ui.scope~] +]]> + + + + diff --git a/ceammc/ext/doc/conv.samp2sec-help.pd b/ceammc/ext/doc/conv.samp2sec-help.pd index 720af1c1f2..d451cb1151 100644 --- a/ceammc/ext/doc/conv.samp2sec-help.pd +++ b/ceammc/ext/doc/conv.samp2sec-help.pd @@ -30,7 +30,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title conv @url ceammc.conv-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #X text 572 520 see also:; #X obj 646 520 conv.sec2samp; #N canvas 10 527 400 290 info 0; @@ -38,7 +38,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 conv.samp2sec; #X text 10 76 category:; @@ -48,7 +48,7 @@ #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 conv \, samp; #X text 10 186 website:; diff --git a/ceammc/ext/doc/conv.samp2sec.pddoc b/ceammc/ext/doc/conv.samp2sec.pddoc index 26de0c2f43..c89cecb792 100644 --- a/ceammc/ext/doc/conv.samp2sec.pddoc +++ b/ceammc/ext/doc/conv.samp2sec.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky convert samples to time according to samplerate - GPL3 + GPL3 or later ceammc conv conv samp diff --git a/ceammc/ext/doc/conv.sec2samp-help.pd b/ceammc/ext/doc/conv.sec2samp-help.pd index 2af5d947cc..a4ec549665 100644 --- a/ceammc/ext/doc/conv.sec2samp-help.pd +++ b/ceammc/ext/doc/conv.sec2samp-help.pd @@ -31,7 +31,7 @@ to current samplerate; #X text 115 45 ::; #X obj 131 48 ui.link @title conv @url ceammc.conv-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #X text 572 520 see also:; #X obj 646 520 conv.samp2sec; #N canvas 10 527 400 290 info 0; @@ -39,7 +39,7 @@ to current samplerate; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 conv.sec2samp; #X text 10 76 category:; @@ -49,7 +49,7 @@ to current samplerate; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 conv \, samp \, sec; #X text 10 186 website:; diff --git a/ceammc/ext/doc/conv.sec2samp.pddoc b/ceammc/ext/doc/conv.sec2samp.pddoc index 068dd8fd36..004f88c30c 100644 --- a/ceammc/ext/doc/conv.sec2samp.pddoc +++ b/ceammc/ext/doc/conv.sec2samp.pddoc @@ -8,7 +8,7 @@ convert time in seconds to number of samples according to current samplerate - GPL3 + GPL3 or later ceammc conv conv samp sec diff --git a/ceammc/ext/doc/conv.sec2str-help.pd b/ceammc/ext/doc/conv.sec2str-help.pd index b1c86f3dc4..c7461452b3 100644 --- a/ceammc/ext/doc/conv.sec2str-help.pd +++ b/ceammc/ext/doc/conv.sec2str-help.pd @@ -43,7 +43,7 @@ as string.; #X text 115 45 ::; #X obj 131 48 ui.link @title conv @url ceammc.conv-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #X text 579 520 see also:; #X obj 653 520 conv.str2sec; #N canvas 10 527 400 290 info 0; @@ -51,7 +51,7 @@ as string.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 conv.sec2str; #X text 10 76 category:; @@ -61,7 +61,7 @@ as string.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 conv \, time; #X text 10 186 website:; diff --git a/ceammc/ext/doc/conv.sec2str.pddoc b/ceammc/ext/doc/conv.sec2str.pddoc index 34e4e3fd6d..1195302d12 100644 --- a/ceammc/ext/doc/conv.sec2str.pddoc +++ b/ceammc/ext/doc/conv.sec2str.pddoc @@ -8,7 +8,7 @@ converts float time in seconds to formated symbol (or string) - GPL3 + GPL3 or later ceammc conv conv time diff --git a/ceammc/ext/doc/conv.str2sec-help.pd b/ceammc/ext/doc/conv.str2sec-help.pd index b4af1bbd76..b0385dbdad 100644 --- a/ceammc/ext/doc/conv.str2sec-help.pd +++ b/ceammc/ext/doc/conv.str2sec-help.pd @@ -41,7 +41,7 @@ Type: float. Default value: -1\.; #X text 115 45 ::; #X obj 131 48 ui.link @title conv @url ceammc.conv-help.pd; #X obj 1 525 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 528 library: ceammc v0.7.1; +#X text 10 528 library: ceammc v0.8.0; #X text 579 540 see also:; #X obj 653 540 conv.sec2str; #N canvas 10 547 400 290 info 0; @@ -49,7 +49,7 @@ Type: float. Default value: -1\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 conv.str2sec; #X text 10 76 category:; @@ -59,7 +59,7 @@ Type: float. Default value: -1\.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 conv \, time; #X text 10 186 website:; diff --git a/ceammc/ext/doc/conv.str2sec.pddoc b/ceammc/ext/doc/conv.str2sec.pddoc index 021287fe44..c03b574e32 100644 --- a/ceammc/ext/doc/conv.str2sec.pddoc +++ b/ceammc/ext/doc/conv.str2sec.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky converts formatted time to float value in seconds - GPL3 + GPL3 or later ceammc conv conv time diff --git a/ceammc/ext/doc/data.dict-help.pd b/ceammc/ext/doc/data.dict-help.pd index 85ebf82b85..e425b259cc 100644 --- a/ceammc/ext/doc/data.dict-help.pd +++ b/ceammc/ext/doc/data.dict-help.pd @@ -27,12 +27,12 @@ are supported: ([a: ([A:1][B:2])]).; -49933 0; #X msg 110 426 @empty; #X text 245 426 (readonly) Get 1 if dict is empty \, otherwise 0\. -Type: int. Allowed values: 0 \, 1\.; +Type: int. Default value: 0\. Allowed values: 0 \, 1\.; #X msg 110 468 @keys; #X text 245 468 (readonly) Get keys of dictionary. Type: list.; #X msg 110 497 @size; #X text 245 497 (readonly) Get number of entries in dictionary. Type: -int. Min value: 0\.; +int. Default value: 0\. Min value: 0\.; #X obj 20 549 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 554 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; @@ -93,7 +93,7 @@ nothing. Arguments are:; #X text 115 45 ::; #X obj 131 48 ui.link @title data @url ceammc.data-help.pd; #X obj 1 1176 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1179 library: ceammc v0.7.1; +#X text 10 1179 library: ceammc v0.8.0; #X text 521 1191 see also:; #X obj 595 1191 data.set; #X obj 668 1191 data.mlist; @@ -102,7 +102,7 @@ nothing. Arguments are:; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 data.dict; #X text 10 76 category:; @@ -112,7 +112,7 @@ nothing. Arguments are:; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 data \, dictionary; #X text 10 186 website:; diff --git a/ceammc/ext/doc/data.dict.pddoc b/ceammc/ext/doc/data.dict.pddoc index 4126de15fd..5d187fc09b 100644 --- a/ceammc/ext/doc/data.dict.pddoc +++ b/ceammc/ext/doc/data.dict.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky dictionary container: store values by key - GPL3 + GPL3 or later ceammc data data dictionary @@ -27,10 +27,10 @@ keys of dictionary - 1 if dict is empty, - otherwise 0 - number of entries in - dictionary + 1 if dict is + empty, otherwise 0 + number of + entries in dictionary adds entry to dictionary diff --git a/ceammc/ext/doc/data.fifo-help.pd b/ceammc/ext/doc/data.fifo-help.pd index 3c523985d6..973504733f 100644 --- a/ceammc/ext/doc/data.fifo-help.pd +++ b/ceammc/ext/doc/data.fifo-help.pd @@ -79,7 +79,7 @@ any) are silently removed. Type: int. Min value: 0\.; #X text 115 45 ::; #X obj 131 48 ui.link @title data @url ceammc.data-help.pd; #X obj 1 945 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 948 library: ceammc v0.7.1; +#X text 10 948 library: ceammc v0.8.0; #X text 601 960 see also:; #X obj 675 960 data.list; #N canvas 10 967 400 290 info 0; @@ -87,7 +87,7 @@ any) are silently removed. Type: int. Min value: 0\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 data.fifo; #X text 10 76 category:; @@ -97,7 +97,7 @@ any) are silently removed. Type: int. Min value: 0\.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 data \, fifo; #X text 10 186 website:; diff --git a/ceammc/ext/doc/data.fifo.pddoc b/ceammc/ext/doc/data.fifo.pddoc index 8dd00936eb..9460d5c5a3 100644 --- a/ceammc/ext/doc/data.fifo.pddoc +++ b/ceammc/ext/doc/data.fifo.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky First-In-First-Out (FIFO) queue data container - GPL3 + GPL3 or later ceammc data data fifo diff --git a/ceammc/ext/doc/data.float-help.pd b/ceammc/ext/doc/data.float-help.pd index 24261de631..d227a44337 100644 --- a/ceammc/ext/doc/data.float-help.pd +++ b/ceammc/ext/doc/data.float-help.pd @@ -62,7 +62,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title data @url ceammc.data-help.pd; #X obj 1 767 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 770 library: ceammc v0.7.1; +#X text 10 770 library: ceammc v0.8.0; #X text 608 782 see also:; #X obj 682 782 data.int; #N canvas 10 789 400 290 info 0; @@ -70,7 +70,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 data.float; #X text 10 76 category:; @@ -80,7 +80,7 @@ #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 data \, float; #X text 10 186 website:; diff --git a/ceammc/ext/doc/data.float.pddoc b/ceammc/ext/doc/data.float.pddoc index a4dd9d11f8..07633c87e1 100644 --- a/ceammc/ext/doc/data.float.pddoc +++ b/ceammc/ext/doc/data.float.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky robust float object - GPL3 + GPL3 or later ceammc data data float diff --git a/ceammc/ext/doc/data.int-help.pd b/ceammc/ext/doc/data.int-help.pd index c1500d577f..c2efb133a2 100644 --- a/ceammc/ext/doc/data.int-help.pd +++ b/ceammc/ext/doc/data.int-help.pd @@ -62,7 +62,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title data @url ceammc.data-help.pd; #X obj 1 767 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 770 library: ceammc v0.7.1; +#X text 10 770 library: ceammc v0.8.0; #X text 594 782 see also:; #X obj 668 782 data.float; #N canvas 10 789 400 290 info 0; @@ -70,7 +70,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 data.int; #X text 10 76 category:; @@ -80,7 +80,7 @@ #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 data \, int; #X text 10 186 website:; diff --git a/ceammc/ext/doc/data.int.pddoc b/ceammc/ext/doc/data.int.pddoc index 4fd30f8220..5908e2de80 100644 --- a/ceammc/ext/doc/data.int.pddoc +++ b/ceammc/ext/doc/data.int.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky robust int object - GPL3 + GPL3 or later ceammc data data int diff --git a/ceammc/ext/doc/data.list-help.pd b/ceammc/ext/doc/data.list-help.pd index f3dd923cd4..6f6d607844 100644 --- a/ceammc/ext/doc/data.list-help.pd +++ b/ceammc/ext/doc/data.list-help.pd @@ -102,7 +102,7 @@ indexes are supported.; #X text 115 45 ::; #X obj 131 48 ui.link @title data @url ceammc.data-help.pd; #X obj 1 1215 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1218 library: ceammc v0.7.1; +#X text 10 1218 library: ceammc v0.8.0; #X text 601 1230 see also:; #X obj 675 1230 data.fifo; #N canvas 10 1237 400 290 info 0; @@ -110,7 +110,7 @@ indexes are supported.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 data.list; #X text 10 76 category:; @@ -120,7 +120,7 @@ indexes are supported.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 data \, list; #X text 10 186 website:; diff --git a/ceammc/ext/doc/data.list.pddoc b/ceammc/ext/doc/data.list.pddoc index 5ee26f8f08..2db847af56 100644 --- a/ceammc/ext/doc/data.list.pddoc +++ b/ceammc/ext/doc/data.list.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky list container - GPL3 + GPL3 or later ceammc data data list diff --git a/ceammc/ext/doc/data.mlist-help.pd b/ceammc/ext/doc/data.mlist-help.pd index 1639ae3813..4efca2e2c0 100644 --- a/ceammc/ext/doc/data.mlist-help.pd +++ b/ceammc/ext/doc/data.mlist-help.pd @@ -96,7 +96,7 @@ are:; #X text 115 45 ::; #X obj 131 48 ui.link @title data @url ceammc.data-help.pd; #X obj 1 1201 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1204 library: ceammc v0.7.1; +#X text 10 1204 library: ceammc v0.8.0; #X text 601 1216 see also:; #X obj 675 1216 data.list; #N canvas 10 1223 400 290 info 0; @@ -104,7 +104,7 @@ are:; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 data.mlist; #X text 10 76 category:; @@ -114,7 +114,7 @@ are:; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 data \, multilist; #X text 10 186 website:; diff --git a/ceammc/ext/doc/data.mlist.pddoc b/ceammc/ext/doc/data.mlist.pddoc index d46abc9898..8313f84288 100644 --- a/ceammc/ext/doc/data.mlist.pddoc +++ b/ceammc/ext/doc/data.mlist.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky multidimensional list container - GPL3 + GPL3 or later ceammc data data multilist diff --git a/ceammc/ext/doc/data.set-help.pd b/ceammc/ext/doc/data.set-help.pd index 32db647c7a..6c96aad0e9 100644 --- a/ceammc/ext/doc/data.set-help.pd +++ b/ceammc/ext/doc/data.set-help.pd @@ -71,7 +71,7 @@ Min value: 0\.; #X text 115 45 ::; #X obj 131 48 ui.link @title data @url ceammc.data-help.pd; #X obj 1 927 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 930 library: ceammc v0.7.1; +#X text 10 930 library: ceammc v0.8.0; #X text 521 942 see also:; #X obj 595 942 set->list; #X obj 675 942 data.list; @@ -80,7 +80,7 @@ Min value: 0\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 data.set; #X text 10 76 category:; @@ -90,7 +90,7 @@ Min value: 0\.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 data \, set; #X text 10 186 website:; diff --git a/ceammc/ext/doc/data.set.pddoc b/ceammc/ext/doc/data.set.pddoc index 8095dc94be..1dd56922f4 100644 --- a/ceammc/ext/doc/data.set.pddoc +++ b/ceammc/ext/doc/data.set.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky container that store unique elements - GPL3 + GPL3 or later ceammc data data set diff --git a/ceammc/ext/doc/data.set2list-help.pd b/ceammc/ext/doc/data.set2list-help.pd index 50585e5191..7dd366d871 100644 --- a/ceammc/ext/doc/data.set2list-help.pd +++ b/ceammc/ext/doc/data.set2list-help.pd @@ -42,7 +42,7 @@ use @sort flag to get sorted output; #X text 115 45 ::; #X obj 131 48 ui.link @title data @url ceammc.data-help.pd; #X obj 1 541 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 544 library: ceammc v0.7.1; +#X text 10 544 library: ceammc v0.8.0; #X text 608 556 see also:; #X obj 682 556 data.set; #N canvas 10 563 400 290 info 0; @@ -50,7 +50,7 @@ use @sort flag to get sorted output; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 data.set2list; #X text 10 76 category:; @@ -60,7 +60,7 @@ use @sort flag to get sorted output; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 data \, set \, list; #X text 10 186 website:; diff --git a/ceammc/ext/doc/data.set2list.pddoc b/ceammc/ext/doc/data.set2list.pddoc index 4edc6b500b..a10e0395cb 100644 --- a/ceammc/ext/doc/data.set2list.pddoc +++ b/ceammc/ext/doc/data.set2list.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky converts set to list - GPL3 + GPL3 or later ceammc data data set list diff --git a/ceammc/ext/doc/dict.contains-help.pd b/ceammc/ext/doc/dict.contains-help.pd index e38136a555..8005d6d3e6 100644 --- a/ceammc/ext/doc/dict.contains-help.pd +++ b/ceammc/ext/doc/dict.contains-help.pd @@ -37,7 +37,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title data @url ceammc.data-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #X text 521 520 see also:; #X obj 595 520 data.dict; #X obj 675 520 dict.keys; @@ -46,7 +46,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 dict.contains; #X text 10 76 category:; @@ -56,7 +56,7 @@ #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 contains \, dictionary; #X text 10 186 website:; diff --git a/ceammc/ext/doc/dict.contains.pddoc b/ceammc/ext/doc/dict.contains.pddoc index 2f02a29ebf..1e9d0d0dfe 100644 --- a/ceammc/ext/doc/dict.contains.pddoc +++ b/ceammc/ext/doc/dict.contains.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky predicate to check dict contains key - GPL3 + GPL3 or later ceammc data contains dictionary diff --git a/ceammc/ext/doc/dict.each-help.pd b/ceammc/ext/doc/dict.each-help.pd index 6cb8dc0d05..3dbd5d19c3 100644 --- a/ceammc/ext/doc/dict.each-help.pd +++ b/ceammc/ext/doc/dict.each-help.pd @@ -31,7 +31,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title data @url ceammc.data-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #X text 601 520 see also:; #X obj 675 520 data.dict; #N canvas 10 527 400 290 info 0; @@ -39,7 +39,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 dict.each; #X text 10 76 category:; @@ -49,7 +49,7 @@ #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 each \, iterate \, dictionary; #X text 10 186 website:; diff --git a/ceammc/ext/doc/dict.each.pddoc b/ceammc/ext/doc/dict.each.pddoc index d2d014986d..4db9abc3ea 100644 --- a/ceammc/ext/doc/dict.each.pddoc +++ b/ceammc/ext/doc/dict.each.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky map each value in dict - GPL3 + GPL3 or later ceammc data each iterate dictionary diff --git a/ceammc/ext/doc/dict.from_list-help.pd b/ceammc/ext/doc/dict.from_list-help.pd index 7450a1f7e8..31da16b0d5 100644 --- a/ceammc/ext/doc/dict.from_list-help.pd +++ b/ceammc/ext/doc/dict.from_list-help.pd @@ -44,7 +44,7 @@ Default value: 2\. Min value: 2\.; #X text 115 45 ::; #X obj 131 48 ui.link @title data @url ceammc.data-help.pd; #X obj 1 553 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 556 library: ceammc v0.7.1; +#X text 10 556 library: ceammc v0.8.0; #X text 601 568 see also:; #X obj 675 568 data.dict; #N canvas 10 575 400 290 info 0; @@ -52,7 +52,7 @@ Default value: 2\. Min value: 2\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 dict.from_list; #X text 10 76 category:; @@ -62,7 +62,7 @@ Default value: 2\. Min value: 2\.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 dictionary; #X text 10 186 website:; diff --git a/ceammc/ext/doc/dict.from_list.pddoc b/ceammc/ext/doc/dict.from_list.pddoc index 07b69cbe1c..1609e285c8 100644 --- a/ceammc/ext/doc/dict.from_list.pddoc +++ b/ceammc/ext/doc/dict.from_list.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky creates dictionary from list - GPL3 + GPL3 or later ceammc data dictionary diff --git a/ceammc/ext/doc/dict.get-help.pd b/ceammc/ext/doc/dict.get-help.pd index 4578e37403..bd9a393796 100644 --- a/ceammc/ext/doc/dict.get-help.pd +++ b/ceammc/ext/doc/dict.get-help.pd @@ -40,7 +40,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title data @url ceammc.data-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #X text 514 520 see also:; #X obj 588 520 data.dict; #X obj 668 520 flow.route; @@ -49,7 +49,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 dict.get; #X text 10 76 category:; @@ -59,7 +59,7 @@ #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 get \, dictionary; #X text 10 186 website:; diff --git a/ceammc/ext/doc/dict.get.pddoc b/ceammc/ext/doc/dict.get.pddoc index 9ab4de5489..b2f46c2687 100644 --- a/ceammc/ext/doc/dict.get.pddoc +++ b/ceammc/ext/doc/dict.get.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky on input dict outputs value to corresponding key outlet - GPL3 + GPL3 or later ceammc data get dictionary diff --git a/ceammc/ext/doc/dict.keys-help.pd b/ceammc/ext/doc/dict.keys-help.pd index 0a8d4bdd24..bb8fdfe7ff 100644 --- a/ceammc/ext/doc/dict.keys-help.pd +++ b/ceammc/ext/doc/dict.keys-help.pd @@ -27,7 +27,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title data @url ceammc.data-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #X text 506 520 see also:; #X obj 580 520 data.dict; #X obj 660 520 dict.values; @@ -36,7 +36,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 dict.keys; #X text 10 76 category:; @@ -46,7 +46,7 @@ #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 list \, keys \, dictionary; #X text 10 186 website:; diff --git a/ceammc/ext/doc/dict.keys.pddoc b/ceammc/ext/doc/dict.keys.pddoc index c7db53040b..1bc4a73317 100644 --- a/ceammc/ext/doc/dict.keys.pddoc +++ b/ceammc/ext/doc/dict.keys.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky get list of dict keys - GPL3 + GPL3 or later ceammc data list keys dictionary diff --git a/ceammc/ext/doc/dict.pass-help.pd b/ceammc/ext/doc/dict.pass-help.pd index 74c7cd4c1a..102d3161fc 100644 --- a/ceammc/ext/doc/dict.pass-help.pd +++ b/ceammc/ext/doc/dict.pass-help.pd @@ -35,7 +35,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title data @url ceammc.data-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #X text 601 520 see also:; #X obj 675 520 data.dict; #N canvas 10 527 400 290 info 0; @@ -43,7 +43,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 dict.pass; #X text 10 76 category:; @@ -53,7 +53,7 @@ #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 pass \, dictionary; #X text 10 186 website:; diff --git a/ceammc/ext/doc/dict.pass.pddoc b/ceammc/ext/doc/dict.pass.pddoc index 6428c947f9..82f7dec628 100644 --- a/ceammc/ext/doc/dict.pass.pddoc +++ b/ceammc/ext/doc/dict.pass.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky passes specified keys in dict - GPL3 + GPL3 or later ceammc data pass dictionary diff --git a/ceammc/ext/doc/dict.reject-help.pd b/ceammc/ext/doc/dict.reject-help.pd index 5b59f7a966..931329d606 100644 --- a/ceammc/ext/doc/dict.reject-help.pd +++ b/ceammc/ext/doc/dict.reject-help.pd @@ -36,7 +36,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title data @url ceammc.data-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #X text 601 520 see also:; #X obj 675 520 data.dict; #N canvas 10 527 400 290 info 0; @@ -44,7 +44,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 dict.reject; #X text 10 76 category:; @@ -54,7 +54,7 @@ #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 reject \, dictionary; #X text 10 186 website:; diff --git a/ceammc/ext/doc/dict.reject.pddoc b/ceammc/ext/doc/dict.reject.pddoc index ec0a120c12..cd92f3b5be 100644 --- a/ceammc/ext/doc/dict.reject.pddoc +++ b/ceammc/ext/doc/dict.reject.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky rejects specified keys from dict - GPL3 + GPL3 or later ceammc data reject dictionary diff --git a/ceammc/ext/doc/dict.size-help.pd b/ceammc/ext/doc/dict.size-help.pd index 00ca419ac2..63346e339b 100644 --- a/ceammc/ext/doc/dict.size-help.pd +++ b/ceammc/ext/doc/dict.size-help.pd @@ -30,7 +30,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title data @url ceammc.data-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #X text 521 520 see also:; #X obj 595 520 data.dict; #X obj 675 520 dict.keys; @@ -39,7 +39,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 dict.size; #X text 10 76 category:; @@ -49,7 +49,7 @@ #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 size \, dictionary; #X text 10 186 website:; diff --git a/ceammc/ext/doc/dict.size.pddoc b/ceammc/ext/doc/dict.size.pddoc index 6c14a16458..caf9ebad03 100644 --- a/ceammc/ext/doc/dict.size.pddoc +++ b/ceammc/ext/doc/dict.size.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky dictionary size - GPL3 + GPL3 or later ceammc data size dictionary diff --git a/ceammc/ext/doc/dict.to_list-help.pd b/ceammc/ext/doc/dict.to_list-help.pd index 1ea5e43ba8..c2f82dd499 100644 --- a/ceammc/ext/doc/dict.to_list-help.pd +++ b/ceammc/ext/doc/dict.to_list-help.pd @@ -27,7 +27,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title data @url ceammc.data-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #X text 601 520 see also:; #X obj 675 520 data.dict; #N canvas 10 527 400 290 info 0; @@ -35,7 +35,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 dict.to_list; #X text 10 76 category:; @@ -45,7 +45,7 @@ #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 dictionary; #X text 10 186 website:; diff --git a/ceammc/ext/doc/dict.to_list.pddoc b/ceammc/ext/doc/dict.to_list.pddoc index 12c2adb64a..650c69f865 100644 --- a/ceammc/ext/doc/dict.to_list.pddoc +++ b/ceammc/ext/doc/dict.to_list.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky converts dictionary to plain list - GPL3 + GPL3 or later ceammc data dictionary diff --git a/ceammc/ext/doc/dict.values-help.pd b/ceammc/ext/doc/dict.values-help.pd index e82bb0ed79..2510148cec 100644 --- a/ceammc/ext/doc/dict.values-help.pd +++ b/ceammc/ext/doc/dict.values-help.pd @@ -28,7 +28,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title data @url ceammc.data-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #X text 434 520 see also:; #X obj 508 520 data.dict; #X obj 588 520 data.mlist; @@ -38,7 +38,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 dict.values; #X text 10 76 category:; @@ -48,7 +48,7 @@ #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 size \, dictionary; #X text 10 186 website:; diff --git a/ceammc/ext/doc/dict.values.pddoc b/ceammc/ext/doc/dict.values.pddoc index 52e05decb6..13600c7535 100644 --- a/ceammc/ext/doc/dict.values.pddoc +++ b/ceammc/ext/doc/dict.values.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky dictionary values as mlist - GPL3 + GPL3 or later ceammc data size dictionary diff --git a/ceammc/ext/doc/docs.cmake b/ceammc/ext/doc/docs.cmake index 2e92474e1a..13fcd9e8f4 100644 --- a/ceammc/ext/doc/docs.cmake +++ b/ceammc/ext/doc/docs.cmake @@ -20,12 +20,16 @@ set(DOC_FILES array.vplay array.window canvas.current + canvas.dir + canvas.name + canvas.path canvas.top click~ conv.amp2dbfs conv.bpm2hz conv.bpm2ms conv.bpm2sec + conv.car2pol conv.cc2amp conv.dbfs2amp conv.lin2curve @@ -33,7 +37,12 @@ set(DOC_FILES conv.lin2lin conv.list2props conv.midi2freq + conv.phase2rad + conv.phase2rad~ conv.pitch2midi + conv.pol2car + conv.rad2phase + conv.rad2phase~ conv.samp2sec conv.sec2samp conv.sec2str @@ -94,6 +103,7 @@ set(DOC_FILES flow.multiplex~ flow.multiplex2~ flow.once + flow.pack flow.pass flow.pass_if flow.reject @@ -102,6 +112,7 @@ set(DOC_FILES flow.speedlim flow.split flow.sync + flow.sync_pack flow.tee~ flt.biquad~ flt.bpf12~ @@ -159,6 +170,21 @@ set(DOC_FILES global.list global.mlist global.set + hoa.2d.decoder~ + hoa.2d.encoder~ + hoa.2d.map~ + hoa.2d.optim~ + hoa.2d.projector~ + hoa.2d.recomposer~ + hoa.2d.rotate~ + hoa.2d.wider~ + hoa.in + hoa.in~ + hoa.out + hoa.out~ + hoa.process~ + hoa.scope~ + hoa.@process hw.apple_smc hw.apple_sms hw.arduino @@ -295,6 +321,20 @@ set(DOC_FILES math.sinh math.sqrt math.squared + math.sync_add + math.sync_and + math.sync_div + math.sync_eq + math.sync_ge + math.sync_gt + math.sync_le + math.sync_lt + math.sync_mod + math.sync_mul + math.sync_ne + math.sync_or + math.sync_sub + math.sync_xor math.tan math.tanh math.trunc @@ -347,6 +387,7 @@ set(DOC_FILES preset.storage preset.symbol proto.firmata + proto.sp.alpaca prop prop.declare prop.get @@ -402,6 +443,7 @@ set(DOC_FILES synth.risset_tone~ synth.shakers~ synth.wurley~ + system.colorpanel system.cursor system.getenv system.hostname @@ -428,10 +470,13 @@ set(DOC_FILES ui.knob ui.matrix ui.menu + ui.mouse_filter + ui.mouse_route ui.number ui.label ui.link ui.number~ + ui.polar ui.preset ui.scope~ ui.slider @@ -446,4 +491,5 @@ set(DOC_FILES window xfade~ xfade2~ + xdac~ ) diff --git a/ceammc/ext/doc/dyn.comp2~-help.pd b/ceammc/ext/doc/dyn.comp2~-help.pd index 41a1dd2beb..c7268867a8 100644 --- a/ceammc/ext/doc/dyn.comp2~-help.pd +++ b/ceammc/ext/doc/dyn.comp2~-help.pd @@ -86,7 +86,7 @@ Range: 0\...100\.; #X text 115 45 ::; #X obj 131 48 ui.link @title dyn @url ceammc.dyn-help.pd; #X obj 1 988 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 991 library: ceammc v0.7.1; +#X text 10 991 library: ceammc v0.8.0; #X text 600 1003 see also:; #X obj 674 1003 dyn.comp~; #N canvas 10 1010 400 290 info 0; @@ -94,7 +94,7 @@ Range: 0\...100\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 dyn.comp2~; #X text 10 76 category:; @@ -104,7 +104,7 @@ Range: 0\...100\.; #X text 10 120 authors:; #X text 120 120 Alex Nadzharov \, Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 compressor; #X text 10 186 website:; diff --git a/ceammc/ext/doc/dyn.comp2~.pddoc b/ceammc/ext/doc/dyn.comp2~.pddoc index da51c88254..ddde62c9d6 100644 --- a/ceammc/ext/doc/dyn.comp2~.pddoc +++ b/ceammc/ext/doc/dyn.comp2~.pddoc @@ -8,7 +8,7 @@ Serge Poltavsky stereo dynamic range compressor - GPL3 + GPL3 or later ceammc dyn compressor diff --git a/ceammc/ext/doc/dyn.comp~-help.pd b/ceammc/ext/doc/dyn.comp~-help.pd index 7d9e21745c..88d704c76a 100644 --- a/ceammc/ext/doc/dyn.comp~-help.pd +++ b/ceammc/ext/doc/dyn.comp~-help.pd @@ -84,7 +84,7 @@ Range: 0\...100\.; #X text 115 45 ::; #X obj 131 48 ui.link @title dyn @url ceammc.dyn-help.pd; #X obj 1 948 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 951 library: ceammc v0.7.1; +#X text 10 951 library: ceammc v0.8.0; #X text 593 963 see also:; #X obj 667 963 dyn.comp2~; #N canvas 10 970 400 290 info 0; @@ -92,7 +92,7 @@ Range: 0\...100\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 dyn.comp~; #X text 10 76 category:; @@ -102,7 +102,7 @@ Range: 0\...100\.; #X text 10 120 authors:; #X text 120 120 Alex Nadzharov \, Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 compressor; #X text 10 186 website:; diff --git a/ceammc/ext/doc/dyn.comp~.pddoc b/ceammc/ext/doc/dyn.comp~.pddoc index 5a6d28755e..f6497988b5 100644 --- a/ceammc/ext/doc/dyn.comp~.pddoc +++ b/ceammc/ext/doc/dyn.comp~.pddoc @@ -8,7 +8,7 @@ Serge Poltavsky mono dynamic range compressors - GPL3 + GPL3 or later ceammc dyn compressor diff --git a/ceammc/ext/doc/dyn.gate2~-help.pd b/ceammc/ext/doc/dyn.gate2~-help.pd index 8f9738c46a..84e14e3953 100644 --- a/ceammc/ext/doc/dyn.gate2~-help.pd +++ b/ceammc/ext/doc/dyn.gate2~-help.pd @@ -83,7 +83,7 @@ Type: float. Units: db. Default value: 40\. Range: 0\...100\.; #X text 115 45 ::; #X obj 131 48 ui.link @title dyn @url ceammc.dyn-help.pd; #X obj 1 973 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 976 library: ceammc v0.7.1; +#X text 10 976 library: ceammc v0.8.0; #X text 600 988 see also:; #X obj 674 988 dyn.gate~; #N canvas 10 995 400 290 info 0; @@ -91,7 +91,7 @@ Type: float. Units: db. Default value: 40\. Range: 0\...100\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 dyn.gate2~; #X text 10 76 category:; @@ -101,7 +101,7 @@ Type: float. Units: db. Default value: 40\. Range: 0\...100\.; #X text 10 120 authors:; #X text 120 120 Alex Nadzharov \, Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 gate; #X text 10 186 website:; diff --git a/ceammc/ext/doc/dyn.gate2~.pddoc b/ceammc/ext/doc/dyn.gate2~.pddoc index 2079967131..31a3298105 100644 --- a/ceammc/ext/doc/dyn.gate2~.pddoc +++ b/ceammc/ext/doc/dyn.gate2~.pddoc @@ -8,7 +8,7 @@ Serge Poltavsky stereo signal gate - GPL3 + GPL3 or later ceammc dyn gate diff --git a/ceammc/ext/doc/dyn.gate~-help.pd b/ceammc/ext/doc/dyn.gate~-help.pd index 10de219433..73fbf61ecb 100644 --- a/ceammc/ext/doc/dyn.gate~-help.pd +++ b/ceammc/ext/doc/dyn.gate~-help.pd @@ -81,7 +81,7 @@ Type: float. Units: db. Default value: 40\. Range: 0\...100\.; #X text 115 45 ::; #X obj 131 48 ui.link @title dyn @url ceammc.dyn-help.pd; #X obj 1 962 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 965 library: ceammc v0.7.1; +#X text 10 965 library: ceammc v0.8.0; #X text 593 977 see also:; #X obj 667 977 dyn.gate2~; #N canvas 10 984 400 290 info 0; @@ -89,7 +89,7 @@ Type: float. Units: db. Default value: 40\. Range: 0\...100\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 dyn.gate~; #X text 10 76 category:; @@ -99,7 +99,7 @@ Type: float. Units: db. Default value: 40\. Range: 0\...100\.; #X text 10 120 authors:; #X text 120 120 Alex Nadzharov \, Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 gate; #X text 10 186 website:; diff --git a/ceammc/ext/doc/dyn.gate~.pddoc b/ceammc/ext/doc/dyn.gate~.pddoc index a274b560c0..6ed916ad33 100644 --- a/ceammc/ext/doc/dyn.gate~.pddoc +++ b/ceammc/ext/doc/dyn.gate~.pddoc @@ -8,7 +8,7 @@ Serge Poltavsky mono signal gate - GPL3 + GPL3 or later ceammc dyn gate diff --git a/ceammc/ext/doc/dyn.limit2~-help.pd b/ceammc/ext/doc/dyn.limit2~-help.pd index 9bd9af89cb..eacce451d7 100644 --- a/ceammc/ext/doc/dyn.limit2~-help.pd +++ b/ceammc/ext/doc/dyn.limit2~-help.pd @@ -35,7 +35,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title dyn @url ceammc.dyn-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #X text 512 520 see also:; #X obj 586 520 dyn.limit~; #X obj 674 520 dyn.comp~; @@ -44,7 +44,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 dyn.limit2~; #X text 10 76 category:; @@ -54,7 +54,7 @@ #X text 10 120 authors:; #X text 120 120 Alex Nadzharov \, Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 limiter; #X text 10 186 website:; diff --git a/ceammc/ext/doc/dyn.limit2~.pddoc b/ceammc/ext/doc/dyn.limit2~.pddoc index c0dfa515b1..2b4d4362b0 100644 --- a/ceammc/ext/doc/dyn.limit2~.pddoc +++ b/ceammc/ext/doc/dyn.limit2~.pddoc @@ -8,7 +8,7 @@ Serge Poltavsky stereo 1176LN Peak Limiter - GPL3 + GPL3 or later ceammc dyn limiter diff --git a/ceammc/ext/doc/dyn.limit~-help.pd b/ceammc/ext/doc/dyn.limit~-help.pd index bb26b9bf19..01f0358c87 100644 --- a/ceammc/ext/doc/dyn.limit~-help.pd +++ b/ceammc/ext/doc/dyn.limit~-help.pd @@ -29,7 +29,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title dyn @url ceammc.dyn-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #X text 504 520 see also:; #X obj 578 520 dyn.limit2~; #X obj 674 520 dyn.comp~; @@ -38,7 +38,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 dyn.limit~; #X text 10 76 category:; @@ -48,7 +48,7 @@ #X text 10 120 authors:; #X text 120 120 Alex Nadzharov \, Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 limiter; #X text 10 186 website:; diff --git a/ceammc/ext/doc/dyn.limit~.pddoc b/ceammc/ext/doc/dyn.limit~.pddoc index 966b3353c4..515d3cd801 100644 --- a/ceammc/ext/doc/dyn.limit~.pddoc +++ b/ceammc/ext/doc/dyn.limit~.pddoc @@ -8,7 +8,7 @@ Serge Poltavsky mono 1176LN Peak Limiter - GPL3 + GPL3 or later ceammc dyn limiter diff --git a/ceammc/ext/doc/dyn.softclip~-help.pd b/ceammc/ext/doc/dyn.softclip~-help.pd index dd84b8dbc1..bd1913c826 100644 --- a/ceammc/ext/doc/dyn.softclip~-help.pd +++ b/ceammc/ext/doc/dyn.softclip~-help.pd @@ -35,13 +35,13 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title dyn @url ceammc.dyn-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #N canvas 10 527 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 dyn.softclip~; #X text 10 76 category:; @@ -51,7 +51,7 @@ #X text 10 120 authors:; #X text 120 120 Alex Nadzharov; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 dyn \, clip \, limiter; #X text 10 186 website:; diff --git a/ceammc/ext/doc/dyn.softclip~.pddoc b/ceammc/ext/doc/dyn.softclip~.pddoc index 614aa5565a..58c59dd875 100644 --- a/ceammc/ext/doc/dyn.softclip~.pddoc +++ b/ceammc/ext/doc/dyn.softclip~.pddoc @@ -7,7 +7,7 @@ Alex Nadzharov soft signal clip - GPL3 + GPL3 or later ceammc dyn dyn clip limiter diff --git a/ceammc/ext/doc/env.adsr~-help.pd b/ceammc/ext/doc/env.adsr~-help.pd index c1259017c9..0479c8b18e 100644 --- a/ceammc/ext/doc/env.adsr~-help.pd +++ b/ceammc/ext/doc/env.adsr~-help.pd @@ -99,13 +99,13 @@ when release phase finished.; #X text 115 45 ::; #X obj 131 48 ui.link @title env @url ceammc.env-help.pd; #X obj 1 1256 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1259 library: ceammc v0.7.1; +#X text 10 1259 library: ceammc v0.8.0; #N canvas 10 1278 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 env.adsr~; #X text 10 76 category:; @@ -115,7 +115,7 @@ when release phase finished.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 envelope \, adsr; #X text 10 186 website:; diff --git a/ceammc/ext/doc/env.adsr~.pddoc b/ceammc/ext/doc/env.adsr~.pddoc index fa5b8dbeee..cce0e153d5 100644 --- a/ceammc/ext/doc/env.adsr~.pddoc +++ b/ceammc/ext/doc/env.adsr~.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky ADSR (Attack, Decay, Sustain, Release) envelope generator - GPL3 + GPL3 or later ceammc env envelope adsr @@ -66,7 +66,7 @@ | [unpack ] | ^| -| [sig~ 8000] [cc->amp] [ui.env @size=200x60] +| [sig~ 8000] [cc->amp] [ui.env @size 200 60] | | | | [mtof] | [@gate $1( | | | | | diff --git a/ceammc/ext/doc/env.ar~-help.pd b/ceammc/ext/doc/env.ar~-help.pd index 762cb4ca27..a4a0891131 100644 --- a/ceammc/ext/doc/env.ar~-help.pd +++ b/ceammc/ext/doc/env.ar~-help.pd @@ -45,7 +45,8 @@ value: 10\. Range: 0\...100000\.; #X text 245 670 Get/Set trigger signal. Type: int. Default value: 0\. Allowed values: 0 \, 1\.; #X msg 110 712 @length; -#X text 245 712 (readonly) Get envelope length. Type: float.; +#X text 245 712 (readonly) Get envelope length. Type: float. Units: +ms.; #X msg 110 741 @release; #X text 245 741 Get/Set release time. Type: float. Units: ms. Default value: 300\. Range: 0\...100000\.; @@ -80,7 +81,7 @@ value: 300\. Range: 0\...100000\.; #X text 115 45 ::; #X obj 131 48 ui.link @title env @url ceammc.env-help.pd; #X obj 1 1069 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1072 library: ceammc v0.7.1; +#X text 10 1072 library: ceammc v0.8.0; #X text 600 1084 see also:; #X obj 674 1084 env.adsr~; #N canvas 10 1091 400 290 info 0; @@ -88,7 +89,7 @@ value: 300\. Range: 0\...100000\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 env.ar~; #X text 10 76 category:; @@ -98,7 +99,7 @@ value: 300\. Range: 0\...100000\.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 envelope \, ar; #X text 10 186 website:; diff --git a/ceammc/ext/doc/env.ar~.pddoc b/ceammc/ext/doc/env.ar~.pddoc index b04c6d8d5c..a9d43565b1 100644 --- a/ceammc/ext/doc/env.ar~.pddoc +++ b/ceammc/ext/doc/env.ar~.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky Attack/Release envelope generator - GPL3 + GPL3 or later ceammc env envelope ar @@ -26,7 +26,8 @@ maxvalue="100000" default="300">release time trigger signal attack release pair - envelope length + envelope + length on/off dsp processing @@ -59,7 +60,7 @@ | | | [ar 300 8( | | -| [ui.env @size=200x70] +| [ui.env @size 200 70] | | | | | | diff --git a/ceammc/ext/doc/env.asr~-help.pd b/ceammc/ext/doc/env.asr~-help.pd index 72f400de9a..3aaa353191 100644 --- a/ceammc/ext/doc/env.asr~-help.pd +++ b/ceammc/ext/doc/env.asr~-help.pd @@ -13,7 +13,7 @@ #X obj 280 219 ui.env @size 200 60; #X obj 50 262 osc~; #X msg 126 262 @gate \$1; -#X obj 50 291 env.asr~ 2 200; +#X obj 50 291 env.asr~ 2 100 2000; #X obj 50 320 ui.gain~ @size 140 16; #X obj 280 320 ui.dsp~; #X obj 50 349 dac~; @@ -87,7 +87,7 @@ phase finished.; #X text 115 45 ::; #X obj 131 48 ui.link @title env @url ceammc.env-help.pd; #X obj 1 1109 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1112 library: ceammc v0.7.1; +#X text 10 1112 library: ceammc v0.8.0; #X text 533 1124 see also:; #X obj 607 1124 env.adsr~; #X obj 688 1124 env.ar~; @@ -96,7 +96,7 @@ phase finished.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 env.asr~; #X text 10 76 category:; @@ -106,7 +106,7 @@ phase finished.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 envelope \, asr; #X text 10 186 website:; diff --git a/ceammc/ext/doc/env.asr~.pddoc b/ceammc/ext/doc/env.asr~.pddoc index f47b531850..7add1897f6 100644 --- a/ceammc/ext/doc/env.asr~.pddoc +++ b/ceammc/ext/doc/env.asr~.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky Attack/Sustain/Release envelope generator - GPL3 + GPL3 or later ceammc env envelope asr @@ -65,12 +65,12 @@ | [unpack ] [msg.onload asr 600 60] | ^| | -[mtof] [cc->amp] [ui.env @size=200x60] +[mtof] [cc->amp] [ui.env @size 200 60] | | | | | | [osc~] [@gate $1( | | | | -[env.asr~ 2 200 ] +[env.asr~ 2 100 2000 ] | [ui.gain~ @size 140 16] [ui.dsp~] |\ diff --git a/ceammc/ext/doc/env.concat-help.pd b/ceammc/ext/doc/env.concat-help.pd index 16546d2bd5..65adc58326 100644 --- a/ceammc/ext/doc/env.concat-help.pd +++ b/ceammc/ext/doc/env.concat-help.pd @@ -40,7 +40,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title env @url ceammc.env-help.pd; #X obj 1 559 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 562 library: ceammc v0.7.1; +#X text 10 562 library: ceammc v0.8.0; #X text 521 574 see also:; #X obj 595 574 env.tshift; #X obj 682 574 envelope; @@ -49,7 +49,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 env.concat; #X text 10 76 category:; @@ -59,7 +59,7 @@ #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 concat; #X text 10 186 website:; diff --git a/ceammc/ext/doc/env.concat.pddoc b/ceammc/ext/doc/env.concat.pddoc index 52ae01a666..5038df2d60 100644 --- a/ceammc/ext/doc/env.concat.pddoc +++ b/ceammc/ext/doc/env.concat.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky Envelope concatenation - GPL3 + GPL3 or later ceammc env concat diff --git a/ceammc/ext/doc/env.follow~-help.pd b/ceammc/ext/doc/env.follow~-help.pd index 82c9304f4c..74bc36dc11 100644 --- a/ceammc/ext/doc/env.follow~-help.pd +++ b/ceammc/ext/doc/env.follow~-help.pd @@ -54,7 +54,7 @@ going up/down.; #X text 115 45 ::; #X obj 131 48 ui.link @title env @url ceammc.env-help.pd; #X obj 1 646 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 649 library: ceammc v0.7.1; +#X text 10 649 library: ceammc v0.8.0; #X text 600 661 see also:; #X obj 674 661 env.adsr~; #N canvas 10 668 400 290 info 0; @@ -62,7 +62,7 @@ going up/down.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 env.follow~; #X text 10 76 category:; @@ -72,7 +72,7 @@ going up/down.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 envelope \, amplitude \, follower; #X text 10 186 website:; diff --git a/ceammc/ext/doc/env.follow~.pddoc b/ceammc/ext/doc/env.follow~.pddoc index 2b45ddb415..bdcd3623fa 100644 --- a/ceammc/ext/doc/env.follow~.pddoc +++ b/ceammc/ext/doc/env.follow~.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky Envelope follower with independent attack and release times - GPL3 + GPL3 or later ceammc env envelope amplitude follower diff --git a/ceammc/ext/doc/env.mix-help.pd b/ceammc/ext/doc/env.mix-help.pd index 877d8602fe..a7846bb8c0 100644 --- a/ceammc/ext/doc/env.mix-help.pd +++ b/ceammc/ext/doc/env.mix-help.pd @@ -6,7 +6,7 @@ equal number of segments; #X obj 1 1 cnv 5 765 40 empty empty env.mix 20 20 0 20 -104026 -4096 0; #X obj 689 11 env.mix; -#X obj 50 118 ui.knob @size 40 40; +#X obj 50 118 ui.knob; #X obj 146 118 loadbang; #X obj 146 147 env adsr 10 15 80 100; #X obj 174 176 env adsr 20 40 10 60; @@ -42,7 +42,7 @@ equal number of segments; #X text 115 45 ::; #X obj 131 48 ui.link @title env @url ceammc.env-help.pd; #X obj 1 531 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 534 library: ceammc v0.7.1; +#X text 10 534 library: ceammc v0.8.0; #X text 520 546 see also:; #X obj 594 546 env.tscale; #X obj 682 546 envelope; @@ -51,7 +51,7 @@ equal number of segments; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 env.mix; #X text 10 76 category:; @@ -61,7 +61,7 @@ equal number of segments; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 mix; #X text 10 186 website:; diff --git a/ceammc/ext/doc/env.mix.pddoc b/ceammc/ext/doc/env.mix.pddoc index 77f0e56b3d..4a0db62815 100644 --- a/ceammc/ext/doc/env.mix.pddoc +++ b/ceammc/ext/doc/env.mix.pddoc @@ -8,7 +8,7 @@ Mix between two envelopes. Envelopes should contain equal number of segments - GPL3 + GPL3 or later ceammc env mix diff --git a/ceammc/ext/doc/env.smooth~-help.pd b/ceammc/ext/doc/env.smooth~-help.pd index 047692af9c..4b72a44240 100644 --- a/ceammc/ext/doc/env.smooth~-help.pd +++ b/ceammc/ext/doc/env.smooth~-help.pd @@ -55,7 +55,7 @@ Allowed values: 0 \, 1\.; #X text 115 45 ::; #X obj 131 48 ui.link @title env @url ceammc.env-help.pd; #X obj 1 751 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 754 library: ceammc v0.7.1; +#X text 10 754 library: ceammc v0.8.0; #X text 600 766 see also:; #X obj 674 766 env.adsr~; #N canvas 10 773 400 290 info 0; @@ -63,7 +63,7 @@ Allowed values: 0 \, 1\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 env.smooth~; #X text 10 76 category:; @@ -73,7 +73,7 @@ Allowed values: 0 \, 1\.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 envelope \, smooth; #X text 10 186 website:; diff --git a/ceammc/ext/doc/env.smooth~.pddoc b/ceammc/ext/doc/env.smooth~.pddoc index ff589de9b8..a3340561cb 100644 --- a/ceammc/ext/doc/env.smooth~.pddoc +++ b/ceammc/ext/doc/env.smooth~.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky An envelope with an exponential attack and release - GPL3 + GPL3 or later ceammc env envelope smooth diff --git a/ceammc/ext/doc/env.tscale-help.pd b/ceammc/ext/doc/env.tscale-help.pd index 764beb895b..4e44ae8484 100644 --- a/ceammc/ext/doc/env.tscale-help.pd +++ b/ceammc/ext/doc/env.tscale-help.pd @@ -331,7 +331,7 @@ Min value: 0\.; #X text 115 45 ::; #X obj 131 48 ui.link @title env @url ceammc.env-help.pd; #X obj 1 653 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 656 library: ceammc v0.7.1; +#X text 10 656 library: ceammc v0.8.0; #X text 521 668 see also:; #X obj 595 668 env.tshift; #X obj 682 668 envelope; @@ -340,7 +340,7 @@ Min value: 0\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 env.tscale; #X text 10 76 category:; @@ -350,7 +350,7 @@ Min value: 0\.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 time \, scale; #X text 10 186 website:; diff --git a/ceammc/ext/doc/env.tscale.pddoc b/ceammc/ext/doc/env.tscale.pddoc index 35bf4accdd..61cdf92903 100644 --- a/ceammc/ext/doc/env.tscale.pddoc +++ b/ceammc/ext/doc/env.tscale.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky Envelope time-scale - GPL3 + GPL3 or later ceammc env time scale diff --git a/ceammc/ext/doc/env.tshift-help.pd b/ceammc/ext/doc/env.tshift-help.pd index a2261476f6..746cccdc89 100644 --- a/ceammc/ext/doc/env.tshift-help.pd +++ b/ceammc/ext/doc/env.tshift-help.pd @@ -48,7 +48,7 @@ value: 0\.; #X text 115 45 ::; #X obj 131 48 ui.link @title env @url ceammc.env-help.pd; #X obj 1 653 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 656 library: ceammc v0.7.1; +#X text 10 656 library: ceammc v0.8.0; #X text 520 668 see also:; #X obj 594 668 env.tscale; #X obj 682 668 envelope; @@ -57,7 +57,7 @@ value: 0\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 env.tshift; #X text 10 76 category:; @@ -67,7 +67,7 @@ value: 0\.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 time \, shift; #X text 10 186 website:; diff --git a/ceammc/ext/doc/env.tshift.pddoc b/ceammc/ext/doc/env.tshift.pddoc index 6c0afd0684..7e44eefcfa 100644 --- a/ceammc/ext/doc/env.tshift.pddoc +++ b/ceammc/ext/doc/env.tshift.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky Envelope time-shift (horizontal) - GPL3 + GPL3 or later ceammc env time shift diff --git a/ceammc/ext/doc/env.vscale-help.pd b/ceammc/ext/doc/env.vscale-help.pd index ca7ffe0829..dcc88274d8 100644 --- a/ceammc/ext/doc/env.vscale-help.pd +++ b/ceammc/ext/doc/env.vscale-help.pd @@ -330,7 +330,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title env @url ceammc.env-help.pd; #X obj 1 640 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 643 library: ceammc v0.7.1; +#X text 10 643 library: ceammc v0.8.0; #X text 520 655 see also:; #X obj 594 655 env.tscale; #X obj 682 655 envelope; @@ -339,7 +339,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 env.vscale; #X text 10 76 category:; @@ -349,7 +349,7 @@ #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 value \, scale; #X text 10 186 website:; diff --git a/ceammc/ext/doc/env.vscale.pddoc b/ceammc/ext/doc/env.vscale.pddoc index ad8b9509c7..05390e9d53 100644 --- a/ceammc/ext/doc/env.vscale.pddoc +++ b/ceammc/ext/doc/env.vscale.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky Envelope value-scale - GPL3 + GPL3 or later ceammc env value scale diff --git a/ceammc/ext/doc/env2array-help.pd b/ceammc/ext/doc/env2array-help.pd index 432c0dc108..b0d25056a3 100644 --- a/ceammc/ext/doc/env2array-help.pd +++ b/ceammc/ext/doc/env2array-help.pd @@ -96,7 +96,7 @@ was resized - output this new size.; #X text 115 45 ::; #X obj 131 48 ui.link @title env @url ceammc.env-help.pd; #X obj 1 913 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 916 library: ceammc v0.7.1; +#X text 10 916 library: ceammc v0.8.0; #X text 593 928 see also:; #X obj 667 928 env->vline; #N canvas 10 935 400 290 info 0; @@ -104,7 +104,7 @@ was resized - output this new size.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 env2array; #X text 10 76 category:; @@ -114,7 +114,7 @@ was resized - output this new size.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 envelope \, array; #X text 10 186 website:; diff --git a/ceammc/ext/doc/env2array.pddoc b/ceammc/ext/doc/env2array.pddoc index 008ebf7a1b..1f02b4d1cf 100644 --- a/ceammc/ext/doc/env2array.pddoc +++ b/ceammc/ext/doc/env2array.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky Renders envelope to specified array - GPL3 + GPL3 or later ceammc env envelope array diff --git a/ceammc/ext/doc/env2vline-help.pd b/ceammc/ext/doc/env2vline-help.pd index 5a7d4ae189..71d3ab5786 100644 --- a/ceammc/ext/doc/env2vline-help.pd +++ b/ceammc/ext/doc/env2vline-help.pd @@ -87,7 +87,7 @@ one stop-point.; #X text 115 45 ::; #X obj 131 48 ui.link @title env @url ceammc.env-help.pd; #X obj 1 1006 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1009 library: ceammc v0.7.1; +#X text 10 1009 library: ceammc v0.8.0; #X text 505 1021 see also:; #X obj 579 1021 vline->env; #X obj 667 1021 env->array; @@ -96,7 +96,7 @@ one stop-point.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 env2vline; #X text 10 76 category:; @@ -106,7 +106,7 @@ one stop-point.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 envelope \, vline; #X text 10 186 website:; diff --git a/ceammc/ext/doc/env2vline.pddoc b/ceammc/ext/doc/env2vline.pddoc index 014a1c0b42..3a6c39d8ae 100644 --- a/ceammc/ext/doc/env2vline.pddoc +++ b/ceammc/ext/doc/env2vline.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky Converts envelope to bunch of vline messages - GPL3 + GPL3 or later ceammc env envelope vline diff --git a/ceammc/ext/doc/envelope-help.pd b/ceammc/ext/doc/envelope-help.pd index 4ba46a01f6..e3f44b79df 100644 --- a/ceammc/ext/doc/envelope-help.pd +++ b/ceammc/ext/doc/envelope-help.pd @@ -70,276 +70,276 @@ sustain stop point.; #X obj 20 872 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 907 @length; -#X text 245 907 (readonly) Get total envelope time length (ms). Type: -float.; -#X msg 110 936 @npoints; -#X text 245 936 (readonly) Get number of points. Type: int. Min value: +#X text 245 907 (readonly) Get total envelope time length. Type: float. +Units: ms.; +#X msg 110 949 @npoints; +#X text 245 949 (readonly) Get number of points. Type: int. Min value: 0\.; -#X msg 110 965 @points; -#X text 245 965 (readonly) Get list of point times (ms). Type: list.; -#X msg 110 994 @stops; -#X text 245 994 (readonly) Get list of stop points. Type: list.; -#X msg 110 1023 @values; -#X text 245 1023 (readonly) Get list of point values. Type: list.; -#X obj 20 1062 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1067 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X msg 110 978 @points; +#X text 245 978 (readonly) Get list of point times (ms). Type: list.; +#X msg 110 1007 @stops; +#X text 245 1007 (readonly) Get list of stop points. Type: list.; +#X msg 110 1036 @values; +#X text 245 1036 (readonly) Get list of point values. Type: list.; +#X obj 20 1075 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1080 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 1102 add_point; -#X text 245 1102 add envelope point. Arguments are:; -#X obj 255 1125 cnv 1 22 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1125 MS: point time. Type: float. Min value: 0\.; -#X obj 255 1148 cnv 1 45 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1148 VALUE: point value. Type: float.; -#X obj 255 1171 cnv 1 85 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1171 [IS_STOP=0]: is stop point. Type: int. Allowed values: +#X msg 110 1115 add_point; +#X text 245 1115 add envelope point. Arguments are:; +#X obj 255 1138 cnv 1 22 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1138 MS: point time. Type: float. Min value: 0\.; +#X obj 255 1161 cnv 1 45 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1161 VALUE: point value. Type: float.; +#X obj 255 1184 cnv 1 85 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1184 [IS_STOP=0]: is stop point. Type: int. Allowed values: 0 \, 1\.; -#X obj 255 1194 cnv 1 85 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1194 [TYPE=line]: segment type: step \, linear \, exponential +#X obj 255 1207 cnv 1 85 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1207 [TYPE=line]: segment type: step \, linear \, exponential \, sin^2 or sigmoid curve. Type: symbol. Allowed values: step \, line \, exp \, sin2 \, sigmoid.; -#X obj 255 1247 cnv 1 70 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1247 [CURVE=1]: exponential curve degree: 0 (linear) <0 +#X obj 255 1260 cnv 1 70 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1260 [CURVE=1]: exponential curve degree: 0 (linear) <0 (concave \, negatively curved) >0 (convex \, positively curved). Type: float.; -#X msg 110 1302 add_seg; -#X text 245 1302 add segment to the end of envelope. On empty envelope +#X msg 110 1315 add_seg; +#X text 245 1315 add segment to the end of envelope. On empty envelope adds start point at 0ms and 0 value. Arguments are:; -#X obj 255 1340 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1340 TYPE: segment type. Type: symbol. Allowed values: +#X obj 255 1353 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1353 TYPE: segment type. Type: symbol. Allowed values: step \, line \, sin2 \, exp \, sigmoid.; -#X obj 255 1378 cnv 1 22 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1378 MS: segment length. Type: float.; -#X obj 255 1401 cnv 1 45 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1401 VALUE: end segment value. Type: float.; -#X obj 255 1424 cnv 1 70 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1424 [CURVE=0]: curve (for exp and sigmoid type). Type: +#X obj 255 1391 cnv 1 22 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1391 MS: segment length. Type: float.; +#X obj 255 1414 cnv 1 45 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1414 VALUE: end segment value. Type: float.; +#X obj 255 1437 cnv 1 70 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1437 [CURVE=0]: curve (for exp and sigmoid type). Type: float.; -#X msg 110 1449 adsr; -#X text 245 1449 creates ADSR envelope with one stop point. Arguments +#X msg 110 1462 adsr; +#X text 245 1462 creates ADSR envelope with one stop point. Arguments are:; -#X obj 255 1472 cnv 1 22 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1472 MS: attack time. Type: float. Min value: 0\.; -#X obj 255 1495 cnv 1 22 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1495 MS: decay time. Type: float. Min value: 0\.; -#X obj 255 1518 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1518 %: sustain level. Type: float. Range: 0\...100\.; -#X obj 255 1541 cnv 1 22 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1541 MS: release time. Type: float. Min value: 0\.; -#X msg 110 1566 ar; -#X text 245 1566 creates AR envelope without stop points. Arguments +#X obj 255 1485 cnv 1 22 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1485 MS: attack time. Type: float. Min value: 0\.; +#X obj 255 1508 cnv 1 22 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1508 MS: decay time. Type: float. Min value: 0\.; +#X obj 255 1531 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1531 %: sustain level. Type: float. Range: 0\...100\.; +#X obj 255 1554 cnv 1 22 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1554 MS: release time. Type: float. Min value: 0\.; +#X msg 110 1579 ar; +#X text 245 1579 creates AR envelope without stop points. Arguments are:; -#X obj 255 1589 cnv 1 22 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1589 MS: attack time. Type: float. Min value: 0\.; -#X obj 255 1612 cnv 1 22 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1612 MS: release time. Type: float. Min value: 0\.; -#X msg 110 1637 asr; -#X text 245 1637 creates ASR envelope with one stop point. Arguments +#X obj 255 1602 cnv 1 22 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1602 MS: attack time. Type: float. Min value: 0\.; +#X obj 255 1625 cnv 1 22 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1625 MS: release time. Type: float. Min value: 0\.; +#X msg 110 1650 asr; +#X text 245 1650 creates ASR envelope with one stop point. Arguments are:; -#X obj 255 1660 cnv 1 22 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1660 MS: attack time. Type: float. Min value: 0\.; -#X obj 255 1683 cnv 1 22 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1683 MS: release time. Type: float. Min value: 0\.; -#X msg 110 1708 clear; -#X text 245 1708 remove all envelope points.; -#X msg 110 1735 eadsr; -#X text 245 1735 creates exponential ADSR envelope with one stop point. +#X obj 255 1673 cnv 1 22 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1673 MS: attack time. Type: float. Min value: 0\.; +#X obj 255 1696 cnv 1 22 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1696 MS: release time. Type: float. Min value: 0\.; +#X msg 110 1721 clear; +#X text 245 1721 remove all envelope points.; +#X msg 110 1748 eadsr; +#X text 245 1748 creates exponential ADSR envelope with one stop point. Arguments are:; -#X obj 255 1773 cnv 1 22 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1773 MS: attack time. Type: float. Min value: 0\.; -#X obj 255 1796 cnv 1 98 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1796 ATTACK_CURVE: attack segment curve. Type: float.; -#X obj 255 1819 cnv 1 22 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1819 MS: decay time. Type: float. Min value: 0\.; -#X obj 255 1842 cnv 1 90 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1842 DECAY_CURVE: decay segment curve. Type: float.; -#X obj 255 1865 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1865 %: sustain level. Type: float. Range: 0\...100\.; -#X obj 255 1888 cnv 1 22 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1888 MS: release time. Type: float. Min value: 0\.; -#X obj 255 1911 cnv 1 105 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1911 RELEASE_CURVE: release segment curve. Type: float.; -#X msg 110 1936 ear; -#X text 245 1936 creates exponential AR envelope without stop points. +#X obj 255 1786 cnv 1 22 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1786 MS: attack time. Type: float. Min value: 0\.; +#X obj 255 1809 cnv 1 98 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1809 ATTACK_CURVE: attack segment curve. Type: float.; +#X obj 255 1832 cnv 1 22 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1832 MS: decay time. Type: float. Min value: 0\.; +#X obj 255 1855 cnv 1 90 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1855 DECAY_CURVE: decay segment curve. Type: float.; +#X obj 255 1878 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1878 %: sustain level. Type: float. Range: 0\...100\.; +#X obj 255 1901 cnv 1 22 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1901 MS: release time. Type: float. Min value: 0\.; +#X obj 255 1924 cnv 1 105 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1924 RELEASE_CURVE: release segment curve. Type: float.; +#X msg 110 1949 ear; +#X text 245 1949 creates exponential AR envelope without stop points. Arguments are:; -#X obj 255 1974 cnv 1 22 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1974 MS: attack time. Type: float.; -#X obj 255 1997 cnv 1 98 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1997 ATTACK_CURVE: attack segment curve. Type: float.; -#X obj 255 2020 cnv 1 22 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2020 MS: release time. Type: float.; -#X obj 255 2043 cnv 1 105 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2043 RELEASE_CURVE: release segment curve. Type: float.; -#X msg 110 2068 easr; -#X text 245 2068 creates exponential AR envelope with one stop point. +#X obj 255 1987 cnv 1 22 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1987 MS: attack time. Type: float.; +#X obj 255 2010 cnv 1 98 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2010 ATTACK_CURVE: attack segment curve. Type: float.; +#X obj 255 2033 cnv 1 22 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2033 MS: release time. Type: float.; +#X obj 255 2056 cnv 1 105 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2056 RELEASE_CURVE: release segment curve. Type: float.; +#X msg 110 2081 easr; +#X text 245 2081 creates exponential AR envelope with one stop point. Arguments are:; -#X obj 255 2106 cnv 1 22 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2106 MS: attack time. Type: float. Min value: 0\.; -#X obj 255 2129 cnv 1 98 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2129 ATTACK_CURVE: attack segment curve. Type: float.; -#X obj 255 2152 cnv 1 22 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2152 MS: release time. Type: float. Min value: 0\.; -#X obj 255 2175 cnv 1 105 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2175 RELEASE_CURVE: release segment curve. Type: float.; -#X msg 110 2200 exp; -#X text 245 2200 creates exponential-segmented envelope with arbitrary +#X obj 255 2119 cnv 1 22 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2119 MS: attack time. Type: float. Min value: 0\.; +#X obj 255 2142 cnv 1 98 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2142 ATTACK_CURVE: attack segment curve. Type: float.; +#X obj 255 2165 cnv 1 22 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2165 MS: release time. Type: float. Min value: 0\.; +#X obj 255 2188 cnv 1 105 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2188 RELEASE_CURVE: release segment curve. Type: float.; +#X msg 110 2213 exp; +#X text 245 2213 creates exponential-segmented envelope with arbitrary number of segments. Arguments are:; -#X obj 255 2238 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2238 VAL0: begin value. Type: float.; -#X obj 255 2261 cnv 1 22 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2261 MS: line length. Type: float. Min value: 1\.; -#X obj 255 2284 cnv 1 52 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2284 CURVE0: segment curve. Type: float.; -#X obj 255 2307 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2307 VAL1: value. Type: float.; -#X obj 255 2330 cnv 1 47 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2330 [LEN1]: segment length. Type: float.; -#X obj 255 2353 cnv 1 62 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2353 [CURVE1]: segment curve. Type: float.; -#X obj 255 2376 cnv 1 47 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2376 [VAL2]: value. Type: float.; -#X msg 110 2401 line; -#X text 245 2401 creates line-segmented envelope with arbitrary number +#X obj 255 2251 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2251 VAL0: begin value. Type: float.; +#X obj 255 2274 cnv 1 22 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2274 MS: line length. Type: float. Min value: 1\.; +#X obj 255 2297 cnv 1 52 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2297 CURVE0: segment curve. Type: float.; +#X obj 255 2320 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2320 VAL1: value. Type: float.; +#X obj 255 2343 cnv 1 47 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2343 [LEN1]: segment length. Type: float.; +#X obj 255 2366 cnv 1 62 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2366 [CURVE1]: segment curve. Type: float.; +#X obj 255 2389 cnv 1 47 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2389 [VAL2]: value. Type: float.; +#X msg 110 2414 line; +#X text 245 2414 creates line-segmented envelope with arbitrary number of segments. Arguments are:; -#X obj 255 2439 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2439 VAL0: begin value. Type: float.; -#X obj 255 2462 cnv 1 22 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2462 MS: line length. Type: float. Min value: 1\.; -#X obj 255 2485 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2485 VAL1: value. Type: float.; -#X obj 255 2508 cnv 1 47 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2508 [LEN1]: segment length. Type: float.; -#X obj 255 2531 cnv 1 47 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2531 [VAL2]: value. Type: float.; -#X msg 110 2556 remove_point; -#X text 245 2556 remove envelope point by specified time. Arguments +#X obj 255 2452 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2452 VAL0: begin value. Type: float.; +#X obj 255 2475 cnv 1 22 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2475 MS: line length. Type: float. Min value: 1\.; +#X obj 255 2498 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2498 VAL1: value. Type: float.; +#X obj 255 2521 cnv 1 47 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2521 [LEN1]: segment length. Type: float.; +#X obj 255 2544 cnv 1 47 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2544 [VAL2]: value. Type: float.; +#X msg 110 2569 remove_point; +#X text 245 2569 remove envelope point by specified time. Arguments are:; -#X obj 255 2579 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2579 IDX: point index. Type: int. Min value: 0\.; -#X msg 110 2604 set_point; -#X text 245 2604 set point time and value. Arguments are:; -#X obj 255 2627 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2627 IDX: point index. Type: int. Min value: 0\.; -#X obj 255 2650 cnv 1 22 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2650 MS: point time. Type: float. Min value: 0\.; -#X obj 255 2673 cnv 1 45 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2673 VALUE: point value. Type: int. Min value: 0\.; -#X obj 255 2696 cnv 1 85 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2696 [IS_STOP=0]: stop point. Type: int. Allowed values: +#X obj 255 2592 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2592 IDX: point index. Type: int. Min value: 0\.; +#X msg 110 2617 set_point; +#X text 245 2617 set point time and value. Arguments are:; +#X obj 255 2640 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2640 IDX: point index. Type: int. Min value: 0\.; +#X obj 255 2663 cnv 1 22 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2663 MS: point time. Type: float. Min value: 0\.; +#X obj 255 2686 cnv 1 45 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2686 VALUE: point value. Type: int. Min value: 0\.; +#X obj 255 2709 cnv 1 85 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2709 [IS_STOP=0]: stop point. Type: int. Allowed values: 0 \, 1\.; -#X msg 110 2721 set_point_time; -#X text 245 2721 set point time. Arguments are:; -#X obj 255 2744 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2744 IDX: point index. Type: int. Min value: 0\.; -#X obj 255 2767 cnv 1 22 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2767 MS: point time. Type: float. Min value: 0\.; -#X msg 110 2792 set_point_value; -#X text 245 2792 set point time. Arguments are:; -#X obj 255 2815 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2815 IDX: point index. Type: int. Min value: 0\.; -#X obj 255 2838 cnv 1 45 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2838 VALUE: point value. Type: int. Min value: 0\.; -#X msg 110 2863 set_seg_type; -#X text 245 2863 set segment type. Arguments are:; -#X obj 255 2886 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2886 IDX: segment index \, starting from 0\. Type: int. +#X msg 110 2734 set_point_time; +#X text 245 2734 set point time. Arguments are:; +#X obj 255 2757 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2757 IDX: point index. Type: int. Min value: 0\.; +#X obj 255 2780 cnv 1 22 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2780 MS: point time. Type: float. Min value: 0\.; +#X msg 110 2805 set_point_value; +#X text 245 2805 set point time. Arguments are:; +#X obj 255 2828 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2828 IDX: point index. Type: int. Min value: 0\.; +#X obj 255 2851 cnv 1 45 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2851 VALUE: point value. Type: int. Min value: 0\.; +#X msg 110 2876 set_seg_type; +#X text 245 2876 set segment type. Arguments are:; +#X obj 255 2899 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2899 IDX: segment index \, starting from 0\. Type: int. Min value: 0\.; -#X obj 255 2924 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2924 TYPE: segment type. Type: symbol. Allowed values: +#X obj 255 2937 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2937 TYPE: segment type. Type: symbol. Allowed values: step \, line \, sin2 \, exp \, sigmoid.; -#X msg 110 2964 set_stop_point; -#X text 245 2964 set stop-point. Arguments are:; -#X obj 255 2987 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2987 IDX: point index. Type: int. Min value: 0\.; -#X obj 255 3010 cnv 1 59 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 3010 IS_STOP: stop point. Type: int. Allowed values: 0 +#X msg 110 2977 set_stop_point; +#X text 245 2977 set stop-point. Arguments are:; +#X obj 255 3000 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 3000 IDX: point index. Type: int. Min value: 0\.; +#X obj 255 3023 cnv 1 59 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 3023 IS_STOP: stop point. Type: int. Allowed values: 0 \, 1\.; -#X msg 110 3035 sigmoid; -#X text 245 3035 creates sigmoid-segmented envelope with arbitrary +#X msg 110 3048 sigmoid; +#X text 245 3048 creates sigmoid-segmented envelope with arbitrary number of segments. Arguments are:; -#X obj 255 3073 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 3073 VAL0: begin value. Type: float.; -#X obj 255 3096 cnv 1 22 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 3096 MS: line length. Type: float. Min value: 1\.; -#X obj 255 3119 cnv 1 52 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 3119 CURVE0: segment curve. Type: float.; -#X obj 255 3142 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 3142 VAL1: value. Type: float.; -#X obj 255 3165 cnv 1 47 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 3165 [LEN1]: segment length. Type: float.; -#X obj 255 3188 cnv 1 62 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 3188 [CURVE1]: segment curve. Type: float.; -#X obj 255 3211 cnv 1 47 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 3211 [VAL2]: value. Type: float.; -#X msg 110 3236 sin2; -#X text 245 3236 creates quadratic sine-segmented envelope with arbitrary +#X obj 255 3086 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 3086 VAL0: begin value. Type: float.; +#X obj 255 3109 cnv 1 22 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 3109 MS: line length. Type: float. Min value: 1\.; +#X obj 255 3132 cnv 1 52 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 3132 CURVE0: segment curve. Type: float.; +#X obj 255 3155 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 3155 VAL1: value. Type: float.; +#X obj 255 3178 cnv 1 47 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 3178 [LEN1]: segment length. Type: float.; +#X obj 255 3201 cnv 1 62 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 3201 [CURVE1]: segment curve. Type: float.; +#X obj 255 3224 cnv 1 47 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 3224 [VAL2]: value. Type: float.; +#X msg 110 3249 sin2; +#X text 245 3249 creates quadratic sine-segmented envelope with arbitrary number of segments. Arguments are:; -#X obj 255 3274 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 3274 VAL0: begin value. Type: float.; -#X obj 255 3297 cnv 1 22 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 3297 MS: line length. Type: float. Min value: 1\.; -#X obj 255 3320 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 3320 VAL1: value. Type: float.; -#X obj 255 3343 cnv 1 47 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 3343 [LEN1]: segment length. Type: float.; -#X obj 255 3366 cnv 1 47 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 3366 [VAL2]: value. Type: float.; -#X msg 110 3391 step; -#X text 245 3391 creates step-segmented envelope with arbitrary number +#X obj 255 3287 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 3287 VAL0: begin value. Type: float.; +#X obj 255 3310 cnv 1 22 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 3310 MS: line length. Type: float. Min value: 1\.; +#X obj 255 3333 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 3333 VAL1: value. Type: float.; +#X obj 255 3356 cnv 1 47 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 3356 [LEN1]: segment length. Type: float.; +#X obj 255 3379 cnv 1 47 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 3379 [VAL2]: value. Type: float.; +#X msg 110 3404 step; +#X text 245 3404 creates step-segmented envelope with arbitrary number of segments. Arguments are:; -#X obj 255 3429 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 3429 VAL0: begin value. Type: float.; -#X obj 255 3452 cnv 1 22 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 3452 MS: step length. Type: float. Min value: 1\.; -#X obj 255 3475 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 3475 VAL1: value. Type: float.; -#X obj 255 3498 cnv 1 47 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 3498 [LEN1]: segment length. Type: float.; -#X obj 255 3521 cnv 1 47 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 3521 [VAL2]: value. Type: float.; -#X msg 110 3546 *; -#X text 245 3546 multiply all envelope points to specified value. Arguments +#X obj 255 3442 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 3442 VAL0: begin value. Type: float.; +#X obj 255 3465 cnv 1 22 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 3465 MS: step length. Type: float. Min value: 1\.; +#X obj 255 3488 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 3488 VAL1: value. Type: float.; +#X obj 255 3511 cnv 1 47 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 3511 [LEN1]: segment length. Type: float.; +#X obj 255 3534 cnv 1 47 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 3534 [VAL2]: value. Type: float.; +#X msg 110 3559 *; +#X text 245 3559 multiply all envelope points to specified value. Arguments are:; -#X obj 255 3584 cnv 1 45 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 3584 VALUE: value. Type: float.; -#X msg 110 3609 +; -#X text 245 3609 add specified value to all envelope points. Arguments +#X obj 255 3597 cnv 1 45 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 3597 VALUE: value. Type: float.; +#X msg 110 3622 +; +#X text 245 3622 add specified value to all envelope points. Arguments are:; -#X obj 255 3632 cnv 1 45 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 3632 VALUE: value. Type: float.; -#X msg 110 3657 >>; -#X text 245 3657 shift all envelope point by specified time in milliseconds. +#X obj 255 3645 cnv 1 45 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 3645 VALUE: value. Type: float.; +#X msg 110 3670 >>; +#X text 245 3670 shift all envelope point by specified time in milliseconds. Arguments are:; -#X obj 255 3695 cnv 1 22 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 3695 MS: value. Type: float.; -#X obj 20 3730 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 3735 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +#X obj 255 3708 cnv 1 22 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 3708 MS: value. Type: float.; +#X obj 20 3743 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 3748 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 3736 1\.; -#X text 150 3736 *bang*; -#X text 245 3736 outputs current envelope.; -#X text 150 3756 *data*; -#X text 245 3756 set new envelope and output it.; -#X obj 20 3786 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 3791 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 3749 1\.; +#X text 150 3749 *bang*; +#X text 245 3749 outputs current envelope.; +#X text 150 3769 *data*; +#X text 245 3769 set new envelope and output it.; +#X obj 20 3799 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 3804 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 3792 1\.; -#X text 245 3792 data output.; +#X text 110 3805 1\.; +#X text 245 3805 data output.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title env @url ceammc.env-help.pd; -#X obj 1 3842 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 3845 library: ceammc v0.7.1; -#X text 505 3857 see also:; -#X obj 579 3857 env->array; -#X obj 667 3857 env->vline; -#N canvas 10 3864 400 290 info 0; +#X obj 1 3855 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 3858 library: ceammc v0.8.0; +#X text 505 3870 see also:; +#X obj 579 3870 env->array; +#X obj 667 3870 env->vline; +#N canvas 10 3877 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 envelope; #X text 10 76 category:; @@ -349,7 +349,7 @@ Arguments are:; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 envelope; #X text 10 186 website:; @@ -358,7 +358,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 3864 pd info; +#X restore 10 3877 pd info; #X connect 9 0 17 0; #X connect 11 0 17 0; #X connect 13 0 17 0; diff --git a/ceammc/ext/doc/envelope.pddoc b/ceammc/ext/doc/envelope.pddoc index 2c98ca959a..47e717b140 100644 --- a/ceammc/ext/doc/envelope.pddoc +++ b/ceammc/ext/doc/envelope.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky Envelope data type - GPL3 + GPL3 or later ceammc env envelope @@ -209,8 +209,8 @@ number of points - total envelope time length - (ms) + total + envelope time length list of point times (ms) list of point values diff --git a/ceammc/ext/doc/expand_env-help.pd b/ceammc/ext/doc/expand_env-help.pd index 141cd80187..d94c5b0eb8 100644 --- a/ceammc/ext/doc/expand_env-help.pd +++ b/ceammc/ext/doc/expand_env-help.pd @@ -57,7 +57,7 @@ doc directory \, %CEAMMC% - path to ceammc library directory; #X text 115 45 ::; #X obj 131 48 ui.link @title flow @url ceammc.flow-help.pd; #X obj 1 806 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 809 library: ceammc v0.7.1; +#X text 10 809 library: ceammc v0.8.0; #X text 616 821 see also:; #X obj 690 821 replace; #N canvas 10 828 400 290 info 0; @@ -65,7 +65,7 @@ doc directory \, %CEAMMC% - path to ceammc library directory; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 expand_env; #X text 10 76 category:; @@ -75,7 +75,7 @@ doc directory \, %CEAMMC% - path to ceammc library directory; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 expand_env \, test; #X text 10 186 website:; diff --git a/ceammc/ext/doc/expand_env.pddoc b/ceammc/ext/doc/expand_env.pddoc index cb264aa3fa..bcd49cfaa9 100644 --- a/ceammc/ext/doc/expand_env.pddoc +++ b/ceammc/ext/doc/expand_env.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky Substitute enviroment variables in data stream - GPL3 + GPL3 or later ceammc flow expand_env test diff --git a/ceammc/ext/doc/flow.append-help.pd b/ceammc/ext/doc/flow.append-help.pd index adc83aa6af..29d7b64762 100644 --- a/ceammc/ext/doc/flow.append-help.pd +++ b/ceammc/ext/doc/flow.append-help.pd @@ -40,13 +40,13 @@ values: 0 \, 1\.; #X text 115 45 ::; #X obj 131 48 ui.link @title flow @url ceammc.flow-help.pd; #X obj 1 629 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 632 library: ceammc v0.7.1; +#X text 10 632 library: ceammc v0.8.0; #N canvas 10 651 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 flow.append~; #X text 10 76 category:; @@ -56,7 +56,7 @@ values: 0 \, 1\.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 append; #X text 10 186 website:; diff --git a/ceammc/ext/doc/flow.append.pddoc b/ceammc/ext/doc/flow.append.pddoc index d58bd521d8..a3dc8c1937 100644 --- a/ceammc/ext/doc/flow.append.pddoc +++ b/ceammc/ext/doc/flow.append.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky inject message into flow - GPL3 + GPL3 or later ceammc flow append diff --git a/ceammc/ext/doc/flow.change-help.pd b/ceammc/ext/doc/flow.change-help.pd index edbc7ba42c..196207f580 100644 --- a/ceammc/ext/doc/flow.change-help.pd +++ b/ceammc/ext/doc/flow.change-help.pd @@ -60,7 +60,7 @@ You can "set" the current value \, or bang to force output.; #X text 115 45 ::; #X obj 131 48 ui.link @title flow @url ceammc.flow-help.pd; #X obj 1 742 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 745 library: ceammc v0.7.1; +#X text 10 745 library: ceammc v0.8.0; #X text 622 757 see also:; #X obj 696 757 change; #N canvas 10 764 400 290 info 0; @@ -68,7 +68,7 @@ You can "set" the current value \, or bang to force output.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 flow.change; #X text 10 76 category:; @@ -78,7 +78,7 @@ You can "set" the current value \, or bang to force output.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 flow \, change; #X text 10 186 website:; diff --git a/ceammc/ext/doc/flow.change.pddoc b/ceammc/ext/doc/flow.change.pddoc index 41d9222720..76558d8d85 100644 --- a/ceammc/ext/doc/flow.change.pddoc +++ b/ceammc/ext/doc/flow.change.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky rejects redundant input values - GPL3 + GPL3 or later ceammc flow flow change diff --git a/ceammc/ext/doc/flow.count-help.pd b/ceammc/ext/doc/flow.count-help.pd index 13e8f09ea5..97e9a60d5c 100644 --- a/ceammc/ext/doc/flow.count-help.pd +++ b/ceammc/ext/doc/flow.count-help.pd @@ -38,13 +38,13 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title flow @url ceammc.flow-help.pd; #X obj 1 534 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 537 library: ceammc v0.7.1; +#X text 10 537 library: ceammc v0.8.0; #N canvas 10 556 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 flow.count; #X text 10 76 category:; @@ -54,7 +54,7 @@ #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 counter; #X text 10 186 website:; diff --git a/ceammc/ext/doc/flow.count.pddoc b/ceammc/ext/doc/flow.count.pddoc index fa3b29e0ec..a75418e1e7 100644 --- a/ceammc/ext/doc/flow.count.pddoc +++ b/ceammc/ext/doc/flow.count.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky control flow event counter - GPL3 + GPL3 or later ceammc flow counter diff --git a/ceammc/ext/doc/flow.demultiplex-help.pd b/ceammc/ext/doc/flow.demultiplex-help.pd index 60511f4f35..eebc315d39 100644 --- a/ceammc/ext/doc/flow.demultiplex-help.pd +++ b/ceammc/ext/doc/flow.demultiplex-help.pd @@ -7,7 +7,7 @@ #X obj 526 11 flow.demux; #X obj 624 11 flow.demultiplex; #X floatatom 50 118 5 0 0 0 - - -; -#X obj 222 147 ui.radio @nitems 4 @size 127 15; +#X obj 222 147 ui.radio @nitems 4; #X obj 50 190 flow.demultiplex 4; #X floatatom 50 219 5 0 0 0 - - -; #X floatatom 98 219 5 0 0 0 - - -; @@ -28,38 +28,38 @@ Default value: 0\. Min value: 0\.; #X msg 110 410 @noprops; #X text 245 410 pass all properties requests. When this flag is specified -you can't get @index property of current object.; -#X obj 20 462 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 467 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +you can't get or set @index property of current object: use right inlet.; +#X obj 20 477 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 482 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 468 1\.; -#X text 150 468 *any*; -#X text 245 468 input flow inlet.; -#X text 110 488 2\.; -#X text 150 488 *int*; -#X text 245 488 output selector.; -#X obj 20 518 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 523 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 483 1\.; +#X text 150 483 *any*; +#X text 245 483 input flow inlet.; +#X text 110 503 2\.; +#X text 150 503 *int*; +#X text 245 503 output selector.; +#X obj 20 533 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 538 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 524 1\.; -#X text 245 524 demultiplexer first output.; -#X text 110 544 n.; -#X text 245 544 demultiplexer N-th output.; +#X text 110 539 1\.; +#X text 245 539 demultiplexer first output.; +#X text 110 559 n.; +#X text 245 559 demultiplexer N-th output.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title flow @url ceammc.flow-help.pd; -#X obj 1 594 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 597 library: ceammc v0.7.1; -#X text 564 609 see also:; -#X obj 638 609 flow.multiplex; -#N canvas 10 616 400 290 info 0; +#X obj 1 609 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 612 library: ceammc v0.8.0; +#X text 564 624 see also:; +#X obj 638 624 flow.multiplex; +#N canvas 10 631 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 flow.demultiplex; #X text 10 76 category:; @@ -69,7 +69,7 @@ you can't get @index property of current object.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 demultiplex; #X text 10 186 website:; @@ -78,7 +78,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 616 pd info; +#X restore 10 631 pd info; #X connect 5 0 7 0; #X connect 6 0 7 1; #X connect 7 0 8 0; diff --git a/ceammc/ext/doc/flow.demultiplex.pddoc b/ceammc/ext/doc/flow.demultiplex.pddoc index 5822315240..67fb954fa3 100644 --- a/ceammc/ext/doc/flow.demultiplex.pddoc +++ b/ceammc/ext/doc/flow.demultiplex.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky control flow demultiplexer - GPL3 + GPL3 or later ceammc flow demultiplex @@ -34,7 +34,8 @@ current demultiplexer output index pass all properties requests. When this flag is - specified you can't get @index property of current object + specified you can't get or set @index property of current object: use right + inlet demultiplexer first output @@ -45,7 +46,7 @@ Serge Poltavsky audio stream stereo demultiplexer - GPL3 + GPL3 or later ceammc flow flow demultiplex @@ -50,7 +50,7 @@ Serge Poltavsky audio stream demultiplexer - GPL3 + GPL3 or later ceammc flow flow demultiplex @@ -44,7 +44,7 @@ Serge Poltavsky control flow gate. [spigot] analog - GPL3 + GPL3 or later ceammc flow gate diff --git a/ceammc/ext/doc/flow.group-help.pd b/ceammc/ext/doc/flow.group-help.pd index d48f6d7edf..3881708a4c 100644 --- a/ceammc/ext/doc/flow.group-help.pd +++ b/ceammc/ext/doc/flow.group-help.pd @@ -56,13 +56,13 @@ value: 1\.; #X text 115 45 ::; #X obj 131 48 ui.link @title flow @url ceammc.flow-help.pd; #X obj 1 705 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 708 library: ceammc v0.7.1; +#X text 10 708 library: ceammc v0.8.0; #N canvas 10 727 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 flow.group; #X text 10 76 category:; @@ -72,7 +72,7 @@ value: 1\.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 flow \, group; #X text 10 186 website:; diff --git a/ceammc/ext/doc/flow.group.pddoc b/ceammc/ext/doc/flow.group.pddoc index 6ef4e43d22..5def852707 100644 --- a/ceammc/ext/doc/flow.group.pddoc +++ b/ceammc/ext/doc/flow.group.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky group data atoms in list of specified size - GPL3 + GPL3 or later ceammc flow flow group diff --git a/ceammc/ext/doc/flow.interval-help.pd b/ceammc/ext/doc/flow.interval-help.pd index e8a5b84b6d..8516138b52 100644 --- a/ceammc/ext/doc/flow.interval-help.pd +++ b/ceammc/ext/doc/flow.interval-help.pd @@ -28,7 +28,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title flow @url ceammc.flow-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #X text 629 520 see also:; #X obj 703 520 timer; #N canvas 10 527 400 290 info 0; @@ -36,7 +36,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 flow.interval; #X text 10 76 category:; @@ -46,7 +46,7 @@ #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 time \, interval; #X text 10 186 website:; diff --git a/ceammc/ext/doc/flow.interval.pddoc b/ceammc/ext/doc/flow.interval.pddoc index 8dcacb7552..23dcb06583 100644 --- a/ceammc/ext/doc/flow.interval.pddoc +++ b/ceammc/ext/doc/flow.interval.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky measure time between flow events - GPL3 + GPL3 or later ceammc flow time interval diff --git a/ceammc/ext/doc/flow.less-help.pd b/ceammc/ext/doc/flow.less-help.pd index dcc2867bf4..a15ecb8df5 100644 --- a/ceammc/ext/doc/flow.less-help.pd +++ b/ceammc/ext/doc/flow.less-help.pd @@ -43,7 +43,7 @@ to N-th inlet; #X text 115 45 ::; #X obj 131 48 ui.link @title flow @url ceammc.flow-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #X text 579 520 see also:; #X obj 653 520 flow.less_eq; #N canvas 10 527 400 290 info 0; @@ -51,7 +51,7 @@ to N-th inlet; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 flow.less; #X text 10 76 category:; @@ -61,7 +61,7 @@ to N-th inlet; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 gate; #X text 10 186 website:; diff --git a/ceammc/ext/doc/flow.less.pddoc b/ceammc/ext/doc/flow.less.pddoc index c27d2cb486..8c97d6652c 100644 --- a/ceammc/ext/doc/flow.less.pddoc +++ b/ceammc/ext/doc/flow.less.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky numeric stream router, like many [moses] - GPL3 + GPL3 or later ceammc flow gate diff --git a/ceammc/ext/doc/flow.less_eq-help.pd b/ceammc/ext/doc/flow.less_eq-help.pd index 401fc3fd7b..cbd919832a 100644 --- a/ceammc/ext/doc/flow.less_eq-help.pd +++ b/ceammc/ext/doc/flow.less_eq-help.pd @@ -43,7 +43,7 @@ passed to N-th inlet; #X text 115 45 ::; #X obj 131 48 ui.link @title flow @url ceammc.flow-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #X text 601 520 see also:; #X obj 675 520 flow.less; #N canvas 10 527 400 290 info 0; @@ -51,7 +51,7 @@ passed to N-th inlet; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 flow.less_eq; #X text 10 76 category:; @@ -61,7 +61,7 @@ passed to N-th inlet; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 gate; #X text 10 186 website:; diff --git a/ceammc/ext/doc/flow.less_eq.pddoc b/ceammc/ext/doc/flow.less_eq.pddoc index 6ae8e6dd98..72ee2c0b6b 100644 --- a/ceammc/ext/doc/flow.less_eq.pddoc +++ b/ceammc/ext/doc/flow.less_eq.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky numeric stream router, like many [moses] - GPL3 + GPL3 or later ceammc flow gate diff --git a/ceammc/ext/doc/flow.match-help.pd b/ceammc/ext/doc/flow.match-help.pd index a2b08d662b..8950aac6b7 100644 --- a/ceammc/ext/doc/flow.match-help.pd +++ b/ceammc/ext/doc/flow.match-help.pd @@ -15,65 +15,65 @@ #X obj 50 234 flow.match freq`d amp`d; #X symbolatom 50 277 5 0 0 0 - - -; #X symbolatom 184 277 5 0 0 0 - - -; -#X obj 280 277 ui.d @display_type=1; -#X obj 20 316 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 321 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +#X obj 280 277 ui.display @display_type 1 @size 150 18; +#X obj 20 317 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 322 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 -49933 0; -#X text 110 356 1\.; -#X text 150 356 list; -#X obj 246 357 cnv 1 54 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 356 RE_LST: list of regular expressions.; -#X obj 20 386 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 391 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +#X text 110 357 1\.; +#X text 150 357 list; +#X obj 246 358 cnv 1 54 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 357 RE_LST: list of regular expressions.; +#X obj 20 387 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 392 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; -#X msg 110 426 @cut; -#X text 245 426 Get/Set cut or pass message selector. Type: int. Default +#X msg 110 427 @cut; +#X text 245 427 Get/Set cut or pass message selector. Type: int. Default value: 0\. Allowed values: 0 \, 1\.; -#X obj 20 478 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 483 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X obj 20 479 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 484 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 484 1\.; -#X text 150 484 *any*; -#X text 245 484 input message.; -#X text 150 504 *symbol*; -#X text 245 504 input symbol.; -#X text 150 524 *data:string*; -#X text 245 524 input symbol.; -#X text 110 544 2\.; -#X text 150 544 *symbol*; -#X text 245 544 set first regexp.; -#X text 110 564 ....; -#X text 150 564 *symbol*; -#X text 245 564 set ... regexp.; -#X text 110 584 n+1\.; -#X text 150 584 *symbol*; -#X text 245 584 set n-th regexp.; -#X obj 20 614 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 619 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 485 1\.; +#X text 150 485 *any*; +#X text 245 485 input message.; +#X text 150 505 *symbol*; +#X text 245 505 input symbol.; +#X text 150 525 *data:string*; +#X text 245 525 input symbol.; +#X text 110 545 2\.; +#X text 150 545 *symbol*; +#X text 245 545 set first regexp.; +#X text 110 565 ....; +#X text 150 565 *symbol*; +#X text 245 565 set ... regexp.; +#X text 110 585 n+1\.; +#X text 150 585 *symbol*; +#X text 245 585 set n-th regexp.; +#X obj 20 615 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 620 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 620 1\.; -#X text 245 620 output match to first regexp.; -#X text 110 640 ....; -#X text 245 640 output match to ... regexp.; -#X text 110 660 n.; -#X text 245 660 output match to n-th regexp.; -#X text 110 680 n+1\.; -#X text 245 680 unmatched output.; +#X text 110 621 1\.; +#X text 245 621 output match to first regexp.; +#X text 110 641 ....; +#X text 245 641 output match to ... regexp.; +#X text 110 661 n.; +#X text 245 661 output match to n-th regexp.; +#X text 110 681 n+1\.; +#X text 245 681 unmatched output.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title flow @url ceammc.flow-help.pd; -#X obj 1 730 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 733 library: ceammc v0.7.1; -#X text 580 745 see also:; -#X obj 654 745 string.match; -#N canvas 10 752 400 290 info 0; +#X obj 1 731 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 734 library: ceammc v0.8.0; +#X text 580 746 see also:; +#X obj 654 746 string.match; +#N canvas 10 753 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 flow.match; #X text 10 76 category:; @@ -83,7 +83,7 @@ value: 0\. Allowed values: 0 \, 1\.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 regexp; #X text 10 186 website:; @@ -92,7 +92,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 752 pd info; +#X restore 10 753 pd info; #X connect 4 0 9 0; #X connect 5 0 9 0; #X connect 6 0 9 0; diff --git a/ceammc/ext/doc/flow.match.pddoc b/ceammc/ext/doc/flow.match.pddoc index 8dd25d0c56..c21061e658 100644 --- a/ceammc/ext/doc/flow.match.pddoc +++ b/ceammc/ext/doc/flow.match.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky route data flow by regexp match - GPL3 + GPL3 or later ceammc flow regexp @@ -17,10 +17,12 @@ - list of regular expressions + list of regular + expressions - cut or pass message selector + cut or pass message + selector @@ -58,7 +60,7 @@ [flow.match freq`d amp`d] | ^| ^^| | | | -[S] [S] [ui.d @display_type=1] +[S] [S] [ui.display @display_type=1] ]]> diff --git a/ceammc/ext/doc/flow.multiplex-help.pd b/ceammc/ext/doc/flow.multiplex-help.pd index b56e133282..35a882f8e8 100644 --- a/ceammc/ext/doc/flow.multiplex-help.pd +++ b/ceammc/ext/doc/flow.multiplex-help.pd @@ -45,7 +45,7 @@ value: 0\. Min value: 0\.; #X text 115 45 ::; #X obj 131 48 ui.link @title flow @url ceammc.flow-help.pd; #X obj 1 561 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 564 library: ceammc v0.7.1; +#X text 10 564 library: ceammc v0.8.0; #X text 550 576 see also:; #X obj 624 576 flow.demultiplex; #N canvas 10 583 400 290 info 0; @@ -53,7 +53,7 @@ value: 0\. Min value: 0\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 flow.multiplex; #X text 10 76 category:; @@ -63,7 +63,7 @@ value: 0\. Min value: 0\.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 multiplex; #X text 10 186 website:; diff --git a/ceammc/ext/doc/flow.multiplex.pddoc b/ceammc/ext/doc/flow.multiplex.pddoc index 04e895d843..2fc0b17737 100644 --- a/ceammc/ext/doc/flow.multiplex.pddoc +++ b/ceammc/ext/doc/flow.multiplex.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky control flow multiplexer - GPL3 + GPL3 or later ceammc flow multiplex diff --git a/ceammc/ext/doc/flow.multiplex2~-help.pd b/ceammc/ext/doc/flow.multiplex2~-help.pd index a2742cc951..4d9cd43272 100644 --- a/ceammc/ext/doc/flow.multiplex2~-help.pd +++ b/ceammc/ext/doc/flow.multiplex2~-help.pd @@ -8,7 +8,7 @@ #X obj 562 11 mux2~; #X obj 624 11 flow.multiplex2~; #X obj 50 118 osc~ 440; -#X obj 270 118 ui.radio @nitems 2 @size 127 15; +#X obj 270 118 ui.radio @nitems 2; #X obj 472 118 ui.dsp~; #X obj 69 147 osc~ 442; #X obj 98 176 osc~ 660; @@ -59,7 +59,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title flow @url ceammc.flow-help.pd; #X obj 1 754 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 757 library: ceammc v0.7.1; +#X text 10 757 library: ceammc v0.8.0; #X text 440 769 see also:; #X obj 514 769 flow.multiplex~; #X obj 638 769 flow.multiplex; @@ -68,7 +68,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 flow.multiplex2~; #X text 10 76 category:; @@ -78,7 +78,7 @@ #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 flow \, multiplex; #X text 10 186 website:; diff --git a/ceammc/ext/doc/flow.multiplex2~.pddoc b/ceammc/ext/doc/flow.multiplex2~.pddoc index 94c9d0dce8..bdd45352d6 100644 --- a/ceammc/ext/doc/flow.multiplex2~.pddoc +++ b/ceammc/ext/doc/flow.multiplex2~.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky audio stream stereo multiplexer - GPL3 + GPL3 or later ceammc flow flow multiplex @@ -58,7 +58,7 @@ Serge Poltavsky audio stream multiplexer - GPL3 + GPL3 or later ceammc flow flow multiplex @@ -48,7 +48,7 @@ [osc~ 400] [osc~ 800] [osc~ 1600] [ui.dsp~] | | | | | | -| | | [ui.radio @nitems=3] +| | | [ui.radio @nitems 3] | | | | | | | | | |. |.. |... diff --git a/ceammc/ext/doc/flow.once-help.pd b/ceammc/ext/doc/flow.once-help.pd index da41b9a45f..a4dc5facf7 100644 --- a/ceammc/ext/doc/flow.once-help.pd +++ b/ceammc/ext/doc/flow.once-help.pd @@ -32,7 +32,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title flow @url ceammc.flow-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #X text 601 520 see also:; #X obj 675 520 flow.gate; #N canvas 10 527 400 290 info 0; @@ -40,7 +40,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 flow.once; #X text 10 76 category:; @@ -50,7 +50,7 @@ #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 once \, pass; #X text 10 186 website:; diff --git a/ceammc/ext/doc/flow.once.pddoc b/ceammc/ext/doc/flow.once.pddoc index 974ecb8038..6bc26fcf02 100644 --- a/ceammc/ext/doc/flow.once.pddoc +++ b/ceammc/ext/doc/flow.once.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky one message pass thru - GPL3 + GPL3 or later ceammc flow once pass diff --git a/ceammc/ext/doc/flow.pack-help.pd b/ceammc/ext/doc/flow.pack-help.pd new file mode 100644 index 0000000000..05c6dd10c9 --- /dev/null +++ b/ceammc/ext/doc/flow.pack-help.pd @@ -0,0 +1,104 @@ +#N canvas 0 0 785 555 12; +#X declare -lib ceammc; +#X obj 690 50 cnv 1 75 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 690 50 flow pack; +#X obj 1 1 cnv 5 765 40 empty empty flow.pack 20 20 0 20 -104026 -4096 +0; +#X obj 674 11 flow.pack; +#X obj 50 118 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 +-1; +#X floatatom 98 118 5 0 0 0 - - -; +#X floatatom 155 118 5 0 0 0 - - -; +#X msg 203 118 1 2; +#X msg 280 118 1 2 3; +#X floatatom 357 118 5 0 0 0 - - -; +#X obj 50 162 flow.pack 3 0 0 ABC, f 20; +#X obj 50 190 ui.display @display_type 1 @size 150 18; +#X obj 20 230 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 235 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +-49933 0; +#X text 110 270 1\.; +#X text 150 270 int; +#X obj 246 271 cnv 1 17 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 270 N: number of inputs. Min value: 1; +#X text 110 290 2\.; +#X text 150 290 list; +#X obj 246 291 cnv 1 39 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 290 VALS: default values for all inlets. If not enough +default values given it sets to 0\..; +#X obj 20 335 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 340 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +0; +#X text 110 341 1\.; +#X text 150 341 *bang*; +#X text 245 341 output current value.; +#X text 150 361 *float*; +#X text 245 361 change first packed value and output.; +#X text 150 381 *symbol*; +#X text 245 381 change first packed value and output.; +#X text 150 401 *list*; +#X text 245 401 propagate list values to other inlets and output.; +#X text 150 421 *any*; +#X text 245 421 propagate message values to other inlets and output.; +#X text 110 441 ....; +#X text 150 441 *float*; +#X text 245 441 change ... packed value.; +#X text 150 461 *symbol*; +#X text 245 461 change ... packed value.; +#X text 150 481 *list*; +#X text 245 481 propagate ... list values among rest inlets.; +#X text 110 501 n.; +#X text 150 501 *float*; +#X text 245 501 change n-th packed value.; +#X text 150 521 *symbol*; +#X text 245 521 change n-th packed value.; +#X text 150 541 *list*; +#X text 245 541 propagate n-th list values among rest inlets.; +#X obj 20 571 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 576 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 577 1\.; +#X text 245 577 packed list or message (if message input).; +#X obj 10 48 ui.link @title index @url ../index-help.pd; +#X text 51 45 ::; +#X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; +#X text 115 45 ::; +#X obj 131 48 ui.link @title flow @url ceammc.flow-help.pd; +#X obj 1 627 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 630 library: ceammc v0.8.0; +#X text 439 642 see also:; +#X obj 513 642 pack; +#X obj 558 642 flow.sync; +#X obj 638 642 flow.sync_pack; +#N canvas 10 649 400 290 info 0; +#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; +#X text 10 10 library:; +#X text 120 10 ceammc; +#X text 10 32 version:; +#X text 120 32 0.8.0; +#X text 10 54 object:; +#X text 120 54 flow.pack; +#X text 10 76 category:; +#X text 120 76 flow; +#X text 10 98 since:; +#X text 120 98 0.8; +#X text 10 120 authors:; +#X text 120 120 Serge Poltavsky; +#X text 10 142 license:; +#X text 120 142 GPL3 or later; +#X text 10 164 keywords:; +#X text 120 164 flow \, pack; +#X text 10 186 website:; +#X obj 120 189 ui.link @title https://github.com/uliss/pure-data @url +https://github.com/uliss/pure-data; +#X obj 120 208 declare -lib ceammc; +#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 120 268 generated by pddoc; +#X restore 10 649 pd info; +#X connect 4 0 10 0; +#X connect 5 0 10 0; +#X connect 6 0 10 1; +#X connect 7 0 10 0; +#X connect 8 0 10 0; +#X connect 9 0 10 2; +#X connect 10 0 11 0; \ No newline at end of file diff --git a/ceammc/ext/doc/flow.pack.pddoc b/ceammc/ext/doc/flow.pack.pddoc new file mode 100644 index 0000000000..a55abfaea6 --- /dev/null +++ b/ceammc/ext/doc/flow.pack.pddoc @@ -0,0 +1,60 @@ + + + + flow.pack + + + Serge Poltavsky + + flow pack + GPL3 or later + ceammc + flow + flow pack + 0.8 + + pack + flow.sync + flow.sync_pack + + + + number of inputs + default values for all inlets. If not enough default values given it sets to 0. + + + + output current value + change first packed value and output + change first packed value and output + propagate list values to other inlets and output + propagate message values to other inlets and output + + + change ... packed value + change ... packed value + propagate ... list values among rest inlets + + + change n-th packed value + change n-th packed value + propagate n-th list values among rest inlets + + + + packed list or message (if message input) + + + + + + + + diff --git a/ceammc/ext/doc/flow.pass-help.pd b/ceammc/ext/doc/flow.pass-help.pd index a8119ba925..ae73a514e6 100644 --- a/ceammc/ext/doc/flow.pass-help.pd +++ b/ceammc/ext/doc/flow.pass-help.pd @@ -45,7 +45,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title flow @url ceammc.flow-help.pd; #X obj 1 553 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 556 library: ceammc v0.7.1; +#X text 10 556 library: ceammc v0.8.0; #X text 485 568 see also:; #X obj 559 568 flow.pass_if; #X obj 661 568 flow.reject; @@ -54,7 +54,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 flow.pass; #X text 10 76 category:; @@ -64,7 +64,7 @@ #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 pass \, functional; #X text 10 186 website:; diff --git a/ceammc/ext/doc/flow.pass.pddoc b/ceammc/ext/doc/flow.pass.pddoc index 046b2e416e..5bd6aa391e 100644 --- a/ceammc/ext/doc/flow.pass.pddoc +++ b/ceammc/ext/doc/flow.pass.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky pass specified values - GPL3 + GPL3 or later ceammc flow pass functional diff --git a/ceammc/ext/doc/flow.pass_if-help.pd b/ceammc/ext/doc/flow.pass_if-help.pd index a1bcf9f6d1..a86822e37d 100644 --- a/ceammc/ext/doc/flow.pass_if-help.pd +++ b/ceammc/ext/doc/flow.pass_if-help.pd @@ -45,7 +45,7 @@ pass \, '0' means reject. Range: 0\...1\.; #X text 115 45 ::; #X obj 131 48 ui.link @title flow @url ceammc.flow-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #X text 601 520 see also:; #X obj 675 520 flow.pass; #N canvas 10 527 400 290 info 0; @@ -53,7 +53,7 @@ pass \, '0' means reject. Range: 0\...1\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 flow.pass_if; #X text 10 76 category:; @@ -63,7 +63,7 @@ pass \, '0' means reject. Range: 0\...1\.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 pass \, functional; #X text 10 186 website:; diff --git a/ceammc/ext/doc/flow.pass_if.pddoc b/ceammc/ext/doc/flow.pass_if.pddoc index 83eb75d919..46d6534989 100644 --- a/ceammc/ext/doc/flow.pass_if.pddoc +++ b/ceammc/ext/doc/flow.pass_if.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky pass values that accepted by predicate object - GPL3 + GPL3 or later ceammc flow pass functional diff --git a/ceammc/ext/doc/flow.reject-help.pd b/ceammc/ext/doc/flow.reject-help.pd index 1b07c4736f..69af64372c 100644 --- a/ceammc/ext/doc/flow.reject-help.pd +++ b/ceammc/ext/doc/flow.reject-help.pd @@ -49,7 +49,7 @@ use [flow.reject_if].; #X text 115 45 ::; #X obj 131 48 ui.link @title flow @url ceammc.flow-help.pd; #X obj 1 609 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 612 library: ceammc v0.7.1; +#X text 10 612 library: ceammc v0.8.0; #X text 485 624 see also:; #X obj 559 624 flow.reject_if; #X obj 675 624 flow.pass; @@ -58,7 +58,7 @@ use [flow.reject_if].; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 flow.reject; #X text 10 76 category:; @@ -68,7 +68,7 @@ use [flow.reject_if].; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 reject \, functional; #X text 10 186 website:; diff --git a/ceammc/ext/doc/flow.reject.pddoc b/ceammc/ext/doc/flow.reject.pddoc index 892b2ba70f..765e0d0e03 100644 --- a/ceammc/ext/doc/flow.reject.pddoc +++ b/ceammc/ext/doc/flow.reject.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky reject specified values - GPL3 + GPL3 or later ceammc flow reject functional diff --git a/ceammc/ext/doc/flow.reject_if-help.pd b/ceammc/ext/doc/flow.reject_if-help.pd index 23af6d96de..03b0981a9c 100644 --- a/ceammc/ext/doc/flow.reject_if-help.pd +++ b/ceammc/ext/doc/flow.reject_if-help.pd @@ -36,7 +36,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title flow @url ceammc.flow-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #X text 420 520 see also:; #X obj 494 520 flow.pass_if; #X obj 596 520 flow.reject; @@ -46,7 +46,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 flow.reject_if; #X text 10 76 category:; @@ -56,7 +56,7 @@ #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 reject \, functional; #X text 10 186 website:; diff --git a/ceammc/ext/doc/flow.reject_if.pddoc b/ceammc/ext/doc/flow.reject_if.pddoc index ab0635fdda..354782fb4c 100644 --- a/ceammc/ext/doc/flow.reject_if.pddoc +++ b/ceammc/ext/doc/flow.reject_if.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky reject values by predicate - GPL3 + GPL3 or later ceammc flow reject functional diff --git a/ceammc/ext/doc/flow.route-help.pd b/ceammc/ext/doc/flow.route-help.pd index 58523c4fb7..34530ef752 100644 --- a/ceammc/ext/doc/flow.route-help.pd +++ b/ceammc/ext/doc/flow.route-help.pd @@ -72,13 +72,13 @@ corresponding outlets.; #X text 115 45 ::; #X obj 131 48 ui.link @title flow @url ceammc.flow-help.pd; #X obj 1 819 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 822 library: ceammc v0.7.1; +#X text 10 822 library: ceammc v0.8.0; #N canvas 10 841 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 flow.route; #X text 10 76 category:; @@ -88,7 +88,7 @@ corresponding outlets.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 route; #X text 10 186 website:; diff --git a/ceammc/ext/doc/flow.route.pddoc b/ceammc/ext/doc/flow.route.pddoc index 7095f27d8e..290bd4306a 100644 --- a/ceammc/ext/doc/flow.route.pddoc +++ b/ceammc/ext/doc/flow.route.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky advanced message router - GPL3 + GPL3 or later ceammc flow route diff --git a/ceammc/ext/doc/flow.speedlim-help.pd b/ceammc/ext/doc/flow.speedlim-help.pd index a8f72266d6..5e83dab1ac 100644 --- a/ceammc/ext/doc/flow.speedlim-help.pd +++ b/ceammc/ext/doc/flow.speedlim-help.pd @@ -56,13 +56,13 @@ limitations. Type: int. Units: ms. Default value: 0\. Min value: 0\.; #X text 115 45 ::; #X obj 131 48 ui.link @title flow @url ceammc.flow-help.pd; #X obj 1 805 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 808 library: ceammc v0.7.1; +#X text 10 808 library: ceammc v0.8.0; #N canvas 10 827 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 flow.speedlim; #X text 10 76 category:; @@ -72,7 +72,7 @@ limitations. Type: int. Units: ms. Default value: 0\. Min value: 0\.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 speelim \, drop; #X text 10 186 website:; diff --git a/ceammc/ext/doc/flow.speedlim.pddoc b/ceammc/ext/doc/flow.speedlim.pddoc index ef90016487..01dac32a6b 100644 --- a/ceammc/ext/doc/flow.speedlim.pddoc +++ b/ceammc/ext/doc/flow.speedlim.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky control stream speed limiter - GPL3 + GPL3 or later ceammc flow speelim drop diff --git a/ceammc/ext/doc/flow.split-help.pd b/ceammc/ext/doc/flow.split-help.pd index 94b8612224..16e9a69538 100644 --- a/ceammc/ext/doc/flow.split-help.pd +++ b/ceammc/ext/doc/flow.split-help.pd @@ -55,7 +55,7 @@ for first outlet. If 0 - to second.; #X text 115 45 ::; #X obj 131 48 ui.link @title flow @url ceammc.flow-help.pd; #X obj 1 521 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 524 library: ceammc v0.7.1; +#X text 10 524 library: ceammc v0.8.0; #X text 507 536 see also:; #X obj 581 536 flow.pass; #X obj 661 536 flow.reject; @@ -64,7 +64,7 @@ for first outlet. If 0 - to second.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 flow.split; #X text 10 76 category:; @@ -74,7 +74,7 @@ for first outlet. If 0 - to second.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 pass \, functional; #X text 10 186 website:; diff --git a/ceammc/ext/doc/flow.split.pddoc b/ceammc/ext/doc/flow.split.pddoc index 65c6cce8f0..b02873bbe1 100644 --- a/ceammc/ext/doc/flow.split.pddoc +++ b/ceammc/ext/doc/flow.split.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky split data flow by external side-chain predicate - GPL3 + GPL3 or later ceammc flow pass functional diff --git a/ceammc/ext/doc/flow.sync-help.pd b/ceammc/ext/doc/flow.sync-help.pd index 44d87dd6c4..0c852fc321 100644 --- a/ceammc/ext/doc/flow.sync-help.pd +++ b/ceammc/ext/doc/flow.sync-help.pd @@ -51,13 +51,13 @@ usage is to escape 'trigger hell' when using many UI controls.; #X text 115 45 ::; #X obj 131 48 ui.link @title flow @url ceammc.flow-help.pd; #X obj 1 671 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 674 library: ceammc v0.7.1; +#X text 10 674 library: ceammc v0.8.0; #N canvas 10 693 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 flow.sync; #X text 10 76 category:; @@ -67,7 +67,7 @@ usage is to escape 'trigger hell' when using many UI controls.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 flow \, control; #X text 10 186 website:; diff --git a/ceammc/ext/doc/flow.sync.pddoc b/ceammc/ext/doc/flow.sync.pddoc index 55926e4be7..5ee45a0a02 100644 --- a/ceammc/ext/doc/flow.sync.pddoc +++ b/ceammc/ext/doc/flow.sync.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky bus with only hot inlets - GPL3 + GPL3 or later ceammc flow flow control diff --git a/ceammc/ext/doc/flow.sync_pack-help.pd b/ceammc/ext/doc/flow.sync_pack-help.pd new file mode 100644 index 0000000000..91b337ab9e --- /dev/null +++ b/ceammc/ext/doc/flow.sync_pack-help.pd @@ -0,0 +1,108 @@ +#N canvas 0 0 785 555 12; +#X declare -lib ceammc; +#X obj 538 50 cnv 1 227 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 538 50 flow pack with all hot inlets; +#X obj 1 1 cnv 5 765 40 empty empty flow.sync_pack 20 20 0 20 -104026 +-4096 0; +#X obj 543 11 flow.pack'; +#X obj 638 11 flow.sync_pack; +#X obj 50 118 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 +-1; +#X floatatom 98 118 5 0 0 0 - - -; +#X floatatom 155 118 5 0 0 0 - - -; +#X msg 203 118 1 2; +#X msg 280 118 1 2 3; +#X floatatom 357 118 5 0 0 0 - - -; +#X obj 50 162 flow.pack' 3 0 0 ABC, f 20; +#X obj 50 190 ui.display @display_type 1 @size 150 18; +#X obj 20 230 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 235 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +-49933 0; +#X text 110 270 1\.; +#X text 150 270 int; +#X obj 246 271 cnv 1 17 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 270 N: number of inputs. Min value: 1; +#X text 110 290 2\.; +#X text 150 290 list; +#X obj 246 291 cnv 1 39 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 290 VALS: default values for all inlets. If not enough +default values given it sets to 0\..; +#X obj 20 335 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 340 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +0; +#X text 110 341 1\.; +#X text 150 341 *bang*; +#X text 245 341 output current value.; +#X text 150 361 *float*; +#X text 245 361 change first packed value and output.; +#X text 150 381 *symbol*; +#X text 245 381 change first packed value and output.; +#X text 150 401 *list*; +#X text 245 401 propagate list values to other inlets and output.; +#X text 150 421 *any*; +#X text 245 421 propagate message values to other inlets and output.; +#X text 110 441 ....; +#X text 150 441 *bang*; +#X text 245 441 output current value.; +#X text 150 461 *float*; +#X text 245 461 change ... packed value and output.; +#X text 150 481 *symbol*; +#X text 245 481 change ... packed value and output.; +#X text 150 501 *list*; +#X text 245 501 propagate ... list values among rest inlets and output.; +#X text 110 521 n.; +#X text 150 521 *bang*; +#X text 245 521 output current value and output.; +#X text 150 541 *float*; +#X text 245 541 change n-th packed value and output.; +#X text 150 561 *symbol*; +#X text 245 561 change n-th packed value and output.; +#X text 150 581 *list*; +#X text 245 581 propagate n-th list values among rest inlets and output.; +#X obj 20 611 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 616 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 617 1\.; +#X text 245 617 packed list or message (if message input).; +#X obj 10 48 ui.link @title index @url ../index-help.pd; +#X text 51 45 ::; +#X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; +#X text 115 45 ::; +#X obj 131 48 ui.link @title flow @url ceammc.flow-help.pd; +#X obj 1 667 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 670 library: ceammc v0.8.0; +#X text 555 682 see also:; +#X obj 629 682 pack; +#X obj 674 682 flow.pack; +#N canvas 10 689 400 290 info 0; +#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; +#X text 10 10 library:; +#X text 120 10 ceammc; +#X text 10 32 version:; +#X text 120 32 0.8.0; +#X text 10 54 object:; +#X text 120 54 flow.sync_pack; +#X text 10 76 category:; +#X text 120 76 flow; +#X text 10 98 since:; +#X text 120 98 0.8; +#X text 10 120 authors:; +#X text 120 120 Serge Poltavsky; +#X text 10 142 license:; +#X text 120 142 GPL3 or later; +#X text 10 164 keywords:; +#X text 120 164 flow \, pack \, hot; +#X text 10 186 website:; +#X obj 120 189 ui.link @title https://github.com/uliss/pure-data @url +https://github.com/uliss/pure-data; +#X obj 120 208 declare -lib ceammc; +#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 120 268 generated by pddoc; +#X restore 10 689 pd info; +#X connect 5 0 11 0; +#X connect 6 0 11 0; +#X connect 7 0 11 1; +#X connect 8 0 11 0; +#X connect 9 0 11 0; +#X connect 10 0 11 2; +#X connect 11 0 12 0; \ No newline at end of file diff --git a/ceammc/ext/doc/flow.sync_pack.pddoc b/ceammc/ext/doc/flow.sync_pack.pddoc new file mode 100644 index 0000000000..a046c26fc5 --- /dev/null +++ b/ceammc/ext/doc/flow.sync_pack.pddoc @@ -0,0 +1,64 @@ + + + + flow.sync_pack + + + Serge Poltavsky + + flow pack with all hot inlets + GPL3 or later + ceammc + flow + flow pack hot + 0.8 + + flow.pack' + + + pack + flow.pack + + + + number of inputs + default values for all inlets. If not enough default values given it sets to 0. + + + + output current value + change first packed value and output + change first packed value and output + propagate list values to other inlets and output + propagate message values to other inlets and output + + + output current value + change ... packed value and output + change ... packed value and output + propagate ... list values among rest inlets and output + + + output current value and output + change n-th packed value and output + change n-th packed value and output + propagate n-th list values among rest inlets and output + + + + packed list or message (if message input) + + + + + + + + diff --git a/ceammc/ext/doc/flow.tee~-help.pd b/ceammc/ext/doc/flow.tee~-help.pd index 52248c030e..0d791a32c2 100644 --- a/ceammc/ext/doc/flow.tee~-help.pd +++ b/ceammc/ext/doc/flow.tee~-help.pd @@ -36,13 +36,13 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title flow @url ceammc.flow-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #N canvas 10 527 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 flow.tee~; #X text 10 76 category:; @@ -52,7 +52,7 @@ #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 flow \, tee \, separate; #X text 10 186 website:; diff --git a/ceammc/ext/doc/flow.tee~.pddoc b/ceammc/ext/doc/flow.tee~.pddoc index 3b86a16159..ea0001a15d 100644 --- a/ceammc/ext/doc/flow.tee~.pddoc +++ b/ceammc/ext/doc/flow.tee~.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky separate audio and control streams - GPL3 + GPL3 or later ceammc flow flow tee separate diff --git a/ceammc/ext/doc/flt.biquad~-help.pd b/ceammc/ext/doc/flt.biquad~-help.pd index 1e1d808402..30a3167f1c 100644 --- a/ceammc/ext/doc/flt.biquad~-help.pd +++ b/ceammc/ext/doc/flt.biquad~-help.pd @@ -44,7 +44,7 @@ filter \, containing two poles and two zeros.; #X text 115 45 ::; #X obj 131 48 ui.link @title flt @url ceammc.flt-help.pd; #X obj 1 547 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 550 library: ceammc v0.7.1; +#X text 10 550 library: ceammc v0.8.0; #X text 505 562 see also:; #X obj 579 562 flt.c_bpf~; #X obj 667 562 flt.c_hpf~; @@ -53,7 +53,7 @@ filter \, containing two poles and two zeros.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 flt.biquad~; #X text 10 76 category:; @@ -63,7 +63,7 @@ filter \, containing two poles and two zeros.; #X text 10 120 authors:; #X text 120 120 Alex Nadzharov \, Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 filter \, biquad; #X text 10 186 website:; diff --git a/ceammc/ext/doc/flt.biquad~.pddoc b/ceammc/ext/doc/flt.biquad~.pddoc index 9791e43744..cf7b9730b4 100644 --- a/ceammc/ext/doc/flt.biquad~.pddoc +++ b/ceammc/ext/doc/flt.biquad~.pddoc @@ -8,7 +8,7 @@ Serge Poltavsky second order IIR filter. - GPL3 + GPL3 or later ceammc flt filter biquad diff --git a/ceammc/ext/doc/flt.bpf12~-help.pd b/ceammc/ext/doc/flt.bpf12~-help.pd index c2f643cd38..c8b0e010c2 100644 --- a/ceammc/ext/doc/flt.bpf12~-help.pd +++ b/ceammc/ext/doc/flt.bpf12~-help.pd @@ -63,7 +63,7 @@ Default value: 2\. Range: 0.01\...100\.; #X text 115 45 ::; #X obj 131 48 ui.link @title flt @url ceammc.flt-help.pd; #X obj 1 728 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 731 library: ceammc v0.7.1; +#X text 10 731 library: ceammc v0.8.0; #X text 505 743 see also:; #X obj 579 743 flt.bpf24~; #X obj 667 743 flt.c_bpf~; @@ -72,7 +72,7 @@ Default value: 2\. Range: 0.01\...100\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 flt.bpf12~; #X text 10 76 category:; @@ -82,7 +82,7 @@ Default value: 2\. Range: 0.01\...100\.; #X text 10 120 authors:; #X text 120 120 Alex Nadzharov \, Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 filter \, biquad \, bpf; #X text 10 186 website:; diff --git a/ceammc/ext/doc/flt.bpf12~.pddoc b/ceammc/ext/doc/flt.bpf12~.pddoc index 0a98d3fa8e..c462f12c54 100644 --- a/ceammc/ext/doc/flt.bpf12~.pddoc +++ b/ceammc/ext/doc/flt.bpf12~.pddoc @@ -8,7 +8,7 @@ Serge Poltavsky Band-pass filter with 12/db per octave slope - GPL3 + GPL3 or later ceammc flt filter biquad bpf diff --git a/ceammc/ext/doc/flt.bpf24~-help.pd b/ceammc/ext/doc/flt.bpf24~-help.pd index c5d0b676ba..3c5e6342d9 100644 --- a/ceammc/ext/doc/flt.bpf24~-help.pd +++ b/ceammc/ext/doc/flt.bpf24~-help.pd @@ -67,7 +67,7 @@ Default value: 2\. Range: 0.01\...100\.; #X text 115 45 ::; #X obj 131 48 ui.link @title flt @url ceammc.flt-help.pd; #X obj 1 748 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 751 library: ceammc v0.7.1; +#X text 10 751 library: ceammc v0.8.0; #X text 593 763 see also:; #X obj 667 763 flt.bpf12~; #N canvas 10 770 400 290 info 0; @@ -75,7 +75,7 @@ Default value: 2\. Range: 0.01\...100\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 flt.bpf24~; #X text 10 76 category:; @@ -85,7 +85,7 @@ Default value: 2\. Range: 0.01\...100\.; #X text 10 120 authors:; #X text 120 120 Alex Nadzharov \, Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 filter \, biquad \, bpf; #X text 10 186 website:; diff --git a/ceammc/ext/doc/flt.bpf24~.pddoc b/ceammc/ext/doc/flt.bpf24~.pddoc index 60da214c17..7388e0ec1b 100644 --- a/ceammc/ext/doc/flt.bpf24~.pddoc +++ b/ceammc/ext/doc/flt.bpf24~.pddoc @@ -8,7 +8,7 @@ Serge Poltavsky Band-pass filter with 24/db per octave slope - GPL3 + GPL3 or later ceammc flt filter biquad bpf diff --git a/ceammc/ext/doc/flt.c_bpf~-help.pd b/ceammc/ext/doc/flt.c_bpf~-help.pd index 7b90db1977..6c9fb45ac1 100644 --- a/ceammc/ext/doc/flt.c_bpf~-help.pd +++ b/ceammc/ext/doc/flt.c_bpf~-help.pd @@ -66,7 +66,7 @@ Default value: 0.1\. Range: 0.01\...100\.; #X text 115 45 ::; #X obj 131 48 ui.link @title flt @url ceammc.flt-help.pd; #X obj 1 851 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 854 library: ceammc v0.7.1; +#X text 10 854 library: ceammc v0.8.0; #X text 396 866 see also:; #X obj 470 866 flt.biquad~; #X obj 565 866 flt.bpf12~; @@ -76,7 +76,7 @@ Default value: 0.1\. Range: 0.01\...100\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 flt.c_bpf~; #X text 10 76 category:; @@ -86,7 +86,7 @@ Default value: 0.1\. Range: 0.01\...100\.; #X text 10 120 authors:; #X text 120 120 Alex Nadzharov \, Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 filter \, biquad \, bpf; #X text 10 186 website:; diff --git a/ceammc/ext/doc/flt.c_bpf~.pddoc b/ceammc/ext/doc/flt.c_bpf~.pddoc index 2eeacc157b..5d48ffad5d 100644 --- a/ceammc/ext/doc/flt.c_bpf~.pddoc +++ b/ceammc/ext/doc/flt.c_bpf~.pddoc @@ -8,7 +8,7 @@ Serge Poltavsky BPF coefficient calculator for biquad filter - GPL3 + GPL3 or later ceammc flt filter biquad bpf diff --git a/ceammc/ext/doc/flt.c_highshelf~-help.pd b/ceammc/ext/doc/flt.c_highshelf~-help.pd index c8c802c603..2c7fae76a0 100644 --- a/ceammc/ext/doc/flt.c_highshelf~-help.pd +++ b/ceammc/ext/doc/flt.c_highshelf~-help.pd @@ -67,7 +67,7 @@ value: 0\. Range: -15\...15\.; #X text 115 45 ::; #X obj 131 48 ui.link @title flt @url ceammc.flt-help.pd; #X obj 1 934 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 937 library: ceammc v0.7.1; +#X text 10 937 library: ceammc v0.8.0; #X text 469 949 see also:; #X obj 543 949 flt.highshelf~; #X obj 660 949 flt.biquad~; @@ -76,7 +76,7 @@ value: 0\. Range: -15\...15\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 flt.c_highshelf~; #X text 10 76 category:; @@ -86,7 +86,7 @@ value: 0\. Range: -15\...15\.; #X text 10 120 authors:; #X text 120 120 Alex Nadzharov \, Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 filter \, highshelf; #X text 10 186 website:; diff --git a/ceammc/ext/doc/flt.c_highshelf~.pddoc b/ceammc/ext/doc/flt.c_highshelf~.pddoc index 14dcb8c398..442a025437 100644 --- a/ceammc/ext/doc/flt.c_highshelf~.pddoc +++ b/ceammc/ext/doc/flt.c_highshelf~.pddoc @@ -8,7 +8,7 @@ Serge Poltavsky Highshelf filter coefficient calculator for biquad - GPL3 + GPL3 or later ceammc flt filter highshelf diff --git a/ceammc/ext/doc/flt.c_hpf~-help.pd b/ceammc/ext/doc/flt.c_hpf~-help.pd index 4c75ba0492..0d74777e73 100644 --- a/ceammc/ext/doc/flt.c_hpf~-help.pd +++ b/ceammc/ext/doc/flt.c_hpf~-help.pd @@ -64,7 +64,7 @@ Default value: 1\. Range: 0.01\...100\.; #X text 115 45 ::; #X obj 131 48 ui.link @title flt @url ceammc.flt-help.pd; #X obj 1 837 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 840 library: ceammc v0.7.1; +#X text 10 840 library: ceammc v0.8.0; #X text 498 852 see also:; #X obj 572 852 flt.biquad~; #X obj 667 852 flt.hpf12~; @@ -73,7 +73,7 @@ Default value: 1\. Range: 0.01\...100\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 flt.c_hpf~; #X text 10 76 category:; @@ -83,7 +83,7 @@ Default value: 1\. Range: 0.01\...100\.; #X text 10 120 authors:; #X text 120 120 Alex Nadzharov \, Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 filter \, biquad \, highpass; #X text 10 186 website:; diff --git a/ceammc/ext/doc/flt.c_hpf~.pddoc b/ceammc/ext/doc/flt.c_hpf~.pddoc index 8c023a453e..85dedf26af 100644 --- a/ceammc/ext/doc/flt.c_hpf~.pddoc +++ b/ceammc/ext/doc/flt.c_hpf~.pddoc @@ -8,7 +8,7 @@ Serge Poltavsky HPF coefficient calculator for biquad filter - GPL3 + GPL3 or later ceammc flt filter biquad highpass diff --git a/ceammc/ext/doc/flt.c_lowshelf~-help.pd b/ceammc/ext/doc/flt.c_lowshelf~-help.pd index abe297ac10..901960d5c5 100644 --- a/ceammc/ext/doc/flt.c_lowshelf~-help.pd +++ b/ceammc/ext/doc/flt.c_lowshelf~-help.pd @@ -67,7 +67,7 @@ value: 0\. Range: -15\...15\.; #X text 115 45 ::; #X obj 131 48 ui.link @title flt @url ceammc.flt-help.pd; #X obj 1 934 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 937 library: ceammc v0.7.1; +#X text 10 937 library: ceammc v0.8.0; #X text 476 949 see also:; #X obj 550 949 flt.lowshelf~; #X obj 660 949 flt.biquad~; @@ -76,7 +76,7 @@ value: 0\. Range: -15\...15\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 flt.c_lowshelf~; #X text 10 76 category:; @@ -86,7 +86,7 @@ value: 0\. Range: -15\...15\.; #X text 10 120 authors:; #X text 120 120 Alex Nadzharov \, Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 filter \, lowshelf; #X text 10 186 website:; diff --git a/ceammc/ext/doc/flt.c_lowshelf~.pddoc b/ceammc/ext/doc/flt.c_lowshelf~.pddoc index 888b2388a7..b2d6ddd859 100644 --- a/ceammc/ext/doc/flt.c_lowshelf~.pddoc +++ b/ceammc/ext/doc/flt.c_lowshelf~.pddoc @@ -8,7 +8,7 @@ Serge Poltavsky Lowshelf filter coefficient calculator for biquad - GPL3 + GPL3 or later ceammc flt filter lowshelf diff --git a/ceammc/ext/doc/flt.c_lpf~-help.pd b/ceammc/ext/doc/flt.c_lpf~-help.pd index 371595ea25..bec6699de1 100644 --- a/ceammc/ext/doc/flt.c_lpf~-help.pd +++ b/ceammc/ext/doc/flt.c_lpf~-help.pd @@ -66,7 +66,7 @@ Default value: 1\. Range: 0.01\...100\.; #X text 115 45 ::; #X obj 131 48 ui.link @title flt @url ceammc.flt-help.pd; #X obj 1 851 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 854 library: ceammc v0.7.1; +#X text 10 854 library: ceammc v0.8.0; #X text 498 866 see also:; #X obj 572 866 flt.biquad~; #X obj 667 866 flt.lpf12~; @@ -75,7 +75,7 @@ Default value: 1\. Range: 0.01\...100\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 flt.c_lpf~; #X text 10 76 category:; @@ -85,7 +85,7 @@ Default value: 1\. Range: 0.01\...100\.; #X text 10 120 authors:; #X text 120 120 Alex Nadzharov \, Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 filter \, biquad \, lowpass; #X text 10 186 website:; diff --git a/ceammc/ext/doc/flt.c_lpf~.pddoc b/ceammc/ext/doc/flt.c_lpf~.pddoc index c751bde315..c59e9b434b 100644 --- a/ceammc/ext/doc/flt.c_lpf~.pddoc +++ b/ceammc/ext/doc/flt.c_lpf~.pddoc @@ -8,7 +8,7 @@ Serge Poltavsky LPF coefficient calculator for biquad filter - GPL3 + GPL3 or later ceammc flt filter biquad lowpass diff --git a/ceammc/ext/doc/flt.c_notch~-help.pd b/ceammc/ext/doc/flt.c_notch~-help.pd index a41e74a112..1c3ea227de 100644 --- a/ceammc/ext/doc/flt.c_notch~-help.pd +++ b/ceammc/ext/doc/flt.c_notch~-help.pd @@ -66,7 +66,7 @@ Default value: 1\. Range: 0.01\...100\.; #X text 115 45 ::; #X obj 131 48 ui.link @title flt @url ceammc.flt-help.pd; #X obj 1 851 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 854 library: ceammc v0.7.1; +#X text 10 854 library: ceammc v0.8.0; #X text 410 866 see also:; #X obj 484 866 flt.c_bpf~; #X obj 572 866 flt.notch~; @@ -76,7 +76,7 @@ Default value: 1\. Range: 0.01\...100\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 flt.c_notch~; #X text 10 76 category:; @@ -86,7 +86,7 @@ Default value: 1\. Range: 0.01\...100\.; #X text 10 120 authors:; #X text 120 120 Alex Nadzharov \, Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 filter \, biquad \, notch \, reject; #X text 10 186 website:; diff --git a/ceammc/ext/doc/flt.c_notch~.pddoc b/ceammc/ext/doc/flt.c_notch~.pddoc index 28c1061bac..d7cd9d4afe 100644 --- a/ceammc/ext/doc/flt.c_notch~.pddoc +++ b/ceammc/ext/doc/flt.c_notch~.pddoc @@ -8,7 +8,7 @@ Serge Poltavsky Band-reject coefficient calculator for biquad filter - GPL3 + GPL3 or later ceammc flt filter biquad notch reject diff --git a/ceammc/ext/doc/flt.c_peak~-help.pd b/ceammc/ext/doc/flt.c_peak~-help.pd index 60920ee67d..7bbeb72814 100644 --- a/ceammc/ext/doc/flt.c_peak~-help.pd +++ b/ceammc/ext/doc/flt.c_peak~-help.pd @@ -71,7 +71,7 @@ Default value: 1\. Range: 0.01\...100\.; #X text 115 45 ::; #X obj 131 48 ui.link @title flt @url ceammc.flt-help.pd; #X obj 1 913 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 916 library: ceammc v0.7.1; +#X text 10 916 library: ceammc v0.8.0; #X text 484 928 see also:; #X obj 558 928 flt.eq_peak~; #X obj 660 928 flt.biquad~; @@ -80,7 +80,7 @@ Default value: 1\. Range: 0.01\...100\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 flt.c_peak~; #X text 10 76 category:; @@ -90,7 +90,7 @@ Default value: 1\. Range: 0.01\...100\.; #X text 10 120 authors:; #X text 120 120 Alex Nadzharov \, Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 filter \, equalizer; #X text 10 186 website:; diff --git a/ceammc/ext/doc/flt.c_peak~.pddoc b/ceammc/ext/doc/flt.c_peak~.pddoc index 24c9acf242..d220ff75a8 100644 --- a/ceammc/ext/doc/flt.c_peak~.pddoc +++ b/ceammc/ext/doc/flt.c_peak~.pddoc @@ -8,7 +8,7 @@ Serge Poltavsky Peaking equalizer calculator for biquad - GPL3 + GPL3 or later ceammc flt filter equalizer diff --git a/ceammc/ext/doc/flt.dcblock2~-help.pd b/ceammc/ext/doc/flt.dcblock2~-help.pd index 9bfa5bdeda..6b58bb43db 100644 --- a/ceammc/ext/doc/flt.dcblock2~-help.pd +++ b/ceammc/ext/doc/flt.dcblock2~-help.pd @@ -36,7 +36,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title flt @url ceammc.flt-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #X text 579 520 see also:; #X obj 653 520 flt.dcblock~; #N canvas 10 527 400 290 info 0; @@ -44,7 +44,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 flt.dcblock2~; #X text 10 76 category:; @@ -54,7 +54,7 @@ #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 filter \, dcblock; #X text 10 186 website:; diff --git a/ceammc/ext/doc/flt.dcblock2~.pddoc b/ceammc/ext/doc/flt.dcblock2~.pddoc index 0d5b3c5eb1..c35fdec84f 100644 --- a/ceammc/ext/doc/flt.dcblock2~.pddoc +++ b/ceammc/ext/doc/flt.dcblock2~.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky stereo DC blocker - GPL3 + GPL3 or later ceammc flt filter dcblock diff --git a/ceammc/ext/doc/flt.dcblock~-help.pd b/ceammc/ext/doc/flt.dcblock~-help.pd index 5e133e8660..e6d2126b77 100644 --- a/ceammc/ext/doc/flt.dcblock~-help.pd +++ b/ceammc/ext/doc/flt.dcblock~-help.pd @@ -30,7 +30,7 @@ kHz) and high-frequency gain near 1.0025 (due to no scaling); #X text 115 45 ::; #X obj 131 48 ui.link @title flt @url ceammc.flt-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #X text 571 520 see also:; #X obj 645 520 flt.dcblock2~; #N canvas 10 527 400 290 info 0; @@ -38,7 +38,7 @@ kHz) and high-frequency gain near 1.0025 (due to no scaling); #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 flt.dcblock~; #X text 10 76 category:; @@ -48,7 +48,7 @@ kHz) and high-frequency gain near 1.0025 (due to no scaling); #X text 10 120 authors:; #X text 120 120 Alex Nadzharov \, Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 filter \, dcblock; #X text 10 186 website:; diff --git a/ceammc/ext/doc/flt.dcblock~.pddoc b/ceammc/ext/doc/flt.dcblock~.pddoc index 22a8d8b074..1b4daf9627 100644 --- a/ceammc/ext/doc/flt.dcblock~.pddoc +++ b/ceammc/ext/doc/flt.dcblock~.pddoc @@ -8,7 +8,7 @@ Serge Poltavsky mono DC blocker - GPL3 + GPL3 or later ceammc flt filter dcblock diff --git a/ceammc/ext/doc/flt.eq10~-help.pd b/ceammc/ext/doc/flt.eq10~-help.pd index e56b4aa388..3225cd94fc 100644 --- a/ceammc/ext/doc/flt.eq10~-help.pd +++ b/ceammc/ext/doc/flt.eq10~-help.pd @@ -9,10 +9,9 @@ #X text 215 80 One band per octave. 5th-order Butterworth filters; #X msg 50 143 fill 0.5 \, bang; #X obj 280 143 r~ ssc; -#X obj 50 172 ui.sliders @count 10 @size 150 100; +#X obj 50 172 ui.sliders @count 10; #X obj 280 172 ui.spectroscope~ @log_scale 1 @size 300 100; -#X obj 50 287 list.each; -#X obj 165 287 l->l 0 1 -10 10; +#X obj 50 287 lin->lin 0 1 -10 10; #X floatatom 222 330 5 0 0 0 - - -; #X obj 78 359 noise.white~; #X msg 222 359 @f8000 \$1; @@ -80,7 +79,7 @@ value: 0\. Range: -70\...10\.; #X text 115 45 ::; #X obj 131 48 ui.link @title flt @url ceammc.flt-help.pd; #X obj 1 1186 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1189 library: ceammc v0.7.1; +#X text 10 1189 library: ceammc v0.8.0; #X text 579 1201 see also:; #X obj 653 1201 flt.eq_peak~; #N canvas 10 1208 400 290 info 0; @@ -88,7 +87,7 @@ value: 0\. Range: -70\...10\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 flt.eq10~; #X text 10 76 category:; @@ -98,7 +97,7 @@ value: 0\. Range: -70\...10\.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 graphic \, filter \, equalizer; #X text 10 186 website:; @@ -111,13 +110,11 @@ https://github.com/uliss/pure-data; #X connect 6 0 8 0; #X connect 7 0 9 0; #X connect 8 0 10 0; +#X connect 11 0 13 0; +#X connect 10 0 14 0; #X connect 12 0 14 0; -#X connect 10 0 15 0; -#X connect 13 0 15 0; +#X connect 13 0 14 0; #X connect 14 0 15 0; -#X connect 15 0 16 0; -#X connect 16 0 18 0; -#X connect 16 0 18 1; -#X connect 16 0 19 0; -#X connect 10 1 11 0; -#X connect 11 0 10 1; \ No newline at end of file +#X connect 15 0 17 0; +#X connect 15 0 17 1; +#X connect 15 0 18 0; \ No newline at end of file diff --git a/ceammc/ext/doc/flt.eq10~.pddoc b/ceammc/ext/doc/flt.eq10~.pddoc index a3670c3dc7..c1cfd62584 100644 --- a/ceammc/ext/doc/flt.eq10~.pddoc +++ b/ceammc/ext/doc/flt.eq10~.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky graphic 10 band equalizer - GPL3 + GPL3 or later ceammc flt graphic filter equalizer @@ -60,7 +60,7 @@ l 0 1 -10 10] +[lin->lin 0 1 -10 10] | | | [F] diff --git a/ceammc/ext/doc/flt.eq_peak_cq~-help.pd b/ceammc/ext/doc/flt.eq_peak_cq~-help.pd index f66f44c097..fbfe341145 100644 --- a/ceammc/ext/doc/flt.eq_peak_cq~-help.pd +++ b/ceammc/ext/doc/flt.eq_peak_cq~-help.pd @@ -61,7 +61,7 @@ Default value: 3\. Range: 0.1\...100\.; #X text 115 45 ::; #X obj 131 48 ui.link @title flt @url ceammc.flt-help.pd; #X obj 1 793 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 796 library: ceammc v0.7.1; +#X text 10 796 library: ceammc v0.8.0; #X text 579 808 see also:; #X obj 653 808 flt.eq_peak~; #N canvas 10 815 400 290 info 0; @@ -69,7 +69,7 @@ Default value: 3\. Range: 0.1\...100\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 flt.eq_peak_cq~; #X text 10 76 category:; @@ -79,7 +79,7 @@ Default value: 3\. Range: 0.1\...100\.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 filter \, equalizer; #X text 10 186 website:; diff --git a/ceammc/ext/doc/flt.eq_peak_cq~.pddoc b/ceammc/ext/doc/flt.eq_peak_cq~.pddoc index 92638b95a4..01cb8f0b35 100644 --- a/ceammc/ext/doc/flt.eq_peak_cq~.pddoc +++ b/ceammc/ext/doc/flt.eq_peak_cq~.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky constant-Q second order peaking equalizer section - GPL3 + GPL3 or later ceammc flt filter equalizer diff --git a/ceammc/ext/doc/flt.eq_peak~-help.pd b/ceammc/ext/doc/flt.eq_peak~-help.pd index 46cec85aa4..4077e8d4a7 100644 --- a/ceammc/ext/doc/flt.eq_peak~-help.pd +++ b/ceammc/ext/doc/flt.eq_peak~-help.pd @@ -63,7 +63,7 @@ float. Units: db. Default value: 0\. Range: -15\...15\.; #X text 115 45 ::; #X obj 131 48 ui.link @title flt @url ceammc.flt-help.pd; #X obj 1 808 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 811 library: ceammc v0.7.1; +#X text 10 811 library: ceammc v0.8.0; #X text 330 823 see also:; #X obj 404 823 flt.eq_peak_cq~; #X obj 528 823 flt.lowshelf~; @@ -73,7 +73,7 @@ float. Units: db. Default value: 0\. Range: -15\...15\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 flt.eq_peak~; #X text 10 76 category:; @@ -83,7 +83,7 @@ float. Units: db. Default value: 0\. Range: -15\...15\.; #X text 10 120 authors:; #X text 120 120 Alex Nadzharov \, Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 filter \, equalizer; #X text 10 186 website:; diff --git a/ceammc/ext/doc/flt.eq_peak~.pddoc b/ceammc/ext/doc/flt.eq_peak~.pddoc index 6bcb5874e8..05e052b94b 100644 --- a/ceammc/ext/doc/flt.eq_peak~.pddoc +++ b/ceammc/ext/doc/flt.eq_peak~.pddoc @@ -9,7 +9,7 @@ second order "peaking equalizer" section (gain boost or cut near some frequency). Also called a "parametric equalizer" section. - GPL3 + GPL3 or later ceammc flt filter equalizer diff --git a/ceammc/ext/doc/flt.highshelf~-help.pd b/ceammc/ext/doc/flt.highshelf~-help.pd index e7f9d7b792..f7184ac606 100644 --- a/ceammc/ext/doc/flt.highshelf~-help.pd +++ b/ceammc/ext/doc/flt.highshelf~-help.pd @@ -55,7 +55,7 @@ Type: float. Units: db. Default value: 0\. Range: -15\...15\.; #X text 115 45 ::; #X obj 131 48 ui.link @title flt @url ceammc.flt-help.pd; #X obj 1 689 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 692 library: ceammc v0.7.1; +#X text 10 692 library: ceammc v0.8.0; #X text 440 704 see also:; #X obj 514 704 flt.lowshelf~; #X obj 624 704 flt.c_highshelf~; @@ -64,7 +64,7 @@ Type: float. Units: db. Default value: 0\. Range: -15\...15\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 flt.highshelf~; #X text 10 76 category:; @@ -74,7 +74,7 @@ Type: float. Units: db. Default value: 0\. Range: -15\...15\.; #X text 10 120 authors:; #X text 120 120 Alex Nadzharov \, Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 filter \, highshelf; #X text 10 186 website:; diff --git a/ceammc/ext/doc/flt.highshelf~.pddoc b/ceammc/ext/doc/flt.highshelf~.pddoc index 0533834575..9b9dc0b690 100644 --- a/ceammc/ext/doc/flt.highshelf~.pddoc +++ b/ceammc/ext/doc/flt.highshelf~.pddoc @@ -8,7 +8,7 @@ Serge Poltavsky gain boost|cut above some frequency - GPL3 + GPL3 or later ceammc flt filter highshelf diff --git a/ceammc/ext/doc/flt.hpf12~-help.pd b/ceammc/ext/doc/flt.hpf12~-help.pd index f68d1c77bc..259702e538 100644 --- a/ceammc/ext/doc/flt.hpf12~-help.pd +++ b/ceammc/ext/doc/flt.hpf12~-help.pd @@ -51,7 +51,7 @@ value: 10000\. Range: 20\...20000\.; #X text 115 45 ::; #X obj 131 48 ui.link @title flt @url ceammc.flt-help.pd; #X obj 1 811 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 814 library: ceammc v0.7.1; +#X text 10 814 library: ceammc v0.8.0; #X text 417 826 see also:; #X obj 491 826 flt.hpf24~; #X obj 579 826 flt.lpf12~; @@ -61,7 +61,7 @@ value: 10000\. Range: 20\...20000\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 flt.hpf12~; #X text 10 76 category:; @@ -71,7 +71,7 @@ value: 10000\. Range: 20\...20000\.; #X text 10 120 authors:; #X text 120 120 Alex Nadzharov \, Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 filter \, highpass; #X text 10 186 website:; diff --git a/ceammc/ext/doc/flt.hpf12~.pddoc b/ceammc/ext/doc/flt.hpf12~.pddoc index c3dce60439..f01ce385c3 100644 --- a/ceammc/ext/doc/flt.hpf12~.pddoc +++ b/ceammc/ext/doc/flt.hpf12~.pddoc @@ -8,7 +8,7 @@ Serge Poltavsky High-pass filter with 12/db per octave slope - GPL3 + GPL3 or later ceammc flt filter highpass diff --git a/ceammc/ext/doc/flt.hpf24~-help.pd b/ceammc/ext/doc/flt.hpf24~-help.pd index 731bc015a2..0da1497528 100644 --- a/ceammc/ext/doc/flt.hpf24~-help.pd +++ b/ceammc/ext/doc/flt.hpf24~-help.pd @@ -51,7 +51,7 @@ value: 10000\. Range: 20\...20000\.; #X text 115 45 ::; #X obj 131 48 ui.link @title flt @url ceammc.flt-help.pd; #X obj 1 811 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 814 library: ceammc v0.7.1; +#X text 10 814 library: ceammc v0.8.0; #X text 417 826 see also:; #X obj 491 826 flt.hpf12~; #X obj 579 826 flt.lpf12~; @@ -61,7 +61,7 @@ value: 10000\. Range: 20\...20000\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 flt.hpf24~; #X text 10 76 category:; @@ -71,7 +71,7 @@ value: 10000\. Range: 20\...20000\.; #X text 10 120 authors:; #X text 120 120 Alex Nadzharov \, Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 filter \, highpass; #X text 10 186 website:; diff --git a/ceammc/ext/doc/flt.hpf24~.pddoc b/ceammc/ext/doc/flt.hpf24~.pddoc index f62eda6b0e..d7771fcc5e 100644 --- a/ceammc/ext/doc/flt.hpf24~.pddoc +++ b/ceammc/ext/doc/flt.hpf24~.pddoc @@ -8,7 +8,7 @@ Serge Poltavsky High-pass filter with 24/db per octave slope - GPL3 + GPL3 or later ceammc flt filter highpass diff --git a/ceammc/ext/doc/flt.lowshelf~-help.pd b/ceammc/ext/doc/flt.lowshelf~-help.pd index 2c722ecc51..2ee9e4d989 100644 --- a/ceammc/ext/doc/flt.lowshelf~-help.pd +++ b/ceammc/ext/doc/flt.lowshelf~-help.pd @@ -54,7 +54,7 @@ Type: float. Units: db. Default value: 0\. Range: -15\...15\.; #X text 115 45 ::; #X obj 131 48 ui.link @title flt @url ceammc.flt-help.pd; #X obj 1 674 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 677 library: ceammc v0.7.1; +#X text 10 677 library: ceammc v0.8.0; #X text 440 689 see also:; #X obj 514 689 flt.highshelf~; #X obj 631 689 flt.c_lowshelf~; @@ -63,7 +63,7 @@ Type: float. Units: db. Default value: 0\. Range: -15\...15\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 flt.lowshelf~; #X text 10 76 category:; @@ -73,7 +73,7 @@ Type: float. Units: db. Default value: 0\. Range: -15\...15\.; #X text 10 120 authors:; #X text 120 120 Alex Nadzharov \, Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 filter \, lowshelf; #X text 10 186 website:; diff --git a/ceammc/ext/doc/flt.lowshelf~.pddoc b/ceammc/ext/doc/flt.lowshelf~.pddoc index c4c710ebbb..cceb721523 100644 --- a/ceammc/ext/doc/flt.lowshelf~.pddoc +++ b/ceammc/ext/doc/flt.lowshelf~.pddoc @@ -8,7 +8,7 @@ Serge Poltavsky gain boost|cut below some frequency - GPL3 + GPL3 or later ceammc flt filter lowshelf diff --git a/ceammc/ext/doc/flt.lpf12~-help.pd b/ceammc/ext/doc/flt.lpf12~-help.pd index 8f21695a25..6e2e2a0a10 100644 --- a/ceammc/ext/doc/flt.lpf12~-help.pd +++ b/ceammc/ext/doc/flt.lpf12~-help.pd @@ -52,7 +52,7 @@ value: 1000\. Range: 20\...20000\.; #X text 115 45 ::; #X obj 131 48 ui.link @title flt @url ceammc.flt-help.pd; #X obj 1 826 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 829 library: ceammc v0.7.1; +#X text 10 829 library: ceammc v0.8.0; #X text 417 841 see also:; #X obj 491 841 flt.lpf24~; #X obj 579 841 flt.hpf12~; @@ -62,7 +62,7 @@ value: 1000\. Range: 20\...20000\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 flt.lpf12~; #X text 10 76 category:; @@ -72,7 +72,7 @@ value: 1000\. Range: 20\...20000\.; #X text 10 120 authors:; #X text 120 120 Alex Nadzharov \, Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 filter \, lowpass; #X text 10 186 website:; diff --git a/ceammc/ext/doc/flt.lpf12~.pddoc b/ceammc/ext/doc/flt.lpf12~.pddoc index b7657eb156..a957307357 100644 --- a/ceammc/ext/doc/flt.lpf12~.pddoc +++ b/ceammc/ext/doc/flt.lpf12~.pddoc @@ -8,7 +8,7 @@ Serge Poltavsky Low-pass filter with 12/db per octave slope - GPL3 + GPL3 or later ceammc flt filter lowpass diff --git a/ceammc/ext/doc/flt.lpf24~-help.pd b/ceammc/ext/doc/flt.lpf24~-help.pd index 79d08be9d2..4349c7fc3b 100644 --- a/ceammc/ext/doc/flt.lpf24~-help.pd +++ b/ceammc/ext/doc/flt.lpf24~-help.pd @@ -52,7 +52,7 @@ value: 1000\. Range: 20\...20000\.; #X text 115 45 ::; #X obj 131 48 ui.link @title flt @url ceammc.flt-help.pd; #X obj 1 826 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 829 library: ceammc v0.7.1; +#X text 10 829 library: ceammc v0.8.0; #X text 417 841 see also:; #X obj 491 841 flt.lpf12~; #X obj 579 841 flt.hpf12~; @@ -62,7 +62,7 @@ value: 1000\. Range: 20\...20000\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 flt.lpf24~; #X text 10 76 category:; @@ -72,7 +72,7 @@ value: 1000\. Range: 20\...20000\.; #X text 10 120 authors:; #X text 120 120 Alex Nadzharov \, Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 filter \, lowpass; #X text 10 186 website:; diff --git a/ceammc/ext/doc/flt.lpf24~.pddoc b/ceammc/ext/doc/flt.lpf24~.pddoc index 866c86967c..adbf1a6782 100644 --- a/ceammc/ext/doc/flt.lpf24~.pddoc +++ b/ceammc/ext/doc/flt.lpf24~.pddoc @@ -8,7 +8,7 @@ Serge Poltavsky Low-pass filter with 24/db per octave slope - GPL3 + GPL3 or later ceammc flt filter lowpass diff --git a/ceammc/ext/doc/flt.median-help.pd b/ceammc/ext/doc/flt.median-help.pd index 2e08e8ba5b..ca02e22760 100644 --- a/ceammc/ext/doc/flt.median-help.pd +++ b/ceammc/ext/doc/flt.median-help.pd @@ -42,13 +42,13 @@ Default value: 9\. Range: 1\...128\.; #X text 115 45 ::; #X obj 131 48 ui.link @title flt @url ceammc.flt-help.pd; #X obj 1 565 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 568 library: ceammc v0.7.1; +#X text 10 568 library: ceammc v0.8.0; #N canvas 10 587 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 flt.median~; #X text 10 76 category:; @@ -58,7 +58,7 @@ Default value: 9\. Range: 1\...128\.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 filter \, median; #X text 10 186 website:; diff --git a/ceammc/ext/doc/flt.median.pddoc b/ceammc/ext/doc/flt.median.pddoc index 68c5a71a44..d3dd9bd420 100644 --- a/ceammc/ext/doc/flt.median.pddoc +++ b/ceammc/ext/doc/flt.median.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky Median control flow filter - GPL3 + GPL3 or later ceammc flt filter median diff --git a/ceammc/ext/doc/flt.moog_vcf~-help.pd b/ceammc/ext/doc/flt.moog_vcf~-help.pd index d82f86cdc9..877a76946b 100644 --- a/ceammc/ext/doc/flt.moog_vcf~-help.pd +++ b/ceammc/ext/doc/flt.moog_vcf~-help.pd @@ -50,13 +50,13 @@ float. Default value: 0.4\. Range: 0\...1\.; #X text 115 45 ::; #X obj 131 48 ui.link @title flt @url ceammc.flt-help.pd; #X obj 1 617 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 620 library: ceammc v0.7.1; +#X text 10 620 library: ceammc v0.8.0; #N canvas 10 639 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 flt.moog_vcf~; #X text 10 76 category:; @@ -66,7 +66,7 @@ float. Default value: 0.4\. Range: 0\...1\.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 moog \, vcf; #X text 10 186 website:; diff --git a/ceammc/ext/doc/flt.moog_vcf~.pddoc b/ceammc/ext/doc/flt.moog_vcf~.pddoc index 00c2bc4b26..4aa18fb60a 100644 --- a/ceammc/ext/doc/flt.moog_vcf~.pddoc +++ b/ceammc/ext/doc/flt.moog_vcf~.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky Moog Voltage Controlled Filter - GPL3 + GPL3 or later ceammc flt moog vcf @@ -37,7 +37,7 @@ Serge Poltavsky band-rejection filter - GPL3 + GPL3 or later ceammc flt filter lowshelf diff --git a/ceammc/ext/doc/flt.resonbp~-help.pd b/ceammc/ext/doc/flt.resonbp~-help.pd index fc2069558f..3e07843020 100644 --- a/ceammc/ext/doc/flt.resonbp~-help.pd +++ b/ceammc/ext/doc/flt.resonbp~-help.pd @@ -53,7 +53,7 @@ value: 1000\. Range: 20\...20000\.; #X text 115 45 ::; #X obj 131 48 ui.link @title flt @url ceammc.flt-help.pd; #X obj 1 659 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 662 library: ceammc v0.7.1; +#X text 10 662 library: ceammc v0.8.0; #X text 593 674 see also:; #X obj 667 674 flt.bpf12~; #N canvas 10 681 400 290 info 0; @@ -61,7 +61,7 @@ value: 1000\. Range: 20\...20000\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 flt.resonbp~; #X text 10 76 category:; @@ -71,7 +71,7 @@ value: 1000\. Range: 20\...20000\.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 filter \, resonant; #X text 10 186 website:; diff --git a/ceammc/ext/doc/flt.resonbp~.pddoc b/ceammc/ext/doc/flt.resonbp~.pddoc index 5ab2a35a1f..5571a55c1f 100644 --- a/ceammc/ext/doc/flt.resonbp~.pddoc +++ b/ceammc/ext/doc/flt.resonbp~.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky Simple resonant bandpass filter - GPL3 + GPL3 or later ceammc flt filter resonant diff --git a/ceammc/ext/doc/fluid~-help.pd b/ceammc/ext/doc/fluid~-help.pd index 540a0068bb..5941406a85 100644 --- a/ceammc/ext/doc/fluid~-help.pd +++ b/ceammc/ext/doc/fluid~-help.pd @@ -79,13 +79,13 @@ release phase). Arguments are:; #X text 115 45 ::; #X obj 131 48 ui.link @title misc @url ceammc.misc-help.pd; #X obj 1 1097 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1100 library: ceammc v0.7.1; +#X text 10 1100 library: ceammc v0.8.0; #N canvas 10 1119 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 fluid~; #X text 10 76 category:; @@ -95,7 +95,7 @@ release phase). Arguments are:; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 mod \, player \, midi \, soundfont \, fluid; #X text 10 186 website:; diff --git a/ceammc/ext/doc/fluid~.pddoc b/ceammc/ext/doc/fluid~.pddoc index 14f7b0ef68..78ecfa58ba 100644 --- a/ceammc/ext/doc/fluid~.pddoc +++ b/ceammc/ext/doc/fluid~.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky FluidSynth SoundFont 2 player - GPL3 + GPL3 or later ceammc misc mod player midi soundfont fluid diff --git a/ceammc/ext/doc/function-help.pd b/ceammc/ext/doc/function-help.pd index 60dcac34b6..c215ab1650 100644 --- a/ceammc/ext/doc/function-help.pd +++ b/ceammc/ext/doc/function-help.pd @@ -39,7 +39,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title base @url ceammc.base-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #X text 572 520 see also:; #X obj 646 520 function.call; #N canvas 10 527 400 290 info 0; @@ -47,7 +47,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 function; #X text 10 76 category:; @@ -57,7 +57,7 @@ #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 function; #X text 10 186 website:; diff --git a/ceammc/ext/doc/function.call-help.pd b/ceammc/ext/doc/function.call-help.pd index 1a5b813e95..a6c52b31e4 100644 --- a/ceammc/ext/doc/function.call-help.pd +++ b/ceammc/ext/doc/function.call-help.pd @@ -41,7 +41,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title base @url ceammc.base-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #X text 606 520 see also:; #X obj 680 523 ui.link @background_color 0.78431 0.78431 0.78431 @title [function] @url function-help.pd; @@ -50,7 +50,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 function.call; #X text 10 76 category:; @@ -60,7 +60,7 @@ #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 function \, call; #X text 10 186 website:; diff --git a/ceammc/ext/doc/function.call.pddoc b/ceammc/ext/doc/function.call.pddoc index b78bb52bb6..64b4adb273 100644 --- a/ceammc/ext/doc/function.call.pddoc +++ b/ceammc/ext/doc/function.call.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky call named function - GPL3 + GPL3 or later ceammc base function call diff --git a/ceammc/ext/doc/function.pddoc b/ceammc/ext/doc/function.pddoc index 3c8d86f15b..a44bf285be 100644 --- a/ceammc/ext/doc/function.pddoc +++ b/ceammc/ext/doc/function.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky named function - GPL3 + GPL3 or later ceammc base function diff --git a/ceammc/ext/doc/fx.bitdown~-help.pd b/ceammc/ext/doc/fx.bitdown~-help.pd index 0548a64dd6..3f33ea6cf2 100644 --- a/ceammc/ext/doc/fx.bitdown~-help.pd +++ b/ceammc/ext/doc/fx.bitdown~-help.pd @@ -58,13 +58,13 @@ Default value: 1\. Range: 1\...200\.; #X text 115 45 ::; #X obj 131 48 ui.link @title fx @url ceammc.fx-help.pd; #X obj 1 730 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 733 library: ceammc v0.7.1; +#X text 10 733 library: ceammc v0.8.0; #N canvas 10 752 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 fx.bitdown~; #X text 10 76 category:; @@ -74,7 +74,7 @@ Default value: 1\. Range: 1\...200\.; #X text 10 120 authors:; #X text 120 120 Viacheslav Lotsmanov \, Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 fx \, bits \, downsample; #X text 10 186 website:; diff --git a/ceammc/ext/doc/fx.bitdown~.pddoc b/ceammc/ext/doc/fx.bitdown~.pddoc index f859212a1f..8b73ff12cf 100644 --- a/ceammc/ext/doc/fx.bitdown~.pddoc +++ b/ceammc/ext/doc/fx.bitdown~.pddoc @@ -8,7 +8,7 @@ Serge Poltavsky bit downer and downsampler effect - GPL3 + GPL3 or later ceammc fx fx bits downsample diff --git a/ceammc/ext/doc/fx.chorus~-help.pd b/ceammc/ext/doc/fx.chorus~-help.pd index 48189dcbb2..e274ce1dfd 100644 --- a/ceammc/ext/doc/fx.chorus~-help.pd +++ b/ceammc/ext/doc/fx.chorus~-help.pd @@ -7,7 +7,7 @@ #X obj 667 11 fx.chorus~; #X msg 50 118 open %CEAMMC%/guitar1.wav \, 1; #X obj 50 147 expand_env; -#X obj 174 147 ui.knob @size 40 40; +#X obj 174 147 ui.knob; #X floatatom 290 147 5 0 0 0 - - -; #X floatatom 405 147 5 0 0 0 - - -; #X obj 50 205 readsf~; @@ -60,13 +60,13 @@ value: 3\. Range: 0\...10\.; #X text 115 45 ::; #X obj 131 48 ui.link @title fx @url ceammc.fx-help.pd; #X obj 1 830 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 833 library: ceammc v0.7.1; +#X text 10 833 library: ceammc v0.8.0; #N canvas 10 852 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 fx.chorus~; #X text 10 76 category:; @@ -76,7 +76,7 @@ value: 3\. Range: 0\...10\.; #X text 10 120 authors:; #X text 120 120 Albert Graef \, Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 fx \, chorus; #X text 10 186 website:; diff --git a/ceammc/ext/doc/fx.chorus~.pddoc b/ceammc/ext/doc/fx.chorus~.pddoc index 12c84051dc..b9353feef7 100644 --- a/ceammc/ext/doc/fx.chorus~.pddoc +++ b/ceammc/ext/doc/fx.chorus~.pddoc @@ -8,7 +8,7 @@ Serge Poltavsky Chorus effect - GPL3 + GPL3 or later ceammc fx fx chorus diff --git a/ceammc/ext/doc/fx.distortion1~-help.pd b/ceammc/ext/doc/fx.distortion1~-help.pd index 1e2f9d3fac..58e25ddae3 100644 --- a/ceammc/ext/doc/fx.distortion1~-help.pd +++ b/ceammc/ext/doc/fx.distortion1~-help.pd @@ -8,8 +8,8 @@ #X msg 50 118 open %CEAMMC%/guitar1.wav \, 1; #X obj 50 147 expand_env; #X obj 50 176 readsf~; -#X obj 69 205 ui.knob @size 40 40; -#X obj 184 205 ui.knob @size 40 40; +#X obj 69 205 ui.knob; +#X obj 184 205 ui.knob; #X obj 318 205 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; #X msg 69 262 @drive \$1; #X msg 184 262 @vibrato \$1; @@ -109,7 +109,7 @@ value: 1\. Range: 0\...1\.; #X text 115 45 ::; #X obj 131 48 ui.link @title fx @url ceammc.fx-help.pd; #X obj 1 1552 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1555 library: ceammc v0.7.1; +#X text 10 1555 library: ceammc v0.8.0; #X text 316 1567 see also:; #X obj 390 1567 fx.distortion~; #X obj 507 1567 fx.distortion2~; @@ -119,7 +119,7 @@ value: 1\. Range: 0\...1\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 fx.distortion1~; #X text 10 76 category:; @@ -129,7 +129,7 @@ value: 1\. Range: 0\...1\.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 fx \, distortion; #X text 10 186 website:; diff --git a/ceammc/ext/doc/fx.distortion1~.pddoc b/ceammc/ext/doc/fx.distortion1~.pddoc index f80a3516f0..567c45b620 100644 --- a/ceammc/ext/doc/fx.distortion1~.pddoc +++ b/ceammc/ext/doc/fx.distortion1~.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky distortion #1 from Guitarix effects set - GPL3 + GPL3 or later ceammc fx fx distortion diff --git a/ceammc/ext/doc/fx.distortion2~-help.pd b/ceammc/ext/doc/fx.distortion2~-help.pd index 14d683efca..2ce5f7fc44 100644 --- a/ceammc/ext/doc/fx.distortion2~-help.pd +++ b/ceammc/ext/doc/fx.distortion2~-help.pd @@ -8,8 +8,8 @@ #X msg 50 118 open %CEAMMC%/guitar1.wav \, 1; #X obj 50 147 expand_env; #X obj 50 176 readsf~; -#X obj 69 205 ui.knob @size 40 40; -#X obj 184 205 ui.knob @size 40 40; +#X obj 69 205 ui.knob; +#X obj 184 205 ui.knob; #X obj 318 205 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; #X msg 69 262 @drive \$1; #X msg 184 262 @vibrato \$1; @@ -76,7 +76,7 @@ value: 0\. Allowed values: 0 \, 1\.; #X text 115 45 ::; #X obj 131 48 ui.link @title fx @url ceammc.fx-help.pd; #X obj 1 1090 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1093 library: ceammc v0.7.1; +#X text 10 1093 library: ceammc v0.8.0; #X text 316 1105 see also:; #X obj 390 1105 fx.distortion~; #X obj 507 1105 fx.distortion1~; @@ -86,7 +86,7 @@ value: 0\. Allowed values: 0 \, 1\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 fx.distortion2~; #X text 10 76 category:; @@ -96,7 +96,7 @@ value: 0\. Allowed values: 0 \, 1\.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 fx \, distortion; #X text 10 186 website:; diff --git a/ceammc/ext/doc/fx.distortion2~.pddoc b/ceammc/ext/doc/fx.distortion2~.pddoc index b8d7408742..44b31d902a 100644 --- a/ceammc/ext/doc/fx.distortion2~.pddoc +++ b/ceammc/ext/doc/fx.distortion2~.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky distortion #2 from Guitarix effects set - GPL3 + GPL3 or later ceammc fx fx distortion diff --git a/ceammc/ext/doc/fx.distortion3~-help.pd b/ceammc/ext/doc/fx.distortion3~-help.pd index cfba8e2a8a..039407f523 100644 --- a/ceammc/ext/doc/fx.distortion3~-help.pd +++ b/ceammc/ext/doc/fx.distortion3~-help.pd @@ -8,9 +8,9 @@ #X msg 50 118 open %CEAMMC%/guitar1.wav \, 1; #X obj 50 147 expand_env; #X obj 50 176 readsf~; -#X obj 69 205 ui.knob @size 40 40; -#X obj 184 205 ui.knob @size 40 40; -#X obj 309 205 ui.knob @size 40 40; +#X obj 69 205 ui.knob; +#X obj 184 205 ui.knob; +#X obj 309 205 ui.knob; #X obj 434 205 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; #X msg 69 262 @drive \$1; #X msg 184 262 @offset \$1; @@ -61,7 +61,7 @@ Default value: 10000\. Range: 1000\...20000\.; #X text 115 45 ::; #X obj 131 48 ui.link @title fx @url ceammc.fx-help.pd; #X obj 1 853 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 856 library: ceammc v0.7.1; +#X text 10 856 library: ceammc v0.8.0; #X text 316 868 see also:; #X obj 390 868 fx.distortion~; #X obj 507 868 fx.distortion1~; @@ -71,7 +71,7 @@ Default value: 10000\. Range: 1000\...20000\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 fx.distortion3~; #X text 10 76 category:; @@ -81,7 +81,7 @@ Default value: 10000\. Range: 1000\...20000\.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 fx \, distortion; #X text 10 186 website:; diff --git a/ceammc/ext/doc/fx.distortion3~.pddoc b/ceammc/ext/doc/fx.distortion3~.pddoc index ae597642ff..aaed922bcf 100644 --- a/ceammc/ext/doc/fx.distortion3~.pddoc +++ b/ceammc/ext/doc/fx.distortion3~.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky simple distortion #3 from Guitarix effects set - GPL3 + GPL3 or later ceammc fx fx distortion diff --git a/ceammc/ext/doc/fx.distortion~-help.pd b/ceammc/ext/doc/fx.distortion~-help.pd index 0c2342d84d..db9d1659ec 100644 --- a/ceammc/ext/doc/fx.distortion~-help.pd +++ b/ceammc/ext/doc/fx.distortion~-help.pd @@ -8,9 +8,9 @@ #X msg 50 118 open %CEAMMC%/guitar1.wav \, 1; #X obj 50 147 expand_env; #X obj 50 176 readsf~; -#X obj 69 205 ui.knob @size 40 40; -#X obj 184 205 ui.knob @size 40 40; -#X obj 309 205 ui.knob @size 40 40; +#X obj 69 205 ui.knob; +#X obj 184 205 ui.knob; +#X obj 309 205 ui.knob; #X obj 434 205 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; #X msg 69 262 @drive \$1; #X msg 184 262 @offset \$1; @@ -67,13 +67,13 @@ even harmonics. Type: float. Default value: 0\. Range: 0\...0.5\.; #X text 115 45 ::; #X obj 131 48 ui.link @title fx @url ceammc.fx-help.pd; #X obj 1 874 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 877 library: ceammc v0.7.1; +#X text 10 877 library: ceammc v0.8.0; #N canvas 10 896 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 fx.distortion~; #X text 10 76 category:; @@ -83,7 +83,7 @@ even harmonics. Type: float. Default value: 0\. Range: 0\...0.5\.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 fx \, distortion; #X text 10 186 website:; diff --git a/ceammc/ext/doc/fx.distortion~.pddoc b/ceammc/ext/doc/fx.distortion~.pddoc index 4d8f339582..a3a146e318 100644 --- a/ceammc/ext/doc/fx.distortion~.pddoc +++ b/ceammc/ext/doc/fx.distortion~.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky cubic nonlinearity distortion - GPL3 + GPL3 or later ceammc fx fx distortion diff --git a/ceammc/ext/doc/fx.drive~-help.pd b/ceammc/ext/doc/fx.drive~-help.pd index 2b86667510..d5eece223b 100644 --- a/ceammc/ext/doc/fx.drive~-help.pd +++ b/ceammc/ext/doc/fx.drive~-help.pd @@ -7,7 +7,7 @@ #X obj 674 11 fx.drive~; #X msg 50 118 open %CEAMMC%/guitar1.wav \, 1; #X obj 50 147 expand_env; -#X obj 174 147 ui.knob @max 10 @min 1 @size 40 40; +#X obj 174 147 ui.knob @min 1 @max 10; #X obj 50 205 readsf~; #X msg 174 205 @drive \$1; #X obj 50 262 fx.drive~; @@ -49,13 +49,13 @@ int. Default value: 0\. Allowed values: 0 \, 1\.; #X text 115 45 ::; #X obj 131 48 ui.link @title fx @url ceammc.fx-help.pd; #X obj 1 697 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 700 library: ceammc v0.7.1; +#X text 10 700 library: ceammc v0.8.0; #N canvas 10 719 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 fx.drive~; #X text 10 76 category:; @@ -65,7 +65,7 @@ int. Default value: 0\. Allowed values: 0 \, 1\.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 fx \, drive; #X text 10 186 website:; diff --git a/ceammc/ext/doc/fx.drive~.pddoc b/ceammc/ext/doc/fx.drive~.pddoc index 6ed171a49c..f11ed52882 100644 --- a/ceammc/ext/doc/fx.drive~.pddoc +++ b/ceammc/ext/doc/fx.drive~.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky Guitarix drive effect - GPL3 + GPL3 or later ceammc fx fx drive @@ -38,7 +38,7 @@ Serge Poltavsky mono sympathetic resonance generator - GPL3 + GPL3 or later ceammc fx fx drone @@ -28,6 +28,8 @@ signal, 1 - wet. if set to 1 - bypass 'effected' signal. + on/off dsp + processing diff --git a/ceammc/ext/doc/fx.echo~-help.pd b/ceammc/ext/doc/fx.echo~-help.pd index d9a3c75d57..e1b3c44106 100644 --- a/ceammc/ext/doc/fx.echo~-help.pd +++ b/ceammc/ext/doc/fx.echo~-help.pd @@ -63,7 +63,7 @@ value: 0.3\. Range: 0\...0.99\.; #X text 115 45 ::; #X obj 131 48 ui.link @title fx @url ceammc.fx-help.pd; #X obj 1 835 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 838 library: ceammc v0.7.1; +#X text 10 838 library: ceammc v0.8.0; #X text 593 850 see also:; #X obj 667 850 fx.sdelay~; #N canvas 10 857 400 290 info 0; @@ -71,7 +71,7 @@ value: 0.3\. Range: 0\...0.99\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 fx.echo~; #X text 10 76 category:; @@ -81,7 +81,7 @@ value: 0.3\. Range: 0\...0.99\.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 fx \, echo \, delay; #X text 10 186 website:; diff --git a/ceammc/ext/doc/fx.echo~.pddoc b/ceammc/ext/doc/fx.echo~.pddoc index d637648b52..ffd81a8184 100644 --- a/ceammc/ext/doc/fx.echo~.pddoc +++ b/ceammc/ext/doc/fx.echo~.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky simple echo effect - GPL3 + GPL3 or later ceammc fx fx echo delay diff --git a/ceammc/ext/doc/fx.flanger~-help.pd b/ceammc/ext/doc/fx.flanger~-help.pd index d072af5fdf..9ebb59720e 100644 --- a/ceammc/ext/doc/fx.flanger~-help.pd +++ b/ceammc/ext/doc/fx.flanger~-help.pd @@ -12,14 +12,14 @@ #X floatatom 174 205 5 0 0 0 - - -; #X floatatom 290 205 5 0 0 0 - - -; #X floatatom 405 205 5 0 0 0 - - -; -#X obj 530 205 ui.knob @size 40 40; +#X obj 530 205 ui.knob; #X obj 50 262 readsf~; #X msg 174 262 @speed \$1; #X msg 290 262 @delay \$1; #X msg 405 262 @offset \$1; #X msg 530 262 @feedback \$1; #X obj 174 291 s flng; -#X obj 434 320 ui.knob @size 40 40; +#X obj 434 320 ui.knob; #X obj 78 349 r flng; #X obj 184 349 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; #X obj 309 349 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; @@ -74,13 +74,13 @@ Default value: 0.5\. Range: 0\...10\.; #X text 115 45 ::; #X obj 131 48 ui.link @title fx @url ceammc.fx-help.pd; #X obj 1 996 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 999 library: ceammc v0.7.1; +#X text 10 999 library: ceammc v0.8.0; #N canvas 10 1018 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 fx.flanger~; #X text 10 76 category:; @@ -90,7 +90,7 @@ Default value: 0.5\. Range: 0\...10\.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 fx \, flanger; #X text 10 186 website:; diff --git a/ceammc/ext/doc/fx.flanger~.pddoc b/ceammc/ext/doc/fx.flanger~.pddoc index df111879c4..d6feee3c63 100644 --- a/ceammc/ext/doc/fx.flanger~.pddoc +++ b/ceammc/ext/doc/fx.flanger~.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky mono flanging effect - GPL3 + GPL3 or later ceammc fx fx flanger diff --git a/ceammc/ext/doc/fx.freeverb2~-help.pd b/ceammc/ext/doc/fx.freeverb2~-help.pd index 904dc89d24..87ea4a2ac9 100644 --- a/ceammc/ext/doc/fx.freeverb2~-help.pd +++ b/ceammc/ext/doc/fx.freeverb2~-help.pd @@ -13,9 +13,9 @@ Schroeder-Moorer filtered-feedback comb-filters for each audio channel \, and is said to be especially well tuned.; #X msg 50 203 open %CEAMMC%/guitar1.wav \, 1; #X obj 50 232 expand_env; -#X obj 174 261 ui.knob @size 40 40; -#X obj 280 261 ui.knob @size 40 40; -#X obj 386 261 ui.knob @size 40 40; +#X obj 174 261 ui.knob; +#X obj 280 261 ui.knob; +#X obj 386 261 ui.knob; #X obj 50 290 readsf~; #X msg 174 319 @room \$1; #X msg 280 319 @damp \$1; @@ -80,13 +80,13 @@ Range: 0\...1\.; #X text 115 45 ::; #X obj 131 48 ui.link @title fx @url ceammc.fx-help.pd; #X obj 1 1062 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1065 library: ceammc v0.7.1; +#X text 10 1065 library: ceammc v0.8.0; #N canvas 10 1084 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 fx.freeverb2~; #X text 10 76 category:; @@ -96,7 +96,7 @@ Range: 0\...1\.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 fx \, reverb; #X text 10 186 website:; diff --git a/ceammc/ext/doc/fx.freeverb2~.pddoc b/ceammc/ext/doc/fx.freeverb2~.pddoc index ddd01b9df8..76b14856cb 100644 --- a/ceammc/ext/doc/fx.freeverb2~.pddoc +++ b/ceammc/ext/doc/fx.freeverb2~.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky freeverb2 - stereo version of freeverb - GPL3 + GPL3 or later ceammc fx fx reverb diff --git a/ceammc/ext/doc/fx.freeverb~-help.pd b/ceammc/ext/doc/fx.freeverb~-help.pd index 5e0d9b8f87..c3f5bd54ad 100644 --- a/ceammc/ext/doc/fx.freeverb~-help.pd +++ b/ceammc/ext/doc/fx.freeverb~-help.pd @@ -16,9 +16,9 @@ Schroeder-Moorer filtered-feedback comb-filters for each audio channel #X obj 50 232 lfo.impulse~ 2; #X obj 232 232 expand_env; #X obj 78 261 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; -#X obj 232 261 ui.knob @size 40 40; -#X obj 338 261 ui.knob @size 40 40; -#X obj 443 261 ui.knob @size 40 40; +#X obj 232 261 ui.knob; +#X obj 338 261 ui.knob; +#X obj 443 261 ui.knob; #X obj 50 290 *~; #X obj 107 290 readsf~; #X msg 232 319 @room \$1; @@ -80,7 +80,7 @@ Range: 0\...1\.; #X text 115 45 ::; #X obj 131 48 ui.link @title fx @url ceammc.fx-help.pd; #X obj 1 1022 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1025 library: ceammc v0.7.1; +#X text 10 1025 library: ceammc v0.8.0; #X text 571 1037 see also:; #X obj 645 1037 fx.freeverb2~; #N canvas 10 1044 400 290 info 0; @@ -88,7 +88,7 @@ Range: 0\...1\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 fx.freeverb~; #X text 10 76 category:; @@ -98,7 +98,7 @@ Range: 0\...1\.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 fx \, reverb; #X text 10 186 website:; diff --git a/ceammc/ext/doc/fx.freeverb~.pddoc b/ceammc/ext/doc/fx.freeverb~.pddoc index f6193e8132..9d8410c4fc 100644 --- a/ceammc/ext/doc/fx.freeverb~.pddoc +++ b/ceammc/ext/doc/fx.freeverb~.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky freeverb - common used open-source reverb - GPL3 + GPL3 or later ceammc fx fx reverb diff --git a/ceammc/ext/doc/fx.freqshift~-help.pd b/ceammc/ext/doc/fx.freqshift~-help.pd index bc2fdd959c..d5eb822a50 100644 --- a/ceammc/ext/doc/fx.freqshift~-help.pd +++ b/ceammc/ext/doc/fx.freqshift~-help.pd @@ -34,13 +34,13 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title fx @url ceammc.fx-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #N canvas 10 527 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 fx.freqshift~; #X text 10 76 category:; @@ -50,7 +50,7 @@ #X text 10 120 authors:; #X text 120 120 Alex Nadzharov \, Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 fx \, freqshift; #X text 10 186 website:; diff --git a/ceammc/ext/doc/fx.freqshift~.pddoc b/ceammc/ext/doc/fx.freqshift~.pddoc index 6b858039f6..e0a1402575 100644 --- a/ceammc/ext/doc/fx.freqshift~.pddoc +++ b/ceammc/ext/doc/fx.freqshift~.pddoc @@ -8,7 +8,7 @@ Serge Poltavsky frequency shifter or single-sideband ring modulation - GPL3 + GPL3 or later ceammc fx fx freqshift diff --git a/ceammc/ext/doc/fx.granulator~-help.pd b/ceammc/ext/doc/fx.granulator~-help.pd index 45be2d35c1..cc44c38c8c 100644 --- a/ceammc/ext/doc/fx.granulator~-help.pd +++ b/ceammc/ext/doc/fx.granulator~-help.pd @@ -56,13 +56,13 @@ value: 100\. Range: 10\...500\.; #X text 115 45 ::; #X obj 131 48 ui.link @title fx @url ceammc.fx-help.pd; #X obj 1 737 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 740 library: ceammc v0.7.1; +#X text 10 740 library: ceammc v0.8.0; #N canvas 10 759 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 fx.granulator~; #X text 10 76 category:; @@ -72,7 +72,7 @@ value: 100\. Range: 10\...500\.; #X text 10 120 authors:; #X text 120 120 Mayank Sanganeria \, Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 fx \, bits \, granulator; #X text 10 186 website:; diff --git a/ceammc/ext/doc/fx.granulator~.pddoc b/ceammc/ext/doc/fx.granulator~.pddoc index 16bc9f98a1..ed5af8adb7 100644 --- a/ceammc/ext/doc/fx.granulator~.pddoc +++ b/ceammc/ext/doc/fx.granulator~.pddoc @@ -8,7 +8,7 @@ Serge Poltavsky simple input stream granulator - GPL3 + GPL3 or later ceammc fx fx bits granulator diff --git a/ceammc/ext/doc/fx.greyhole~-help.pd b/ceammc/ext/doc/fx.greyhole~-help.pd index 966427baea..5efedd7b13 100644 --- a/ceammc/ext/doc/fx.greyhole~-help.pd +++ b/ceammc/ext/doc/fx.greyhole~-help.pd @@ -86,7 +86,7 @@ structure. Type: float. Default value: 2\. Range: 0\...10\.; #X text 115 45 ::; #X obj 131 48 ui.link @title fx @url ceammc.fx-help.pd; #X obj 1 1254 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1257 library: ceammc v0.7.1; +#X text 10 1257 library: ceammc v0.8.0; #X text 571 1269 see also:; #X obj 645 1269 fx.freeverb2~; #N canvas 10 1276 400 290 info 0; @@ -94,7 +94,7 @@ structure. Type: float. Default value: 2\. Range: 0\...10\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 fx.greyhole~; #X text 10 76 category:; @@ -104,7 +104,7 @@ structure. Type: float. Default value: 2\. Range: 0\...10\.; #X text 10 120 authors:; #X text 120 120 Julian Parker \, Till Bovermann \, Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 fx \, reverb \, echo; #X text 10 186 website:; diff --git a/ceammc/ext/doc/fx.greyhole~.pddoc b/ceammc/ext/doc/fx.greyhole~.pddoc index 873658ba9e..af2a35fa40 100644 --- a/ceammc/ext/doc/fx.greyhole~.pddoc +++ b/ceammc/ext/doc/fx.greyhole~.pddoc @@ -9,7 +9,7 @@ Serge Poltavsky A complex echo-like effect - GPL3 + GPL3 or later ceammc fx fx reverb echo diff --git a/ceammc/ext/doc/fx.looper~-help.pd b/ceammc/ext/doc/fx.looper~-help.pd index 78eb200c9c..c5f43b331f 100644 --- a/ceammc/ext/doc/fx.looper~-help.pd +++ b/ceammc/ext/doc/fx.looper~-help.pd @@ -41,92 +41,92 @@ to play. Type: float. Units: ms. Default value: 20\. Min value: 0\.; to stop. Type: float. Units: ms. Default value: 20\. Min value: 0\.; #X msg 110 594 @length; #X text 245 594 (readonly) Get recorded loop length. Type: float. Units: -sec.; -#X msg 110 623 @loop_bang; -#X text 245 623 Get/Set output bang on each loop start. Type: int. +sec. Min value: 0\.; +#X msg 110 636 @loop_bang; +#X text 245 636 Get/Set output bang on each loop start. Type: int. Default value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 665 @loop_smooth; -#X text 245 665 Get/Set time of lin fadein/fadeout applied to recorded +#X msg 110 678 @loop_smooth; +#X text 245 678 Get/Set time of lin fadein/fadeout applied to recorded loop for smooth playing. Type: float. Units: ms. Default value: 10\. Min value: 0\.; -#X msg 110 722 @play_phase; -#X text 245 722 (readonly) Get current playing phase position. Type: +#X msg 110 735 @play_phase; +#X text 245 735 (readonly) Get current playing phase position. Type: float. Range: 0\...1\.; -#X msg 110 764 @play_pos; -#X text 245 764 (readonly) Get current playing position. Type: float. -Units: sec.; -#X msg 110 806 @play_to_dub_time; -#X text 245 806 Get/Set fadein time of overdub input signal while transition +#X msg 110 777 @play_pos; +#X text 245 777 (readonly) Get current playing position. Type: float. +Units: sec. Min value: 0\.; +#X msg 110 819 @play_to_dub_time; +#X text 245 819 Get/Set fadein time of overdub input signal while transition from play mode. Type: float. Units: ms. Default value: 10\. Min value: 0\.; -#X msg 110 863 @play_to_stop_time; -#X text 245 863 Get/Set fadeout time while transition from play to +#X msg 110 876 @play_to_stop_time; +#X text 245 876 Get/Set fadeout time while transition from play to stop. Type: float. Units: ms. Default value: 10\. Min value: 0\.; -#X msg 110 905 @rec_to_play_time; -#X text 245 905 Get/Set xfade between recorded and input signal while +#X msg 110 918 @rec_to_play_time; +#X text 245 918 Get/Set xfade between recorded and input signal while transition from record to play. Type: float. Units: ms. Default value: 30\. Min value: 0\.; -#X msg 110 962 @round; -#X text 245 962 Get/Set encrease loop length to be multiple of specified +#X msg 110 975 @round; +#X text 245 975 Get/Set encrease loop length to be multiple of specified value. If *0* - no rounding is performed. Type: int. Units: samp. Default value: 0\. Min value: 0\.; -#X msg 110 1019 @state; -#X text 245 1019 (readonly) Get current state. Type: symbol. Allowed +#X msg 110 1032 @state; +#X text 245 1032 (readonly) Get current state. Type: symbol. Allowed values: init \, stop \, record \, play \, overdub.; -#X msg 110 1061 @stop_to_play_time; -#X text 245 1061 Get/Set fadein time of play while transition from +#X msg 110 1074 @stop_to_play_time; +#X text 245 1074 Get/Set fadein time of play while transition from stop. Type: float. Units: ms. Default value: 10\. Min value: 0\.; -#X obj 20 1113 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1118 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 1126 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1131 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 1153 adjust; -#X text 245 1153 increase loop length. Arguments are:; -#X obj 255 1176 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1176 SAMP: loop length delta. Type: float.; -#X msg 110 1201 clear; -#X text 245 1201 clear loop data and stops playing.; -#X msg 110 1228 overdub; -#X text 245 1228 start loop overdubbing while keeping it playing.; -#X msg 110 1255 pause; -#X text 245 1255 loop pause.; -#X msg 110 1282 play; -#X text 245 1282 play recorded or stopped loop.; -#X msg 110 1309 rec; -#X text 245 1309 same as record.; -#X msg 110 1336 record; -#X text 245 1336 start loop record.; -#X msg 110 1363 smooth; -#X text 245 1363 Arguments are:; -#X obj 255 1386 cnv 1 22 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1386 MS: apply linear fadein/fadeout to loop. Type: float.; -#X msg 110 1411 stop; -#X text 245 1411 stop played loop.; -#X obj 20 1448 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1453 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +#X msg 110 1166 adjust; +#X text 245 1166 increase loop length. Arguments are:; +#X obj 255 1189 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1189 SAMP: loop length delta. Type: float.; +#X msg 110 1214 clear; +#X text 245 1214 clear loop data and stops playing.; +#X msg 110 1241 overdub; +#X text 245 1241 start loop overdubbing while keeping it playing.; +#X msg 110 1268 pause; +#X text 245 1268 loop pause.; +#X msg 110 1295 play; +#X text 245 1295 play recorded or stopped loop.; +#X msg 110 1322 rec; +#X text 245 1322 same as record.; +#X msg 110 1349 record; +#X text 245 1349 start loop record.; +#X msg 110 1376 smooth; +#X text 245 1376 Arguments are:; +#X obj 255 1399 cnv 1 22 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1399 MS: apply linear fadein/fadeout to loop. Type: float.; +#X msg 110 1424 stop; +#X text 245 1424 stop played loop.; +#X obj 20 1461 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1466 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1454 1\.; -#X text 245 1454 input signal.; -#X obj 20 1484 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1489 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 1467 1\.; +#X text 245 1467 input signal.; +#X obj 20 1497 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1502 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1490 1\.; -#X text 245 1490 output signal.; -#X text 110 1510 2\.; -#X text 245 1510 bang on each loop start if @loop_bang property is +#X text 110 1503 1\.; +#X text 245 1503 output signal.; +#X text 110 1523 2\.; +#X text 245 1523 bang on each loop start if @loop_bang property is true.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title fx @url ceammc.fx-help.pd; -#X obj 1 1560 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1563 library: ceammc v0.7.1; -#N canvas 10 1582 400 290 info 0; +#X obj 1 1573 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1576 library: ceammc v0.8.0; +#N canvas 10 1595 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 fx.looper~; #X text 10 76 category:; @@ -136,7 +136,7 @@ true.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 fx \, looper; #X text 10 186 website:; @@ -145,7 +145,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1582 pd info; +#X restore 10 1595 pd info; #X connect 4 0 10 0; #X connect 5 0 10 0; #X connect 6 0 10 0; diff --git a/ceammc/ext/doc/fx.looper~.pddoc b/ceammc/ext/doc/fx.looper~.pddoc index edbb6ba788..e31787a7ec 100644 --- a/ceammc/ext/doc/fx.looper~.pddoc +++ b/ceammc/ext/doc/fx.looper~.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky One track looper - GPL3 + GPL3 or later ceammc fx fx looper @@ -19,12 +19,12 @@ max loop time - recorded loop - length + + recorded loop length use specified array for record instead of internal buffer - current playing - position + + current playing position current playing phase position Serge Poltavsky simple pitch shifter based on 2 delay lines - GPL3 + GPL3 or later ceammc fx fx pitchshift diff --git a/ceammc/ext/doc/fx.sdelay~-help.pd b/ceammc/ext/doc/fx.sdelay~-help.pd index 661837e2f6..5614eda5bc 100644 --- a/ceammc/ext/doc/fx.sdelay~-help.pd +++ b/ceammc/ext/doc/fx.sdelay~-help.pd @@ -74,7 +74,7 @@ Default value: 20\. Range: 1\...200\.; #X text 115 45 ::; #X obj 131 48 ui.link @title fx @url ceammc.fx-help.pd; #X obj 1 987 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 990 library: ceammc v0.7.1; +#X text 10 990 library: ceammc v0.8.0; #X text 607 1002 see also:; #X obj 681 1002 fx.echo~; #N canvas 10 1009 400 290 info 0; @@ -82,7 +82,7 @@ Default value: 20\. Range: 1\...200\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 fx.sdelay~; #X text 10 76 category:; @@ -92,7 +92,7 @@ Default value: 20\. Range: 1\...200\.; #X text 10 120 authors:; #X text 120 120 Yann Orlarey \, Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 fx \, echo \, delay; #X text 10 186 website:; diff --git a/ceammc/ext/doc/fx.sdelay~.pddoc b/ceammc/ext/doc/fx.sdelay~.pddoc index c4f92029a3..809af0a601 100644 --- a/ceammc/ext/doc/fx.sdelay~.pddoc +++ b/ceammc/ext/doc/fx.sdelay~.pddoc @@ -8,7 +8,7 @@ Serge Poltavsky smooth delay with a feedback control - GPL3 + GPL3 or later ceammc fx fx echo delay diff --git a/ceammc/ext/doc/fx.vocoder~-help.pd b/ceammc/ext/doc/fx.vocoder~-help.pd index ee400e6f9b..d915f0b123 100644 --- a/ceammc/ext/doc/fx.vocoder~-help.pd +++ b/ceammc/ext/doc/fx.vocoder~-help.pd @@ -47,13 +47,13 @@ value: 5\. Range: 0.1\...100\.; #X text 115 45 ::; #X obj 131 48 ui.link @title fx @url ceammc.fx-help.pd; #X obj 1 660 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 663 library: ceammc v0.7.1; +#X text 10 663 library: ceammc v0.8.0; #N canvas 10 682 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 fx.vocoder~; #X text 10 76 category:; @@ -63,7 +63,7 @@ value: 5\. Range: 0.1\...100\.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 vocoder; #X text 10 186 website:; diff --git a/ceammc/ext/doc/fx.vocoder~.pddoc b/ceammc/ext/doc/fx.vocoder~.pddoc index 80bcf03d15..f579021a27 100644 --- a/ceammc/ext/doc/fx.vocoder~.pddoc +++ b/ceammc/ext/doc/fx.vocoder~.pddoc @@ -8,7 +8,7 @@ very simple vocoder where the spectrum of the modulation signal is analyzed using a 32-band filter bank - GPL3 + GPL3 or later ceammc fx vocoder diff --git a/ceammc/ext/doc/fx.wahwah~-help.pd b/ceammc/ext/doc/fx.wahwah~-help.pd index 5024c35b44..979e853058 100644 --- a/ceammc/ext/doc/fx.wahwah~-help.pd +++ b/ceammc/ext/doc/fx.wahwah~-help.pd @@ -16,42 +16,45 @@ #X obj 20 330 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 335 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; -#X msg 110 370 @angle; -#X text 245 370 Get/Set pedal angle. Type: float. Default value: 0.6\. +#X msg 110 370 @active; +#X text 245 370 Get/Set on/off dsp processing. Type: int. Default value: +1\. Allowed values: 0 \, 1\.; +#X msg 110 412 @angle; +#X text 245 412 Get/Set pedal angle. Type: float. Default value: 0.6\. Range: 0\...1\.; -#X msg 110 412 @bypass; -#X text 245 412 Get/Set if set to 1 - bypass 'effected' signal. Type: +#X msg 110 454 @bypass; +#X text 245 454 Get/Set if set to 1 - bypass 'effected' signal. Type: int. Default value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 454 @drywet; -#X text 245 454 Get/Set proportion of mix between the original (dry) +#X msg 110 496 @drywet; +#X text 245 496 Get/Set proportion of mix between the original (dry) and 'effected' (wet) signals. 0 - dry signal \, 1 - wet. Type: float. Default value: 1\. Range: 0\...1\.; -#X msg 110 511 @speed; -#X text 245 511 Get/Set automatisation speed. Type: float. Units: bpm. +#X msg 110 553 @speed; +#X text 245 553 Get/Set automatisation speed. Type: float. Units: bpm. Default value: 540\. Range: 360\...780\.; -#X obj 20 563 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 568 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X obj 20 605 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 610 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 569 1\.; -#X text 245 569 input signal.; -#X obj 20 599 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 604 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 611 1\.; +#X text 245 611 input signal.; +#X obj 20 641 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 646 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 605 1\.; -#X text 245 605; +#X text 110 647 1\.; +#X text 245 647; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title fx @url ceammc.fx-help.pd; -#X obj 1 655 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 658 library: ceammc v0.7.1; -#N canvas 10 677 400 290 info 0; +#X obj 1 697 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 700 library: ceammc v0.8.0; +#N canvas 10 719 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 fx.wahwah~; #X text 10 76 category:; @@ -61,7 +64,7 @@ Default value: 540\. Range: 360\...780\.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 wahwah \, guitar \, crybaby; #X text 10 186 website:; @@ -70,7 +73,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 677 pd info; +#X restore 10 719 pd info; #X connect 4 0 5 0; #X connect 6 0 7 0; #X connect 5 0 8 0; diff --git a/ceammc/ext/doc/fx.wahwah~.pddoc b/ceammc/ext/doc/fx.wahwah~.pddoc index cb9c51e6b7..aaa5f6f10f 100644 --- a/ceammc/ext/doc/fx.wahwah~.pddoc +++ b/ceammc/ext/doc/fx.wahwah~.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky digitized CryBaby wah pedal - GPL3 + GPL3 or later ceammc fx wahwah guitar crybaby @@ -23,6 +23,8 @@ wet. if set to 1 - bypass 'effected' signal. + on/off dsp + processing diff --git a/ceammc/ext/doc/fx.zita_rev1~-help.pd b/ceammc/ext/doc/fx.zita_rev1~-help.pd index 09fe39f147..d64710053f 100644 --- a/ceammc/ext/doc/fx.zita_rev1~-help.pd +++ b/ceammc/ext/doc/fx.zita_rev1~-help.pd @@ -100,13 +100,13 @@ middle frequencies. Type: float. Units: Hz. Default value: 200\. Range: #X text 115 45 ::; #X obj 131 48 ui.link @title fx @url ceammc.fx-help.pd; #X obj 1 1337 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1340 library: ceammc v0.7.1; +#X text 10 1340 library: ceammc v0.8.0; #N canvas 10 1359 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 fx.zita_rev1~; #X text 10 76 category:; @@ -116,7 +116,7 @@ middle frequencies. Type: float. Units: Hz. Default value: 200\. Range: #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 fx \, reverb; #X text 10 186 website:; diff --git a/ceammc/ext/doc/fx.zita_rev1~.pddoc b/ceammc/ext/doc/fx.zita_rev1~.pddoc index ba38c93cca..861f5a9c8d 100644 --- a/ceammc/ext/doc/fx.zita_rev1~.pddoc +++ b/ceammc/ext/doc/fx.zita_rev1~.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky Zita stereo reverb - GPL3 + GPL3 or later ceammc fx fx reverb diff --git a/ceammc/ext/doc/gain~-help.pd b/ceammc/ext/doc/gain~-help.pd index a33665d897..9c6e609946 100644 --- a/ceammc/ext/doc/gain~-help.pd +++ b/ceammc/ext/doc/gain~-help.pd @@ -4,12 +4,12 @@ #X text 598 50 multislot signal gain; #X obj 1 1 cnv 5 765 40 empty empty gain~ 20 20 0 20 -104026 -4096 0; #X obj 703 11 gain~; -#X obj 50 118 ui.sliders @count 4 @size 150 100; +#X obj 50 118 ui.sliders @count 4; #X obj 299 118 ui.dsp~; #X obj 69 234 sig~ 1; #X msg 184 234 +all 0.1; #X msg 290 234 -db 6 3; -#X obj 309 262 ui.knob @size 40 40; +#X obj 309 262 ui.knob; #X obj 50 320 gain~ 4 . . . . . . .; #X obj 50 349 env~; #X obj 117 349 env~; @@ -98,13 +98,13 @@ ms. Default value: 20\. Min value: 1\.; #X text 115 45 ::; #X obj 131 48 ui.link @title base @url ceammc.base-help.pd; #X obj 1 1256 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1259 library: ceammc v0.7.1; +#X text 10 1259 library: ceammc v0.8.0; #N canvas 10 1278 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 gain~; #X text 10 76 category:; @@ -114,7 +114,7 @@ ms. Default value: 20\. Min value: 1\.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 gain \, amplitude \, decibel; #X text 10 186 website:; diff --git a/ceammc/ext/doc/gain~.pddoc b/ceammc/ext/doc/gain~.pddoc index e5799cd48c..0105291ada 100644 --- a/ceammc/ext/doc/gain~.pddoc +++ b/ceammc/ext/doc/gain~.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky multislot signal gain - GPL3 + GPL3 or later ceammc base gain amplitude decibel @@ -64,7 +64,7 @@ Serge Poltavsky global named dict object - GPL3 + GPL3 or later ceammc global dict local global diff --git a/ceammc/ext/doc/global.float-help.pd b/ceammc/ext/doc/global.float-help.pd index 3118f11dc3..cda0e1e840 100644 --- a/ceammc/ext/doc/global.float-help.pd +++ b/ceammc/ext/doc/global.float-help.pd @@ -63,7 +63,7 @@ name.; #X text 115 45 ::; #X obj 131 48 ui.link @title global @url ceammc.global-help.pd; #X obj 1 758 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 761 library: ceammc v0.7.1; +#X text 10 761 library: ceammc v0.8.0; #X text 500 773 see also:; #X obj 574 773 local.float; #X obj 668 773 global.int; @@ -72,7 +72,7 @@ name.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 global.float; #X text 10 76 category:; @@ -82,7 +82,7 @@ name.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 float \, global; #X text 10 186 website:; diff --git a/ceammc/ext/doc/global.float.pddoc b/ceammc/ext/doc/global.float.pddoc index eadb85fd86..6a771cb660 100644 --- a/ceammc/ext/doc/global.float.pddoc +++ b/ceammc/ext/doc/global.float.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky global named float object - GPL3 + GPL3 or later ceammc global float global diff --git a/ceammc/ext/doc/global.int-help.pd b/ceammc/ext/doc/global.int-help.pd index 7d045878fe..c8d6a0715b 100644 --- a/ceammc/ext/doc/global.int-help.pd +++ b/ceammc/ext/doc/global.int-help.pd @@ -63,7 +63,7 @@ ID name.; #X text 115 45 ::; #X obj 131 48 ui.link @title global @url ceammc.global-help.pd; #X obj 1 758 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 761 library: ceammc v0.7.1; +#X text 10 761 library: ceammc v0.8.0; #X text 579 773 see also:; #X obj 653 773 global.float; #N canvas 10 780 400 290 info 0; @@ -71,7 +71,7 @@ ID name.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 global.int; #X text 10 76 category:; @@ -81,7 +81,7 @@ ID name.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 int \, global; #X text 10 186 website:; diff --git a/ceammc/ext/doc/global.int.pddoc b/ceammc/ext/doc/global.int.pddoc index 449f3a9de1..9a9fdfbc90 100644 --- a/ceammc/ext/doc/global.int.pddoc +++ b/ceammc/ext/doc/global.int.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky global named integer object - GPL3 + GPL3 or later ceammc global int global diff --git a/ceammc/ext/doc/global.list-help.pd b/ceammc/ext/doc/global.list-help.pd index a8081c1717..2a746851cf 100644 --- a/ceammc/ext/doc/global.list-help.pd +++ b/ceammc/ext/doc/global.list-help.pd @@ -101,7 +101,7 @@ indexes are supported.; #X text 115 45 ::; #X obj 131 48 ui.link @title global @url ceammc.global-help.pd; #X obj 1 1192 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1195 library: ceammc v0.7.1; +#X text 10 1195 library: ceammc v0.8.0; #X text 492 1207 see also:; #X obj 566 1207 global.float; #X obj 668 1207 global.int; @@ -110,7 +110,7 @@ indexes are supported.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 global.list; #X text 10 76 category:; @@ -120,7 +120,7 @@ indexes are supported.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 list \, global; #X text 10 186 website:; diff --git a/ceammc/ext/doc/global.list.pddoc b/ceammc/ext/doc/global.list.pddoc index c48ad9fde2..d7dd8dd977 100644 --- a/ceammc/ext/doc/global.list.pddoc +++ b/ceammc/ext/doc/global.list.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky global named list object - GPL3 + GPL3 or later ceammc global list global diff --git a/ceammc/ext/doc/global.mlist-help.pd b/ceammc/ext/doc/global.mlist-help.pd index 940269db7e..984e64f349 100644 --- a/ceammc/ext/doc/global.mlist-help.pd +++ b/ceammc/ext/doc/global.mlist-help.pd @@ -100,7 +100,7 @@ are:; #X text 115 45 ::; #X obj 131 48 ui.link @title global @url ceammc.global-help.pd; #X obj 1 1196 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1199 library: ceammc v0.7.1; +#X text 10 1199 library: ceammc v0.8.0; #X text 500 1211 see also:; #X obj 574 1211 data.mlist; #X obj 661 1211 local.mlist; @@ -109,7 +109,7 @@ are:; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 global.mlist; #X text 10 76 category:; @@ -119,7 +119,7 @@ are:; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 mlist \, local \, global; #X text 10 186 website:; diff --git a/ceammc/ext/doc/global.mlist.pddoc b/ceammc/ext/doc/global.mlist.pddoc index c9a5af16ad..075144aa12 100644 --- a/ceammc/ext/doc/global.mlist.pddoc +++ b/ceammc/ext/doc/global.mlist.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky global named mlist object - GPL3 + GPL3 or later ceammc global mlist local global diff --git a/ceammc/ext/doc/global.set-help.pd b/ceammc/ext/doc/global.set-help.pd index f54007e826..7ccbe92d18 100644 --- a/ceammc/ext/doc/global.set-help.pd +++ b/ceammc/ext/doc/global.set-help.pd @@ -76,7 +76,7 @@ Min value: 0\.; #X text 115 45 ::; #X obj 131 48 ui.link @title global @url ceammc.global-help.pd; #X obj 1 867 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 870 library: ceammc v0.7.1; +#X text 10 870 library: ceammc v0.8.0; #X text 529 882 see also:; #X obj 603 882 data.set; #X obj 676 882 local.set; @@ -85,7 +85,7 @@ Min value: 0\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 global.set; #X text 10 76 category:; @@ -95,7 +95,7 @@ Min value: 0\.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 set \, local \, global; #X text 10 186 website:; diff --git a/ceammc/ext/doc/global.set.pddoc b/ceammc/ext/doc/global.set.pddoc index d466d5731f..4cc3fa5380 100644 --- a/ceammc/ext/doc/global.set.pddoc +++ b/ceammc/ext/doc/global.set.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky global named set object - GPL3 + GPL3 or later ceammc global set local global diff --git a/ceammc/ext/doc/hoa.2d.decoder~-help.pd b/ceammc/ext/doc/hoa.2d.decoder~-help.pd new file mode 100644 index 0000000000..1a5a708f77 --- /dev/null +++ b/ceammc/ext/doc/hoa.2d.decoder~-help.pd @@ -0,0 +1,164 @@ +#N canvas 0 0 785 555 12; +#X declare -lib ceammc; +#X obj 652 50 cnv 1 113 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 652 50 hoa 2d decoder; +#X obj 1 1 cnv 5 765 40 empty empty hoa.2d.decoder~ 20 20 0 20 -104026 +-4096 0; +#X obj 519 11 hoa.decoder~; +#X obj 631 11 hoa.2d.decoder~; +#X obj 210 80 cnv 1 555 258 empty empty empty 17 7 0 10 -257983 -1 0; +#X text 215 80 Decodes an ambisonics soundfield for several loudspeakers +configuration or for headphones.; +#X text 215 120 Mode:; +#X text 225 145 • regular for a regular loudspeakers repartition over +a circle.; +#X text 225 185 • irregular if the loudspeakers are not equally spaced +on a circle.; +#X text 225 225 • binaural for headphones; +#X text 215 250 The default mode is regular for an array of 2 * order ++ 2 loudspeakers. The default irregular configuration is 5.1 standard +multichannel configuration.; +#X obj 215 305 ui.link @background_color 0.98039 0.98039 0.98039 +@title CICM documentation @url hoa/hoa.2d.decoder~-help.pd; +#X obj 50 366 hoa/hoa.soundgrain; +#X obj 386 366 lfo.saw~ 0.15; +#X obj 50 395 ui.gain~ @size 120 14; +#X obj 386 395 phase->rad~; +#X obj 50 424 hoa.encoder~ 5, f 36; +#X obj 386 424 ui.n~; +#X obj 50 453 hoa.decoder~ 5 binaural @crop 64, f 36; +#X obj 50 482 xdac~ 1:2, f 36; +#X obj 50 510 ui.dsp~; +#X obj 20 549 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 554 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +-49933 0; +#X text 110 589 1\.; +#X text 150 589 int; +#X obj 246 590 cnv 1 47 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 589 ORDER: the order of decomposition. Range: 1\...63; +#X text 110 609 2\.; +#X text 150 609 symbol; +#X obj 246 610 cnv 1 40 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 609 MODE: decoding mode.; +#X text 110 629 3\.; +#X text 150 629 int; +#X obj 246 630 cnv 1 17 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 629 N: number of loud speakers (minimum 2*ORDER+1 for ambisonic +mode).; +#X obj 20 674 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 679 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 714 @angles; +#X text 245 714 Get/Set angles of loudspeakers. Only available for +@irregular mode. Type: list. Units: deg.; +#X msg 110 756 @binaural; +#X text 245 756 alias for @mode binaural.; +#X msg 110 785 @crop; +#X text 245 785 Get/Set crop HRIR response. Only in @binaural mode. +Type: int. Units: samp. Default value: 0\. Range: 0\...512\.; +#X msg 110 827 @irregular; +#X text 245 827 alias for @mode irregular.; +#X msg 110 856 @mode; +#X text 245 856 (readonly) Get decoding mode. Type: symbol. Allowed +values: regular \, irregular \, binaural.; +#X msg 110 898 @nharm; +#X text 245 898 (readonly) Get number of circular harmonics. Type: +int. Default value: 0\. Min value: 1\.; +#X msg 110 940 @nwaves; +#X text 245 940 (readonly) Get number of plain waves. Type: int. Default +value: 0\. Min value: 1\.; +#X msg 110 982 @offset; +#X text 245 982 Get/Set rotation of loudspeakers. Only available for +@regular and @irregular mode. Type: float. Units: deg. Default value: +0\.; +#X msg 110 1039 @order; +#X text 245 1039 (readonly) Get the order of decomposition. Type: int. +Default value: 1\. Range: 1\...63\.; +#X msg 110 1081 @pw_x; +#X text 245 1081 (readonly) Get list of plain wave x-coordinates (abscissas). +-1 is the left of the soundfield \, 0 is the center of the soundfield +and 1 is the right of the soundfield. Type: list. Units: rad. Range: +-1\...1\.; +#X msg 110 1153 @pw_y; +#X text 245 1153 (readonly) Get list of plain wave y-coordinates (ordinatas). +-1 is the back of the soundfield \, 0 is the center of the soundfield +and 1 is the front of the soundfield. Type: list. Units: rad. Range: +-1\...1\.; +#X msg 110 1225 @pw_z; +#X text 245 1225 (readonly) Get list of plain wave z-coordinates (heights). +-1 is the bottom of the soundfield \, 0 is the center of the soundfield +and 1 is the top of the soundfield. Type: list. Units: rad. Range: +-1\...1\.; +#X msg 110 1297 @regular; +#X text 245 1297 alias for @mode regular.; +#X obj 20 1336 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1341 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 1342 1\.; +#X text 245 1342 first input harmonic.; +#X text 110 1362 ....; +#X text 245 1362 ... input harmonic.; +#X text 110 1382 n.; +#X text 245 1382 n-th input harmonic.; +#X obj 20 1412 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1417 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 1418 1\.; +#X text 245 1418 first loudspeaker output.; +#X text 110 1438 ....; +#X text 245 1438 ... loudspeaker output.; +#X text 110 1458 n.; +#X text 245 1458 n-th loudspeaker output.; +#X obj 10 48 ui.link @title index @url ../index-help.pd; +#X text 51 45 ::; +#X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; +#X text 115 45 ::; +#X obj 131 48 ui.link @title spat @url ceammc.spat-help.pd; +#X obj 1 1508 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1511 library: ceammc v0.8.0; +#X text 579 1523 see also:; +#X obj 653 1523 hoa.encoder~; +#N canvas 10 1530 400 290 info 0; +#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; +#X text 10 10 library:; +#X text 120 10 ceammc; +#X text 10 32 version:; +#X text 120 32 0.8.0; +#X text 10 54 object:; +#X text 120 54 hoa.2d.decoder~; +#X text 10 76 category:; +#X text 120 76 spat; +#X text 10 98 since:; +#X text 120 98 0.8; +#X text 10 120 authors:; +#X text 120 120 Serge Poltavsky \, Pierre Guillot \, Eliott Paris \, +Thomas Le Meur; +#X text 10 142 license:; +#X text 120 142 GPL3 or later; +#X text 10 164 keywords:; +#X text 120 164 hoa \, decoder; +#X text 10 186 website:; +#X obj 120 189 ui.link @title https://github.com/uliss/pure-data @url +https://github.com/uliss/pure-data; +#X obj 120 208 declare -lib ceammc; +#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 120 268 generated by pddoc; +#X restore 10 1530 pd info; +#X connect 13 0 15 0; +#X connect 14 0 16 0; +#X connect 15 0 17 0; +#X connect 16 0 17 1; +#X connect 16 0 18 0; +#X connect 17 0 19 0; +#X connect 17 1 19 1; +#X connect 17 2 19 2; +#X connect 17 3 19 3; +#X connect 17 4 19 4; +#X connect 17 5 19 5; +#X connect 17 6 19 6; +#X connect 17 7 19 7; +#X connect 17 8 19 8; +#X connect 17 9 19 9; +#X connect 17 10 19 10; +#X connect 19 0 20 0; +#X connect 19 1 20 1; \ No newline at end of file diff --git a/ceammc/ext/doc/hoa.2d.decoder~.pddoc b/ceammc/ext/doc/hoa.2d.decoder~.pddoc new file mode 100644 index 0000000000..ecfd4509d4 --- /dev/null +++ b/ceammc/ext/doc/hoa.2d.decoder~.pddoc @@ -0,0 +1,110 @@ + + + + hoa.2d.decoder~ + + + Serge Poltavsky + Pierre Guillot + Eliott Paris + Thomas Le Meur + + hoa 2d decoder + GPL3 or later + ceammc + spat + hoa decoder + 0.8 + + hoa.encoder~ + + + hoa.decoder~ + + + + Decodes an ambisonics soundfield for several loudspeakers configuration or for + headphones. + Mode: + • regular for a regular loudspeakers repartition over a circle. + • irregular if the loudspeakers are not equally spaced on a + circle. + • binaural for headphones + The default mode is regular for an array of 2 * order + 2 loudspeakers. The + default irregular configuration is 5.1 standard multichannel configuration. + CICM documentation + + + the order of + decomposition + decoding + mode + number of loud speakers (minimum 2*ORDER+1 for ambisonic + mode) + + + the order of decomposition + + decoding mode + alias for @mode regular + alias for @mode irregular + alias for @mode binaural + crop HRIR response. Only in @binaural mode. + rotation of + loudspeakers. Only available for @regular and @irregular mode. + angles of loudspeakers. Only + available for @irregular mode. + list of plain wave x-coordinates (abscissas). -1 is the left of the + soundfield, 0 is the center of the soundfield and 1 is the right of the + soundfield. + list of plain wave y-coordinates (ordinatas). -1 is the back of the + soundfield, 0 is the center of the soundfield and 1 is the front of the + soundfield. + list of plain wave z-coordinates (heights). -1 is the bottom of the + soundfield, 0 is the center of the soundfield and 1 is the top of the + soundfield. + number of + circular harmonics. + number of + plain waves. + + + + first input harmonic + + + ... input harmonic + + + n-th input harmonic + + + + first loudspeaker output + ... loudspeaker output + n-th loudspeaker output + + + +rad~] +| .___/ | +[hoa.encoder~ 5 {w=36,i=11,o=11}] [ui.n~] +*|* +[hoa.decoder~ 5 binaural @crop 64 {w=36,i=11,o=2}] +*|* +[xdac~ 1:2 {w=36,i=2}] + +[ui.dsp~] +]]> + + + + diff --git a/ceammc/ext/doc/hoa.2d.encoder~-help.pd b/ceammc/ext/doc/hoa.2d.encoder~-help.pd new file mode 100644 index 0000000000..a1bbe3c086 --- /dev/null +++ b/ceammc/ext/doc/hoa.2d.encoder~-help.pd @@ -0,0 +1,101 @@ +#N canvas 0 0 785 555 12; +#X declare -lib ceammc; +#X obj 652 50 cnv 1 113 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 652 50 hoa 2d encoder; +#X obj 1 1 cnv 5 765 40 empty empty hoa.2d.encoder~ 20 20 0 20 -104026 +-4096 0; +#X obj 519 11 hoa.encoder~; +#X obj 631 11 hoa.2d.encoder~; +#X obj 210 80 cnv 1 555 73 empty empty empty 17 7 0 10 -257983 -1 0; +#X text 215 80 Creates the circular harmonics of a signal depending +of a given order and a position on a circle given in radians (θ).; +#X obj 215 120 ui.link @background_color 0.98039 0.98039 0.98039 +@title CICM documentation @url hoa/hoa.2d.encoder~-help.pd; +#X obj 50 181 lfo.square~ 1; +#X obj 386 181 phasor~ 0.15; +#X obj 50 210 ui.gain~ @size 120 14; +#X obj 386 210 phase->rad~; +#X obj 50 239 hoa.encoder~ 5, f 24; +#X obj 386 239 ui.n~; +#X obj 50 268 hoa.scope~ @order 5 @size 171 171; +#X obj 50 455 ui.dsp~; +#X obj 20 494 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 499 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +-49933 0; +#X text 110 534 1\.; +#X text 150 534 int; +#X obj 246 535 cnv 1 47 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 534 ORDER: the order of decomposition. Range: 1\...63; +#X obj 20 564 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 569 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 604 @order; +#X text 245 604 (readonly) Get the order of decomposition. Type: int. +Default value: 1\. Range: 1\...63\.; +#X obj 20 656 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 661 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +0; +#X text 110 662 1\.; +#X text 245 662 input signal.; +#X text 110 682 2\.; +#X text 245 682 position on a circle in radians.; +#X obj 20 712 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 717 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 718 1\.; +#X text 245 718 first circular harmonics output.; +#X text 110 738 ....; +#X text 245 738 ... circular harmonics output.; +#X text 110 758 n.; +#X text 245 758 n-th circular harmonics output.; +#X obj 10 48 ui.link @title index @url ../index-help.pd; +#X text 51 45 ::; +#X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; +#X text 115 45 ::; +#X obj 131 48 ui.link @title spat @url ceammc.spat-help.pd; +#X obj 1 808 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 811 library: ceammc v0.8.0; +#X text 557 823 see also:; +#X obj 631 823 hoa.2d.decoder~; +#N canvas 10 830 400 290 info 0; +#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; +#X text 10 10 library:; +#X text 120 10 ceammc; +#X text 10 32 version:; +#X text 120 32 0.8.0; +#X text 10 54 object:; +#X text 120 54 hoa.2d.encoder~; +#X text 10 76 category:; +#X text 120 76 spat; +#X text 10 98 since:; +#X text 120 98 0.8; +#X text 10 120 authors:; +#X text 120 120 Serge Poltavsky \, Pierre Guillot \, Eliott Paris \, +Thomas Le Meur; +#X text 10 142 license:; +#X text 120 142 GPL3 or later; +#X text 10 164 keywords:; +#X text 120 164 hoa \, encoder; +#X text 10 186 website:; +#X obj 120 189 ui.link @title https://github.com/uliss/pure-data @url +https://github.com/uliss/pure-data; +#X obj 120 208 declare -lib ceammc; +#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 120 268 generated by pddoc; +#X restore 10 830 pd info; +#X connect 8 0 10 0; +#X connect 9 0 11 0; +#X connect 10 0 12 0; +#X connect 11 0 12 1; +#X connect 11 0 13 0; +#X connect 12 0 14 0; +#X connect 12 1 14 1; +#X connect 12 2 14 2; +#X connect 12 3 14 3; +#X connect 12 4 14 4; +#X connect 12 5 14 5; +#X connect 12 6 14 6; +#X connect 12 7 14 7; +#X connect 12 8 14 8; +#X connect 12 9 14 9; +#X connect 12 10 14 10; \ No newline at end of file diff --git a/ceammc/ext/doc/hoa.2d.encoder~.pddoc b/ceammc/ext/doc/hoa.2d.encoder~.pddoc new file mode 100644 index 0000000000..a26406c3f5 --- /dev/null +++ b/ceammc/ext/doc/hoa.2d.encoder~.pddoc @@ -0,0 +1,78 @@ + + + + hoa.2d.encoder~ + + + Serge Poltavsky + Pierre Guillot + Eliott Paris + Thomas Le Meur + + hoa 2d encoder + GPL3 or later + ceammc + spat + hoa encoder + 0.8 + + hoa.2d.decoder~ + + + hoa.encoder~ + + + + Creates the circular harmonics of a signal depending of a given order and a + position on a circle given in radians (θ). + CICM documentation + + + the order of + decomposition + + + the order of decomposition + + + + input signal + + + position on a circle in radians + + + + first circular harmonics output + ... circular harmonics output + n-th circular harmonics output + + + +rad~] +| .___/ | +[hoa.encoder~ 5 {w=24,i=11,o=11}] [ui.n~] +*|* +[hoa.scope~ @order 5 {i=11} @size 171 171] + + + + + + + + + + + + +[ui.dsp~] +]]> + + + + diff --git a/ceammc/ext/doc/hoa.2d.map~-help.pd b/ceammc/ext/doc/hoa.2d.map~-help.pd new file mode 100644 index 0000000000..8226b8f804 --- /dev/null +++ b/ceammc/ext/doc/hoa.2d.map~-help.pd @@ -0,0 +1,150 @@ +#N canvas 0 0 785 555 12; +#X declare -lib ceammc; +#X obj 468 50 cnv 1 297 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 468 50 a 2d ambisonic multisource spatializer; +#X obj 1 1 cnv 5 765 40 empty empty hoa.2d.map~ 20 20 0 20 -104026 +-4096 0; +#X obj 576 11 hoa.map~; +#X obj 660 11 hoa.2d.map~; +#X obj 210 80 cnv 1 555 50 empty empty empty 17 7 0 10 -257983 -1 0; +#X text 215 80 Encodes several sources in the circular harmonics domain +with distance compensation and muting system; +#X obj 50 158 msg.onload; +#X text 251 158 use Alt+drag to fix radius value; +#X obj 50 187 ui.polar @clockwise 0 @direction E @radians 1 @angle 0 +@radius 0.5; +#X obj 232 187 ui.polar @clockwise 0 @direction E @radians 1 @angle +-3.1415 @radius 0.5; +#X obj 405 245 ui.hrd @nitems 2 @mode 1 @size 41 20; +#X msg 405 274 0 \$1 \, 1 \$2; +#X obj 50 302 msg polar 0; +#X obj 232 302 msg polar 1; +#X obj 405 302 msg mute; +#X obj 59 331 sig~ 1; +#X obj 213 331 sig~ -1; +#X obj 50 360 hoa.2d.map~ 7 2, f 23; +#X obj 50 389 hoa.scope~ 7 @gain 4 @size 164 164; +#X obj 50 576 ui.dsp~; +#X obj 20 615 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 620 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +-49933 0; +#X text 110 655 1\.; +#X text 150 655 int; +#X obj 246 656 cnv 1 47 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 655 ORDER: the order of decomposition. Range: 1\...63; +#X text 110 675 2\.; +#X text 150 675 int; +#X obj 246 676 cnv 1 40 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 675 NSRC: number of sources. Min value: 1; +#X text 110 695 3\.; +#X text 150 695 symbol; +#X obj 246 696 cnv 1 40 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 695 MODE: decoding mode.; +#X obj 20 725 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 730 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 765 @nsrc; +#X text 245 765 (readonly) Get number of input sources. Type: int. +Default value: 1\. Range: 1\...63\.; +#X msg 110 807 @order; +#X text 245 807 (readonly) Get the order of decomposition. Type: int. +Default value: 1\. Range: 1\...63\.; +#X msg 110 849 @ramp; +#X text 245 849 Get/Set ramp time. Type: int. Default value: 100\. +Min value: 0\.; +#X obj 20 901 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 906 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +-49933 0; +#X msg 110 941 mute; +#X text 245 941 mute/unmute specified source. Arguments are:; +#X obj 255 964 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 964 IDX: source index. Type: int. Min value: 0\.; +#X obj 255 987 cnv 1 44 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 987 STATE: mute value. Type: int. Allowed values: 0 \, +1\.; +#X msg 110 1012 polar; +#X text 245 1012 set source mapping in polar coordinates. Arguments +are:; +#X obj 255 1035 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1035 IDX: source index. Type: int. Min value: 0\.; +#X obj 255 1058 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1058 RAD: radius. Type: float. Range: 0\...1\.; +#X obj 255 1081 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1081 RAD: rotation angle. Type: float. Range: 0\...2π.; +#X obj 20 1116 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1121 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 1122 1\.; +#X text 245 1122 first source input.; +#X text 110 1142 ....; +#X text 245 1142 ... source input.; +#X text 110 1162 n.; +#X text 245 1162 n-th source input.; +#X obj 20 1192 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1197 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 1198 1\.; +#X text 245 1198 first harmonic output.; +#X text 110 1218 ....; +#X text 245 1218 ... harmonic output.; +#X text 110 1238 n.; +#X text 245 1238 n-th harmonic output.; +#X obj 10 48 ui.link @title index @url ../index-help.pd; +#X text 51 45 ::; +#X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; +#X text 115 45 ::; +#X obj 131 48 ui.link @title spat @url ceammc.spat-help.pd; +#X obj 1 1288 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1291 library: ceammc v0.8.0; +#N canvas 10 1310 400 290 info 0; +#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; +#X text 10 10 library:; +#X text 120 10 ceammc; +#X text 10 32 version:; +#X text 120 32 0.8.0; +#X text 10 54 object:; +#X text 120 54 hoa.2d.map~; +#X text 10 76 category:; +#X text 120 76 spat; +#X text 10 98 since:; +#X text 120 98 0.8; +#X text 10 120 authors:; +#X text 120 120 Serge Poltavsky \, Pierre Guillot \, Eliott Paris \, +Thomas Le Meur; +#X text 10 142 license:; +#X text 120 142 GPL3 or later; +#X text 10 164 keywords:; +#X text 120 164 hoa \, map; +#X text 10 186 website:; +#X obj 120 189 ui.link @title https://github.com/uliss/pure-data @url +https://github.com/uliss/pure-data; +#X obj 120 208 declare -lib ceammc; +#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 120 268 generated by pddoc; +#X restore 10 1310 pd info; +#X connect 7 0 9 0; +#X connect 7 0 10 0; +#X connect 11 0 12 0; +#X connect 9 0 13 0; +#X connect 10 0 14 0; +#X connect 12 0 15 0; +#X connect 16 0 18 0; +#X connect 17 0 18 1; +#X connect 18 0 19 0; +#X connect 18 1 19 1; +#X connect 18 2 19 2; +#X connect 18 3 19 3; +#X connect 18 4 19 4; +#X connect 18 5 19 5; +#X connect 18 6 19 6; +#X connect 18 7 19 7; +#X connect 18 8 19 8; +#X connect 18 9 19 9; +#X connect 18 10 19 10; +#X connect 18 11 19 11; +#X connect 18 12 19 12; +#X connect 18 13 19 13; +#X connect 18 14 19 14; +#X connect 13 0 18 0; +#X connect 14 0 18 0; +#X connect 15 0 18 0; \ No newline at end of file diff --git a/ceammc/ext/doc/hoa.2d.map~.pddoc b/ceammc/ext/doc/hoa.2d.map~.pddoc new file mode 100644 index 0000000000..758f712e6c --- /dev/null +++ b/ceammc/ext/doc/hoa.2d.map~.pddoc @@ -0,0 +1,107 @@ + + + + hoa.2d.map~ + + + Serge Poltavsky + Pierre Guillot + Eliott Paris + Thomas Le Meur + + a 2d ambisonic multisource spatializer + GPL3 or later + ceammc + spat + hoa map + 0.8 + + hoa.map~ + + + + Encodes several sources in the circular harmonics domain with distance + compensation and muting system + + + the order of + decomposition + number of sources + decoding mode + + + the order of decomposition + number of input sources + ramp time + + + mute/unmute specified source + source index + mute value + set source mapping in polar coordinates + source index + radius + rotation angle + + + + first source input + + + ... source input + + + n-th source input + + + + first harmonic output + ... harmonic output + n-th harmonic output + + + +z] +[X d->z] +[X e->z] +#a @clockwise 0 @direction E @radians 1 @angle 0 @radius 0.5 +#b @clockwise 0 @direction E @radians 1 @angle -3.1415 @radius 0.5 +]]> + + + + diff --git a/ceammc/ext/doc/hoa.2d.optim~-help.pd b/ceammc/ext/doc/hoa.2d.optim~-help.pd new file mode 100644 index 0000000000..2543e54e64 --- /dev/null +++ b/ceammc/ext/doc/hoa.2d.optim~-help.pd @@ -0,0 +1,163 @@ +#N canvas 0 0 785 555 12; +#X declare -lib ceammc; +#X obj 514 50 cnv 1 251 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 514 50 a 2D ambisonic optimization tool; +#X obj 1 1 cnv 5 765 40 empty empty hoa.2d.optim~ 20 20 0 20 -104026 +-4096 0; +#X obj 547 11 hoa.optim~; +#X obj 645 11 hoa.2d.optim~; +#X obj 210 80 cnv 1 555 248 empty empty empty 17 7 0 10 -257983 -1 0; +#X text 215 80 Weights the circular harmonics signals depending on +the ambisonic optimization. It can be "basic" for no optimization \, +"maxre" or "inphase".; +#X text 215 135 If no optimization-mode is specified \, the optimization +will be inphase.; +#X text 215 175 Maxre optimization is used when audience is confined +to the center of the circle.; +#X text 215 215 Inphase optimization is used when the audience covers +all the circle.; +#X text 215 255 NB: This is theoretical \, the best choice is to trust +your ears.; +#X obj 215 295 ui.link @background_color 0.98039 0.98039 0.98039 +@title CICM documentation @url hoa/hoa.2d.optim~-help.pd; +#X obj 50 356 hoa/hoa.soundrone; +#X obj 280 356 phasor~ 0.15; +#X obj 50 385 ui.gain~ @size 120 14; +#X obj 280 385 phase->rad~; +#X obj 414 385 ui.menu basic maxre inphase; +#X obj 50 414 hoa.encoder~ 5, f 25; +#X msg 414 414 @mode \$2; +#X obj 50 443 hoa.optim~ 5 inphase, f 25; +#X obj 88 472 hoa.scope~ 5 @gain 4 @size 164 164; +#X obj 50 644 hoa.decoder~ 5 regular 11, f 25; +#X obj 50 673 xdac~ 1:11, f 25; +#X obj 50 702 ui.dsp~; +#X obj 20 741 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 746 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +-49933 0; +#X text 110 781 1\.; +#X text 150 781 int; +#X obj 246 782 cnv 1 47 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 781 ORDER: the order of decomposition. Min value: 1; +#X text 110 801 2\.; +#X text 150 801 symbol; +#X obj 246 802 cnv 1 40 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 801 MODE: optimization mode.; +#X obj 20 831 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 836 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 871 @basic; +#X text 245 871 alias for @mode basic.; +#X msg 110 900 @inphase; +#X text 245 900 alias for @mode inphase.; +#X msg 110 929 @maxre; +#X text 245 929 alias for @mode maxre.; +#X msg 110 958 @mode; +#X text 245 958 Get/Set optimization mode. Type: symbol. Default value: +basic. Allowed values: basic \, maxre \, inphase.; +#X msg 110 1000 @order; +#X text 245 1000 (readonly) Get the order of decomposition. Type: int. +Default value: 1\. Range: 1\...63\.; +#X obj 20 1052 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1057 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 1058 1\.; +#X text 245 1058 first input harmonic.; +#X text 110 1078 ....; +#X text 245 1078 ... input harmonic.; +#X text 110 1098 n.; +#X text 245 1098 n-th input harmonic.; +#X obj 20 1128 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1133 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 1134 1\.; +#X text 245 1134 first harmonic output.; +#X text 110 1154 ....; +#X text 245 1154 ... harmonic output.; +#X text 110 1174 n.; +#X text 245 1174 n-th harmonic output.; +#X obj 10 48 ui.link @title index @url ../index-help.pd; +#X text 51 45 ::; +#X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; +#X text 115 45 ::; +#X obj 131 48 ui.link @title spat @url ceammc.spat-help.pd; +#X obj 1 1224 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1227 library: ceammc v0.8.0; +#X text 557 1239 see also:; +#X obj 631 1239 hoa.2d.decoder~; +#N canvas 10 1246 400 290 info 0; +#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; +#X text 10 10 library:; +#X text 120 10 ceammc; +#X text 10 32 version:; +#X text 120 32 0.8.0; +#X text 10 54 object:; +#X text 120 54 hoa.2d.optim~; +#X text 10 76 category:; +#X text 120 76 spat; +#X text 10 98 since:; +#X text 120 98 0.8; +#X text 10 120 authors:; +#X text 120 120 Serge Poltavsky \, Pierre Guillot \, Eliott Paris \, +Thomas Le Meur; +#X text 10 142 license:; +#X text 120 142 GPL3 or later; +#X text 10 164 keywords:; +#X text 120 164 hoa \, optim \, 2d; +#X text 10 186 website:; +#X obj 120 189 ui.link @title https://github.com/uliss/pure-data @url +https://github.com/uliss/pure-data; +#X obj 120 208 declare -lib ceammc; +#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 120 268 generated by pddoc; +#X restore 10 1246 pd info; +#X connect 12 0 14 0; +#X connect 13 0 15 0; +#X connect 14 0 17 0; +#X connect 15 0 17 1; +#X connect 16 0 18 0; +#X connect 17 0 19 0; +#X connect 17 1 19 1; +#X connect 17 2 19 2; +#X connect 17 3 19 3; +#X connect 17 4 19 4; +#X connect 17 5 19 5; +#X connect 17 6 19 6; +#X connect 17 7 19 7; +#X connect 17 8 19 8; +#X connect 17 9 19 9; +#X connect 17 10 19 10; +#X connect 18 0 19 0; +#X connect 19 0 20 0; +#X connect 19 1 20 1; +#X connect 19 2 20 2; +#X connect 19 3 20 3; +#X connect 19 4 20 4; +#X connect 19 5 20 5; +#X connect 19 6 20 6; +#X connect 19 7 20 7; +#X connect 19 8 20 8; +#X connect 19 9 20 9; +#X connect 19 10 20 10; +#X connect 19 0 21 0; +#X connect 19 1 21 1; +#X connect 19 2 21 2; +#X connect 19 3 21 3; +#X connect 19 4 21 4; +#X connect 19 5 21 5; +#X connect 19 6 21 6; +#X connect 19 7 21 7; +#X connect 19 8 21 8; +#X connect 19 9 21 9; +#X connect 19 10 21 10; +#X connect 21 0 22 0; +#X connect 21 1 22 1; +#X connect 21 2 22 2; +#X connect 21 3 22 3; +#X connect 21 4 22 4; +#X connect 21 5 22 5; +#X connect 21 6 22 6; +#X connect 21 7 22 7; +#X connect 21 8 22 8; +#X connect 21 9 22 9; +#X connect 21 10 22 10; \ No newline at end of file diff --git a/ceammc/ext/doc/hoa.2d.optim~.pddoc b/ceammc/ext/doc/hoa.2d.optim~.pddoc new file mode 100644 index 0000000000..e48e801b87 --- /dev/null +++ b/ceammc/ext/doc/hoa.2d.optim~.pddoc @@ -0,0 +1,97 @@ + + + + hoa.2d.optim~ + + + Serge Poltavsky + Pierre Guillot + Eliott Paris + Thomas Le Meur + + a 2D ambisonic optimization tool + GPL3 or later + ceammc + spat + hoa optim 2d + 0.8 + + hoa.2d.decoder~ + + + hoa.optim~ + + + + Weights the circular harmonics signals depending on the ambisonic optimization. It + can be "basic" for no optimization, "maxre" or "inphase". + If no optimization-mode is specified, the optimization will be inphase. + Maxre optimization is used when audience is confined to the center of the + circle. + Inphase optimization is used when the audience covers all the circle. + NB: This is theoretical, the best choice is to trust your ears. + CICM documentation + + + the order of decomposition + optimization + mode + + + the order of decomposition + + optimization mode + alias for @mode basic. + alias for @mode maxre. + alias for @mode inphase. + + + + first input harmonic + + + ... input harmonic + + + n-th input harmonic + + + + first harmonic output + ... harmonic output + n-th harmonic output + + + +rad~] [ui.menu basic maxre inphase] +| |. | +[hoa.encoder~ 5 {w=25,i=11,o=11}] [@mode $2( +*|* | +[hoa.optim~ 5 inphase {w=25,i=11,o=11}] +*|* *|* +*|* [hoa.scope~ 5 @gain 4 {i=11} @size 164 164] +*|* +*|* +*|* +*|* +*|* +*|* +*|* +*|* +*|* +*|* +*|* +[hoa.decoder~ 5 regular 11 {w=25,i=11,o=11}] +*|* +[xdac~ 1:11 {w=25,i=11}] + +[ui.dsp~] +]]> + + + + diff --git a/ceammc/ext/doc/hoa.2d.projector~-help.pd b/ceammc/ext/doc/hoa.2d.projector~-help.pd new file mode 100644 index 0000000000..d860d55b84 --- /dev/null +++ b/ceammc/ext/doc/hoa.2d.projector~-help.pd @@ -0,0 +1,114 @@ +#N canvas 0 0 785 555 12; +#X declare -lib ceammc; +#X obj 338 50 cnv 1 427 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 338 50 a plane waves decomposer from circular harmonics domain; +#X obj 1 1 cnv 5 765 40 empty empty hoa.2d.projector~ 20 20 0 20 +-104026 -4096 0; +#X obj 489 11 hoa.projector~; +#X obj 616 11 hoa.2d.projector~; +#X obj 210 80 cnv 1 555 50 empty empty empty 17 7 0 10 -257983 -1 0; +#X text 215 80 Discretizes the ambisonic sound field into the plane +waves domain.; +#X obj 50 158 sig~ 1; +#X obj 261 158 lfo.saw~ 0.05; +#X obj 261 187 phase->rad~; +#X obj 50 216 hoa.2d.encoder~ 3, f 30; +#X obj 50 245 hoa.2d.projector~ 3 7, f 30; +#X obj 50 302 ui.m~; +#X obj 155 302 ui.m~; +#X obj 261 302 ui.m~; +#X obj 366 302 ui.m~; +#X obj 472 302 ui.m~; +#X obj 578 302 ui.m~; +#X obj 683 302 ui.m~; +#X obj 50 446 ui.dsp~; +#X obj 20 485 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 490 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +-49933 0; +#X text 110 525 1\.; +#X text 150 525 int; +#X obj 246 526 cnv 1 47 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 525 ORDER: the order of decomposition. Range: 1\...63; +#X text 110 545 2\.; +#X text 150 545 int; +#X obj 246 546 cnv 1 32 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 545 NCH: number of channels. Range: 1\...63; +#X obj 20 575 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 580 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 615 @n; +#X text 245 615 (readonly) Get number of channels (planewaves). Type: +int. Default value: 0\. Range: 0\...63\.; +#X msg 110 657 @order; +#X text 245 657 (readonly) Get the order of decomposition. Type: int. +Default value: 1\. Range: 1\...63\.; +#X obj 20 709 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 714 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +0; +#X text 110 715 1\.; +#X text 245 715 input harmonic.; +#X text 110 735 ....; +#X text 245 735 ... input harmonic.; +#X text 110 755 n.; +#X text 245 755 n-th input harmonic.; +#X obj 20 785 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 790 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 791 1\.; +#X text 245 791 first plane wave output.; +#X text 110 811 ....; +#X text 245 811 ... plane wave output.; +#X text 110 831 n.; +#X text 245 831 n-th plane wave output.; +#X obj 10 48 ui.link @title index @url ../index-help.pd; +#X text 51 45 ::; +#X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; +#X text 115 45 ::; +#X obj 131 48 ui.link @title spat @url ceammc.spat-help.pd; +#X obj 1 881 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 884 library: ceammc v0.8.0; +#X text 535 896 see also:; +#X obj 609 896 hoa.2d.recomposer~; +#N canvas 10 903 400 290 info 0; +#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; +#X text 10 10 library:; +#X text 120 10 ceammc; +#X text 10 32 version:; +#X text 120 32 0.8.0; +#X text 10 54 object:; +#X text 120 54 hoa.2d.projector~; +#X text 10 76 category:; +#X text 120 76 spat; +#X text 10 98 since:; +#X text 120 98 0.8; +#X text 10 120 authors:; +#X text 120 120 Serge Poltavsky \, Pierre Guillot \, Eliott Paris \, +Thomas Le Meur; +#X text 10 142 license:; +#X text 120 142 GPL3 or later; +#X text 10 164 keywords:; +#X text 120 164 hoa \, recomposer \, projector; +#X text 10 186 website:; +#X obj 120 189 ui.link @title https://github.com/uliss/pure-data @url +https://github.com/uliss/pure-data; +#X obj 120 208 declare -lib ceammc; +#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 120 268 generated by pddoc; +#X restore 10 903 pd info; +#X connect 8 0 9 0; +#X connect 7 0 10 0; +#X connect 9 0 10 1; +#X connect 10 0 11 0; +#X connect 10 1 11 1; +#X connect 10 2 11 2; +#X connect 10 3 11 3; +#X connect 10 4 11 4; +#X connect 10 5 11 5; +#X connect 10 6 11 6; +#X connect 11 0 12 0; +#X connect 11 1 13 0; +#X connect 11 2 14 0; +#X connect 11 3 15 0; +#X connect 11 4 16 0; +#X connect 11 5 17 0; +#X connect 11 6 18 0; \ No newline at end of file diff --git a/ceammc/ext/doc/hoa.2d.projector~.pddoc b/ceammc/ext/doc/hoa.2d.projector~.pddoc new file mode 100644 index 0000000000..de1852ef23 --- /dev/null +++ b/ceammc/ext/doc/hoa.2d.projector~.pddoc @@ -0,0 +1,84 @@ + + + + hoa.2d.projector~ + + + Serge Poltavsky + Pierre Guillot + Eliott Paris + Thomas Le Meur + + a plane waves decomposer from circular harmonics domain + GPL3 or later + ceammc + spat + hoa recomposer projector + 0.8 + + hoa.2d.recomposer~ + + + hoa.projector~ + + + + Discretizes the ambisonic sound field into the plane waves domain. + + + the order of + decomposition + number of + channels + + + the order of decomposition + + number of channels (planewaves) + + + + input harmonic + + + ... input harmonic + + + n-th input harmonic + + + + first plane wave output + ... plane wave output + n-th plane wave output + + + +rad~] +| |. +[hoa.2d.encoder~ 3 {w=30,o=7,i=2}] +*|* +[hoa.2d.projector~ 3 7 {w=30,i=7,o=7} #z] + + + +[ui.m~ #a] [ui.m~ #b] [ui.m~ #c] [ui.m~ #d] [ui.m~ #e] [ui.m~ #f] [ui.m~ #g] + +[X z:0->a] +[X z:1->b] +[X z:2->c] +[X z:3->d] +[X z:4->e] +[X z:5->f] +[X z:6->g] + +[ui.dsp~] +]]> + + + + diff --git a/ceammc/ext/doc/hoa.2d.recomposer~-help.pd b/ceammc/ext/doc/hoa.2d.recomposer~-help.pd new file mode 100644 index 0000000000..258683c41f --- /dev/null +++ b/ceammc/ext/doc/hoa.2d.recomposer~-help.pd @@ -0,0 +1,251 @@ +#N canvas 0 0 785 555 12; +#X declare -lib ceammc; +#X obj 347 50 cnv 1 418 38 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 347 50 recomposes a 2d plane wave decomposition into circular +harmonics; +#X obj 1 1 cnv 5 765 40 empty empty hoa.2d.recomposer~ 20 20 0 20 +-104026 -4096 0; +#X obj 475 11 hoa.recomposer~; +#X obj 609 11 hoa.2d.recomposer~; +#X obj 210 80 cnv 1 555 120 empty empty empty 17 7 0 10 -257983 -1 0; +#X text 215 80 Recomposes a plane wave decomposition into circular +harmonics. There's three modes \, fixe (default) \, fisheye and free.; +#X text 215 135 The hoa.2d.recomposer~ can be controlled either by +message or with the help of its dedicated graphical user interface +hoa.2d.recomposer.; +#X obj 50 228 hoa/hoa.soundgrain; +#X obj 50 257 ui.gain~ @size 120 14; +#X obj 50 286 hoa.2d.encoder~ 7 16, f 46; +#X obj 50 315 hoa.projector~ 7 16, f 46; +#X obj 50 344 hoa.process~ 16 hoa/hoa.fx.delay2~ planewaves, f 46; +#X obj 50 372 hoa.process~ 16 hoa/hoa.fx.gain~ planewaves 1, f 46; +#X obj 50 401 hoa.2d.recomposer~ 7 16, f 46; +#X obj 88 444 hoa.scope~ 7 @gain 4 @size 164 164; +#X obj 50 617 hoa.decoder~ 7 regular, f 46; +#X obj 453 617 ui.dsp~; +#X obj 50 646 xdac~ 1:16, f 46; +#X obj 20 685 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 690 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +-49933 0; +#X text 110 725 1\.; +#X text 150 725 int; +#X obj 246 726 cnv 1 47 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 725 ORDER: the order of decomposition. Range: 1\...63; +#X text 110 745 2\.; +#X text 150 745 int; +#X obj 246 746 cnv 1 32 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 745 NCH: number of channels. Range: 1\...63; +#X text 110 765 3\.; +#X text 150 765 symbol; +#X obj 246 766 cnv 1 40 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 765 MODE: recomposition mode. There is three modes: *fixe* +- simply recomposes a plane wave decomposition into circular harmonics. +*fisheye* - allows you to perform an operation similar to the visual +"fisheye" effect by distorsion of the sound field perspective to the +front of the scene. *free* - allows you to change the angles and the +widening value for each channels..; +#X obj 20 885 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 890 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 925 @fisheye; +#X text 245 925 alias for @mode fisheye.; +#X msg 110 954 @fixe; +#X text 245 954 alias for @mode fixe.; +#X msg 110 983 @free; +#X text 245 983 alias for @mode free.; +#X msg 110 1012 @mode; +#X text 245 1012 (readonly) Get recomposition mode. There is three +modes: *fixe* - simply recomposes a plane wave decomposition into circular +harmonics. *fisheye* - allows you to perform an operation similar to +the visual "fisheye" effect by distorsion of the sound field perspective +to the front of the scene. *free* - allows you to change the angles +and the widening value for each channels. Type: symbol. Default value: +free. Allowed values: fixe \, fisheye \, free.; +#X msg 110 1144 @n; +#X text 245 1144 (readonly) Get number of channels (planewaves). Type: +int. Default value: 0\. Range: 0\...63\.; +#X msg 110 1186 @order; +#X text 245 1186 (readonly) Get the order of decomposition. Type: int. +Default value: 1\. Range: 1\...63\.; +#X msg 110 1228 @ramp; +#X text 245 1228 Get/Set ramp time. Type: float. Default value: 0\. +Min value: 0\.; +#X obj 20 1280 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1285 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +-49933 0; +#X msg 110 1320 angles; +#X text 245 1320 set the angles of channels. Angles are in radians +\, wrapped between 0 and 2π. Arguments are:; +#X obj 255 1358 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1358 RAD: list of angles. Type: list.; +#X msg 110 1383 wide; +#X text 245 1383 set the widening value of channels. Widening value +is clipped between 0\. (omnidirectional) and 1\. (directional). Arguments +are:; +#X obj 255 1436 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1436 VALS: list of values per channel. Type: list.; +#X obj 20 1471 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1476 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 1477 1\.; +#X text 245 1477 input harmonic.; +#X text 110 1497 ....; +#X text 245 1497 input harmonic.; +#X text 110 1517 n.; +#X text 245 1517 input harmonic. If @fisheye mode is used: fisheye +factor [0-1] in last inlet.; +#X obj 20 1562 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1567 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 1568 1\.; +#X text 245 1568 first planewave output.; +#X text 110 1588 ....; +#X text 245 1588 ... planewave output.; +#X text 110 1608 n.; +#X text 245 1608 n-th planewave output.; +#X obj 10 48 ui.link @title index @url ../index-help.pd; +#X text 51 45 ::; +#X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; +#X text 115 45 ::; +#X obj 131 48 ui.link @title spat @url ceammc.spat-help.pd; +#X obj 1 1658 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1661 library: ceammc v0.8.0; +#X text 542 1673 see also:; +#X obj 616 1673 hoa.2d.projector~; +#N canvas 10 1680 400 290 info 0; +#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; +#X text 10 10 library:; +#X text 120 10 ceammc; +#X text 10 32 version:; +#X text 120 32 0.8.0; +#X text 10 54 object:; +#X text 120 54 hoa.2d.recomposer~; +#X text 10 76 category:; +#X text 120 76 spat; +#X text 10 98 since:; +#X text 120 98 0.8; +#X text 10 120 authors:; +#X text 120 120 Serge Poltavsky \, Pierre Guillot \, Eliott Paris \, +Thomas Le Meur; +#X text 10 142 license:; +#X text 120 142 GPL3 or later; +#X text 10 164 keywords:; +#X text 120 164 hoa \, recomposer; +#X text 10 186 website:; +#X obj 120 189 ui.link @title https://github.com/uliss/pure-data @url +https://github.com/uliss/pure-data; +#X obj 120 208 declare -lib ceammc; +#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 120 268 generated by pddoc; +#X restore 10 1680 pd info; +#X connect 8 0 9 0; +#X connect 9 0 10 0; +#X connect 10 0 11 0; +#X connect 10 1 11 1; +#X connect 10 2 11 2; +#X connect 10 3 11 3; +#X connect 10 4 11 4; +#X connect 10 5 11 5; +#X connect 10 6 11 6; +#X connect 10 7 11 7; +#X connect 10 8 11 8; +#X connect 10 9 11 9; +#X connect 10 10 11 10; +#X connect 10 11 11 11; +#X connect 10 12 11 12; +#X connect 10 13 11 13; +#X connect 10 14 11 14; +#X connect 11 0 12 0; +#X connect 11 1 12 1; +#X connect 11 2 12 2; +#X connect 11 3 12 3; +#X connect 11 4 12 4; +#X connect 11 5 12 5; +#X connect 11 6 12 6; +#X connect 11 7 12 7; +#X connect 11 8 12 8; +#X connect 11 9 12 9; +#X connect 11 10 12 10; +#X connect 11 11 12 11; +#X connect 11 12 12 12; +#X connect 11 13 12 13; +#X connect 11 14 12 14; +#X connect 11 15 12 15; +#X connect 12 0 13 0; +#X connect 12 1 13 1; +#X connect 12 2 13 2; +#X connect 12 3 13 3; +#X connect 12 4 13 4; +#X connect 12 5 13 5; +#X connect 12 6 13 6; +#X connect 12 7 13 7; +#X connect 12 8 13 8; +#X connect 12 9 13 9; +#X connect 12 10 13 10; +#X connect 12 11 13 11; +#X connect 12 12 13 12; +#X connect 12 13 13 13; +#X connect 12 14 13 14; +#X connect 12 15 13 15; +#X connect 13 0 14 0; +#X connect 13 1 14 1; +#X connect 13 2 14 2; +#X connect 13 3 14 3; +#X connect 13 4 14 4; +#X connect 13 5 14 5; +#X connect 13 6 14 6; +#X connect 13 7 14 7; +#X connect 13 8 14 8; +#X connect 13 9 14 9; +#X connect 13 10 14 10; +#X connect 13 11 14 11; +#X connect 13 12 14 12; +#X connect 13 13 14 13; +#X connect 13 14 14 14; +#X connect 13 15 14 15; +#X connect 14 0 15 0; +#X connect 14 1 15 1; +#X connect 14 2 15 2; +#X connect 14 3 15 3; +#X connect 14 4 15 4; +#X connect 14 5 15 5; +#X connect 14 6 15 6; +#X connect 14 7 15 7; +#X connect 14 8 15 8; +#X connect 14 9 15 9; +#X connect 14 10 15 10; +#X connect 14 11 15 11; +#X connect 14 12 15 12; +#X connect 14 13 15 13; +#X connect 14 14 15 14; +#X connect 14 0 16 0; +#X connect 14 1 16 1; +#X connect 14 2 16 2; +#X connect 14 3 16 3; +#X connect 14 4 16 4; +#X connect 14 5 16 5; +#X connect 14 6 16 6; +#X connect 14 7 16 7; +#X connect 14 8 16 8; +#X connect 14 9 16 9; +#X connect 14 10 16 10; +#X connect 14 11 16 11; +#X connect 14 12 16 12; +#X connect 14 13 16 13; +#X connect 14 14 16 14; +#X connect 16 0 18 0; +#X connect 16 1 18 1; +#X connect 16 2 18 2; +#X connect 16 3 18 3; +#X connect 16 4 18 4; +#X connect 16 5 18 5; +#X connect 16 6 18 6; +#X connect 16 7 18 7; +#X connect 16 8 18 8; +#X connect 16 9 18 9; +#X connect 16 10 18 10; +#X connect 16 11 18 11; +#X connect 16 12 18 12; +#X connect 16 13 18 13; +#X connect 16 14 18 14; +#X connect 16 15 18 15; \ No newline at end of file diff --git a/ceammc/ext/doc/hoa.2d.recomposer~.pddoc b/ceammc/ext/doc/hoa.2d.recomposer~.pddoc new file mode 100644 index 0000000000..82b2b0e1ee --- /dev/null +++ b/ceammc/ext/doc/hoa.2d.recomposer~.pddoc @@ -0,0 +1,124 @@ + + + + hoa.2d.recomposer~ + + + Serge Poltavsky + Pierre Guillot + Eliott Paris + Thomas Le Meur + + recomposes a 2d plane wave decomposition into circular + harmonics + GPL3 or later + ceammc + spat + hoa recomposer + 0.8 + + hoa.2d.projector~ + + + hoa.recomposer~ + + + + Recomposes a plane wave decomposition into circular harmonics. There's three + modes, fixe (default), fisheye and free. + The hoa.2d.recomposer~ can be controlled either by message or with the help of its + dedicated graphical user interface hoa.2d.recomposer. + + + the order of + decomposition + number of + channels + recomposition mode. There + is three modes: *fixe* - simply recomposes a plane wave decomposition into circular + harmonics. *fisheye* - allows you to perform an operation similar to the visual + "fisheye" effect by distorsion of the sound field perspective to the front of the + scene. *free* - allows you to change the angles and the widening value for each + channels. + + + the order of decomposition + + number of channels (planewaves) + recomposition mode. There is three modes: *fixe* - simply recomposes a + plane wave decomposition into circular harmonics. *fisheye* - allows you to perform an + operation similar to the visual "fisheye" effect by distorsion of the sound field + perspective to the front of the scene. *free* - allows you to change the angles and the + widening value for each channels. + alias for @mode fixe + alias for @mode fisheye + alias for @mode free + ramp time + + + set the angles of channels. Angles are in radians, wrapped + between 0 and 2π + list of + angles + set the widening value of channels. Widening value is clipped + between 0. (omnidirectional) and 1. (directional) + list of values per + channel + + + + input harmonic + + + input harmonic + + + input harmonic. If @fisheye mode is used: fisheye factor [0-1] in last + inlet + + + + first planewave output + ... planewave output + n-th planewave output + + + + + + + + diff --git a/ceammc/ext/doc/hoa.2d.rotate~-help.pd b/ceammc/ext/doc/hoa.2d.rotate~-help.pd new file mode 100644 index 0000000000..faa762855c --- /dev/null +++ b/ceammc/ext/doc/hoa.2d.rotate~-help.pd @@ -0,0 +1,128 @@ +#N canvas 0 0 785 555 12; +#X declare -lib ceammc; +#X obj 491 50 cnv 1 274 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 491 50 a 2D ambisonic sound field rotation; +#X obj 1 1 cnv 5 765 40 empty empty hoa.2d.rotate~ 20 20 0 20 -104026 +-4096 0; +#X obj 533 11 hoa.rotate~; +#X obj 638 11 hoa.2d.rotate~; +#X obj 50 118 sig~ 1; +#X obj 194 118 sig~ 1.62; +#X obj 376 118 sig~ -0.9; +#X obj 50 147 hoa.encoder~ 5, f 21; +#X obj 376 147 hoa.encoder~ 5, f 21; +#X obj 510 176 lfo.saw~ 0.15; +#X obj 510 205 phase->rad~; +#X obj 165 234 hoa.rotate~ 5, f 23; +#X obj 510 234 ui.n~; +#X obj 165 262 hoa.scope~ 5 @gain 4 @size 164 164; +#X obj 50 435 ui.dsp~; +#X obj 20 474 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 479 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +-49933 0; +#X text 110 514 1\.; +#X text 150 514 int; +#X obj 246 515 cnv 1 47 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 514 ORDER: the order of decomposition. Range: 1\...63; +#X obj 20 544 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 549 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 584 @order; +#X text 245 584 (readonly) Get the order of decomposition. Type: int. +Default value: 1\. Range: 1\...63\.; +#X obj 20 636 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 641 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +0; +#X text 110 642 1\.; +#X text 245 642 first input harmonic.; +#X text 110 662 ....; +#X text 245 662 ... input harmonic.; +#X text 110 682 n.; +#X text 245 682 n-th input harmonic.; +#X text 110 702 n+1\.; +#X text 245 702 Set the angle of the rotation of the soundfield in +radian. The rotation angle is anti-clockwise and wrapped between 0 +and 2π.; +#X obj 20 762 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 767 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 768 1\.; +#X text 245 768 first output harmonic.; +#X text 110 788 ....; +#X text 245 788 ... output harmonic.; +#X text 110 808 n.; +#X text 245 808 n-th output harmonic.; +#X obj 10 48 ui.link @title index @url ../index-help.pd; +#X text 51 45 ::; +#X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; +#X text 115 45 ::; +#X obj 131 48 ui.link @title spat @url ceammc.spat-help.pd; +#X obj 1 858 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 861 library: ceammc v0.8.0; +#X text 579 873 see also:; +#X obj 653 873 hoa.encoder~; +#N canvas 10 880 400 290 info 0; +#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; +#X text 10 10 library:; +#X text 120 10 ceammc; +#X text 10 32 version:; +#X text 120 32 0.8.0; +#X text 10 54 object:; +#X text 120 54 hoa.2d.rotate~; +#X text 10 76 category:; +#X text 120 76 spat; +#X text 10 98 since:; +#X text 120 98 0.8; +#X text 10 120 authors:; +#X text 120 120 Serge Poltavsky \, Pierre Guillot \, Eliott Paris \, +Thomas Le Meur; +#X text 10 142 license:; +#X text 120 142 GPL3 or later; +#X text 10 164 keywords:; +#X text 120 164 hoa \, rotate; +#X text 10 186 website:; +#X obj 120 189 ui.link @title https://github.com/uliss/pure-data @url +https://github.com/uliss/pure-data; +#X obj 120 208 declare -lib ceammc; +#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 120 268 generated by pddoc; +#X restore 10 880 pd info; +#X connect 5 0 8 0; +#X connect 6 0 8 1; +#X connect 7 0 9 0; +#X connect 10 0 11 0; +#X connect 8 0 12 0; +#X connect 8 1 12 1; +#X connect 8 2 12 2; +#X connect 8 3 12 3; +#X connect 8 4 12 4; +#X connect 8 5 12 5; +#X connect 8 6 12 6; +#X connect 8 7 12 7; +#X connect 8 8 12 8; +#X connect 8 9 12 9; +#X connect 8 10 12 10; +#X connect 9 0 12 0; +#X connect 9 1 12 1; +#X connect 9 2 12 2; +#X connect 9 3 12 3; +#X connect 9 4 12 4; +#X connect 9 5 12 5; +#X connect 9 6 12 6; +#X connect 9 7 12 7; +#X connect 9 8 12 8; +#X connect 9 9 12 9; +#X connect 9 10 12 10; +#X connect 11 0 13 0; +#X connect 12 0 14 0; +#X connect 12 1 14 1; +#X connect 12 2 14 2; +#X connect 12 3 14 3; +#X connect 12 4 14 4; +#X connect 12 5 14 5; +#X connect 12 6 14 6; +#X connect 12 7 14 7; +#X connect 12 8 14 8; +#X connect 12 9 14 9; +#X connect 12 10 14 10; +#X connect 11 0 12 11; \ No newline at end of file diff --git a/ceammc/ext/doc/hoa.2d.rotate~.pddoc b/ceammc/ext/doc/hoa.2d.rotate~.pddoc new file mode 100644 index 0000000000..d7e5f9b33e --- /dev/null +++ b/ceammc/ext/doc/hoa.2d.rotate~.pddoc @@ -0,0 +1,84 @@ + + + + hoa.2d.rotate~ + + + Serge Poltavsky + Pierre Guillot + Eliott Paris + Thomas Le Meur + + a 2D ambisonic sound field rotation + GPL3 or later + ceammc + spat + hoa rotate + 0.8 + + hoa.encoder~ + + + hoa.rotate~ + + + + the order of + decomposition + + + the order of decomposition + + + + first input harmonic + + + ... input harmonic + + + n-th input harmonic + + + Set the angle of the rotation of the soundfield in radian. The rotation + angle is anti-clockwise and wrapped between 0 and 2π. + + + + first output harmonic + ... output harmonic + n-th output harmonic + + + +rad~ #a] + *|* *|* | + [hoa.rotate~ 5 {w=23,i=12,o=11} #b] [ui.n~] + *|* + [hoa.scope~ 5 @gain 4 @size 164 164 {i=11}] + + + + + + + + + + + +[ui.dsp~] +[X a->b:11] +]]> + + + + diff --git a/ceammc/ext/doc/hoa.2d.wider~-help.pd b/ceammc/ext/doc/hoa.2d.wider~-help.pd new file mode 100644 index 0000000000..61c0c6ebd7 --- /dev/null +++ b/ceammc/ext/doc/hoa.2d.wider~-help.pd @@ -0,0 +1,112 @@ +#N canvas 0 0 785 555 12; +#X declare -lib ceammc; +#X obj 445 50 cnv 1 320 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 445 50 a 2d fractional ambisonic order simulator; +#X obj 1 1 cnv 5 765 40 empty empty hoa.2d.wider~ 20 20 0 20 -104026 +-4096 0; +#X obj 547 11 hoa.wider~; +#X obj 645 11 hoa.2d.wider~; +#X obj 210 80 cnv 1 555 88 empty empty empty 17 7 0 10 -257983 -1 0; +#X text 215 80 hoa.2d.wider~ can be used to wide the diffusion of a +localised sound. The order depending signals are weighted and appear +in a logarithmic way to have linear changes.; +#X obj 215 135 ui.link @background_color 0.98039 0.98039 0.98039 +@title CICM documentation @url hoa/hoa.2d.wider~-help.pd; +#X obj 50 196 lfo.square~ 1; +#X obj 50 225 ui.gain~ @size 120 14; +#X obj 280 225 ui.knob; +#X obj 50 254 hoa.encoder~ 5, f 24; +#X obj 50 283 hoa.wider~ 5, f 24; +#X obj 50 312 hoa.scope~ @order 5 @size 171 171; +#X obj 50 499 ui.dsp~; +#X obj 20 538 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 543 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +-49933 0; +#X text 110 578 1\.; +#X text 150 578 int; +#X obj 246 579 cnv 1 47 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 578 ORDER: the order of decomposition. Range: 1\...63; +#X obj 20 608 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 613 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 648 @order; +#X text 245 648 (readonly) Get the order of decomposition. Type: int. +Default value: 1\. Range: 1\...63\.; +#X obj 20 700 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 705 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +0; +#X text 110 706 1\.; +#X text 245 706 first input signal.; +#X text 110 726 ....; +#X text 245 726 ... input signal.; +#X text 110 746 n.; +#X text 245 746 n-th input signal.; +#X text 110 766 n+1\.; +#X text 245 766 widening signal in [0-1] range.; +#X obj 20 796 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 801 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 802 1\.; +#X text 245 802 first circular harmonics output.; +#X text 110 822 ....; +#X text 245 822 ... circular harmonics output.; +#X text 110 842 n.; +#X text 245 842 n-th circular harmonics output.; +#X obj 10 48 ui.link @title index @url ../index-help.pd; +#X text 51 45 ::; +#X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; +#X text 115 45 ::; +#X obj 131 48 ui.link @title spat @url ceammc.spat-help.pd; +#X obj 1 892 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 895 library: ceammc v0.8.0; +#N canvas 10 914 400 290 info 0; +#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; +#X text 10 10 library:; +#X text 120 10 ceammc; +#X text 10 32 version:; +#X text 120 32 0.8.0; +#X text 10 54 object:; +#X text 120 54 hoa.2d.wider~; +#X text 10 76 category:; +#X text 120 76 spat; +#X text 10 98 since:; +#X text 120 98 0.8; +#X text 10 120 authors:; +#X text 120 120 Serge Poltavsky \, Pierre Guillot \, Eliott Paris \, +Thomas Le Meur; +#X text 10 142 license:; +#X text 120 142 GPL3 or later; +#X text 10 164 keywords:; +#X text 120 164 hoa \, wider; +#X text 10 186 website:; +#X obj 120 189 ui.link @title https://github.com/uliss/pure-data @url +https://github.com/uliss/pure-data; +#X obj 120 208 declare -lib ceammc; +#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 120 268 generated by pddoc; +#X restore 10 914 pd info; +#X connect 8 0 9 0; +#X connect 9 0 11 0; +#X connect 11 0 12 0; +#X connect 11 1 12 1; +#X connect 11 2 12 2; +#X connect 11 3 12 3; +#X connect 11 4 12 4; +#X connect 11 5 12 5; +#X connect 11 6 12 6; +#X connect 11 7 12 7; +#X connect 11 8 12 8; +#X connect 11 9 12 9; +#X connect 11 10 12 10; +#X connect 12 0 13 0; +#X connect 12 1 13 1; +#X connect 12 2 13 2; +#X connect 12 3 13 3; +#X connect 12 4 13 4; +#X connect 12 5 13 5; +#X connect 12 6 13 6; +#X connect 12 7 13 7; +#X connect 12 8 13 8; +#X connect 12 9 13 9; +#X connect 12 10 13 10; +#X connect 10 0 12 11; \ No newline at end of file diff --git a/ceammc/ext/doc/hoa.2d.wider~.pddoc b/ceammc/ext/doc/hoa.2d.wider~.pddoc new file mode 100644 index 0000000000..42e53c37da --- /dev/null +++ b/ceammc/ext/doc/hoa.2d.wider~.pddoc @@ -0,0 +1,85 @@ + + + + hoa.2d.wider~ + + + Serge Poltavsky + Pierre Guillot + Eliott Paris + Thomas Le Meur + + a 2d fractional ambisonic order simulator + GPL3 or later + ceammc + spat + hoa wider + 0.8 + + hoa.wider~ + + + + hoa.2d.wider~ can be used to wide the diffusion of a localised sound. The order + depending signals are weighted and appear in a logarithmic way to have linear + changes. + CICM documentation + + + the order of + decomposition + + + the order of decomposition + + + + first input signal + + + ... input signal + + + n-th input signal + + + widening signal in [0-1] range. + + + + first circular harmonics output + ... circular harmonics output + n-th circular harmonics output + + + +b:11] +]]> + + + + diff --git a/ceammc/ext/doc/hoa.@process-help.pd b/ceammc/ext/doc/hoa.@process-help.pd new file mode 100644 index 0000000000..041db7cc7d --- /dev/null +++ b/ceammc/ext/doc/hoa.@process-help.pd @@ -0,0 +1,125 @@ +#N canvas 0 0 785 555 12; +#X declare -lib ceammc; +#X obj 429 50 cnv 1 336 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 429 50 process properties manager for hoa.process~; +#X obj 1 1 cnv 5 765 40 empty empty hoa.@process 20 20 0 20 -104026 +-4096 0; +#X obj 654 11 hoa.@process; +#X obj 210 80 cnv 1 555 50 empty empty empty 17 7 0 10 -257983 -1 0; +#X text 215 80 With [hoa.@process] you can get [hoa.process~] instance +properties and get/set properties declared via [prop.declare]; +#X msg 50 158 open 0; +#X msg 136 158 open 1; +#X msg 222 158 open 2; +#X msg 347 158 @*? \, @index? @order? @total? @hdegree? @horder?; +#X msg 366 187 @freq? \, #1 @freq 1000 \, @freq?; +#X msg 386 216 #0 @freq 740 \, #2 @freq 300; +#X msg 405 245 #0 @freq 200 \, #1 @freq 600 \, #2 @freq 500; +#X msg 482 274 3; +#X obj 482 302 list.gen; +#X obj 606 302 random.int 100 1000; +#X text 261 331 click me; +#X obj 482 331 list.do; +#X msg 606 331 #\$2 @freq \$1; +#X obj 50 360 hoa.process~ 3 hoa/hoa_prop_example1 planewaves @freq +250, f 60; +#X obj 50 418 ui.hgain~; +#X obj 184 418 ui.dsp~; +#X obj 472 418 print; +#X obj 50 446 dac~; +#X obj 20 485 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 490 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 525 @hdegree; +#X text 245 525 (readonly) Get current harmonic degree in hoa.process~ +instance (only in harmonics mode). Type: int.; +#X msg 110 567 @horder; +#X text 245 567 (readonly) Get current harmonic order in hoa.process~ +instance (only in harmonics mode). Type: int.; +#X msg 110 609 @index; +#X text 245 609 (readonly) Get current instance index starting from +0\. Type: int.; +#X msg 110 651 @order; +#X text 245 651 (readonly) Get order of parent hoa.process~. Type: +int.; +#X msg 110 680 @pmode; +#X text 245 680 (readonly) Get amibisonic mode. Type: symbol. Allowed +values: 2d \, 3d.; +#X msg 110 722 @ptype; +#X text 245 722 (readonly) Get amibisonic type. Type: symbol. Allowed +values: harmonics \, planewaves.; +#X msg 110 764 @total; +#X text 245 764 (readonly) Get total number of hoa.process~ instances. +Type: int.; +#X obj 20 816 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 821 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +0; +#X text 110 822 1\.; +#X text 245 822 set or request properties.; +#X text 150 842 *bang*; +#X text 245 842 pass bang message thru.; +#X text 150 862 *float*; +#X text 245 862 pass float message thru.; +#X text 150 882 *symbol*; +#X text 245 882 pass symbol message thru.; +#X text 150 902 *list*; +#X text 245 902 pass list message thru.; +#X obj 20 932 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 937 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 938 1\.; +#X text 245 938 outputs properties.; +#X obj 10 48 ui.link @title index @url ../index-help.pd; +#X text 51 45 ::; +#X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; +#X text 115 45 ::; +#X obj 131 48 ui.link @title spat @url ceammc.spat-help.pd; +#X obj 1 988 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 991 library: ceammc v0.8.0; +#X text 579 1003 see also:; +#X obj 653 1003 hoa.process~; +#N canvas 10 1010 400 290 info 0; +#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; +#X text 10 10 library:; +#X text 120 10 ceammc; +#X text 10 32 version:; +#X text 120 32 0.8.0; +#X text 10 54 object:; +#X text 120 54 hoa.@process; +#X text 10 76 category:; +#X text 120 76 spat; +#X text 10 98 since:; +#X text 120 98 0.8; +#X text 10 120 authors:; +#X text 120 120 Serge Poltavsky \, Pierre Guillot \, Eliott Paris \, +Thomas Le Meur; +#X text 10 142 license:; +#X text 120 142 GPL3 or later; +#X text 10 164 keywords:; +#X text 120 164 hoa \, process \, properties; +#X text 10 186 website:; +#X obj 120 189 ui.link @title https://github.com/uliss/pure-data @url +https://github.com/uliss/pure-data; +#X obj 120 208 declare -lib ceammc; +#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 120 268 generated by pddoc; +#X restore 10 1010 pd info; +#X connect 13 0 14 0; +#X connect 14 0 17 0; +#X connect 6 0 19 0; +#X connect 7 0 19 0; +#X connect 8 0 19 0; +#X connect 18 0 19 1; +#X connect 19 0 20 0; +#X connect 19 1 20 0; +#X connect 19 2 20 0; +#X connect 19 3 22 0; +#X connect 20 0 23 0; +#X connect 20 0 23 1; +#X connect 9 0 19 1; +#X connect 10 0 19 1; +#X connect 11 0 19 1; +#X connect 12 0 19 1; +#X connect 17 1 18 0; +#X connect 14 1 15 0; +#X connect 15 0 14 1; \ No newline at end of file diff --git a/ceammc/ext/doc/hoa.@process.pddoc b/ceammc/ext/doc/hoa.@process.pddoc new file mode 100644 index 0000000000..0070af88db --- /dev/null +++ b/ceammc/ext/doc/hoa.@process.pddoc @@ -0,0 +1,88 @@ + + + + hoa.@process + + + Serge Poltavsky + Pierre Guillot + Eliott Paris + Thomas Le Meur + + process properties manager for hoa.process~ + GPL3 or later + ceammc + spat + hoa process properties + 0.8 + + hoa.process~ + + + + With [hoa.@process] you can get [hoa.process~] instance properties and get/set + properties declared via [prop.declare] + + + current harmonic degree in + hoa.process~ instance (only in harmonics mode) + current harmonic order in + hoa.process~ instance (only in harmonics mode) + current instance index starting from + 0 + order of parent + hoa.process~ + amibisonic + mode + + amibisonic type + total number of hoa.process~ + instances + + + + set or request properties + pass bang message thru + pass float message thru + pass symbol message thru + pass list message thru + + + + outputs properties + + + +z:1] +[X b->z:1] +[X c->z:1] +[X d->z:1] +[X e:1->x] +]]> + + + + diff --git a/ceammc/ext/doc/hoa.in-help.pd b/ceammc/ext/doc/hoa.in-help.pd new file mode 100644 index 0000000000..d60f3e9e7e --- /dev/null +++ b/ceammc/ext/doc/hoa.in-help.pd @@ -0,0 +1,98 @@ +#N canvas 0 0 785 555 12; +#X declare -lib ceammc; +#X obj 375 50 cnv 1 390 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 375 50 message inlet for a patcher loaded by hoa.process~; +#X obj 1 1 cnv 5 765 40 empty empty hoa.in 20 20 0 20 -104026 -4096 0; +#X obj 697 11 hoa.in; +#X obj 210 80 cnv 1 555 50 empty empty empty 17 7 0 10 -257983 -1 0; +#X text 215 80 hoa.in defines a message inlet for a patcher loaded +by a hoa.process~ object.; +#X msg 50 158 open 0; +#X msg 136 158 open 1; +#X msg 232 158 42; +#X msg 280 158 #0 43; +#X msg 366 158 #1 44; +#X obj 50 202 hoa.process~ 2 hoa/hoa_in_example1 planewaves; +#X obj 50 230 print A; +#X msg 50 259 open 0; +#X msg 174 259 42; +#X msg 222 259 #0 43; +#X msg 309 259 #1 44; +#X msg 395 259 45; +#X msg 443 259 #0 46; +#X msg 530 259 #1 47; +#X msg 69 288 open 1; +#X obj 50 317 hoa.process~ 2 hoa/hoa_in_example2 planewaves; +#X obj 50 345 print B; +#X obj 366 345 print C; +#X obj 20 384 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 389 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +-49933 0; +#X text 110 424 1\.; +#X text 150 424 int; +#X obj 246 425 cnv 1 46 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 424 INDEX: shortcut for @index property. Min value: 1; +#X obj 20 454 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 459 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 494 @index; +#X text 245 494 Get/Set Defines an inlet index. Type: int. Default +value: 1\. Min value: 1\.; +#X obj 20 546 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 551 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 552 1\.; +#X text 245 552 output messages received from a hoa.process~ input.; +#X obj 10 48 ui.link @title index @url ../index-help.pd; +#X text 51 45 ::; +#X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; +#X text 115 45 ::; +#X obj 131 48 ui.link @title spat @url ceammc.spat-help.pd; +#X obj 1 602 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 605 library: ceammc v0.8.0; +#X text 476 617 see also:; +#X obj 550 617 hoa.in~; +#X obj 616 617 hoa.out; +#X obj 681 617 hoa.out~; +#N canvas 10 624 400 290 info 0; +#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; +#X text 10 10 library:; +#X text 120 10 ceammc; +#X text 10 32 version:; +#X text 120 32 0.8.0; +#X text 10 54 object:; +#X text 120 54 hoa.in; +#X text 10 76 category:; +#X text 120 76 spat; +#X text 10 98 since:; +#X text 120 98 0.8; +#X text 10 120 authors:; +#X text 120 120 Serge Poltavsky \, Pierre Guillot \, Eliott Paris \, +Thomas Le Meur; +#X text 10 142 license:; +#X text 120 142 GPL3 or later; +#X text 10 164 keywords:; +#X text 120 164 hoa \, inlet; +#X text 10 186 website:; +#X obj 120 189 ui.link @title https://github.com/uliss/pure-data @url +https://github.com/uliss/pure-data; +#X obj 120 208 declare -lib ceammc; +#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 120 268 generated by pddoc; +#X restore 10 624 pd info; +#X connect 6 0 11 0; +#X connect 7 0 11 0; +#X connect 8 0 11 1; +#X connect 9 0 11 1; +#X connect 10 0 11 1; +#X connect 11 0 12 0; +#X connect 13 0 21 0; +#X connect 20 0 21 0; +#X connect 14 0 21 1; +#X connect 15 0 21 1; +#X connect 16 0 21 1; +#X connect 17 0 21 3; +#X connect 18 0 21 3; +#X connect 19 0 21 3; +#X connect 21 0 22 0; +#X connect 21 1 23 0; \ No newline at end of file diff --git a/ceammc/ext/doc/hoa.in.pddoc b/ceammc/ext/doc/hoa.in.pddoc new file mode 100644 index 0000000000..6ee4449153 --- /dev/null +++ b/ceammc/ext/doc/hoa.in.pddoc @@ -0,0 +1,59 @@ + + + + hoa.in + + + Serge Poltavsky + Pierre Guillot + Eliott Paris + Thomas Le Meur + + message inlet for a patcher loaded by hoa.process~ + GPL3 or later + ceammc + spat + hoa inlet + 0.8 + + hoa.in~ + hoa.out + hoa.out~ + + + + hoa.in defines a message inlet for a patcher loaded by a hoa.process~ + object. + + + shortcut for @index property + + + Defines an inlet + index + + + output messages received from a hoa.process~ input. + + + + + + + + diff --git a/ceammc/ext/doc/hoa.in~-help.pd b/ceammc/ext/doc/hoa.in~-help.pd new file mode 100644 index 0000000000..0a7f2f55c5 --- /dev/null +++ b/ceammc/ext/doc/hoa.in~-help.pd @@ -0,0 +1,83 @@ +#N canvas 0 0 785 555 12; +#X declare -lib ceammc; +#X obj 384 50 cnv 1 381 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 384 50 signal inlet for a patcher loaded by hoa.process~; +#X obj 1 1 cnv 5 765 40 empty empty hoa.in~ 20 20 0 20 -104026 -4096 +0; +#X obj 689 11 hoa.in~; +#X obj 210 80 cnv 1 555 50 empty empty empty 17 7 0 10 -257983 -1 0; +#X text 215 80 defines a signal inlet for a patcher loaded by a hoa.process~ +object; +#X msg 78 158 open 0; +#X msg 194 158 open 1; +#X floatatom 376 158 5 0 0 0 - - -; +#X obj 50 187 sig~ 0.5; +#X obj 213 187 sig~ 1; +#X obj 376 187 sig~ 3; +#X obj 50 216 hoa.process~ 2 hoa/hoa_in_example3 planewaves; +#X obj 50 245 ui.n~; +#X obj 376 245 ui.n~; +#X obj 20 284 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 289 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +-49933 0; +#X text 110 324 1\.; +#X text 150 324 int; +#X obj 246 325 cnv 1 46 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 324 EXTRA: shortcut for @extra property. Min value: 1; +#X obj 20 354 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 359 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 394 @extra; +#X text 245 394 Get/Set extra inlet. Extra inlet are added to the "normal" +instance inlet and can be used to send signal to all instances. Type: +int. Default value: 0\. Min value: 0\.; +#X obj 20 461 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 466 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 467 1\.; +#X text 245 467 output signal from a hoa.process~ object's inlet.; +#X obj 10 48 ui.link @title index @url ../index-help.pd; +#X text 51 45 ::; +#X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; +#X text 115 45 ::; +#X obj 131 48 ui.link @title spat @url ceammc.spat-help.pd; +#X obj 1 517 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 520 library: ceammc v0.8.0; +#X text 484 532 see also:; +#X obj 558 532 hoa.in; +#X obj 616 532 hoa.out; +#X obj 681 532 hoa.out~; +#N canvas 10 539 400 290 info 0; +#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; +#X text 10 10 library:; +#X text 120 10 ceammc; +#X text 10 32 version:; +#X text 120 32 0.8.0; +#X text 10 54 object:; +#X text 120 54 hoa.in~; +#X text 10 76 category:; +#X text 120 76 spat; +#X text 10 98 since:; +#X text 120 98 0.8; +#X text 10 120 authors:; +#X text 120 120 Serge Poltavsky \, Pierre Guillot \, Eliott Paris \, +Thomas Le Meur; +#X text 10 142 license:; +#X text 120 142 GPL3 or later; +#X text 10 164 keywords:; +#X text 120 164 hoa \, inlet; +#X text 10 186 website:; +#X obj 120 189 ui.link @title https://github.com/uliss/pure-data @url +https://github.com/uliss/pure-data; +#X obj 120 208 declare -lib ceammc; +#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 120 268 generated by pddoc; +#X restore 10 539 pd info; +#X connect 8 0 11 0; +#X connect 9 0 12 0; +#X connect 10 0 12 1; +#X connect 11 0 12 2; +#X connect 12 0 13 0; +#X connect 12 1 14 0; +#X connect 6 0 12 0; +#X connect 7 0 12 0; \ No newline at end of file diff --git a/ceammc/ext/doc/hoa.in~.pddoc b/ceammc/ext/doc/hoa.in~.pddoc new file mode 100644 index 0000000000..7494caab2b --- /dev/null +++ b/ceammc/ext/doc/hoa.in~.pddoc @@ -0,0 +1,55 @@ + + + + hoa.in~ + + + Serge Poltavsky + Pierre Guillot + Eliott Paris + Thomas Le Meur + + signal inlet for a patcher loaded by hoa.process~ + GPL3 or later + ceammc + spat + hoa inlet + 0.8 + + hoa.in + hoa.out + hoa.out~ + + + + defines a signal inlet for a patcher loaded by a hoa.process~ object + + + shortcut for @extra property + + + extra inlet. Extra inlet + are added to the "normal" instance inlet and can be used to send signal to all + instances + + + output signal from a hoa.process~ object's inlet + + + +z] +[X b->z] +]]> + + + + diff --git a/ceammc/ext/doc/hoa.out-help.pd b/ceammc/ext/doc/hoa.out-help.pd new file mode 100644 index 0000000000..f45772d82b --- /dev/null +++ b/ceammc/ext/doc/hoa.out-help.pd @@ -0,0 +1,113 @@ +#N canvas 0 0 785 555 12; +#X declare -lib ceammc; +#X obj 368 50 cnv 1 397 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 368 50 message outlet for a patcher loaded by hoa.process~; +#X obj 1 1 cnv 5 765 40 empty empty hoa.out 20 20 0 20 -104026 -4096 +0; +#X obj 690 11 hoa.out; +#X obj 210 80 cnv 1 555 50 empty empty empty 17 7 0 10 -257983 -1 0; +#X text 215 80 hoa.out defines a message outlet for a patcher loaded +by a hoa.process~ object.; +#X msg 50 158 open 0; +#X msg 136 158 open 1; +#X msg 232 158 42; +#X msg 280 158 #0 43; +#X msg 366 158 #1 44; +#X obj 50 202 hoa.process~ 2 hoa/hoa_in_example1 planewaves; +#X obj 50 230 print A; +#X msg 50 259 open 0; +#X msg 174 259 42; +#X msg 222 259 #0 43; +#X msg 309 259 #1 44; +#X msg 395 259 45; +#X msg 443 259 #0 46; +#X msg 530 259 #1 47; +#X msg 69 288 open 1; +#X obj 50 317 hoa.process~ 2 hoa/hoa_in_example2 planewaves; +#X obj 50 345 print B; +#X obj 366 345 print C; +#X obj 20 384 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 389 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +-49933 0; +#X text 110 424 1\.; +#X text 150 424 int; +#X obj 246 425 cnv 1 46 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 424 INDEX: outlet index. Min value: 1; +#X obj 20 454 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 459 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 494 @index; +#X text 245 494 Get/Set outlet index. Type: int. Default value: 1\. +Min value: 1\.; +#X obj 20 546 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 551 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +0; +#X text 110 552 1\.; +#X text 150 552 *bang*; +#X text 245 552 output bang message in the corresponding hoa.process~ +object's message outlet.; +#X text 150 587 *float*; +#X text 245 587 output float message in the corresponding hoa.process~ +object's message outlet.; +#X text 150 622 *symbol*; +#X text 245 622 output symbol message in the corresponding hoa.process~ +object's message outlet.; +#X text 150 657 *list*; +#X text 245 657 output list message in the corresponding hoa.process~ +object's message outlet.; +#X text 150 692 *any*; +#X text 245 692 output any message in the corresponding hoa.process~ +object's message outlet.; +#X obj 10 48 ui.link @title index @url ../index-help.pd; +#X text 51 45 ::; +#X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; +#X text 115 45 ::; +#X obj 131 48 ui.link @title spat @url ceammc.spat-help.pd; +#X obj 1 757 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 760 library: ceammc v0.8.0; +#X text 483 772 see also:; +#X obj 557 772 hoa.out~; +#X obj 631 772 hoa.in; +#X obj 689 772 hoa.in~; +#N canvas 10 779 400 290 info 0; +#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; +#X text 10 10 library:; +#X text 120 10 ceammc; +#X text 10 32 version:; +#X text 120 32 0.8.0; +#X text 10 54 object:; +#X text 120 54 hoa.out; +#X text 10 76 category:; +#X text 120 76 spat; +#X text 10 98 since:; +#X text 120 98 0.8; +#X text 10 120 authors:; +#X text 120 120 Serge Poltavsky \, Pierre Guillot \, Eliott Paris \, +Thomas Le Meur; +#X text 10 142 license:; +#X text 120 142 GPL3 or later; +#X text 10 164 keywords:; +#X text 120 164 hoa \, outlet; +#X text 10 186 website:; +#X obj 120 189 ui.link @title https://github.com/uliss/pure-data @url +https://github.com/uliss/pure-data; +#X obj 120 208 declare -lib ceammc; +#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 120 268 generated by pddoc; +#X restore 10 779 pd info; +#X connect 6 0 11 0; +#X connect 7 0 11 0; +#X connect 8 0 11 1; +#X connect 9 0 11 1; +#X connect 10 0 11 1; +#X connect 11 0 12 0; +#X connect 13 0 21 0; +#X connect 20 0 21 0; +#X connect 14 0 21 1; +#X connect 15 0 21 1; +#X connect 16 0 21 1; +#X connect 17 0 21 3; +#X connect 18 0 21 3; +#X connect 19 0 21 3; +#X connect 21 0 22 0; +#X connect 21 1 23 0; \ No newline at end of file diff --git a/ceammc/ext/doc/hoa.out.pddoc b/ceammc/ext/doc/hoa.out.pddoc new file mode 100644 index 0000000000..f896590e44 --- /dev/null +++ b/ceammc/ext/doc/hoa.out.pddoc @@ -0,0 +1,69 @@ + + + + hoa.out + + + Serge Poltavsky + Pierre Guillot + Eliott Paris + Thomas Le Meur + + message outlet for a patcher loaded by hoa.process~ + GPL3 or later + ceammc + spat + hoa outlet + 0.8 + + hoa.out~ + hoa.in + hoa.in~ + + + + hoa.out defines a message outlet for a patcher loaded by a hoa.process~ + object. + + + outlet index + + + outlet index + + + + output bang message in the corresponding hoa.process~ object's + message outlet + output float message in the corresponding hoa.process~ object's + message outlet + output symbol message in the corresponding hoa.process~ object's + message outlet + output list message in the corresponding hoa.process~ object's + message outlet + output any message in the corresponding hoa.process~ object's + message outlet + + + + + + + + + diff --git a/ceammc/ext/doc/hoa.out~-help.pd b/ceammc/ext/doc/hoa.out~-help.pd new file mode 100644 index 0000000000..e4c24970a5 --- /dev/null +++ b/ceammc/ext/doc/hoa.out~-help.pd @@ -0,0 +1,82 @@ +#N canvas 0 0 785 555 12; +#X declare -lib ceammc; +#X obj 384 50 cnv 1 381 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 384 50 signal inlet for a patcher loaded by hoa.process~; +#X obj 1 1 cnv 5 765 40 empty empty hoa.out~ 20 20 0 20 -104026 -4096 +0; +#X obj 681 11 hoa.out~; +#X obj 210 80 cnv 1 555 50 empty empty empty 17 7 0 10 -257983 -1 0; +#X text 215 80 defines a signal outlet for a patcher loaded by a hoa.process~ +object; +#X msg 88 158 open 0; +#X msg 203 158 open 1; +#X obj 50 187 sig~ 0.5; +#X obj 366 187 sig~ 1; +#X obj 50 216 hoa.process~ 2 hoa/hoa_out_example3 planewaves; +#X obj 50 245 ui.n~; +#X obj 203 245 ui.n~; +#X obj 366 245 ui.n~; +#X obj 20 284 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 289 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +-49933 0; +#X text 110 324 1\.; +#X text 150 324 int; +#X obj 246 325 cnv 1 46 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 324 EXTRA: shortcut for @extra property. Min value: 0; +#X obj 20 354 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 359 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 394 @extra; +#X text 245 394 Get/Set extra inlet. Extra inlet are added to the "normal" +instance inlet and can be used to send signal to all instances. Type: +int. Default value: 0\. Min value: 0\.; +#X obj 20 461 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 466 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 467 1\.; +#X text 245 467 output signal in the corresponding hoa.process~ object's +signal outlet.; +#X obj 10 48 ui.link @title index @url ../index-help.pd; +#X text 51 45 ::; +#X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; +#X text 115 45 ::; +#X obj 131 48 ui.link @title spat @url ceammc.spat-help.pd; +#X obj 1 532 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 535 library: ceammc v0.8.0; +#X text 492 547 see also:; +#X obj 566 547 hoa.out; +#X obj 631 547 hoa.in; +#X obj 689 547 hoa.in~; +#N canvas 10 554 400 290 info 0; +#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; +#X text 10 10 library:; +#X text 120 10 ceammc; +#X text 10 32 version:; +#X text 120 32 0.8.0; +#X text 10 54 object:; +#X text 120 54 hoa.out~; +#X text 10 76 category:; +#X text 120 76 spat; +#X text 10 98 since:; +#X text 120 98 0.8; +#X text 10 120 authors:; +#X text 120 120 Serge Poltavsky \, Pierre Guillot \, Eliott Paris \, +Thomas Le Meur; +#X text 10 142 license:; +#X text 120 142 GPL3 or later; +#X text 10 164 keywords:; +#X text 120 164 hoa \, outlet; +#X text 10 186 website:; +#X obj 120 189 ui.link @title https://github.com/uliss/pure-data @url +https://github.com/uliss/pure-data; +#X obj 120 208 declare -lib ceammc; +#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 120 268 generated by pddoc; +#X restore 10 554 pd info; +#X connect 8 0 10 0; +#X connect 9 0 10 1; +#X connect 10 0 11 0; +#X connect 10 1 12 0; +#X connect 10 2 13 0; +#X connect 6 0 10 0; +#X connect 7 0 10 0; \ No newline at end of file diff --git a/ceammc/ext/doc/hoa.out~.pddoc b/ceammc/ext/doc/hoa.out~.pddoc new file mode 100644 index 0000000000..390a563da1 --- /dev/null +++ b/ceammc/ext/doc/hoa.out~.pddoc @@ -0,0 +1,56 @@ + + + + hoa.out~ + + + Serge Poltavsky + Pierre Guillot + Eliott Paris + Thomas Le Meur + + signal inlet for a patcher loaded by hoa.process~ + GPL3 or later + ceammc + spat + hoa outlet + 0.8 + + hoa.out + hoa.in + hoa.in~ + + + + defines a signal outlet for a patcher loaded by a hoa.process~ object + + + shortcut for @extra property + + + extra inlet. Extra inlet + are added to the "normal" instance inlet and can be used to send signal to all + instances + + + output signal in the corresponding hoa.process~ object's signal + outlet + + + +z] +[X b->z] +]]> + + + + diff --git a/ceammc/ext/doc/hoa.process~-help.pd b/ceammc/ext/doc/hoa.process~-help.pd new file mode 100644 index 0000000000..5bc2c2a2c4 --- /dev/null +++ b/ceammc/ext/doc/hoa.process~-help.pd @@ -0,0 +1,192 @@ +#N canvas 0 0 785 555 12; +#X declare -lib ceammc; +#X obj 438 50 cnv 1 327 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 438 50 patcher loader for multichannel processing; +#X obj 1 1 cnv 5 765 40 empty empty hoa.process~ 20 20 0 20 -104026 +-4096 0; +#X obj 653 11 hoa.process~; +#X obj 210 80 cnv 1 555 143 empty empty empty 17 7 0 10 -257983 -1 0; +#X text 215 80 hoa.process~ helps the modularization of patches for +ambisonic or plane waves processing.; +#X text 215 120 hoa.process~ is a kind of poly~ object particulary +suitable for multichannel ambisonic or plane wave processing. Create +a patch/effect/operator \, then parallelize it with the hoa.process~; +#X obj 215 190 ui.link @background_color 0.98039 0.98039 0.98039 +@title CICM documentation @url hoa/hoa.2d.process~-help.pd; +#X obj 50 251 hoa/hoa.soundrone; +#X obj 280 251 phasor~ 0.15; +#X obj 443 251 ui.sliders @count 11 @min -60 @max 0 @size 200 55; +#X obj 50 280 ui.gain~ @size 120 14; +#X obj 280 280 phase->rad~; +#X obj 50 309 hoa.encoder~ 5, f 33; +#X obj 443 309 msg \#: @db; +#X text 597 309 spread; +#X obj 50 338 hoa.process~ 11 hoa/hoa.fx.gain~ planewaves, f 35; +#X obj 88 395 hoa.scope~ 5 @gain 4 @size 164 164; +#X obj 50 568 hoa.recomposer~ 5 11, f 35; +#X obj 50 597 hoa.decoder~ 5 binaural, f 35; +#X obj 50 626 dac~, f 35; +#X text 50 654 multiple [osc~]; +#X msg 50 683 60 90 2.1; +#X msg 165 683 50 120 4.1; +#X obj 50 712 list.seq 60 90 2.01; +#X obj 50 741 list.each; +#X obj 184 741 mtof; +#X obj 50 770 msg \#:; +#X obj 50 799 hoa.process~ 11 hoa/hoa.syn.osc~ planewaves, f 45; +#X obj 50 827 pan.spread~ 11, f 45; +#X obj 50 856 ui.hgain2~ @size 15 318; +#X obj 50 885 dac~, f 45; +#X obj 50 914 ui.dsp~; +#X obj 20 953 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 958 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +-49933 0; +#X text 110 993 1\.; +#X text 150 993 int; +#X obj 246 994 cnv 1 47 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 993 ORDER: the order of decomposition. Range: 1\...63; +#X text 110 1013 2\.; +#X text 150 1013 symbol; +#X obj 246 1014 cnv 1 46 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 1013 PNAME: patch name.; +#X text 110 1033 3\.; +#X text 150 1033 symbol; +#X obj 246 1034 cnv 1 54 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 1033 DOMAIN: process domain: harmonics or planewaves.; +#X obj 20 1063 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1068 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 1103 @domain; +#X text 245 1103 (readonly) Get process domain: harmonics or planewaves. +Type: symbol. Default value: harmonics. Allowed values: harmonics \, +planewaves.; +#X msg 110 1160 @n; +#X text 245 1160 (readonly) Get the order of decomposition/number of +planewaves. Type: int. Default value: 0\. Range: 0\...63\.; +#X obj 20 1212 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1217 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 1218 1\.; +#X text 245 1218 first input harmonic/planewave.; +#X text 110 1238 ....; +#X text 245 1238 ... input harmonic/planewave.; +#X text 110 1258 n.; +#X text 245 1258 n-th input harmonic/planewave.; +#X obj 20 1288 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1293 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 1294 1\.; +#X text 245 1294 first harmonic/planewave output.; +#X text 110 1314 ....; +#X text 245 1314 ... harmonic/planewave output.; +#X text 110 1334 n.; +#X text 245 1334 n-th harmonic/planewave output.; +#X obj 10 48 ui.link @title index @url ../index-help.pd; +#X text 51 45 ::; +#X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; +#X text 115 45 ::; +#X obj 131 48 ui.link @title spat @url ceammc.spat-help.pd; +#X obj 1 1384 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1387 library: ceammc v0.8.0; +#X text 557 1399 see also:; +#X obj 631 1399 hoa.2d.decoder~; +#N canvas 10 1406 400 290 info 0; +#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; +#X text 10 10 library:; +#X text 120 10 ceammc; +#X text 10 32 version:; +#X text 120 32 0.8.0; +#X text 10 54 object:; +#X text 120 54 hoa.process~; +#X text 10 76 category:; +#X text 120 76 spat; +#X text 10 98 since:; +#X text 120 98 0.8; +#X text 10 120 authors:; +#X text 120 120 Serge Poltavsky \, Pierre Guillot \, Eliott Paris \, +Thomas Le Meur; +#X text 10 142 license:; +#X text 120 142 GPL3 or later; +#X text 10 164 keywords:; +#X text 120 164 hoa \, process \, 2d; +#X text 10 186 website:; +#X obj 120 189 ui.link @title https://github.com/uliss/pure-data @url +https://github.com/uliss/pure-data; +#X obj 120 208 declare -lib ceammc; +#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 120 268 generated by pddoc; +#X restore 10 1406 pd info; +#X connect 8 0 11 0; +#X connect 9 0 12 0; +#X connect 11 0 13 0; +#X connect 12 0 13 1; +#X connect 10 0 14 0; +#X connect 13 0 16 0; +#X connect 13 1 16 1; +#X connect 13 2 16 2; +#X connect 13 3 16 3; +#X connect 13 4 16 4; +#X connect 13 5 16 5; +#X connect 13 6 16 6; +#X connect 13 7 16 7; +#X connect 13 8 16 8; +#X connect 13 9 16 9; +#X connect 13 10 16 10; +#X connect 16 0 17 0; +#X connect 16 1 17 1; +#X connect 16 2 17 2; +#X connect 16 3 17 3; +#X connect 16 4 17 4; +#X connect 16 5 17 5; +#X connect 16 6 17 6; +#X connect 16 7 17 7; +#X connect 16 8 17 8; +#X connect 16 9 17 9; +#X connect 16 10 17 10; +#X connect 16 0 18 0; +#X connect 16 1 18 1; +#X connect 16 2 18 2; +#X connect 16 3 18 3; +#X connect 16 4 18 4; +#X connect 16 5 18 5; +#X connect 16 6 18 6; +#X connect 16 7 18 7; +#X connect 16 8 18 8; +#X connect 16 9 18 9; +#X connect 16 10 18 10; +#X connect 18 0 19 0; +#X connect 18 1 19 1; +#X connect 18 2 19 2; +#X connect 18 3 19 3; +#X connect 18 4 19 4; +#X connect 18 5 19 5; +#X connect 18 6 19 6; +#X connect 18 7 19 7; +#X connect 18 8 19 8; +#X connect 18 9 19 9; +#X connect 18 10 19 10; +#X connect 19 0 20 0; +#X connect 19 1 20 1; +#X connect 22 0 24 0; +#X connect 23 0 24 0; +#X connect 24 0 25 0; +#X connect 25 0 27 0; +#X connect 27 0 28 1; +#X connect 28 0 29 0; +#X connect 28 1 29 1; +#X connect 28 2 29 2; +#X connect 28 3 29 3; +#X connect 28 4 29 4; +#X connect 28 5 29 5; +#X connect 28 6 29 6; +#X connect 28 7 29 7; +#X connect 28 8 29 8; +#X connect 28 9 29 9; +#X connect 28 10 29 10; +#X connect 29 0 30 0; +#X connect 29 1 30 1; +#X connect 30 0 31 0; +#X connect 30 1 31 1; +#X connect 14 0 16 11; +#X connect 25 1 26 0; +#X connect 26 0 25 1; \ No newline at end of file diff --git a/ceammc/ext/doc/hoa.process~.pddoc b/ceammc/ext/doc/hoa.process~.pddoc new file mode 100644 index 0000000000..c3adae1fb5 --- /dev/null +++ b/ceammc/ext/doc/hoa.process~.pddoc @@ -0,0 +1,115 @@ + + + + hoa.process~ + + + Serge Poltavsky + Pierre Guillot + Eliott Paris + Thomas Le Meur + + patcher loader for multichannel processing + GPL3 or later + ceammc + spat + hoa process 2d + 0.8 + + hoa.2d.decoder~ + + + + hoa.process~ helps the modularization of patches for ambisonic or plane waves + processing. + hoa.process~ is a kind of poly~ object particulary suitable for multichannel + ambisonic or plane wave processing. Create a patch/effect/operator, then parallelize it + with the hoa.process~ + CICM documentation + + + the order of + decomposition + patch name + process domain: + harmonics or planewaves + + + + the order of decomposition/number of planewaves + process domain: harmonics or planewaves + + + + first input harmonic/planewave + + + ... input harmonic/planewave + + + n-th input harmonic/planewave + + + + first harmonic/planewave output + ... harmonic/planewave output + n-th harmonic/planewave output + + + +rad~] | +| |. | +[hoa.encoder~ 5 {w=33,i=11,o=11}] [msg \#: @db #b]/*spread*/ +*|* +[hoa.process~ 11 hoa/hoa.fx.gain~ planewaves {w=35,i=12,o=11} #z] +*|* *|* +*|* *|* +*|* *|* +*|* [hoa.scope~ 5 @gain 4 {i=11} @size 164 164] +*|* +*|* +*|* +*|* +*|* +*|* +*|* +*|* +*|* +*|* +*|* +[hoa.recomposer~ 5 11 {w=35,i=11,o=11}] +*|* +[hoa.decoder~ 5 binaural {w=35,i=11,o=11}] +*|* +[dac~ {w=35}] + +/* multiple [osc~] */ + +[60 90 2.1( [50 120 4.1( +| | +[list.seq 60 90 2.01] +| +[list.each] X [mtof] +| +[msg \#:] +|. +[hoa.process~ 11 hoa/hoa.syn.osc~ planewaves {w=45,i=12,o=11}] +*|* +[pan.spread~ 11 {w=45,i=12,o=2}] +*|* +[ui.hgain2~ @size 15 318] +*|* +[dac~ {w=45}] + +[ui.dsp~] +[X b->z:11] +#a @count 11 @min -60 @max 0 @size 200 55 +]]> + + + + diff --git a/ceammc/ext/doc/hoa.scope~-help.pd b/ceammc/ext/doc/hoa.scope~-help.pd new file mode 100644 index 0000000000..fc48ddfb8c --- /dev/null +++ b/ceammc/ext/doc/hoa.scope~-help.pd @@ -0,0 +1,148 @@ +#N canvas 0 0 785 555 12; +#X declare -lib ceammc; +#X obj 537 50 cnv 1 228 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 537 50 a 2d ambisonic harmonic scope; +#X obj 1 1 cnv 5 765 40 empty empty hoa.scope~ 20 20 0 20 -104026 +-4096 0; +#X obj 665 13 ui.link @background_color 0.39216 0.39216 0.39216 @title +[hoa.scope~] @url hoa.scope~-help.pd; +#X obj 210 80 cnv 1 555 35 empty empty empty 17 7 0 10 -257983 -1 0; +#X text 215 80 displays the circular harmonics of an ambisonic sound +field; +#X obj 50 143 osc.square~ 0.15; +#X obj 280 143 phasor~ 0.15; +#X obj 50 172 ui.gain~ @size 120 14; +#X obj 280 172 phase->rad~; +#X obj 50 201 hoa.encoder~ 5, f 17; +#X obj 50 230 hoa.scope~ 5; +#X obj 50 359 ui.dsp~; +#X obj 20 398 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 403 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +-49933 0; +#X text 110 438 1\.; +#X text 150 438 int; +#X obj 246 439 cnv 1 47 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 438 ORDER: the order of decomposition. Min value: 1; +#X obj 20 468 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 473 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 508 @gain; +#X text 245 508 Get/Set gain. Type: float. Default value: 1\. Min value: +0\.; +#X msg 110 537 @order; +#X text 245 537 (readonly) Get the order of decomposition. Type: int. +Default value: 1\. Range: 1\...63\.; +#X msg 110 579 @receive; +#X text 245 579 Get/Set receive source. Type: symbol.; +#X msg 110 608 @refresh; +#X text 245 608 Get/Set redraw time. Type: int. Units: ms. Default +value: 100\. Range: 20\...1000\.; +#X msg 110 650 @send; +#X text 245 650 Get/Set send destination. Type: symbol.; +#X msg 110 679 @view; +#X text 245 679 Get/Set view rotation. Type: float. Default value: +0\.; +#X msg 110 708 @background_color; +#X text 245 708 Get/Set element background color (list of red \, green +\, blue values in 0-1 range). Type: list.; +#X msg 110 750 @border_color; +#X text 245 750 Get/Set border color (list of red \, green \, blue +values in 0-1 range). Type: list.; +#X msg 110 792 @label_color; +#X text 245 792 Get/Set label color in RGB format within 0-1 range +\, for example: 0.2 0.4 0.1\. Type: list.; +#X msg 110 834 @nh_color; +#X text 245 834 Get/Set negative harmonics color. Type: list.; +#X msg 110 863 @ph_color; +#X text 245 863 Get/Set positive harmonics color. Type: list.; +#X msg 110 892 @label; +#X text 245 892 Get/Set label text. Type: symbol.; +#X msg 110 921 @label_align; +#X text 245 921 Get/Set label horizontal align. Type: symbol. Default +value: left. Allowed values: left \, center \, right.; +#X msg 110 963 @label_inner; +#X text 245 963 Get/Set label position (1 - inner \, 0 - outer). Type: +int. Default value: 0\. Allowed values: 0 \, 1\.; +#X msg 110 1005 @label_margins; +#X text 245 1005 Get/Set label offset in pixels. Type: list. Default +value: 0 0\.; +#X msg 110 1047 @label_side; +#X text 245 1047 Get/Set label snap side. Type: symbol. Default value: +top. Allowed values: left \, top \, right \, bottom.; +#X msg 110 1089 @label_valign; +#X text 245 1089 Get/Set label vertical align. Type: symbol. Default +value: top. Allowed values: top \, center \, bottom.; +#X msg 110 1131 @fontname; +#X text 245 1131 Get/Set fontname. Type: symbol.; +#X msg 110 1160 @fontsize; +#X text 245 1160 Get/Set fontsize. Type: int. Default value: 11\. Range: +4\...11\.; +#X msg 110 1202 @fontslant; +#X text 245 1202 Get/Set font slant. Type: symbol. Default value: roman. +Allowed values: roman \, italic.; +#X msg 110 1244 @fontweight; +#X text 245 1244 Get/Set font weight. Type: symbol. Default value: +normal. Allowed values: normal \, bold.; +#X msg 110 1286 @pinned; +#X text 245 1286 Get/Set pin mode. if 1 - put element to the lowest +level. Type: int. Default value: 0\. Allowed values: 0 \, 1\.; +#X msg 110 1328 @size; +#X text 245 1328 Get/Set element size (width \, height pair). Type: +list.; +#X obj 20 1367 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1372 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 1373 1\.; +#X text 245 1373 first input harmonic.; +#X text 110 1393 ....; +#X text 245 1393 ... input harmonic.; +#X text 110 1413 n.; +#X text 245 1413 n-th input harmonic.; +#X obj 10 48 ui.link @title index @url ../index-help.pd; +#X text 51 45 ::; +#X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; +#X text 115 45 ::; +#X obj 131 48 ui.link @title spat @url ceammc.spat-help.pd; +#X obj 1 1463 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1466 library: ceammc v0.8.0; +#N canvas 10 1485 400 290 info 0; +#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; +#X text 10 10 library:; +#X text 120 10 ceammc; +#X text 10 32 version:; +#X text 120 32 0.8.0; +#X text 10 54 object:; +#X text 120 54 hoa.scope~; +#X text 10 76 category:; +#X text 120 76 spat; +#X text 10 98 since:; +#X text 120 98 0.8; +#X text 10 120 authors:; +#X text 120 120 Serge Poltavsky \, Pierre Guillot \, Eliott Paris \, +Thomas Le Meur; +#X text 10 142 license:; +#X text 120 142 GPL3 or later; +#X text 10 164 keywords:; +#X text 120 164 hoa \, scope; +#X text 10 186 website:; +#X obj 120 189 ui.link @title https://github.com/uliss/pure-data @url +https://github.com/uliss/pure-data; +#X obj 120 208 declare -lib ceammc; +#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 120 268 generated by pddoc; +#X restore 10 1485 pd info; +#X connect 6 0 8 0; +#X connect 7 0 9 0; +#X connect 8 0 10 0; +#X connect 9 0 10 1; +#X connect 10 0 11 0; +#X connect 10 1 11 1; +#X connect 10 2 11 2; +#X connect 10 3 11 3; +#X connect 10 4 11 4; +#X connect 10 5 11 5; +#X connect 10 6 11 6; +#X connect 10 7 11 7; +#X connect 10 8 11 8; +#X connect 10 9 11 9; +#X connect 10 10 11 10; \ No newline at end of file diff --git a/ceammc/ext/doc/hoa.scope~.pddoc b/ceammc/ext/doc/hoa.scope~.pddoc new file mode 100644 index 0000000000..348bd3db52 --- /dev/null +++ b/ceammc/ext/doc/hoa.scope~.pddoc @@ -0,0 +1,100 @@ + + + + hoa.scope~ + + + Serge Poltavsky + Pierre Guillot + Eliott Paris + Thomas Le Meur + + a 2d ambisonic harmonic scope + GPL3 or later + ceammc + spat + hoa scope + 0.8 + + + displays the circular harmonics of an ambisonic sound field + + + the order of decomposition + + + the order of decomposition + view rotation + gain + redraw time + positive harmonics color + negative harmonics color + + send destination + receive source + element size (width, height pair) + pin mode. if 1 - put element + to the lowest level + element background color (list of red, + green, blue values in 0-1 range) + border color (list of red, green, blue + values in 0-1 range) + + fontsize + fontname + font + weight + font + slant + + label text + label color in RGB format within 0-1 range, + for example: 0.2 0.4 0.1 + label position (1 - + inner, 0 - outer). + + label horizontal align + + label vertical align + + label snap side + label offset in + pixels + + + + first input harmonic + + + ... input harmonic + + + n-th input harmonic + + + + +rad~] +| |. +[hoa.encoder~ 5 {w=17,i=11,o=11}] +*|* +[hoa.scope~ 5 {i=11}] + + + + + + + + +[ui.dsp~] +]]> + + + + diff --git a/ceammc/ext/doc/hoa/hoa-help.pd b/ceammc/ext/doc/hoa/hoa-help.pd new file mode 100644 index 0000000000..85d21f9379 --- /dev/null +++ b/ceammc/ext/doc/hoa/hoa-help.pd @@ -0,0 +1,179 @@ +#N canvas 539 58 662 587 10; +#X obj 3 3 hoa.help.header; +#X obj 24 518 hoa.help.pub; +#N canvas 633 206 452 384 sel.hoa.txt 0; +#X obj 54 243 unpack s s; +#X msg 216 268 clear; +#X obj 20 30 inlet; +#X obj 111 294 outlet; +#X obj 54 217 textfile; +#X obj 20 100 until; +#X msg 37 132 rewind; +#X obj 20 58 t b b s b; +#X obj 54 164 makefilename hoa.%s.txt; +#X obj 54 187 msg read; +#X obj 111 267 msg append; +#X connect 0 1 10 0; +#X connect 1 0 3 0; +#X connect 2 0 7 0; +#X connect 4 0 0 0; +#X connect 4 1 5 1; +#X connect 5 0 4 0; +#X connect 6 0 4 0; +#X connect 7 0 5 0; +#X connect 7 1 6 0; +#X connect 7 2 8 0; +#X connect 7 3 1 0; +#X connect 8 0 9 0; +#X connect 9 0 4 0; +#X connect 10 0 3 0; +#X restore 161 230 pd sel.hoa.txt; +#N canvas 366 70 687 436 sel.hoa.text2 0; +#X obj 164 285 list split 1; +#X obj 198 305 list split 1; +#X obj 23 35 inlet; +#X obj 232 358 outlet; +#X obj 23 57 route -1; +#X obj 164 40 inlet; +#X obj 164 227 textfile; +#X obj 164 68 t s b; +#X obj 68 134 until; +#X msg 134 122 rewind; +#X obj 164 260 spigot 0; +#X obj 68 202 f 0; +#X obj 107 203 + 1; +#X obj 68 226 ==; +#X msg 106 170 0; +#X obj 68 110 + 1; +#X obj 57 179 t b b; +#X obj 164 174 makefilename hoa.%s.txt; +#X msg 364 328 clear; +#X obj 68 84 t f f b b; +#X obj 232 328 prepend text 10 10; +#X obj 164 197 msg read; +#X connect 0 1 1 0; +#X connect 1 1 20 0; +#X connect 2 0 4 0; +#X connect 4 1 19 0; +#X connect 5 0 7 0; +#X connect 6 0 10 0; +#X connect 7 0 17 0; +#X connect 7 1 18 0; +#X connect 8 0 16 0; +#X connect 9 0 6 0; +#X connect 10 0 0 0; +#X connect 11 0 12 0; +#X connect 11 0 13 0; +#X connect 12 0 11 1; +#X connect 13 0 10 1; +#X connect 14 0 11 1; +#X connect 15 0 8 0; +#X connect 16 0 6 0; +#X connect 16 1 11 0; +#X connect 17 0 21 0; +#X connect 18 0 3 0; +#X connect 19 0 15 0; +#X connect 19 1 13 1; +#X connect 19 1 14 0; +#X connect 19 2 9 0; +#X connect 19 3 18 0; +#X connect 20 0 3 0; +#X connect 21 0 6 0; +#X restore 5 362 pd sel.hoa.text2; +#N canvas 521 133 694 586 hoa.open.hel 0; +#X obj 371 281 pack s s; +#X obj 371 187 t s b; +#X obj 96 356 pack s s; +#X msg 96 383 \; pd open \$1 \$2; +#X obj 183 233 makefilename %s/tutorials; +#X obj 16 70 sel tutos; +#X obj 16 10 inlet; +#X obj 16 112 f 1; +#X obj 67 112 f 0; +#X obj 42 112 f 0; +#X obj 94 112 f 1; +#X obj 67 90 bang; +#X msg 74 286 hoa.tools.2d.pd; +#X obj 146 10 inlet; +#X obj 96 192 t f b; +#X msg 235 302 hoa.tools.3d.pd; +#X obj 53 323 makefilename Tutorial_%d.pd; +#X obj 96 223 + 1; +#X obj 96 253 sel 11 12; +#X obj 143 213 patch.args; +#X msg 371 308 \; pd open \$1-help.pd \$2; +#X obj 371 163 flow.gate 1; +#X obj 96 168 flow.gate 0; +#X obj 352 359 print; +#X obj 398 234 canvas.top; +#X msg 398 211 @dir?; +#X obj 398 257 prop-> @dir; +#X obj 146 32 list.at 1; +#X connect 0 0 20 0; +#X connect 0 0 23 0; +#X connect 1 0 0 0; +#X connect 1 1 25 0; +#X connect 2 0 3 0; +#X connect 4 0 2 1; +#X connect 5 0 7 0; +#X connect 5 0 9 0; +#X connect 5 1 11 0; +#X connect 6 0 5 0; +#X connect 7 0 22 1; +#X connect 8 0 22 1; +#X connect 9 0 21 1; +#X connect 10 0 21 1; +#X connect 11 0 8 0; +#X connect 11 0 10 0; +#X connect 12 0 2 0; +#X connect 13 0 27 0; +#X connect 14 0 17 0; +#X connect 14 1 19 0; +#X connect 15 0 2 0; +#X connect 16 0 2 0; +#X connect 17 0 18 0; +#X connect 18 0 12 0; +#X connect 18 1 15 0; +#X connect 18 2 16 0; +#X connect 19 0 4 0; +#X connect 21 0 1 0; +#X connect 22 0 14 0; +#X connect 24 0 26 0; +#X connect 25 0 24 0; +#X connect 26 1 0 1; +#X connect 27 0 22 0; +#X connect 27 0 21 0; +#X restore 42 267 pd hoa.open.hel; +#X text 4 47 Hoa Library allows musicians and composers to synthesize +\, transform and render sound fields in a creative and artistic way. +This library facilitates the understanding and the appropriation of +key concepts of Ambisonics. Thanks to original graphical interfaces +a lot of new signal processings are allowed like diffuse sound field +synthesis \, perspective distorsion or spatial filtering.; +#X obj 6 173 msg.onload 0; +#X obj 5 156 ui.tab @size 398 36 @receive "(null)" @send "(null)" @pinned +0 @presetname "ui.tab.0" @background_color 0.93 0.93 0.93 1 @border_color +0.6 0.6 0.6 1 @label_color 0 0 0 1 @text_color 0 0 0 1 @active_color +0 0.75 1 1 @hover_color 0.5 0.5 0.5 1 @fontname "Monaco" @fontweight +"normal" @fontslant "roman" @fontsize 13 @label "(null)" @label_inner +0 @label_side "top" @label_align "left" @label_valign "top" @label_margins +0 0 @orientation 0 @toggle 0 @items "2d" "3d" "common" "process" "tutos" +; +#X obj 5 201 ui.tab @size 398 264 @receive "(null)" @send "(null)" +@pinned 0 @presetname "ui.tab.1" @background_color 0.93 0.93 0.93 1 +@border_color 0.6 0.6 0.6 1 @label_color 0 0 0 1 @text_color 0 0 0 +1 @active_color 0 0.75 1 1 @hover_color 0.5 0.5 0.5 1 @fontname "Monaco" +@fontweight "normal" @fontslant "roman" @fontsize 11 @label "(null)" +@label_inner 0 @label_side "top" @label_align "left" @label_valign +"top" @label_margins 0 0 @orientation 1 @toggle 0 @items "hoa.fx.convolve~" +"hoa.fx.delay~" "hoa.fx.freeverb~" "hoa.fx.gain~" "hoa.fx.ringmod~" +"hoa.fx.mirror~" "hoa.syn.delay~" "hoa.syn.grain~" "hoa.syn.ringmod~" +; +#X obj 5 202 list.at 1; +#X connect 2 0 8 0; +#X connect 6 0 7 0; +#X connect 7 0 9 0; +#X connect 8 0 4 1; +#X connect 9 0 4 0; +#X connect 9 0 2 0; +#X coords 0 -2.14748e+09 1 -2.14748e+09 100 60 0; diff --git a/ceammc/ext/doc/hoa/hoa.2d.decoder~-help.pd b/ceammc/ext/doc/hoa/hoa.2d.decoder~-help.pd new file mode 100644 index 0000000000..03b0bcd259 --- /dev/null +++ b/ceammc/ext/doc/hoa/hoa.2d.decoder~-help.pd @@ -0,0 +1,118 @@ +#N canvas 412 23 722 558 10; +#X text 8 85 1st argument is the order., f 60; +#X text 8 48 hoa.2d.decoder~ decodes an ambisonic sound field for several +loudspeakers configurations or for headphones.; +#X obj 568 98 phasor~ 0.3; +#X obj 403 513 hoa-help; +#X obj 10 22 cnv 15 200 20 empty empty hoa.2d.decoder~ 4 10 0 14 -233017 +-66577 0; +#X obj 403 150 hoa.2d.encoder~ 7, f 28; +#X text 8 99 2nd argument is the decoding mode : regular \, irregular +or binaural (for headphones)., f 60; +#X text 8 126 3rd argument is the number of loudspeakers (minmum 2 +* order + 1 for regular mode) for regular or irregular modes.; +#X text 8 261 • Irregular decoding is used for other configurations +line mono (1) \, stereo (2) \, 3.1 (3) \, quadriphonie (4) \, 5.1 (5) +\, 6.1 \, 7.1. You should use "inPhase" optimization to avoid artefacts. +Ex:, f 60; +#X text 8 364 • Binaural decoding is used for headphones. If the +decoding cost too much CPU \, you can crop the HRIRs. Example on the +right:; +#X obj 454 72 max~ 0; +#X obj 403 96 *~, f 9; +#X obj 403 50 noise~; +#X obj 454 50 osc~ 7; +#X obj 403 72 *~ 0.25; +#X obj 403 119 ui.gain~ @size 120 15 @receive "(null)" @send "(null)" +@pinned 0 @presetname "ui.gain~.0" @background_color 0.93 0.93 0.93 +1 @border_color 0.6 0.6 0.6 1 @label_color 0 0 0 1 @knob_color 0 0.75 +1 1 @fontname "Helvetica" @fontweight "normal" @fontslant "roman" @fontsize +11 @label "(null)" @label_inner 0 @label_side "top" @label_align "left" +@label_valign "top" @label_margins 0 0 @max 0 @min -60 @output_value +0 @show_range 1; +#X obj 10 228 hoa.2d.decoder~ 7 regular 16 @offset 45, f 42; +#X obj 10 327 hoa.2d.decoder~ 7 irregular 5 @angles 0 30 110 250 330 +; +#X obj 403 464 xdac~ 1:2, f 28; +#X obj 403 405 ui.meter~ @size 120 15 @receive "(null)" @send "(null)" +@pinned 0 @background_color 0.93 0.93 0.93 1 @border_color 0.6 0.6 +0.6 1 @label_color 0 0 0 1 @cold_color 0 0.6 0 1 @tepid_color 0.6 0.73 +0 1 @warm_color 0.85 0.85 0 1 @hot_color 1 0.6 0 1 @over_color 1 0 +0 1 @fontname "Helvetica" @fontweight "normal" @fontslant "roman" @fontsize +11 @label "(null)" @label_inner 0 @label_side "top" @label_align "left" +@label_valign "top" @label_margins 0 0 @interval 50; +#X obj 607 430 ui.dsp~ @size 51 51 @receive "(null)" @send "(null)" +@pinned 0 @background_color 0.93 0.93 0.93 1 @border_color 0.6 0.6 +0.6 1 @label_color 0 0 0 1 @active_color 0 0.75 1 1 @fontname "Helvetica" +@fontweight "normal" @fontslant "roman" @fontsize 11 @label "(null)" +@label_inner 0 @label_side "top" @label_align "left" @label_valign +"top" @label_margins 0 0; +#X obj 403 361 hoa.2d.decoder~ 7 binaural 2 @crop 256, f 28; +#X text 8 465 @angles property defines the angles of the loudspeakers +(in degrees). Only available for irregular mode.; +#X text 8 495 @crop property defines the size of the HRIRs (in samples). +the maximum is 512 samples. Only available for binaural mode.; +#X obj 568 405 ui.meter~ @size 120 15 @receive "(null)" @send "(null)" +@pinned 0 @background_color 0.93 0.93 0.93 1 @border_color 0.6 0.6 +0.6 1 @label_color 0 0 0 1 @cold_color 0 0.6 0 1 @tepid_color 0.6 0.73 +0 1 @warm_color 0.85 0.85 0 1 @hot_color 1 0.6 0 1 @over_color 1 0 +0 1 @fontname "Helvetica" @fontweight "normal" @fontslant "roman" @fontsize +11 @label "(null)" @label_inner 0 @label_side "top" @label_align "left" +@label_valign "top" @label_margins 0 0 @interval 50; +#X obj 568 120 phase->rad~; +#X text 8 425 @offset property the rotation of the loudspeakers (in +degrees). Only available for regular and irregular modes.; +#X obj 403 491 hoa.credits; +#X text 8 165 • Regular decoding is used for a perfect circle of +loudspeakers \, where all the loudspeakers are to equally spaced. The +minimum number of loudspeakers is 2 * order + 1 (default : 2 * order ++ 2). Ex:, f 60; +#X obj 414 180 hoa.scope~ @size 171 171 @receive "(null)" @send "(null)" +@pinned 0 @background_color 0.93 0.93 0.93 1 @border_color 0.6 0.6 +0.6 1 @label_color 0 0 0 1 @ph_color 1 0 0 1 @nh_color 0 0 1 1 @fontname +"Helvetica" @fontweight "normal" @fontslant "roman" @fontsize 11 @label +"(null)" @label_inner 0 @label_side "top" @label_align "left" @label_valign +"top" @label_margins 0 0 @gain 4 @refresh 30 @order 7 @view 0; +#X connect 2 0 25 0; +#X connect 5 0 21 0; +#X connect 5 0 29 0; +#X connect 5 1 21 1; +#X connect 5 1 29 1; +#X connect 5 2 21 2; +#X connect 5 2 29 2; +#X connect 5 3 21 3; +#X connect 5 3 29 3; +#X connect 5 4 21 4; +#X connect 5 4 29 4; +#X connect 5 5 21 5; +#X connect 5 5 29 5; +#X connect 5 6 21 6; +#X connect 5 6 29 6; +#X connect 5 7 21 7; +#X connect 5 7 29 7; +#X connect 5 8 21 8; +#X connect 5 8 29 8; +#X connect 5 9 21 9; +#X connect 5 9 29 9; +#X connect 5 10 21 10; +#X connect 5 10 29 10; +#X connect 5 11 21 11; +#X connect 5 11 29 11; +#X connect 5 12 21 12; +#X connect 5 12 29 12; +#X connect 5 13 21 13; +#X connect 5 13 29 13; +#X connect 5 14 21 14; +#X connect 5 14 29 14; +#X connect 10 0 11 1; +#X connect 11 0 15 0; +#X connect 12 0 14 0; +#X connect 13 0 10 0; +#X connect 14 0 11 0; +#X connect 15 0 5 0; +#X connect 21 0 18 0; +#X connect 21 0 19 0; +#X connect 21 1 18 1; +#X connect 21 1 24 0; +#X connect 25 0 5 1; +#X coords 0 558 1 557 100 60 0; diff --git a/ceammc/ext/doc/hoa/hoa.2d.encoder~-help.pd b/ceammc/ext/doc/hoa/hoa.2d.encoder~-help.pd new file mode 100644 index 0000000000..a54c9a2fcc --- /dev/null +++ b/ceammc/ext/doc/hoa/hoa.2d.encoder~-help.pd @@ -0,0 +1,114 @@ +#N canvas 395 64 765 498 10; +#X obj 386 409 hoa.2d.decoder~ 7 regular 16; +#X obj 386 147 hoa.2d.encoder~ 7, f 28; +#X obj 6 34 cnv 15 200 20 empty empty hoa.2d.encoder~ 4 10 0 14 -233017 +-66577 0; +#X text 18 196 Y[l \, m](θ) = sin(|m|*θ), f 57; +#X text 6 167 with the complex exponential e^i that can be expressed +by, f 59; +#X text 6 182 if m < 0, f 59; +#X text 6 210 else if m >= 0, f 59; +#X text 18 224 Y[l \, m](θ) = cos(|m|*θ), f 57; +#X text 6 238 with l the degree \, m the azimuthal order \, θ the +azimuth and S the signal to encode.; +#X text 6 67 hoa.2d.encoder~ generates the signal of the 2N+1 circular +harmonics of a sound source depending on the order of decomposition +N and an azimuth θ., f 59; +#X text 6 116 Each generated signal of the sound field carries the +source signal weighted by its associated harmonic Y defined by; +#X text 632 115 azimuth θ in radian (-π & π), f 17; +#X text 6 278 The signal of the circular harmonics are not normalized +\, they are defined between -1 and 1 \, even for the first omnidirectional +harmonic Y[0 \, 0]. The harmonics Y[l \, m] are ordered following the +ACN:; +#X text 6 331 Y[0 \, Ø] \, Y[1 \, -1] \, Y[1 \, 1] \, Y[2 \, -2] \, +... \, Y[N \, -N] \, Y[N \, N]; +#X text 391 113 The argument is the order of decomposition N., f 25 +; +#X text 568 361 Representation of the weighted sum of the circular +harmonics over a disc. The blue part is the negative contribution \, +the red part is the positive contribution., f 26; +#X obj 551 100 phasor~ 0.3; +#X text 18 153 Y[l \, m](θ) = e^i|m|θ., f 57; +#X obj 8 414 hoa-help; +#X obj 311 401 ui.dsp~ @size 52 52 @receive "(null)" @send "(null)" +@pinned 0 @background_color 0.93 0.93 0.93 1 @border_color 0.6 0.6 +0.6 1 @label_color 0 0 0 1 @active_color 0 0.75 1 1 @fontname "Helvetica" +@fontweight "normal" @fontslant "roman" @fontsize 11 @label "(null)" +@label_inner 0 @label_side "top" @label_align "left" @label_valign +"top" @label_margins 0 0; +#X obj 386 95 ui.gain~ @size 120 15 @receive "(null)" @send "(null)" +@pinned 0 @presetname "ui.gain~.1" @background_color 0.93 0.93 0.93 +1 @border_color 0.6 0.6 0.6 1 @label_color 0 0 0 1 @knob_color 0 0.75 +1 1 @fontname "Helvetica" @fontweight "normal" @fontslant "roman" @fontsize +11 @label "(null)" @label_inner 0 @label_side "top" @label_align "left" +@label_valign "top" @label_margins 0 0 @max 0 @min -60 @output_value +0 @show_range 1; +#X obj 551 124 phase->rad~; +#X obj 564 149 ui.number~ @size 80 15 @receive "(null)" @send "(null)" +@pinned 0 @background_color 0.3 0.3 0.3 1 @border_color 0 0 0 1 @label_color +0 0 0 1 @text_color 0.9 0.9 0.9 1 @active_color 0 0.75 1 1 @fontname +"Helvetica" @fontweight "normal" @fontslant "roman" @fontsize 11 @label +"(null)" @label_inner 0 @label_side "top" @label_align "left" @label_valign +"top" @label_margins 0 0 @decimal 6 @interval 50; +#X obj 8 392 hoa.credits; +#X obj 386 437 xdac~ 1:16, f 28; +#X obj 386 71 hoa.soundgrain; +#X obj 395 186 hoa.scope~ @size 174 174 @receive "(null)" @send "(null)" +@pinned 0 @background_color 0.93 0.93 0.93 1 @border_color 0.6 0.6 +0.6 1 @label_color 0 0 0 1 @ph_color 1 0 0 1 @nh_color 0 0 1 1 @fontname +"Helvetica" @fontweight "normal" @fontslant "roman" @fontsize 11 @label +"(null)" @label_inner 0 @label_side "top" @label_align "left" @label_valign +"top" @label_margins 0 0 @gain 3 @refresh 100 @order 7 @view 0; +#X connect 0 0 24 0; +#X connect 0 1 24 1; +#X connect 0 2 24 2; +#X connect 0 3 24 3; +#X connect 0 4 24 4; +#X connect 0 5 24 5; +#X connect 0 6 24 6; +#X connect 0 7 24 7; +#X connect 0 8 24 8; +#X connect 0 9 24 9; +#X connect 0 10 24 10; +#X connect 0 11 24 11; +#X connect 0 12 24 12; +#X connect 0 13 24 13; +#X connect 0 14 24 14; +#X connect 0 15 24 15; +#X connect 1 0 0 0; +#X connect 1 0 26 0; +#X connect 1 1 0 1; +#X connect 1 1 26 1; +#X connect 1 2 0 2; +#X connect 1 2 26 2; +#X connect 1 3 0 3; +#X connect 1 3 26 3; +#X connect 1 4 0 4; +#X connect 1 4 26 4; +#X connect 1 5 0 5; +#X connect 1 5 26 5; +#X connect 1 6 0 6; +#X connect 1 6 26 6; +#X connect 1 7 0 7; +#X connect 1 7 26 7; +#X connect 1 8 0 8; +#X connect 1 8 26 8; +#X connect 1 9 0 9; +#X connect 1 9 26 9; +#X connect 1 10 0 10; +#X connect 1 10 26 10; +#X connect 1 11 0 11; +#X connect 1 11 26 11; +#X connect 1 12 0 12; +#X connect 1 12 26 12; +#X connect 1 13 0 13; +#X connect 1 13 26 13; +#X connect 1 14 0 14; +#X connect 1 14 26 14; +#X connect 16 0 21 0; +#X connect 20 0 1 0; +#X connect 21 0 1 1; +#X connect 21 0 22 0; +#X connect 25 0 20 0; +#X coords 0 498 1 497 100 60 0; diff --git a/ceammc/ext/doc/hoa/hoa.2d.optim~-help.pd b/ceammc/ext/doc/hoa/hoa.2d.optim~-help.pd new file mode 100644 index 0000000000..a68238532c --- /dev/null +++ b/ceammc/ext/doc/hoa/hoa.2d.optim~-help.pd @@ -0,0 +1,145 @@ +#N canvas 158 32 949 689 10; +#X obj 398 119 hoa.2d.encoder~ 3, f 24; +#X obj 122 619 hoa-help; +#X obj 398 576 hoa.2d.decoder~ 3 regular 8, f 24; +#X text 620 86 azimuth θ in radian (-π & π), f 17; +#X obj 539 66 phasor~ 0.3; +#X obj 398 354 hoa.2d.optim~ 3 inphase, f 24; +#X obj 6 6 cnv 15 200 20 empty empty hoa.2d.optim~ 4 10 0 14 -233017 +-66577 0; +#X text 9 38 hoa.2d.optim~ weights the signals of the circular harmonics +to optimizes the ambisonic sound field for several restitution systems. +; +#X text 9 88 There are 3 optimizations \, basic (no optimization) \, +maxre (energy vector optimization) and inphase (energy and velocity +vector optimization):, f 59; +#X text 558 605 Note that the optimizations decrease the precision +of the sound field restitution thus it can be compared to particular +cases of the fractional orders.; +#X text 9 138 The basic optimization has no effect \, it should be +used (or not) with a perfect ambisonic channels arrangement where all +the channels are to equal distance on a circle or a sphere \, and for +a listener placed at the perfect center of the circle of the sphere. +This is also the prefered optimization for diffuse artistic sound field. +, f 59; +#X text 9 241 The maxre should be used should be used for an auditory +confined to the center of the circle of loudspeakers., f 59; +#X text 9 292 The inphase optimization should be used when the auditory +covers the entire channels area and/or when the channels arrangement +is not a perfect circle (when the channels are not to equal distance +for example)., f 59; +#X text 9 416 The optimization can be combined. The basic optimization +can be applied to the granular diffuse part of the sound field while +the inphase optimization is applied to the directional point sources +part of the sound field.; +#X text 9 479 At last \, the sound field can be split in two or three +frequency ranges \, on which different optimizations are applied. The +inphase optimization below 700 hz and the basic optimization above. +This approach \, that Daniel defines as psychoacoustic in its PhD thesis +\, is presented by Gerzon in the General Methatheory of Auditory Localization +\, 1992; +#X text 9 217 Y'[l \, m] = Y[l \, m], f 59; +#X text 9 268 Y'[l \, m] = cos(πl/(2N+2))Y[l \, m], f 59; +#X text 9 345 Y'[l \, m] = Y[l \, m](N!^2)/((N+l)!(N-l)!), f 60; +#X text 9 365 with N the order of decomposition \, l the degree \, +m the azimuthal order., f 60; +#X text 729 187 Representation of the weighted sum of the circular +harmonics over a disc before the optimization., f 27; +#X text 739 485 Representation of the weighted sum of the circular +harmonics over a disc after the optimization., f 27; +#X text 557 330 The first argument is the order of decomposition N. +, f 25; +#X text 557 360 The second argument is the name of the optimization. +, f 25; +#X obj 398 65 *~, f 13; +#X obj 398 43 phasor~ 101; +#X obj 473 43 phasor~ 203; +#X obj 398 91 ui.gain~ @size 120 15 @receive "(null)" @send "(null)" +@pinned 0 @presetname "ui.gain~.0" @background_color 0.93 0.93 0.93 +1 @border_color 0.6 0.6 0.6 1 @label_color 0 0 0 1 @knob_color 0 0.75 +1 1 @fontname "Helvetica" @fontweight "normal" @fontslant "roman" @fontsize +11 @label "(null)" @label_inner 0 @label_side "top" @label_align "left" +@label_valign "top" @label_margins 0 0 @max 0 @min -60 @output_value +0 @show_range 1; +#X obj 539 91 phase->rad~; +#X obj 552 120 ui.number~ @size 80 15 @receive "(null)" @send "(null)" +@pinned 0 @background_color 0.3 0.3 0.3 1 @border_color 0 0 0 1 @label_color +0 0 0 1 @text_color 0.9 0.9 0.9 1 @active_color 0 0.75 1 1 @fontname +"Helvetica" @fontweight "normal" @fontslant "roman" @fontsize 11 @label +"(null)" @label_inner 0 @label_side "top" @label_align "left" @label_valign +"top" @label_margins 0 0 @decimal 6 @interval 50; +#X obj 12 619 hoa.credits; +#X obj 398 621 xdac~ 1:8, f 24; +#X obj 311 577 ui.dsp~ @size 62 62 @receive "(null)" @send "(null)" +@pinned 0 @background_color 0.93 0.93 0.93 1 @border_color 0.6 0.6 +0.6 1 @label_color 0 0 0 1 @active_color 0 0.75 1 1 @fontname "Helvetica" +@fontweight "normal" @fontslant "roman" @fontsize 11 @label "(null)" +@label_inner 0 @label_side "top" @label_align "left" @label_valign +"top" @label_margins 0 0; +#X obj 559 173 hoa.scope~ @size 147 147 @receive "(null)" @send "(null)" +@pinned 0 @background_color 0.93 0.93 0.93 1 @border_color 0.6 0.6 +0.6 1 @label_color 0 0 0 1 @ph_color 1 0 0 1 @nh_color 0 0 1 1 @fontname +"Helvetica" @fontweight "normal" @fontslant "roman" @fontsize 11 @label +"(null)" @label_inner 0 @label_side "top" @label_align "left" @label_valign +"top" @label_margins 0 0 @gain 4 @refresh 35 @order 3 @view 0; +#X obj 559 423 hoa.scope~ @size 147 147 @receive "(null)" @send "(null)" +@pinned 0 @background_color 0.93 0.93 0.93 1 @border_color 0.6 0.6 +0.6 1 @label_color 0 0 0 1 @ph_color 1 0 0 1 @nh_color 0 0 1 1 @fontname +"Helvetica" @fontweight "normal" @fontslant "roman" @fontsize 11 @label +"(null)" @label_inner 0 @label_side "top" @label_align "left" @label_valign +"top" @label_margins 0 0 @gain 4 @refresh 35 @order 3 @view 0; +#X obj 729 277 ui.tab @size 166 15 @receive "(null)" @send "(null)" +@pinned 0 @presetname "ui.tab.2" @background_color 0.93 0.93 0.93 1 +@border_color 0.6 0.6 0.6 1 @label_color 0 0 0 1 @text_color 0 0 0 +1 @active_color 0 0.75 1 1 @hover_color 0.5 0.5 0.5 1 @fontname "Helvetica" +@fontweight "normal" @fontslant "roman" @fontsize 11 @label "(null)" +@label_inner 0 @label_side "top" @label_align "left" @label_valign +"top" @label_margins 0 0 @orientation 0 @toggle 0 @items "basic" "maxre" +"inphase"; +#X msg 729 299 @mode \$2; +#X connect 0 0 5 0; +#X connect 0 0 32 0; +#X connect 0 1 5 1; +#X connect 0 1 32 1; +#X connect 0 2 5 2; +#X connect 0 2 32 2; +#X connect 0 3 5 3; +#X connect 0 3 32 3; +#X connect 0 4 5 4; +#X connect 0 4 32 4; +#X connect 0 5 5 5; +#X connect 0 5 32 5; +#X connect 0 6 5 6; +#X connect 0 6 32 6; +#X connect 2 0 30 0; +#X connect 2 1 30 1; +#X connect 2 2 30 2; +#X connect 2 3 30 3; +#X connect 2 4 30 4; +#X connect 2 5 30 5; +#X connect 2 6 30 6; +#X connect 2 7 30 7; +#X connect 4 0 27 0; +#X connect 5 0 2 0; +#X connect 5 0 33 0; +#X connect 5 1 2 1; +#X connect 5 1 33 1; +#X connect 5 2 2 2; +#X connect 5 2 33 2; +#X connect 5 3 2 3; +#X connect 5 3 33 3; +#X connect 5 4 2 4; +#X connect 5 4 33 4; +#X connect 5 5 2 5; +#X connect 5 5 33 5; +#X connect 5 6 2 6; +#X connect 5 6 33 6; +#X connect 23 0 26 0; +#X connect 24 0 23 0; +#X connect 25 0 23 1; +#X connect 26 0 0 0; +#X connect 27 0 0 1; +#X connect 27 0 28 0; +#X connect 34 0 35 0; +#X connect 35 0 5 0; +#X coords 0 689 1 688 100 60 0; diff --git a/ceammc/ext/doc/hoa/hoa.2d.process~-help.pd b/ceammc/ext/doc/hoa/hoa.2d.process~-help.pd new file mode 100644 index 0000000000..ed5e12c3a8 --- /dev/null +++ b/ceammc/ext/doc/hoa/hoa.2d.process~-help.pd @@ -0,0 +1,60 @@ +#N canvas 169 26 901 661 10; +#X declare -path ..; +#X text 15 152 2nd argument is the name of the patcher to instantiate. +; +#X text 15 102 1st argument is the order if you use hoa.process~ in +the circular harmonics domain or the number of channels if you use +it in the plane waves domain.; +#X text 15 272 Extra arguments and attributes are sent to object hoa.this.process~ +if there is one inside the patcher. You should look at the help.; +#X text 15 322 The number of inlets and outlets depends on the inlet +and outlet configuration of the patcher. You should look at the help. +; +#X text 15 372 Important: If you edit the patcher \, you have recreate +hoa.process~ to reflect the changes.; +#X text 12 47 hoa.process~ helps the creation of processing in the +circular or spherical harmonics and plane waves domains by instantiating +several instances of a patcher.; +#X text 15 172 3rd argument is the domain \, harmonics (default) or +planewaves. Note that if you use hoa.process~ in the harmonics domain +\, it instantiates 2 * order + 1 times (the number of harmonics in +2D) or (order + 1) * (order + 1) (the number of harmonics in 3D) the +partcher and if you use it in the plane waves domain \, it instanctiates +the patcher as many times as the number of channels.; +#X text 439 349 The hoa.process~ use of this patch is an example made +to show how it works. You would prefer to look at the real uses of +hoa.process~.; +#X text 435 50 Open; +#X text 435 70 Use open message to open a specific instance :; +#X msg 436 94 open 1; +#X msg 497 94 open all; +#X text 433 153 Double-click open the 1st planewave intance \, or the +harmonic 0 instance.; +#X text 435 190 Target; +#X text 435 210 Use target message to route the message to a specific +instance :; +#X msg 439 245 target 1; +#X msg 510 245 target -2; +#X msg 581 245 target all; +#X obj 776 224 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -8 0 10 +-262144 -1 -1 42 256; +#X obj 12 424 declare -path ..; +#X obj 12 447 hoa.credits; +#X obj 92 447 hoa-help; +#X msg 745 249 open 1 -1; +#X obj 439 310 print outlet-1; +#X obj 754 310 print outlet-2; +#X obj 831 243 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 +-1 -1; +#X obj 436 123 hoa.process~ 4 hoa.proc.plwav.ex planewaves; +#X obj 439 281 hoa.process~ 3 hoa.proc.harmo.ex harmonics; +#X connect 10 0 26 0; +#X connect 11 0 26 0; +#X connect 15 0 27 0; +#X connect 16 0 27 0; +#X connect 17 0 27 0; +#X connect 18 0 27 8; +#X connect 22 0 27 0; +#X connect 25 0 27 9; +#X connect 27 7 23 0; +#X connect 27 8 24 0; diff --git a/ceammc/ext/doc/hoa/hoa.2d.txt b/ceammc/ext/doc/hoa/hoa.2d.txt new file mode 100644 index 0000000000..fbdc7a7ff3 --- /dev/null +++ b/ceammc/ext/doc/hoa/hoa.2d.txt @@ -0,0 +1,12 @@ +hoa.2d.decoder~-help.pd hoa.2d.decoder~ An ambisonic decoder.; +hoa.2d.encoder~-help.pd hoa.2d.encoder~ An ambisonic encoder.; +hoa.2d.map~-help.pd hoa.2d.map~ An ambisonic sources spatializer.; +hoa.2d.meter~-help.pd hoa.2d.meter~ A circular meter with sound field descriptor.; +hoa.2d.optim~-help.pd hoa.2d.optim~ An ambisonic sound field optimization.; +hoa.2d.projector~-help.pd hoa.2d.projector~ A plane waves decomposer from circular harmonics domain.; +hoa.2d.recomposer~-help.pd hoa.2d.recomposer~ A plane waves recomposer to circular harmonics domain.; +hoa.2d.rotate~-help.pd hoa.2d.rotate~ An ambisonic sound field rotation.; +hoa.2d.scope~-help.pd hoa.2d.scope~ An ambisonic harmonics visualizer.; +hoa.2d.space-help.pd hoa.2d.space A GUI to design plane waves domain.; +hoa.2d.wider~-help.pd hoa.2d.wider~ An ambisonic fractional orders simulator.; +hoa.2d.exchanger~-help.pd hoa.2d.exchanger~ An ambisonic standards exchanger.; \ No newline at end of file diff --git a/ceammc/ext/doc/hoa/hoa.2d.wider~-help.pd b/ceammc/ext/doc/hoa/hoa.2d.wider~-help.pd new file mode 100644 index 0000000000..6ebd2f0955 --- /dev/null +++ b/ceammc/ext/doc/hoa/hoa.2d.wider~-help.pd @@ -0,0 +1,160 @@ +#N canvas 150 41 762 490 10; +#X obj 313 78 hoa.2d.encoder~ 7, f 26; +#X obj 313 392 hoa.2d.decoder~ 7 regular 16; +#X obj 137 396 hoa-help; +#X obj 11 370 text define -k \$0-scope-attrs; +#A set gain 130 \; interval 150 \;; +#X obj 6 3 cnv 15 200 20 empty empty hoa.2d.wider~ 4 10 0 14 -233017 +-66577 0; +#X obj 313 177 hoa.2d.wider~ 7, f 28; +#X text 558 161 The factor of widening (between 0 and 1), f 23; +#X text 6 27 hoa.2d.wider~ simulates fractional orders of decomposition +to reduce the precision of the sound field. When the factor of widening +is 0 sound field \, only the first hamonic Y[0 \, 0] remains and the +sound field is omni directional. By increasing the factor of widening +toward 1 \, the other harmonics appears in a logarithmic way \, increasing +the precision of the sound field that becomes more and more directional +until all the harmonics appeared. The weight of the harmonics are defined +by:, f 46; +#X text 6 195 with N the order of decomposition \, l the degree \, +m the azimuthal order and x the factor of widening., f 46; +#X text 6 181 W[l \, m](x) = x^l((1-x)(N-l)+1), f 46; +#X text 6 245 The (new) algorithm has the advantage to preserve a constant +amplitude for the sound field whatever the factor of widening., f +46; +#N canvas 0 23 450 300 source~ 0; +#X obj 29 203 *~, f 19; +#X obj 29 169 *~, f 9; +#X obj 80 140 *~, f 10; +#X obj 29 225 outlet~; +#X obj 29 16 phasor~ 234; +#X obj 29 37 lop~ 800; +#X obj 80 57 phasor~ 460; +#X obj 80 78 lop~ 1200; +#X obj 137 119 max~ 0.5; +#X obj 140 157 osc~ 7; +#X obj 140 179 max~ 0.15; +#X obj 137 97 osc~ 4; +#X connect 0 0 3 0; +#X connect 1 0 0 0; +#X connect 2 0 1 1; +#X connect 4 0 5 0; +#X connect 5 0 1 0; +#X connect 6 0 7 0; +#X connect 7 0 2 0; +#X connect 8 0 2 1; +#X connect 9 0 10 0; +#X connect 10 0 0 1; +#X connect 11 0 8 0; +#X restore 313 19 pd source~; +#N canvas 0 22 450 300 init 0; +#X obj 21 37 loadbang; +#X msg 21 59 0.666; +#X obj 21 81 s \$0-wfac; +#X connect 0 0 1 0; +#X connect 1 0 2 0; +#X restore 11 344 pd init; +#X obj 478 78 osc~ 0.025; +#X obj 466 24 phasor~ 0.2; +#X obj 478 123 +~ 0.5; +#X obj 478 145 clip~ 0 1; +#X obj 478 100 *~ 0.75; +#X obj 313 51 ui.gain~ @size 120 15 @receive "(null)" @send "(null)" +@pinned 0 @presetname "ui.gain~.0" @background_color 0.93 0.93 0.93 +1 @border_color 0.6 0.6 0.6 1 @label_color 0 0 0 1 @knob_color 0 0.75 +1 1 @fontname "Helvetica" @fontweight "normal" @fontslant "roman" @fontsize +11 @label "(null)" @label_inner 0 @label_side "top" @label_align "left" +@label_valign "top" @label_margins 0 0 @max 0 @min -60 @output_value +0 @show_range 1; +#X obj 205 357 ui.dsp~ @size 30 30 @receive "(null)" @send "(null)" +@pinned 0 @background_color 0.93 0.93 0.93 1 @border_color 0.6 0.6 +0.6 1 @label_color 0 0 0 1 @active_color 0 0.75 1 1 @fontname "Helvetica" +@fontweight "normal" @fontslant "roman" @fontsize 11 @label "(null)" +@label_inner 0 @label_side "top" @label_align "left" @label_valign +"top" @label_margins 0 0; +#X obj 466 52 phase->rad~; +#X obj 499 175 ui.number~ @size 58 15 @receive "(null)" @send "(null)" +@pinned 0 @background_color 0.3 0.3 0.3 1 @border_color 0 0 0 1 @label_color +0 0 0 1 @text_color 0.9 0.9 0.9 1 @active_color 0 0.75 1 1 @fontname +"Helvetica" @fontweight "normal" @fontslant "roman" @fontsize 11 @label +"(null)" @label_inner 0 @label_side "top" @label_align "left" @label_valign +"top" @label_margins 0 0 @decimal 6 @interval 50; +#X obj 322 206 hoa.scope~ @size 172 172 @receive "(null)" @send "(null)" +@pinned 0 @background_color 0.93 0.93 0.93 1 @border_color 0.6 0.6 +0.6 1 @label_color 0 0 0 1 @ph_color 1 0 0 1 @nh_color 0 0 1 1 @fontname +"Helvetica" @fontweight "normal" @fontslant "roman" @fontsize 11 @label +"(null)" @label_inner 0 @label_side "top" @label_align "left" @label_valign +"top" @label_margins 0 0 @gain 1 @refresh 100 @order 7 @view 0; +#X obj 313 422 xdac~ 1:16, f 28; +#X obj 10 396 hoa.credits; +#X connect 0 0 5 0; +#X connect 0 1 5 1; +#X connect 0 2 5 2; +#X connect 0 3 5 3; +#X connect 0 4 5 4; +#X connect 0 5 5 5; +#X connect 0 6 5 6; +#X connect 0 7 5 7; +#X connect 0 8 5 8; +#X connect 0 9 5 9; +#X connect 0 10 5 10; +#X connect 0 11 5 11; +#X connect 0 12 5 12; +#X connect 0 13 5 13; +#X connect 0 14 5 14; +#X connect 1 0 23 0; +#X connect 1 1 23 1; +#X connect 1 2 23 2; +#X connect 1 3 23 3; +#X connect 1 4 23 4; +#X connect 1 5 23 5; +#X connect 1 6 23 6; +#X connect 1 7 23 7; +#X connect 1 8 23 8; +#X connect 1 9 23 9; +#X connect 1 10 23 10; +#X connect 1 11 23 11; +#X connect 1 12 23 12; +#X connect 1 13 23 13; +#X connect 1 14 23 14; +#X connect 1 15 23 15; +#X connect 5 0 1 0; +#X connect 5 0 22 0; +#X connect 5 1 1 1; +#X connect 5 1 22 1; +#X connect 5 2 1 2; +#X connect 5 2 22 2; +#X connect 5 3 1 3; +#X connect 5 3 22 3; +#X connect 5 4 1 4; +#X connect 5 4 22 4; +#X connect 5 5 1 5; +#X connect 5 5 22 5; +#X connect 5 6 1 6; +#X connect 5 6 22 6; +#X connect 5 7 1 7; +#X connect 5 7 22 7; +#X connect 5 8 1 8; +#X connect 5 8 22 8; +#X connect 5 9 1 9; +#X connect 5 9 22 9; +#X connect 5 10 1 10; +#X connect 5 10 22 10; +#X connect 5 11 1 11; +#X connect 5 11 22 11; +#X connect 5 12 1 12; +#X connect 5 12 22 12; +#X connect 5 13 1 13; +#X connect 5 13 22 13; +#X connect 5 14 1 14; +#X connect 5 14 22 14; +#X connect 11 0 18 0; +#X connect 13 0 17 0; +#X connect 14 0 20 0; +#X connect 15 0 16 0; +#X connect 16 0 5 15; +#X connect 16 0 21 0; +#X connect 17 0 15 0; +#X connect 18 0 0 0; +#X connect 20 0 0 1; +#X coords 0 490 1 489 100 60 0; diff --git a/ceammc/ext/doc/hoa/hoa.3d.txt b/ceammc/ext/doc/hoa/hoa.3d.txt new file mode 100644 index 0000000000..2414bef019 --- /dev/null +++ b/ceammc/ext/doc/hoa/hoa.3d.txt @@ -0,0 +1,8 @@ +hoa.3d.decoder~-help.pd hoa.3d.decoder~ An ambisonic decoder.; +hoa.3d.encoder~-help.pd hoa.3d.encoder~ An ambisonic encoder.; +hoa.3d.map~-help.pd hoa.3d.map~ An ambisonic sources spatializer.; +hoa.3d.meter~-help.pd hoa.3d.meter~ A multi spherical meter with sound field descriptor.; +hoa.3d.optim~-help.pd hoa.3d.optim~ An ambisonic sound field optimization.; +hoa.3d.wider~-help.pd hoa.3d.wider~ An ambisonic fractional orders simulator.; +hoa.3d.scope~-help.pd hoa.3d.scope~ An ambisonic harmonics visualizer.; +hoa.3d.exchanger~-help.pd hoa.3d.exchanger~ An ambisonic standards exchanger.; \ No newline at end of file diff --git a/ceammc/ext/doc/hoa/hoa.common.txt b/ceammc/ext/doc/hoa/hoa.common.txt new file mode 100644 index 0000000000..7fbfdb7ab8 --- /dev/null +++ b/ceammc/ext/doc/hoa/hoa.common.txt @@ -0,0 +1,6 @@ +hoa.dac~-help.pd hoa.dac~ A custom dac~ with matlab syntax.; +hoa.io-help.pd hoa.io A set of inlet and outlet for hoa.process.; +hoa.pi-help.pd hoa.pi A good pi number.; +hoa.pi~-help.pd hoa.pi~ A good pi number for signal.; +hoa.map-help.pd hoa.map A GUI to spatialize sources on a map.; +hoa.process~-help.pd hoa.process~ A multi-patcher for harmonics and plane waves domains.; diff --git a/ceammc/ext/doc/hoa/hoa.credits.pd b/ceammc/ext/doc/hoa/hoa.credits.pd new file mode 100644 index 0000000000..8b72925d34 --- /dev/null +++ b/ceammc/ext/doc/hoa/hoa.credits.pd @@ -0,0 +1,11 @@ +#N canvas 550 310 379 153 10; +#X text 14 13 HOA Library - CICM | Universite Paris 8 | Labex Arts +H2H; +#X text 14 126 http://www.mshparisnord.fr/hoalibrary/; +#X text 14 32 Authors:; +#X text 14 46 2012: P. Guillot \, E. Paris & J. Colafrancesco; +#X text 14 57 2012-2015 : P. Guillot & E. Paris; +#X text 14 69 2015 : P. Guillot \, E. Paris & T. Le Meur; +#X text 14 82 2016 : P. Guillot & E. Paris; +#X text 14 102 Pure Data implementation:; +#X text 14 115 2013-2016: P. Guillot \, E. Paris & T. Le Meur; diff --git a/ceammc/ext/doc/hoa/hoa.fx.2d.decoder~.pd b/ceammc/ext/doc/hoa/hoa.fx.2d.decoder~.pd new file mode 100755 index 0000000000..bc10931ccb --- /dev/null +++ b/ceammc/ext/doc/hoa/hoa.fx.2d.decoder~.pd @@ -0,0 +1,104 @@ +#N canvas 302 187 833 474 10; +#X obj 218 426 c.canvasmess; +#X obj 218 210 until; +#X obj 218 287 * 20; +#X obj 249 238 + 1; +#X obj 218 238 f 0; +#X obj 257 288 + 1; +#X obj 218 20 c.loadmess; +#X obj 218 65 unpack f f f, f 13; +#X obj 337 322 makefilename \$0-%d; +#X obj 218 189 f; +#X obj 544 382 send, f 5; +#X obj 544 291 /; +#X obj 631 339 makefilename \$0-%d; +#X obj 544 214 t f f, f 15; +#X obj 571 338 hoa.pi 2; +#X obj 544 359 *, f 5; +#X obj 544 314 t f b; +#X obj 544 160 until; +#X obj 575 188 + 1; +#X obj 544 188 f 0; +#X obj 544 132 f; +#X obj 218 262 t f f, f 6; +#X obj 631 318 + 1; +#X obj 218 350 pack f f f s f, f 27; +#X obj 377 214 + 1; +#X obj 377 242 t b f; +#X obj 377 264 f 1; +#X obj 377 286 /, f 5; +#X obj 412 35 hoa.in; +#X msg 218 396 obj 0 \$1 hoa.pw.2d.dec~ \$2 \$3 \$4 \$5; +#X obj 233 167 r \$0-nls; +#X obj 559 109 r \$0-nls; +#X obj 559 268 r \$0-nls; +#X obj 218 97 t b f f; +#N canvas 0 22 450 300 nls 0; +#X obj 95 142 f; +#X obj 95 175 s \$0-nls; +#X obj 77 49 == -1; +#X obj 110 14 inlet; +#X obj 28 14 inlet; +#X obj 28 42 t b f; +#X obj 55 93 * 2; +#X obj 55 116 + 2; +#X obj 55 72 spigot; +#X connect 0 0 1 0; +#X connect 2 0 8 1; +#X connect 3 0 0 1; +#X connect 3 0 2 0; +#X connect 4 0 5 0; +#X connect 5 0 0 0; +#X connect 5 1 8 0; +#X connect 6 0 7 0; +#X connect 7 0 0 1; +#X connect 8 0 6 0; +#X restore 257 125 pd nls; +#X obj 218 40 hoa.thisprocess~ -1; +#X obj 412 67 sel done; +#X connect 1 0 4 0; +#X connect 2 0 23 0; +#X connect 3 0 4 1; +#X connect 4 0 3 0; +#X connect 4 0 21 0; +#X connect 5 0 8 0; +#X connect 5 0 23 1; +#X connect 6 0 35 0; +#X connect 7 0 33 0; +#X connect 7 2 23 2; +#X connect 8 0 23 3; +#X connect 9 0 1 0; +#X connect 11 0 16 0; +#X connect 12 0 10 1; +#X connect 13 0 11 0; +#X connect 13 1 22 0; +#X connect 14 0 15 1; +#X connect 15 0 10 0; +#X connect 16 0 15 0; +#X connect 16 1 14 0; +#X connect 17 0 19 0; +#X connect 18 0 19 1; +#X connect 19 0 18 0; +#X connect 19 0 13 0; +#X connect 20 0 17 0; +#X connect 21 0 2 0; +#X connect 21 1 5 0; +#X connect 22 0 12 0; +#X connect 23 0 29 0; +#X connect 24 0 25 0; +#X connect 25 0 26 0; +#X connect 25 1 27 1; +#X connect 26 0 27 0; +#X connect 27 0 23 4; +#X connect 28 0 36 0; +#X connect 29 0 0 0; +#X connect 30 0 9 1; +#X connect 31 0 20 1; +#X connect 32 0 11 1; +#X connect 33 0 9 0; +#X connect 33 1 24 0; +#X connect 33 2 34 0; +#X connect 35 0 7 0; +#X connect 35 2 34 1; +#X connect 35 3 36 0; +#X connect 36 0 20 0; diff --git a/ceammc/ext/doc/hoa/hoa.fx.2d.rotate~.pd b/ceammc/ext/doc/hoa/hoa.fx.2d.rotate~.pd new file mode 100644 index 0000000000..66185868ff --- /dev/null +++ b/ceammc/ext/doc/hoa/hoa.fx.2d.rotate~.pd @@ -0,0 +1,102 @@ +#N canvas 383 103 812 640 10; +#X obj 453 226 hoa.in~ extra 1; +#X obj 271 569 hoa.out~; +#X obj 441 35 hoa.thisprocess~; +#X obj 441 59 unpack, f 13; +#X obj 261 107 s~ h\$0; +#X obj 453 368 cos~; +#X obj 453 336 *~, f 11; +#X obj 336 114 < 0; +#X obj 376 232 f; +#X obj 336 232 f; +#X obj 336 281 makefilename h%d; +#X obj 336 135 sel 1, f 6; +#X obj 376 114 > 0; +#X obj 376 135 sel 1, f 6; +#X obj 271 399 *~; +#X obj 336 400 *~; +#X obj 271 451 +~; +#X obj 321 451 -~; +#X obj 271 534 *~; +#X obj 321 534 *~; +#X obj 261 62 hoa.in~; +#X obj 271 358 r~ h\$0; +#X obj 336 255 + 1; +#X obj 376 255 - 1; +#X obj 336 358 r~ dummy\$0; +#X obj 179 62 s~ dummy\$0; +#X obj 441 116 ==; +#X obj 441 135 sel 1; +#X obj 336 90 f; +#X obj 441 159 s hrloaded; +#X obj 336 64 r hrloaded; +#X obj 361 438 hoa.thisprocess~; +#X obj 361 462 unpack; +#X obj 286 506 >= 0; +#X obj 336 506 < 0; +#X obj 468 280 hoa.pi 2; +#X obj 453 307 /~; +#X obj 468 252 loadbang; +#X obj 361 412 loadbang; +#X obj 441 10 loadbang; +#X obj 351 193 f \$0; +#X obj 351 165 loadbang; +#X obj 336 330 list trim; +#X obj 336 308 list prepend set; +#X obj 537 420 cos~; +#X obj 537 400 +~; +#X obj 552 325 loadbang; +#X obj 552 347 f 0.25; +#X connect 0 0 36 0; +#X connect 2 0 3 0; +#X connect 3 0 26 0; +#X connect 3 1 26 1; +#X connect 3 1 28 1; +#X connect 3 1 6 1; +#X connect 5 0 14 1; +#X connect 6 0 5 0; +#X connect 6 0 45 0; +#X connect 7 0 11 0; +#X connect 8 0 23 0; +#X connect 9 0 22 0; +#X connect 10 0 43 0; +#X connect 11 0 9 0; +#X connect 12 0 13 0; +#X connect 13 0 8 0; +#X connect 14 0 16 0; +#X connect 14 0 17 0; +#X connect 15 0 16 1; +#X connect 15 0 17 1; +#X connect 16 0 18 0; +#X connect 17 0 19 0; +#X connect 18 0 1 0; +#X connect 19 0 1 0; +#X connect 20 0 4 0; +#X connect 21 0 14 0; +#X connect 22 0 10 0; +#X connect 23 0 10 0; +#X connect 24 0 15 0; +#X connect 26 0 27 0; +#X connect 27 0 29 0; +#X connect 28 0 7 0; +#X connect 28 0 12 0; +#X connect 30 0 28 0; +#X connect 31 0 32 0; +#X connect 32 1 33 0; +#X connect 32 1 34 0; +#X connect 33 0 18 1; +#X connect 34 0 19 1; +#X connect 35 0 36 1; +#X connect 36 0 6 0; +#X connect 37 0 35 0; +#X connect 38 0 31 0; +#X connect 39 0 2 0; +#X connect 40 0 8 1; +#X connect 40 0 9 1; +#X connect 41 0 40 0; +#X connect 42 0 24 0; +#X connect 43 0 42 0; +#X connect 44 0 15 1; +#X connect 45 0 44 0; +#X connect 46 0 47 0; +#X connect 47 0 45 1; diff --git a/ceammc/ext/doc/hoa/hoa.fx.convolve~-help.pd b/ceammc/ext/doc/hoa/hoa.fx.convolve~-help.pd new file mode 100644 index 0000000000..183efbbd16 --- /dev/null +++ b/ceammc/ext/doc/hoa/hoa.fx.convolve~-help.pd @@ -0,0 +1,129 @@ +#N canvas 109 96 797 672 10; +#X msg 16 344 \; pd dsp 1; +#X msg 16 379 \; pd dsp 0; +#X obj 113 137 c.gain~ @size 131 10 @fontname "Helvetica" @fontweight +"normal" @fontslant "roman" @fontsize 11 @receive "(null)" @send "(null)" +@presetname "(null)" @mode 0 @ramp 20 @bgcolor 0.75 0.75 0.75 1 @bdcolor +0.5 0.5 0.5 1 @kncolor 0.5 0.5 0.5 1; +#X obj 574 35 hoa.connect; +#X obj 574 15 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 +-1; +#X obj 2 24 c.patcherinfos; +#X obj 2 7 loadbang; +#X obj 2 7 hoa.help.header; +#X obj 67 619 hoa.help.pub; +#X obj 418 7 hoa.help.also; +#X obj 113 328 hoa.2d.scope~ @size 189 189 @fontname "Helvetica" @fontweight +"normal" @fontslant "roman" @fontsize 11 @receive "(null)" @send "(null)" +@order 3 @view 0 @gain 10 @interval 100 @bgcolor 0.76 0.76 0.76 1 @bdcolor +0.7 0.7 0.7 1 @phcolor 1 0 0 1 @nhcolor 0 0 1 1; +#X text 7 51 hoa.fx.convolve~ use the HiFi-Lofi convolution reverberation +; +#X obj 113 536 hoa.2d.decoder~ 3 ambisonics 8; +#X obj 113 568 hoa.dac~ 1:8 -----------------; +#X obj 113 155 hoa.2d.encoder~ 3 ---------; +#X obj 272 98 phasor~ 0.1; +#X obj 113 98 phasor~ 1; +#X obj 471 562 table \$0-ir; +#X obj 471 539 soundfiler; +#X obj 471 395 openpanel; +#X obj 471 456 pack s s; +#X obj 471 415 t s b; +#X obj 472 374 c.bang @size 17 17 @fontname "Helvetica" @fontweight +"normal" @fontslant "roman" @fontsize 11 @receive "(null)" @send "(null)" +@bgcolor 0.75 0.75 0.75 1 @bdcolor 0.5 0.5 0.5 1 @bacolor 0 0 0 1; +#X msg 471 478 read -resize \$1 \$2; +#X obj 516 434 symbol \$0-ir; +#X text 503 372 load an ir; +#X obj 339 182 c.number @size 53 17 @fontname "Helvetica" @fontweight +"normal" @fontslant "roman" @fontsize 11 @receive "(null)" @send "(null)" +@presetname "(null)" @min 0 @max 1 @minmax 0 1 @decimal 6 @bgcolor +0.75 0.75 0.75 1 @bdcolor 0.5 0.5 0.5 1 @textcolor 0 0 0 1; +#X obj 338 161 c.loadmess 0; +#X obj 429 182 c.number @size 53 17 @fontname "Helvetica" @fontweight +"normal" @fontslant "roman" @fontsize 11 @receive "(null)" @send "(null)" +@presetname "(null)" @min 0 @max 1 @minmax 0 1 @decimal 6 @bgcolor +0.75 0.75 0.75 1 @bdcolor 0.5 0.5 0.5 1 @textcolor 0 0 0 1; +#X msg 429 206 wet \$1; +#X obj 428 161 c.loadmess 1; +#X msg 339 206 dry \$1; +#X obj 517 183 symbol \$0-ir; +#X obj 272 124 hoa.pi~ 2; +#X obj 517 155 c.bang @size 17 17 @fontname "Helvetica" @fontweight +"normal" @fontslant "roman" @fontsize 11 @receive "(null)" @send "(null)" +@bgcolor 0.75 0.75 0.75 1 @bdcolor 0.5 0.5 0.5 1 @bacolor 0 0 0 1; +#X text 312 290 Attrs : wet \, dry and normalization; +#X text 312 278 Arg : table name; +#X obj 113 272 hoa.2d.process~ 3 hoa.fx.convolve~ harmonics \$0-ir +@wet 1 @dry 0, f 31; +#X text 408 75 For the moment \, the convolution is not optimized enough. +; +#X text 408 85 You shouldn't use big irs or and high orders.; +#X text 408 95 The process patch is very simple but you can use; +#X text 408 105 a different ir for each harmonics to decorrelate them. +; +#X text 408 115 You can also use it in the planewave domain.; +#X msg 627 211 target \$1; +#X obj 629 180 c.menu @size 40 17 @fontname "Helvetica" @fontweight +"normal" @fontslant "roman" @fontsize 11 @receive "(null)" @send "(null)" +@presetname "(null)" @hover 0 @items "all" "-1" "1" "-2" "2" "-3" "3" +@states 0 0 0 0 0 0 0 @bgcolor 0.75 0.75 0.75 1 @bdcolor 0.5 0.5 0.5 +1 @textcolor 0 0 0 1; +#X msg 517 210 set \$1; +#X obj 450 498 c.loadmess read -resize Cistern.wav \$0-ir; +#X connect 2 0 14 0; +#X connect 4 0 3 0; +#X connect 5 0 7 0; +#X connect 6 0 5 0; +#X connect 12 0 13 0; +#X connect 12 1 13 1; +#X connect 12 2 13 2; +#X connect 12 3 13 3; +#X connect 12 4 13 4; +#X connect 12 5 13 5; +#X connect 12 6 13 6; +#X connect 12 7 13 7; +#X connect 14 0 37 0; +#X connect 14 1 37 1; +#X connect 14 2 37 2; +#X connect 14 3 37 3; +#X connect 14 4 37 4; +#X connect 14 5 37 5; +#X connect 14 6 37 6; +#X connect 15 0 33 1; +#X connect 16 0 2 0; +#X connect 19 0 21 0; +#X connect 20 0 23 0; +#X connect 21 0 20 0; +#X connect 21 1 24 0; +#X connect 22 0 19 0; +#X connect 23 0 18 0; +#X connect 24 0 20 1; +#X connect 26 0 31 0; +#X connect 27 0 26 0; +#X connect 28 0 29 0; +#X connect 29 0 37 7; +#X connect 30 0 28 0; +#X connect 31 0 37 7; +#X connect 32 0 45 0; +#X connect 33 0 14 1; +#X connect 34 0 32 0; +#X connect 37 0 10 0; +#X connect 37 0 12 0; +#X connect 37 1 10 1; +#X connect 37 1 12 1; +#X connect 37 2 10 2; +#X connect 37 2 12 2; +#X connect 37 3 10 3; +#X connect 37 3 12 3; +#X connect 37 4 10 4; +#X connect 37 4 12 4; +#X connect 37 5 10 5; +#X connect 37 5 12 5; +#X connect 37 6 10 6; +#X connect 37 6 12 6; +#X connect 43 0 37 7; +#X connect 44 1 43 0; +#X connect 45 0 37 7; +#X connect 46 0 18 0; +#X coords 0 672 1 671 100 60 0; diff --git a/ceammc/ext/doc/hoa/hoa.fx.convolve~.pd b/ceammc/ext/doc/hoa/hoa.fx.convolve~.pd new file mode 100644 index 0000000000..84a1456e4c --- /dev/null +++ b/ceammc/ext/doc/hoa/hoa.fx.convolve~.pd @@ -0,0 +1,63 @@ +#N canvas 534 167 711 478 10; +#X obj 401 265 hoa.in~; +#X obj 401 448 hoa.out~; +#X obj 10 7 c.loadmess; +#X obj 454 265 hoa.in; +#X obj 401 357 c.convolve~ buffer 1; +#X obj 527 285 c.prepend set; +#X obj 117 97 hoa.mode.sel; +#X obj 10 127 hoa.args.map; +#X obj 17 159 + 1; +#X obj 18 183 / 1; +#X obj 18 227 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -8 0 10 +-262144 -1 -1 0 256; +#X obj 79 174 / 1; +#X obj 79 197 t b f; +#X obj 79 238 -; +#X msg 79 216 1; +#X obj 79 267 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -8 0 10 +-262144 -1 -1 0 256; +#X obj 292 336 line~; +#X obj 292 309 pack 0 20; +#X obj 331 286 line~; +#X obj 331 259 pack 0 20; +#X obj 403 397 *~; +#X obj 352 397 *~; +#X obj 302 65 hoa.in extra 1; +#X obj 10 41 hoa.thisprocess~ @wet 1 @dry 0 @normalize 1; +#X obj 527 245 c.prepend normalize; +#X obj 303 108 route dry wet set nomalize; +#X connect 0 0 4 0; +#X connect 0 0 21 0; +#X connect 2 0 23 0; +#X connect 3 0 4 0; +#X connect 4 0 20 0; +#X connect 5 0 4 0; +#X connect 6 0 7 1; +#X connect 7 0 9 1; +#X connect 7 0 11 1; +#X connect 7 1 8 0; +#X connect 7 1 11 0; +#X connect 8 0 9 0; +#X connect 9 0 10 0; +#X connect 11 0 12 0; +#X connect 12 0 14 0; +#X connect 12 1 13 1; +#X connect 13 0 15 0; +#X connect 14 0 13 0; +#X connect 16 0 21 1; +#X connect 17 0 16 0; +#X connect 18 0 20 1; +#X connect 19 0 18 0; +#X connect 20 0 1 0; +#X connect 21 0 1 0; +#X connect 22 0 25 0; +#X connect 23 0 7 0; +#X connect 23 1 6 0; +#X connect 23 2 5 0; +#X connect 23 3 25 0; +#X connect 24 0 4 0; +#X connect 25 0 17 0; +#X connect 25 1 19 0; +#X connect 25 2 5 0; +#X connect 25 3 24 0; diff --git a/ceammc/ext/doc/hoa/hoa.fx.delay2~.pd b/ceammc/ext/doc/hoa/hoa.fx.delay2~.pd new file mode 100644 index 0000000000..a6b2fcfe65 --- /dev/null +++ b/ceammc/ext/doc/hoa/hoa.fx.delay2~.pd @@ -0,0 +1,189 @@ +#N canvas 156 130 996 582 10; +#X obj 518 104 hoa.in~; +#X obj 172 512 hoa.out~; +#X obj 324 105 hoa.in extra 1; +#X obj 734 361 table \$0-hoa_hann1 512; +#X obj 735 160 / 256; +#X obj 735 205 * 1; +#X obj 735 259 * 0.5; +#X obj 735 231 sin; +#X obj 735 283 + 0.5; +#X obj 735 132 t f f; +#X obj 735 311 pack; +#X obj 735 181 - 0.5; +#X obj 735 44 t b b; +#X obj 735 88 until; +#X obj 735 109 f; +#X obj 762 110 + 1; +#X msg 735 67 512; +#X obj 735 335 tabwrite \$0-hoa_hann1; +#X text 348 4 This hoa.processing diffuses a sound field with delay +lines.; +#X obj 74 139 hoa.mode.sel; +#X obj 7 165 hoa.args.map; +#X obj 76 189 + 1; +#X obj 76 224 / 1; +#X text 79 274 factor; +#X text 75 264 instance; +#X obj 76 244 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -8 0 10 +-262144 -1 -1 0 256; +#X obj 7 194 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -8 0 10 +-262144 -1 -1 0 256; +#X text 6 214 number of; +#X text 3 224 instances; +#X obj 518 127 delwrite~ \$0-hoa.delay 5000; +#X obj 344 343 * 1; +#X obj 354 300 t b f; +#X text 529 428 list : The item is selected depending on the instance +and directly set the delay time of the instance (mostly used in the +plane waves domain).; +#N canvas 671 289 471 383 delay_noflange 0; +#X obj 307 81 f; +#X obj 125 146 *~ 513; +#X obj 125 174 tabread4~ \$0-hoa_hann1; +#X obj 110 225 *~; +#X obj 306 225 *~; +#X obj 110 81 f; +#X obj 321 174 tabread4~ \$0-hoa_hann1; +#X obj 321 125 wrap~; +#X obj 321 104 +~ 0.5; +#X obj 321 146 *~ 513; +#X obj 307 205 delread~ \$0-hoa.delay 1; +#X obj 110 205 delread~ \$0-hoa.delay 1; +#X obj 152 59 phasor~ 0.5; +#N canvas 675 155 455 335 sel~ 0; +#X obj 92 141 samphold~; +#X obj 92 165 snapshot~; +#X obj 92 187 change; +#X obj 92 209 < 126; +#X obj 92 233 sel 0 1; +#X obj 38 59 inlet~; +#X obj 108 49 inlet~; +#X obj 92 261 outlet; +#X obj 153 261 outlet; +#X obj 155 232 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -8 0 10 +-262144 -1 -1 0 256; +#X obj 73 109 metro 5; +#X obj 73 20 msg.onload 1; +#X connect 0 0 1 0; +#X connect 1 0 2 0; +#X connect 2 0 3 0; +#X connect 2 0 9 0; +#X connect 3 0 4 0; +#X connect 4 0 8 0; +#X connect 4 1 7 0; +#X connect 5 0 0 0; +#X connect 5 0 0 1; +#X connect 6 0 0 1; +#X connect 10 0 1 0; +#X connect 11 0 10 0; +#X restore 253 228 pd sel~; +#X obj 192 293 outlet~; +#X obj 125 19 inlet; +#X obj 85 19 inlet; +#X connect 0 0 10 0; +#X connect 1 0 2 0; +#X connect 1 0 13 0; +#X connect 2 0 3 1; +#X connect 3 0 14 0; +#X connect 4 0 14 0; +#X connect 5 0 11 0; +#X connect 6 0 4 1; +#X connect 7 0 9 0; +#X connect 8 0 7 0; +#X connect 9 0 6 0; +#X connect 9 0 13 1; +#X connect 10 0 4 0; +#X connect 11 0 3 0; +#X connect 12 0 1 0; +#X connect 12 0 8 0; +#X connect 13 0 5 0; +#X connect 13 1 0 0; +#X connect 15 0 5 1; +#X connect 15 0 0 1; +#X connect 16 0 5 0; +#X connect 16 0 0 0; +#X restore 172 489 pd delay_noflange; +#X obj 7 116 hoa.thisprocess~ @delay 1000 @diffusion 0; +#X obj 324 441 spigot 1; +#X obj 271 443 sel 0; +#X obj 271 464 f 0; +#X obj 253 369 <, f 5; +#X obj 280 343 f 1; +#X obj 253 316 t f b; +#X obj 324 415 f; +#X obj 253 392 t f b f; +#X obj 735 20 msg.onload; +#X obj 781 181 math.pi; +#X obj 7 9 msg.onload; +#X obj 349 31 prop.declare delay @f @default 1000 @min 10; +#X obj 115 439 prop @delay; +#X obj 348 55 prop.declare diffusion @default @min 0 @max 1; +#X obj 430 210 prop @diffusion; +#X obj 430 232 expr 1 - $f1; +#X obj 324 127 route float list @diffusion; +#X obj 377 152 list.at; +#X obj 7 31 patch.args; +#X obj 7 53 list.at 3 2; +#X obj 7 74 expr ($f1+1)/$f2; +#X obj 125 48 list.at 3; +#X text 529 488 float : The delay time are mapped depending on the +instance and increase while the index and the band of the harmonics +increase.; +#X connect 0 0 29 0; +#X connect 2 0 51 0; +#X connect 4 0 11 0; +#X connect 5 0 7 0; +#X connect 6 0 8 0; +#X connect 7 0 6 0; +#X connect 8 0 10 0; +#X connect 9 0 4 0; +#X connect 9 1 10 1; +#X connect 10 0 17 0; +#X connect 11 0 5 0; +#X connect 12 0 16 0; +#X connect 12 1 44 0; +#X connect 13 0 14 0; +#X connect 14 0 15 0; +#X connect 14 0 9 0; +#X connect 15 0 14 1; +#X connect 16 0 13 0; +#X connect 19 0 20 1; +#X connect 20 0 26 0; +#X connect 20 0 22 1; +#X connect 20 1 21 0; +#X connect 21 0 22 0; +#X connect 22 0 25 0; +#X connect 25 0 31 0; +#X connect 25 0 39 1; +#X connect 30 0 41 0; +#X connect 31 0 30 0; +#X connect 31 1 30 1; +#X connect 33 0 1 0; +#X connect 34 0 20 0; +#X connect 34 1 19 0; +#X connect 35 0 33 1; +#X connect 36 0 37 0; +#X connect 37 0 33 1; +#X connect 38 0 42 0; +#X connect 39 0 38 1; +#X connect 40 0 38 0; +#X connect 40 1 39 0; +#X connect 41 0 35 0; +#X connect 42 0 36 0; +#X connect 42 1 41 0; +#X connect 42 2 35 1; +#X connect 43 0 12 0; +#X connect 44 0 5 1; +#X connect 45 0 53 0; +#X connect 47 0 33 0; +#X connect 49 0 50 0; +#X connect 50 0 40 0; +#X connect 51 0 30 0; +#X connect 51 1 52 0; +#X connect 51 2 49 0; +#X connect 52 0 41 0; +#X connect 53 0 54 0; +#X connect 53 0 56 0; +#X connect 54 0 55 0; +#X connect 56 0 52 1; diff --git a/ceammc/ext/doc/hoa/hoa.fx.dephaser~-help.pd b/ceammc/ext/doc/hoa/hoa.fx.dephaser~-help.pd new file mode 100644 index 0000000000..c347903fbe --- /dev/null +++ b/ceammc/ext/doc/hoa/hoa.fx.dephaser~-help.pd @@ -0,0 +1,152 @@ +#N canvas 794 108 410 637 10; +#X obj 24 141 hoa.3d.encoder~ 4, f 48; +#X obj 25 211 hoa.3d.scope~ @size 303 303 @fontname "Helvetica" @fontweight +"normal" @fontslant "roman" @fontsize 11 @receive "(null)" @send "(null)" +@order 4 @view 0 0 0 @gain 1 @interval 100 @bgcolor 0.76 0.76 0.76 +1 @bdcolor 0.7 0.7 0.7 1 @phcolor 1 0 0 1 @nhcolor 0 0 1 1; +#X obj 108 87 c.dsp~ @size 30 30 @fontname "Helvetica" @fontweight +"normal" @fontslant "roman" @fontsize 11 @receive "(null)" @send "(null)" +@bgcolor 0.75 0.75 0.75 1 @bdcolor 0.5 0.5 0.5 1 @logocolor 0 0.6 0 +0.8; +#X obj 321 162 c.number @size 59 14 @fontname "Helvetica" @fontweight +"normal" @fontslant "roman" @fontsize 11 @receive "(null)" @send "(null)" +@presetname "(null)" @min 0 @max 1 @minmax 0 1 @decimal 6 @bgcolor +0.75 0.75 0.75 1 @bdcolor 0.5 0.5 0.5 1 @textcolor 0 0 0 1; +#X obj 25 521 hoa.3d.decoder~ 4 @channels 16, f 50; +#X obj 25 548 hoa.dac~ 1:16, f 50; +#X obj 24 183 hoa.3d.process~ 4 hoa.fx.dephaser~ harmonics, f 50; +#X obj 24 118 osc~ 300; +#X obj 166 118 hoa.pi~ 2; +#X obj 216 96 phasor~ 0.5; +#X obj 216 77 c.number @size 53 14 @fontname "Helvetica" @fontweight +"normal" @fontslant "roman" @fontsize 11 @receive "(null)" @send "(null)" +@presetname "(null)" @min "(null)" @max "(null)" @minmax "(null)" "(null)" +@decimal 6 @bgcolor 0.75 0.75 0.75 1 @bdcolor 0.5 0.5 0.5 1 @textcolor +0 0 0 1; +#X obj 307 75 phasor~ 0.1; +#X obj 307 56 c.number @size 53 14 @fontname "Helvetica" @fontweight +"normal" @fontslant "roman" @fontsize 11 @receive "(null)" @send "(null)" +@presetname "(null)" @min "(null)" @max "(null)" @minmax "(null)" "(null)" +@decimal 6 @bgcolor 0.75 0.75 0.75 1 @bdcolor 0.5 0.5 0.5 1 @textcolor +0 0 0 1; +#X obj 308 119 hoa.pi~ 1; +#N canvas 65 122 540 300 triangle~ 0; +#X obj 229 118 outlet~; +#X obj 229 54 expr~ if($v1 > 0.5 \, 1-$v1 \, $v1); +#X obj 229 76 *~ 4; +#X obj 229 97 -~ 1; +#X obj 229 11 inlet~; +#X obj 229 32 phasor~ 0.5; +#X connect 1 0 2 0; +#X connect 2 0 3 0; +#X connect 3 0 0 0; +#X connect 4 0 5 0; +#X connect 5 0 1 0; +#X restore 308 97 pd triangle~; +#X obj 13 19 c.patcherinfos; +#X obj 18 2 loadbang; +#X obj 4 2 hoa.help.header; +#X obj 119 582 hoa.help.also; +#X text 3 46 hoa.fx.dephaser~ is a fft dephaser.; +#X connect 0 0 6 0; +#X connect 0 1 6 1; +#X connect 0 2 6 2; +#X connect 0 3 6 3; +#X connect 0 4 6 4; +#X connect 0 5 6 5; +#X connect 0 6 6 6; +#X connect 0 7 6 7; +#X connect 0 8 6 8; +#X connect 0 9 6 9; +#X connect 0 10 6 10; +#X connect 0 11 6 11; +#X connect 0 12 6 12; +#X connect 0 13 6 13; +#X connect 0 14 6 14; +#X connect 0 15 6 15; +#X connect 0 16 6 16; +#X connect 0 17 6 17; +#X connect 0 18 6 18; +#X connect 0 19 6 19; +#X connect 0 20 6 20; +#X connect 0 21 6 21; +#X connect 0 22 6 22; +#X connect 0 23 6 23; +#X connect 0 24 6 24; +#X connect 3 0 6 25; +#X connect 4 0 5 0; +#X connect 4 1 5 1; +#X connect 4 2 5 2; +#X connect 4 3 5 3; +#X connect 4 4 5 4; +#X connect 4 5 5 5; +#X connect 4 6 5 6; +#X connect 4 7 5 7; +#X connect 4 8 5 8; +#X connect 4 9 5 9; +#X connect 4 10 5 10; +#X connect 4 11 5 11; +#X connect 4 12 5 12; +#X connect 4 13 5 13; +#X connect 4 14 5 14; +#X connect 4 15 5 15; +#X connect 6 0 1 0; +#X connect 6 0 4 0; +#X connect 6 1 1 1; +#X connect 6 1 4 1; +#X connect 6 2 1 2; +#X connect 6 2 4 2; +#X connect 6 3 1 3; +#X connect 6 3 4 3; +#X connect 6 4 1 4; +#X connect 6 4 4 4; +#X connect 6 5 1 5; +#X connect 6 5 4 5; +#X connect 6 6 1 6; +#X connect 6 6 4 6; +#X connect 6 7 1 7; +#X connect 6 7 4 7; +#X connect 6 8 1 8; +#X connect 6 8 4 8; +#X connect 6 9 1 9; +#X connect 6 9 4 9; +#X connect 6 10 1 10; +#X connect 6 10 4 10; +#X connect 6 11 1 11; +#X connect 6 11 4 11; +#X connect 6 12 1 12; +#X connect 6 12 4 12; +#X connect 6 13 1 13; +#X connect 6 13 4 13; +#X connect 6 14 1 14; +#X connect 6 14 4 14; +#X connect 6 15 1 15; +#X connect 6 15 4 15; +#X connect 6 16 1 16; +#X connect 6 16 4 16; +#X connect 6 17 1 17; +#X connect 6 17 4 17; +#X connect 6 18 1 18; +#X connect 6 18 4 18; +#X connect 6 19 1 19; +#X connect 6 19 4 19; +#X connect 6 20 1 20; +#X connect 6 20 4 20; +#X connect 6 21 1 21; +#X connect 6 21 4 21; +#X connect 6 22 1 22; +#X connect 6 22 4 22; +#X connect 6 23 1 23; +#X connect 6 23 4 23; +#X connect 6 24 1 24; +#X connect 6 24 4 24; +#X connect 7 0 0 0; +#X connect 8 0 0 1; +#X connect 9 0 8 1; +#X connect 10 0 9 0; +#X connect 11 0 14 0; +#X connect 12 0 11 0; +#X connect 13 0 0 2; +#X connect 14 0 13 0; +#X connect 15 0 17 0; +#X connect 16 0 15 0; diff --git a/ceammc/ext/doc/hoa/hoa.fx.dephaser~.pd b/ceammc/ext/doc/hoa/hoa.fx.dephaser~.pd new file mode 100644 index 0000000000..49abe893c5 --- /dev/null +++ b/ceammc/ext/doc/hoa/hoa.fx.dephaser~.pd @@ -0,0 +1,344 @@ +#N canvas 316 502 461 294 10; +#X obj 158 25 hoa.in~; +#X obj 159 216 hoa.out~; +#N canvas 777 132 521 551 hoa.fft.dephaser~ 1; +#X obj 78 381 +~; +#X obj 365 283 * 1, f 7; +#X obj 377 194 /; +#X obj 377 149 t b f; +#X obj 377 259 t b f; +#X obj 110 166 / 1, f 5; +#X obj 110 141 t b f; +#X obj 95 190 * 1; +#X msg 95 214 \$1 20; +#X obj 95 237 line~; +#X obj 94 300 *~; +#X obj 109 279 hoa.pi 2; +#X msg 328 260 \$1 20; +#X obj 328 283 line~; +#X obj 328 324 *~; +#X obj 344 303 *~ 1; +#X obj 94 340 +~; +#N canvas 659 208 450 339 rand~ 0; +#X obj 140 20 inlet; +#X obj 140 269 outlet~; +#X obj 140 84 /; +#X obj 140 42 t b f; +#X obj 140 105 * 1000; +#X obj 140 148 metro; +#X obj 140 188 - 10000; +#X obj 140 168 random 20001; +#X obj 140 208 / 10000; +#X obj 140 249 line~; +#X obj 140 229 pack f f; +#X obj 140 126 t b f f, f 8; +#X obj 140 63 f 1; +#X connect 0 0 3 0; +#X connect 2 0 4 0; +#X connect 3 0 12 0; +#X connect 3 1 2 1; +#X connect 4 0 11 0; +#X connect 5 0 7 0; +#X connect 6 0 8 0; +#X connect 7 0 6 0; +#X connect 8 0 10 0; +#X connect 9 0 1 0; +#X connect 10 0 9 0; +#X connect 11 0 5 0; +#X connect 11 1 5 1; +#X connect 11 2 10 1; +#X connect 12 0 2 0; +#X restore 344 118 pd rand~; +#X obj 9 59 inlet~; +#X obj 8 507 outlet~; +#X obj 95 59 inlet; +#X obj 227 59 inlet; +#X obj 164 59 inlet; +#X obj 8 486 /~ 256; +#X obj 344 9 c.loadmess 256; +#X obj 344 96 /; +#X obj 344 54 t b f; +#X obj 365 238 hoa.pi 1; +#X obj 365 217 c.loadmess 1; +#X obj 109 258 c.loadmess 2; +#X obj 8 465 rifft~; +#N canvas 351 388 450 300 sampstoms 0; +#X obj 165 13 inlet; +#X obj 192 83 samplerate~; +#X obj 165 60 * 1000; +#X obj 165 105 /, f 5; +#X obj 165 37 t f b; +#X obj 165 127 outlet; +#X connect 0 0 4 0; +#X connect 1 0 3 1; +#X connect 2 0 3 0; +#X connect 3 0 5 0; +#X connect 4 0 2 0; +#X connect 4 1 1 0; +#X restore 344 31 pd sampstoms; +#X obj 344 75 f 1000; +#X obj 377 171 f 1; +#X obj 9 81 rfft~; +#X obj 253 457 block~ 256 2; +#N canvas 65 306 450 300 poltocar~ 0; +#X obj 122 43 inlet~; +#X obj 122 182 outlet~; +#X obj 227 182 outlet~; +#X obj 218 43 inlet~; +#X obj 138 140 cos~; +#X obj 122 161 *~; +#X obj 227 161 *~; +#X obj 218 110 /~; +#X obj 233 69 c.loadmess; +#X obj 233 90 hoa.pi 2; +#N canvas 121 324 450 300 sin~ 0; +#X obj 183 41 inlet~; +#X obj 183 128 cos~; +#X obj 183 175 outlet~; +#X obj 183 108 +~; +#X obj 198 67 c.loadmess -0.25; +#X connect 0 0 3 0; +#X connect 1 0 2 0; +#X connect 3 0 1 0; +#X connect 4 0 3 1; +#X restore 242 134 pd sin~; +#X connect 0 0 5 0; +#X connect 0 0 6 0; +#X connect 3 0 7 0; +#X connect 3 0 10 0; +#X connect 4 0 5 1; +#X connect 5 0 1 0; +#X connect 6 0 2 0; +#X connect 7 0 4 0; +#X connect 8 0 9 0; +#X connect 9 0 7 1; +#X connect 10 0 6 1; +#X restore 8 425 pd poltocar~; +#N canvas 878 227 450 349 cartopol~ 0; +#X obj 112 63 inlet~; +#X obj 125 192 outlet~; +#X obj 249 192 outlet~; +#X obj 167 63 inlet~; +#X obj 125 171 sqrt~; +#X obj 160 123 *~; +#X obj 105 122 *~; +#X obj 125 150 +~; +#N canvas 190 22 883 709 atan2~ 0; +#X obj 397 22 inlet~; +#X obj 265 21 inlet~; +#X obj 333 630 outlet~; +#X text 404 2 x; +#X text 269 2 y; +#X obj 454 186 +~; +#X obj 315 243 /~; +#X obj 453 244 /~; +#X obj 469 162 +~ 1e-10; +#X obj 469 140 abs~; +#X obj 315 293 *~; +#X obj 453 303 *~; +#X obj 401 539 *~ -1; +#X obj 251 541 *~; +#X obj 264 477 +~ 1; +#X obj 402 564 *~; +#X text 344 292 >= 0; +#X text 481 304 < 0; +#X obj 468 221 *~ -1; +#X obj 315 185 -~; +#X text 389 650 http://www.dspguru.com/comp.dsp/tricks/alg/fxdatan2.htm +; +#N canvas 0 22 450 300 (subpatch) 0; +#X array \$0-binary-up2 2 float 2; +#X coords 0 1 2 -1 100 50 1; +#X restore 533 31 graph; +#N canvas 0 22 450 300 (subpatch) 0; +#X array \$0-binary-down2 2 float 2; +#X coords 0 1 2 -1 100 50 1; +#X restore 647 31 graph; +#X obj 330 269 tabread~ \$0-binary-up2; +#X obj 509 269 tabread~ \$0-binary-down2; +#X obj 265 507 tabread~ \$0-binary-up2; +#X obj 415 505 tabread~ \$0-binary-down2; +#X text 388 631 better atan2 approximation \, based on:; +#X text 344 244 r; +#X text 482 246 r; +#X text 126 194 pi/4; +#X obj 134 235 * 3; +#X obj 88 239 sig~; +#X obj 399 418 *~; +#X obj 134 257 sig~; +#X obj 75 82 \$0; +#X obj 109 40 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 +-1; +#X obj 147 40 loadbang; +#X obj 210 83 \$0; +#X msg 206 103 \; \$1-binary-down2 0 1 0; +#X msg 72 103 \; \$1-binary-up2 0 0 1; +#X msg 178 213 0.1963; +#X obj 176 234 sig~; +#X obj 379 353 *~; +#X obj 379 375 *~; +#X obj 228 234 sig~; +#X msg 230 213 0.9817; +#X obj 364 418 *~; +#X obj 414 326 +~ 0; +#X text 445 326 r; +#X obj 364 445 -~; +#X obj 365 470 +~; +#X obj 421 447 *~; +#X obj 480 446 *~; +#X text 450 446 >= 0; +#X text 508 447 < 0; +#X obj 508 244 +~ 1; +#X msg 117 213 0.785398; +#X text 384 392 r^3; +#X connect 0 0 19 0; +#X connect 0 0 5 0; +#X connect 0 0 56 0; +#X connect 1 0 14 0; +#X connect 1 0 9 0; +#X connect 5 0 6 1; +#X connect 5 0 7 0; +#X connect 6 0 10 0; +#X connect 7 0 11 0; +#X connect 8 0 5 1; +#X connect 8 0 19 1; +#X connect 9 0 8 0; +#X connect 10 0 48 0; +#X connect 11 0 48 0; +#X connect 12 0 15 0; +#X connect 13 0 2 0; +#X connect 14 0 25 0; +#X connect 14 0 26 0; +#X connect 15 0 2 0; +#X connect 18 0 7 1; +#X connect 19 0 6 0; +#X connect 19 0 18 0; +#X connect 23 0 10 1; +#X connect 23 0 52 1; +#X connect 24 0 11 1; +#X connect 24 0 53 1; +#X connect 25 0 13 1; +#X connect 26 0 15 1; +#X connect 31 0 34 0; +#X connect 32 0 52 0; +#X connect 33 0 50 1; +#X connect 34 0 53 0; +#X connect 35 0 40 0; +#X connect 36 0 35 0; +#X connect 36 0 38 0; +#X connect 37 0 35 0; +#X connect 37 0 38 0; +#X connect 37 0 41 0; +#X connect 37 0 46 0; +#X connect 37 0 57 0; +#X connect 38 0 39 0; +#X connect 41 0 42 0; +#X connect 42 0 47 0; +#X connect 43 0 44 0; +#X connect 44 0 47 1; +#X connect 45 0 33 0; +#X connect 46 0 45 0; +#X connect 47 0 50 0; +#X connect 48 0 43 0; +#X connect 48 0 43 1; +#X connect 48 0 44 1; +#X connect 48 0 33 1; +#X connect 50 0 51 0; +#X connect 51 0 13 0; +#X connect 51 0 12 0; +#X connect 52 0 51 1; +#X connect 53 0 51 1; +#X connect 56 0 24 0; +#X connect 56 0 23 0; +#X connect 57 0 31 0; +#X connect 57 0 32 0; +#X restore 249 126 pd atan2~; +#X connect 0 0 6 0; +#X connect 0 0 6 1; +#X connect 0 0 8 0; +#X connect 3 0 5 0; +#X connect 3 0 5 1; +#X connect 3 0 8 1; +#X connect 4 0 1 0; +#X connect 5 0 7 1; +#X connect 6 0 7 0; +#X connect 7 0 4 0; +#X connect 8 0 2 0; +#X restore 9 114 pd cartopol~; +#N canvas 65 97 450 300 %~ 0; +#X obj 31 25 inlet~; +#X obj 352 25 inlet; +#X obj 31 91 outlet~; +#X obj 31 58 expr~ if($v1<=$f2 && $v1 >= -$f2 \, $v1 \, fmod($v1 \, +$f2)); +#X connect 0 0 3 0; +#X connect 1 0 3 1; +#X connect 3 0 2 0; +#X restore 78 403 pd %~; +#X obj 105 381 hoa.pi 1; +#X obj 105 360 c.loadmess 1; +#X connect 0 0 38 0; +#X connect 1 0 15 1; +#X connect 2 0 4 0; +#X connect 3 0 33 0; +#X connect 3 1 2 1; +#X connect 4 0 1 0; +#X connect 4 1 1 1; +#X connect 5 0 7 1; +#X connect 6 0 5 0; +#X connect 6 1 5 1; +#X connect 7 0 8 0; +#X connect 8 0 9 0; +#X connect 9 0 10 0; +#X connect 10 0 16 0; +#X connect 11 0 10 1; +#X connect 12 0 13 0; +#X connect 13 0 14 0; +#X connect 14 0 16 1; +#X connect 15 0 14 1; +#X connect 16 0 0 1; +#X connect 17 0 15 0; +#X connect 18 0 34 0; +#X connect 20 0 12 0; +#X connect 20 0 7 0; +#X connect 21 0 5 0; +#X connect 22 0 3 0; +#X connect 22 0 6 0; +#X connect 23 0 19 0; +#X connect 24 0 31 0; +#X connect 25 0 17 0; +#X connect 26 0 32 0; +#X connect 26 1 25 1; +#X connect 27 0 1 0; +#X connect 28 0 27 0; +#X connect 29 0 11 0; +#X connect 30 0 23 0; +#X connect 31 0 26 0; +#X connect 32 0 25 0; +#X connect 33 0 2 0; +#X connect 34 0 37 0; +#X connect 34 1 37 1; +#X connect 36 0 30 0; +#X connect 36 1 30 1; +#X connect 37 0 36 0; +#X connect 37 1 0 0; +#X connect 38 0 36 1; +#X connect 39 0 38 1; +#X connect 40 0 39 0; +#X restore 159 180 pd hoa.fft.dephaser~; +#X obj 198 47 hoa.in extra 1; +#X obj 198 68 clip 0 1; +#X obj 237 92 c.loadmess; +#X obj 268 136 hoa.mode.sel; +#X obj 237 158 hoa.args.map; +#X obj 237 113 hoa.thisprocess~; +#X connect 0 0 2 0; +#X connect 2 0 1 0; +#X connect 3 0 4 0; +#X connect 4 0 2 1; +#X connect 5 0 8 0; +#X connect 6 0 7 1; +#X connect 7 0 2 2; +#X connect 7 1 2 3; +#X connect 8 0 7 0; +#X connect 8 1 6 0; diff --git a/ceammc/ext/doc/hoa/hoa.fx.freeverb~-help.pd b/ceammc/ext/doc/hoa/hoa.fx.freeverb~-help.pd new file mode 100644 index 0000000000..b28bdac539 --- /dev/null +++ b/ceammc/ext/doc/hoa/hoa.fx.freeverb~-help.pd @@ -0,0 +1,116 @@ +#N canvas 398 35 797 672 10; +#X msg 16 341 \; pd dsp 1; +#X msg 16 376 \; pd dsp 0; +#X obj 113 134 c.gain~ @size 131 10 @fontname "Helvetica" @fontweight +"normal" @fontslant "roman" @fontsize 11 @receive "(null)" @send "(null)" +@presetname "(null)" @mode 0 @ramp 20 @bgcolor 0.75 0.75 0.75 1 @bdcolor +0.5 0.5 0.5 1 @kncolor 0.5 0.5 0.5 1; +#X obj 574 32 hoa.connect; +#X obj 574 12 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 +-1; +#X obj 2 21 c.patcherinfos; +#X obj 2 4 loadbang; +#X obj 2 4 hoa.help.header; +#X obj 67 616 hoa.help.pub; +#X obj 418 4 hoa.help.also; +#X obj 113 325 hoa.2d.scope~ @size 189 189 @fontname "Helvetica" @fontweight +"normal" @fontslant "roman" @fontsize 11 @receive "(null)" @send "(null)" +@order 3 @view 0 @gain 10 @interval 100 @bgcolor 0.76 0.76 0.76 1 @bdcolor +0.7 0.7 0.7 1 @phcolor 1 0 0 1 @nhcolor 0 0 1 1; +#X obj 113 533 hoa.2d.decoder~ 3 ambisonics 8; +#X obj 113 565 hoa.dac~ 1:8 -----------------; +#X obj 113 152 hoa.2d.encoder~ 3 ---------; +#X obj 272 95 phasor~ 0.1; +#X obj 113 95 phasor~ 1; +#X obj 339 179 c.number @size 53 17 @fontname "Helvetica" @fontweight +"normal" @fontslant "roman" @fontsize 11 @receive "(null)" @send "(null)" +@presetname "(null)" @min 0 @max 1 @minmax 0 1 @decimal 6 @bgcolor +0.75 0.75 0.75 1 @bdcolor 0.5 0.5 0.5 1 @textcolor 0 0 0 1; +#X obj 338 158 c.loadmess 0; +#X obj 429 179 c.number @size 53 17 @fontname "Helvetica" @fontweight +"normal" @fontslant "roman" @fontsize 11 @receive "(null)" @send "(null)" +@presetname "(null)" @min 0 @max 1 @minmax 0 1 @decimal 6 @bgcolor +0.75 0.75 0.75 1 @bdcolor 0.5 0.5 0.5 1 @textcolor 0 0 0 1; +#X msg 429 203 wet \$1; +#X obj 428 158 c.loadmess 1; +#X msg 339 203 dry \$1; +#X obj 272 121 hoa.pi~ 2; +#X text 368 402 You can also use it in the planewave domain.; +#X obj 529 179 c.number @size 53 17 @fontname "Helvetica" @fontweight +"normal" @fontslant "roman" @fontsize 11 @receive "(null)" @send "(null)" +@presetname "(null)" @min 0 @max 1 @minmax 0 1 @decimal 6 @bgcolor +0.75 0.75 0.75 1 @bdcolor 0.5 0.5 0.5 1 @textcolor 0 0 0 1; +#X msg 529 203 damp \$1; +#X obj 528 158 c.loadmess 0.5; +#X obj 640 179 c.number @size 53 17 @fontname "Helvetica" @fontweight +"normal" @fontslant "roman" @fontsize 11 @receive "(null)" @send "(null)" +@presetname "(null)" @min 0 @max 1 @minmax 0 1 @decimal 6 @bgcolor +0.75 0.75 0.75 1 @bdcolor 0.5 0.5 0.5 1 @textcolor 0 0 0 1; +#X obj 639 158 c.loadmess 0.75; +#X msg 640 203 roomsize \$1; +#X text 368 368 With diffusion \, the roomsize and the damping value +; +#X text 368 378 are mapped depending on the harmonic orders and degrees. +; +#X obj 640 259 c.number @size 53 17 @fontname "Helvetica" @fontweight +"normal" @fontslant "roman" @fontsize 11 @receive "(null)" @send "(null)" +@presetname "(null)" @min 0 @max 1 @minmax 0 1 @decimal 6 @bgcolor +0.75 0.75 0.75 1 @bdcolor 0.5 0.5 0.5 1 @textcolor 0 0 0 1; +#X obj 639 238 c.loadmess 0.75; +#X text 368 345 Attrs : wet \, dry \, roomsize \, damp \, diff; +#X obj 113 259 hoa.2d.process~ 3 hoa.fx.freeverb~ harmonics @wet 1 +@dry 0 @roomsize 0.75 @ damp 0.5 @diff 0.75, f 31; +#X msg 640 282 diff \$1; +#X text 7 48 hoa.fx.freeverb~ uses the freeverb reverberation.; +#X connect 2 0 13 0; +#X connect 4 0 3 0; +#X connect 5 0 7 0; +#X connect 6 0 5 0; +#X connect 11 0 12 0; +#X connect 11 1 12 1; +#X connect 11 2 12 2; +#X connect 11 3 12 3; +#X connect 11 4 12 4; +#X connect 11 5 12 5; +#X connect 11 6 12 6; +#X connect 11 7 12 7; +#X connect 13 0 35 0; +#X connect 13 1 35 1; +#X connect 13 2 35 2; +#X connect 13 3 35 3; +#X connect 13 4 35 4; +#X connect 13 5 35 5; +#X connect 13 6 35 6; +#X connect 14 0 22 1; +#X connect 15 0 2 0; +#X connect 16 0 21 0; +#X connect 17 0 16 0; +#X connect 18 0 19 0; +#X connect 19 0 35 7; +#X connect 20 0 18 0; +#X connect 21 0 35 7; +#X connect 22 0 13 1; +#X connect 24 0 25 0; +#X connect 25 0 35 7; +#X connect 26 0 24 0; +#X connect 27 0 29 0; +#X connect 28 0 27 0; +#X connect 29 0 35 7; +#X connect 32 0 36 0; +#X connect 33 0 32 0; +#X connect 35 0 10 0; +#X connect 35 0 11 0; +#X connect 35 1 10 1; +#X connect 35 1 11 1; +#X connect 35 2 10 2; +#X connect 35 2 11 2; +#X connect 35 3 10 3; +#X connect 35 3 11 3; +#X connect 35 4 10 4; +#X connect 35 4 11 4; +#X connect 35 5 10 5; +#X connect 35 5 11 5; +#X connect 35 6 10 6; +#X connect 35 6 11 6; +#X connect 36 0 35 7; +#X coords 0 672 1 671 100 60 0; diff --git a/ceammc/ext/doc/hoa/hoa.fx.freeverb~.pd b/ceammc/ext/doc/hoa/hoa.fx.freeverb~.pd new file mode 100644 index 0000000000..ebff4d4aa8 --- /dev/null +++ b/ceammc/ext/doc/hoa/hoa.fx.freeverb~.pd @@ -0,0 +1,193 @@ +#N canvas 392 108 741 618 10; +#X obj 280 383 hoa.in~; +#X obj 280 526 hoa.out~; +#X obj 13 24 c.loadmess; +#X obj 319 469 *~; +#X obj 368 435 c.freeverb~ left; +#X obj 132 96 hoa.mode.sel; +#X obj 13 116 hoa.args.map; +#X obj 20 148 + 1; +#X obj 21 172 / 1; +#X obj 21 216 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -8 0 10 +-262144 -1 -1 0.142857 256; +#X obj 82 163 / 1; +#X obj 82 186 t b f; +#X obj 82 227 -; +#X msg 82 205 1; +#X obj 82 256 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -8 0 10 +-262144 -1 -1 1 256; +#X obj 280 470 *~; +#X obj 295 355 line~; +#X obj 295 328 pack 0 20; +#X obj 334 305 line~; +#X obj 334 278 pack 0 20; +#X obj 428 81 hoa.in extra 1; +#N canvas 0 50 450 300 sel_router 0; +#X obj 199 107 route list float; +#X obj 199 57 inlet; +#X obj 199 141 list split; +#X obj 227 165 unpack; +#X obj 227 252 outlet; +#X obj 129 57 inlet; +#X connect 0 0 2 0; +#X connect 0 1 4 0; +#X connect 1 0 0 0; +#X connect 2 1 3 0; +#X connect 3 0 4 0; +#X connect 5 0 2 1; +#X restore 295 163 pd sel_router; +#N canvas 0 50 450 300 sel_router 0; +#X obj 199 107 route list float; +#X obj 199 57 inlet; +#X obj 199 141 list split; +#X obj 227 165 unpack; +#X obj 227 252 outlet; +#X obj 129 57 inlet; +#X connect 0 0 2 0; +#X connect 0 1 4 0; +#X connect 1 0 0 0; +#X connect 2 1 3 0; +#X connect 3 0 4 0; +#X connect 5 0 2 1; +#X restore 332 193 pd sel_router; +#N canvas 0 50 465 440 sel_router 0; +#X obj 199 57 route list float, f 28; +#X obj 199 7 inlet; +#X obj 199 211 list split; +#X obj 227 235 unpack; +#X obj 227 322 outlet; +#X obj 9 7 inlet; +#X obj 291 277 * 1; +#X obj 49 7 inlet; +#X obj 291 252 t b f; +#X obj 131 7 inlet; +#X obj 356 109 t b f; +#X obj 356 138 f 1; +#X obj 356 164 -; +#X obj 356 83 clip 0 1; +#X obj 281 211 clip 0 1; +#X obj 393 167 * 1; +#X obj 393 142 t b f; +#X obj 356 223 +; +#X obj 372 197 t b f; +#X connect 0 0 2 0; +#X connect 0 1 14 0; +#X connect 1 0 0 0; +#X connect 2 1 3 0; +#X connect 3 0 4 0; +#X connect 5 0 2 1; +#X connect 6 0 4 0; +#X connect 7 0 15 0; +#X connect 8 0 6 0; +#X connect 8 1 6 1; +#X connect 9 0 13 0; +#X connect 10 0 11 0; +#X connect 10 1 12 1; +#X connect 10 1 16 0; +#X connect 11 0 12 0; +#X connect 12 0 17 0; +#X connect 13 0 10 0; +#X connect 14 0 6 0; +#X connect 15 0 18 0; +#X connect 16 0 15 0; +#X connect 16 1 15 1; +#X connect 17 0 8 0; +#X connect 18 0 17 0; +#X connect 18 1 17 1; +#X restore 370 223 pd sel_router; +#N canvas 340 330 499 431 sel_router 0; +#X obj 199 107 route list float, f 28; +#X obj 199 57 inlet; +#X obj 199 141 list split; +#X obj 227 165 unpack; +#X obj 227 312 outlet; +#X obj 9 57 inlet; +#X obj 312 267 * 1; +#X obj 49 57 inlet; +#X obj 312 242 t b f; +#X obj 386 109 t b f; +#X obj 386 138 f 1; +#X obj 386 164 -; +#X obj 386 83 clip 0 1; +#X obj 281 150 clip 0 1; +#X obj 423 167 * 1; +#X obj 423 142 t b f; +#X obj 386 223 +; +#X obj 402 197 t b f; +#X obj 119 57 inlet; +#X connect 0 0 2 0; +#X connect 0 1 13 0; +#X connect 1 0 0 0; +#X connect 2 1 3 0; +#X connect 3 0 4 0; +#X connect 5 0 2 1; +#X connect 6 0 4 0; +#X connect 7 0 14 0; +#X connect 8 0 6 0; +#X connect 8 1 6 1; +#X connect 9 0 10 0; +#X connect 9 1 11 1; +#X connect 9 1 15 0; +#X connect 10 0 11 0; +#X connect 11 0 16 0; +#X connect 12 0 9 0; +#X connect 13 0 6 0; +#X connect 14 0 17 0; +#X connect 15 0 14 0; +#X connect 15 1 14 1; +#X connect 16 0 8 0; +#X connect 17 0 16 0; +#X connect 17 1 16 1; +#X connect 18 0 12 0; +#X restore 408 253 pd sel_router; +#X text 273 8 This hoa.processing applies reveberation on a sound field +with the freeverb.; +#X obj 370 132 route wet dry roomsize damp diff; +#X obj 13 58 hoa.thisprocess~ @wet 1 @dry 0 @roomsize 0.5 @damp 0.5 +@diff 0; +#X msg 370 320 roomsize \$1; +#X msg 409 350 damp \$1; +#X connect 0 0 4 0; +#X connect 0 0 3 0; +#X connect 2 0 27 0; +#X connect 3 0 1 0; +#X connect 4 0 15 0; +#X connect 5 0 6 1; +#X connect 6 0 8 1; +#X connect 6 0 10 1; +#X connect 6 1 7 0; +#X connect 6 1 10 0; +#X connect 6 1 21 0; +#X connect 6 1 22 0; +#X connect 6 1 23 0; +#X connect 6 1 24 0; +#X connect 7 0 8 0; +#X connect 8 0 9 0; +#X connect 8 0 24 1; +#X connect 10 0 11 0; +#X connect 11 0 13 0; +#X connect 11 1 12 1; +#X connect 12 0 14 0; +#X connect 12 0 23 1; +#X connect 13 0 12 0; +#X connect 15 0 1 0; +#X connect 16 0 15 1; +#X connect 17 0 16 0; +#X connect 18 0 3 1; +#X connect 19 0 18 0; +#X connect 20 0 26 0; +#X connect 21 0 17 0; +#X connect 22 0 19 0; +#X connect 23 0 28 0; +#X connect 24 0 29 0; +#X connect 26 0 21 1; +#X connect 26 1 22 1; +#X connect 26 2 23 3; +#X connect 26 3 24 3; +#X connect 26 4 23 2; +#X connect 26 4 24 2; +#X connect 27 0 6 0; +#X connect 27 1 5 0; +#X connect 27 3 26 0; +#X connect 28 0 4 0; +#X connect 29 0 4 0; diff --git a/ceammc/ext/doc/hoa/hoa.fx.gain~-help.pd b/ceammc/ext/doc/hoa/hoa.fx.gain~-help.pd new file mode 100644 index 0000000000..52964edb99 --- /dev/null +++ b/ceammc/ext/doc/hoa/hoa.fx.gain~-help.pd @@ -0,0 +1,214 @@ +#N canvas 255 92 987 685 10; +#X obj 285 86 hoa.soundgrain; +#X obj 134 633 hoa.help.pub; +#X obj 285 574 hoa.2d.decoder~ 7 ambisonics 16, f 39; +#N canvas 237 132 503 391 hoa_grain_env 0; +#X obj 270 148 / 256; +#X obj 270 193 * 1; +#X obj 270 247 * 0.5; +#X obj 270 219 sin; +#X obj 270 271 + 0.5; +#X obj 270 120 t f f; +#X obj 270 299 pack; +#X obj 270 169 - 0.5; +#X obj 271 32 t b b; +#X obj 270 323 tabwrite \$0-hoa_grain_array; +#X obj 270 76 until; +#X obj 270 97 f; +#X obj 297 98 + 1; +#X msg 270 55 512; +#X obj 271 8 msg.onload; +#X obj 316 169 math.pi; +#X connect 0 0 7 0; +#X connect 1 0 3 0; +#X connect 2 0 4 0; +#X connect 3 0 2 0; +#X connect 4 0 6 0; +#X connect 5 0 0 0; +#X connect 5 1 6 1; +#X connect 6 0 9 0; +#X connect 7 0 1 0; +#X connect 8 0 13 0; +#X connect 8 1 15 0; +#X connect 10 0 11 0; +#X connect 11 0 12 0; +#X connect 11 0 5 0; +#X connect 12 0 11 1; +#X connect 13 0 10 0; +#X connect 14 0 8 0; +#X connect 15 0 1 1; +#X restore 674 43 pd hoa_grain_env; +#X obj 673 23 table \$0-hoa_grain_array 512; +#X text 544 287 Control the gain of each channel with a list or the +hoa.2d.space GUI., f 49; +#X text 544 324 Prepend the list with dB \, to control with decibel +; +#X text 690 105 You can also use it in the harmonics domain.; +#X text 690 115 In the harmonics domain \, you should use float; +#X text 690 125 or dB+float to control the gain of all; +#X text 690 135 the harmonics (just a multigain).; +#X text 9 49 hoa.fx.gain~ controls the gains of the sound field.; +#X obj 285 111 ui.gain~ @size 178 16 @receive "(null)" @send "(null)" +@pinned 0 @presetname "ui.gain~.0" @background_color 0.93 0.93 0.93 +1 @border_color 0.6 0.6 0.6 1 @label_color 0 0 0 1 @knob_color 0 0.75 +1 1 @fontname "Helvetica" @fontweight "normal" @fontslant "roman" @fontsize +11 @label "(null)" @label_inner 0 @label_side "top" @label_align "left" +@label_valign "top" @label_margins 0 0 @max 12 @min -60 @output_value +0 @show_range 1; +#X obj 75 217 hoa.scope~ @size 183 183 @receive "(null)" @send "(null)" +@pinned 0 @background_color 0.93 0.93 0.93 1 @border_color 0.6 0.6 +0.6 1 @label_color 0 0 0 1 @ph_color 1 0 0 1 @nh_color 0 0 1 1 @fontname +"Helvetica" @fontweight "normal" @fontslant "roman" @fontsize 11 @label +"(null)" @label_inner 0 @label_side "top" @label_align "left" @label_valign +"top" @label_margins 0 0 @gain 10 @refresh 100 @order 7 @view 0; +#X obj 551 423 hoa.scope~ @size 189 189 @receive "(null)" @send "(null)" +@pinned 0 @background_color 0.93 0.93 0.93 1 @border_color 0.6 0.6 +0.6 1 @label_color 0 0 0 1 @ph_color 1 0 0 1 @nh_color 0 0 1 1 @fontname +"Helvetica" @fontweight "normal" @fontslant "roman" @fontsize 11 @label +"(null)" @label_inner 0 @label_side "top" @label_align "left" @label_valign +"top" @label_margins 0 0 @gain 10 @refresh 100 @order 7 @view 0; +#X obj 75 412 ui.dsp~ @size 69 69 @receive "(null)" @send "(null)" +@pinned 0 @background_color 0.93 0.93 0.93 1 @border_color 0.6 0.6 +0.6 1 @label_color 0 0 0 1 @active_color 0 0.75 1 1 @fontname "Helvetica" +@fontweight "normal" @fontslant "roman" @fontsize 11 @label "(null)" +@label_inner 0 @label_side "top" @label_align "left" @label_valign +"top" @label_margins 0 0; +#X obj 285 606 xdac~ 1:16, f 39; +#X obj 534 164 ui.sliders @size 150 100 @receive "(null)" @send "(null)" +@pinned 0 @presetname "ui.sliders.0" @background_color 0.93 0.93 0.93 +1 @border_color 0.6 0.6 0.6 1 @label_color 0 0 0 1 @slider_color 0.75 +0.75 0.75 1 @select_color 0 0.75 1 1 @fontname "Helvetica" @fontweight +"normal" @fontslant "roman" @fontsize 11 @label "(null)" @label_inner +0 @label_side "top" @label_align "left" @label_valign "top" @label_margins +0 0 @min -60 @max 12 @count 16 @auto_range 0 @show_range 1; +#X obj 534 269 msg @db; +#X obj 422 5 hoa.help.also; +#X obj 8 9 msg.onload @name?; +#X obj 8 31 canvas.top; +#X obj 8 9 prop-> @name; +#X obj 4 6 hoa.help.header; +#X obj 285 368 hoa.recomposer~ 7 16 fixe, f 39; +#X obj 285 299 hoa.process~ 16 hoa.fx.gain~ planewaves; +#X obj 285 136 hoa.process~ 7 hoa.syn.grain~ harmonics @array \$0-hoa_grain_array +, f 37; +#X obj 285 225 hoa.projector~ 7 16, f 37; +#X floatatom 539 84 5 0 0 0 - - -; +#X msg 539 106 open \$1; +#X connect 0 0 12 0; +#X connect 2 0 16 0; +#X connect 2 1 16 1; +#X connect 2 2 16 2; +#X connect 2 3 16 3; +#X connect 2 4 16 4; +#X connect 2 5 16 5; +#X connect 2 6 16 6; +#X connect 2 7 16 7; +#X connect 2 8 16 8; +#X connect 2 9 16 9; +#X connect 2 10 16 10; +#X connect 2 11 16 11; +#X connect 2 12 16 12; +#X connect 2 13 16 13; +#X connect 2 14 16 14; +#X connect 2 15 16 15; +#X connect 12 0 26 0; +#X connect 17 0 18 0; +#X connect 18 0 25 16; +#X connect 20 0 21 0; +#X connect 21 0 22 0; +#X connect 22 1 23 0; +#X connect 24 0 2 0; +#X connect 24 0 14 0; +#X connect 24 1 2 1; +#X connect 24 1 14 1; +#X connect 24 2 2 2; +#X connect 24 2 14 2; +#X connect 24 3 2 3; +#X connect 24 3 14 3; +#X connect 24 4 2 4; +#X connect 24 4 14 4; +#X connect 24 5 2 5; +#X connect 24 5 14 5; +#X connect 24 6 2 6; +#X connect 24 6 14 6; +#X connect 24 7 2 7; +#X connect 24 7 14 7; +#X connect 24 8 2 8; +#X connect 24 8 14 8; +#X connect 24 9 2 9; +#X connect 24 9 14 9; +#X connect 24 10 2 10; +#X connect 24 10 14 10; +#X connect 24 11 2 11; +#X connect 24 11 14 11; +#X connect 24 12 2 12; +#X connect 24 12 14 12; +#X connect 24 13 2 13; +#X connect 24 13 14 13; +#X connect 24 14 2 14; +#X connect 24 14 14 14; +#X connect 25 0 24 0; +#X connect 25 1 24 1; +#X connect 25 2 24 2; +#X connect 25 3 24 3; +#X connect 25 4 24 4; +#X connect 25 5 24 5; +#X connect 25 6 24 6; +#X connect 25 7 24 7; +#X connect 25 8 24 8; +#X connect 25 9 24 9; +#X connect 25 10 24 10; +#X connect 25 11 24 11; +#X connect 25 12 24 12; +#X connect 25 13 24 13; +#X connect 25 14 24 14; +#X connect 25 15 24 15; +#X connect 26 0 13 0; +#X connect 26 0 27 0; +#X connect 26 1 13 1; +#X connect 26 1 27 1; +#X connect 26 2 13 2; +#X connect 26 2 27 2; +#X connect 26 3 13 3; +#X connect 26 3 27 3; +#X connect 26 4 13 4; +#X connect 26 4 27 4; +#X connect 26 5 13 5; +#X connect 26 5 27 5; +#X connect 26 6 13 6; +#X connect 26 6 27 6; +#X connect 26 7 13 7; +#X connect 26 7 27 7; +#X connect 26 8 13 8; +#X connect 26 8 27 8; +#X connect 26 9 13 9; +#X connect 26 9 27 9; +#X connect 26 10 13 10; +#X connect 26 10 27 10; +#X connect 26 11 13 11; +#X connect 26 11 27 11; +#X connect 26 12 13 12; +#X connect 26 12 27 12; +#X connect 26 13 13 13; +#X connect 26 13 27 13; +#X connect 26 14 13 14; +#X connect 26 14 27 14; +#X connect 27 0 25 0; +#X connect 27 1 25 1; +#X connect 27 2 25 2; +#X connect 27 3 25 3; +#X connect 27 4 25 4; +#X connect 27 5 25 5; +#X connect 27 6 25 6; +#X connect 27 7 25 7; +#X connect 27 8 25 8; +#X connect 27 9 25 9; +#X connect 27 10 25 10; +#X connect 27 11 25 11; +#X connect 27 12 25 12; +#X connect 27 13 25 13; +#X connect 27 14 25 14; +#X connect 27 15 25 15; +#X connect 28 0 29 0; +#X connect 29 0 26 0; +#X coords 0 685 1 684 100 60 0; diff --git a/ceammc/ext/doc/hoa/hoa.fx.gain~.pd b/ceammc/ext/doc/hoa/hoa.fx.gain~.pd new file mode 100644 index 0000000000..ebc2df676f --- /dev/null +++ b/ceammc/ext/doc/hoa/hoa.fx.gain~.pd @@ -0,0 +1,44 @@ +#N canvas 456 124 747 487 10; +#X obj 37 37 hoa.in~; +#X obj 37 283 hoa.out~; +#X obj 344 84 hoa.in extra 1; +#X obj 52 194 line~; +#X obj 37 247 *~; +#X text 340 60 Extra 1 retreive the right inlet messages.; +#X text 90 37 Receive the signal; +#X text 90 285 Output the signal; +#X text 476 83 Input messages selector; +#X text 342 24 This hoa.processing control the gains of a sound field. +; +#X text 342 349 float : set the amplitudes of all the instances (except +if the target is used).; +#X obj 345 300 prop.declare db @min -144 @max 12 @default 0; +#X obj 345 320 prop.declare ramp @min 0 @max 1000 @default 100; +#X obj 165 89 prop @ramp; +#X obj 102 67 prop @db; +#X obj 344 249 prop @db; +#X obj 426 155 prop @ramp; +#X obj 102 118 flow.sync 2; +#X obj 102 89 dbfs->amp; +#X obj 344 175 amp->dbfs; +#X obj 102 150 pack f f, f 11; +#X floatatom 344 271 5 0 0 0 - - -; +#X obj 344 128 route float @db @ramp; +#X text 342 379 @db/float : set the amplitudes of all the instances +with a logarithmic scale (except if the target is used).; +#X text 345 418 @ramp : set the ramp time in ms.; +#X connect 0 0 4 0; +#X connect 2 0 22 0; +#X connect 3 0 4 1; +#X connect 4 0 1 0; +#X connect 13 0 17 1; +#X connect 14 0 18 0; +#X connect 15 0 21 0; +#X connect 17 0 20 0; +#X connect 17 1 20 1; +#X connect 18 0 17 0; +#X connect 19 0 15 0; +#X connect 20 0 3 0; +#X connect 22 0 19 0; +#X connect 22 1 15 0; +#X connect 22 2 16 0; diff --git a/ceammc/ext/doc/hoa/hoa.fx.mirror~-help.pd b/ceammc/ext/doc/hoa/hoa.fx.mirror~-help.pd new file mode 100644 index 0000000000..48dbac6edd --- /dev/null +++ b/ceammc/ext/doc/hoa/hoa.fx.mirror~-help.pd @@ -0,0 +1,105 @@ +#N canvas 247 84 664 684 10; +#X msg 16 341 \; pd dsp 1; +#X msg 16 376 \; pd dsp 0; +#X obj 113 105 hoa.soundgrain; +#X obj 113 134 c.gain~ @size 131 10 @fontname "Helvetica" @fontweight +"normal" @fontslant "roman" @fontsize 11 @receive "(null)" @send "(null)" +@presetname "(null)" @mode 0 @ramp 20 @bgcolor 0.75 0.75 0.75 1 @bdcolor +0.5 0.5 0.5 1 @kncolor 0.5 0.5 0.5 1; +#X obj 574 32 hoa.connect; +#X obj 574 12 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 +-1; +#X obj 2 21 c.patcherinfos; +#X obj 2 4 loadbang; +#X obj 2 4 hoa.help.header; +#X obj 67 616 hoa.help.pub; +#X obj 418 4 hoa.help.also; +#X obj 113 533 hoa.2d.decoder~ 7 ambisonics 16; +#X obj 113 565 hoa.dac~ 1:16 -----------------; +#X obj 113 325 hoa.2d.scope~ @size 189 189 @fontname "Helvetica" @fontweight +"normal" @fontslant "roman" @fontsize 11 @receive "(null)" @send "(null)" +@order 7 @view 0 @gain 10 @interval 100 @bgcolor 0.76 0.76 0.76 1 @bdcolor +0.7 0.7 0.7 1 @phcolor 1 0 0 1 @nhcolor 0 0 1 1; +#X obj 369 209 c.number @size 53 17 @fontname "Helvetica" @fontweight +"normal" @fontslant "roman" @fontsize 11 @receive "(null)" @send "(null)" +@presetname "(null)" @min -1 @max 1 @minmax -1 1 @decimal 6 @bgcolor +0.75 0.75 0.75 1 @bdcolor 0.5 0.5 0.5 1 @textcolor 0 0 0 1; +#X text 7 48 hoa.fx.mirror~ reveals or hides the mirror image of the +sound field.; +#X obj 113 152 hoa.2d.encoder~ 7 -----------; +#X obj 368 188 c.loadmess 0; +#X obj 284 121 hoa.pi~ 0.25; +#X text 367 242 1 : the orginal sound field; +#X text 367 262 0 : the orginal and the mirror sound fields; +#X text 361 282 -1 : the mirror sound field; +#X obj 113 269 hoa.2d.process~ 7 hoa.fx.mirror~ harmonics, f 31; +#X connect 2 0 3 0; +#X connect 3 0 16 0; +#X connect 5 0 4 0; +#X connect 6 0 8 0; +#X connect 7 0 6 0; +#X connect 11 0 12 0; +#X connect 11 1 12 1; +#X connect 11 2 12 2; +#X connect 11 3 12 3; +#X connect 11 4 12 4; +#X connect 11 5 12 5; +#X connect 11 6 12 6; +#X connect 11 7 12 7; +#X connect 11 8 12 8; +#X connect 11 9 12 9; +#X connect 11 10 12 10; +#X connect 11 11 12 11; +#X connect 11 12 12 12; +#X connect 11 13 12 13; +#X connect 11 14 12 14; +#X connect 11 15 12 15; +#X connect 14 0 22 15; +#X connect 16 0 22 0; +#X connect 16 1 22 1; +#X connect 16 2 22 2; +#X connect 16 3 22 3; +#X connect 16 4 22 4; +#X connect 16 5 22 5; +#X connect 16 6 22 6; +#X connect 16 7 22 7; +#X connect 16 8 22 8; +#X connect 16 9 22 9; +#X connect 16 10 22 10; +#X connect 16 11 22 11; +#X connect 16 12 22 12; +#X connect 16 13 22 13; +#X connect 16 14 22 14; +#X connect 17 0 14 0; +#X connect 18 0 16 1; +#X connect 22 0 11 0; +#X connect 22 0 13 0; +#X connect 22 1 11 1; +#X connect 22 1 13 1; +#X connect 22 2 11 2; +#X connect 22 2 13 2; +#X connect 22 3 11 3; +#X connect 22 3 13 3; +#X connect 22 4 11 4; +#X connect 22 4 13 4; +#X connect 22 5 11 5; +#X connect 22 5 13 5; +#X connect 22 6 11 6; +#X connect 22 6 13 6; +#X connect 22 7 11 7; +#X connect 22 7 13 7; +#X connect 22 8 11 8; +#X connect 22 8 13 8; +#X connect 22 9 11 9; +#X connect 22 9 13 9; +#X connect 22 10 11 10; +#X connect 22 10 13 10; +#X connect 22 11 11 11; +#X connect 22 11 13 11; +#X connect 22 12 11 12; +#X connect 22 12 13 12; +#X connect 22 13 11 13; +#X connect 22 13 13 13; +#X connect 22 14 11 14; +#X connect 22 14 13 14; +#X coords 0 684 1 683 100 60 0; diff --git a/ceammc/ext/doc/hoa/hoa.fx.mirror~.pd b/ceammc/ext/doc/hoa/hoa.fx.mirror~.pd new file mode 100644 index 0000000000..eec9e1a019 --- /dev/null +++ b/ceammc/ext/doc/hoa/hoa.fx.mirror~.pd @@ -0,0 +1,62 @@ +#N canvas 228 112 746 455 10; +#X obj 145 235 hoa.in~; +#X obj 145 361 hoa.out~; +#X obj 33 15 c.loadmess; +#X text 25 235 Receive the signal; +#X text 32 362 Output the signal; +#X obj 145 319 *~; +#X obj 251 71 hoa.in extra 1; +#X text 344 71 Extra 1 Receive the inlet messages.; +#X text 260 25 This hoa.processing applies a mirror effect on the sound +field.; +#X obj 138 87 route done; +#X obj 251 146 clip -1 1; +#X obj 33 62 hoa.thisprocess~ 0; +#X obj 103 86 f 0; +#X msg 251 259 \$1 20; +#N canvas 0 50 450 300 print.domain.error 0; +#X obj 6 54 hoa.mode.sel; +#X obj 7 214 print hoa.syn.encoder~; +#X msg 7 163 only valid in the circular harmonics domain.; +#X obj 6 24 inlet; +#X obj 6 133 sel 0 1; +#X connect 0 0 4 0; +#X connect 2 0 1 0; +#X connect 3 0 0 0; +#X connect 4 2 2 0; +#X restore 68 118 pd print.domain.error; +#X obj 101 166 < 0; +#X obj 251 280 line~ 1; +#X obj 251 205 spigot; +#X text 334 214 To hide the original sound field and reveal only the +"mirror" sound field \, the polarity of the negative harmonics is inverted. +; +#X text 334 184 To reveal the "mirror" of the sound field \, the negative +harmonics are disabled.; +#X text 334 254 Thus \, multiply the negative harmonics allows to hide +and reveal the original sound field and its mirror image.; +#X obj 191 174 sel 1; +#X msg 191 207 0; +#X msg 222 207 1; +#X obj 33 143 unpack f f f; +#X connect 0 0 5 0; +#X connect 2 0 11 0; +#X connect 5 0 1 0; +#X connect 6 0 10 0; +#X connect 9 0 12 0; +#X connect 10 0 17 0; +#X connect 11 0 24 0; +#X connect 11 1 14 0; +#X connect 11 2 12 0; +#X connect 11 3 9 0; +#X connect 12 0 10 0; +#X connect 13 0 16 0; +#X connect 15 0 17 1; +#X connect 15 0 21 0; +#X connect 16 0 5 1; +#X connect 17 0 13 0; +#X connect 21 0 22 0; +#X connect 21 1 23 0; +#X connect 22 0 13 0; +#X connect 23 0 13 0; +#X connect 24 2 15 0; diff --git a/ceammc/ext/doc/hoa/hoa.fx.optim~.pd b/ceammc/ext/doc/hoa/hoa.fx.optim~.pd new file mode 100755 index 0000000000..8722c171ad --- /dev/null +++ b/ceammc/ext/doc/hoa/hoa.fx.optim~.pd @@ -0,0 +1,190 @@ +#N canvas 599 186 737 482 10; +#X obj 109 44 c.loadmess; +#X obj 182 247 *~ 1; +#X obj 181 221 hoa.in~; +#X obj 181 271 hoa.out~; +#X obj 237 90 hoa.in extra 1; +#X text 326 90 Optimization type.; +#X text 45 221 signal of the harmonic; +#X text 21 271 new signal of the harmonic; +#X text 384 174 Algorithms of optimization.; +#N canvas 877 270 452 414 maxRe 0; +#X obj 48 285 outlet; +#X obj 63 53 unpack 0 0; +#X obj 48 263 f; +#X obj 48 242 inlet; +#X obj 63 9 c.loadmess; +#X obj 63 31 hoa.thisprocess~; +#X obj 63 167 /, f 5; +#X obj 63 199 *, f 4; +#X obj 120 150 abs; +#X obj 90 124 * 2; +#X obj 90 145 + 2; +#X obj 120 171 t b f; +#X obj 63 81 t b f; +#X obj 63 103 hoa.pi 1; +#X obj 63 221 cos; +#X connect 1 0 12 0; +#X connect 1 1 8 0; +#X connect 2 0 0 0; +#X connect 3 0 2 0; +#X connect 4 0 5 0; +#X connect 5 0 1 0; +#X connect 6 0 7 0; +#X connect 7 0 14 0; +#X connect 8 0 11 0; +#X connect 9 0 10 0; +#X connect 10 0 6 1; +#X connect 11 0 7 0; +#X connect 11 1 7 1; +#X connect 12 0 13 0; +#X connect 12 1 9 0; +#X connect 13 0 6 0; +#X connect 14 0 2 1; +#X restore 260 173 pd maxRe; +#N canvas 393 312 441 394 inPhase 0; +#X obj 82 346 outlet; +#X obj 128 48 unpack 0 0; +#X obj 82 223 inlet; +#X obj 82 325 f; +#X obj 128 5 c.loadmess; +#X obj 128 27 hoa.thisprocess~ inPhase; +#N canvas 0 22 450 300 factorial 0; +#X obj 163 81 until; +#X obj 163 103 f 1; +#X obj 188 103 + 1; +#X obj 188 123 f 1; +#X obj 163 123 * 1; +#X obj 163 19 inlet, f 11; +#X obj 163 61 t f b, f 9; +#X obj 214 81 f 1; +#X obj 163 40 max 1; +#X obj 163 145 outlet; +#X connect 0 0 1 0; +#X connect 1 0 2 0; +#X connect 1 0 4 0; +#X connect 2 0 1 1; +#X connect 3 0 4 1; +#X connect 4 0 3 0; +#X connect 4 0 9 0; +#X connect 5 0 8 0; +#X connect 6 0 0 0; +#X connect 6 1 7 0; +#X connect 7 0 1 1; +#X connect 7 0 4 1; +#X connect 8 0 6 0; +#X restore 128 122 pd factorial; +#N canvas 0 22 450 300 factorial 0; +#X obj 163 81 until; +#X obj 163 103 f 1; +#X obj 188 103 + 1; +#X obj 188 123 f 1; +#X obj 163 123 * 1; +#X obj 163 19 inlet, f 11; +#X obj 163 61 t f b, f 9; +#X obj 214 81 f 1; +#X obj 163 40 max 1; +#X obj 163 145 outlet; +#X connect 0 0 1 0; +#X connect 1 0 2 0; +#X connect 1 0 4 0; +#X connect 2 0 1 1; +#X connect 3 0 4 1; +#X connect 4 0 3 0; +#X connect 4 0 9 0; +#X connect 5 0 8 0; +#X connect 6 0 0 0; +#X connect 6 1 7 0; +#X connect 7 0 1 1; +#X connect 7 0 4 1; +#X connect 8 0 6 0; +#X restore 208 122 pd factorial; +#X obj 208 100 +, f 5; +#X obj 208 80 t b f; +#N canvas 0 22 450 300 factorial 0; +#X obj 163 81 until; +#X obj 163 103 f 1; +#X obj 188 103 + 1; +#X obj 188 123 f 1; +#X obj 163 123 * 1; +#X obj 163 19 inlet, f 11; +#X obj 163 61 t f b, f 9; +#X obj 214 81 f 1; +#X obj 163 40 max 1; +#X obj 163 145 outlet; +#X connect 0 0 1 0; +#X connect 1 0 2 0; +#X connect 1 0 4 0; +#X connect 2 0 1 1; +#X connect 3 0 4 1; +#X connect 4 0 3 0; +#X connect 4 0 9 0; +#X connect 5 0 8 0; +#X connect 6 0 0 0; +#X connect 6 1 7 0; +#X connect 7 0 1 1; +#X connect 7 0 4 1; +#X connect 8 0 6 0; +#X restore 288 122 pd factorial; +#X obj 288 80 t b f; +#X obj 288 100 -, f 5; +#X obj 128 171 /, f 5; +#X obj 208 142 t b f; +#X obj 238 171 /, f 5; +#X obj 288 142 t b f; +#X obj 128 224 *, f 5; +#X obj 238 191 t b f; +#X connect 1 0 6 0; +#X connect 1 0 8 0; +#X connect 1 0 12 0; +#X connect 1 1 9 0; +#X connect 1 1 11 0; +#X connect 2 0 3 0; +#X connect 3 0 0 0; +#X connect 4 0 5 0; +#X connect 5 0 1 0; +#X connect 6 0 13 0; +#X connect 6 0 15 0; +#X connect 7 0 14 0; +#X connect 8 0 7 0; +#X connect 9 0 8 0; +#X connect 9 1 8 1; +#X connect 10 0 16 0; +#X connect 11 0 12 0; +#X connect 11 1 12 1; +#X connect 12 0 10 0; +#X connect 13 0 17 0; +#X connect 14 0 13 0; +#X connect 14 1 13 1; +#X connect 15 0 18 0; +#X connect 16 0 15 0; +#X connect 16 1 15 1; +#X connect 17 0 3 1; +#X connect 18 0 17 0; +#X connect 18 1 17 1; +#X restore 317 173 pd inPhase; +#N canvas 65 82 450 300 basic 0; +#X obj 166 130 inlet; +#X obj 166 174 outlet; +#X obj 166 152 f 1; +#X connect 0 0 2 0; +#X connect 2 0 1 0; +#X restore 203 173 pd basic; +#X obj 109 66 hoa.thisprocess~ inPhase; +#X msg 203 90 \$1; +#X obj 203 151 route basic maxRe inPhase, f 29; +#X obj 237 113 route symbol; +#X connect 0 0 12 0; +#X connect 1 0 3 0; +#X connect 2 0 1 0; +#X connect 4 0 15 0; +#X connect 9 0 1 1; +#X connect 10 0 1 1; +#X connect 11 0 1 1; +#X connect 12 2 13 0; +#X connect 13 0 14 0; +#X connect 14 0 11 0; +#X connect 14 1 9 0; +#X connect 14 2 10 0; +#X connect 15 0 13 0; +#X connect 15 1 14 0; diff --git a/ceammc/ext/doc/hoa/hoa.fx.ringmod~-help.pd b/ceammc/ext/doc/hoa/hoa.fx.ringmod~-help.pd new file mode 100644 index 0000000000..4397d47771 --- /dev/null +++ b/ceammc/ext/doc/hoa/hoa.fx.ringmod~-help.pd @@ -0,0 +1,226 @@ +#N canvas 120 93 987 685 10; +#X msg 361 388 \; pd dsp 1; +#X msg 361 423 \; pd dsp 0; +#X obj 291 84 hoa.soundgrain; +#X obj 4 20 c.patcherinfos; +#X obj 4 3 loadbang; +#X obj 4 3 hoa.help.header; +#X obj 134 631 hoa.help.pub; +#X obj 420 3 hoa.help.also; +#X text 9 47 hoa.fx.ringmod~ uses ring modulation to diffuse a sound +field.; +#X obj 285 572 hoa.2d.decoder~ 7 ambisonics 16; +#X obj 714 71 hoa.2d.space @size 189 189 @fontname "Helvetica" @fontweight +"normal" @fontslant "roman" @fontsize 11 @receive "(null)" @send "(null)" +@presetname "(null)" @channels 16 @minmax 0 20 @bgcolor 0.76 0.76 0.76 +1 @bdcolor 0.7 0.7 0.7 1 @spcolor 0.27 0.43 0.54 0.25 @ptcolor 0 0 +0 1; +#X text 723 266 Control the frequency of the ring modulation of each +channel with a list or the hoa.2d.space GUI., f 31; +#X text 23 99 Control the global frequency of the ring modulation. +, f 12; +#X text 194 108 Control the diffusion factor., f 10; +#X obj 21 308 hoa.process~ 7 hoa.fx.ringmod~ harmonics, f 31; +#X obj 291 113 ui.gain~ @size 131 10 @receive "(null)" @send "(null)" +@pinned 0 @presetname "ui.gain~.1" @background_color 0.93 0.93 0.93 +1 @border_color 0.6 0.6 0.6 1 @label_color 0 0 0 1 @knob_color 0 0.75 +1 1 @fontname "Helvetica" @fontweight "normal" @fontslant "roman" @fontsize +11 @label "(null)" @label_inner 0 @label_side "top" @label_align "left" +@label_valign "top" @label_margins 0 0 @max 0 @min -60 @output_value +0 @show_range 1; +#X obj 285 604 xdac~ 1:16, f 31; +#X obj 531 421 hoa.scope~ @size 189 189 @receive "(null)" @send "(null)" +@pinned 0 @background_color 0.93 0.93 0.93 1 @border_color 0.6 0.6 +0.6 1 @label_color 0 0 0 1 @ph_color 1 0 0 1 @nh_color 0 0 1 1 @fontname +"Helvetica" @fontweight "normal" @fontslant "roman" @fontsize 11 @label +"(null)" @label_inner 0 @label_side "top" @label_align "left" @label_valign +"top" @label_margins 0 0 @gain 10 @refresh 100 @order 7 @view 0; +#X obj 531 308 hoa.process~ 16 hoa.fx.ringmod~ planewaves, f 31; +#X obj 531 243 !hoa.projector~ 7 16, f 29; +#X obj 30 168 msg.onload 10; +#X obj 114 138 msg.onload 1; +#X msg 114 189 @diffusion \$1; +#X obj 21 361 hoa.scope~ @size 189 189 @receive "(null)" @send "(null)" +@pinned 0 @background_color 0.93 0.93 0.93 1 @border_color 0.6 0.6 +0.6 1 @label_color 0 0 0 1 @ph_color 1 0 0 1 @nh_color 0 0 1 1 @fontname +"Helvetica" @fontweight "normal" @fontslant "roman" @fontsize 11 @label +"(null)" @label_inner 0 @label_side "top" @label_align "left" @label_valign +"top" @label_margins 0 0 @gain 10 @refresh 100 @order 7 @view 0; +#X obj 291 181 hoa.scope~ @size 183 183 @receive "(null)" @send "(null)" +@pinned 0 @background_color 0.93 0.93 0.93 1 @border_color 0.6 0.6 +0.6 1 @label_color 0 0 0 1 @ph_color 1 0 0 1 @nh_color 0 0 1 1 @fontname +"Helvetica" @fontweight "normal" @fontslant "roman" @fontsize 11 @label +"(null)" @label_inner 0 @label_side "top" @label_align "left" @label_valign +"top" @label_margins 0 0 @gain 10 @refresh 100 @order 7 @view 0; +#X obj 291 131 hoa.2d.encoder~ 7, f 30; +#X obj 468 100 phase->rad~; +#X obj 468 75 lfo.saw~ 1; +#X obj 531 377 !hoa.recomposer~ 7 16 fixe, f 31; +#X floatatom 114 160 5 0 0 0 - - -; +#X floatatom 30 190 5 0 0 0 - - -; +#X connect 2 0 15 0; +#X connect 3 0 5 0; +#X connect 4 0 3 0; +#X connect 9 0 16 0; +#X connect 9 1 16 1; +#X connect 9 2 16 2; +#X connect 9 3 16 3; +#X connect 9 4 16 4; +#X connect 9 5 16 5; +#X connect 9 6 16 6; +#X connect 9 7 16 7; +#X connect 9 8 16 8; +#X connect 9 9 16 9; +#X connect 9 10 16 10; +#X connect 9 11 16 11; +#X connect 9 12 16 12; +#X connect 9 13 16 13; +#X connect 9 14 16 14; +#X connect 9 15 16 15; +#X connect 10 0 18 16; +#X connect 14 0 9 0; +#X connect 14 0 23 0; +#X connect 14 1 9 1; +#X connect 14 1 23 1; +#X connect 14 2 9 2; +#X connect 14 2 23 2; +#X connect 14 3 9 3; +#X connect 14 3 23 3; +#X connect 14 4 9 4; +#X connect 14 4 23 4; +#X connect 14 5 9 5; +#X connect 14 5 23 5; +#X connect 14 6 9 6; +#X connect 14 6 23 6; +#X connect 14 7 9 7; +#X connect 14 7 23 7; +#X connect 14 8 9 8; +#X connect 14 8 23 8; +#X connect 14 9 9 9; +#X connect 14 9 23 9; +#X connect 14 10 9 10; +#X connect 14 10 23 10; +#X connect 14 11 9 11; +#X connect 14 11 23 11; +#X connect 14 12 9 12; +#X connect 14 12 23 12; +#X connect 14 13 9 13; +#X connect 14 13 23 13; +#X connect 14 14 9 14; +#X connect 14 14 23 14; +#X connect 15 0 25 0; +#X connect 18 0 28 0; +#X connect 18 1 28 1; +#X connect 18 2 28 2; +#X connect 18 3 28 3; +#X connect 18 4 28 4; +#X connect 18 5 28 5; +#X connect 18 6 28 6; +#X connect 18 7 28 7; +#X connect 18 8 28 8; +#X connect 18 9 28 9; +#X connect 18 10 28 10; +#X connect 18 11 28 11; +#X connect 18 12 28 12; +#X connect 18 13 28 13; +#X connect 18 14 28 14; +#X connect 18 15 28 15; +#X connect 19 0 18 0; +#X connect 19 1 18 1; +#X connect 19 2 18 2; +#X connect 19 3 18 3; +#X connect 19 4 18 4; +#X connect 19 5 18 5; +#X connect 19 6 18 6; +#X connect 19 7 18 7; +#X connect 19 8 18 8; +#X connect 19 9 18 9; +#X connect 19 10 18 10; +#X connect 19 11 18 11; +#X connect 19 12 18 12; +#X connect 19 13 18 13; +#X connect 19 14 18 14; +#X connect 19 15 18 15; +#X connect 20 0 30 0; +#X connect 21 0 29 0; +#X connect 22 0 14 15; +#X connect 25 0 14 0; +#X connect 25 0 19 0; +#X connect 25 0 24 0; +#X connect 25 1 14 1; +#X connect 25 1 19 1; +#X connect 25 1 24 1; +#X connect 25 2 14 2; +#X connect 25 2 19 2; +#X connect 25 2 24 2; +#X connect 25 3 14 3; +#X connect 25 3 19 3; +#X connect 25 3 24 3; +#X connect 25 4 14 4; +#X connect 25 4 19 4; +#X connect 25 4 24 4; +#X connect 25 5 14 5; +#X connect 25 5 19 5; +#X connect 25 5 24 5; +#X connect 25 6 14 6; +#X connect 25 6 19 6; +#X connect 25 6 24 6; +#X connect 25 7 14 7; +#X connect 25 7 19 7; +#X connect 25 7 24 7; +#X connect 25 8 14 8; +#X connect 25 8 19 8; +#X connect 25 8 24 8; +#X connect 25 9 14 9; +#X connect 25 9 19 9; +#X connect 25 9 24 9; +#X connect 25 10 14 10; +#X connect 25 10 19 10; +#X connect 25 10 24 10; +#X connect 25 11 14 11; +#X connect 25 11 19 11; +#X connect 25 11 24 11; +#X connect 25 12 14 12; +#X connect 25 12 19 12; +#X connect 25 12 24 12; +#X connect 25 13 14 13; +#X connect 25 13 19 13; +#X connect 25 13 24 13; +#X connect 25 14 14 14; +#X connect 25 14 19 14; +#X connect 25 14 24 14; +#X connect 26 0 25 1; +#X connect 27 0 26 0; +#X connect 28 0 9 0; +#X connect 28 0 17 0; +#X connect 28 1 9 1; +#X connect 28 1 17 1; +#X connect 28 2 9 2; +#X connect 28 2 17 2; +#X connect 28 3 9 3; +#X connect 28 3 17 3; +#X connect 28 4 9 4; +#X connect 28 4 17 4; +#X connect 28 5 9 5; +#X connect 28 5 17 5; +#X connect 28 6 9 6; +#X connect 28 6 17 6; +#X connect 28 7 9 7; +#X connect 28 7 17 7; +#X connect 28 8 9 8; +#X connect 28 8 17 8; +#X connect 28 9 9 9; +#X connect 28 9 17 9; +#X connect 28 10 9 10; +#X connect 28 10 17 10; +#X connect 28 11 9 11; +#X connect 28 11 17 11; +#X connect 28 12 9 12; +#X connect 28 12 17 12; +#X connect 28 13 9 13; +#X connect 28 13 17 13; +#X connect 28 14 9 14; +#X connect 28 14 17 14; +#X connect 29 0 22 0; +#X connect 30 0 14 15; +#X coords 0 685 1 684 100 60 0; diff --git a/ceammc/ext/doc/hoa/hoa.fx.ringmod~.pd b/ceammc/ext/doc/hoa/hoa.fx.ringmod~.pd new file mode 100644 index 0000000000..e0006c3666 --- /dev/null +++ b/ceammc/ext/doc/hoa/hoa.fx.ringmod~.pd @@ -0,0 +1,99 @@ +#N canvas 339 44 865 702 10; +#X obj 125 497 hoa.in~; +#X obj 125 623 hoa.out~; +#X text 5 497 Receive the signal; +#X text 12 624 Output the signal; +#X text 362 108 Input messages selector; +#X obj 125 581 *~; +#X obj 185 500 line~; +#X obj 326 534 *~; +#X obj 326 473 osc~ 1; +#X obj 326 451 line~; +#X msg 326 429 \$1 20; +#X obj 231 63 hoa.in extra 1; +#X text 324 63 Extra 1 Receive the inlet messages.; +#X text 84 29 Default arguments and attributes; +#X text 377 473 Simple ring modulation; +#X obj 247 228 *; +#X obj 13 152 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -8 0 10 +-262144 -1 -1 0 256; +#X obj 326 407 f 1; +#X msg 185 479 \$1 20; +#X obj 223 402 sel 0 1; +#X obj 196 359 t b f; +#X text 375 297 diffusion : The value is clip between 0 and 1 and reversed. +If the value is 1 \, the ring modulation is applied to all the intances. +If the value is 0 \, the ring modulation is applied to no harmonics. +Between the boudnaries \, the ring modulation appears first in the +high harmonics then in the low harmonics.; +#X obj 196 332 >= 0; +#X obj 185 431 f 1; +#X obj 266 500 line~; +#X msg 266 479 \$1 20; +#X obj 296 431 f 1; +#X obj 223 431 f 0; +#X obj 256 431 f 0; +#X obj 193 393 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1 +1; +#X text 34 385 1 if the ring modulation; +#X text 34 395 is active and 0 if not; +#X obj 196 78 f 10; +#X obj 196 109 route diffusion float list; +#X text 374 156 list : The item corresponding to the instance is selected +and control the frequency of the ring modulation (mostly used in the +plane waves domain).; +#X text 309 18 This hoa.processing diffuses the sound field with ring +modulation.; +#X obj 432 395 prop.declare diffusion @f @default 1 @min 0 @max 1; +#X obj 196 296 prop @diffusion; +#X obj 298 153 list.at; +#X obj 13 7 msg.onload; +#X obj 13 29 patch.args; +#X text 371 215 float : The value \, that control the frequency of +the ring modulation \, is multiplied by a factor depending on the instance. +The factor is 1 for the highest harmonic and decreases toward 0 for +the lower harmonics.; +#X obj 13 117 /; +#X text 18 134 instance factor; +#X obj 13 51 list.at 3; +#X obj 13 95 list.at 3 2; +#X connect 0 0 5 0; +#X connect 5 0 1 0; +#X connect 6 0 5 1; +#X connect 7 0 5 1; +#X connect 8 0 7 0; +#X connect 9 0 8 0; +#X connect 10 0 9 0; +#X connect 11 0 33 0; +#X connect 15 0 17 0; +#X connect 17 0 10 0; +#X connect 18 0 6 0; +#X connect 19 0 23 0; +#X connect 19 0 27 0; +#X connect 19 1 26 0; +#X connect 19 1 28 0; +#X connect 20 0 17 0; +#X connect 20 1 19 0; +#X connect 20 1 29 0; +#X connect 22 0 20 0; +#X connect 23 0 18 0; +#X connect 24 0 7 1; +#X connect 25 0 24 0; +#X connect 26 0 25 0; +#X connect 27 0 25 0; +#X connect 28 0 18 0; +#X connect 32 0 33 0; +#X connect 33 0 37 0; +#X connect 33 1 15 0; +#X connect 33 2 38 0; +#X connect 37 0 22 0; +#X connect 38 0 17 0; +#X connect 39 0 40 0; +#X connect 39 0 32 0; +#X connect 40 0 44 0; +#X connect 40 0 45 0; +#X connect 42 0 16 0; +#X connect 42 0 15 1; +#X connect 42 0 22 1; +#X connect 44 0 38 1; +#X connect 45 0 42 0; diff --git a/ceammc/ext/doc/hoa/hoa.fx.sum~.pd b/ceammc/ext/doc/hoa/hoa.fx.sum~.pd new file mode 100644 index 0000000000..7e52497a39 --- /dev/null +++ b/ceammc/ext/doc/hoa/hoa.fx.sum~.pd @@ -0,0 +1,6 @@ +#N canvas 271 97 476 386 10; +#X obj 224 106 hoa.in~; +#X text 104 106 Receive the signal; +#X text 111 233 Output the signal; +#X obj 224 232 hoa.out~ extra 1; +#X connect 0 0 3 0; diff --git a/ceammc/ext/doc/hoa/hoa.fx.wider~.pd b/ceammc/ext/doc/hoa/hoa.fx.wider~.pd new file mode 100755 index 0000000000..9257a1ca52 --- /dev/null +++ b/ceammc/ext/doc/hoa/hoa.fx.wider~.pd @@ -0,0 +1,182 @@ +#N canvas 65 198 552 433 10; +#X obj 9 4 c.loadmess; +#X obj 39 306 hoa.out~; +#X obj 39 162 hoa.in~; +#X obj 9 49 unpack 0 0; +#X obj 9 26 hoa.thisprocess~; +#X obj 66 70 abs; +#X obj 208 14 hoa.in extra 1; +#X obj 39 284 *~ 1; +#X obj 235 146 t f f; +#X obj 208 96 t f f; +#X text 285 39 Clip the widen value; +#X text 285 49 between 0 and 1; +#X text 252 70 Compute a(x) :; +#N canvas 65 107 450 300 widening 0; +#X obj 131 127 clip 0 1; +#X obj 131 84 t f b b; +#X msg 176 105 1, f 2; +#X msg 153 106 0, f 2; +#X obj 131 62 inlet; +#X obj 131 148 outlet; +#X connect 0 0 5 0; +#X connect 1 0 0 0; +#X connect 1 1 3 0; +#X connect 1 2 2 0; +#X connect 2 0 0 2; +#X connect 3 0 0 1; +#X connect 4 0 1 0; +#X restore 208 43 pd widening; +#N canvas 65 107 450 300 a_x 0; +#X obj 166 61 inlet; +#X obj 166 194 outlet; +#X msg 166 107 1; +#X obj 166 83 t b f b; +#X obj 181 151 hoa.pi 1; +#X obj 166 173 *; +#X obj 166 130 -; +#X connect 0 0 3 0; +#X connect 2 0 6 0; +#X connect 3 0 2 0; +#X connect 3 1 6 1; +#X connect 3 2 4 0; +#X connect 4 0 5 1; +#X connect 5 0 1 0; +#X connect 6 0 5 0; +#X restore 208 75 pd a_x; +#N canvas 65 102 450 300 b_x 0; +#X obj 149 73 inlet; +#X obj 149 226 outlet; +#X obj 149 140 -; +#X obj 149 95 t f b; +#X obj 164 118 hoa.pi 0.5; +#X obj 149 162 sin; +#X obj 149 184 + 1; +#X obj 149 205 * 0.5; +#X connect 0 0 3 0; +#X connect 2 0 5 0; +#X connect 3 0 2 0; +#X connect 3 1 4 0; +#X connect 4 0 2 1; +#X connect 5 0 6 0; +#X connect 6 0 7 0; +#X connect 7 0 1 0; +#X restore 235 125 pd b_x; +#X text 277 120 Compute b(x) :; +#X text 252 80 (1 - x) * π; +#X text 277 130 (sin(a(x) - π / 2) + 1) * 0.5; +#X obj 60 263 *; +#N canvas 151 185 450 300 g_1 0; +#X obj 74 34 inlet; +#X text 126 56 decomposition order; +#X obj 89 55 inlet; +#X obj 104 77 inlet; +#X text 140 78 harmonic degree; +#X obj 89 124 -; +#X obj 74 146 *; +#X obj 74 167 + 1; +#X obj 74 218 outlet; +#X msg 158 167 1; +#X obj 203 167 == 1; +#X obj 158 144 t b f; +#X obj 158 189 spigot 0; +#X obj 74 188 spigot 0; +#X obj 119 167 != 1; +#X obj 104 98 t f f; +#X text 71 16 b(x); +#X connect 0 0 6 0; +#X connect 2 0 5 0; +#X connect 3 0 15 0; +#X connect 5 0 6 1; +#X connect 6 0 7 0; +#X connect 7 0 13 0; +#X connect 9 0 12 0; +#X connect 10 0 12 1; +#X connect 11 0 9 0; +#X connect 11 1 10 0; +#X connect 12 0 8 0; +#X connect 13 0 8 0; +#X connect 14 0 13 1; +#X connect 15 0 5 1; +#X connect 15 1 11 0; +#X connect 15 1 14 0; +#X restore 75 241 pd g_1; +#N canvas 163 191 456 397 g_2 0; +#X obj 50 26 inlet; +#X obj 50 157 clip 0 1; +#X msg 72 135 0, f 2; +#X obj 50 111 t f b b; +#X obj 95 135 hoa.pi 1; +#X obj 50 90 *; +#X obj 65 46 inlet; +#X text 100 48 harmonic degree; +#X obj 50 179 cos; +#X obj 50 201 + 1; +#X obj 50 222 * 0.5; +#X obj 50 275 spigot 0; +#X obj 138 277 spigot 0; +#X obj 50 310 outlet; +#X obj 183 255 == 1; +#X obj 138 255 *; +#X obj 153 234 -; +#X obj 153 124 inlet; +#X obj 65 68 t f f; +#X obj 93 254 != 1; +#X obj 153 191 *; +#X obj 168 168 inlet; +#X text 203 169 decomposition order; +#X obj 153 212 + 1; +#X obj 153 146 t f f; +#X text 87 28 a(x); +#X text 189 124 b(x); +#X connect 0 0 5 0; +#X connect 1 0 8 0; +#X connect 2 0 1 1; +#X connect 3 0 1 0; +#X connect 3 1 2 0; +#X connect 3 2 4 0; +#X connect 4 0 1 2; +#X connect 5 0 3 0; +#X connect 6 0 18 0; +#X connect 8 0 9 0; +#X connect 9 0 10 0; +#X connect 10 0 11 0; +#X connect 10 0 15 0; +#X connect 11 0 13 0; +#X connect 12 0 13 0; +#X connect 14 0 12 1; +#X connect 15 0 12 0; +#X connect 16 0 15 1; +#X connect 17 0 24 0; +#X connect 18 0 5 1; +#X connect 18 1 14 0; +#X connect 18 1 19 0; +#X connect 19 0 11 1; +#X connect 20 0 23 0; +#X connect 21 0 20 1; +#X connect 23 0 16 0; +#X connect 24 0 20 0; +#X connect 24 1 16 1; +#X restore 60 216 pd g_2; +#X text 116 242 Compute the first part of g(x); +#X text 101 217 Compute the second part of g(x); +#X connect 0 0 4 0; +#X connect 2 0 7 0; +#X connect 3 0 20 1; +#X connect 3 0 21 3; +#X connect 3 1 5 0; +#X connect 4 0 3 0; +#X connect 5 0 20 2; +#X connect 5 0 21 1; +#X connect 6 0 13 0; +#X connect 7 0 1 0; +#X connect 8 0 20 0; +#X connect 8 1 21 2; +#X connect 9 0 21 0; +#X connect 9 1 15 0; +#X connect 13 0 14 0; +#X connect 14 0 9 0; +#X connect 15 0 8 0; +#X connect 19 0 7 1; +#X connect 20 0 19 1; +#X connect 21 0 19 0; diff --git a/ceammc/ext/doc/hoa/hoa.help.also.pd b/ceammc/ext/doc/hoa/hoa.help.also.pd new file mode 100644 index 0000000000..138864724b --- /dev/null +++ b/ceammc/ext/doc/hoa/hoa.help.also.pd @@ -0,0 +1,10 @@ +#N canvas 405 374 250 144 10; +#X obj 1 1 cnv 15 130 40 empty \$0-hoa.header empty 3 12 0 18 -212212 +-1 0; +#X obj 14 12 ui.link @size 93 17 @receive "(null)" @send "(null)" @pinned +0 @background_color 1 1 1 1 @border_color 0.6 0.6 0.6 1 @label_color +0 0 0 1 @link_color 0 0.625 0.75 1 @hover_color 1 0 0.5 1 @fontname +"Menlo" @fontweight "normal" @fontslant "roman" @fontsize 11 @label +"(null)" @label_inner 0 @label_side "top" @label_align "left" @label_valign +"top" @label_margins 0 0 @url "hoa-help.pd" @title "hoa.overview"; +#X coords 0 -1 1 1 132 42 2 0 0; diff --git a/ceammc/ext/doc/hoa/hoa.help.header.pd b/ceammc/ext/doc/hoa/hoa.help.header.pd new file mode 100644 index 0000000000..eececd0a8f --- /dev/null +++ b/ceammc/ext/doc/hoa/hoa.help.header.pd @@ -0,0 +1,42 @@ +#N canvas 264 189 758 436 10; +#X obj 45 1 cnv 15 354 40 empty \$0-hoa.header HOA 10 12 0 14 -233017 +-66577 0; +#X obj 388 313 s \$0-hoa.header; +#X obj 284 80 namecanvas \$0-r; +#X msg 580 55 read hoa.objects.txt; +#X obj 505 313 s \$0-r; +#X msg 388 283 label \$1; +#X obj 580 115 textfile; +#X obj 548 85 until; +#X msg 601 85 rewind; +#X obj 580 144 list; +#X obj 533 32 t b b b b s; +#X obj 505 285 prepend text 46 23; +#X text 215 0 High Order Ambisonics Library.; +#X obj 527 184 list.at 0; +#X obj 527 206 symbol.equal; +#X obj 428 184 flow.pass_if; +#X obj 388 243 list.at 1; +#X obj 533 9 inlet; +#X obj 505 243 list.slice 2; +#X connect 3 0 6 0; +#X connect 5 0 1 0; +#X connect 6 0 9 0; +#X connect 6 1 7 1; +#X connect 7 0 6 0; +#X connect 8 0 6 0; +#X connect 9 0 15 0; +#X connect 10 1 7 0; +#X connect 10 2 8 0; +#X connect 10 3 3 0; +#X connect 10 4 14 1; +#X connect 11 0 4 0; +#X connect 13 0 14 0; +#X connect 14 0 15 1; +#X connect 15 0 16 0; +#X connect 15 0 18 0; +#X connect 15 1 13 0; +#X connect 16 0 5 0; +#X connect 17 0 10 0; +#X connect 18 0 11 0; +#X coords 0 -1 1 1 400 42 2 0 0; diff --git a/ceammc/ext/doc/hoa/hoa.help.pub.pd b/ceammc/ext/doc/hoa/hoa.help.pub.pd new file mode 100644 index 0000000000..b3ce2bafe1 --- /dev/null +++ b/ceammc/ext/doc/hoa/hoa.help.pub.pd @@ -0,0 +1,8 @@ +#N canvas 65 223 442 110 10; +#X obj 1 1 cnv 15 359 40 empty \$0-hoa.header empty 3 12 0 18 -212212 +-1 0; +#X text 144 0 HOA Library; +#X text 4 13 by J. Colafrancesco \, P. Guillot \, E. Paris & T. Le +Meur; +#X text 87 27 2012-2015 CICM | Universite Paris 8; +#X coords 0 -1 1 1 361 42 2 0 0; diff --git a/ceammc/ext/doc/hoa/hoa.objects.txt b/ceammc/ext/doc/hoa/hoa.objects.txt new file mode 100644 index 0000000000..ab2a6aaf26 --- /dev/null +++ b/ceammc/ext/doc/hoa/hoa.objects.txt @@ -0,0 +1,40 @@ +hoa-help.pd HOA\ Library High Order Ambisonics Library.; +hoa.2d.decoder~-help.pd hoa.2d.decoder~ An ambisonic decoder.; +hoa.2d.encoder~-help.pd hoa.2d.encoder~ An ambisonic encoder.; +hoa.map-help.pd hoa.map A GUI to spatialize sources on a map.; +hoa.2d.map~-help.pd hoa.2d.map~ An ambisonic sources spatializer.; +hoa.2d.meter~-help.pd hoa.2d.meter~ A circular meter with sound field descriptor.; +hoa.2d.optim~-help.pd hoa.2d.optim~ An ambisonic sound field optimization.; +hoa.2d.projector~-help.pd hoa.2d.projector~ A plane waves decomposer from circular harmonics domain.; +hoa.2d.recomposer~-help.pd hoa.2d.recomposer~ A plane waves recomposer to circular harmonics domain.; +hoa.2d.rotate~-help.pd hoa.2d.rotate~ An ambisonic sound field rotation.; +hoa.2d.scope~-help.pd hoa.2d.scope~ An ambisonic harmonics visualizer.; +hoa.2d.space-help.pd hoa.2d.space A GUI to design plane waves domain.; +hoa.2d.wider~-help.pd hoa.2d.wider~ An ambisonic fractional orders simulator.; +hoa.2d.exchanger~-help.pd hoa.2d.exchanger~ An ambisonic standards exchanger.; +hoa.3d.decoder~-help.pd hoa.3d.decoder~ An ambisonic decoder.; +hoa.3d.encoder~-help.pd hoa.3d.encoder~ An ambisonic encoder.; +hoa.3d.map-help.pd hoa.3d.map A GUI to spatialize sources on a map.; +hoa.3d.map~-help.pd hoa.3d.map~ An ambisonic sources spatializer.; +hoa.3d.meter~-help.pd hoa.3d.meter~ A multi spherical meter with sound field descriptor.; +hoa.3d.optim~-help.pd hoa.3d.optim~ An ambisonic sound field optimization.; +hoa.3d.wider~-help.pd hoa.3d.wider~ An ambisonic fractional orders simulator.; +hoa.3d.scope~-help.pd hoa.3d.scope~ An ambisonic harmonics visualizer.; +hoa.3d.exchanger~-help.pd hoa.3d.exchanger~ An ambisonic standards exchanger.; +hoa.connect-help.pd hoa.connect A connector for hoa objects.; +hoa.dac~-help.pd hoa.dac~ A custom dac~ with matlab syntax.; +hoa.io-help.pd hoa.io A set of inlet and outlet for hoa.process.; +hoa.pi-help.pd hoa.pi A good pi number.; +hoa.pi~-help.pd hoa.pi~ A good pi number for signal.; +hoa.process~-help.pd hoa.process~ A multi-patcher for harmonics and plane waves domains.; +hoa.thisprocess~-help.pd hoa.thisprocess~ A patcher informer for hoa.process.; +hoa.fx.delay~-help.pd hoa.fx.delay~ A delay sound field diffuser.; +hoa.fx.dephaser~-help.pd hoa.fx.dephaser~ A fft dephaser processing.; +hoa.fx.convolve~-help.pd hoa.fx.convolve~ A zero latency convolution reverb' for sound fields.; +hoa.fx.freeverb~-help.pd hoa.fx.freeverb~ A freeverb reverb' for sound fields.; +hoa.fx.gain~-help.pd hoa.fx.gain~ A multigain for sound fields.; +hoa.fx.ringmod~-help.pd hoa.fx.ringmod~ A ring modulation sound field diffuser.; +hoa.fx.mirror~-help.pd hoa.fx.mirror~ A mirror for sound field.; +hoa.syn.delay~-help.pd hoa.syn.delay~ A delay sound field synthesizer.; +hoa.syn.grain~-help.pd hoa.syn.grain~ A granular sound field synthesizer.; +hoa.syn.ringmod~-help.pd hoa.syn.ringmod~ A ring modulation sound field synthesizer.; diff --git a/ceammc/ext/doc/hoa/hoa.proc.ex.pd b/ceammc/ext/doc/hoa/hoa.proc.ex.pd new file mode 100644 index 0000000000..bcb2954f79 --- /dev/null +++ b/ceammc/ext/doc/hoa/hoa.proc.ex.pd @@ -0,0 +1,4 @@ +#N canvas 386 267 499 330 10; +#X obj 89 278 hoa.out~ 1; +#X obj 89 47 hoa.in~ 1; +#X connect 1 0 0 0; diff --git a/ceammc/ext/doc/hoa/hoa.proc.ex2.pd b/ceammc/ext/doc/hoa/hoa.proc.ex2.pd new file mode 100644 index 0000000000..7eb0f6db2b --- /dev/null +++ b/ceammc/ext/doc/hoa/hoa.proc.ex2.pd @@ -0,0 +1,7 @@ +#N canvas 386 267 499 330 10; +#X obj 129 278 hoa.out~ 1; +#X obj 49 47 hoa.in~; +#X obj 49 278 hoa.out~; +#X obj 129 47 hoa.in~ 2; +#X connect 1 0 2 0; +#X connect 3 0 0 0; diff --git a/ceammc/ext/doc/hoa/hoa.proc.harmo.ex.pd b/ceammc/ext/doc/hoa/hoa.proc.harmo.ex.pd new file mode 100644 index 0000000000..933dda12ca --- /dev/null +++ b/ceammc/ext/doc/hoa/hoa.proc.harmo.ex.pd @@ -0,0 +1,12 @@ +#N canvas 386 267 499 330 10; +#X obj 89 47 hoa.in 1; +#X obj 239 108 hoa.out 1; +#X obj 89 76 print \$1 \$2 \$3 \$4 \$5; +#X obj 239 47 hoa.in 2; +#X obj 89 108 hoa.out 2; +#X obj 348 42 hoa.in~; +#X obj 408 42 hoa.in~ 1; +#X obj 375 120 hoa.out~; +#X connect 0 0 2 0; +#X connect 0 0 4 0; +#X connect 3 0 1 0; diff --git a/ceammc/ext/doc/hoa/hoa.proc.plwav.ex.pd b/ceammc/ext/doc/hoa/hoa.proc.plwav.ex.pd new file mode 100644 index 0000000000..855c30cb9c --- /dev/null +++ b/ceammc/ext/doc/hoa/hoa.proc.plwav.ex.pd @@ -0,0 +1,7 @@ +#N canvas 386 267 499 330 10; +#X obj 89 47 hoa.in 1; +#X obj 89 278 hoa.out 1; +#X obj 89 96 print \$1 \$2 \$3 \$4; +#X obj 260 63 hoa.in~; +#X obj 320 63 hoa.in~ 1; +#X connect 0 0 2 0; diff --git a/ceammc/ext/doc/hoa/hoa.process.txt b/ceammc/ext/doc/hoa/hoa.process.txt new file mode 100644 index 0000000000..42c67865d0 --- /dev/null +++ b/ceammc/ext/doc/hoa/hoa.process.txt @@ -0,0 +1,9 @@ +hoa.fx.convolve~-help.pd hoa.fx.convolve~ A zero latency convolution reverb' for sound fields.; +hoa.fx.delay~-help.pd hoa.fx.delay~ A delay sound field diffuser.; +hoa.fx.freeverb~-help.pd hoa.fx.freeverb~ A freeverb reverb' for sound fields.; +hoa.fx.gain~-help.pd hoa.fx.gain~ A multigain for sound fields.; +hoa.fx.ringmod~-help.pd hoa.fx.ringmod~ A ring modulation sound field diffuser.; +hoa.fx.mirror~-help.pd hoa.fx.mirror~ A mirror for sound fields.; +hoa.syn.delay~-help.pd hoa.syn.delay~ A delay sound field synthesizer.; +hoa.syn.grain~-help.pd hoa.syn.grain~ A granular sound field synthesizer.; +hoa.syn.ringmod~-help.pd hoa.syn.ringmod~ A ring modulation sound field synthesizer.; \ No newline at end of file diff --git a/ceammc/ext/doc/hoa/hoa.soundgrain.pd b/ceammc/ext/doc/hoa/hoa.soundgrain.pd new file mode 100644 index 0000000000..dac55dc46a --- /dev/null +++ b/ceammc/ext/doc/hoa/hoa.soundgrain.pd @@ -0,0 +1,750 @@ +#N canvas 285 64 851 601 10; +#N canvas 86 221 900 507 granular 0; +#X obj 463 201 random 1000; +#X obj 463 221 / 1000; +#X obj 33 221 clip~ 0 1; +#X obj 33 184 line~; +#X obj 33 68 nbx 5 14 0 1 0 0 empty empty empty 0 -8 0 10 -262144 -1 +-1 0.95 256; +#X obj 18 273 *~; +#X obj 83 361 *~; +#X obj 299 278 samphold~; +#X obj 400 244 phasor~; +#X obj 299 141 +~ 1; +#X obj 299 167 *~ 0.5; +#X obj 299 101 noise~; +#X obj 326 58 nbx 5 14 0 1 0 0 empty empty empty 0 -8 0 10 -262144 +-1 -1 0.3 256; +#N canvas 0 50 450 300 >~ 0; +#X obj 67 114 max~ 0; +#X obj 67 175 -~ 0; +#X obj 130 188 /~; +#X obj 130 152 sig~ -1; +#X obj 145 114 -~; +#X obj 67 212 *~; +#X obj 67 17 inlet~; +#X obj 67 252 outlet~; +#X obj 132 15 inlet; +#X connect 0 0 1 0; +#X connect 1 0 5 0; +#X connect 2 0 5 1; +#X connect 3 0 2 0; +#X connect 4 0 2 1; +#X connect 5 0 7 0; +#X connect 6 0 0 0; +#X connect 6 0 4 1; +#X connect 8 0 4 0; +#X connect 8 0 1 1; +#X connect 8 0 0 1; +#X restore 299 196 pd >~; +#X text 317 37 Rarefaction; +#X text 427 9 Size; +#X obj 299 324 *~; +#X obj 400 278 *~ 513; +#X text 33 40 Feedback; +#X obj 400 109 sig~ 1000; +#X obj 400 183 /~ 80; +#X obj 149 243 samphold~; +#X obj 83 327 vd~ \$0-hoa_grain; +#X obj 83 271 delwrite~ \$0-hoa_grain 5500; +#X obj 164 68 nbx 5 14 1 5000 0 0 empty empty empty 0 -8 0 10 -262144 +-1 -1 400 256; +#X obj 149 101 noise~; +#X obj 149 130 *~ 1; +#X obj 149 158 +~; +#X obj 149 215 +~ 1; +#X obj 149 184 abs~; +#X text 160 40 Delay; +#X obj 502 84 random; +#X obj 427 160 +; +#X obj 195 101 * 0.1; +#X obj 502 62 metro; +#X obj 427 133 t b f; +#X obj 83 432 outlet~; +#X obj 432 24 nbx 5 14 0 1e+06 0 0 empty empty empty 0 -8 0 10 -262144 +-1 -1 84 256; +#X obj 71 3 inlet; +#X obj 21 20 inlet~; +#X obj 151 3 inlet; +#X obj 231 3 inlet; +#X obj 291 3 inlet; +#X obj 400 307 tabread4~ \$0-hoa_hann2; +#X obj 502 137 * 0.3; +#X obj 463 181 msg.onload; +#X obj 580 22 msg.onload 1; +#X connect 0 0 1 0; +#X connect 1 0 8 1; +#X connect 2 0 5 1; +#X connect 3 0 2 0; +#X connect 4 0 3 0; +#X connect 5 0 23 0; +#X connect 6 0 5 0; +#X connect 6 0 36 0; +#X connect 7 0 16 0; +#X connect 8 0 7 1; +#X connect 8 0 17 0; +#X connect 8 0 21 1; +#X connect 9 0 10 0; +#X connect 10 0 13 0; +#X connect 11 0 9 0; +#X connect 12 0 13 1; +#X connect 13 0 7 0; +#X connect 16 0 6 1; +#X connect 17 0 43 0; +#X connect 19 0 20 0; +#X connect 20 0 8 0; +#X connect 21 0 22 0; +#X connect 22 0 6 0; +#X connect 24 0 27 1; +#X connect 24 0 33 0; +#X connect 25 0 26 0; +#X connect 26 0 27 0; +#X connect 27 0 29 0; +#X connect 28 0 21 0; +#X connect 29 0 28 0; +#X connect 31 0 44 0; +#X connect 32 0 20 1; +#X connect 33 0 26 1; +#X connect 34 0 31 0; +#X connect 35 0 32 0; +#X connect 35 1 32 1; +#X connect 37 0 32 0; +#X connect 37 0 34 1; +#X connect 37 0 31 1; +#X connect 38 0 37 0; +#X connect 39 0 23 0; +#X connect 40 0 24 0; +#X connect 41 0 4 0; +#X connect 42 0 12 0; +#X connect 43 0 16 1; +#X connect 44 0 35 0; +#X connect 45 0 0 0; +#X connect 46 0 34 0; +#X restore 42 368 pd granular; +#X msg 738 265 0; +#X obj 632 314 osc~; +#X obj 632 266 samplerate~; +#X obj 632 337 *~ -0.5; +#X obj 632 360 +~ 0.5; +#X obj 632 290 / 512; +#X obj 624 385 tabwrite~ \$0-hoa_hann2; +#X obj 628 448 table \$0-hoa_hann2 512; +#N canvas 86 221 900 507 granular 0; +#X obj 463 201 random 1000; +#X obj 463 221 / 1000; +#X obj 33 221 clip~ 0 1; +#X obj 33 184 line~; +#X obj 33 68 nbx 5 14 0 1 0 0 empty empty empty 0 -8 0 10 -262144 -1 +-1 0.95 256; +#X obj 18 273 *~; +#X obj 83 361 *~; +#X obj 299 278 samphold~; +#X obj 400 244 phasor~; +#X obj 299 141 +~ 1; +#X obj 299 167 *~ 0.5; +#X obj 299 101 noise~; +#X obj 326 58 nbx 5 14 0 1 0 0 empty empty empty 0 -8 0 10 -262144 +-1 -1 0.3 256; +#N canvas 0 50 450 300 >~ 0; +#X obj 67 114 max~ 0; +#X obj 67 175 -~ 0; +#X obj 130 188 /~; +#X obj 130 152 sig~ -1; +#X obj 145 114 -~; +#X obj 67 212 *~; +#X obj 67 17 inlet~; +#X obj 67 252 outlet~; +#X obj 132 15 inlet; +#X connect 0 0 1 0; +#X connect 1 0 5 0; +#X connect 2 0 5 1; +#X connect 3 0 2 0; +#X connect 4 0 2 1; +#X connect 5 0 7 0; +#X connect 6 0 0 0; +#X connect 6 0 4 1; +#X connect 8 0 4 0; +#X connect 8 0 1 1; +#X connect 8 0 0 1; +#X restore 299 196 pd >~; +#X text 317 37 Rarefaction; +#X text 427 9 Size; +#X obj 299 324 *~; +#X obj 400 278 *~ 513; +#X text 33 40 Feedback; +#X obj 400 109 sig~ 1000; +#X obj 149 243 samphold~; +#X obj 164 68 nbx 5 14 1 5000 0 0 empty empty empty 0 -8 0 10 -262144 +-1 -1 800 256; +#X obj 149 101 noise~; +#X obj 149 130 *~ 1; +#X obj 149 158 +~; +#X obj 149 215 +~ 1; +#X obj 149 184 abs~; +#X text 160 40 Delay; +#X obj 502 84 random; +#X obj 427 160 +; +#X obj 195 101 * 0.1; +#X obj 502 62 metro; +#X obj 427 133 t b f; +#X obj 83 432 outlet~; +#X obj 432 24 nbx 5 14 0 1e+06 0 0 empty empty empty 0 -8 0 10 -262144 +-1 -1 101 256; +#X obj 71 3 inlet; +#X obj 21 20 inlet~; +#X obj 151 3 inlet; +#X obj 231 3 inlet; +#X obj 291 3 inlet; +#X obj 83 271 delwrite~ \$1-hoa_grain 5500; +#X obj 83 327 vd~ \$1-hoa_grain; +#X obj 400 307 tabread4~ \$0-hoa_hann2; +#X obj 502 137 * 0.3; +#X obj 559 199 line~; +#X msg 565 161 \$1 20; +#X obj 400 202 /~; +#X obj 463 181 msg.onload; +#X obj 580 22 msg.onload 1; +#X connect 0 0 1 0; +#X connect 1 0 8 1; +#X connect 2 0 5 1; +#X connect 3 0 2 0; +#X connect 4 0 3 0; +#X connect 5 0 40 0; +#X connect 6 0 5 0; +#X connect 6 0 33 0; +#X connect 7 0 16 0; +#X connect 8 0 7 1; +#X connect 8 0 17 0; +#X connect 8 0 20 1; +#X connect 9 0 10 0; +#X connect 10 0 13 0; +#X connect 11 0 9 0; +#X connect 12 0 13 1; +#X connect 13 0 7 0; +#X connect 16 0 6 1; +#X connect 17 0 42 0; +#X connect 19 0 46 0; +#X connect 20 0 41 0; +#X connect 21 0 24 1; +#X connect 21 0 30 0; +#X connect 22 0 23 0; +#X connect 23 0 24 0; +#X connect 24 0 26 0; +#X connect 25 0 20 0; +#X connect 26 0 25 0; +#X connect 28 0 43 0; +#X connect 29 0 45 0; +#X connect 30 0 23 1; +#X connect 31 0 28 0; +#X connect 32 0 29 0; +#X connect 32 1 29 1; +#X connect 34 0 29 0; +#X connect 34 0 31 1; +#X connect 34 0 28 1; +#X connect 35 0 34 0; +#X connect 36 0 40 0; +#X connect 37 0 21 0; +#X connect 38 0 4 0; +#X connect 39 0 12 0; +#X connect 41 0 6 0; +#X connect 42 0 16 1; +#X connect 43 0 32 0; +#X connect 44 0 46 1; +#X connect 45 0 44 0; +#X connect 46 0 8 0; +#X connect 47 0 0 0; +#X connect 48 0 31 0; +#X restore 122 368 pd granular; +#N canvas 86 221 900 507 granular 0; +#X obj 463 201 random 1000; +#X obj 463 221 / 1000; +#X obj 33 221 clip~ 0 1; +#X obj 33 184 line~; +#X obj 33 68 nbx 5 14 0 1 0 0 empty empty empty 0 -8 0 10 -262144 -1 +-1 0.95 256; +#X obj 18 273 *~; +#X obj 83 361 *~; +#X obj 299 278 samphold~; +#X obj 400 244 phasor~; +#X obj 299 141 +~ 1; +#X obj 299 167 *~ 0.5; +#X obj 299 101 noise~; +#X obj 326 58 nbx 5 14 0 1 0 0 empty empty empty 0 -8 0 10 -262144 +-1 -1 0.3 256; +#N canvas 0 50 450 300 >~ 0; +#X obj 67 114 max~ 0; +#X obj 67 175 -~ 0; +#X obj 130 188 /~; +#X obj 130 152 sig~ -1; +#X obj 145 114 -~; +#X obj 67 212 *~; +#X obj 67 17 inlet~; +#X obj 67 252 outlet~; +#X obj 132 15 inlet; +#X connect 0 0 1 0; +#X connect 1 0 5 0; +#X connect 2 0 5 1; +#X connect 3 0 2 0; +#X connect 4 0 2 1; +#X connect 5 0 7 0; +#X connect 6 0 0 0; +#X connect 6 0 4 1; +#X connect 8 0 4 0; +#X connect 8 0 1 1; +#X connect 8 0 0 1; +#X restore 299 196 pd >~; +#X text 317 37 Rarefaction; +#X text 427 9 Size; +#X obj 299 324 *~; +#X obj 400 278 *~ 513; +#X text 33 40 Feedback; +#X obj 400 109 sig~ 1000; +#X obj 149 243 samphold~; +#X obj 164 68 nbx 5 14 1 5000 0 0 empty empty empty 0 -8 0 10 -262144 +-1 -1 2800 256; +#X obj 149 101 noise~; +#X obj 149 130 *~ 1; +#X obj 149 158 +~; +#X obj 149 215 +~ 1; +#X obj 149 184 abs~; +#X text 160 40 Delay; +#X obj 502 84 random; +#X obj 427 160 +; +#X obj 195 101 * 0.1; +#X obj 502 62 metro; +#X obj 427 133 t b f; +#X obj 83 432 outlet~; +#X obj 432 24 nbx 5 14 0 1e+06 0 0 empty empty empty 0 -8 0 10 -262144 +-1 -1 170 256; +#X obj 71 3 inlet; +#X obj 21 20 inlet~; +#X obj 151 3 inlet; +#X obj 231 3 inlet; +#X obj 291 3 inlet; +#X obj 83 271 delwrite~ \$2-hoa_grain 5500; +#X obj 83 327 vd~ \$2-hoa_grain; +#X obj 400 307 tabread4~ \$0-hoa_hann2; +#X obj 502 137 * 0.3; +#X obj 400 183 /~; +#X obj 559 199 line~; +#X msg 565 161 \$1 20; +#X obj 463 181 msg.onload; +#X obj 580 22 msg.onload 1; +#X connect 0 0 1 0; +#X connect 1 0 8 1; +#X connect 2 0 5 1; +#X connect 3 0 2 0; +#X connect 4 0 3 0; +#X connect 5 0 40 0; +#X connect 6 0 5 0; +#X connect 6 0 33 0; +#X connect 7 0 16 0; +#X connect 8 0 7 1; +#X connect 8 0 17 0; +#X connect 8 0 20 1; +#X connect 9 0 10 0; +#X connect 10 0 13 0; +#X connect 11 0 9 0; +#X connect 12 0 13 1; +#X connect 13 0 7 0; +#X connect 16 0 6 1; +#X connect 17 0 42 0; +#X connect 19 0 44 0; +#X connect 20 0 41 0; +#X connect 21 0 24 1; +#X connect 21 0 30 0; +#X connect 22 0 23 0; +#X connect 23 0 24 0; +#X connect 24 0 26 0; +#X connect 25 0 20 0; +#X connect 26 0 25 0; +#X connect 28 0 43 0; +#X connect 29 0 46 0; +#X connect 30 0 23 1; +#X connect 31 0 28 0; +#X connect 32 0 29 0; +#X connect 32 1 29 1; +#X connect 34 0 29 0; +#X connect 34 0 31 1; +#X connect 34 0 28 1; +#X connect 35 0 34 0; +#X connect 36 0 40 0; +#X connect 37 0 21 0; +#X connect 38 0 4 0; +#X connect 39 0 12 0; +#X connect 41 0 6 0; +#X connect 42 0 16 1; +#X connect 43 0 32 0; +#X connect 44 0 8 0; +#X connect 45 0 44 1; +#X connect 46 0 45 0; +#X connect 47 0 0 0; +#X connect 48 0 31 0; +#X restore 202 368 pd granular; +#N canvas 86 221 900 507 granular 0; +#X obj 463 201 random 1000; +#X obj 463 221 / 1000; +#X obj 33 221 clip~ 0 1; +#X obj 33 184 line~; +#X obj 33 68 nbx 5 14 0 1 0 0 empty empty empty 0 -8 0 10 -262144 -1 +-1 0.95 256; +#X obj 18 273 *~; +#X obj 83 361 *~; +#X obj 299 278 samphold~; +#X obj 400 244 phasor~; +#X obj 299 141 +~ 1; +#X obj 299 167 *~ 0.5; +#X obj 299 101 noise~; +#X obj 326 58 nbx 5 14 0 1 0 0 empty empty empty 0 -8 0 10 -262144 +-1 -1 0.3 256; +#N canvas 0 50 450 300 >~ 0; +#X obj 67 114 max~ 0; +#X obj 67 175 -~ 0; +#X obj 130 188 /~; +#X obj 130 152 sig~ -1; +#X obj 145 114 -~; +#X obj 67 212 *~; +#X obj 67 17 inlet~; +#X obj 67 252 outlet~; +#X obj 132 15 inlet; +#X connect 0 0 1 0; +#X connect 1 0 5 0; +#X connect 2 0 5 1; +#X connect 3 0 2 0; +#X connect 4 0 2 1; +#X connect 5 0 7 0; +#X connect 6 0 0 0; +#X connect 6 0 4 1; +#X connect 8 0 4 0; +#X connect 8 0 1 1; +#X connect 8 0 0 1; +#X restore 299 196 pd >~; +#X text 317 37 Rarefaction; +#X text 427 9 Size; +#X obj 299 324 *~; +#X obj 400 278 *~ 513; +#X text 33 40 Feedback; +#X obj 400 109 sig~ 1000; +#X obj 149 243 samphold~; +#X obj 164 68 nbx 5 14 1 5000 0 0 empty empty empty 0 -8 0 10 -262144 +-1 -1 4000 256; +#X obj 149 101 noise~; +#X obj 149 130 *~ 1; +#X obj 149 158 +~; +#X obj 149 215 +~ 1; +#X obj 149 184 abs~; +#X text 160 40 Delay; +#X obj 502 84 random; +#X obj 427 160 +; +#X obj 195 101 * 0.1; +#X obj 502 62 metro; +#X obj 427 133 t b f; +#X obj 83 432 outlet~; +#X obj 432 24 nbx 5 14 0 1e+06 0 0 empty empty empty 0 -8 0 10 -262144 +-1 -1 16 256; +#X obj 71 3 inlet; +#X obj 21 20 inlet~; +#X obj 151 3 inlet; +#X obj 231 3 inlet; +#X obj 291 3 inlet; +#X obj 83 271 delwrite~ \$3-hoa_grain 5500; +#X obj 83 327 vd~ \$3-hoa_grain; +#X obj 400 307 tabread4~ \$0-hoa_hann2; +#X obj 502 137 * 0.3; +#X obj 559 199 line~; +#X msg 565 161 \$1 20; +#X obj 400 208 /~; +#X obj 580 22 msg.onload 1; +#X obj 463 181 msg.onload; +#X connect 0 0 1 0; +#X connect 1 0 8 1; +#X connect 2 0 5 1; +#X connect 3 0 2 0; +#X connect 4 0 3 0; +#X connect 5 0 40 0; +#X connect 6 0 5 0; +#X connect 6 0 33 0; +#X connect 7 0 16 0; +#X connect 8 0 7 1; +#X connect 8 0 17 0; +#X connect 8 0 20 1; +#X connect 9 0 10 0; +#X connect 10 0 13 0; +#X connect 11 0 9 0; +#X connect 12 0 13 1; +#X connect 13 0 7 0; +#X connect 16 0 6 1; +#X connect 17 0 42 0; +#X connect 19 0 46 0; +#X connect 20 0 41 0; +#X connect 21 0 24 1; +#X connect 21 0 30 0; +#X connect 22 0 23 0; +#X connect 23 0 24 0; +#X connect 24 0 26 0; +#X connect 25 0 20 0; +#X connect 26 0 25 0; +#X connect 28 0 43 0; +#X connect 29 0 45 0; +#X connect 30 0 23 1; +#X connect 31 0 28 0; +#X connect 32 0 29 0; +#X connect 32 1 29 1; +#X connect 34 0 29 0; +#X connect 34 0 31 1; +#X connect 34 0 28 1; +#X connect 35 0 34 0; +#X connect 36 0 40 0; +#X connect 37 0 21 0; +#X connect 38 0 4 0; +#X connect 39 0 12 0; +#X connect 41 0 6 0; +#X connect 42 0 16 1; +#X connect 43 0 32 0; +#X connect 44 0 46 1; +#X connect 45 0 44 0; +#X connect 46 0 8 0; +#X connect 47 0 31 0; +#X connect 48 0 0 0; +#X restore 281 368 pd granular; +#X obj 299 130 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -8 0 10 +-262144 -1 -1 400 256; +#X obj 416 255 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -8 0 10 +-262144 -1 -1 0.95 256; +#X obj 486 255 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -8 0 10 +-262144 -1 -1 0.3 256; +#X obj 301 224 * 2; +#X obj 159 475 outlet~; +#X obj 401 224 * 10; +#X obj 351 224 * 7; +#N canvas 0 50 845 466 soundlost 0; +#X msg 675 149 0; +#X obj 569 198 osc~; +#X obj 569 150 samplerate~; +#X obj 569 221 *~ -0.5; +#X obj 569 244 +~ 0.5; +#X obj 89 254 outlet~; +#X obj 89 178 noise~; +#X obj 355 475 / 1000; +#X obj 355 505 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -8 0 10 +-262144 -1 -1 0.749 256; +#X obj 473 487 t b f; +#X obj 473 539 list prepend; +#X obj 473 517 list prepend; +#X obj 510 650 pack 0 f; +#X obj 510 619 t b f; +#X obj 355 259 t b b; +#X obj 355 565 pack f f; +#X obj 355 226 metro 500; +#X msg 355 177 1; +#X obj 355 453 + 200; +#X obj 355 140 t b b; +#X obj 355 300 random 600; +#X obj 406 178 random 800; +#X obj 406 201 + 200; +#X obj 759 198 osc~; +#X obj 759 150 samplerate~; +#X obj 759 221 *~ -0.5; +#X obj 759 244 +~ 0.5; +#X obj 473 396 -; +#X obj 473 355 t b f; +#X msg 473 376 1; +#X obj 473 457 int; +#X obj 473 435 + 1; +#X obj 473 299 random 255; +#X obj 473 415 * 254; +#X msg 865 149 0.5; +#X obj 386 35 table \$0-hoa_filter 256; +#X obj 355 668 tabwrite \$0-hoa_filter; +#X obj 387 74 table \$0-hoa_hann 512; +#X obj 561 269 tabwrite~ \$0-hoa_hann; +#X obj 751 269 tabwrite~ \$0-hoa_prob; +#X msg 728 95 \; \$0-hoa_filter const 0; +#X obj 536 35 table \$0-hoa_prob 256; +#X obj 473 334 tabread \$0-hoa_prob; +#N canvas 0 50 427 426 spectralfilter 0; +#X obj 91 140 *~; +#X obj 91 174 rfft~; +#X obj 91 209 *~; +#X obj 124 209 *~; +#X obj 9 16 block~ 512 4; +#X obj 92 292 *~; +#X obj 91 245 rifft~; +#X obj 92 327 outlet~; +#X obj 207 163 *~; +#X obj 208 221 /~ 768; +#X obj 208 189 *~; +#X obj 206 134 tabreceive~ \$0-hoa_filter; +#X obj 113 267 tabreceive~ \$0-hoa_hann; +#X obj 141 96 tabreceive~ \$0-hoa_hann; +#X obj 91 80 inlet~; +#X connect 0 0 1 0; +#X connect 1 0 2 0; +#X connect 1 1 3 0; +#X connect 2 0 6 0; +#X connect 3 0 6 1; +#X connect 5 0 7 0; +#X connect 6 0 5 0; +#X connect 8 0 10 0; +#X connect 8 0 10 1; +#X connect 9 0 3 1; +#X connect 9 0 2 1; +#X connect 10 0 9 0; +#X connect 11 0 8 0; +#X connect 11 0 8 1; +#X connect 12 0 5 1; +#X connect 13 0 0 1; +#X connect 14 0 0 0; +#X restore 89 206 pd spectralfilter; +#X obj 569 174 / 512; +#X obj 759 174 / 700; +#X msg 522 487 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0; +#X obj 473 571 list split 25; +#X obj 473 597 list split 24; +#X obj 89 233 *~ 8; +#X obj 561 82 msg.onload; +#X connect 0 0 1 1; +#X connect 1 0 3 0; +#X connect 2 0 44 0; +#X connect 3 0 4 0; +#X connect 4 0 38 0; +#X connect 6 0 43 0; +#X connect 7 0 8 0; +#X connect 8 0 15 0; +#X connect 9 0 11 0; +#X connect 9 1 10 1; +#X connect 10 0 47 0; +#X connect 11 0 10 0; +#X connect 12 0 36 0; +#X connect 13 0 12 0; +#X connect 13 1 12 1; +#X connect 14 0 20 0; +#X connect 14 1 32 0; +#X connect 15 0 36 0; +#X connect 16 0 14 0; +#X connect 16 0 21 0; +#X connect 17 0 16 0; +#X connect 18 0 7 0; +#X connect 19 0 17 0; +#X connect 19 1 46 0; +#X connect 20 0 18 0; +#X connect 21 0 22 0; +#X connect 22 0 16 1; +#X connect 23 0 25 0; +#X connect 24 0 45 0; +#X connect 25 0 26 0; +#X connect 26 0 39 0; +#X connect 27 0 33 0; +#X connect 28 0 29 0; +#X connect 28 1 27 1; +#X connect 29 0 27 0; +#X connect 30 0 9 0; +#X connect 30 0 15 1; +#X connect 31 0 30 0; +#X connect 32 0 42 0; +#X connect 33 0 31 0; +#X connect 34 0 23 1; +#X connect 42 0 28 0; +#X connect 43 0 49 0; +#X connect 44 0 1 0; +#X connect 45 0 23 0; +#X connect 46 0 11 0; +#X connect 47 0 11 1; +#X connect 47 0 48 0; +#X connect 48 1 13 0; +#X connect 49 0 5 0; +#X connect 50 0 0 0; +#X connect 50 0 19 0; +#X connect 50 0 2 0; +#X connect 50 0 34 0; +#X connect 50 0 24 0; +#X connect 50 0 38 0; +#X connect 50 0 39 0; +#X restore 108 278 pd soundlost; +#X obj 17 234 line; +#X obj 16 136 random 80; +#X msg 17 204 \$1 50; +#X obj 16 166 + 15; +#X obj 13 104 metro 2000; +#X obj 91 234 line; +#X msg 91 204 \$1 50; +#X obj 90 166 + 15; +#X obj 87 104 metro 2000; +#X obj 171 234 line; +#X msg 171 204 \$1 50; +#X obj 170 166 + 15; +#X obj 167 104 metro 2000; +#X obj 241 234 line; +#X msg 241 204 \$1 50; +#X obj 240 166 + 15; +#X obj 237 104 metro 2000; +#X obj 90 136 random 120; +#X obj 170 136 random 160; +#X obj 240 136 random 40; +#X obj 113 62 f 1; +#X obj 624 198 loadbang; +#X obj 370 129 msg.onload 400; +#X obj 400 159 msg.onload 0.95; +#X obj 440 189 msg.onload 0.3; +#X obj 108 33 msg.onload; +#X connect 0 0 16 0; +#X connect 1 0 2 1; +#X connect 2 0 4 0; +#X connect 3 0 6 0; +#X connect 4 0 5 0; +#X connect 5 0 7 0; +#X connect 6 0 2 0; +#X connect 9 0 16 0; +#X connect 10 0 16 0; +#X connect 11 0 16 0; +#X connect 12 0 0 2; +#X connect 12 0 15 0; +#X connect 12 0 17 0; +#X connect 12 0 18 0; +#X connect 13 0 11 3; +#X connect 13 0 10 3; +#X connect 13 0 9 3; +#X connect 13 0 0 3; +#X connect 14 0 11 4; +#X connect 14 0 10 4; +#X connect 14 0 9 4; +#X connect 14 0 0 4; +#X connect 15 0 9 2; +#X connect 17 0 11 2; +#X connect 18 0 10 2; +#X connect 19 0 0 0; +#X connect 19 0 9 0; +#X connect 19 0 10 0; +#X connect 19 0 11 0; +#X connect 20 0 0 1; +#X connect 21 0 23 0; +#X connect 22 0 20 0; +#X connect 23 0 22 0; +#X connect 24 0 21 0; +#X connect 25 0 9 1; +#X connect 26 0 25 0; +#X connect 27 0 26 0; +#X connect 28 0 37 0; +#X connect 29 0 10 1; +#X connect 30 0 29 0; +#X connect 31 0 30 0; +#X connect 32 0 38 0; +#X connect 33 0 11 1; +#X connect 34 0 33 0; +#X connect 35 0 34 0; +#X connect 36 0 39 0; +#X connect 37 0 27 0; +#X connect 38 0 31 0; +#X connect 39 0 35 0; +#X connect 40 0 24 0; +#X connect 40 0 28 0; +#X connect 40 0 32 0; +#X connect 40 0 36 0; +#X connect 41 0 1 0; +#X connect 41 0 3 0; +#X connect 41 0 7 0; +#X connect 42 0 12 0; +#X connect 43 0 13 0; +#X connect 44 0 14 0; +#X connect 45 0 40 0; diff --git a/ceammc/ext/doc/hoa/hoa.soundrone.pd b/ceammc/ext/doc/hoa/hoa.soundrone.pd new file mode 100644 index 0000000000..fd6bdc26cb --- /dev/null +++ b/ceammc/ext/doc/hoa/hoa.soundrone.pd @@ -0,0 +1,467 @@ +#N canvas 475 151 766 493 10; +#N canvas 0 50 804 588 inst 0; +#X obj 79 291 cos~; +#X obj 79 190 -~ 0.5; +#X obj 79 245 *~; +#X obj 79 268 clip~ -0.5 0.5; +#X obj 339 182 +~ 1; +#X obj 79 314 +~ 1; +#X obj 489 296 cos~; +#X obj 79 372 *~; +#X obj 489 270 *~; +#X obj 79 337 *~ 0.5; +#X obj 339 133 osc~ 0.3; +#X obj 339 162 *~; +#X obj 507 196 *~; +#X obj 504 246 +~ 1; +#X obj 79 90 *~; +#X obj 79 43 osc~ 0.001; +#X obj 507 163 osc~ 0.015; +#X obj 79 140 +~ 100; +#X obj 504 223 *~ 1; +#X obj 79 117 *~ 2; +#X obj 507 107 random 100; +#X obj 507 137 / 10000; +#X obj 507 68 metro 500; +#X obj 575 49 random 700; +#X obj 576 69 + 200; +#X obj 339 53 metro 500; +#X obj 408 30 random 700; +#X obj 408 54 + 200; +#X obj 339 107 / 1000; +#X obj 339 87 random 700; +#X obj 79 166 phasor~ 120; +#X obj 79 407 outlet~; +#X obj 226 18 bang; +#X obj 226 64 unpack s 0 0; +#X obj 78 -31 metro 500; +#X obj 147 -54 random 700; +#X obj 147 -30 + 200; +#X obj 78 3 random 700; +#X obj 79 22 / 100000; +#X obj 339 -13 msg.onload 1; +#X obj 226 41 patch.args; +#X connect 0 0 5 0; +#X connect 1 0 2 0; +#X connect 1 0 8 0; +#X connect 2 0 3 0; +#X connect 3 0 0 0; +#X connect 4 0 2 1; +#X connect 5 0 9 0; +#X connect 6 0 7 1; +#X connect 7 0 31 0; +#X connect 8 0 6 0; +#X connect 9 0 7 0; +#X connect 10 0 11 0; +#X connect 10 0 11 1; +#X connect 11 0 4 0; +#X connect 12 0 18 0; +#X connect 13 0 8 1; +#X connect 14 0 19 0; +#X connect 15 0 14 0; +#X connect 15 0 14 1; +#X connect 16 0 12 0; +#X connect 16 0 12 1; +#X connect 17 0 30 0; +#X connect 18 0 13 0; +#X connect 19 0 17 0; +#X connect 20 0 21 0; +#X connect 21 0 16 0; +#X connect 22 0 20 0; +#X connect 22 0 23 0; +#X connect 23 0 24 0; +#X connect 24 0 22 1; +#X connect 25 0 26 0; +#X connect 25 0 29 0; +#X connect 26 0 27 0; +#X connect 27 0 25 1; +#X connect 28 0 10 0; +#X connect 29 0 28 0; +#X connect 30 0 1 0; +#X connect 32 0 40 0; +#X connect 33 1 17 1; +#X connect 33 2 19 1; +#X connect 34 0 35 0; +#X connect 34 0 37 0; +#X connect 35 0 36 0; +#X connect 36 0 34 1; +#X connect 37 0 38 0; +#X connect 38 0 15 0; +#X connect 39 0 22 0; +#X connect 39 0 25 0; +#X connect 39 0 32 0; +#X connect 39 0 34 0; +#X connect 40 0 33 0; +#X restore 154 109 pd inst 175 1.8; +#N canvas 0 50 804 588 inst 0; +#X obj 79 291 cos~; +#X obj 79 190 -~ 0.5; +#X obj 79 245 *~; +#X obj 79 268 clip~ -0.5 0.5; +#X obj 339 182 +~ 1; +#X obj 79 314 +~ 1; +#X obj 489 296 cos~; +#X obj 79 372 *~; +#X obj 489 270 *~; +#X obj 79 337 *~ 0.5; +#X obj 339 133 osc~ 0.3; +#X obj 339 162 *~; +#X obj 507 196 *~; +#X obj 504 246 +~ 1; +#X obj 79 90 *~; +#X obj 79 43 osc~ 0.001; +#X obj 507 163 osc~ 0.015; +#X obj 79 140 +~ 100; +#X obj 504 223 *~ 1; +#X obj 79 117 *~ 2; +#X obj 507 107 random 100; +#X obj 507 137 / 10000; +#X obj 507 68 metro 500; +#X obj 575 49 random 700; +#X obj 576 69 + 200; +#X obj 339 53 metro 500; +#X obj 408 30 random 700; +#X obj 408 54 + 200; +#X obj 339 107 / 1000; +#X obj 339 87 random 700; +#X obj 79 166 phasor~ 120; +#X obj 79 407 outlet~; +#X obj 226 18 bang; +#X obj 226 64 unpack s 0 0; +#X obj 78 -31 metro 500; +#X obj 147 -54 random 700; +#X obj 147 -30 + 200; +#X obj 78 3 random 700; +#X obj 79 22 / 100000; +#X obj 339 -13 msg.onload 1; +#X obj 226 41 patch.args; +#X connect 0 0 5 0; +#X connect 1 0 2 0; +#X connect 1 0 8 0; +#X connect 2 0 3 0; +#X connect 3 0 0 0; +#X connect 4 0 2 1; +#X connect 5 0 9 0; +#X connect 6 0 7 1; +#X connect 7 0 31 0; +#X connect 8 0 6 0; +#X connect 9 0 7 0; +#X connect 10 0 11 0; +#X connect 10 0 11 1; +#X connect 11 0 4 0; +#X connect 12 0 18 0; +#X connect 13 0 8 1; +#X connect 14 0 19 0; +#X connect 15 0 14 0; +#X connect 15 0 14 1; +#X connect 16 0 12 0; +#X connect 16 0 12 1; +#X connect 17 0 30 0; +#X connect 18 0 13 0; +#X connect 19 0 17 0; +#X connect 20 0 21 0; +#X connect 21 0 16 0; +#X connect 22 0 20 0; +#X connect 22 0 23 0; +#X connect 23 0 24 0; +#X connect 24 0 22 1; +#X connect 25 0 26 0; +#X connect 25 0 29 0; +#X connect 26 0 27 0; +#X connect 27 0 25 1; +#X connect 28 0 10 0; +#X connect 29 0 28 0; +#X connect 30 0 1 0; +#X connect 32 0 40 0; +#X connect 33 1 17 1; +#X connect 33 2 19 1; +#X connect 34 0 35 0; +#X connect 34 0 37 0; +#X connect 35 0 36 0; +#X connect 36 0 34 1; +#X connect 37 0 38 0; +#X connect 38 0 15 0; +#X connect 39 0 22 0; +#X connect 39 0 25 0; +#X connect 39 0 32 0; +#X connect 39 0 34 0; +#X connect 40 0 33 0; +#X restore 254 109 pd inst 300 1.3; +#X obj 62 202 *~ 0.5; +#N canvas 245 121 804 588 inst 0; +#X obj 79 291 cos~; +#X obj 79 190 -~ 0.5; +#X obj 79 245 *~; +#X obj 79 268 clip~ -0.5 0.5; +#X obj 339 182 +~ 1; +#X obj 79 314 +~ 1; +#X obj 489 296 cos~; +#X obj 79 372 *~; +#X obj 489 270 *~; +#X obj 79 337 *~ 0.5; +#X obj 339 133 osc~ 0.3; +#X obj 339 162 *~; +#X obj 507 196 *~; +#X obj 504 246 +~ 1; +#X obj 79 90 *~; +#X obj 79 43 osc~ 0.001; +#X obj 507 163 osc~ 0.015; +#X obj 79 140 +~ 100; +#X obj 504 223 *~ 1; +#X obj 79 117 *~ 2; +#X obj 507 107 random 100; +#X obj 507 137 / 10000; +#X obj 507 68 metro 500; +#X obj 575 49 random 700; +#X obj 576 69 + 200; +#X obj 339 53 metro 500; +#X obj 408 30 random 700; +#X obj 408 54 + 200; +#X obj 339 107 / 1000; +#X obj 339 87 random 700; +#X obj 79 166 phasor~ 120; +#X obj 79 407 outlet~; +#X obj 226 18 bang; +#X obj 226 64 unpack s 0 0; +#X obj 78 -31 metro 500; +#X obj 147 -54 random 700; +#X obj 147 -30 + 200; +#X obj 78 3 random 700; +#X obj 79 22 / 100000; +#X obj 339 -13 msg.onload 1; +#X obj 226 41 patch.args; +#X connect 0 0 5 0; +#X connect 1 0 2 0; +#X connect 1 0 8 0; +#X connect 2 0 3 0; +#X connect 3 0 0 0; +#X connect 4 0 2 1; +#X connect 5 0 9 0; +#X connect 6 0 7 1; +#X connect 7 0 31 0; +#X connect 8 0 6 0; +#X connect 9 0 7 0; +#X connect 10 0 11 0; +#X connect 10 0 11 1; +#X connect 11 0 4 0; +#X connect 12 0 18 0; +#X connect 13 0 8 1; +#X connect 14 0 19 0; +#X connect 15 0 14 0; +#X connect 15 0 14 1; +#X connect 16 0 12 0; +#X connect 16 0 12 1; +#X connect 17 0 30 0; +#X connect 18 0 13 0; +#X connect 19 0 17 0; +#X connect 20 0 21 0; +#X connect 21 0 16 0; +#X connect 22 0 20 0; +#X connect 22 0 23 0; +#X connect 23 0 24 0; +#X connect 24 0 22 1; +#X connect 25 0 26 0; +#X connect 25 0 29 0; +#X connect 26 0 27 0; +#X connect 27 0 25 1; +#X connect 28 0 10 0; +#X connect 29 0 28 0; +#X connect 30 0 1 0; +#X connect 32 0 40 0; +#X connect 33 1 17 1; +#X connect 33 2 19 1; +#X connect 34 0 35 0; +#X connect 34 0 37 0; +#X connect 35 0 36 0; +#X connect 36 0 34 1; +#X connect 37 0 38 0; +#X connect 38 0 15 0; +#X connect 39 0 22 0; +#X connect 39 0 25 0; +#X connect 39 0 32 0; +#X connect 39 0 34 0; +#X connect 40 0 33 0; +#X restore 4 89 pd inst 100 2; +#N canvas 0 50 804 588 inst 0; +#X obj 79 291 cos~; +#X obj 79 190 -~ 0.5; +#X obj 79 245 *~; +#X obj 79 268 clip~ -0.5 0.5; +#X obj 339 182 +~ 1; +#X obj 79 314 +~ 1; +#X obj 489 296 cos~; +#X obj 79 372 *~; +#X obj 489 270 *~; +#X obj 79 337 *~ 0.5; +#X obj 339 133 osc~ 0.3; +#X obj 339 162 *~; +#X obj 507 196 *~; +#X obj 504 246 +~ 1; +#X obj 79 90 *~; +#X obj 79 43 osc~ 0.001; +#X obj 507 163 osc~ 0.015; +#X obj 79 140 +~ 100; +#X obj 504 223 *~ 1; +#X obj 79 117 *~ 2; +#X obj 507 107 random 100; +#X obj 507 137 / 10000; +#X obj 507 68 metro 500; +#X obj 575 49 random 700; +#X obj 576 69 + 200; +#X obj 339 53 metro 500; +#X obj 408 30 random 700; +#X obj 408 54 + 200; +#X obj 339 107 / 1000; +#X obj 339 87 random 700; +#X obj 79 166 phasor~ 120; +#X obj 79 407 outlet~; +#X obj 226 18 bang; +#X obj 226 64 unpack s 0 0; +#X obj 78 -31 metro 500; +#X obj 147 -54 random 700; +#X obj 147 -30 + 200; +#X obj 78 3 random 700; +#X obj 79 22 / 100000; +#X obj 339 -13 msg.onload 1; +#X obj 226 41 patch.args; +#X connect 0 0 5 0; +#X connect 1 0 2 0; +#X connect 1 0 8 0; +#X connect 2 0 3 0; +#X connect 3 0 0 0; +#X connect 4 0 2 1; +#X connect 5 0 9 0; +#X connect 6 0 7 1; +#X connect 7 0 31 0; +#X connect 8 0 6 0; +#X connect 9 0 7 0; +#X connect 10 0 11 0; +#X connect 10 0 11 1; +#X connect 11 0 4 0; +#X connect 12 0 18 0; +#X connect 13 0 8 1; +#X connect 14 0 19 0; +#X connect 15 0 14 0; +#X connect 15 0 14 1; +#X connect 16 0 12 0; +#X connect 16 0 12 1; +#X connect 17 0 30 0; +#X connect 18 0 13 0; +#X connect 19 0 17 0; +#X connect 20 0 21 0; +#X connect 21 0 16 0; +#X connect 22 0 20 0; +#X connect 22 0 23 0; +#X connect 23 0 24 0; +#X connect 24 0 22 1; +#X connect 25 0 26 0; +#X connect 25 0 29 0; +#X connect 26 0 27 0; +#X connect 27 0 25 1; +#X connect 28 0 10 0; +#X connect 29 0 28 0; +#X connect 30 0 1 0; +#X connect 32 0 40 0; +#X connect 33 1 17 1; +#X connect 33 2 19 1; +#X connect 34 0 35 0; +#X connect 34 0 37 0; +#X connect 35 0 36 0; +#X connect 36 0 34 1; +#X connect 37 0 38 0; +#X connect 38 0 15 0; +#X connect 39 0 22 0; +#X connect 39 0 25 0; +#X connect 39 0 32 0; +#X connect 39 0 34 0; +#X connect 40 0 33 0; +#X restore 64 109 pd inst 115 2.1; +#X obj 12 202 *~ 0.35; +#X obj 366 158 osc~ 0.3; +#X obj 366 63 metro 500; +#X msg 462 3 1; +#X obj 366 199 *~; +#X obj 173 202 *~ 0.15; +#X obj 117 200 *~ 0.3; +#X obj 166 260 *~; +#X obj 373 237 *~ 0.8; +#X obj 312 241 +~ 0.2; +#X obj 366 123 / 10000; +#X obj 366 101 random 3000; +#X obj 476 158 osc~ 0.3; +#X obj 476 63 metro 500; +#X obj 476 199 *~; +#X obj 483 237 *~ 0.8; +#X obj 422 241 +~ 0.2; +#X obj 476 123 / 10000; +#X obj 476 101 random 3000; +#X obj 115 260 *~; +#X obj 66 260 *~; +#X obj 15 260 *~; +#X obj 576 158 osc~ 0.3; +#X obj 576 63 metro 500; +#X obj 576 199 *~; +#X obj 583 237 *~ 0.8; +#X obj 522 241 +~ 0.2; +#X obj 576 123 / 10000; +#X obj 576 101 random 3000; +#X obj 686 158 osc~ 0.3; +#X obj 686 63 metro 500; +#X obj 686 199 *~; +#X obj 693 237 *~ 0.8; +#X obj 632 241 +~ 0.2; +#X obj 686 123 / 10000; +#X obj 686 101 random 3000; +#X obj 54 413 hip~; +#X obj 71 445 outlet~; +#X obj 308 27 loadbang; +#X connect 0 0 11 0; +#X connect 1 0 10 0; +#X connect 2 0 25 0; +#X connect 3 0 5 0; +#X connect 4 0 2 0; +#X connect 5 0 26 0; +#X connect 6 0 9 0; +#X connect 6 0 9 1; +#X connect 7 0 16 0; +#X connect 8 0 7 0; +#X connect 8 0 18 0; +#X connect 8 0 28 0; +#X connect 8 0 35 0; +#X connect 9 0 13 0; +#X connect 10 0 12 0; +#X connect 11 0 24 0; +#X connect 12 0 41 0; +#X connect 13 0 14 0; +#X connect 14 0 12 1; +#X connect 15 0 6 0; +#X connect 16 0 15 0; +#X connect 17 0 19 0; +#X connect 17 0 19 1; +#X connect 18 0 23 0; +#X connect 19 0 20 0; +#X connect 20 0 21 0; +#X connect 21 0 24 1; +#X connect 22 0 17 0; +#X connect 23 0 22 0; +#X connect 24 0 41 0; +#X connect 25 0 41 0; +#X connect 26 0 41 0; +#X connect 27 0 29 0; +#X connect 27 0 29 1; +#X connect 28 0 33 0; +#X connect 29 0 30 0; +#X connect 30 0 31 0; +#X connect 31 0 25 1; +#X connect 32 0 27 0; +#X connect 33 0 32 0; +#X connect 34 0 36 0; +#X connect 34 0 36 1; +#X connect 35 0 40 0; +#X connect 36 0 37 0; +#X connect 37 0 38 0; +#X connect 38 0 26 1; +#X connect 39 0 34 0; +#X connect 40 0 39 0; +#X connect 41 0 42 0; +#X connect 43 0 8 0; diff --git a/ceammc/ext/doc/hoa/hoa.syn.2d.encoder~.pd b/ceammc/ext/doc/hoa/hoa.syn.2d.encoder~.pd new file mode 100644 index 0000000000..16288bb7df --- /dev/null +++ b/ceammc/ext/doc/hoa/hoa.syn.2d.encoder~.pd @@ -0,0 +1,85 @@ +#N canvas 65 219 612 383 10; +#X obj 94 321 hoa.out~; +#X obj 12 5 c.loadmess; +#X text 68 213 Receive the signal; +#X text 70 343 Output the signal; +#X obj 94 279 *~; +#X obj 205 239 line~; +#X msg 205 217 \$1 20; +#X obj 94 235 hoa.in~ extra 1; +#X obj 12 52 hoa.thisprocess~; +#N canvas 0 50 450 300 print.domain.error 0; +#X obj 6 54 hoa.mode.sel; +#X obj 6 133 sel 0; +#X obj 7 214 print hoa.syn.encoder~; +#X msg 7 163 only valid in the circular harmonics domain.; +#X obj 6 24 inlet; +#X connect 0 0 1 0; +#X connect 1 1 3 0; +#X connect 3 0 2 0; +#X connect 4 0 0 0; +#X restore 43 88 pd print.domain.error; +#X text 239 15 This hoa.processing shows what performs the encoding +of a signal in the circular harmonics domain.; +#X obj 205 111 hoa.in extra 2; +#X obj 12 110 unpack 0 0 0; +#N canvas 821 80 450 300 exp_img 0; +#X obj 139 109 spigot; +#X obj 216 109 spigot; +#X obj 172 82 >= 0; +#X obj 139 181 *; +#X obj 179 245 outlet; +#X obj 154 161 abs; +#X obj 139 203 cos; +#X obj 249 82 < 0; +#X obj 216 181 *; +#X obj 231 161 abs; +#X obj 216 203 sin; +#X obj 186 9 inlet; +#X text 12 196 e^i|m|θ = cos(|m|θ); +#X text 252 186 else if m < 0; +#X text 262 196 e^i|m|θ = sin(|m|θ); +#X text 2 186 if m >= 0, f 10; +#X obj 249 61 r \$0-order; +#X obj 231 141 r \$0-order; +#X obj 154 141 r \$0-order; +#X obj 172 61 r \$0-order; +#X connect 0 0 3 0; +#X connect 1 0 8 0; +#X connect 2 0 0 1; +#X connect 3 0 6 0; +#X connect 5 0 3 1; +#X connect 6 0 4 0; +#X connect 7 0 1 1; +#X connect 8 0 10 0; +#X connect 9 0 8 1; +#X connect 10 0 4 0; +#X connect 11 0 1 0; +#X connect 11 0 0 0; +#X connect 16 0 7 0; +#X connect 17 0 9 0; +#X connect 18 0 5 0; +#X connect 19 0 2 0; +#X restore 205 186 pd exp_img; +#X text 210 169 e^i|m|θ; +#X obj 46 162 s \$0-degree; +#X obj 81 139 s \$0-order; +#X text 118 163 l; +#X text 148 140 m; +#X text 193 81 Extra 2 Receive the azimuth (in radian).; +#X obj 167 136 f 0; +#X obj 167 113 bang; +#X connect 1 0 8 0; +#X connect 4 0 0 0; +#X connect 5 0 4 1; +#X connect 6 0 5 0; +#X connect 7 0 4 0; +#X connect 8 0 12 0; +#X connect 8 1 9 0; +#X connect 8 3 21 0; +#X connect 11 0 13 0; +#X connect 12 1 15 0; +#X connect 12 2 16 0; +#X connect 13 0 6 0; +#X connect 20 0 13 0; +#X connect 21 0 20 0; diff --git a/ceammc/ext/doc/hoa/hoa.syn.3d.encoder~.pd b/ceammc/ext/doc/hoa/hoa.syn.3d.encoder~.pd new file mode 100644 index 0000000000..a03791874b --- /dev/null +++ b/ceammc/ext/doc/hoa/hoa.syn.3d.encoder~.pd @@ -0,0 +1,538 @@ +#N canvas 65 402 573 360 10; +#X obj 15 9 c.loadmess; +#X obj 15 56 hoa.thisprocess~; +#N canvas 0 50 450 300 print.domain.error 0; +#X obj 27 324 print hoa.syn.encoder~; +#X msg 27 273 only valid in the circular harmonics domain.; +#X obj 6 24 inlet; +#X obj 26 243 sel 1; +#X obj 85 62 unpack s s; +#X obj 185 90 sel harmonics planewaves; +#X obj 85 90 sel 2d 3d, f 14; +#X obj 125 142 f 1; +#X obj 85 178 +; +#X text 217 182 Harmonics 2d : mode 0; +#X text 217 202 Harmonics 3d : mode 1; +#X obj 185 142 f 0; +#X obj 255 142 f 2; +#X obj 85 142 f 0; +#X text 217 222 Planewaves 2d : mode 2; +#X text 217 243 Planewaves 3d : mode 3; +#X connect 1 0 0 0; +#X connect 2 0 4 0; +#X connect 3 1 1 0; +#X connect 4 0 6 0; +#X connect 4 1 5 0; +#X connect 5 0 11 0; +#X connect 5 1 12 0; +#X connect 6 0 13 0; +#X connect 6 1 7 0; +#X connect 7 0 8 0; +#X connect 8 0 3 0; +#X connect 11 0 8 1; +#X connect 12 0 8 1; +#X connect 13 0 8 0; +#X restore 46 92 pd print.domain.error; +#X obj 15 114 unpack 0 0 0; +#X obj 277 222 line~; +#N canvas 65 87 450 300 exp_img 0; +#X obj 139 109 spigot; +#X obj 216 109 spigot; +#X obj 172 82 >= 0; +#X obj 139 181 *; +#X obj 179 245 outlet; +#X obj 154 161 abs; +#X obj 139 203 cos; +#X obj 249 82 < 0; +#X obj 216 181 *; +#X obj 231 161 abs; +#X obj 216 203 sin; +#X obj 186 9 inlet; +#X text 12 196 e^i|m|θ = cos(|m|θ); +#X text 252 186 else if m < 0; +#X text 262 196 e^i|m|θ = sin(|m|θ); +#X text 2 186 if m >= 0, f 10; +#X obj 249 61 r \$0-order; +#X obj 231 141 r \$0-order; +#X obj 154 141 r \$0-order; +#X obj 172 61 r \$0-order; +#X connect 0 0 3 0; +#X connect 1 0 8 0; +#X connect 2 0 0 1; +#X connect 3 0 6 0; +#X connect 5 0 3 1; +#X connect 6 0 4 0; +#X connect 7 0 1 1; +#X connect 8 0 10 0; +#X connect 9 0 8 1; +#X connect 10 0 4 0; +#X connect 11 0 1 0; +#X connect 11 0 0 0; +#X connect 16 0 7 0; +#X connect 17 0 9 0; +#X connect 18 0 5 0; +#X connect 19 0 2 0; +#X restore 218 88 pd exp_img; +#X obj 218 9 hoa.in extra 2; +#X text 223 71 e^i|m|θ; +#N canvas 65 87 1301 686 alegp 0; +#X obj 240 168 spigot; +#X obj 540 541 f; +#X obj 562 11 inlet; +#X obj 69 342 f 1; +#X obj 69 321 bang; +#X text 92 343 P[0 \, 0](cos(φ)) = 1; +#X obj 69 168 spigot; +#X obj 102 146 == 0; +#X obj 294 256 * 2; +#X obj 294 300 * -1; +#X obj 294 278 + 1; +#X obj 240 189 cos; +#X obj 279 321 *; +#X obj 240 211 t f f; +#X obj 240 233 *, f 5; +#X obj 240 255 t b f; +#X obj 240 277 f 1; +#X obj 240 299 -, f 5; +#X obj 240 321 sqrt; +#X obj 240 343 *, f 7; +#X obj 273 101 != 0; +#X obj 306 101 ==; +#X obj 273 48 t f f, f 6; +#X obj 273 123 +, f 6; +#X obj 273 145 == 2; +#X text 332 191 <- P[l-1 \, l-1](cos(φ)); +#X obj 694 276 * 2; +#X obj 694 298 + 1; +#X obj 640 319 cos; +#X obj 679 321 *; +#X obj 640 343 *, f 7; +#X obj 640 168 spigot; +#X obj 673 146 ==; +#X obj 688 123 + 1; +#X text 733 190 <- P[l-1 \, l-1](cos(φ)); +#X obj 1020 168 spigot; +#X obj 1068 123 + 1; +#X obj 540 577 outlet; +#X obj 1053 146 >; +#X obj 1110 182 * 2; +#X obj 1110 246 + 1; +#X obj 1059 267 *, f 9; +#X obj 1020 265 cos; +#X obj 1020 289 *, f 7; +#X obj 1020 311 -, f 20; +#X obj 1194 184 +; +#X obj 1137 227 *, f 10; +#X obj 1155 320 -; +#X obj 1020 343 /, f 23; +#X obj 694 232 r \$0-degree; +#X obj 294 211 r \$0-degree; +#X obj 1110 139 r \$0-degree; +#X obj 1170 277 r \$0-order; +#X obj 1209 142 r \$0-order; +#X obj 1194 121 r \$0-degree; +#X obj 1155 256 r \$0-degree; +#X text 690 344 P[l \, l-1](cos(φ)) = cos(φ)(2l+1)P[l \, l](cos(φ)) +; +#X text 290 344 P[l \, l](cos(φ)) = −(2l+1)√(1−cos(φ)^2)P[l +\, l](cos(φ)); +#X obj 1059 226 r \$0-l1m; +#X obj 1137 206 r \$0-l2m; +#X text 837 401 P[l \, m](cos(φ)) = (cos(φ)(2l+1)P[l-1 \, m](cos(φ))−(l+m)P[l−2 +\, m](cos(φ)))/(l−m+1), f 80; +#X text 928 227 P[l-1 \, m](cos(φ)) ->; +#X text 978 207 P[l-2 \, m](cos(φ)) ------->; +#X obj 102 122 r \$0-degree; +#X obj 273 24 r \$0-degree; +#X obj 673 57 r \$0-degree; +#X obj 1053 57 r \$0-degree; +#X obj 1068 80 r \$0-order; +#X obj 688 80 r \$0-order; +#X obj 321 50 r \$0-order; +#X obj 321 79 abs; +#X obj 688 102 abs; +#X obj 1068 102 abs; +#X obj 735 523 r \$0-degree; +#X obj 735 567 * 2, f 5; +#X obj 735 589 + 2; +#X obj 679 190 r \$0-l1m; +#X obj 279 190 r \$0-ll; +#X obj 735 763 makefilename %d-l1m; +#X obj 912 589 * 2; +#X obj 912 611 + 2; +#X obj 912 569 + 1; +#X obj 735 545 t f f, f 30; +#X obj 897 633 +; +#X obj 937 694 +; +#X obj 735 655 + \$0; +#X obj 897 655 + \$0; +#X obj 720 784 s; +#X obj 952 629 r \$0-order; +#X obj 952 651 abs; +#X obj 952 672 * 2; +#X obj 922 738 s; +#X obj 882 784 s; +#X obj 767 694 +; +#X obj 767 716 makefilename %d-l1m; +#X obj 782 629 r \$0-order; +#X obj 782 651 abs; +#X obj 782 672 * 2; +#X obj 752 738 s; +#X obj 624 551 r \$0-order; +#X obj 624 573 <= 0; +#X obj 591 595 spigot; +#X obj 937 716 makefilename %d-l2m; +#X obj 897 763 makefilename %d-l2m; +#X text 947 739 h[l+2 \, m]; +#X text 775 738 h[l+1 \, m]; +#X text 744 786 h[l+1 \, |m|]; +#X text 813 523 Send result to h[l+1 \, m] \, h[l+1 \, |m|] \, h[l+2 +\, m] and h[l+2 \, |m|], f 64; +#X text 906 785 h[l+2 \, |m|]; +#X obj 103 503 r \$0-degree; +#X obj 148 547 + 1; +#X obj 148 569 * 2; +#X obj 88 699 s; +#X obj 121 429 r \$0-order; +#X obj 121 451 <= 0; +#X obj 88 473 spigot; +#X obj 103 547 * 2; +#X obj 103 569 + 1; +#X obj 103 525 t f f, f 8; +#X obj 133 614 +; +#X obj 118 657 s; +#X text 142 659 h[l+1 \, l+1]; +#X text 112 701 h[l+1 \, -(l+1)]; +#X obj 103 591 + \$0; +#X obj 133 636 makefilename %d-ll; +#X obj 103 678 makefilename %d-ll; +#X obj 294 233 - 1; +#X obj 694 254 - 1; +#X obj 1194 206 - 1; +#X obj 1110 161 - 1; +#X obj 1170 299 abs; +#X obj 1209 164 abs; +#X connect 0 0 11 0; +#X connect 1 0 37 0; +#X connect 1 0 101 0; +#X connect 2 0 6 0; +#X connect 2 0 0 0; +#X connect 2 0 31 0; +#X connect 2 0 35 0; +#X connect 3 0 1 0; +#X connect 3 0 115 0; +#X connect 4 0 3 0; +#X connect 6 0 4 0; +#X connect 7 0 6 1; +#X connect 8 0 10 0; +#X connect 9 0 12 1; +#X connect 10 0 9 0; +#X connect 11 0 13 0; +#X connect 12 0 19 1; +#X connect 13 0 14 0; +#X connect 13 1 14 1; +#X connect 14 0 15 0; +#X connect 15 0 16 0; +#X connect 15 1 17 1; +#X connect 16 0 17 0; +#X connect 17 0 18 0; +#X connect 18 0 19 0; +#X connect 19 0 1 0; +#X connect 19 0 115 0; +#X connect 20 0 23 0; +#X connect 21 0 23 1; +#X connect 22 0 20 0; +#X connect 22 1 21 0; +#X connect 23 0 24 0; +#X connect 24 0 0 1; +#X connect 26 0 27 0; +#X connect 27 0 29 1; +#X connect 28 0 30 0; +#X connect 29 0 30 1; +#X connect 30 0 1 0; +#X connect 31 0 28 0; +#X connect 32 0 31 1; +#X connect 33 0 32 1; +#X connect 35 0 42 0; +#X connect 36 0 38 1; +#X connect 38 0 35 1; +#X connect 39 0 40 0; +#X connect 40 0 41 1; +#X connect 41 0 43 1; +#X connect 42 0 43 0; +#X connect 43 0 44 0; +#X connect 44 0 48 0; +#X connect 45 0 128 0; +#X connect 46 0 44 1; +#X connect 47 0 48 1; +#X connect 48 0 1 0; +#X connect 49 0 127 0; +#X connect 50 0 126 0; +#X connect 51 0 129 0; +#X connect 52 0 130 0; +#X connect 53 0 131 0; +#X connect 54 0 45 0; +#X connect 55 0 47 0; +#X connect 58 0 41 0; +#X connect 59 0 46 0; +#X connect 63 0 7 0; +#X connect 64 0 22 0; +#X connect 65 0 32 0; +#X connect 66 0 38 0; +#X connect 67 0 72 0; +#X connect 68 0 71 0; +#X connect 69 0 70 0; +#X connect 70 0 21 1; +#X connect 71 0 33 0; +#X connect 72 0 36 0; +#X connect 73 0 82 0; +#X connect 74 0 75 0; +#X connect 75 0 83 0; +#X connect 75 0 85 0; +#X connect 76 0 29 0; +#X connect 77 0 12 0; +#X connect 78 0 87 1; +#X connect 79 0 80 0; +#X connect 80 0 83 1; +#X connect 81 0 79 0; +#X connect 82 0 74 0; +#X connect 82 1 81 0; +#X connect 83 0 86 0; +#X connect 84 0 102 0; +#X connect 85 0 78 0; +#X connect 85 0 93 0; +#X connect 86 0 84 0; +#X connect 86 0 103 0; +#X connect 88 0 89 0; +#X connect 89 0 90 0; +#X connect 90 0 84 1; +#X connect 93 0 94 0; +#X connect 94 0 98 1; +#X connect 95 0 96 0; +#X connect 96 0 97 0; +#X connect 97 0 93 1; +#X connect 99 0 100 0; +#X connect 100 0 101 1; +#X connect 101 0 91 0; +#X connect 101 0 92 0; +#X connect 101 0 98 0; +#X connect 101 0 87 0; +#X connect 102 0 91 1; +#X connect 103 0 92 1; +#X connect 109 0 118 0; +#X connect 110 0 111 0; +#X connect 111 0 119 1; +#X connect 113 0 114 0; +#X connect 114 0 115 1; +#X connect 115 0 112 0; +#X connect 115 0 120 0; +#X connect 116 0 117 0; +#X connect 117 0 123 0; +#X connect 118 0 116 0; +#X connect 118 1 110 0; +#X connect 119 0 124 0; +#X connect 123 0 119 0; +#X connect 123 0 125 0; +#X connect 124 0 120 1; +#X connect 125 0 112 1; +#X connect 126 0 8 0; +#X connect 127 0 26 0; +#X connect 128 0 46 1; +#X connect 129 0 39 0; +#X connect 130 0 47 1; +#X connect 131 0 45 1; +#X restore 311 88 pd alegp; +#X obj 311 9 hoa.in extra 3; +#X text 315 71 P[l \, m](cos(φ)); +#X obj 277 132 t b f; +#X obj 49 192 s \$0-degree; +#X obj 84 169 s \$0-order; +#X text 121 193 l; +#X text 151 170 m; +#N canvas 65 119 650 483 norm 0; +#X obj 14 5 r \$0-degree; +#X obj 93 5 r \$0-order; +#X obj 101 180 +; +#X obj 14 180 -; +#N canvas 65 82 450 300 factorial 0; +#X obj 163 81 until; +#X obj 163 103 f 1; +#X obj 188 103 + 1; +#X obj 188 123 f 1; +#X obj 163 123 * 1; +#X obj 163 19 inlet, f 11; +#X obj 163 61 t f b, f 9; +#X obj 214 81 f 1; +#X obj 163 40 max 1; +#X obj 163 145 outlet; +#X connect 0 0 1 0; +#X connect 1 0 2 0; +#X connect 1 0 4 0; +#X connect 2 0 1 1; +#X connect 3 0 4 1; +#X connect 4 0 3 0; +#X connect 4 0 9 0; +#X connect 5 0 8 0; +#X connect 6 0 0 0; +#X connect 6 1 7 0; +#X connect 7 0 1 1; +#X connect 7 0 4 1; +#X connect 8 0 6 0; +#X restore 101 201 pd factorial; +#N canvas 65 82 450 300 factorial 0; +#X obj 163 81 until; +#X obj 163 103 f 1; +#X obj 188 103 + 1; +#X obj 188 123 f 1; +#X obj 163 123 * 1; +#X obj 163 19 inlet, f 11; +#X obj 163 61 t f b, f 9; +#X obj 214 81 f 1; +#X obj 163 40 max 1; +#X obj 163 145 outlet; +#X connect 0 0 1 0; +#X connect 1 0 2 0; +#X connect 1 0 4 0; +#X connect 2 0 1 1; +#X connect 3 0 4 1; +#X connect 4 0 3 0; +#X connect 4 0 9 0; +#X connect 5 0 8 0; +#X connect 6 0 0 0; +#X connect 6 1 7 0; +#X connect 7 0 1 1; +#X connect 7 0 4 1; +#X connect 8 0 6 0; +#X restore 14 201 pd factorial; +#X obj 14 227 /, f 15; +#X obj 14 249 sqrt; +#X obj 14 448 outlet; +#X obj 14 98 t f f; +#X obj 93 78 abs; +#X obj 185 250 /, f 6; +#X obj 218 228 hoa.pi 4; +#X obj 185 270 sqrt; +#X obj 14 313 * 1, f 5; +#X obj 93 98 t f f f, f 10; +#X msg 185 180 2; +#X obj 185 202 t f b; +#X obj 93 47 sel 0; +#X msg 24 382 1; +#X obj 93 25 t f f; +#X obj 29 337 != 0; +#X obj 14 359 * 1; +#X obj 14 427 +; +#X obj 24 403 t b f; +#X text 310 16 k(l \, m) = sqrt((l - |m|)! / (l + |m|)!) * sqrt(2/ +4π); +#X text 294 2 if m != 0; +#X text 295 30 else; +#X text 310 43 k(l \, m) = 1; +#X obj 268 42 f; +#X obj 268 320 f; +#X obj 294 101 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 +-1 -1; +#X obj 294 367 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 +-1 -1; +#X connect 0 0 9 0; +#X connect 1 0 20 0; +#X connect 2 0 4 0; +#X connect 3 0 5 0; +#X connect 4 0 6 1; +#X connect 5 0 6 0; +#X connect 6 0 7 0; +#X connect 7 0 14 0; +#X connect 9 0 3 0; +#X connect 9 1 2 0; +#X connect 10 0 15 0; +#X connect 11 0 13 0; +#X connect 12 0 11 1; +#X connect 13 0 14 1; +#X connect 14 0 22 0; +#X connect 15 0 3 1; +#X connect 15 1 2 1; +#X connect 15 2 16 0; +#X connect 16 0 17 0; +#X connect 17 0 11 0; +#X connect 17 1 12 0; +#X connect 18 0 31 0; +#X connect 18 1 10 0; +#X connect 19 0 24 0; +#X connect 20 0 18 0; +#X connect 20 1 29 0; +#X connect 21 0 22 1; +#X connect 22 0 23 0; +#X connect 23 0 8 0; +#X connect 24 0 23 0; +#X connect 24 1 23 1; +#X connect 29 0 30 0; +#X connect 30 0 21 0; +#X connect 31 0 32 0; +#X connect 32 0 19 0; +#X restore 316 133 pd norm; +#X text 315 112 k(l \, m); +#X obj 163 258 *~; +#X obj 163 280 hoa.out~; +#X obj 163 222 hoa.in~ extra 1; +#N canvas 490 401 468 341 wrap_angles 0; +#X obj 82 39 inlet; +#X obj 195 49 inlet; +#X obj 195 71 /, f 7; +#X obj 234 47 hoa.pi 2; +#X obj 234 26 c.loadmess; +#X obj 195 137 *, f 7; +#X obj 195 93 + 0.25; +#X obj 196 116 wrap; +#X obj 105 193 >; +#X obj 104 264 t b f; +#X obj 81 290 +, f 4; +#X obj 120 128 hoa.pi 1; +#X obj 105 218 sel 1; +#X obj 105 240 hoa.pi 1; +#X obj 81 312 outlet; +#X obj 222 281 outlet, f 16; +#X obj 195 158 t f f; +#X connect 0 0 10 0; +#X connect 1 0 2 0; +#X connect 2 0 6 0; +#X connect 3 0 2 1; +#X connect 3 0 5 1; +#X connect 4 0 3 0; +#X connect 4 0 11 0; +#X connect 5 0 16 0; +#X connect 6 0 7 0; +#X connect 7 0 5 0; +#X connect 8 0 12 0; +#X connect 9 0 10 0; +#X connect 9 1 10 1; +#X connect 10 0 14 0; +#X connect 11 0 8 1; +#X connect 12 0 13 0; +#X connect 12 1 9 0; +#X connect 13 0 9 0; +#X connect 16 0 8 0; +#X connect 16 1 15 0; +#X restore 218 39 pd wrap_angles; +#X msg 277 200 \$1 5; +#X obj 277 174 * 1, f 7; +#X obj 277 152 * 1, f 5; +#X connect 0 0 1 0; +#X connect 1 0 3 0; +#X connect 1 1 2 0; +#X connect 3 1 12 0; +#X connect 3 2 13 0; +#X connect 4 0 18 1; +#X connect 5 0 24 0; +#X connect 6 0 21 0; +#X connect 8 0 11 0; +#X connect 9 0 21 1; +#X connect 11 0 24 0; +#X connect 11 1 24 1; +#X connect 16 0 23 1; +#X connect 18 0 19 0; +#X connect 20 0 18 0; +#X connect 21 0 5 0; +#X connect 21 1 8 0; +#X connect 22 0 4 0; +#X connect 23 0 22 0; +#X connect 24 0 23 0; diff --git a/ceammc/ext/doc/hoa/hoa.syn.delay~-help.pd b/ceammc/ext/doc/hoa/hoa.syn.delay~-help.pd new file mode 100644 index 0000000000..348ce892ef --- /dev/null +++ b/ceammc/ext/doc/hoa/hoa.syn.delay~-help.pd @@ -0,0 +1,91 @@ +#N canvas 120 107 677 681 10; +#X msg 362 357 \; pd dsp 1; +#X msg 362 392 \; pd dsp 0; +#X obj 74 95 hoa.soundgrain; +#X obj 74 124 c.gain~ @size 131 10 @fontname "Helvetica" @fontweight +"normal" @fontslant "roman" @fontsize 11 @receive "(null)" @send "(null)" +@presetname "(null)" @mode 0 @ramp 20 @bgcolor 0.75 0.75 0.75 1 @bdcolor +0.5 0.5 0.5 1 @kncolor 0.5 0.5 0.5 1; +#X obj 575 32 hoa.connect; +#X obj 575 12 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 +-1; +#X obj 3 21 c.patcherinfos; +#X obj 3 4 loadbang; +#X obj 3 4 hoa.help.header; +#X obj 33 582 hoa.help.pub; +#X obj 419 4 hoa.help.also; +#X obj 74 523 hoa.2d.decoder~ 7 ambisonics 16; +#X obj 74 555 hoa.dac~ 1:16 -----------------; +#X obj 74 248 hoa.2d.scope~ @size 189 189 @fontname "Helvetica" @fontweight +"normal" @fontslant "roman" @fontsize 11 @receive "(null)" @send "(null)" +@order 7 @view 0 @gain 10 @interval 100 @bgcolor 0.76 0.76 0.76 1 @bdcolor +0.7 0.7 0.7 1 @phcolor 1 0 0 1 @nhcolor 0 0 1 1; +#X obj 257 141 c.number @size 53 17 @fontname "Helvetica" @fontweight +"normal" @fontslant "roman" @fontsize 11 @receive "(null)" @send "(null)" +@presetname "(null)" @min 0 @max 5000 @minmax 0 5000 @decimal 6 @bgcolor +0.75 0.75 0.75 1 @bdcolor 0.5 0.5 0.5 1 @textcolor 0 0 0 1; +#X text 259 71 Control the global delay time., f 12; +#X text 8 48 hoa.syn.delay~ uses delay lines without flanging effect +to synthesize a diffuse a sound field.; +#X obj 74 165 hoa.2d.process~ 7 hoa.syn.delay~ harmonics @delay 5000 +, f 31; +#X text 384 188 The delay time is mapped depending on the; +#X text 384 198 orders and the degrees of the harmonics.; +#X text 384 208 You can also use it in the plane waves domain.; +#X obj 256 120 c.loadmess 5000; +#X text 298 284 attr : delay (ms); +#X text 318 142 ms; +#X connect 2 0 3 0; +#X connect 3 0 17 0; +#X connect 5 0 4 0; +#X connect 6 0 8 0; +#X connect 7 0 6 0; +#X connect 11 0 12 0; +#X connect 11 1 12 1; +#X connect 11 2 12 2; +#X connect 11 3 12 3; +#X connect 11 4 12 4; +#X connect 11 5 12 5; +#X connect 11 6 12 6; +#X connect 11 7 12 7; +#X connect 11 8 12 8; +#X connect 11 9 12 9; +#X connect 11 10 12 10; +#X connect 11 11 12 11; +#X connect 11 12 12 12; +#X connect 11 13 12 13; +#X connect 11 14 12 14; +#X connect 11 15 12 15; +#X connect 14 0 17 1; +#X connect 17 0 11 0; +#X connect 17 0 13 0; +#X connect 17 1 11 1; +#X connect 17 1 13 1; +#X connect 17 2 11 2; +#X connect 17 2 13 2; +#X connect 17 3 11 3; +#X connect 17 3 13 3; +#X connect 17 4 11 4; +#X connect 17 4 13 4; +#X connect 17 5 11 5; +#X connect 17 5 13 5; +#X connect 17 6 11 6; +#X connect 17 6 13 6; +#X connect 17 7 11 7; +#X connect 17 7 13 7; +#X connect 17 8 11 8; +#X connect 17 8 13 8; +#X connect 17 9 11 9; +#X connect 17 9 13 9; +#X connect 17 10 11 10; +#X connect 17 10 13 10; +#X connect 17 11 11 11; +#X connect 17 11 13 11; +#X connect 17 12 11 12; +#X connect 17 12 13 12; +#X connect 17 13 11 13; +#X connect 17 13 13 13; +#X connect 17 14 11 14; +#X connect 17 14 13 14; +#X connect 21 0 14 0; +#X coords 0 681 1 680 100 60 0; diff --git a/ceammc/ext/doc/hoa/hoa.syn.delay~.pd b/ceammc/ext/doc/hoa/hoa.syn.delay~.pd new file mode 100644 index 0000000000..04de85fa35 --- /dev/null +++ b/ceammc/ext/doc/hoa/hoa.syn.delay~.pd @@ -0,0 +1,152 @@ +#N canvas 119 122 946 548 10; +#X obj 355 482 hoa.out~; +#X obj 9 11 c.loadmess; +#X obj 312 65 hoa.in extra 1; +#X obj 471 267 f; +#X obj 289 332 *~ 513; +#X obj 736 363 table \$0-hoa_hann1 512; +#X obj 289 360 tabread4~ \$0-hoa_hann1; +#X obj 274 411 *~; +#X obj 470 411 *~; +#X obj 274 267 f; +#X obj 485 360 tabread4~ \$0-hoa_hann1; +#X obj 485 311 wrap~; +#X obj 485 290 +~ 0.5; +#X obj 485 332 *~ 513; +#X obj 471 391 delread~ \$0-hoa.delay 1; +#X obj 274 391 delread~ \$0-hoa.delay 1; +#X obj 289 232 phasor~ 0.5; +#N canvas 970 176 450 300 sel~ 0; +#X obj 73 20 c.loadmess 1; +#X obj 92 141 samphold~; +#X obj 92 165 snapshot~; +#X obj 92 187 change; +#X obj 92 209 < 126; +#X obj 92 233 sel 0 1; +#X obj 38 59 inlet~; +#X obj 108 49 inlet~; +#X obj 92 261 outlet; +#X obj 153 261 outlet; +#X obj 155 232 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -8 0 10 +-262144 -1 -1 0 256; +#X obj 73 109 metro 5; +#X connect 0 0 11 0; +#X connect 1 0 2 0; +#X connect 2 0 3 0; +#X connect 3 0 4 0; +#X connect 3 0 10 0; +#X connect 4 0 5 0; +#X connect 5 0 9 0; +#X connect 5 1 8 0; +#X connect 6 0 1 0; +#X connect 6 0 1 1; +#X connect 7 0 1 1; +#X connect 11 0 2 0; +#X restore 417 414 pd sel~; +#X obj 386 199 unpack; +#X obj 737 162 / 256; +#X obj 737 207 * 1; +#X obj 737 261 * 0.5; +#X obj 737 233 sin; +#X obj 737 285 + 0.5; +#X obj 738 22 c.loadmess; +#X obj 737 134 t f f; +#X obj 737 313 pack; +#X obj 773 180 hoa.pi 1; +#X obj 737 183 - 0.5; +#X obj 738 46 t b b; +#X obj 737 90 until; +#X obj 737 111 f; +#X obj 764 112 + 1; +#X msg 737 69 512; +#X obj 737 337 tabwrite \$0-hoa_hann1; +#X obj 76 61 hoa.mode.sel; +#X obj 9 87 hoa.args.map; +#X obj 78 111 + 1; +#X obj 78 146 / 1; +#X text 81 196 factor; +#X text 77 186 instance; +#X obj 78 166 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -8 0 10 +-262144 -1 -1 0 256; +#X obj 9 166 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -8 0 10 +-262144 -1 -1 0 256; +#X text 8 186 number of; +#X text 5 196 instances; +#X obj 490 129 delwrite~ \$0-hoa.delay 5000; +#X obj 9 38 hoa.thisprocess~ @delay 1000; +#X obj 174 148 route delay; +#X obj 358 166 list split; +#X obj 312 95 route float list; +#X obj 312 178 * 1; +#X obj 311 141 t b f; +#X text 531 430 list : The item is selected depending on the instance +and directly set the delay time of the instance (mostly used in the +plane waves domain).; +#X text 531 490 float : The delay time are mapped depending on the +intance and increase while the index and the band of the harmonics +increase.; +#X obj 412 65 hoa.in extra 2; +#X text 350 6 This hoa.processing synthesizes a sound field with delay +lines.; +#X obj 490 86 hoa.in~ extra 1; +#X connect 1 0 46 0; +#X connect 2 0 49 0; +#X connect 3 0 14 0; +#X connect 4 0 6 0; +#X connect 4 0 17 0; +#X connect 6 0 7 1; +#X connect 7 0 0 0; +#X connect 8 0 0 0; +#X connect 9 0 15 0; +#X connect 10 0 8 1; +#X connect 11 0 13 0; +#X connect 12 0 11 0; +#X connect 13 0 10 0; +#X connect 13 0 17 1; +#X connect 14 0 8 0; +#X connect 15 0 7 0; +#X connect 16 0 4 0; +#X connect 16 0 12 0; +#X connect 17 0 9 0; +#X connect 17 1 3 0; +#X connect 18 0 3 1; +#X connect 18 0 9 1; +#X connect 19 0 28 0; +#X connect 20 0 22 0; +#X connect 21 0 23 0; +#X connect 22 0 21 0; +#X connect 23 0 26 0; +#X connect 24 0 29 0; +#X connect 25 0 19 0; +#X connect 25 1 26 1; +#X connect 26 0 34 0; +#X connect 27 0 20 1; +#X connect 28 0 20 0; +#X connect 29 0 33 0; +#X connect 29 1 27 0; +#X connect 30 0 31 0; +#X connect 31 0 32 0; +#X connect 31 0 25 0; +#X connect 32 0 31 1; +#X connect 33 0 30 0; +#X connect 35 0 36 1; +#X connect 36 0 42 0; +#X connect 36 0 38 1; +#X connect 36 1 37 0; +#X connect 36 1 48 1; +#X connect 37 0 38 0; +#X connect 38 0 41 0; +#X connect 41 0 51 0; +#X connect 46 0 36 0; +#X connect 46 1 35 0; +#X connect 46 3 47 0; +#X connect 47 0 50 0; +#X connect 48 1 18 0; +#X connect 49 0 50 0; +#X connect 49 1 48 0; +#X connect 50 0 9 1; +#X connect 50 0 3 1; +#X connect 51 0 50 0; +#X connect 51 1 50 1; +#X connect 54 0 49 0; +#X connect 56 0 45 0; diff --git a/ceammc/ext/doc/hoa/hoa.syn.grain~-help.pd b/ceammc/ext/doc/hoa/hoa.syn.grain~-help.pd new file mode 100644 index 0000000000..9b5ba603e5 --- /dev/null +++ b/ceammc/ext/doc/hoa/hoa.syn.grain~-help.pd @@ -0,0 +1,185 @@ +#N canvas 425 97 696 681 10; +#X obj 73 95 hoa.soundgrain; +#X obj 32 582 hoa.help.pub; +#X obj 418 4 hoa.help.also; +#X obj 73 523 hoa.2d.decoder~ 7 ambisonics 16; +#X text 363 188 You can also use it in the plane waves domain.; +#N canvas 237 132 503 391 hoa_grain_env 0; +#X obj 270 148 / 256; +#X obj 270 193 * 1; +#X obj 270 247 * 0.5; +#X obj 270 219 sin; +#X obj 270 271 + 0.5; +#X obj 270 120 t f f; +#X obj 270 299 pack; +#X obj 270 169 - 0.5; +#X obj 271 32 t b b; +#X obj 270 323 tabwrite \$0-hoa_grain_array; +#X obj 270 76 until; +#X obj 270 97 f; +#X obj 297 98 + 1; +#X msg 270 55 512; +#X obj 271 8 msg.onload; +#X obj 311 169 math.pi; +#X connect 0 0 7 0; +#X connect 1 0 3 0; +#X connect 2 0 4 0; +#X connect 3 0 2 0; +#X connect 4 0 6 0; +#X connect 5 0 0 0; +#X connect 5 1 6 1; +#X connect 6 0 9 0; +#X connect 7 0 1 0; +#X connect 8 0 13 0; +#X connect 8 1 15 0; +#X connect 10 0 11 0; +#X connect 11 0 12 0; +#X connect 11 0 5 0; +#X connect 12 0 11 1; +#X connect 13 0 10 0; +#X connect 14 0 8 0; +#X connect 15 0 1 1; +#X restore 447 97 pd hoa_grain_env; +#X obj 446 77 table \$0-hoa_grain_array 512; +#X obj 256 131 r \$0-hoagrain; +#X obj 453 349 s \$0-hoagrain; +#X obj 453 469 s \$0-hoagrain; +#X text 269 263 arg : the envelope table; +#X text 267 284 attr : size (ms) \, delay; +#X text 301 296 feedback \, rarefaction; +#X text 363 168 The grain size and delay time are mapped depending +; +#X text 363 178 on the orders and the degrees of the harmonics.; +#X text 7 54 hoa.syn.grain~ uses quasi-synchronous granular to synthesize +a diffuse a sound field.; +#X obj 73 124 ui.gain~ @size 157 14 @receive "(null)" @send "(null)" +@pinned 0 @presetname "ui.gain~.1" @background_color 0.93 0.93 0.93 +1 @border_color 0.6 0.6 0.6 1 @label_color 0 0 0 1 @knob_color 0 0.75 +1 1 @fontname "Helvetica" @fontweight "normal" @fontslant "roman" @fontsize +11 @label "(null)" @label_inner 0 @label_side "top" @label_align "left" +@label_valign "top" @label_margins 0 0 @max 0 @min -60 @output_value +0 @show_range 1; +#X obj 73 555 xdac~ 1:16, f 31; +#X obj 453 263 msg.onload 20; +#X obj 543 263 msg.onload 5000; +#X obj 453 291 ui.number @size 53 17 @receive "(null)" @send "(null)" +@pinned 0 @presetname "ui.number.0" @background_color 0.93 0.93 0.93 +1 @border_color 0.6 0.6 0.6 1 @label_color 0 0 0 1 @active_color 0 +0.75 1 1 @text_color 0 0 0 1 @fontname "Helvetica" @fontweight "normal" +@fontslant "roman" @fontsize 14 @label "(null)" @label_inner 0 @label_side +"top" @label_align "left" @label_valign "top" @label_margins 0 0 @min +0 @max 3.40282e+38 @digits -1; +#X obj 543 291 ui.number @size 53 17 @receive "(null)" @send "(null)" +@pinned 0 @presetname "ui.number.1" @background_color 0.93 0.93 0.93 +1 @border_color 0.6 0.6 0.6 1 @label_color 0 0 0 1 @active_color 0 +0.75 1 1 @text_color 0 0 0 1 @fontname "Helvetica" @fontweight "normal" +@fontslant "roman" @fontsize 14 @label "(null)" @label_inner 0 @label_side +"top" @label_align "left" @label_valign "top" @label_margins 0 0 @min +0 @max 5000 @digits -1; +#X obj 453 383 msg.onload 0.8; +#X obj 543 383 msg.onload 0.4; +#X obj 453 411 ui.number @size 53 17 @receive "(null)" @send "(null)" +@pinned 0 @presetname "ui.number.2" @background_color 0.93 0.93 0.93 +1 @border_color 0.6 0.6 0.6 1 @label_color 0 0 0 1 @active_color 0 +0.75 1 1 @text_color 0 0 0 1 @fontname "Helvetica" @fontweight "normal" +@fontslant "roman" @fontsize 14 @label "(null)" @label_inner 0 @label_side +"top" @label_align "left" @label_valign "top" @label_margins 0 0 @min +0 @max 1 @digits -1; +#X obj 543 411 ui.number @size 53 17 @receive "(null)" @send "(null)" +@pinned 0 @presetname "ui.number.3" @background_color 0.93 0.93 0.93 +1 @border_color 0.6 0.6 0.6 1 @label_color 0 0 0 1 @active_color 0 +0.75 1 1 @text_color 0 0 0 1 @fontname "Helvetica" @fontweight "normal" +@fontslant "roman" @fontsize 14 @label "(null)" @label_inner 0 @label_side +"top" @label_align "left" @label_valign "top" @label_margins 0 0 @min +0 @max 1 @digits -1; +#X obj 73 248 hoa.scope~ @size 189 189 @receive "(null)" @send "(null)" +@pinned 0 @background_color 0.93 0.93 0.93 1 @border_color 0.6 0.6 +0.6 1 @label_color 0 0 0 1 @ph_color 1 0 0 1 @nh_color 0 0 1 1 @fontname +"Helvetica" @fontweight "normal" @fontslant "roman" @fontsize 11 @label +"(null)" @label_inner 0 @label_side "top" @label_align "left" @label_valign +"top" @label_margins 0 0 @gain 10 @refresh 100 @order 7 @view 0; +#X obj 2 8 canvas.current; +#X obj 2 6 msg.onload @name?; +#X obj 2 30 prop-> @name; +#X obj 2 5 hoa.help.header; +#X msg 453 318 @size \$1; +#X msg 543 318 @delay \$1; +#X msg 453 438 @feedback \$1; +#X msg 543 438 @rarefaction \$1; +#X obj 278 380 ui.dsp~ @size 57 57 @receive "(null)" @send "(null)" +@pinned 0 @background_color 0.93 0.93 0.93 1 @border_color 0.6 0.6 +0.6 1 @label_color 0 0 0 1 @active_color 0 0.75 1 1 @fontname "Helvetica" +@fontweight "normal" @fontslant "roman" @fontsize 11 @label "(null)" +@label_inner 0 @label_side "top" @label_align "left" @label_valign +"top" @label_margins 0 0; +#X msg 242 81 open 14; +#X obj 73 165 hoa.process~ 7 hoa.syn.grain~ harmonics @array \$0-hoa_grain_array +@size 100 @delay 1000 @feedback 0.5 @rarefaction 0, f 31; +#X msg 296 78 open 1; +#X connect 0 0 16 0; +#X connect 3 0 17 0; +#X connect 3 1 17 1; +#X connect 3 2 17 2; +#X connect 3 3 17 3; +#X connect 3 4 17 4; +#X connect 3 5 17 5; +#X connect 3 6 17 6; +#X connect 3 7 17 7; +#X connect 3 8 17 8; +#X connect 3 9 17 9; +#X connect 3 10 17 10; +#X connect 3 11 17 11; +#X connect 3 12 17 12; +#X connect 3 13 17 13; +#X connect 3 14 17 14; +#X connect 3 15 17 15; +#X connect 7 0 37 15; +#X connect 16 0 37 0; +#X connect 18 0 20 0; +#X connect 19 0 21 0; +#X connect 20 0 31 0; +#X connect 21 0 32 0; +#X connect 22 0 24 0; +#X connect 23 0 25 0; +#X connect 24 0 33 0; +#X connect 25 0 34 0; +#X connect 27 0 29 0; +#X connect 28 0 27 0; +#X connect 29 1 30 0; +#X connect 31 0 8 0; +#X connect 32 0 8 0; +#X connect 33 0 9 0; +#X connect 34 0 9 0; +#X connect 36 0 37 0; +#X connect 37 0 3 0; +#X connect 37 0 26 0; +#X connect 37 1 3 1; +#X connect 37 1 26 1; +#X connect 37 2 3 2; +#X connect 37 2 26 2; +#X connect 37 3 3 3; +#X connect 37 3 26 3; +#X connect 37 4 3 4; +#X connect 37 4 26 4; +#X connect 37 5 3 5; +#X connect 37 5 26 5; +#X connect 37 6 3 6; +#X connect 37 6 26 6; +#X connect 37 7 3 7; +#X connect 37 7 26 7; +#X connect 37 8 3 8; +#X connect 37 8 26 8; +#X connect 37 9 3 9; +#X connect 37 9 26 9; +#X connect 37 10 3 10; +#X connect 37 10 26 10; +#X connect 37 11 3 11; +#X connect 37 11 26 11; +#X connect 37 12 3 12; +#X connect 37 12 26 12; +#X connect 37 13 3 13; +#X connect 37 13 26 13; +#X connect 37 14 3 14; +#X connect 37 14 26 14; +#X connect 38 0 37 0; +#X coords 0 681 1 680 100 60 0; diff --git a/ceammc/ext/doc/hoa/hoa.syn.grain~.pd b/ceammc/ext/doc/hoa/hoa.syn.grain~.pd new file mode 100644 index 0000000000..7be0e819c2 --- /dev/null +++ b/ceammc/ext/doc/hoa/hoa.syn.grain~.pd @@ -0,0 +1,235 @@ +#N canvas 100 183 1142 572 10; +#N canvas 417 312 450 300 array_error 0; +#X obj 41 112 sel unknown_array; +#X msg 41 137 : The buffer is not defined.; +#X obj 41 48 inlet; +#X obj 169 184 outlet; +#X obj 41 162 print hoa.grain~; +#X obj 41 90 prepend symbol; +#X connect 0 0 1 0; +#X connect 0 1 3 0; +#X connect 1 0 4 0; +#X connect 2 0 5 0; +#X connect 5 0 0 0; +#X restore 529 397 pd array_error; +#X text 556 336 Post an error if the; +#X text 556 346 buffer is not defined; +#X text 554 213 Array must be defined as an argument.; +#X text 273 63 Extra 1 Retreive the inlet messages.; +#X text 382 87 Input messages selector; +#X obj 376 425 * 1, f 5; +#X obj 325 395 t b f; +#X obj 376 395 t b f; +#X obj 274 359 hoa.in~ extra 1; +#X obj 274 497 hoa.out~; +#X text 295 8 This hoa.processing synthesizes a sound field with quasi-synchronous +granular synthesis.; +#X text 149 360 Receive the signal; +#X text 156 497 Output the signal; +#X text 751 274 list : The item is selected depending on the instance +and directly set the grain size \, the delay \, the feedback or the +rarefaction of the instance (mostly used in the plane waves domain). +, f 60; +#X text 751 444 array : The array defines the envelope of the granulation +and is shared by all the instances (exept if you use the target message +to it)., f 60; +#X text 751 334 float : The grain size values are mapped depending +on the intance and increase while the index and the band of the harmonics +increase. The delay time values are mapped depending on the intance +and decrease while the index and the band of the harmonics increase. +The feedback and rarefaction values are not mapped thus all the instances +have the same values (exept if you use the target message to it).; +#X text 156 326 factor; +#X text 152 306 instance; +#X text 158 316 delay; +#X text 17 327 factor; +#X text 13 307 instance; +#X text 19 317 size; +#N canvas 443 103 608 675 hoa_granular 0; +#X obj 564 175 clip~ 0 1; +#X obj 564 138 line~; +#X obj 542 440 *~; +#X obj 263 362 *~; +#X obj 34 315 *~ 513; +#X obj 136 131 random; +#X obj 136 207 +; +#X obj 136 109 metro; +#X obj 136 180 t b f; +#X obj 136 154 * 0.1; +#X obj 34 281 phasor~ 1; +#X msg 564 114 \$1 20; +#X obj 34 344 tabread4~; +#X obj 393 272 samphold~; +#X obj 393 130 noise~; +#X obj 393 159 *~ 1; +#X obj 393 187 +~; +#X obj 393 244 +~ 1; +#X obj 393 213 abs~; +#X obj 439 130 * 0.1; +#X obj 263 316 samphold~; +#X obj 263 179 +~ 1; +#X obj 263 205 *~ 0.5; +#X obj 263 139 noise~; +#N canvas 65 381 450 300 delme 0; +#X obj 89 47 inlet~; +#X obj 88 264 outlet~; +#X obj 37 48 inlet~; +#X obj -17 50 inlet~; +#X obj 56 167 *~; +#X obj 88 201 vd~ \$0-hoa_grain; +#X obj 89 127 delwrite~ \$0-hoa_grain 5500; +#X obj 88 172 +~ 2; +#X connect 0 0 6 0; +#X connect 2 0 4 0; +#X connect 3 0 7 0; +#X connect 4 0 6 0; +#X connect 5 0 4 0; +#X connect 5 0 1 0; +#X connect 7 0 5 0; +#X restore 542 324 pd delme; +#X obj 135 230 t b f; +#X obj 34 260 /; +#X msg 53 223 1000; +#N canvas 0 50 450 300 >~ 0; +#X obj 67 114 max~ 0; +#X obj 67 175 -~ 0; +#X obj 130 188 /~; +#X obj 130 152 sig~ -1; +#X obj 145 114 -~; +#X obj 67 212 *~; +#X obj 67 17 inlet~; +#X obj 67 252 outlet~; +#X obj 132 15 inlet; +#X connect 0 0 1 0; +#X connect 1 0 5 0; +#X connect 2 0 5 1; +#X connect 3 0 2 0; +#X connect 4 0 2 1; +#X connect 5 0 7 0; +#X connect 6 0 0 0; +#X connect 6 0 4 1; +#X connect 8 0 4 0; +#X connect 8 0 1 1; +#X connect 8 0 0 1; +#X restore 263 234 pd >~ 1; +#X obj 53 61 inlet~; +#X obj 490 565 outlet~; +#X obj 495 4 inlet; +#X obj 362 17 inlet; +#X obj 313 19 inlet; +#X obj 161 43 inlet; +#X obj 218 23 inlet; +#X obj 136 75 msg.onload 1; +#X obj -6 114 prepend set; +#X connect 0 0 24 1; +#X connect 1 0 0 0; +#X connect 2 0 30 0; +#X connect 3 0 2 1; +#X connect 4 0 12 0; +#X connect 5 0 9 0; +#X connect 6 0 25 0; +#X connect 6 0 26 1; +#X connect 7 0 5 0; +#X connect 8 0 6 0; +#X connect 8 1 6 1; +#X connect 9 0 8 0; +#X connect 10 0 4 0; +#X connect 10 0 13 1; +#X connect 10 0 20 1; +#X connect 11 0 1 0; +#X connect 12 0 3 1; +#X connect 13 0 24 0; +#X connect 14 0 15 0; +#X connect 15 0 16 0; +#X connect 16 0 18 0; +#X connect 17 0 13 0; +#X connect 18 0 17 0; +#X connect 19 0 15 1; +#X connect 20 0 3 0; +#X connect 21 0 22 0; +#X connect 22 0 28 0; +#X connect 23 0 21 0; +#X connect 24 0 2 0; +#X connect 25 0 27 0; +#X connect 25 1 26 1; +#X connect 26 0 10 0; +#X connect 27 0 26 0; +#X connect 28 0 20 0; +#X connect 29 0 24 2; +#X connect 31 0 37 0; +#X connect 32 0 28 1; +#X connect 33 0 11 0; +#X connect 34 0 6 0; +#X connect 34 0 7 1; +#X connect 34 0 5 1; +#X connect 35 0 19 0; +#X connect 35 0 16 1; +#X connect 36 0 7 0; +#X connect 37 0 12 0; +#X restore 274 460 pd hoa_granular; +#X f 43; +#X obj 17 263 /; +#X floatatom 17 285 5 0 0 0 - - -; +#X floatatom 156 285 5 0 0 0 - - -; +#X obj 325 334 prop @size; +#X obj 811 21 prop.declare size @i @min 10 @default 100; +#X obj 376 368 prop @delay; +#X obj 325 425 * 1, f 5; +#X obj 427 397 prop @feedback; +#X obj 478 425 prop @rarefaction; +#X obj 811 44 prop.declare delay @f @min 10 @default 1000; +#X obj 811 67 prop.declare feedback @f @min 0 @max 1 @default 0.5; +#X obj 811 90 prop.declare rarefaction @f @default 0; +#X floatatom 348 505 5 0 0 0 - - -; +#X floatatom 398 505 5 0 0 0 - - -; +#X floatatom 448 505 5 0 0 0 - - -; +#X obj 325 86 hoa.in 1; +#X obj 811 113 prop.declare array @s @default unknown_array; +#X obj 529 373 prop @array; +#X obj 17 58 hoa.@process; +#X obj 17 36 msg.onload @total? @index?; +#X obj 156 216 pack f f; +#X obj 17 239 pack f f; +#X obj 17 215 + 1; +#X obj 156 241 expr 1 - ($f1 / $f2); +#X obj 17 122 f; +#X obj 17 80 prop-> @index @total; +#X obj 325 109 route @size @delay @feedback @rarefication @array, +f 64; +#X connect 0 0 23 5; +#X connect 6 0 23 2; +#X connect 6 0 37 0; +#X connect 7 0 30 0; +#X connect 7 1 30 1; +#X connect 8 0 6 0; +#X connect 8 1 6 1; +#X connect 9 0 23 0; +#X connect 23 0 10 0; +#X connect 24 0 25 0; +#X connect 24 0 7 0; +#X connect 27 0 30 0; +#X connect 29 0 6 0; +#X connect 30 0 23 1; +#X connect 30 0 36 0; +#X connect 31 0 23 3; +#X connect 31 0 38 0; +#X connect 32 0 23 4; +#X connect 39 0 50 0; +#X connect 41 0 0 0; +#X connect 42 0 49 0; +#X connect 43 0 42 0; +#X connect 44 0 47 0; +#X connect 45 0 24 0; +#X connect 46 0 45 0; +#X connect 47 0 26 0; +#X connect 47 0 8 0; +#X connect 48 0 46 0; +#X connect 48 0 44 0; +#X connect 49 1 48 0; +#X connect 49 2 45 1; +#X connect 49 2 44 1; +#X connect 50 0 27 0; +#X connect 50 1 29 0; +#X connect 50 2 31 0; +#X connect 50 3 32 0; +#X connect 50 4 41 0; diff --git a/ceammc/ext/doc/hoa/hoa.syn.osc~.pd b/ceammc/ext/doc/hoa/hoa.syn.osc~.pd new file mode 100644 index 0000000000..736141c9fc --- /dev/null +++ b/ceammc/ext/doc/hoa/hoa.syn.osc~.pd @@ -0,0 +1,6 @@ +#N canvas 0 23 466 276 12; +#X obj 188 77 hoa.in; +#X obj 188 103 osc~; +#X obj 188 129 hoa.out~; +#X connect 0 0 1 0; +#X connect 1 0 2 0; diff --git a/ceammc/ext/doc/hoa/hoa.syn.ringmod~-help.pd b/ceammc/ext/doc/hoa/hoa.syn.ringmod~-help.pd new file mode 100644 index 0000000000..3168c7d1d7 --- /dev/null +++ b/ceammc/ext/doc/hoa/hoa.syn.ringmod~-help.pd @@ -0,0 +1,96 @@ +#N canvas 148 46 675 681 10; +#X msg 363 361 \; pd dsp 1; +#X msg 363 396 \; pd dsp 0; +#X obj 75 99 hoa.soundgrain; +#X obj 34 586 hoa.help.pub; +#X obj 420 8 hoa.help.also; +#X obj 75 527 hoa.2d.decoder~ 7 ambisonics 16; +#X text 345 222 orders and the degrees of the harmonics.; +#X text 345 232 You can also use it in the plane waves domain.; +#X text 260 75 Control the global frequency., f 12; +#X text 299 288 arg : frequency (Hz); +#X text 345 212 The frequency is mapped depending on the; +#X text 9 52 hoa.syn.ringmod~ uses ring modulation to synthesize a +diffuse a sound field.; +#X obj 7 15 msg.onload @name?; +#X obj 7 27 canvas.current; +#X obj 7 19 prop-> @name; +#X obj 4 8 hoa.help.header; +#X obj 75 128 ui.gain~ @size 131 10 @receive "(null)" @send "(null)" +@pinned 0 @presetname "ui.gain~.1" @background_color 0.93 0.93 0.93 +1 @border_color 0.6 0.6 0.6 1 @label_color 0 0 0 1 @knob_color 0 0.75 +1 1 @fontname "Helvetica" @fontweight "normal" @fontslant "roman" @fontsize +11 @label "(null)" @label_inner 0 @label_side "top" @label_align "left" +@label_valign "top" @label_margins 0 0 @max 0 @min -60 @output_value +0 @show_range 1; +#X obj 257 124 msg.onload 20; +#X obj 258 145 ui.number @size 53 17 @receive "(null)" @send "(null)" +@pinned 0 @presetname "ui.number.0" @background_color 0.93 0.93 0.93 +1 @border_color 0.6 0.6 0.6 1 @label_color 0 0 0 1 @active_color 0 +0.75 1 1 @text_color 0 0 0 1 @fontname "Helvetica" @fontweight "normal" +@fontslant "roman" @fontsize 14 @label "Hz" @label_inner 0 @label_side +"right" @label_align "left" @label_valign "top" @label_margins 0 0 +@min 0 @max 5000 @digits -1; +#X obj 75 559 xdac~ 1:16, f 31; +#X obj 75 252 hoa.scope~ @size 189 189 @receive "(null)" @send "(null)" +@pinned 0 @background_color 0.93 0.93 0.93 1 @border_color 0.6 0.6 +0.6 1 @label_color 0 0 0 1 @ph_color 1 0 0 1 @nh_color 0 0 1 1 @fontname +"Helvetica" @fontweight "normal" @fontslant "roman" @fontsize 11 @label +"(null)" @label_inner 0 @label_side "top" @label_align "left" @label_valign +"top" @label_margins 0 0 @gain 10 @refresh 100 @order 7 @view 0; +#X obj 75 169 hoa.process~ 7 hoa.syn.ringmod~ harmonics 100, f 31 +; +#X connect 2 0 16 0; +#X connect 5 0 19 0; +#X connect 5 1 19 1; +#X connect 5 2 19 2; +#X connect 5 3 19 3; +#X connect 5 4 19 4; +#X connect 5 5 19 5; +#X connect 5 6 19 6; +#X connect 5 7 19 7; +#X connect 5 8 19 8; +#X connect 5 9 19 9; +#X connect 5 10 19 10; +#X connect 5 11 19 11; +#X connect 5 12 19 12; +#X connect 5 13 19 13; +#X connect 5 14 19 14; +#X connect 5 15 19 15; +#X connect 12 0 13 0; +#X connect 13 0 14 0; +#X connect 14 1 15 0; +#X connect 16 0 21 0; +#X connect 17 0 18 0; +#X connect 18 0 21 1; +#X connect 21 0 5 0; +#X connect 21 0 20 0; +#X connect 21 1 5 1; +#X connect 21 1 20 1; +#X connect 21 2 5 2; +#X connect 21 2 20 2; +#X connect 21 3 5 3; +#X connect 21 3 20 3; +#X connect 21 4 5 4; +#X connect 21 4 20 4; +#X connect 21 5 5 5; +#X connect 21 5 20 5; +#X connect 21 6 5 6; +#X connect 21 6 20 6; +#X connect 21 7 5 7; +#X connect 21 7 20 7; +#X connect 21 8 5 8; +#X connect 21 8 20 8; +#X connect 21 9 5 9; +#X connect 21 9 20 9; +#X connect 21 10 5 10; +#X connect 21 10 20 10; +#X connect 21 11 5 11; +#X connect 21 11 20 11; +#X connect 21 12 5 12; +#X connect 21 12 20 12; +#X connect 21 13 5 13; +#X connect 21 13 20 13; +#X connect 21 14 5 14; +#X connect 21 14 20 14; +#X coords 0 681 1 680 100 60 0; diff --git a/ceammc/ext/doc/hoa/hoa.syn.ringmod~.pd b/ceammc/ext/doc/hoa/hoa.syn.ringmod~.pd new file mode 100644 index 0000000000..2ffe1258ee --- /dev/null +++ b/ceammc/ext/doc/hoa/hoa.syn.ringmod~.pd @@ -0,0 +1,71 @@ +#N canvas 314 82 771 461 10; +#X obj 88 414 hoa.out~; +#X text 62 306 Receive the signal; +#X text 64 436 Output the signal; +#X text 318 109 Input messages selector; +#X obj 43 78 hoa.mode.sel; +#X obj 6 104 hoa.args.map; +#X obj 88 372 *~; +#X obj 189 354 osc~ 1; +#X obj 189 332 line~; +#X msg 189 310 \$1 20; +#X obj 75 128 + 1; +#X obj 75 163 / 1; +#X text 317 64 Extra 1 Receive the inlet messages.; +#X text 240 354 Simple ring modulation; +#X obj 235 214 list split; +#X obj 263 238 unpack; +#X obj 189 229 *; +#X text 78 213 factor; +#X text 74 203 instance; +#X obj 75 183 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -8 0 10 +-262144 -1 -1 0 256; +#X text 324 226 float : The value \, that control the frequency of +the ring modulation \, is multiplied by a factor depending on the intance. +The factor is 1 for the highest harmonic and decreases toward 0 for +the lower harmonics.; +#X obj 282 137 sel done; +#X obj 6 55 hoa.thisprocess~ 20; +#X obj 189 110 route float list; +#X obj 188 79 f 20; +#X text 17 34 Default arguments; +#X text 327 167 list : The item corresponding to the instance is selected +and control the frequency of the ring modulation (mostly used in the +plane waves domain).; +#X text 233 18 This hoa.processing synthesizes a sound field with ring +modulation.; +#X obj 256 310 random 1000; +#X obj 256 333 / 1000; +#X obj 88 328 hoa.in~ 1; +#X obj 224 64 hoa.in 2; +#X obj 6 8 loadbang; +#X obj 256 286 loadbang; +#X connect 4 0 5 1; +#X connect 5 0 11 1; +#X connect 5 1 10 0; +#X connect 5 1 14 1; +#X connect 6 0 0 0; +#X connect 7 0 6 1; +#X connect 8 0 7 0; +#X connect 9 0 8 0; +#X connect 10 0 11 0; +#X connect 11 0 16 1; +#X connect 11 0 19 0; +#X connect 14 1 15 0; +#X connect 15 0 9 0; +#X connect 16 0 9 0; +#X connect 21 0 24 0; +#X connect 22 0 5 0; +#X connect 22 1 4 0; +#X connect 22 2 24 0; +#X connect 22 3 23 0; +#X connect 23 0 16 0; +#X connect 23 1 14 0; +#X connect 23 2 21 0; +#X connect 24 0 23 0; +#X connect 28 0 29 0; +#X connect 29 0 7 1; +#X connect 30 0 6 0; +#X connect 31 0 23 0; +#X connect 32 0 22 0; +#X connect 33 0 28 0; diff --git a/ceammc/ext/doc/hoa/hoa.tuto.txt b/ceammc/ext/doc/hoa/hoa.tuto.txt new file mode 100644 index 0000000000..e3b71f7260 --- /dev/null +++ b/ceammc/ext/doc/hoa/hoa.tuto.txt @@ -0,0 +1,12 @@ +Tutorial_1.pd Tutorial\ 1 Introduction; +Tutorial_2.pd Tutorial\ 2 Space Representation; +Tutorial_3.pd Tutorial\ 3 Harmonics; +Tutorial_4.pd Tutorial\ 4 Planewaves; +Tutorial_5.pd Tutorial\ 5 Spatial Resolution; +Tutorial_6.pd Tutorial\ 6 Encoding; +Tutorial_7.pd Tutorial\ 7 Decoding; +Tutorial_8.pd Tutorial\ 8 Optimization; +Tutorial_9.pd Tutorial\ 9 Rotation; +Tutorial_10.pd Tutorial\ 10 Wider; +hoa.tools.2d.pd Tools\ 2D Order degree and channels numbering for 2D.; +hoa.tools.3d.pd Tools\ 3D Order degree and channels numbering for 3D.; \ No newline at end of file diff --git a/ceammc/ext/doc/hoa/hoa.tutos.txt b/ceammc/ext/doc/hoa/hoa.tutos.txt new file mode 100644 index 0000000000..e3b71f7260 --- /dev/null +++ b/ceammc/ext/doc/hoa/hoa.tutos.txt @@ -0,0 +1,12 @@ +Tutorial_1.pd Tutorial\ 1 Introduction; +Tutorial_2.pd Tutorial\ 2 Space Representation; +Tutorial_3.pd Tutorial\ 3 Harmonics; +Tutorial_4.pd Tutorial\ 4 Planewaves; +Tutorial_5.pd Tutorial\ 5 Spatial Resolution; +Tutorial_6.pd Tutorial\ 6 Encoding; +Tutorial_7.pd Tutorial\ 7 Decoding; +Tutorial_8.pd Tutorial\ 8 Optimization; +Tutorial_9.pd Tutorial\ 9 Rotation; +Tutorial_10.pd Tutorial\ 10 Wider; +hoa.tools.2d.pd Tools\ 2D Order degree and channels numbering for 2D.; +hoa.tools.3d.pd Tools\ 3D Order degree and channels numbering for 3D.; \ No newline at end of file diff --git a/ceammc/ext/doc/hoa/hoa_in_example1.pd b/ceammc/ext/doc/hoa/hoa_in_example1.pd new file mode 100644 index 0000000000..5170ac78c2 --- /dev/null +++ b/ceammc/ext/doc/hoa/hoa_in_example1.pd @@ -0,0 +1,6 @@ +#N canvas 339 264 501 159 12; +#X floatatom 89 64 5 0 0 0 - - -; +#X obj 89 90 hoa.out; +#X obj 89 38 hoa.in; +#X connect 0 0 1 0; +#X connect 2 0 0 0; diff --git a/ceammc/ext/doc/hoa/hoa_in_example2.pd b/ceammc/ext/doc/hoa/hoa_in_example2.pd new file mode 100644 index 0000000000..3b665d05d8 --- /dev/null +++ b/ceammc/ext/doc/hoa/hoa_in_example2.pd @@ -0,0 +1,11 @@ +#N canvas 339 264 634 212 12; +#X floatatom 89 64 5 0 0 0 - - -; +#X obj 89 90 hoa.out; +#X obj 89 38 hoa.in; +#X floatatom 381 63 5 0 0 0 - - -; +#X obj 381 37 hoa.in @index 3; +#X obj 381 89 hoa.out @index 2; +#X connect 0 0 1 0; +#X connect 2 0 0 0; +#X connect 3 0 5 0; +#X connect 4 0 3 0; diff --git a/ceammc/ext/doc/hoa/hoa_in_example3.pd b/ceammc/ext/doc/hoa/hoa_in_example3.pd new file mode 100644 index 0000000000..394c2eb855 --- /dev/null +++ b/ceammc/ext/doc/hoa/hoa_in_example3.pd @@ -0,0 +1,29 @@ +#N canvas 404 267 634 212 12; +#X obj 89 28 hoa.in~; +#X obj 89 114 ui.number~ @size 80 15 @receive "(null)" @send "(null)" +@pinned 0 @background_color 0.3 0.3 0.3 1 @border_color 0 0 0 1 @label_color +0 0 0 1 @text_color 0.9 0.9 0.9 1 @active_color 0 0.75 1 1 @fontname +"Helvetica" @fontweight "normal" @fontslant "roman" @fontsize 11 @label +"(null)" @label_inner 0 @label_side "top" @label_align "left" @label_valign +"top" @label_margins 0 0 @decimal 6 @interval 50; +#X obj 89 150 hoa.out~; +#X obj 198 30 hoa.in~ @extra 1; +#X obj 89 84 *~; +#X obj 198 86 ui.number~ @size 80 15 @receive "(null)" @send "(null)" +@pinned 0 @background_color 0.3 0.3 0.3 1 @border_color 0 0 0 1 @label_color +0 0 0 1 @text_color 0.9 0.9 0.9 1 @active_color 0 0.75 1 1 @fontname +"Helvetica" @fontweight "normal" @fontslant "roman" @fontsize 11 @label +"(null)" @label_inner 0 @label_side "top" @label_align "left" @label_valign +"top" @label_margins 0 0 @decimal 6 @interval 50; +#X obj 89 58 ui.number~ @size 80 15 @receive "(null)" @send "(null)" +@pinned 0 @background_color 0.3 0.3 0.3 1 @border_color 0 0 0 1 @label_color +0 0 0 1 @text_color 0.9 0.9 0.9 1 @active_color 0 0.75 1 1 @fontname +"Helvetica" @fontweight "normal" @fontslant "roman" @fontsize 11 @label +"(null)" @label_inner 0 @label_side "top" @label_align "left" @label_valign +"top" @label_margins 0 0 @decimal 6 @interval 50; +#X connect 0 0 6 0; +#X connect 1 0 2 0; +#X connect 3 0 5 0; +#X connect 3 0 4 1; +#X connect 4 0 1 0; +#X connect 6 0 4 0; diff --git a/ceammc/ext/doc/hoa/hoa_out_example3.pd b/ceammc/ext/doc/hoa/hoa_out_example3.pd new file mode 100644 index 0000000000..72dea47549 --- /dev/null +++ b/ceammc/ext/doc/hoa/hoa_out_example3.pd @@ -0,0 +1,14 @@ +#N canvas 404 267 634 212 12; +#X obj 89 17 hoa.in~; +#X obj 89 114 ui.number~ @size 80 15 @receive "(null)" @send "(null)" +@pinned 0 @background_color 0.3 0.3 0.3 1 @border_color 0 0 0 1 @label_color +0 0 0 1 @text_color 0.9 0.9 0.9 1 @active_color 0 0.75 1 1 @fontname +"Helvetica" @fontweight "normal" @fontslant "roman" @fontsize 11 @label +"(null)" @label_inner 0 @label_side "top" @label_align "left" @label_valign +"top" @label_margins 0 0 @decimal 6 @interval 50; +#X obj 89 150 hoa.out~; +#X obj 204 151 hoa.out~ @extra 1; +#X text 244 119 sum output; +#X connect 0 0 1 0; +#X connect 1 0 2 0; +#X connect 1 0 3 0; diff --git a/ceammc/ext/doc/hoa/hoa_prop_example1.pd b/ceammc/ext/doc/hoa/hoa_prop_example1.pd new file mode 100644 index 0000000000..cce20b9345 --- /dev/null +++ b/ceammc/ext/doc/hoa/hoa_prop_example1.pd @@ -0,0 +1,20 @@ +#N canvas 278 149 765 435 12; +#X obj 89 17 hoa.in; +#X obj 89 120 hoa.out; +#X obj 89 63 hoa.@process; +#X obj 273 24 prop.declare freq @min 10 @max 1000 @default 440; +#X obj 272 98 msg.onload; +#X obj 272 124 prop @freq; +#X floatatom 272 150 5 0 0 0 - - -; +#X obj 272 258 hoa.out~; +#X obj 272 176 sig~; +#X obj 272 202 lop~ 0.5; +#X obj 272 228 osc.square~; +#X connect 0 0 2 0; +#X connect 2 0 1 0; +#X connect 4 0 5 0; +#X connect 5 0 6 0; +#X connect 6 0 8 0; +#X connect 8 0 9 0; +#X connect 9 0 10 0; +#X connect 10 0 7 0; diff --git a/ceammc/ext/doc/hoa/hoa_route_example1.pd b/ceammc/ext/doc/hoa/hoa_route_example1.pd new file mode 100644 index 0000000000..dfd661e503 --- /dev/null +++ b/ceammc/ext/doc/hoa/hoa_route_example1.pd @@ -0,0 +1,32 @@ +#N canvas 835 547 700 500 12; +#X obj 134 31 hoa.in; +#X obj 134 148 hoa.@process; +#X msg 134 122 @index?; +#X obj 354 132 hoa.@process; +#X msg 354 106 @index?; +#X obj 354 245 print OTHER; +#X obj 134 175 flow.pack 3; +#X obj 134 57 hoa.process.route float; +#X obj 134 94 t b f, f 11; +#X obj 134 201 print f; +#X obj 354 78 t b a, f 11; +#X obj 428 106 list; +#X obj 354 189 list.append; +#X obj 354 158 list; +#X obj 354 215 list trim; +#X connect 0 0 7 0; +#X connect 1 0 6 0; +#X connect 2 0 1 0; +#X connect 3 0 13 0; +#X connect 4 0 3 0; +#X connect 6 0 9 0; +#X connect 7 0 8 0; +#X connect 7 1 10 0; +#X connect 8 0 2 0; +#X connect 8 1 6 2; +#X connect 10 0 4 0; +#X connect 10 1 11 0; +#X connect 11 0 12 1; +#X connect 12 0 14 0; +#X connect 13 0 12 0; +#X connect 14 0 5 0; diff --git a/ceammc/ext/doc/hoa/hoa_route_example2.pd b/ceammc/ext/doc/hoa/hoa_route_example2.pd new file mode 100644 index 0000000000..f9913dde9b --- /dev/null +++ b/ceammc/ext/doc/hoa/hoa_route_example2.pd @@ -0,0 +1,32 @@ +#N canvas 835 547 700 500 12; +#X obj 134 31 hoa.in; +#X obj 134 148 hoa.@process; +#X msg 134 122 @index?; +#X obj 354 132 hoa.@process; +#X msg 354 106 @index?; +#X obj 354 245 print OTHER; +#X obj 134 175 flow.pack 3; +#X obj 354 78 t b a, f 11; +#X obj 428 106 list; +#X obj 354 189 list.append; +#X obj 354 158 list; +#X obj 354 215 list trim; +#X obj 134 57 hoa.process.route symbol; +#X obj 134 201 print s; +#X obj 134 94 t b s, f 11; +#X connect 0 0 12 0; +#X connect 1 0 6 0; +#X connect 2 0 1 0; +#X connect 3 0 10 0; +#X connect 4 0 3 0; +#X connect 6 0 13 0; +#X connect 7 0 4 0; +#X connect 7 1 8 0; +#X connect 8 0 9 1; +#X connect 9 0 11 0; +#X connect 10 0 9 0; +#X connect 11 0 5 0; +#X connect 12 0 14 0; +#X connect 12 1 7 0; +#X connect 14 0 2 0; +#X connect 14 1 6 2; diff --git a/ceammc/ext/doc/hw.apple_smc-help.pd b/ceammc/ext/doc/hw.apple_smc-help.pd index 72295ff643..28bcfd19e3 100644 --- a/ceammc/ext/doc/hw.apple_smc-help.pd +++ b/ceammc/ext/doc/hw.apple_smc-help.pd @@ -43,7 +43,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title hw @url ceammc.hw-help.pd; #X obj 1 599 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 602 library: ceammc v0.7.1; +#X text 10 602 library: ceammc v0.8.0; #X text 485 614 see also:; #X obj 559 614 hw.apple_sms; #X obj 660 614 hw.cpu_temp; @@ -52,7 +52,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 hw.apple_smc; #X text 10 76 category:; @@ -62,7 +62,7 @@ #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 motion \, sensor; #X text 10 186 website:; diff --git a/ceammc/ext/doc/hw.apple_smc.pddoc b/ceammc/ext/doc/hw.apple_smc.pddoc index 0bd0866856..f03297c7f5 100644 --- a/ceammc/ext/doc/hw.apple_smc.pddoc +++ b/ceammc/ext/doc/hw.apple_smc.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky query the system management control in Apples - GPL3 + GPL3 or later ceammc hw motion sensor diff --git a/ceammc/ext/doc/hw.apple_sms-help.pd b/ceammc/ext/doc/hw.apple_sms-help.pd index 44c5edad93..f3908cfcde 100644 --- a/ceammc/ext/doc/hw.apple_sms-help.pd +++ b/ceammc/ext/doc/hw.apple_sms-help.pd @@ -44,13 +44,13 @@ us this information; #X text 115 45 ::; #X obj 131 48 ui.link @title hw @url ceammc.hw-help.pd; #X obj 1 585 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 588 library: ceammc v0.7.1; +#X text 10 588 library: ceammc v0.8.0; #N canvas 10 607 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 hw.apple_sms; #X text 10 76 category:; @@ -60,7 +60,7 @@ us this information; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 motion \, sensor; #X text 10 186 website:; diff --git a/ceammc/ext/doc/hw.apple_sms.pddoc b/ceammc/ext/doc/hw.apple_sms.pddoc index 4d04c26705..9d78c64c70 100644 --- a/ceammc/ext/doc/hw.apple_sms.pddoc +++ b/ceammc/ext/doc/hw.apple_sms.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky query the sudden motion sensor in Apples - GPL3 + GPL3 or later ceammc hw motion sensor diff --git a/ceammc/ext/doc/hw.arduino-help.pd b/ceammc/ext/doc/hw.arduino-help.pd index 25361850c2..61c26f1f86 100644 --- a/ceammc/ext/doc/hw.arduino-help.pd +++ b/ceammc/ext/doc/hw.arduino-help.pd @@ -34,74 +34,74 @@ on Linux and /dev/cu.usbmodem411 on MacOSX.; -49933 0; #X msg 110 568 @connected; #X text 245 568 (readonly) Get state of connection to device. Type: -int.; -#X msg 110 597 @devices; -#X text 245 597 (readonly) Get list of found Arduino devices. Type: +int. Allowed values: 0 \, 1\.; +#X msg 110 610 @devices; +#X text 245 610 (readonly) Get list of found Arduino devices. Type: list.; -#X msg 110 626 @on_connect; -#X text 245 626 Get/Set function called every time on connect. Type: +#X msg 110 639 @on_connect; +#X text 245 639 Get/Set function called every time on connect. Type: symbol.; -#X msg 110 655 @port; -#X text 245 655 (readonly) Get name of arduino serial port \, eg.: +#X msg 110 668 @port; +#X text 245 668 (readonly) Get name of arduino serial port \, eg.: COM3 on Windows \, /dev/ttyACM0 on Linux and /dev/cu.usbmodem411 on MacOSX. If specified on creation tries to connect to this device only. Type: symbol.; -#X msg 110 727 @product_id; -#X text 245 727 Get/Set USB device product id. If vendor and product +#X msg 110 740 @product_id; +#X text 245 740 Get/Set USB device product id. If vendor and product ids are specified at creation \, tries to connect to devices only with such properties. Note: product id is specified in decimal mode \, not in hex. Type: int. Default value: 0\.; -#X msg 110 799 @rate; -#X text 245 799 Get/Set serial baud rate. Standard value supported +#X msg 110 812 @rate; +#X text 245 812 Get/Set serial baud rate. Standard value supported by most serial ports: 110 \, 300 \, 600 \, 1200 \, 2400 \, 4800 \, 9600 \, 14400 \, 19200 \, 28800 \, 38400 \, 56000 \, 57600 \, 115200\. Type: int. Default value: 57600\. Min value: 0\.; -#X msg 110 871 @reconnect; -#X text 245 871 enables hot-pluggin.; -#X msg 110 900 @serial; -#X text 245 900 Get/Set USB device serial number. If specified at creation +#X msg 110 884 @reconnect; +#X text 245 884 enables hot-pluggin.; +#X msg 110 913 @serial; +#X text 245 913 Get/Set USB device serial number. If specified at creation \, tries to connect to devices only with such serial number. Type: symbol.; -#X msg 110 957 @vendor_id; -#X text 245 957 Get/Set USB device vendor id. If specified at creation +#X msg 110 970 @vendor_id; +#X text 245 970 Get/Set USB device vendor id. If specified at creation \, tries to connect to devices only with such vendor. Note: vendor id is specified in decimal mode \, not in hex. Type: int. Default value: 0\.; -#X obj 20 1039 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1044 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 1052 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1057 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 1079 connect; -#X text 245 1079 manually connect to device.; -#X msg 110 1106 disconnect; -#X text 245 1106 disconnect from device.; -#X obj 20 1143 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1148 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +#X msg 110 1092 connect; +#X text 245 1092 manually connect to device.; +#X msg 110 1119 disconnect; +#X text 245 1119 disconnect from device.; +#X obj 20 1156 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1161 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1149 1\.; -#X text 150 1149 *float*; -#X text 245 1149 sends float value in byte range [0-255] to arduino +#X text 110 1162 1\.; +#X text 150 1162 *float*; +#X text 245 1162 sends float value in byte range [0-255] to arduino device.; -#X text 150 1169 *list*; -#X text 245 1169 sends list of floats in byte range [0-255] to arduino +#X text 150 1182 *list*; +#X text 245 1182 sends list of floats in byte range [0-255] to arduino device.; -#X obj 20 1199 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1204 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X obj 20 1212 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1217 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1205 1\.; -#X text 245 1205 outputs received byte from arduino.; +#X text 110 1218 1\.; +#X text 245 1218 outputs received byte from arduino.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title hw @url ceammc.hw-help.pd; -#X obj 1 1255 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1258 library: ceammc v0.7.1; -#N canvas 10 1277 400 290 info 0; +#X obj 1 1268 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1271 library: ceammc v0.8.0; +#N canvas 10 1290 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 hw.arduino; #X text 10 76 category:; @@ -111,7 +111,7 @@ device.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 arduino; #X text 10 186 website:; @@ -120,7 +120,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1277 pd info; +#X restore 10 1290 pd info; #X connect 6 0 11 0; #X connect 8 0 11 0; #X connect 10 0 11 0; diff --git a/ceammc/ext/doc/hw.arduino.pddoc b/ceammc/ext/doc/hw.arduino.pddoc index 0dcf325a5b..99dda0efb4 100644 --- a/ceammc/ext/doc/hw.arduino.pddoc +++ b/ceammc/ext/doc/hw.arduino.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky Arduino device - GPL3 + GPL3 or later ceammc hw arduino @@ -38,8 +38,8 @@ and product ids are specified at creation, tries to connect to devices only with such properties. Note: product id is specified in decimal mode, not in hex enables hot-pluggin - state of connection to - device + state of connection + to device list of found Arduino devices function called every time on diff --git a/ceammc/ext/doc/hw.cpu_temp-help.pd b/ceammc/ext/doc/hw.cpu_temp-help.pd index b2304f2149..daddaecddf 100644 --- a/ceammc/ext/doc/hw.cpu_temp-help.pd +++ b/ceammc/ext/doc/hw.cpu_temp-help.pd @@ -28,13 +28,13 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title hw @url ceammc.hw-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #N canvas 10 527 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 hw.cpu_temp; #X text 10 76 category:; @@ -44,7 +44,7 @@ #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 motion \, sensor; #X text 10 186 website:; diff --git a/ceammc/ext/doc/hw.cpu_temp.pddoc b/ceammc/ext/doc/hw.cpu_temp.pddoc index 00bb4c92f9..a177af0e6b 100644 --- a/ceammc/ext/doc/hw.cpu_temp.pddoc +++ b/ceammc/ext/doc/hw.cpu_temp.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky get CPU temperature - GPL3 + GPL3 or later ceammc hw motion sensor diff --git a/ceammc/ext/doc/hw.display-help.pd b/ceammc/ext/doc/hw.display-help.pd index 9bac11834c..59b7be0b6f 100644 --- a/ceammc/ext/doc/hw.display-help.pd +++ b/ceammc/ext/doc/hw.display-help.pd @@ -33,13 +33,13 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title hw @url ceammc.hw-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #N canvas 10 527 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 hw.display; #X text 10 76 category:; @@ -49,7 +49,7 @@ #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 display \, brightness; #X text 10 186 website:; diff --git a/ceammc/ext/doc/hw.display.pddoc b/ceammc/ext/doc/hw.display.pddoc index 546c043001..cae4a7e669 100644 --- a/ceammc/ext/doc/hw.display.pddoc +++ b/ceammc/ext/doc/hw.display.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky get/set display properties - GPL3 + GPL3 or later ceammc hw display brightness diff --git a/ceammc/ext/doc/hw.kbd_light-help.pd b/ceammc/ext/doc/hw.kbd_light-help.pd index 1f62beed10..3717177857 100644 --- a/ceammc/ext/doc/hw.kbd_light-help.pd +++ b/ceammc/ext/doc/hw.kbd_light-help.pd @@ -9,7 +9,7 @@ #X text 215 80 Only Apple keyboards are supported at this moment; #X obj 50 143 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; #X obj 50 172 metro 250; -#X obj 165 172 ui.knob @size 40 40; +#X obj 165 172 ui.knob; #X obj 50 230 hw.kbd_light; #X floatatom 50 259 5 0 0 0 - - -; #X obj 20 298 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; @@ -32,13 +32,13 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title hw @url ceammc.hw-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #N canvas 10 527 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 hw.kbd_light; #X text 10 76 category:; @@ -48,7 +48,7 @@ #X text 10 120 authors:; #X text 120 120 Serge Poltavsky \, Hans-Christoph Steiner; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 keyboard; #X text 10 186 website:; diff --git a/ceammc/ext/doc/hw.kbd_light.pddoc b/ceammc/ext/doc/hw.kbd_light.pddoc index 5d6504abcf..dabed8f905 100644 --- a/ceammc/ext/doc/hw.kbd_light.pddoc +++ b/ceammc/ext/doc/hw.kbd_light.pddoc @@ -8,7 +8,7 @@ Hans-Christoph Steiner Get/set keyboard light on some devices - GPL3 + GPL3 or later ceammc hw keyboard diff --git a/ceammc/ext/doc/is_any-help.pd b/ceammc/ext/doc/is_any-help.pd index d63a67cbf1..9cee786a2f 100644 --- a/ceammc/ext/doc/is_any-help.pd +++ b/ceammc/ext/doc/is_any-help.pd @@ -31,7 +31,7 @@ #X obj 131 48 ui.link @title predicates @url ceammc.predicates-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #X text 399 520 see also:; #X obj 473 520 is_bang; #X obj 538 520 is_float; @@ -42,7 +42,7 @@ ceammc.predicates-help.pd; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 is_any; #X text 10 76 category:; @@ -52,7 +52,7 @@ ceammc.predicates-help.pd; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 predicate \, any; #X text 10 186 website:; diff --git a/ceammc/ext/doc/is_any.pddoc b/ceammc/ext/doc/is_any.pddoc index cdb30dccdd..1f701a50fa 100644 --- a/ceammc/ext/doc/is_any.pddoc +++ b/ceammc/ext/doc/is_any.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky checks if input data has *any* type - GPL3 + GPL3 or later ceammc predicates predicate any diff --git a/ceammc/ext/doc/is_bang-help.pd b/ceammc/ext/doc/is_bang-help.pd index b2420fa2a3..4620fc49fb 100644 --- a/ceammc/ext/doc/is_bang-help.pd +++ b/ceammc/ext/doc/is_bang-help.pd @@ -32,7 +32,7 @@ #X obj 131 48 ui.link @title predicates @url ceammc.predicates-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #X text 406 520 see also:; #X obj 480 520 is_any; #X obj 538 520 is_float; @@ -43,7 +43,7 @@ ceammc.predicates-help.pd; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 is_bang; #X text 10 76 category:; @@ -53,7 +53,7 @@ ceammc.predicates-help.pd; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 predicate \, bang; #X text 10 186 website:; diff --git a/ceammc/ext/doc/is_bang.pddoc b/ceammc/ext/doc/is_bang.pddoc index b897fe8826..af12771879 100644 --- a/ceammc/ext/doc/is_bang.pddoc +++ b/ceammc/ext/doc/is_bang.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky checks if input data has *bang* type - GPL3 + GPL3 or later ceammc predicates predicate bang diff --git a/ceammc/ext/doc/is_data-help.pd b/ceammc/ext/doc/is_data-help.pd index e1422a1308..55745599eb 100644 --- a/ceammc/ext/doc/is_data-help.pd +++ b/ceammc/ext/doc/is_data-help.pd @@ -38,7 +38,7 @@ #X obj 131 48 ui.link @title predicates @url ceammc.predicates-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #X text 464 520 see also:; #X obj 538 520 is_float; #X obj 610 520 is_symbol; @@ -48,7 +48,7 @@ ceammc.predicates-help.pd; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 is_data; #X text 10 76 category:; @@ -58,7 +58,7 @@ ceammc.predicates-help.pd; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 predicate \, data; #X text 10 186 website:; diff --git a/ceammc/ext/doc/is_data.pddoc b/ceammc/ext/doc/is_data.pddoc index bf225758ee..35c13b4d2d 100644 --- a/ceammc/ext/doc/is_data.pddoc +++ b/ceammc/ext/doc/is_data.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky checks if input data has *data* type - GPL3 + GPL3 or later ceammc predicates predicate data diff --git a/ceammc/ext/doc/is_dict-help.pd b/ceammc/ext/doc/is_dict-help.pd index 236e1c7aa8..7865a32e64 100644 --- a/ceammc/ext/doc/is_dict-help.pd +++ b/ceammc/ext/doc/is_dict-help.pd @@ -31,7 +31,7 @@ #X obj 131 48 ui.link @title predicates @url ceammc.predicates-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #X text 601 520 see also:; #X obj 675 520 data.dict; #N canvas 10 527 400 290 info 0; @@ -39,7 +39,7 @@ ceammc.predicates-help.pd; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 is_dict; #X text 10 76 category:; @@ -49,7 +49,7 @@ ceammc.predicates-help.pd; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 dictionary; #X text 10 186 website:; diff --git a/ceammc/ext/doc/is_dict.pddoc b/ceammc/ext/doc/is_dict.pddoc index 49d347c5a3..019b4563a4 100644 --- a/ceammc/ext/doc/is_dict.pddoc +++ b/ceammc/ext/doc/is_dict.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky checks if input data has *dict* type - GPL3 + GPL3 or later ceammc predicates dictionary diff --git a/ceammc/ext/doc/is_even-help.pd b/ceammc/ext/doc/is_even-help.pd index 1f05df5842..df90c2987d 100644 --- a/ceammc/ext/doc/is_even-help.pd +++ b/ceammc/ext/doc/is_even-help.pd @@ -33,7 +33,7 @@ is performed.; #X obj 131 48 ui.link @title predicates @url ceammc.predicates-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #X text 623 520 see also:; #X obj 697 520 is_odd; #N canvas 10 527 400 290 info 0; @@ -41,7 +41,7 @@ ceammc.predicates-help.pd; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 is_even; #X text 10 76 category:; @@ -51,7 +51,7 @@ ceammc.predicates-help.pd; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 predicate \, numbers; #X text 10 186 website:; diff --git a/ceammc/ext/doc/is_even.pddoc b/ceammc/ext/doc/is_even.pddoc index da994ca915..505e8a3e7c 100644 --- a/ceammc/ext/doc/is_even.pddoc +++ b/ceammc/ext/doc/is_even.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky checks if input number is even - GPL3 + GPL3 or later ceammc predicates predicate numbers diff --git a/ceammc/ext/doc/is_file-help.pd b/ceammc/ext/doc/is_file-help.pd index f179cedf99..cb69aa29b8 100644 --- a/ceammc/ext/doc/is_file-help.pd +++ b/ceammc/ext/doc/is_file-help.pd @@ -31,13 +31,13 @@ directory; #X obj 131 48 ui.link @title predicates @url ceammc.predicates-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #N canvas 10 527 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 is_file; #X text 10 76 category:; @@ -47,7 +47,7 @@ ceammc.predicates-help.pd; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 predicate \, filesystem; #X text 10 186 website:; diff --git a/ceammc/ext/doc/is_file.pddoc b/ceammc/ext/doc/is_file.pddoc index 66e18cfe64..5ca1b162b4 100644 --- a/ceammc/ext/doc/is_file.pddoc +++ b/ceammc/ext/doc/is_file.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky checks if file exists and accessible - GPL3 + GPL3 or later ceammc predicates predicate filesystem diff --git a/ceammc/ext/doc/is_float-help.pd b/ceammc/ext/doc/is_float-help.pd index f883505b58..e90858bbf1 100644 --- a/ceammc/ext/doc/is_float-help.pd +++ b/ceammc/ext/doc/is_float-help.pd @@ -32,7 +32,7 @@ #X obj 131 48 ui.link @title predicates @url ceammc.predicates-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #X text 413 520 see also:; #X obj 487 520 is_any; #X obj 545 520 is_bang; @@ -43,7 +43,7 @@ ceammc.predicates-help.pd; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 is_float; #X text 10 76 category:; @@ -53,7 +53,7 @@ ceammc.predicates-help.pd; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 predicate \, float; #X text 10 186 website:; diff --git a/ceammc/ext/doc/is_float.pddoc b/ceammc/ext/doc/is_float.pddoc index 9b3bc97b4e..40466154bb 100644 --- a/ceammc/ext/doc/is_float.pddoc +++ b/ceammc/ext/doc/is_float.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky checks if input data has *float* type - GPL3 + GPL3 or later ceammc predicates predicate float diff --git a/ceammc/ext/doc/is_list-help.pd b/ceammc/ext/doc/is_list-help.pd index 6235f96db4..8bde713047 100644 --- a/ceammc/ext/doc/is_list-help.pd +++ b/ceammc/ext/doc/is_list-help.pd @@ -33,7 +33,7 @@ #X obj 131 48 ui.link @title predicates @url ceammc.predicates-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #X text 406 520 see also:; #X obj 480 520 is_any; #X obj 538 520 is_bang; @@ -44,7 +44,7 @@ ceammc.predicates-help.pd; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 is_list; #X text 10 76 category:; @@ -54,7 +54,7 @@ ceammc.predicates-help.pd; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 predicate \, list; #X text 10 186 website:; diff --git a/ceammc/ext/doc/is_list.pddoc b/ceammc/ext/doc/is_list.pddoc index b50bb8af2d..02ded5cc2f 100644 --- a/ceammc/ext/doc/is_list.pddoc +++ b/ceammc/ext/doc/is_list.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky checks if input data has *list* type - GPL3 + GPL3 or later ceammc predicates predicate list diff --git a/ceammc/ext/doc/is_odd-help.pd b/ceammc/ext/doc/is_odd-help.pd index 0e6c210d19..0137892052 100644 --- a/ceammc/ext/doc/is_odd-help.pd +++ b/ceammc/ext/doc/is_odd-help.pd @@ -32,7 +32,7 @@ is performed.; #X obj 131 48 ui.link @title predicates @url ceammc.predicates-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #X text 616 520 see also:; #X obj 690 520 is_even; #N canvas 10 527 400 290 info 0; @@ -40,7 +40,7 @@ ceammc.predicates-help.pd; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 is_odd; #X text 10 76 category:; @@ -50,7 +50,7 @@ ceammc.predicates-help.pd; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 predicate \, numbers; #X text 10 186 website:; diff --git a/ceammc/ext/doc/is_odd.pddoc b/ceammc/ext/doc/is_odd.pddoc index 58536ff927..026170e5b8 100644 --- a/ceammc/ext/doc/is_odd.pddoc +++ b/ceammc/ext/doc/is_odd.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky checks if input number is odd - GPL3 + GPL3 or later ceammc predicates predicate numbers diff --git a/ceammc/ext/doc/is_pointer-help.pd b/ceammc/ext/doc/is_pointer-help.pd index 43f12e2779..f224d0603e 100644 --- a/ceammc/ext/doc/is_pointer-help.pd +++ b/ceammc/ext/doc/is_pointer-help.pd @@ -35,7 +35,7 @@ #X obj 131 48 ui.link @title predicates @url ceammc.predicates-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #X text 406 520 see also:; #X obj 480 520 is_any; #X obj 538 520 is_float; @@ -46,7 +46,7 @@ ceammc.predicates-help.pd; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 is_pointer; #X text 10 76 category:; @@ -56,7 +56,7 @@ ceammc.predicates-help.pd; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 predicate \, pointer; #X text 10 186 website:; diff --git a/ceammc/ext/doc/is_pointer.pddoc b/ceammc/ext/doc/is_pointer.pddoc index bbf675438f..866269d8f2 100644 --- a/ceammc/ext/doc/is_pointer.pddoc +++ b/ceammc/ext/doc/is_pointer.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky checks if input data has *pointer* type - GPL3 + GPL3 or later ceammc predicates predicate pointer diff --git a/ceammc/ext/doc/is_symbol-help.pd b/ceammc/ext/doc/is_symbol-help.pd index cbcb8449e9..9c14d79bd9 100644 --- a/ceammc/ext/doc/is_symbol-help.pd +++ b/ceammc/ext/doc/is_symbol-help.pd @@ -33,7 +33,7 @@ #X obj 131 48 ui.link @title predicates @url ceammc.predicates-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #X text 421 520 see also:; #X obj 495 520 is_any; #X obj 553 520 is_bang; @@ -44,7 +44,7 @@ ceammc.predicates-help.pd; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 is_symbol; #X text 10 76 category:; @@ -54,7 +54,7 @@ ceammc.predicates-help.pd; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 predicate \, symbol; #X text 10 186 website:; diff --git a/ceammc/ext/doc/is_symbol.pddoc b/ceammc/ext/doc/is_symbol.pddoc index b8bdcf3d06..1ed7b1141f 100644 --- a/ceammc/ext/doc/is_symbol.pddoc +++ b/ceammc/ext/doc/is_symbol.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky checks if input data has *symbol* type - GPL3 + GPL3 or later ceammc predicates predicate symbol diff --git a/ceammc/ext/doc/lfo.+pulse~-help.pd b/ceammc/ext/doc/lfo.+pulse~-help.pd index a3eccdcf06..9ebe4c85b1 100644 --- a/ceammc/ext/doc/lfo.+pulse~-help.pd +++ b/ceammc/ext/doc/lfo.+pulse~-help.pd @@ -7,7 +7,7 @@ #X obj 660 11 lfo.+pulse~; #X obj 50 118 osc.saw~ 1200; #X floatatom 203 118 5 0 0 0 - - -; -#X obj 270 118 ui.knob @size 40 40; +#X obj 270 118 ui.knob; #X obj 366 118 ui.dsp~; #X msg 270 162 @duty \$1; #X obj 203 190 lfo.+pulse~ 3 0.1; @@ -53,7 +53,7 @@ Range: 0\...1\.; #X text 115 45 ::; #X obj 131 48 ui.link @title lfo @url ceammc.lfo-help.pd; #X obj 1 652 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 655 library: ceammc v0.7.1; +#X text 10 655 library: ceammc v0.8.0; #X text 389 667 see also:; #X obj 463 667 lfo.pulse~; #X obj 551 667 lfo.+square~; @@ -63,7 +63,7 @@ Range: 0\...1\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 lfo.+pulse~; #X text 10 76 category:; @@ -73,7 +73,7 @@ Range: 0\...1\.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 lfo \, oscillator \, pulse \, train; #X text 10 186 website:; diff --git a/ceammc/ext/doc/lfo.+pulse~.pddoc b/ceammc/ext/doc/lfo.+pulse~.pddoc index 47cd00090f..71b364aeb6 100644 --- a/ceammc/ext/doc/lfo.+pulse~.pddoc +++ b/ceammc/ext/doc/lfo.+pulse~.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky Unit-amplitude nonnegative low frequency pulse train - GPL3 + GPL3 or later ceammc lfo lfo oscillator pulse train diff --git a/ceammc/ext/doc/lfo.+saw~-help.pd b/ceammc/ext/doc/lfo.+saw~-help.pd index e0890e1a1a..8800ef3e00 100644 --- a/ceammc/ext/doc/lfo.+saw~-help.pd +++ b/ceammc/ext/doc/lfo.+saw~-help.pd @@ -54,7 +54,7 @@ Allowed values: 0 \, 1\.; #X text 115 45 ::; #X obj 131 48 ui.link @title lfo @url ceammc.lfo-help.pd; #X obj 1 695 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 698 library: ceammc v0.7.1; +#X text 10 698 library: ceammc v0.8.0; #X text 404 710 see also:; #X obj 478 710 lfo.saw~; #X obj 551 710 lfo.+square~; @@ -64,7 +64,7 @@ Allowed values: 0 \, 1\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 lfo.+saw~; #X text 10 76 category:; @@ -74,7 +74,7 @@ Allowed values: 0 \, 1\.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 lfo \, oscillator \, saw; #X text 10 186 website:; diff --git a/ceammc/ext/doc/lfo.+saw~.pddoc b/ceammc/ext/doc/lfo.+saw~.pddoc index 47d0616acb..7f148bf284 100644 --- a/ceammc/ext/doc/lfo.+saw~.pddoc +++ b/ceammc/ext/doc/lfo.+saw~.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky Positive unit-amplitude low frequency saw wave - GPL3 + GPL3 or later ceammc lfo lfo oscillator saw diff --git a/ceammc/ext/doc/lfo.+square~-help.pd b/ceammc/ext/doc/lfo.+square~-help.pd index 2e54fad604..55660c7c4c 100644 --- a/ceammc/ext/doc/lfo.+square~-help.pd +++ b/ceammc/ext/doc/lfo.+square~-help.pd @@ -44,7 +44,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title lfo @url ceammc.lfo-help.pd; #X obj 1 547 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 550 library: ceammc v0.7.1; +#X text 10 550 library: ceammc v0.8.0; #X text 411 562 see also:; #X obj 485 562 lfo.square~; #X obj 580 562 lfo.impulse~; @@ -54,7 +54,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 lfo.+square~; #X text 10 76 category:; @@ -64,7 +64,7 @@ #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 lfo \, oscillator \, square; #X text 10 186 website:; diff --git a/ceammc/ext/doc/lfo.+square~.pddoc b/ceammc/ext/doc/lfo.+square~.pddoc index 86a58a0846..601a15085b 100644 --- a/ceammc/ext/doc/lfo.+square~.pddoc +++ b/ceammc/ext/doc/lfo.+square~.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky Positive low frequency square wave - GPL3 + GPL3 or later ceammc lfo lfo oscillator square diff --git a/ceammc/ext/doc/lfo.+tri~-help.pd b/ceammc/ext/doc/lfo.+tri~-help.pd index b061166c9c..b20cd0b058 100644 --- a/ceammc/ext/doc/lfo.+tri~-help.pd +++ b/ceammc/ext/doc/lfo.+tri~-help.pd @@ -44,7 +44,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title lfo @url ceammc.lfo-help.pd; #X obj 1 547 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 550 library: ceammc v0.7.1; +#X text 10 550 library: ceammc v0.8.0; #X text 411 562 see also:; #X obj 485 562 lfo.tri~; #X obj 558 562 lfo.square~; @@ -54,7 +54,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 lfo.+tri~; #X text 10 76 category:; @@ -64,7 +64,7 @@ #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 lfo \, oscillator \, triangle; #X text 10 186 website:; diff --git a/ceammc/ext/doc/lfo.+tri~.pddoc b/ceammc/ext/doc/lfo.+tri~.pddoc index 4bb67a695a..23904da8b4 100644 --- a/ceammc/ext/doc/lfo.+tri~.pddoc +++ b/ceammc/ext/doc/lfo.+tri~.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky Positive unit-amplitude low frequency triangle wave - GPL3 + GPL3 or later ceammc lfo lfo oscillator triangle diff --git a/ceammc/ext/doc/lfo.impulse~-help.pd b/ceammc/ext/doc/lfo.impulse~-help.pd index 6e4bdb5066..3265c1044e 100644 --- a/ceammc/ext/doc/lfo.impulse~-help.pd +++ b/ceammc/ext/doc/lfo.impulse~-help.pd @@ -39,13 +39,13 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title lfo @url ceammc.lfo-help.pd; #X obj 1 512 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 515 library: ceammc v0.7.1; +#X text 10 515 library: ceammc v0.8.0; #N canvas 10 534 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 lfo.impulse~; #X text 10 76 category:; @@ -55,7 +55,7 @@ #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 lfo \, oscillator; #X text 10 186 website:; diff --git a/ceammc/ext/doc/lfo.impulse~.pddoc b/ceammc/ext/doc/lfo.impulse~.pddoc index 353cc95a41..15028a5719 100644 --- a/ceammc/ext/doc/lfo.impulse~.pddoc +++ b/ceammc/ext/doc/lfo.impulse~.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky Unit-amplitude low-frequency impulse train - GPL3 + GPL3 or later ceammc lfo lfo oscillator diff --git a/ceammc/ext/doc/lfo.pulse~-help.pd b/ceammc/ext/doc/lfo.pulse~-help.pd index 0d8a492372..2162919a84 100644 --- a/ceammc/ext/doc/lfo.pulse~-help.pd +++ b/ceammc/ext/doc/lfo.pulse~-help.pd @@ -6,7 +6,7 @@ -4096 0; #X obj 667 11 lfo.pulse~; #X obj 50 118 osc.saw~ 100; -#X obj 280 118 ui.knob @size 40 40; +#X obj 280 118 ui.knob; #X obj 50 147 ui.gain~ @size 120 14; #X floatatom 194 176 5 0 0 0 - - -; #X msg 280 176 @duty \$1; @@ -53,7 +53,7 @@ Range: 0\...1\.; #X text 115 45 ::; #X obj 131 48 ui.link @title lfo @url ceammc.lfo-help.pd; #X obj 1 637 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 640 library: ceammc v0.7.1; +#X text 10 640 library: ceammc v0.8.0; #X text 389 652 see also:; #X obj 463 652 lfo.+pulse~; #X obj 558 652 lfo.square~; @@ -63,7 +63,7 @@ Range: 0\...1\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 lfo.pulse~; #X text 10 76 category:; @@ -73,7 +73,7 @@ Range: 0\...1\.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 lfo \, oscillator \, pulse \, train; #X text 10 186 website:; diff --git a/ceammc/ext/doc/lfo.pulse~.pddoc b/ceammc/ext/doc/lfo.pulse~.pddoc index 5668c012d8..0b7d28fa27 100644 --- a/ceammc/ext/doc/lfo.pulse~.pddoc +++ b/ceammc/ext/doc/lfo.pulse~.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky Full-range unit-amplitude low frequency pulse train - GPL3 + GPL3 or later ceammc lfo lfo oscillator pulse train diff --git a/ceammc/ext/doc/lfo.saw~-help.pd b/ceammc/ext/doc/lfo.saw~-help.pd index 6a39fdb662..e89778e308 100644 --- a/ceammc/ext/doc/lfo.saw~-help.pd +++ b/ceammc/ext/doc/lfo.saw~-help.pd @@ -53,7 +53,7 @@ Allowed values: 0 \, 1\.; #X text 115 45 ::; #X obj 131 48 ui.link @title lfo @url ceammc.lfo-help.pd; #X obj 1 637 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 640 library: ceammc v0.7.1; +#X text 10 640 library: ceammc v0.8.0; #X text 403 652 see also:; #X obj 477 652 lfo.+saw~; #X obj 558 652 lfo.square~; @@ -63,7 +63,7 @@ Allowed values: 0 \, 1\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 lfo.saw~; #X text 10 76 category:; @@ -73,7 +73,7 @@ Allowed values: 0 \, 1\.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 lfo \, oscillator \, saw \, phasor; #X text 10 186 website:; diff --git a/ceammc/ext/doc/lfo.saw~.pddoc b/ceammc/ext/doc/lfo.saw~.pddoc index 3f1d65129c..ed322cf98a 100644 --- a/ceammc/ext/doc/lfo.saw~.pddoc +++ b/ceammc/ext/doc/lfo.saw~.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky Full-range unit-amplitude low frequency saw - GPL3 + GPL3 or later ceammc lfo lfo oscillator saw phasor diff --git a/ceammc/ext/doc/lfo.square~-help.pd b/ceammc/ext/doc/lfo.square~-help.pd index aed7ae5dd9..9dddc46dae 100644 --- a/ceammc/ext/doc/lfo.square~-help.pd +++ b/ceammc/ext/doc/lfo.square~-help.pd @@ -45,7 +45,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title lfo @url ceammc.lfo-help.pd; #X obj 1 575 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 578 library: ceammc v0.7.1; +#X text 10 578 library: ceammc v0.8.0; #X text 404 590 see also:; #X obj 478 590 lfo.+square~; #X obj 580 590 lfo.impulse~; @@ -55,7 +55,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 lfo.square~; #X text 10 76 category:; @@ -65,7 +65,7 @@ #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 lfo \, oscillator \, square; #X text 10 186 website:; diff --git a/ceammc/ext/doc/lfo.square~.pddoc b/ceammc/ext/doc/lfo.square~.pddoc index fff4bcae18..b03fa46164 100644 --- a/ceammc/ext/doc/lfo.square~.pddoc +++ b/ceammc/ext/doc/lfo.square~.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky Zero-mean unit-amplitude low frequency square wave - GPL3 + GPL3 or later ceammc lfo lfo oscillator square diff --git a/ceammc/ext/doc/lfo.tri~-help.pd b/ceammc/ext/doc/lfo.tri~-help.pd index bd9f3db081..bb14104719 100644 --- a/ceammc/ext/doc/lfo.tri~-help.pd +++ b/ceammc/ext/doc/lfo.tri~-help.pd @@ -44,7 +44,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title lfo @url ceammc.lfo-help.pd; #X obj 1 575 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 578 library: ceammc v0.7.1; +#X text 10 578 library: ceammc v0.8.0; #X text 403 590 see also:; #X obj 477 590 lfo.+tri~; #X obj 558 590 lfo.square~; @@ -54,7 +54,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 lfo.tri~; #X text 10 76 category:; @@ -64,7 +64,7 @@ #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 lfo \, oscillator \, triangle; #X text 10 186 website:; diff --git a/ceammc/ext/doc/lfo.tri~.pddoc b/ceammc/ext/doc/lfo.tri~.pddoc index c59db3e5e3..01774aad01 100644 --- a/ceammc/ext/doc/lfo.tri~.pddoc +++ b/ceammc/ext/doc/lfo.tri~.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky Zero-mean unit-amplitude low frequency triangle wave - GPL3 + GPL3 or later ceammc lfo lfo oscillator triangle diff --git a/ceammc/ext/doc/list.^at-help.pd b/ceammc/ext/doc/list.^at-help.pd index f5954f1932..028465c9c3 100644 --- a/ceammc/ext/doc/list.^at-help.pd +++ b/ceammc/ext/doc/list.^at-help.pd @@ -61,7 +61,7 @@ elements are returned. Other indexes are wrapped by modulo division.; #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; #X obj 1 765 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 768 library: ceammc v0.7.1; +#X text 10 768 library: ceammc v0.8.0; #X text 616 780 see also:; #X obj 690 780 list.at; #N canvas 10 787 400 290 info 0; @@ -69,7 +69,7 @@ elements are returned. Other indexes are wrapped by modulo division.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 list.^at; #X text 10 76 category:; @@ -79,7 +79,7 @@ elements are returned. Other indexes are wrapped by modulo division.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 list \, at; #X text 10 186 website:; diff --git a/ceammc/ext/doc/list.^at.pddoc b/ceammc/ext/doc/list.^at.pddoc index 81b7e85898..0eae3d5bd9 100644 --- a/ceammc/ext/doc/list.^at.pddoc +++ b/ceammc/ext/doc/list.^at.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky on input index(es) outputs list element(s) - GPL3 + GPL3 or later ceammc list list at diff --git a/ceammc/ext/doc/list.^contains-help.pd b/ceammc/ext/doc/list.^contains-help.pd index 5bc2ee900c..4edce275e3 100644 --- a/ceammc/ext/doc/list.^contains-help.pd +++ b/ceammc/ext/doc/list.^contains-help.pd @@ -60,7 +60,7 @@ it; #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; #X obj 1 657 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 660 library: ceammc v0.7.1; +#X text 10 660 library: ceammc v0.8.0; #X text 378 672 see also:; #X obj 452 672 list.contains; #X obj 560 672 list.all_of; @@ -70,7 +70,7 @@ it; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 list.^contains; #X text 10 76 category:; @@ -80,7 +80,7 @@ it; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 list \, predicate \, any; #X text 10 186 website:; diff --git a/ceammc/ext/doc/list.^contains.pddoc b/ceammc/ext/doc/list.^contains.pddoc index 8d0d14153a..5da2632077 100644 --- a/ceammc/ext/doc/list.^contains.pddoc +++ b/ceammc/ext/doc/list.^contains.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky on input atom or list checks if specified list contains it - GPL3 + GPL3 or later ceammc list list predicate any diff --git a/ceammc/ext/doc/list.^search-help.pd b/ceammc/ext/doc/list.^search-help.pd index b632039e56..afc34430e5 100644 --- a/ceammc/ext/doc/list.^search-help.pd +++ b/ceammc/ext/doc/list.^search-help.pd @@ -53,7 +53,7 @@ value: 0\. Min value: 0\.; #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; #X obj 1 661 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 664 library: ceammc v0.7.1; +#X text 10 664 library: ceammc v0.8.0; #X text 363 676 see also:; #X obj 437 676 list.search; #X obj 531 676 list.contains; @@ -63,7 +63,7 @@ value: 0\. Min value: 0\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 list.^search; #X text 10 76 category:; @@ -73,7 +73,7 @@ value: 0\. Min value: 0\.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 list \, search \, index \, find; #X text 10 186 website:; diff --git a/ceammc/ext/doc/list.^search.pddoc b/ceammc/ext/doc/list.^search.pddoc index 9080b18f72..f1ba4d8a3c 100644 --- a/ceammc/ext/doc/list.^search.pddoc +++ b/ceammc/ext/doc/list.^search.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky on input atom returns it index in list - GPL3 + GPL3 or later ceammc list list search index find diff --git a/ceammc/ext/doc/list.all_of-help.pd b/ceammc/ext/doc/list.all_of-help.pd index a7494e2db4..995078d107 100644 --- a/ceammc/ext/doc/list.all_of-help.pd +++ b/ceammc/ext/doc/list.all_of-help.pd @@ -42,7 +42,7 @@ or list is empty or 0 otherwise.; #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; #X obj 1 508 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 511 library: ceammc v0.7.1; +#X text 10 511 library: ceammc v0.8.0; #X text 580 523 see also:; #X obj 654 523 list.none_of; #N canvas 10 530 400 290 info 0; @@ -50,7 +50,7 @@ or list is empty or 0 otherwise.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 list.all_of; #X text 10 76 category:; @@ -60,7 +60,7 @@ or list is empty or 0 otherwise.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 list \, predicate \, all; #X text 10 186 website:; diff --git a/ceammc/ext/doc/list.all_of.pddoc b/ceammc/ext/doc/list.all_of.pddoc index c4ef5b34eb..df2d2e99ea 100644 --- a/ceammc/ext/doc/list.all_of.pddoc +++ b/ceammc/ext/doc/list.all_of.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky checks if all list atoms accepted by predicate - GPL3 + GPL3 or later ceammc list list predicate all diff --git a/ceammc/ext/doc/list.any_of-help.pd b/ceammc/ext/doc/list.any_of-help.pd index 6d6b9ec243..038395e742 100644 --- a/ceammc/ext/doc/list.any_of-help.pd +++ b/ceammc/ext/doc/list.any_of-help.pd @@ -40,7 +40,7 @@ or list is empty or 0 otherwise.; #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #X text 486 520 see also:; #X obj 560 520 list.all_of; #X obj 654 520 list.none_of; @@ -49,7 +49,7 @@ or list is empty or 0 otherwise.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 list.any_of; #X text 10 76 category:; @@ -59,7 +59,7 @@ or list is empty or 0 otherwise.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 list \, predicate \, any; #X text 10 186 website:; diff --git a/ceammc/ext/doc/list.any_of.pddoc b/ceammc/ext/doc/list.any_of.pddoc index e990bb789f..da11d0206e 100644 --- a/ceammc/ext/doc/list.any_of.pddoc +++ b/ceammc/ext/doc/list.any_of.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky checks if at least one list element is accepted by predicate - GPL3 + GPL3 or later ceammc list list predicate any diff --git a/ceammc/ext/doc/list.append-help.pd b/ceammc/ext/doc/list.append-help.pd index 4d72cf6b59..fab68fe418 100644 --- a/ceammc/ext/doc/list.append-help.pd +++ b/ceammc/ext/doc/list.append-help.pd @@ -49,7 +49,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #X text 587 520 see also:; #X obj 661 520 list append; #N canvas 10 527 400 290 info 0; @@ -57,7 +57,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 list.append; #X text 10 76 category:; @@ -67,7 +67,7 @@ #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 list \, append; #X text 10 186 website:; diff --git a/ceammc/ext/doc/list.append.pddoc b/ceammc/ext/doc/list.append.pddoc index 96d0fba882..4af1700d4b 100644 --- a/ceammc/ext/doc/list.append.pddoc +++ b/ceammc/ext/doc/list.append.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky append atom or list to the end of input list - GPL3 + GPL3 or later ceammc list list append diff --git a/ceammc/ext/doc/list.apply_to-help.pd b/ceammc/ext/doc/list.apply_to-help.pd index 97996b6665..c83129e509 100644 --- a/ceammc/ext/doc/list.apply_to-help.pd +++ b/ceammc/ext/doc/list.apply_to-help.pd @@ -46,7 +46,7 @@ object.; #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; #X obj 1 511 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 514 library: ceammc v0.7.1; +#X text 10 514 library: ceammc v0.8.0; #X text 601 526 see also:; #X obj 675 526 list.each; #N canvas 10 533 400 290 info 0; @@ -54,7 +54,7 @@ object.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 list.apply_to; #X text 10 76 category:; @@ -64,7 +64,7 @@ object.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 list \, functional \, apply; #X text 10 186 website:; diff --git a/ceammc/ext/doc/list.apply_to.pddoc b/ceammc/ext/doc/list.apply_to.pddoc index 9ac3da528f..ab4a9d4037 100644 --- a/ceammc/ext/doc/list.apply_to.pddoc +++ b/ceammc/ext/doc/list.apply_to.pddoc @@ -8,7 +8,7 @@ modifies list value at specified position, filtering it via external object. - GPL3 + GPL3 or later ceammc list list functional apply diff --git a/ceammc/ext/doc/list.at-help.pd b/ceammc/ext/doc/list.at-help.pd index 5c2d846d31..9a8319b405 100644 --- a/ceammc/ext/doc/list.at-help.pd +++ b/ceammc/ext/doc/list.at-help.pd @@ -48,54 +48,59 @@ are returned. Other indexes are wrapped by modulo division.; #X msg 110 716 @clip; #X text 245 716 alias to @method clip. If index < 0 - return first element. If index greater or equal list size - return last element.; -#X msg 110 758 @fold; -#X text 245 758 alias to @method fold. In range [0 \, LIST_SIZE) ordinal +#X msg 110 758 @default; +#X text 245 758 Get/Set default output value if not found. If not set +\, outputs error message to console. Type: atom.; +#X msg 110 800 @fold; +#X text 245 800 alias to @method fold. In range [0 \, LIST_SIZE) ordinal elements are returned. [LIST_SIZE \, 2*LIST_SIZE) - returned in negative order etc.; -#X msg 110 815 @index; -#X text 245 815 Get/Set indexes. Type: list.; -#X msg 110 844 @method; -#X text 245 844 Get/Set methods of processing of negative/invalid indexes. +#X msg 110 857 @index; +#X text 245 857 Get/Set indexes. Type: list.; +#X msg 110 886 @method; +#X text 245 886 Get/Set methods of processing of negative/invalid indexes. Type: symbol. Default value: rel. Allowed values: rel \, clip \, fold \, wrap.; -#X msg 110 901 @rel; -#X text 245 901 alias to @method rel. Negative index means position +#X msg 110 943 @rel; +#X text 245 943 alias to @method rel. Negative index means position from the end of the list.; -#X msg 110 943 @wrap; -#X text 245 943 alias to @method wrap. In range [0 \, LIST_SIZE) ordinal +#X msg 110 985 @wrap; +#X text 245 985 alias to @method wrap. In range [0 \, LIST_SIZE) ordinal elements are returned. Other indexes are wrapped by modulo division.; -#X obj 20 1010 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1015 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +#X obj 20 1052 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1057 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1016 1\.; -#X text 150 1016 *list*; -#X text 245 1016 input list.; -#X text 150 1036 *data:mlist*; -#X text 245 1036 input mlist.; -#X text 110 1056 2\.; -#X text 150 1056 *list*; -#X text 245 1056 positions.; -#X obj 20 1086 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1091 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 1058 1\.; +#X text 150 1058 *list*; +#X text 245 1058 input list.; +#X text 150 1078 *data:mlist*; +#X text 245 1078 input mlist.; +#X text 110 1098 2\.; +#X text 150 1098 *list*; +#X text 245 1098 positions.; +#X obj 20 1128 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1133 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1092 1\.; -#X text 245 1092 element(s) at the given index position(s).; +#X text 110 1134 1\.; +#X text 245 1134 element(s) at the given index position(s). If element +not found at specified position and @default property is set \, output +that default value.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; -#X obj 1 1142 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1145 library: ceammc v0.7.1; -#X text 500 1157 see also:; -#X obj 574 1157 list.^at; -#X obj 646 1157 list.apply_to; -#N canvas 10 1164 400 290 info 0; +#X obj 1 1214 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1217 library: ceammc v0.8.0; +#X text 500 1229 see also:; +#X obj 574 1229 list.^at; +#X obj 646 1229 list.apply_to; +#N canvas 10 1236 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 list.at; #X text 10 76 category:; @@ -105,7 +110,7 @@ elements are returned. Other indexes are wrapped by modulo division.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 list; #X text 10 186 website:; @@ -114,7 +119,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1164 pd info; +#X restore 10 1236 pd info; #X connect 9 0 13 0; #X connect 10 0 13 1; #X connect 11 0 14 0; diff --git a/ceammc/ext/doc/list.at.pddoc b/ceammc/ext/doc/list.at.pddoc index cb69a317a0..98e20dc1f2 100644 --- a/ceammc/ext/doc/list.at.pddoc +++ b/ceammc/ext/doc/list.at.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky on input list outputs element(s) at specified index(es) - GPL3 + GPL3 or later ceammc list list @@ -43,6 +43,8 @@ alias to @method wrap. In range [0, LIST_SIZE) ordinal elements are returned. Other indexes are wrapped by modulo division. indexes + default output value if not found. If not set, + outputs error message to console @@ -54,7 +56,8 @@ - element(s) at the given index position(s) + element(s) at the given index position(s). If element not found at specified + position and @default property is set, output that default value diff --git a/ceammc/ext/doc/list.choice-help.pd b/ceammc/ext/doc/list.choice-help.pd index 972e1ab4c2..b8f5bdccad 100644 --- a/ceammc/ext/doc/list.choice-help.pd +++ b/ceammc/ext/doc/list.choice-help.pd @@ -44,7 +44,7 @@ twice at adjacent events. Type: int. Default value: 0\. Allowed values: #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; #X obj 1 651 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 654 library: ceammc v0.7.1; +#X text 10 654 library: ceammc v0.8.0; #X text 595 666 see also:; #X obj 669 666 random.int; #N canvas 10 673 400 290 info 0; @@ -52,7 +52,7 @@ twice at adjacent events. Type: int. Default value: 0\. Allowed values: #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 list.choice; #X text 10 76 category:; @@ -62,7 +62,7 @@ twice at adjacent events. Type: int. Default value: 0\. Allowed values: #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 list \, random \, choice; #X text 10 186 website:; diff --git a/ceammc/ext/doc/list.choice.pddoc b/ceammc/ext/doc/list.choice.pddoc index 422aacaf30..ea5fdffdf1 100644 --- a/ceammc/ext/doc/list.choice.pddoc +++ b/ceammc/ext/doc/list.choice.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky returns random element from list - GPL3 + GPL3 or later ceammc list list random choice diff --git a/ceammc/ext/doc/list.contains-help.pd b/ceammc/ext/doc/list.contains-help.pd index 44d8180e8b..01cf25736e 100644 --- a/ceammc/ext/doc/list.contains-help.pd +++ b/ceammc/ext/doc/list.contains-help.pd @@ -43,7 +43,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; #X obj 1 570 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 573 library: ceammc v0.7.1; +#X text 10 573 library: ceammc v0.8.0; #X text 370 585 see also:; #X obj 444 585 list.^contains; #X obj 560 585 list.all_of; @@ -53,7 +53,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 list.contains; #X text 10 76 category:; @@ -63,7 +63,7 @@ #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 list \, predicate \, any; #X text 10 186 website:; diff --git a/ceammc/ext/doc/list.contains.pddoc b/ceammc/ext/doc/list.contains.pddoc index 9de7e3062a..7281c81c97 100644 --- a/ceammc/ext/doc/list.contains.pddoc +++ b/ceammc/ext/doc/list.contains.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky on input list checks if it contains specified subsequence - GPL3 + GPL3 or later ceammc list list predicate any diff --git a/ceammc/ext/doc/list.count-help.pd b/ceammc/ext/doc/list.count-help.pd index 71b0b96eef..26cc5f2962 100644 --- a/ceammc/ext/doc/list.count-help.pd +++ b/ceammc/ext/doc/list.count-help.pd @@ -46,7 +46,7 @@ value; #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; #X obj 1 525 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 528 library: ceammc v0.7.1; +#X text 10 528 library: ceammc v0.8.0; #X text 572 540 see also:; #X obj 646 540 list.count_if; #N canvas 10 547 400 290 info 0; @@ -54,7 +54,7 @@ value; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 list.count; #X text 10 76 category:; @@ -64,7 +64,7 @@ value; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 list; #X text 10 186 website:; diff --git a/ceammc/ext/doc/list.count.pddoc b/ceammc/ext/doc/list.count.pddoc index 6a357f98a7..7a44740db7 100644 --- a/ceammc/ext/doc/list.count.pddoc +++ b/ceammc/ext/doc/list.count.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky returns the number of items that equal to specified value - GPL3 + GPL3 or later ceammc list list diff --git a/ceammc/ext/doc/list.count_if-help.pd b/ceammc/ext/doc/list.count_if-help.pd index 0c407f01e1..815d95cfc1 100644 --- a/ceammc/ext/doc/list.count_if-help.pd +++ b/ceammc/ext/doc/list.count_if-help.pd @@ -41,7 +41,7 @@ means reject. Range: 0\...1\.; #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #X text 594 520 see also:; #X obj 668 520 list.count; #N canvas 10 527 400 290 info 0; @@ -49,7 +49,7 @@ means reject. Range: 0\...1\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 list.count_if; #X text 10 76 category:; @@ -59,7 +59,7 @@ means reject. Range: 0\...1\.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 list \, count; #X text 10 186 website:; diff --git a/ceammc/ext/doc/list.count_if.pddoc b/ceammc/ext/doc/list.count_if.pddoc index e088ad19d8..d40f1f248e 100644 --- a/ceammc/ext/doc/list.count_if.pddoc +++ b/ceammc/ext/doc/list.count_if.pddoc @@ -8,7 +8,7 @@ returns the number of items that satisfy to external predicate. - GPL3 + GPL3 or later ceammc list list count diff --git a/ceammc/ext/doc/list.delta-help.pd b/ceammc/ext/doc/list.delta-help.pd index 20fedd55a1..9b8685a98a 100644 --- a/ceammc/ext/doc/list.delta-help.pd +++ b/ceammc/ext/doc/list.delta-help.pd @@ -76,7 +76,7 @@ with repeated values from the beginning.; #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; #X obj 1 960 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 963 library: ceammc v0.7.1; +#X text 10 963 library: ceammc v0.8.0; #X text 557 975 see also:; #X obj 631 975 list.integrator; #N canvas 10 982 400 290 info 0; @@ -84,7 +84,7 @@ with repeated values from the beginning.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 list.delta; #X text 10 76 category:; @@ -94,7 +94,7 @@ with repeated values from the beginning.; #X text 10 120 authors:; #X text 120 120 Alex Nadzharov \, Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 list \, delta; #X text 10 186 website:; diff --git a/ceammc/ext/doc/list.delta.pddoc b/ceammc/ext/doc/list.delta.pddoc index d674dd687a..cec5e9438f 100644 --- a/ceammc/ext/doc/list.delta.pddoc +++ b/ceammc/ext/doc/list.delta.pddoc @@ -9,7 +9,7 @@ returns the difference between the current list of floats and the previous one. - GPL3 + GPL3 or later ceammc list list delta diff --git a/ceammc/ext/doc/list.distribution-help.pd b/ceammc/ext/doc/list.distribution-help.pd index 42888a1e8c..2e8655fb46 100644 --- a/ceammc/ext/doc/list.distribution-help.pd +++ b/ceammc/ext/doc/list.distribution-help.pd @@ -47,13 +47,13 @@ of repeats in list (by default normalized to have sum 1).; #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; #X obj 1 607 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 610 library: ceammc v0.7.1; +#X text 10 610 library: ceammc v0.8.0; #N canvas 10 629 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 list.distribution; #X text 10 76 category:; @@ -63,7 +63,7 @@ of repeats in list (by default normalized to have sum 1).; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 list \, distribution; #X text 10 186 website:; diff --git a/ceammc/ext/doc/list.distribution.pddoc b/ceammc/ext/doc/list.distribution.pddoc index c0b22d3952..5a8581f2ca 100644 --- a/ceammc/ext/doc/list.distribution.pddoc +++ b/ceammc/ext/doc/list.distribution.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky list value distribution - GPL3 + GPL3 or later ceammc list list distribution diff --git a/ceammc/ext/doc/list.do-help.pd b/ceammc/ext/doc/list.do-help.pd index 5f8188d36f..16f9f74315 100644 --- a/ceammc/ext/doc/list.do-help.pd +++ b/ceammc/ext/doc/list.do-help.pd @@ -34,7 +34,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #X text 601 520 see also:; #X obj 675 520 list.each; #N canvas 10 527 400 290 info 0; @@ -42,7 +42,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 list.do; #X text 10 76 category:; @@ -52,7 +52,7 @@ #X text 10 120 authors:; #X text 120 120 Alex Nadzharov; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 list; #X text 10 186 website:; diff --git a/ceammc/ext/doc/list.do.pddoc b/ceammc/ext/doc/list.do.pddoc index a497be63da..35c82c1ce1 100644 --- a/ceammc/ext/doc/list.do.pddoc +++ b/ceammc/ext/doc/list.do.pddoc @@ -7,7 +7,7 @@ Alex Nadzharov iterate and modify list contents via side-chain - GPL3 + GPL3 or later ceammc list list diff --git a/ceammc/ext/doc/list.each-help.pd b/ceammc/ext/doc/list.each-help.pd index 1236f1d34f..328067fe81 100644 --- a/ceammc/ext/doc/list.each-help.pd +++ b/ceammc/ext/doc/list.each-help.pd @@ -66,7 +66,7 @@ on each iteration. Type: int. Default value: 1\. Range: 1\...1024\.; #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; #X obj 1 829 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 832 library: ceammc v0.7.1; +#X text 10 832 library: ceammc v0.8.0; #X text 507 844 see also:; #X obj 581 844 list.do; #X obj 646 844 list.apply_to; @@ -75,7 +75,7 @@ on each iteration. Type: int. Default value: 1\. Range: 1\...1024\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 list.each; #X text 10 76 category:; @@ -85,7 +85,7 @@ on each iteration. Type: int. Default value: 1\. Range: 1\...1024\.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 list \, functional; #X text 10 186 website:; diff --git a/ceammc/ext/doc/list.each.pddoc b/ceammc/ext/doc/list.each.pddoc index b9fb95895c..f658f83df4 100644 --- a/ceammc/ext/doc/list.each.pddoc +++ b/ceammc/ext/doc/list.each.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky maps each list value via external object(s) - GPL3 + GPL3 or later ceammc list list functional diff --git a/ceammc/ext/doc/list.enumerate-help.pd b/ceammc/ext/doc/list.enumerate-help.pd index 8eea8aa519..01b68654a1 100644 --- a/ceammc/ext/doc/list.enumerate-help.pd +++ b/ceammc/ext/doc/list.enumerate-help.pd @@ -39,13 +39,13 @@ value: 0\.; #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; #X obj 1 507 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 510 library: ceammc v0.7.1; +#X text 10 510 library: ceammc v0.8.0; #N canvas 10 529 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 list.enumerate; #X text 10 76 category:; @@ -55,7 +55,7 @@ value: 0\.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 list \, enumerate; #X text 10 186 website:; diff --git a/ceammc/ext/doc/list.enumerate.pddoc b/ceammc/ext/doc/list.enumerate.pddoc index fd28840ab2..ee69353a21 100644 --- a/ceammc/ext/doc/list.enumerate.pddoc +++ b/ceammc/ext/doc/list.enumerate.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky enumerates input list - GPL3 + GPL3 or later ceammc list list enumerate diff --git a/ceammc/ext/doc/list.equal-help.pd b/ceammc/ext/doc/list.equal-help.pd index 56cc719aef..d4ead2dce6 100644 --- a/ceammc/ext/doc/list.equal-help.pd +++ b/ceammc/ext/doc/list.equal-help.pd @@ -53,13 +53,13 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; #X obj 1 645 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 648 library: ceammc v0.7.1; +#X text 10 648 library: ceammc v0.8.0; #N canvas 10 667 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 list.equal; #X text 10 76 category:; @@ -69,7 +69,7 @@ #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 list \, compare \, equal; #X text 10 186 website:; diff --git a/ceammc/ext/doc/list.equal.pddoc b/ceammc/ext/doc/list.equal.pddoc index df80621a87..a6ba1f211c 100644 --- a/ceammc/ext/doc/list.equal.pddoc +++ b/ceammc/ext/doc/list.equal.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky checks if given lists are equal - GPL3 + GPL3 or later ceammc list list compare equal diff --git a/ceammc/ext/doc/list.first-help.pd b/ceammc/ext/doc/list.first-help.pd index 0c42371bb1..59ed46288d 100644 --- a/ceammc/ext/doc/list.first-help.pd +++ b/ceammc/ext/doc/list.first-help.pd @@ -30,7 +30,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #X text 537 520 see also:; #X obj 611 520 list.last; #X obj 690 520 list.at; @@ -39,7 +39,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 list.first; #X text 10 76 category:; @@ -49,7 +49,7 @@ #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 list \, first; #X text 10 186 website:; diff --git a/ceammc/ext/doc/list.first.pddoc b/ceammc/ext/doc/list.first.pddoc index 3fe67f4be7..0bc57caf2d 100644 --- a/ceammc/ext/doc/list.first.pddoc +++ b/ceammc/ext/doc/list.first.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky returns first list element - GPL3 + GPL3 or later ceammc list list first diff --git a/ceammc/ext/doc/list.gen-help.pd b/ceammc/ext/doc/list.gen-help.pd index d9a9e43cb5..0f454876e6 100644 --- a/ceammc/ext/doc/list.gen-help.pd +++ b/ceammc/ext/doc/list.gen-help.pd @@ -60,7 +60,7 @@ Range: 0\...1024\.; #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; #X obj 1 732 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 735 library: ceammc v0.7.1; +#X text 10 735 library: ceammc v0.8.0; #X text 413 747 see also:; #X obj 487 747 list.seq; #X obj 559 747 list.shuffle; @@ -70,7 +70,7 @@ Range: 0\...1024\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 list.gen; #X text 10 76 category:; @@ -80,7 +80,7 @@ Range: 0\...1024\.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 list \, generate; #X text 10 186 website:; diff --git a/ceammc/ext/doc/list.gen.pddoc b/ceammc/ext/doc/list.gen.pddoc index 147f10c768..fccea0e13f 100644 --- a/ceammc/ext/doc/list.gen.pddoc +++ b/ceammc/ext/doc/list.gen.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky generates list of specified length via external generator - GPL3 + GPL3 or later ceammc list list generate diff --git a/ceammc/ext/doc/list.histogram-help.pd b/ceammc/ext/doc/list.histogram-help.pd index 8309ee1ba5..ed89c0bd2a 100644 --- a/ceammc/ext/doc/list.histogram-help.pd +++ b/ceammc/ext/doc/list.histogram-help.pd @@ -49,13 +49,13 @@ value: 100\. Min value: 2\.; #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; #X obj 1 574 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 577 library: ceammc v0.7.1; +#X text 10 577 library: ceammc v0.8.0; #N canvas 10 596 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 list.histogram; #X text 10 76 category:; @@ -65,7 +65,7 @@ value: 100\. Min value: 2\.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 list \, histogram; #X text 10 186 website:; diff --git a/ceammc/ext/doc/list.histogram.pddoc b/ceammc/ext/doc/list.histogram.pddoc index db6c9796ef..375f507f8e 100644 --- a/ceammc/ext/doc/list.histogram.pddoc +++ b/ceammc/ext/doc/list.histogram.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky outputs distribution histogram - GPL3 + GPL3 or later ceammc list list histogram diff --git a/ceammc/ext/doc/list.insert-help.pd b/ceammc/ext/doc/list.insert-help.pd index d61d60c05a..7020fa514f 100644 --- a/ceammc/ext/doc/list.insert-help.pd +++ b/ceammc/ext/doc/list.insert-help.pd @@ -44,7 +44,7 @@ list; #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; #X obj 1 528 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 531 library: ceammc v0.7.1; +#X text 10 531 library: ceammc v0.8.0; #X text 486 543 see also:; #X obj 560 543 list.append; #X obj 654 543 list.prepend; @@ -53,7 +53,7 @@ list; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 list.insert; #X text 10 76 category:; @@ -63,7 +63,7 @@ list; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 list \, insert; #X text 10 186 website:; diff --git a/ceammc/ext/doc/list.insert.pddoc b/ceammc/ext/doc/list.insert.pddoc index cd5acb94e6..262a216505 100644 --- a/ceammc/ext/doc/list.insert.pddoc +++ b/ceammc/ext/doc/list.insert.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky insert atom or list to the specified position of input list - GPL3 + GPL3 or later ceammc list list insert diff --git a/ceammc/ext/doc/list.integrator-help.pd b/ceammc/ext/doc/list.integrator-help.pd index 9e092f70f6..4cbe0dda0c 100644 --- a/ceammc/ext/doc/list.integrator-help.pd +++ b/ceammc/ext/doc/list.integrator-help.pd @@ -61,7 +61,7 @@ with repeated values from the beginning.; #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; #X obj 1 844 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 847 library: ceammc v0.7.1; +#X text 10 847 library: ceammc v0.8.0; #X text 594 859 see also:; #X obj 668 859 list.delta; #N canvas 10 866 400 290 info 0; @@ -69,7 +69,7 @@ with repeated values from the beginning.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 list.integrator; #X text 10 76 category:; @@ -79,7 +79,7 @@ with repeated values from the beginning.; #X text 10 120 authors:; #X text 120 120 Alex Nadzharov \, Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 list \, integrator; #X text 10 186 website:; diff --git a/ceammc/ext/doc/list.integrator.pddoc b/ceammc/ext/doc/list.integrator.pddoc index 95caa3045e..8385f2363f 100644 --- a/ceammc/ext/doc/list.integrator.pddoc +++ b/ceammc/ext/doc/list.integrator.pddoc @@ -9,7 +9,7 @@ returns the sum of the previously stored list and the current one then stores this sum - GPL3 + GPL3 or later ceammc list list integrator diff --git a/ceammc/ext/doc/list.last-help.pd b/ceammc/ext/doc/list.last-help.pd index 42a6d526dd..04a3613876 100644 --- a/ceammc/ext/doc/list.last-help.pd +++ b/ceammc/ext/doc/list.last-help.pd @@ -31,7 +31,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #X text 529 520 see also:; #X obj 603 520 list.first; #X obj 690 520 list.at; @@ -40,7 +40,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 list.last; #X text 10 76 category:; @@ -50,7 +50,7 @@ #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 list \, last; #X text 10 186 website:; diff --git a/ceammc/ext/doc/list.last.pddoc b/ceammc/ext/doc/list.last.pddoc index 91e7b6713e..962f88509d 100644 --- a/ceammc/ext/doc/list.last.pddoc +++ b/ceammc/ext/doc/list.last.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky returns last list element - GPL3 + GPL3 or later ceammc list list last diff --git a/ceammc/ext/doc/list.length-help.pd b/ceammc/ext/doc/list.length-help.pd index 8c36e271d0..807f0d7184 100644 --- a/ceammc/ext/doc/list.length-help.pd +++ b/ceammc/ext/doc/list.length-help.pd @@ -33,7 +33,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #X text 616 520 see also:; #X obj 690 520 list.at; #N canvas 10 527 400 290 info 0; @@ -41,7 +41,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 list.length; #X text 10 76 category:; @@ -51,7 +51,7 @@ #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 list \, length \, size; #X text 10 186 website:; diff --git a/ceammc/ext/doc/list.length.pddoc b/ceammc/ext/doc/list.length.pddoc index ad3c2e9096..0f3c81e101 100644 --- a/ceammc/ext/doc/list.length.pddoc +++ b/ceammc/ext/doc/list.length.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky returns the number of atoms in the list - GPL3 + GPL3 or later ceammc list list length size diff --git a/ceammc/ext/doc/list.max-help.pd b/ceammc/ext/doc/list.max-help.pd index dfa17039dc..f63dc52e75 100644 --- a/ceammc/ext/doc/list.max-help.pd +++ b/ceammc/ext/doc/list.max-help.pd @@ -60,7 +60,7 @@ value: float. Allowed values: float \, symbol \, any.; #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; #X obj 1 783 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 786 library: ceammc v0.7.1; +#X text 10 786 library: ceammc v0.8.0; #X text 609 798 see also:; #X obj 683 798 list.min; #N canvas 10 805 400 290 info 0; @@ -68,7 +68,7 @@ value: float. Allowed values: float \, symbol \, any.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 list.max; #X text 10 76 category:; @@ -78,7 +78,7 @@ value: float. Allowed values: float \, symbol \, any.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 list \, max \, compare; #X text 10 186 website:; diff --git a/ceammc/ext/doc/list.max.pddoc b/ceammc/ext/doc/list.max.pddoc index a9218db992..af28933aeb 100644 --- a/ceammc/ext/doc/list.max.pddoc +++ b/ceammc/ext/doc/list.max.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky returns largest element in the list - GPL3 + GPL3 or later ceammc list list max compare diff --git a/ceammc/ext/doc/list.mean-help.pd b/ceammc/ext/doc/list.mean-help.pd index c810276655..ca2b157e55 100644 --- a/ceammc/ext/doc/list.mean-help.pd +++ b/ceammc/ext/doc/list.mean-help.pd @@ -30,7 +30,7 @@ No output if no floats in list.; #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #X text 565 520 see also:; #X obj 639 520 list.normalize; #N canvas 10 527 400 290 info 0; @@ -38,7 +38,7 @@ No output if no floats in list.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 list.mean; #X text 10 76 category:; @@ -48,7 +48,7 @@ No output if no floats in list.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 list \, mean; #X text 10 186 website:; diff --git a/ceammc/ext/doc/list.mean.pddoc b/ceammc/ext/doc/list.mean.pddoc index 36876af36b..0848001699 100644 --- a/ceammc/ext/doc/list.mean.pddoc +++ b/ceammc/ext/doc/list.mean.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky calculates average of list of floats - GPL3 + GPL3 or later ceammc list list mean diff --git a/ceammc/ext/doc/list.min-help.pd b/ceammc/ext/doc/list.min-help.pd index 75b23dfdd0..09e2328431 100644 --- a/ceammc/ext/doc/list.min-help.pd +++ b/ceammc/ext/doc/list.min-help.pd @@ -60,7 +60,7 @@ value: float. Allowed values: float \, symbol \, any.; #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; #X obj 1 783 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 786 library: ceammc v0.7.1; +#X text 10 786 library: ceammc v0.8.0; #X text 521 798 see also:; #X obj 595 798 list.max; #X obj 668 798 list.range; @@ -69,7 +69,7 @@ value: float. Allowed values: float \, symbol \, any.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 list.min; #X text 10 76 category:; @@ -79,7 +79,7 @@ value: float. Allowed values: float \, symbol \, any.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 list \, min \, compare; #X text 10 186 website:; diff --git a/ceammc/ext/doc/list.min.pddoc b/ceammc/ext/doc/list.min.pddoc index c1a060f466..bba01909f1 100644 --- a/ceammc/ext/doc/list.min.pddoc +++ b/ceammc/ext/doc/list.min.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky returns smallest element in the list - GPL3 + GPL3 or later ceammc list list min compare diff --git a/ceammc/ext/doc/list.none_of-help.pd b/ceammc/ext/doc/list.none_of-help.pd index ef13c57be5..ef898bc8fa 100644 --- a/ceammc/ext/doc/list.none_of-help.pd +++ b/ceammc/ext/doc/list.none_of-help.pd @@ -37,7 +37,7 @@ or list is empty or 0 otherwise.; #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #X text 493 520 see also:; #X obj 567 520 list.all_of; #X obj 661 520 list.any_of; @@ -46,7 +46,7 @@ or list is empty or 0 otherwise.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 list.none_of; #X text 10 76 category:; @@ -56,7 +56,7 @@ or list is empty or 0 otherwise.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 list \, predicate \, none; #X text 10 186 website:; diff --git a/ceammc/ext/doc/list.none_of.pddoc b/ceammc/ext/doc/list.none_of.pddoc index d855fb0a1a..93f698c7cf 100644 --- a/ceammc/ext/doc/list.none_of.pddoc +++ b/ceammc/ext/doc/list.none_of.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky checks if none of list atoms is accepted by predicate - GPL3 + GPL3 or later ceammc list list predicate none diff --git a/ceammc/ext/doc/list.normalize-help.pd b/ceammc/ext/doc/list.normalize-help.pd index e63877b0ae..68c0c78125 100644 --- a/ceammc/ext/doc/list.normalize-help.pd +++ b/ceammc/ext/doc/list.normalize-help.pd @@ -26,7 +26,7 @@ lineary; -49933 0; #X msg 110 518 @by; #X text 245 518 Get/Set normalization mode. Type: symbol. Default value: -range. Allowed values: sum \, range.; +sum. Allowed values: sum \, range.; #X msg 110 560 @range; #X text 245 560 alias to @by range.; #X msg 110 589 @sum; @@ -50,13 +50,13 @@ range. Allowed values: sum \, range.; #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; #X obj 1 740 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 743 library: ceammc v0.7.1; +#X text 10 743 library: ceammc v0.8.0; #N canvas 10 762 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 list.normalize; #X text 10 76 category:; @@ -66,7 +66,7 @@ range. Allowed values: sum \, range.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 list \, normalize; #X text 10 186 website:; diff --git a/ceammc/ext/doc/list.normalize.pddoc b/ceammc/ext/doc/list.normalize.pddoc index ce265bc557..3906d78521 100644 --- a/ceammc/ext/doc/list.normalize.pddoc +++ b/ceammc/ext/doc/list.normalize.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky normalizes float list values to get their sum = 1.0 - GPL3 + GPL3 or later ceammc list list normalize @@ -25,7 +25,7 @@ - normalization + normalization mode alias to @by sum alias to @by range diff --git a/ceammc/ext/doc/list.pass_if-help.pd b/ceammc/ext/doc/list.pass_if-help.pd index 47af8475e4..2d2008b899 100644 --- a/ceammc/ext/doc/list.pass_if-help.pd +++ b/ceammc/ext/doc/list.pass_if-help.pd @@ -54,7 +54,7 @@ element) or 1 (leave element).; #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; #X obj 1 666 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 669 library: ceammc v0.7.1; +#X text 10 669 library: ceammc v0.8.0; #X text 565 681 see also:; #X obj 639 681 list.remove_if; #N canvas 10 688 400 290 info 0; @@ -62,7 +62,7 @@ element) or 1 (leave element).; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 list.pass_if; #X text 10 76 category:; @@ -72,7 +72,7 @@ element) or 1 (leave element).; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 list \, pass \, accept \, leave \, predicate; #X text 10 186 website:; diff --git a/ceammc/ext/doc/list.pass_if.pddoc b/ceammc/ext/doc/list.pass_if.pddoc index 28d1c488bc..fbde2f206e 100644 --- a/ceammc/ext/doc/list.pass_if.pddoc +++ b/ceammc/ext/doc/list.pass_if.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky leave only elements accepted by predicate - GPL3 + GPL3 or later ceammc list list pass accept leave predicate diff --git a/ceammc/ext/doc/list.prepend-help.pd b/ceammc/ext/doc/list.prepend-help.pd index 40498ea1bd..a6e82d8eb4 100644 --- a/ceammc/ext/doc/list.prepend-help.pd +++ b/ceammc/ext/doc/list.prepend-help.pd @@ -49,7 +49,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #X text 587 520 see also:; #X obj 661 520 list.append; #N canvas 10 527 400 290 info 0; @@ -57,7 +57,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 list.prepend; #X text 10 76 category:; @@ -67,7 +67,7 @@ #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 list \, prepend; #X text 10 186 website:; diff --git a/ceammc/ext/doc/list.prepend.pddoc b/ceammc/ext/doc/list.prepend.pddoc index 2bde793c81..ea9b99754d 100644 --- a/ceammc/ext/doc/list.prepend.pddoc +++ b/ceammc/ext/doc/list.prepend.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky prepend atom or list before input list - GPL3 + GPL3 or later ceammc list list prepend diff --git a/ceammc/ext/doc/list.product-help.pd b/ceammc/ext/doc/list.product-help.pd index 84e51f7476..02c9c3ca2a 100644 --- a/ceammc/ext/doc/list.product-help.pd +++ b/ceammc/ext/doc/list.product-help.pd @@ -32,7 +32,7 @@ at least one symbol \, product will be always equal to zero; #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #X text 608 520 see also:; #X obj 682 520 list.sum; #N canvas 10 527 400 290 info 0; @@ -40,7 +40,7 @@ at least one symbol \, product will be always equal to zero; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 list.product; #X text 10 76 category:; @@ -50,7 +50,7 @@ at least one symbol \, product will be always equal to zero; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 list \, product; #X text 10 186 website:; diff --git a/ceammc/ext/doc/list.product.pddoc b/ceammc/ext/doc/list.product.pddoc index a2a2625762..058e6f2506 100644 --- a/ceammc/ext/doc/list.product.pddoc +++ b/ceammc/ext/doc/list.product.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky calculates product of floats in list - GPL3 + GPL3 or later ceammc list list product diff --git a/ceammc/ext/doc/list.range-help.pd b/ceammc/ext/doc/list.range-help.pd index 964cfb8435..64918c63d1 100644 --- a/ceammc/ext/doc/list.range-help.pd +++ b/ceammc/ext/doc/list.range-help.pd @@ -39,7 +39,7 @@ second - largest.; #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #X text 536 520 see also:; #X obj 610 520 list.min; #X obj 682 520 list.max; @@ -48,7 +48,7 @@ second - largest.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 list.range; #X text 10 76 category:; @@ -58,7 +58,7 @@ second - largest.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 list \, range \, compare; #X text 10 186 website:; diff --git a/ceammc/ext/doc/list.range.pddoc b/ceammc/ext/doc/list.range.pddoc index 1665017d3c..dc2df43d0c 100644 --- a/ceammc/ext/doc/list.range.pddoc +++ b/ceammc/ext/doc/list.range.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky returns list smallest and largest value - GPL3 + GPL3 or later ceammc list list range compare diff --git a/ceammc/ext/doc/list.reduce-help.pd b/ceammc/ext/doc/list.reduce-help.pd index 0d49b2b3a1..e576a1511d 100644 --- a/ceammc/ext/doc/list.reduce-help.pd +++ b/ceammc/ext/doc/list.reduce-help.pd @@ -64,7 +64,7 @@ between elements with binary function \, for example: 1 2 3 4 5 becames #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; #X obj 1 722 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 725 library: ceammc v0.7.1; +#X text 10 725 library: ceammc v0.8.0; #X text 608 737 see also:; #X obj 682 737 list.max; #N canvas 10 744 400 290 info 0; @@ -72,7 +72,7 @@ between elements with binary function \, for example: 1 2 3 4 5 becames #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 list.reduce; #X text 10 76 category:; @@ -82,7 +82,7 @@ between elements with binary function \, for example: 1 2 3 4 5 becames #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 list \, min \, compare; #X text 10 186 website:; diff --git a/ceammc/ext/doc/list.reduce.pddoc b/ceammc/ext/doc/list.reduce.pddoc index 4a8177b21b..0a5fd1a5da 100644 --- a/ceammc/ext/doc/list.reduce.pddoc +++ b/ceammc/ext/doc/list.reduce.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky apply function of two arguments cumulatively to the list - GPL3 + GPL3 or later ceammc list list min compare diff --git a/ceammc/ext/doc/list.remove-help.pd b/ceammc/ext/doc/list.remove-help.pd index bb8cb174e1..3b43596487 100644 --- a/ceammc/ext/doc/list.remove-help.pd +++ b/ceammc/ext/doc/list.remove-help.pd @@ -42,7 +42,7 @@ are also supported.; #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #X text 587 520 see also:; #X obj 661 520 list.insert; #N canvas 10 527 400 290 info 0; @@ -50,7 +50,7 @@ are also supported.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 list.remove; #X text 10 76 category:; @@ -60,7 +60,7 @@ are also supported.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 list \, remove; #X text 10 186 website:; diff --git a/ceammc/ext/doc/list.remove.pddoc b/ceammc/ext/doc/list.remove.pddoc index 2acc7edc43..fb53913571 100644 --- a/ceammc/ext/doc/list.remove.pddoc +++ b/ceammc/ext/doc/list.remove.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky on input list remove element(s) at specified positions - GPL3 + GPL3 or later ceammc list list remove diff --git a/ceammc/ext/doc/list.remove_if-help.pd b/ceammc/ext/doc/list.remove_if-help.pd index 0e696cf5a2..10b8010080 100644 --- a/ceammc/ext/doc/list.remove_if-help.pd +++ b/ceammc/ext/doc/list.remove_if-help.pd @@ -44,7 +44,7 @@ element) or 1 (remove).; #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #X text 471 520 see also:; #X obj 545 520 list.count_if; #X obj 654 520 list.pass_if; @@ -53,7 +53,7 @@ element) or 1 (remove).; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 list.remove_if; #X text 10 76 category:; @@ -63,7 +63,7 @@ element) or 1 (remove).; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 list \, remove \, predicate; #X text 10 186 website:; diff --git a/ceammc/ext/doc/list.remove_if.pddoc b/ceammc/ext/doc/list.remove_if.pddoc index 7f364ad3b3..d3c7b18cf5 100644 --- a/ceammc/ext/doc/list.remove_if.pddoc +++ b/ceammc/ext/doc/list.remove_if.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky remove elements by predicate - GPL3 + GPL3 or later ceammc list list remove predicate diff --git a/ceammc/ext/doc/list.repack-help.pd b/ceammc/ext/doc/list.repack-help.pd index 3fdcdb281c..c24c9f9dea 100644 --- a/ceammc/ext/doc/list.repack-help.pd +++ b/ceammc/ext/doc/list.repack-help.pd @@ -40,13 +40,13 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #N canvas 10 527 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 list.repack; #X text 10 76 category:; @@ -56,7 +56,7 @@ #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 list \, repack; #X text 10 186 website:; diff --git a/ceammc/ext/doc/list.repack.pddoc b/ceammc/ext/doc/list.repack.pddoc index 42f247fe67..f1635bfd02 100644 --- a/ceammc/ext/doc/list.repack.pddoc +++ b/ceammc/ext/doc/list.repack.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky repack input list to specified size - GPL3 + GPL3 or later ceammc list list repack diff --git a/ceammc/ext/doc/list.repeat-help.pd b/ceammc/ext/doc/list.repeat-help.pd index eed47f9c19..fa5f55d691 100644 --- a/ceammc/ext/doc/list.repeat-help.pd +++ b/ceammc/ext/doc/list.repeat-help.pd @@ -61,13 +61,13 @@ x n times.; #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; #X obj 1 673 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 676 library: ceammc v0.7.1; +#X text 10 676 library: ceammc v0.8.0; #N canvas 10 695 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 list.repeat; #X text 10 76 category:; @@ -77,7 +77,7 @@ x n times.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 list \, repeat; #X text 10 186 website:; diff --git a/ceammc/ext/doc/list.repeat.pddoc b/ceammc/ext/doc/list.repeat.pddoc index e5f26595ba..b66a8102f6 100644 --- a/ceammc/ext/doc/list.repeat.pddoc +++ b/ceammc/ext/doc/list.repeat.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky creates new list by repeating given list specified times - GPL3 + GPL3 or later ceammc list list repeat diff --git a/ceammc/ext/doc/list.resize-help.pd b/ceammc/ext/doc/list.resize-help.pd index f515ca0d36..fc721e93f9 100644 --- a/ceammc/ext/doc/list.resize-help.pd +++ b/ceammc/ext/doc/list.resize-help.pd @@ -58,7 +58,7 @@ atom.; #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; #X obj 1 742 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 745 library: ceammc v0.7.1; +#X text 10 745 library: ceammc v0.8.0; #X text 587 757 see also:; #X obj 661 757 list.length; #N canvas 10 764 400 290 info 0; @@ -66,7 +66,7 @@ atom.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 list.resize; #X text 10 76 category:; @@ -76,7 +76,7 @@ atom.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 list \, size \, resize; #X text 10 186 website:; diff --git a/ceammc/ext/doc/list.resize.pddoc b/ceammc/ext/doc/list.resize.pddoc index 4bbf5099b4..2415b6fed1 100644 --- a/ceammc/ext/doc/list.resize.pddoc +++ b/ceammc/ext/doc/list.resize.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky changes list size - GPL3 + GPL3 or later ceammc list list size resize diff --git a/ceammc/ext/doc/list.reverse-help.pd b/ceammc/ext/doc/list.reverse-help.pd index a68c5ec800..4ec435acb4 100644 --- a/ceammc/ext/doc/list.reverse-help.pd +++ b/ceammc/ext/doc/list.reverse-help.pd @@ -30,7 +30,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #X text 500 520 see also:; #X obj 574 520 list.sort; #X obj 653 520 list.shuffle; @@ -39,7 +39,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 list.reverse; #X text 10 76 category:; @@ -49,7 +49,7 @@ #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 list \, reverse; #X text 10 186 website:; diff --git a/ceammc/ext/doc/list.reverse.pddoc b/ceammc/ext/doc/list.reverse.pddoc index e3c90431e5..42582dc45b 100644 --- a/ceammc/ext/doc/list.reverse.pddoc +++ b/ceammc/ext/doc/list.reverse.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky reverses the order of the elements in the list - GPL3 + GPL3 or later ceammc list list reverse diff --git a/ceammc/ext/doc/list.rldecode-help.pd b/ceammc/ext/doc/list.rldecode-help.pd index 1f4b4458f9..0eb8cc9b39 100644 --- a/ceammc/ext/doc/list.rldecode-help.pd +++ b/ceammc/ext/doc/list.rldecode-help.pd @@ -39,7 +39,7 @@ values in second list.; #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #X text 572 520 see also:; #X obj 646 520 list.rlencode; #N canvas 10 527 400 290 info 0; @@ -47,7 +47,7 @@ values in second list.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 list.rldecode; #X text 10 76 category:; @@ -57,7 +57,7 @@ values in second list.; #X text 10 120 authors:; #X text 120 120 Alex Nadzharov \, Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 list \, rle \, decode; #X text 10 186 website:; diff --git a/ceammc/ext/doc/list.rldecode.pddoc b/ceammc/ext/doc/list.rldecode.pddoc index 25faf4a921..9410524377 100644 --- a/ceammc/ext/doc/list.rldecode.pddoc +++ b/ceammc/ext/doc/list.rldecode.pddoc @@ -8,7 +8,7 @@ Serge Poltavsky Run-length list decoder (RLE) - GPL3 + GPL3 or later ceammc list list rle decode diff --git a/ceammc/ext/doc/list.rlencode-help.pd b/ceammc/ext/doc/list.rlencode-help.pd index 3cd1d110c1..643bbb079d 100644 --- a/ceammc/ext/doc/list.rlencode-help.pd +++ b/ceammc/ext/doc/list.rlencode-help.pd @@ -32,7 +32,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #X text 572 520 see also:; #X obj 646 520 list.rldecode; #N canvas 10 527 400 290 info 0; @@ -40,7 +40,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 list.rlencode; #X text 10 76 category:; @@ -50,7 +50,7 @@ #X text 10 120 authors:; #X text 120 120 Alex Nadzharov \, Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 list \, functional; #X text 10 186 website:; diff --git a/ceammc/ext/doc/list.rlencode.pddoc b/ceammc/ext/doc/list.rlencode.pddoc index f57c03049a..a396d4211b 100644 --- a/ceammc/ext/doc/list.rlencode.pddoc +++ b/ceammc/ext/doc/list.rlencode.pddoc @@ -8,7 +8,7 @@ Serge Poltavsky RLE (run-length encoding) for lists - GPL3 + GPL3 or later ceammc list list functional diff --git a/ceammc/ext/doc/list.rotate-help.pd b/ceammc/ext/doc/list.rotate-help.pd index a6926a83e4..df04438960 100644 --- a/ceammc/ext/doc/list.rotate-help.pd +++ b/ceammc/ext/doc/list.rotate-help.pd @@ -52,7 +52,7 @@ direction to opposite. Type: int. Default value: 1\.; #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; #X obj 1 635 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 638 library: ceammc v0.7.1; +#X text 10 638 library: ceammc v0.8.0; #X text 587 650 see also:; #X obj 661 650 list.choice; #N canvas 10 657 400 290 info 0; @@ -60,7 +60,7 @@ direction to opposite. Type: int. Default value: 1\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 list.rotate; #X text 10 76 category:; @@ -70,7 +70,7 @@ direction to opposite. Type: int. Default value: 1\.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 list \, rotate; #X text 10 186 website:; diff --git a/ceammc/ext/doc/list.rotate.pddoc b/ceammc/ext/doc/list.rotate.pddoc index 5a1ec424e1..ce3c395ec3 100644 --- a/ceammc/ext/doc/list.rotate.pddoc +++ b/ceammc/ext/doc/list.rotate.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky rotates list - GPL3 + GPL3 or later ceammc list list rotate diff --git a/ceammc/ext/doc/list.route-help.pd b/ceammc/ext/doc/list.route-help.pd index 53dd09958a..2685b26e80 100644 --- a/ceammc/ext/doc/list.route-help.pd +++ b/ceammc/ext/doc/list.route-help.pd @@ -95,7 +95,7 @@ to bang.; #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; #X obj 1 1006 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1009 library: ceammc v0.7.1; +#X text 10 1009 library: ceammc v0.8.0; #X text 631 1021 see also:; #X obj 705 1021 route; #N canvas 10 1028 400 290 info 0; @@ -103,7 +103,7 @@ to bang.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 list.route; #X text 10 76 category:; @@ -113,7 +113,7 @@ to bang.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 list \, route; #X text 10 186 website:; diff --git a/ceammc/ext/doc/list.route.pddoc b/ceammc/ext/doc/list.route.pddoc index 0538a63ace..2fd7d32bf7 100644 --- a/ceammc/ext/doc/list.route.pddoc +++ b/ceammc/ext/doc/list.route.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky acts like [route] but for lists - GPL3 + GPL3 or later ceammc list list route diff --git a/ceammc/ext/doc/list.search-help.pd b/ceammc/ext/doc/list.search-help.pd index 32c92cfd1a..301fca27e9 100644 --- a/ceammc/ext/doc/list.search-help.pd +++ b/ceammc/ext/doc/list.search-help.pd @@ -37,15 +37,15 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; -#X text 594 520 see also:; -#X obj 668 520 list.index; +#X text 10 508 library: ceammc v0.8.0; +#X text 580 520 see also:; +#X obj 654 520 list.^search; #N canvas 10 527 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 list.search; #X text 10 76 category:; @@ -55,7 +55,7 @@ #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 list \, search \, find; #X text 10 186 website:; diff --git a/ceammc/ext/doc/list.search.pddoc b/ceammc/ext/doc/list.search.pddoc index aff62e7ff5..079ecd8232 100644 --- a/ceammc/ext/doc/list.search.pddoc +++ b/ceammc/ext/doc/list.search.pddoc @@ -7,13 +7,13 @@ Serge Poltavsky search specified items in input list - GPL3 + GPL3 or later ceammc list list search find 0.6 - list.index + list.^search diff --git a/ceammc/ext/doc/list.separate-help.pd b/ceammc/ext/doc/list.separate-help.pd index 1bcc786ab1..0935e60fa5 100644 --- a/ceammc/ext/doc/list.separate-help.pd +++ b/ceammc/ext/doc/list.separate-help.pd @@ -9,43 +9,52 @@ #X msg 50 118 1 2 3 4 5; #X msg 165 118 (a b c d e) \, bang; #X obj 165 147 ml; -#X obj 50 176 list.separate; -#X obj 50 205 m insert 0; -#X msg 174 205 flush; -#X obj 50 234 data.list; -#X obj 50 262 m set; -#X msg 50 291 ; -#X obj 20 330 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 335 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X obj 213 147 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; +#X msg 213 176 @enumerate \$1; +#X obj 50 205 list.separate; +#X obj 50 234 print SEPARATE; +#X obj 20 273 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 278 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 313 @enumerate; +#X text 245 313 Get/Set enumeration mode. If enumeration is active +output pairs: INDEX ATOM \, otherwise single atoms. Type: int. Default +value: 0\. Allowed values: 0 \, 1\.; +#X msg 110 370 @from; +#X text 245 370 Get/Set enumeration starting index. Type: int. Default +value: 0\.; +#X obj 20 422 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 427 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 336 1\.; -#X text 150 336 *list*; -#X text 245 336 input list.; -#X text 150 356 *data:mlist*; -#X text 245 356 input mlist.; -#X obj 20 386 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 391 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 428 1\.; +#X text 150 428 *list*; +#X text 245 428 input list.; +#X text 150 448 *data:mlist*; +#X text 245 448 input mlist.; +#X obj 20 478 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 483 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 392 1\.; -#X text 245 392 outlet for single atoms.; -#X text 110 412 2\.; -#X text 245 412 outputs bang after last element in the list.; +#X text 110 484 1\.; +#X text 245 484 outlet for single atoms (or pair: IDX ATOM in enumeration +mode).; +#X text 110 519 2\.; +#X text 245 519 outputs bang after last element in the list.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; -#X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; -#X text 491 520 see also:; -#X obj 565 520 list.repack; -#X obj 660 520 list.unpack; -#N canvas 10 527 400 290 info 0; +#X obj 1 569 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 572 library: ceammc v0.8.0; +#X text 491 584 see also:; +#X obj 565 584 list.repack; +#X obj 660 584 list.unpack; +#N canvas 10 591 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 list.separate; #X text 10 76 category:; @@ -55,7 +64,7 @@ #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 list \, separate; #X text 10 186 website:; @@ -64,13 +73,10 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 527 pd info; +#X restore 10 591 pd info; #X connect 6 0 7 0; -#X connect 5 0 8 0; -#X connect 7 0 8 0; #X connect 8 0 9 0; -#X connect 8 1 10 0; -#X connect 9 0 11 0; -#X connect 10 0 11 0; -#X connect 11 0 12 0; -#X connect 12 0 13 0; \ No newline at end of file +#X connect 5 0 10 0; +#X connect 7 0 10 0; +#X connect 9 0 10 0; +#X connect 10 0 11 0; \ No newline at end of file diff --git a/ceammc/ext/doc/list.separate.pddoc b/ceammc/ext/doc/list.separate.pddoc index 5de23ff34a..41fd1a98b5 100644 --- a/ceammc/ext/doc/list.separate.pddoc +++ b/ceammc/ext/doc/list.separate.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky sends list elements one by one separately - GPL3 + GPL3 or later ceammc list list separate @@ -20,6 +20,11 @@ list.sep + + enumeration mode. If + enumeration is active output pairs: INDEX ATOM, otherwise single atoms + enumeration starting index + input list @@ -27,7 +32,7 @@ - outlet for single atoms + outlet for single atoms (or pair: IDX ATOM in enumeration mode) outputs bang after last element in the list @@ -35,17 +40,13 @@ diff --git a/ceammc/ext/doc/list.seq-help.pd b/ceammc/ext/doc/list.seq-help.pd index 2638606f83..ef4fd55656 100644 --- a/ceammc/ext/doc/list.seq-help.pd +++ b/ceammc/ext/doc/list.seq-help.pd @@ -64,7 +64,7 @@ Default value: 1\.; #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; #X obj 1 739 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 742 library: ceammc v0.7.1; +#X text 10 742 library: ceammc v0.8.0; #X text 609 754 see also:; #X obj 683 754 list.gen; #N canvas 10 761 400 290 info 0; @@ -72,7 +72,7 @@ Default value: 1\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 list.seq; #X text 10 76 category:; @@ -82,7 +82,7 @@ Default value: 1\.; #X text 10 120 authors:; #X text 120 120 Alex Nadzharov \, Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 list \, seq \, sequence; #X text 10 186 website:; diff --git a/ceammc/ext/doc/list.seq.pddoc b/ceammc/ext/doc/list.seq.pddoc index 0c53268273..4226775d12 100644 --- a/ceammc/ext/doc/list.seq.pddoc +++ b/ceammc/ext/doc/list.seq.pddoc @@ -8,7 +8,7 @@ Serge Poltavsky numeric sequence list generator - GPL3 + GPL3 or later ceammc list list seq sequence diff --git a/ceammc/ext/doc/list.set-help.pd b/ceammc/ext/doc/list.set-help.pd index a02ede9f02..5fdd432389 100644 --- a/ceammc/ext/doc/list.set-help.pd +++ b/ceammc/ext/doc/list.set-help.pd @@ -45,13 +45,13 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; #X obj 1 524 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 527 library: ceammc v0.7.1; +#X text 10 527 library: ceammc v0.8.0; #N canvas 10 546 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 list.set; #X text 10 76 category:; @@ -61,7 +61,7 @@ #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 list \, set; #X text 10 186 website:; diff --git a/ceammc/ext/doc/list.set.pddoc b/ceammc/ext/doc/list.set.pddoc index efaf03f00c..927873df9c 100644 --- a/ceammc/ext/doc/list.set.pddoc +++ b/ceammc/ext/doc/list.set.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky on input list set value at specified position - GPL3 + GPL3 or later ceammc list list set diff --git a/ceammc/ext/doc/list.shift-help.pd b/ceammc/ext/doc/list.shift-help.pd index 465553eec3..f9443a5c9b 100644 --- a/ceammc/ext/doc/list.shift-help.pd +++ b/ceammc/ext/doc/list.shift-help.pd @@ -5,58 +5,58 @@ #X obj 1 1 cnv 5 765 40 empty empty list.shift 20 20 0 20 -104026 -4096 0; #X obj 668 11 list.shift; -#X text 50 118 change shift; -#X floatatom 50 147 5 0 0 0 - - -; -#X msg 98 147 0 \, 30 2000; -#X obj 98 176 line; -#X obj 50 205 t b f; -#X text 174 205 change list values; -#X obj 50 234 ui.sliders @count 30 @size 200 80; -#X obj 50 320 list.shift 10; -#X obj 50 349 ui.sliders @count 30 @size 200 80; -#X obj 20 451 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 456 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +#X floatatom 50 118 5 0 0 0 - - -; +#X msg 98 118 0 \, 30 2000; +#X obj 98 147 line; +#X obj 50 176 t b f; +#X text 174 176 change list values; +#X obj 50 205 ui.sliders @count 30 @size 200 60; +#X obj 50 277 list.shift 10; +#X obj 50 305 ui.sliders @count 30 @size 200 60; +#X obj 50 378 print; +#X obj 20 417 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 422 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 -49933 0; -#X text 110 491 1\.; -#X text 150 491 float; -#X obj 246 492 cnv 1 46 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 491 shift: shift amount. Float values cause linear interpolation. +#X text 110 457 1\.; +#X text 150 457 float; +#X obj 246 458 cnv 1 46 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 457 shift: shift amount. Float values cause linear interpolation. Can be negative..; -#X obj 20 536 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 541 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +#X obj 20 502 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 507 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; -#X msg 110 576 @shift; -#X text 245 576 Get/Set shift amount. Type: float. Default value: 0\.; -#X obj 20 615 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 620 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X msg 110 542 @shift; +#X text 245 542 Get/Set shift amount. Type: float. Default value: 0\.; +#X obj 20 581 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 586 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 621 1\.; -#X text 150 621 *list*; -#X text 245 621 input list.; -#X text 150 641 *data:mlist*; -#X text 245 641 input mlist.; -#X text 110 661 2\.; -#X text 245 661 shift value.; -#X obj 20 691 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 696 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 587 1\.; +#X text 150 587 *list*; +#X text 245 587 input list.; +#X text 150 607 *data:mlist*; +#X text 245 607 input mlist.; +#X text 110 627 2\.; +#X text 245 627 shift value.; +#X obj 20 657 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 662 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 697 1\.; -#X text 245 697 new modified list.; +#X text 110 663 1\.; +#X text 245 663 new modified list.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; -#X obj 1 747 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 750 library: ceammc v0.7.1; -#X text 587 762 see also:; -#X obj 661 762 list.rotate; -#N canvas 10 769 400 290 info 0; +#X obj 1 713 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 716 library: ceammc v0.8.0; +#X text 587 728 see also:; +#X obj 661 728 list.rotate; +#N canvas 10 735 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 list.shift; #X text 10 76 category:; @@ -66,7 +66,7 @@ Can be negative..; #X text 10 120 authors:; #X text 120 120 Alex Nadzharov \, Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 list; #X text 10 186 website:; @@ -75,11 +75,12 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 769 pd info; +#X restore 10 735 pd info; +#X connect 5 0 6 0; +#X connect 4 0 7 0; #X connect 6 0 7 0; -#X connect 5 0 8 0; -#X connect 7 0 8 0; -#X connect 8 0 10 0; +#X connect 7 0 9 0; +#X connect 9 0 10 0; #X connect 10 0 11 0; #X connect 11 0 12 0; -#X connect 8 1 11 1; \ No newline at end of file +#X connect 7 1 10 1; \ No newline at end of file diff --git a/ceammc/ext/doc/list.shift.pddoc b/ceammc/ext/doc/list.shift.pddoc index b58d1bb75e..64c934a284 100644 --- a/ceammc/ext/doc/list.shift.pddoc +++ b/ceammc/ext/doc/list.shift.pddoc @@ -8,7 +8,7 @@ Serge Poltavsky shifts the contents of the list with linear interpolation - GPL3 + GPL3 or later ceammc list list @@ -39,23 +39,25 @@ b:1] ]]> diff --git a/ceammc/ext/doc/list.shuffle-help.pd b/ceammc/ext/doc/list.shuffle-help.pd index 1cccaed1e4..2681ccef69 100644 --- a/ceammc/ext/doc/list.shuffle-help.pd +++ b/ceammc/ext/doc/list.shuffle-help.pd @@ -29,7 +29,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #X text 500 520 see also:; #X obj 574 520 list.sort; #X obj 653 520 list.reverse; @@ -38,7 +38,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 list.shuffle; #X text 10 76 category:; @@ -48,7 +48,7 @@ #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 list \, shuffle \, random; #X text 10 186 website:; diff --git a/ceammc/ext/doc/list.shuffle.pddoc b/ceammc/ext/doc/list.shuffle.pddoc index aebfd546aa..75799aa718 100644 --- a/ceammc/ext/doc/list.shuffle.pddoc +++ b/ceammc/ext/doc/list.shuffle.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky randomly rearranges elements in list - GPL3 + GPL3 or later ceammc list list shuffle random diff --git a/ceammc/ext/doc/list.slice-help.pd b/ceammc/ext/doc/list.slice-help.pd index f6c7c2b736..7b57490c38 100644 --- a/ceammc/ext/doc/list.slice-help.pd +++ b/ceammc/ext/doc/list.slice-help.pd @@ -69,7 +69,7 @@ to address elements from the end. Type: int. Default value: -1\.; #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; #X obj 1 737 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 740 library: ceammc v0.7.1; +#X text 10 740 library: ceammc v0.8.0; #X text 616 752 see also:; #X obj 690 752 list.at; #N canvas 10 759 400 290 info 0; @@ -77,7 +77,7 @@ to address elements from the end. Type: int. Default value: -1\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 list.slice; #X text 10 76 category:; @@ -87,7 +87,7 @@ to address elements from the end. Type: int. Default value: -1\.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 list \, slice \, sublist; #X text 10 186 website:; diff --git a/ceammc/ext/doc/list.slice.pddoc b/ceammc/ext/doc/list.slice.pddoc index 48c4e144df..a11e59f6fb 100644 --- a/ceammc/ext/doc/list.slice.pddoc +++ b/ceammc/ext/doc/list.slice.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky extract sublist - GPL3 + GPL3 or later ceammc list list slice sublist diff --git a/ceammc/ext/doc/list.sort-help.pd b/ceammc/ext/doc/list.sort-help.pd index ba8c52ddb6..5c3c91ad72 100644 --- a/ceammc/ext/doc/list.sort-help.pd +++ b/ceammc/ext/doc/list.sort-help.pd @@ -27,7 +27,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #X text 361 520 see also:; #X obj 435 520 list.sort_with; #X obj 551 520 list.reverse; @@ -37,7 +37,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 list.sort; #X text 10 76 category:; @@ -47,7 +47,7 @@ #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 list \, sort; #X text 10 186 website:; diff --git a/ceammc/ext/doc/list.sort.pddoc b/ceammc/ext/doc/list.sort.pddoc index 633e890a88..170a930c5d 100644 --- a/ceammc/ext/doc/list.sort.pddoc +++ b/ceammc/ext/doc/list.sort.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky sorts list values by ascending order - GPL3 + GPL3 or later ceammc list list sort diff --git a/ceammc/ext/doc/list.sort_with-help.pd b/ceammc/ext/doc/list.sort_with-help.pd index 3f61d6c0fb..6677dc5b60 100644 --- a/ceammc/ext/doc/list.sort_with-help.pd +++ b/ceammc/ext/doc/list.sort_with-help.pd @@ -35,7 +35,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #X text 602 520 see also:; #X obj 676 520 list.sort; #N canvas 10 527 400 290 info 0; @@ -43,7 +43,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 list.sort_with; #X text 10 76 category:; @@ -53,7 +53,7 @@ #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 list \, sort_with; #X text 10 186 website:; diff --git a/ceammc/ext/doc/list.sort_with.pddoc b/ceammc/ext/doc/list.sort_with.pddoc index 70a83fa86d..180dd13583 100644 --- a/ceammc/ext/doc/list.sort_with.pddoc +++ b/ceammc/ext/doc/list.sort_with.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky sort list with user defined side-chain - GPL3 + GPL3 or later ceammc list list sort_with diff --git a/ceammc/ext/doc/list.split-help.pd b/ceammc/ext/doc/list.split-help.pd index 71476c0b81..4121a69fbf 100644 --- a/ceammc/ext/doc/list.split-help.pd +++ b/ceammc/ext/doc/list.split-help.pd @@ -48,7 +48,7 @@ Min value: 0\.; #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; #X obj 1 582 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 585 library: ceammc v0.7.1; +#X text 10 585 library: ceammc v0.8.0; #X text 616 597 see also:; #X obj 690 597 list.at; #N canvas 10 604 400 290 info 0; @@ -56,7 +56,7 @@ Min value: 0\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 list.split; #X text 10 76 category:; @@ -66,7 +66,7 @@ Min value: 0\.; #X text 10 120 authors:; #X text 120 120 Alex Nadzharov \, Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 list; #X text 10 186 website:; diff --git a/ceammc/ext/doc/list.split.pddoc b/ceammc/ext/doc/list.split.pddoc index 83fdb42b50..08d531f2d3 100644 --- a/ceammc/ext/doc/list.split.pddoc +++ b/ceammc/ext/doc/list.split.pddoc @@ -9,7 +9,7 @@ splits list into two parts, the length of first list is specified by the argument. - GPL3 + GPL3 or later ceammc list list diff --git a/ceammc/ext/doc/list.stretch-help.pd b/ceammc/ext/doc/list.stretch-help.pd index 2bf70504fd..de89d4c73d 100644 --- a/ceammc/ext/doc/list.stretch-help.pd +++ b/ceammc/ext/doc/list.stretch-help.pd @@ -5,54 +5,55 @@ #X obj 1 1 cnv 5 765 40 empty empty list.stretch 20 20 0 20 -104026 -4096 0; #X obj 654 11 list.stretch; -#X obj 50 118 ui.sliders @size 150 100; +#X obj 50 118 ui.sliders; #X floatatom 174 234 5 0 0 0 - - -; #X obj 50 262 list.stretch 32; -#X obj 50 291 ui.sliders @count 32 @size 150 100; -#X obj 20 413 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 418 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +#X obj 50 291 ui.sliders @count 32; +#X obj 50 406 print; +#X obj 20 445 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 450 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 -49933 0; -#X text 110 453 1\.; -#X text 150 453 int; -#X obj 246 454 cnv 1 61 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 453 stretch: New size of output list. Input list will be +#X text 110 485 1\.; +#X text 150 485 int; +#X obj 246 486 cnv 1 61 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 485 stretch: New size of output list. Input list will be stretched to the new size with linear interpolation. Min value: 1; -#X obj 20 513 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 518 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +#X obj 20 545 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 550 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; -#X msg 110 553 @size; -#X text 245 553 Get/Set new size. Type: int. Default value: 1\. Min +#X msg 110 585 @size; +#X text 245 585 Get/Set new size. Type: int. Default value: 1\. Min value: 1\.; -#X obj 20 605 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 610 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X obj 20 637 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 642 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 611 1\.; -#X text 150 611 *list*; -#X text 245 611 input list.; -#X text 150 631 *data:mlist*; -#X text 245 631 input mlist.; -#X text 110 651 2\.; -#X text 245 651 new length of output list.; -#X obj 20 681 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 686 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 643 1\.; +#X text 150 643 *list*; +#X text 245 643 input list.; +#X text 150 663 *data:mlist*; +#X text 245 663 input mlist.; +#X text 110 683 2\.; +#X text 245 683 new length of output list.; +#X obj 20 713 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 718 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 687 1\.; -#X text 245 687 new modified list.; +#X text 110 719 1\.; +#X text 245 719 new modified list.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; -#X obj 1 737 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 740 library: ceammc v0.7.1; -#X text 594 752 see also:; -#X obj 668 752 list.shift; -#N canvas 10 759 400 290 info 0; +#X obj 1 769 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 772 library: ceammc v0.8.0; +#X text 594 784 see also:; +#X obj 668 784 list.shift; +#N canvas 10 791 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 list.stretch; #X text 10 76 category:; @@ -62,7 +63,7 @@ value: 1\.; #X text 10 120 authors:; #X text 120 120 Alex Nadzharov \, Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 list; #X text 10 186 website:; @@ -71,7 +72,8 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 759 pd info; +#X restore 10 791 pd info; #X connect 4 0 6 0; #X connect 5 0 6 1; -#X connect 6 0 7 0; \ No newline at end of file +#X connect 6 0 7 0; +#X connect 7 0 8 0; \ No newline at end of file diff --git a/ceammc/ext/doc/list.stretch.pddoc b/ceammc/ext/doc/list.stretch.pddoc index cb8e2be3fe..1c5dd9a770 100644 --- a/ceammc/ext/doc/list.stretch.pddoc +++ b/ceammc/ext/doc/list.stretch.pddoc @@ -8,7 +8,7 @@ Serge Poltavsky stretches list - chenges its size with linear interpolation. - GPL3 + GPL3 or later ceammc list list @@ -51,7 +51,15 @@ | |. [list.stretch 32] | -[ui.sliders @count=32] +[ui.sliders @count 32] +| +| +| +| +| +| +| +[print] ]]> diff --git a/ceammc/ext/doc/list.sum-help.pd b/ceammc/ext/doc/list.sum-help.pd index 5a150f64d7..9b209feb84 100644 --- a/ceammc/ext/doc/list.sum-help.pd +++ b/ceammc/ext/doc/list.sum-help.pd @@ -28,7 +28,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #X text 486 520 see also:; #X obj 560 520 list.product; #X obj 661 520 list.reduce; @@ -37,7 +37,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 list.sum; #X text 10 76 category:; @@ -47,7 +47,7 @@ #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 list \, sum; #X text 10 186 website:; diff --git a/ceammc/ext/doc/list.sum.pddoc b/ceammc/ext/doc/list.sum.pddoc index d650cf6163..ff92854949 100644 --- a/ceammc/ext/doc/list.sum.pddoc +++ b/ceammc/ext/doc/list.sum.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky calculates sum of floats in list - GPL3 + GPL3 or later ceammc list list sum diff --git a/ceammc/ext/doc/list.unique-help.pd b/ceammc/ext/doc/list.unique-help.pd index 09336de7ce..2666c8bab8 100644 --- a/ceammc/ext/doc/list.unique-help.pd +++ b/ceammc/ext/doc/list.unique-help.pd @@ -34,7 +34,7 @@ Type: int. Default value: 1\. Allowed values: 0 \, 1\.; #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #X text 602 520 see also:; #X obj 676 520 list.sort; #N canvas 10 527 400 290 info 0; @@ -42,7 +42,7 @@ Type: int. Default value: 1\. Allowed values: 0 \, 1\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 list.unique; #X text 10 76 category:; @@ -52,7 +52,7 @@ Type: int. Default value: 1\. Allowed values: 0 \, 1\.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 list \, unique \, sort; #X text 10 186 website:; diff --git a/ceammc/ext/doc/list.unique.pddoc b/ceammc/ext/doc/list.unique.pddoc index 46f5ae5852..08ea9f2085 100644 --- a/ceammc/ext/doc/list.unique.pddoc +++ b/ceammc/ext/doc/list.unique.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky removes duplicates from input list - GPL3 + GPL3 or later ceammc list list unique sort diff --git a/ceammc/ext/doc/list.unpack-help.pd b/ceammc/ext/doc/list.unpack-help.pd index 722b4c417d..b84e345a2e 100644 --- a/ceammc/ext/doc/list.unpack-help.pd +++ b/ceammc/ext/doc/list.unpack-help.pd @@ -41,15 +41,16 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; -#X text 586 520 see also:; -#X obj 660 520 list.repack; +#X text 10 508 library: ceammc v0.8.0; +#X text 477 520 see also:; +#X obj 551 520 list.repack; +#X obj 646 520 list.separate; #N canvas 10 527 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 list.unpack; #X text 10 76 category:; @@ -59,7 +60,7 @@ #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 list \, unpack; #X text 10 186 website:; diff --git a/ceammc/ext/doc/list.unpack.pddoc b/ceammc/ext/doc/list.unpack.pddoc index 4535adb271..bebfc3b188 100644 --- a/ceammc/ext/doc/list.unpack.pddoc +++ b/ceammc/ext/doc/list.unpack.pddoc @@ -7,13 +7,14 @@ Serge Poltavsky unpack list elements to separate outlets - GPL3 + GPL3 or later ceammc list list unpack 0.3 list.repack + list.separate diff --git a/ceammc/ext/doc/list.unzip-help.pd b/ceammc/ext/doc/list.unzip-help.pd index e27ae01adc..a223c114f6 100644 --- a/ceammc/ext/doc/list.unzip-help.pd +++ b/ceammc/ext/doc/list.unzip-help.pd @@ -60,7 +60,7 @@ number of outputs. Type: list.; #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; #X obj 1 791 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 794 library: ceammc v0.7.1; +#X text 10 794 library: ceammc v0.8.0; #X text 608 806 see also:; #X obj 682 806 list.zip; #N canvas 10 813 400 290 info 0; @@ -68,7 +68,7 @@ number of outputs. Type: list.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 list.unzip; #X text 10 76 category:; @@ -78,7 +78,7 @@ number of outputs. Type: list.; #X text 10 120 authors:; #X text 120 120 Alex Nadzharov \, Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 list; #X text 10 186 website:; diff --git a/ceammc/ext/doc/list.unzip.pddoc b/ceammc/ext/doc/list.unzip.pddoc index 727c7dbead..bae36046ff 100644 --- a/ceammc/ext/doc/list.unzip.pddoc +++ b/ceammc/ext/doc/list.unzip.pddoc @@ -8,7 +8,7 @@ Serge Poltavsky splits list to N lists, each to separate output - GPL3 + GPL3 or later ceammc list list diff --git a/ceammc/ext/doc/list.walk-help.pd b/ceammc/ext/doc/list.walk-help.pd index 7060207b81..6119f69e62 100644 --- a/ceammc/ext/doc/list.walk-help.pd +++ b/ceammc/ext/doc/list.walk-help.pd @@ -96,27 +96,29 @@ given step and outputs it. Type: int.; #X text 245 1295 outputs current element and moves to next.; #X text 150 1315 *float*; #X text 245 1315 outputs current element and moves by specified position.; -#X obj 20 1345 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1350 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 150 1335 *list*; +#X text 245 1335 set new list and reset current position. (no output).; +#X obj 20 1365 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1370 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1351 1\.; -#X text 245 1351 list element.; +#X text 110 1371 1\.; +#X text 245 1371 list element.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; -#X obj 1 1401 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1404 library: ceammc v0.7.1; -#X text 537 1416 see also:; -#X obj 611 1416 list.gen; -#X obj 683 1416 list.seq; -#N canvas 10 1423 400 290 info 0; +#X obj 1 1421 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1424 library: ceammc v0.8.0; +#X text 537 1436 see also:; +#X obj 611 1436 list.gen; +#X obj 683 1436 list.seq; +#N canvas 10 1443 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 list.walk; #X text 10 76 category:; @@ -126,7 +128,7 @@ given step and outputs it. Type: int.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 list \, walk \, iterate; #X text 10 186 website:; @@ -135,7 +137,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1423 pd info; +#X restore 10 1443 pd info; #X connect 6 0 8 0; #X connect 7 0 10 0; #X connect 8 0 19 0; diff --git a/ceammc/ext/doc/list.walk.pddoc b/ceammc/ext/doc/list.walk.pddoc index 31de4f6ed9..e2ed7a5e7b 100644 --- a/ceammc/ext/doc/list.walk.pddoc +++ b/ceammc/ext/doc/list.walk.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky Walks thru the list - GPL3 + GPL3 or later ceammc list list walk iterate @@ -63,6 +63,7 @@ outputs current element and moves to next outputs current element and moves by specified position + set new list and reset current position. (no output) diff --git a/ceammc/ext/doc/list.zip-help.pd b/ceammc/ext/doc/list.zip-help.pd index a026739209..d809f19405 100644 --- a/ceammc/ext/doc/list.zip-help.pd +++ b/ceammc/ext/doc/list.zip-help.pd @@ -29,51 +29,55 @@ etc.).; #X obj 20 362 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 397 @clip; -#X text 245 397 alias for "@oversize min" property. Truncates lists -to minimal common size.; -#X msg 110 439 @clip; -#X text 245 439 alias for "@oversize clip" property. Pad shortest list +#X text 245 397 alias for "@oversize clip" property. Pad shortest list with last element to conform longest list.; -#X msg 110 481 @fold; -#X text 245 481 alias for "@oversize fold" property. Pad shortest list +#X msg 110 439 @fold; +#X text 245 439 alias for "@oversize fold" property. Pad shortest list with repeated values from the end to the beginning \, then back and so on.; -#X msg 110 538 @method; -#X text 245 538 Get/Set behavior \, if list have different sizes. Type: -symbol. Default value: padz. Allowed values: min \, clip \, wrap \, -fold.; -#X msg 110 580 @min; -#X text 245 580 alias for "@oversize min" property. Truncates lists +#X msg 110 496 @l0; +#X text 245 496 (readonly) Get first list. Type: list.; +#X msg 110 525 @l1; +#X text 245 525 (readonly) Get second list \, etc. Type: list.; +#X msg 110 554 @method; +#X text 245 554 Get/Set behavior \, if list have different sizes. Type: +symbol. Default value: min. Allowed values: min \, pad \, clip \, wrap +\, fold.; +#X msg 110 611 @min; +#X text 245 611 alias for "@oversize min" property. Truncates lists to minimal common size.; -#X msg 110 622 @wrap; -#X text 245 622 alias for "@oversize wrap" property. Pad shortest list +#X msg 110 653 @pad; +#X text 245 653 Get/Set pad value for pad method of resizing. Type: +atom.; +#X msg 110 682 @wrap; +#X text 245 682 alias for "@oversize wrap" property. Pad shortest list with repeated values from the beginning.; -#X obj 20 674 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 679 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X obj 20 734 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 739 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 680 1\.; -#X text 150 680 *list*; -#X text 245 680 input list.; -#X obj 20 710 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 715 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 740 1\.; +#X text 150 740 *list*; +#X text 245 740 input list.; +#X obj 20 770 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 775 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 716 1\.; -#X text 245 716 interleaved list.; +#X text 110 776 1\.; +#X text 245 776 interleaved list.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; -#X obj 1 766 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 769 library: ceammc v0.7.1; -#X text 594 781 see also:; -#X obj 668 781 list.unzip; -#N canvas 10 788 400 290 info 0; +#X obj 1 826 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 829 library: ceammc v0.8.0; +#X text 594 841 see also:; +#X obj 668 841 list.unzip; +#N canvas 10 848 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 list.zip; #X text 10 76 category:; @@ -83,7 +87,7 @@ with repeated values from the beginning.; #X text 10 120 authors:; #X text 120 120 Alex Nadzharov \, Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 list \, functional; #X text 10 186 website:; @@ -92,7 +96,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 788 pd info; +#X restore 10 848 pd info; #X connect 5 0 12 0; #X connect 8 0 12 0; #X connect 6 0 12 1; diff --git a/ceammc/ext/doc/list.zip.pddoc b/ceammc/ext/doc/list.zip.pddoc index 3edbb58db9..40f9fabce7 100644 --- a/ceammc/ext/doc/list.zip.pddoc +++ b/ceammc/ext/doc/list.zip.pddoc @@ -9,7 +9,7 @@ takes n lists from n inlets (specified by argument) and output their elements sequentially (list1-1 list2-1 list1-2 list2-2 etc.). - GPL3 + GPL3 or later ceammc list list functional @@ -25,12 +25,10 @@ number of inputs - + behavior, if list have different sizes alias for "@oversize min" property. Truncates lists to minimal common size - alias for "@oversize min" property. Truncates lists - to minimal common size. alias for "@oversize clip" property. Pad shortest list with last element to conform longest list alias for "@oversize wrap" property. Pad shortest @@ -38,6 +36,9 @@ alias for "@oversize fold" property. Pad shortest list with repeated values from the end to the beginning, then back and so on. + pad value for pad method of resizing + first list + second list, etc. diff --git a/ceammc/ext/doc/live.capture~-help.pd b/ceammc/ext/doc/live.capture~-help.pd index 48b4920a6d..63fe0000c3 100644 --- a/ceammc/ext/doc/live.capture~-help.pd +++ b/ceammc/ext/doc/live.capture~-help.pd @@ -54,13 +54,13 @@ sound in loop; #X text 115 45 ::; #X obj 131 48 ui.link @title live @url ceammc.live-help.pd; #X obj 1 678 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 681 library: ceammc v0.7.1; +#X text 10 681 library: ceammc v0.8.0; #N canvas 10 700 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 live.capture~; #X text 10 76 category:; @@ -70,7 +70,7 @@ sound in loop; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 live \, record; #X text 10 186 website:; diff --git a/ceammc/ext/doc/live.capture~.pddoc b/ceammc/ext/doc/live.capture~.pddoc index 6b2f7eb8b1..c47a66ae6d 100644 --- a/ceammc/ext/doc/live.capture~.pddoc +++ b/ceammc/ext/doc/live.capture~.pddoc @@ -8,7 +8,7 @@ record up to 32s of sound and playback the recorded sound in loop - GPL3 + GPL3 or later ceammc live live record diff --git a/ceammc/ext/doc/local.dict-help.pd b/ceammc/ext/doc/local.dict-help.pd index 33f407e960..ce5f3f5f6a 100644 --- a/ceammc/ext/doc/local.dict-help.pd +++ b/ceammc/ext/doc/local.dict-help.pd @@ -93,7 +93,7 @@ nothing. Arguments are:; #X text 115 45 ::; #X obj 131 48 ui.link @title local @url ceammc.local-help.pd; #X obj 1 1145 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1148 library: ceammc v0.7.1; +#X text 10 1148 library: ceammc v0.8.0; #X text 506 1160 see also:; #X obj 580 1160 data.dict; #X obj 660 1160 global.dict; @@ -102,7 +102,7 @@ nothing. Arguments are:; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 local.dict; #X text 10 76 category:; @@ -112,7 +112,7 @@ nothing. Arguments are:; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 dict \, local \, global; #X text 10 186 website:; diff --git a/ceammc/ext/doc/local.dict.pddoc b/ceammc/ext/doc/local.dict.pddoc index f73ca7310f..1b982bfd0c 100644 --- a/ceammc/ext/doc/local.dict.pddoc +++ b/ceammc/ext/doc/local.dict.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky local named dict object - GPL3 + GPL3 or later ceammc local dict local global diff --git a/ceammc/ext/doc/local.float-help.pd b/ceammc/ext/doc/local.float-help.pd index 30c6c795ca..d621c4aa7b 100644 --- a/ceammc/ext/doc/local.float-help.pd +++ b/ceammc/ext/doc/local.float-help.pd @@ -64,7 +64,7 @@ outlet.; #X text 115 45 ::; #X obj 131 48 ui.link @title local @url ceammc.local-help.pd; #X obj 1 788 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 791 library: ceammc v0.7.1; +#X text 10 791 library: ceammc v0.8.0; #X text 515 803 see also:; #X obj 589 803 local.int; #X obj 668 803 global.int; @@ -73,7 +73,7 @@ outlet.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 local.float; #X text 10 76 category:; @@ -83,7 +83,7 @@ outlet.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 float \, local; #X text 10 186 website:; diff --git a/ceammc/ext/doc/local.float.pddoc b/ceammc/ext/doc/local.float.pddoc index 400d509d35..e2ed430812 100644 --- a/ceammc/ext/doc/local.float.pddoc +++ b/ceammc/ext/doc/local.float.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky canvas-scoped named float variable - GPL3 + GPL3 or later ceammc local float local diff --git a/ceammc/ext/doc/local.int-help.pd b/ceammc/ext/doc/local.int-help.pd index badbf68303..a309868d87 100644 --- a/ceammc/ext/doc/local.int-help.pd +++ b/ceammc/ext/doc/local.int-help.pd @@ -65,7 +65,7 @@ outlet.; #X text 115 45 ::; #X obj 131 48 ui.link @title local @url ceammc.local-help.pd; #X obj 1 788 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 791 library: ceammc v0.7.1; +#X text 10 791 library: ceammc v0.8.0; #X text 413 803 see also:; #X obj 487 803 local.float; #X obj 581 803 local.list; @@ -75,7 +75,7 @@ outlet.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 local.int; #X text 10 76 category:; @@ -85,7 +85,7 @@ outlet.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 int \, local; #X text 10 186 website:; diff --git a/ceammc/ext/doc/local.int.pddoc b/ceammc/ext/doc/local.int.pddoc index 5eec0d1b7f..fba5dfaf4d 100644 --- a/ceammc/ext/doc/local.int.pddoc +++ b/ceammc/ext/doc/local.int.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky canvas-scoped named integer variable - GPL3 + GPL3 or later ceammc local int local diff --git a/ceammc/ext/doc/local.list-help.pd b/ceammc/ext/doc/local.list-help.pd index f456eee585..b4161aa984 100644 --- a/ceammc/ext/doc/local.list-help.pd +++ b/ceammc/ext/doc/local.list-help.pd @@ -101,7 +101,7 @@ indexes are supported.; #X text 115 45 ::; #X obj 131 48 ui.link @title local @url ceammc.local-help.pd; #X obj 1 1207 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1210 library: ceammc v0.7.1; +#X text 10 1210 library: ceammc v0.8.0; #X text 508 1222 see also:; #X obj 582 1222 local.float; #X obj 676 1222 local.int; @@ -110,7 +110,7 @@ indexes are supported.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 local.list; #X text 10 76 category:; @@ -120,7 +120,7 @@ indexes are supported.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 list \, global; #X text 10 186 website:; diff --git a/ceammc/ext/doc/local.list.pddoc b/ceammc/ext/doc/local.list.pddoc index 584ccd6e07..63ea4c50a6 100644 --- a/ceammc/ext/doc/local.list.pddoc +++ b/ceammc/ext/doc/local.list.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky local named list object - GPL3 + GPL3 or later ceammc local list global diff --git a/ceammc/ext/doc/local.mlist-help.pd b/ceammc/ext/doc/local.mlist-help.pd index ec3f055da4..ba3ef1a023 100644 --- a/ceammc/ext/doc/local.mlist-help.pd +++ b/ceammc/ext/doc/local.mlist-help.pd @@ -100,7 +100,7 @@ are:; #X text 115 45 ::; #X obj 131 48 ui.link @title local @url ceammc.local-help.pd; #X obj 1 1211 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1214 library: ceammc v0.7.1; +#X text 10 1214 library: ceammc v0.8.0; #X text 507 1226 see also:; #X obj 581 1226 data.mlist; #X obj 668 1226 local.list; @@ -109,7 +109,7 @@ are:; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 local.mlist; #X text 10 76 category:; @@ -119,7 +119,7 @@ are:; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 mlist \, local \, global; #X text 10 186 website:; diff --git a/ceammc/ext/doc/local.mlist.pddoc b/ceammc/ext/doc/local.mlist.pddoc index b0d9268b8c..3f622826cc 100644 --- a/ceammc/ext/doc/local.mlist.pddoc +++ b/ceammc/ext/doc/local.mlist.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky local named mlist object - GPL3 + GPL3 or later ceammc local mlist local global diff --git a/ceammc/ext/doc/local.set-help.pd b/ceammc/ext/doc/local.set-help.pd index 1b73b53ae4..f4e8eed26d 100644 --- a/ceammc/ext/doc/local.set-help.pd +++ b/ceammc/ext/doc/local.set-help.pd @@ -75,7 +75,7 @@ Min value: 0\.; #X text 115 45 ::; #X obj 131 48 ui.link @title local @url ceammc.local-help.pd; #X obj 1 867 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 870 library: ceammc v0.7.1; +#X text 10 870 library: ceammc v0.8.0; #X text 521 882 see also:; #X obj 595 882 data.set; #X obj 668 882 global.set; @@ -84,7 +84,7 @@ Min value: 0\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 local.set; #X text 10 76 category:; @@ -94,7 +94,7 @@ Min value: 0\.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 set \, local \, global; #X text 10 186 website:; diff --git a/ceammc/ext/doc/local.set.pddoc b/ceammc/ext/doc/local.set.pddoc index 3923284726..6d9e82892f 100644 --- a/ceammc/ext/doc/local.set.pddoc +++ b/ceammc/ext/doc/local.set.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky local named set object - GPL3 + GPL3 or later ceammc local set local global diff --git a/ceammc/ext/doc/ls_missing_doc.py b/ceammc/ext/doc/ls_missing_doc.py index 54f52affa6..8902a2e802 100755 --- a/ceammc/ext/doc/ls_missing_doc.py +++ b/ceammc/ext/doc/ls_missing_doc.py @@ -18,7 +18,7 @@ def allExternalsWithAliases(): return res def allDocFilesInCmake(): - r_obj = re.compile(r'\s*([\w\d\.~^+-]+)\s*') + r_obj = re.compile(r'\s*([\w\d\.~^+-@]+)\s*') doc_obj = set() with open("docs.cmake", "r") as f: for l in f.readlines(): diff --git a/ceammc/ext/doc/math.abs-help.pd b/ceammc/ext/doc/math.abs-help.pd index 5798b28778..a232332e4b 100644 --- a/ceammc/ext/doc/math.abs-help.pd +++ b/ceammc/ext/doc/math.abs-help.pd @@ -32,7 +32,7 @@ float input.; #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #X text 593 520 see also:; #X obj 667 520 math.floor; #N canvas 10 527 400 290 info 0; @@ -40,7 +40,7 @@ float input.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 math.abs; #X text 10 76 category:; @@ -50,7 +50,7 @@ float input.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 math \, abs; #X text 10 186 website:; diff --git a/ceammc/ext/doc/math.abs.pddoc b/ceammc/ext/doc/math.abs.pddoc index 6e79d0dd97..4da8481c71 100644 --- a/ceammc/ext/doc/math.abs.pddoc +++ b/ceammc/ext/doc/math.abs.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky absolute value function - GPL3 + GPL3 or later ceammc math math abs diff --git a/ceammc/ext/doc/math.acos-help.pd b/ceammc/ext/doc/math.acos-help.pd index af7121bf07..a8adbe2e55 100644 --- a/ceammc/ext/doc/math.acos-help.pd +++ b/ceammc/ext/doc/math.acos-help.pd @@ -35,7 +35,7 @@ the arc cosine of input value. The result is in the range [0 \, pi].; #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #X text 382 520 see also:; #X obj 456 520 math.sin; #X obj 529 520 math.cos; @@ -46,7 +46,7 @@ the arc cosine of input value. The result is in the range [0 \, pi].; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 math.acos; #X text 10 76 category:; @@ -56,7 +56,7 @@ the arc cosine of input value. The result is in the range [0 \, pi].; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 math \, acos; #X text 10 186 website:; diff --git a/ceammc/ext/doc/math.acos.pddoc b/ceammc/ext/doc/math.acos.pddoc index 3e82f1dc16..46396085f4 100644 --- a/ceammc/ext/doc/math.acos.pddoc +++ b/ceammc/ext/doc/math.acos.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky arc cosine function - GPL3 + GPL3 or later ceammc math math acos diff --git a/ceammc/ext/doc/math.acosh-help.pd b/ceammc/ext/doc/math.acosh-help.pd index 4367c77206..2c143c230b 100644 --- a/ceammc/ext/doc/math.acosh-help.pd +++ b/ceammc/ext/doc/math.acosh-help.pd @@ -37,7 +37,7 @@ range [0 \, +infinity].; #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 511 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 514 library: ceammc v0.7.1; +#X text 10 514 library: ceammc v0.8.0; #X text 432 526 see also:; #X obj 506 526 math.asinh; #X obj 594 526 math.atanh; @@ -47,7 +47,7 @@ range [0 \, +infinity].; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 math.acosh; #X text 10 76 category:; @@ -57,7 +57,7 @@ range [0 \, +infinity].; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 math \, acosh; #X text 10 186 website:; diff --git a/ceammc/ext/doc/math.acosh.pddoc b/ceammc/ext/doc/math.acosh.pddoc index 5b3f483802..0eacfcbe3c 100644 --- a/ceammc/ext/doc/math.acosh.pddoc +++ b/ceammc/ext/doc/math.acosh.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky inverse hyperbolic cosine function - GPL3 + GPL3 or later ceammc math math acosh diff --git a/ceammc/ext/doc/math.and-help.pd b/ceammc/ext/doc/math.and-help.pd index 48ab64686f..caefb16320 100644 --- a/ceammc/ext/doc/math.and-help.pd +++ b/ceammc/ext/doc/math.and-help.pd @@ -64,7 +64,7 @@ int. Default value: 0\. Allowed values: 0 \, 1\.; #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 741 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 744 library: ceammc v0.7.1; +#X text 10 744 library: ceammc v0.8.0; #X text 615 756 see also:; #X obj 689 756 math.or; #N canvas 10 763 400 290 info 0; @@ -72,7 +72,7 @@ int. Default value: 0\. Allowed values: 0 \, 1\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 math.and; #X text 10 76 category:; @@ -82,7 +82,7 @@ int. Default value: 0\. Allowed values: 0 \, 1\.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 math \, and \, logic; #X text 10 186 website:; diff --git a/ceammc/ext/doc/math.and.pddoc b/ceammc/ext/doc/math.and.pddoc index 977932ba00..daee13cfc4 100644 --- a/ceammc/ext/doc/math.and.pddoc +++ b/ceammc/ext/doc/math.and.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky operation AND for multiple arguments - GPL3 + GPL3 or later ceammc math math and logic diff --git a/ceammc/ext/doc/math.approx-help.pd b/ceammc/ext/doc/math.approx-help.pd index 8c75dd3df7..be0f30820e 100644 --- a/ceammc/ext/doc/math.approx-help.pd +++ b/ceammc/ext/doc/math.approx-help.pd @@ -61,13 +61,13 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 663 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 666 library: ceammc v0.7.1; +#X text 10 666 library: ceammc v0.8.0; #N canvas 10 685 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 math.approx; #X text 10 76 category:; @@ -77,7 +77,7 @@ #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 equal \, compare \, approx; #X text 10 186 website:; diff --git a/ceammc/ext/doc/math.approx.pddoc b/ceammc/ext/doc/math.approx.pddoc index d0fd9a5979..cbabe1c827 100644 --- a/ceammc/ext/doc/math.approx.pddoc +++ b/ceammc/ext/doc/math.approx.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky check if input value approximately equal to pattern - GPL3 + GPL3 or later ceammc math equal compare approx diff --git a/ceammc/ext/doc/math.asin-help.pd b/ceammc/ext/doc/math.asin-help.pd index fbc11bfbab..c2afa2b86c 100644 --- a/ceammc/ext/doc/math.asin-help.pd +++ b/ceammc/ext/doc/math.asin-help.pd @@ -34,7 +34,7 @@ exception for |x| > 1\.; #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #X text 448 520 see also:; #X obj 522 520 math.acos; #X obj 602 520 math.atan; @@ -44,7 +44,7 @@ exception for |x| > 1\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 math.asin; #X text 10 76 category:; @@ -54,7 +54,7 @@ exception for |x| > 1\.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 math \, asin; #X text 10 186 website:; diff --git a/ceammc/ext/doc/math.asin.pddoc b/ceammc/ext/doc/math.asin.pddoc index 523aaacd8b..9c61ff2742 100644 --- a/ceammc/ext/doc/math.asin.pddoc +++ b/ceammc/ext/doc/math.asin.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky arc sine function - GPL3 + GPL3 or later ceammc math math asin diff --git a/ceammc/ext/doc/math.asinh-help.pd b/ceammc/ext/doc/math.asinh-help.pd index cfea080721..89c9a3e0b5 100644 --- a/ceammc/ext/doc/math.asinh-help.pd +++ b/ceammc/ext/doc/math.asinh-help.pd @@ -33,7 +33,7 @@ sine of the real argument; #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #X text 432 520 see also:; #X obj 506 520 math.acosh; #X obj 594 520 math.atanh; @@ -43,7 +43,7 @@ sine of the real argument; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 math.asinh; #X text 10 76 category:; @@ -53,7 +53,7 @@ sine of the real argument; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 math \, asinh; #X text 10 186 website:; diff --git a/ceammc/ext/doc/math.asinh.pddoc b/ceammc/ext/doc/math.asinh.pddoc index 584df76342..222c035a22 100644 --- a/ceammc/ext/doc/math.asinh.pddoc +++ b/ceammc/ext/doc/math.asinh.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky inverse hyperbolic sine function - GPL3 + GPL3 or later ceammc math math asinh diff --git a/ceammc/ext/doc/math.atan-help.pd b/ceammc/ext/doc/math.atan-help.pd index a770405afd..61312e6b03 100644 --- a/ceammc/ext/doc/math.atan-help.pd +++ b/ceammc/ext/doc/math.atan-help.pd @@ -34,7 +34,7 @@ the arc tangent of input value. The result is in the range [-pi/2 \, #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #X text 448 520 see also:; #X obj 522 520 math.acos; #X obj 602 520 math.asin; @@ -44,7 +44,7 @@ the arc tangent of input value. The result is in the range [-pi/2 \, #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 math.atan; #X text 10 76 category:; @@ -54,7 +54,7 @@ the arc tangent of input value. The result is in the range [-pi/2 \, #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 math \, atan; #X text 10 186 website:; diff --git a/ceammc/ext/doc/math.atan.pddoc b/ceammc/ext/doc/math.atan.pddoc index 0993abe317..519af6e493 100644 --- a/ceammc/ext/doc/math.atan.pddoc +++ b/ceammc/ext/doc/math.atan.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky arc tangent function - GPL3 + GPL3 or later ceammc math math atan diff --git a/ceammc/ext/doc/math.atanh-help.pd b/ceammc/ext/doc/math.atanh-help.pd index f0d07775ae..ee97710d46 100644 --- a/ceammc/ext/doc/math.atanh-help.pd +++ b/ceammc/ext/doc/math.atanh-help.pd @@ -36,7 +36,7 @@ exception for |x| > 1\.; #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #X text 432 520 see also:; #X obj 506 520 math.acosh; #X obj 594 520 math.asinh; @@ -46,7 +46,7 @@ exception for |x| > 1\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 math.atanh; #X text 10 76 category:; @@ -56,7 +56,7 @@ exception for |x| > 1\.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 math \, atanh; #X text 10 186 website:; diff --git a/ceammc/ext/doc/math.atanh.pddoc b/ceammc/ext/doc/math.atanh.pddoc index 94c9e878b3..97658f6807 100644 --- a/ceammc/ext/doc/math.atanh.pddoc +++ b/ceammc/ext/doc/math.atanh.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky inverse hyperbolic tangent function - GPL3 + GPL3 or later ceammc math math atanh diff --git a/ceammc/ext/doc/math.cbrt-help.pd b/ceammc/ext/doc/math.cbrt-help.pd index c6d55527fa..ef27ada615 100644 --- a/ceammc/ext/doc/math.cbrt-help.pd +++ b/ceammc/ext/doc/math.cbrt-help.pd @@ -33,7 +33,7 @@ value.; #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #X text 601 520 see also:; #X obj 675 520 math.sqrt; #N canvas 10 527 400 290 info 0; @@ -41,7 +41,7 @@ value.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 math.cbrt; #X text 10 76 category:; @@ -51,7 +51,7 @@ value.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 math \, cbrt; #X text 10 186 website:; diff --git a/ceammc/ext/doc/math.cbrt.pddoc b/ceammc/ext/doc/math.cbrt.pddoc index e4fa9b2d0c..c4ef1ff728 100644 --- a/ceammc/ext/doc/math.cbrt.pddoc +++ b/ceammc/ext/doc/math.cbrt.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky cube root function - GPL3 + GPL3 or later ceammc math math cbrt diff --git a/ceammc/ext/doc/math.cdiv~-help.pd b/ceammc/ext/doc/math.cdiv~-help.pd index ac6c0bc344..178ad89c95 100644 --- a/ceammc/ext/doc/math.cdiv~-help.pd +++ b/ceammc/ext/doc/math.cdiv~-help.pd @@ -46,7 +46,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 510 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 513 library: ceammc v0.7.1; +#X text 10 513 library: ceammc v0.8.0; #X text 592 525 see also:; #X obj 666 525 math.cmul~; #N canvas 10 532 400 290 info 0; @@ -54,7 +54,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 math.cdiv~; #X text 10 76 category:; @@ -64,7 +64,7 @@ #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 math \, complex \, division; #X text 10 186 website:; diff --git a/ceammc/ext/doc/math.cdiv~.pddoc b/ceammc/ext/doc/math.cdiv~.pddoc index 1016d94782..319865e522 100644 --- a/ceammc/ext/doc/math.cdiv~.pddoc +++ b/ceammc/ext/doc/math.cdiv~.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky division of complex signals - GPL3 + GPL3 or later ceammc math math complex division diff --git a/ceammc/ext/doc/math.ceil-help.pd b/ceammc/ext/doc/math.ceil-help.pd index db430d0d6d..9f6e21f6f8 100644 --- a/ceammc/ext/doc/math.ceil-help.pd +++ b/ceammc/ext/doc/math.ceil-help.pd @@ -35,7 +35,7 @@ greater than or equal to input value.; #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #X text 418 520 see also:; #X obj 492 520 math.floor; #X obj 580 520 math.round; @@ -45,7 +45,7 @@ greater than or equal to input value.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 math.ceil; #X text 10 76 category:; @@ -55,7 +55,7 @@ greater than or equal to input value.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 math \, ceil; #X text 10 186 website:; diff --git a/ceammc/ext/doc/math.ceil.pddoc b/ceammc/ext/doc/math.ceil.pddoc index 5a805971e9..a061260f78 100644 --- a/ceammc/ext/doc/math.ceil.pddoc +++ b/ceammc/ext/doc/math.ceil.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky round to smallest integral value not less than input value - GPL3 + GPL3 or later ceammc math math ceil diff --git a/ceammc/ext/doc/math.cmul~-help.pd b/ceammc/ext/doc/math.cmul~-help.pd index 9be2a4466d..7a06820d85 100644 --- a/ceammc/ext/doc/math.cmul~-help.pd +++ b/ceammc/ext/doc/math.cmul~-help.pd @@ -45,7 +45,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #X text 592 520 see also:; #X obj 666 520 math.cdiv~; #N canvas 10 527 400 290 info 0; @@ -53,7 +53,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 math.cmul~; #X text 10 76 category:; @@ -63,7 +63,7 @@ #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 math \, complex \, multiplication; #X text 10 186 website:; diff --git a/ceammc/ext/doc/math.cmul~.pddoc b/ceammc/ext/doc/math.cmul~.pddoc index d3be973afb..194bff1b0e 100644 --- a/ceammc/ext/doc/math.cmul~.pddoc +++ b/ceammc/ext/doc/math.cmul~.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky multiplication of complex signals - GPL3 + GPL3 or later ceammc math math complex multiplication diff --git a/ceammc/ext/doc/math.cos-help.pd b/ceammc/ext/doc/math.cos-help.pd index ee62b2ca3e..7d63241c7e 100644 --- a/ceammc/ext/doc/math.cos-help.pd +++ b/ceammc/ext/doc/math.cos-help.pd @@ -34,7 +34,7 @@ floating-point exception.; #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #X text 375 520 see also:; #X obj 449 520 math.sin; #X obj 522 520 math.tan; @@ -45,7 +45,7 @@ floating-point exception.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 math.cos; #X text 10 76 category:; @@ -55,7 +55,7 @@ floating-point exception.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 math \, cos; #X text 10 186 website:; diff --git a/ceammc/ext/doc/math.cos.pddoc b/ceammc/ext/doc/math.cos.pddoc index 21fe292b21..9ca7e14218 100644 --- a/ceammc/ext/doc/math.cos.pddoc +++ b/ceammc/ext/doc/math.cos.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky cosine function - GPL3 + GPL3 or later ceammc math math cos diff --git a/ceammc/ext/doc/math.cosh-help.pd b/ceammc/ext/doc/math.cosh-help.pd index 67607a7659..df15b1aa94 100644 --- a/ceammc/ext/doc/math.cosh-help.pd +++ b/ceammc/ext/doc/math.cosh-help.pd @@ -33,7 +33,7 @@ of input value.; #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #X text 441 520 see also:; #X obj 515 520 math.acos; #X obj 595 520 math.asin; @@ -43,7 +43,7 @@ of input value.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 math.cosh; #X text 10 76 category:; @@ -53,7 +53,7 @@ of input value.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 math \, cosh; #X text 10 186 website:; diff --git a/ceammc/ext/doc/math.cosh.pddoc b/ceammc/ext/doc/math.cosh.pddoc index cb91dec6fa..46c8411cd6 100644 --- a/ceammc/ext/doc/math.cosh.pddoc +++ b/ceammc/ext/doc/math.cosh.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky hyperbolic cosine function - GPL3 + GPL3 or later ceammc math math cosh diff --git a/ceammc/ext/doc/math.div-help.pd b/ceammc/ext/doc/math.div-help.pd index bbf87f5b87..e4d365e06e 100644 --- a/ceammc/ext/doc/math.div-help.pd +++ b/ceammc/ext/doc/math.div-help.pd @@ -46,13 +46,13 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 539 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 542 library: ceammc v0.7.1; +#X text 10 542 library: ceammc v0.8.0; #N canvas 10 561 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 math.div; #X text 10 76 category:; @@ -62,7 +62,7 @@ #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 math \, divide; #X text 10 186 website:; diff --git a/ceammc/ext/doc/math.div.pddoc b/ceammc/ext/doc/math.div.pddoc index bb06dcbfa6..bd0690a9e7 100644 --- a/ceammc/ext/doc/math.div.pddoc +++ b/ceammc/ext/doc/math.div.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky division (on lists too) - GPL3 + GPL3 or later ceammc math math divide diff --git a/ceammc/ext/doc/math.e-help.pd b/ceammc/ext/doc/math.e-help.pd index 82b692594c..4af530fc4f 100644 --- a/ceammc/ext/doc/math.e-help.pd +++ b/ceammc/ext/doc/math.e-help.pd @@ -28,7 +28,7 @@ of (1 + 1/n)^n as n approaches infinity.; #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #X text 615 520 see also:; #X obj 689 520 math.pi; #N canvas 10 527 400 290 info 0; @@ -36,7 +36,7 @@ of (1 + 1/n)^n as n approaches infinity.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 math.e; #X text 10 76 category:; @@ -46,7 +46,7 @@ of (1 + 1/n)^n as n approaches infinity.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 math \, e; #X text 10 186 website:; diff --git a/ceammc/ext/doc/math.e.pddoc b/ceammc/ext/doc/math.e.pddoc index f707173ec3..3aef988136 100644 --- a/ceammc/ext/doc/math.e.pddoc +++ b/ceammc/ext/doc/math.e.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky mathematical constant, base of the natural logarithm - GPL3 + GPL3 or later ceammc math math e diff --git a/ceammc/ext/doc/math.exp-help.pd b/ceammc/ext/doc/math.exp-help.pd index 12b267b982..7ce11ea970 100644 --- a/ceammc/ext/doc/math.exp-help.pd +++ b/ceammc/ext/doc/math.exp-help.pd @@ -39,7 +39,7 @@ the magnitude of x is too large.; #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 562 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 565 library: ceammc v0.7.1; +#X text 10 565 library: ceammc v0.8.0; #X text 528 577 see also:; #X obj 602 577 math.log; #X obj 675 577 math.exp2; @@ -48,7 +48,7 @@ the magnitude of x is too large.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 math.exp; #X text 10 76 category:; @@ -58,7 +58,7 @@ the magnitude of x is too large.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 math \, exp; #X text 10 186 website:; diff --git a/ceammc/ext/doc/math.exp.pddoc b/ceammc/ext/doc/math.exp.pddoc index 48080476ef..5e3e7eddee 100644 --- a/ceammc/ext/doc/math.exp.pddoc +++ b/ceammc/ext/doc/math.exp.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky exponential functions - GPL3 + GPL3 or later ceammc math math exp diff --git a/ceammc/ext/doc/math.exp2-help.pd b/ceammc/ext/doc/math.exp2-help.pd index 6834367c79..517288be26 100644 --- a/ceammc/ext/doc/math.exp2-help.pd +++ b/ceammc/ext/doc/math.exp2-help.pd @@ -36,7 +36,7 @@ the magnitude of x is too large.; #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 507 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 510 library: ceammc v0.7.1; +#X text 10 510 library: ceammc v0.8.0; #X text 535 522 see also:; #X obj 609 522 math.log; #X obj 682 522 math.exp; @@ -45,7 +45,7 @@ the magnitude of x is too large.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 math.exp2; #X text 10 76 category:; @@ -55,7 +55,7 @@ the magnitude of x is too large.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 math \, exp2; #X text 10 186 website:; diff --git a/ceammc/ext/doc/math.exp2.pddoc b/ceammc/ext/doc/math.exp2.pddoc index 30aa6e779d..cc28ebf638 100644 --- a/ceammc/ext/doc/math.exp2.pddoc +++ b/ceammc/ext/doc/math.exp2.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky exponential functions - GPL3 + GPL3 or later ceammc math math exp2 diff --git a/ceammc/ext/doc/math.expr-help.pd b/ceammc/ext/doc/math.expr-help.pd index 3292833786..92af91e2d1 100644 --- a/ceammc/ext/doc/math.expr-help.pd +++ b/ceammc/ext/doc/math.expr-help.pd @@ -72,13 +72,13 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 924 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 927 library: ceammc v0.7.1; +#X text 10 927 library: ceammc v0.8.0; #N canvas 10 946 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 math.expr; #X text 10 76 category:; @@ -88,7 +88,7 @@ #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 math \, expr; #X text 10 186 website:; diff --git a/ceammc/ext/doc/math.expr.pddoc b/ceammc/ext/doc/math.expr.pddoc index f6708f9ebb..bc3ddb845f 100644 --- a/ceammc/ext/doc/math.expr.pddoc +++ b/ceammc/ext/doc/math.expr.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky dynamic [expr] - GPL3 + GPL3 or later ceammc math math expr diff --git a/ceammc/ext/doc/math.floor-help.pd b/ceammc/ext/doc/math.floor-help.pd index a6677c44c7..b26b3a9d12 100644 --- a/ceammc/ext/doc/math.floor-help.pd +++ b/ceammc/ext/doc/math.floor-help.pd @@ -35,7 +35,7 @@ less than or equal to x.; #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #X text 425 520 see also:; #X obj 499 520 math.ceil; #X obj 580 520 math.round; @@ -45,7 +45,7 @@ less than or equal to x.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 math.floor; #X text 10 76 category:; @@ -55,7 +55,7 @@ less than or equal to x.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 math \, floor; #X text 10 186 website:; diff --git a/ceammc/ext/doc/math.floor.pddoc b/ceammc/ext/doc/math.floor.pddoc index 9ec7e2820f..77a14934f8 100644 --- a/ceammc/ext/doc/math.floor.pddoc +++ b/ceammc/ext/doc/math.floor.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky round to largest integral value not greater than x - GPL3 + GPL3 or later ceammc math math floor diff --git a/ceammc/ext/doc/math.gcd-help.pd b/ceammc/ext/doc/math.gcd-help.pd index 663ad8abe8..cf93241c7c 100644 --- a/ceammc/ext/doc/math.gcd-help.pd +++ b/ceammc/ext/doc/math.gcd-help.pd @@ -39,7 +39,7 @@ calculated GCD value.; #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #X text 607 520 see also:; #X obj 681 520 math.lcm; #N canvas 10 527 400 290 info 0; @@ -47,7 +47,7 @@ calculated GCD value.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 math.gcd; #X text 10 76 category:; @@ -57,7 +57,7 @@ calculated GCD value.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 math \, gcd; #X text 10 186 website:; diff --git a/ceammc/ext/doc/math.gcd.pddoc b/ceammc/ext/doc/math.gcd.pddoc index 8b630dd166..5e88bb58ed 100644 --- a/ceammc/ext/doc/math.gcd.pddoc +++ b/ceammc/ext/doc/math.gcd.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky calculate greatest common divisor - GPL3 + GPL3 or later ceammc math math gcd diff --git a/ceammc/ext/doc/math.inf-help.pd b/ceammc/ext/doc/math.inf-help.pd index f18dbe0d75..95c7d7e93e 100644 --- a/ceammc/ext/doc/math.inf-help.pd +++ b/ceammc/ext/doc/math.inf-help.pd @@ -31,7 +31,7 @@ accurately.; #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #X text 608 520 see also:; #X obj 682 520 math.nan; #N canvas 10 527 400 290 info 0; @@ -39,7 +39,7 @@ accurately.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 math.inf; #X text 10 76 category:; @@ -49,7 +49,7 @@ accurately.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 math \, inf; #X text 10 186 website:; diff --git a/ceammc/ext/doc/math.inf.pddoc b/ceammc/ext/doc/math.inf.pddoc index 4659aed7f3..4d0de2c125 100644 --- a/ceammc/ext/doc/math.inf.pddoc +++ b/ceammc/ext/doc/math.inf.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky infinity value that cannot be represented accurately - GPL3 + GPL3 or later ceammc math math inf diff --git a/ceammc/ext/doc/math.lcm-help.pd b/ceammc/ext/doc/math.lcm-help.pd index 233ecfb14b..be3113d17e 100644 --- a/ceammc/ext/doc/math.lcm-help.pd +++ b/ceammc/ext/doc/math.lcm-help.pd @@ -41,7 +41,7 @@ calculated LCM value.; #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #X text 608 520 see also:; #X obj 682 520 math.gcd; #N canvas 10 527 400 290 info 0; @@ -49,7 +49,7 @@ calculated LCM value.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 math.lcm; #X text 10 76 category:; @@ -59,7 +59,7 @@ calculated LCM value.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 math \, lcm; #X text 10 186 website:; diff --git a/ceammc/ext/doc/math.lcm.pddoc b/ceammc/ext/doc/math.lcm.pddoc index 0b321e4cb1..7f0f2dff58 100644 --- a/ceammc/ext/doc/math.lcm.pddoc +++ b/ceammc/ext/doc/math.lcm.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky calculate least common multiple - GPL3 + GPL3 or later ceammc math math lcm diff --git a/ceammc/ext/doc/math.log-help.pd b/ceammc/ext/doc/math.log-help.pd index dddbc30ddc..1e611b2435 100644 --- a/ceammc/ext/doc/math.log-help.pd +++ b/ceammc/ext/doc/math.log-help.pd @@ -35,16 +35,15 @@ logarithm of argu- ment x.; #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; -#X text 528 520 see also:; -#X obj 602 520 math.exp; -#X obj 675 520 math.math; +#X text 10 508 library: ceammc v0.8.0; +#X text 608 520 see also:; +#X obj 682 520 math.exp; #N canvas 10 527 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 math.log; #X text 10 76 category:; @@ -54,7 +53,7 @@ logarithm of argu- ment x.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 math \, log; #X text 10 186 website:; diff --git a/ceammc/ext/doc/math.log.pddoc b/ceammc/ext/doc/math.log.pddoc index 10b6bea098..4e9639751f 100644 --- a/ceammc/ext/doc/math.log.pddoc +++ b/ceammc/ext/doc/math.log.pddoc @@ -7,13 +7,12 @@ Serge Poltavsky logarithm functions - GPL3 + GPL3 or later ceammc math math log math.exp - math.math 0.1 diff --git a/ceammc/ext/doc/math.log10-help.pd b/ceammc/ext/doc/math.log10-help.pd index 3afc94ce0d..0c5d2b4d45 100644 --- a/ceammc/ext/doc/math.log10-help.pd +++ b/ceammc/ext/doc/math.log10-help.pd @@ -35,7 +35,7 @@ of argument x to base 10\.; #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #X text 608 520 see also:; #X obj 682 520 math.exp; #N canvas 10 527 400 290 info 0; @@ -43,7 +43,7 @@ of argument x to base 10\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 math.log10; #X text 10 76 category:; @@ -53,7 +53,7 @@ of argument x to base 10\.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 math \, log10; #X text 10 186 website:; diff --git a/ceammc/ext/doc/math.log10.pddoc b/ceammc/ext/doc/math.log10.pddoc index 4474cabea9..d0028a7f87 100644 --- a/ceammc/ext/doc/math.log10.pddoc +++ b/ceammc/ext/doc/math.log10.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky logarithm functions - GPL3 + GPL3 or later ceammc math math log10 diff --git a/ceammc/ext/doc/math.log2-help.pd b/ceammc/ext/doc/math.log2-help.pd index 357c7be586..a28d53caa9 100644 --- a/ceammc/ext/doc/math.log2-help.pd +++ b/ceammc/ext/doc/math.log2-help.pd @@ -33,7 +33,7 @@ of argument x to base 2\.; #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #X text 608 520 see also:; #X obj 682 520 math.exp; #N canvas 10 527 400 290 info 0; @@ -41,7 +41,7 @@ of argument x to base 2\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 math.log2; #X text 10 76 category:; @@ -51,7 +51,7 @@ of argument x to base 2\.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 math \, log2; #X text 10 186 website:; diff --git a/ceammc/ext/doc/math.log2.pddoc b/ceammc/ext/doc/math.log2.pddoc index eff44251d6..4b706affd3 100644 --- a/ceammc/ext/doc/math.log2.pddoc +++ b/ceammc/ext/doc/math.log2.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky logarithm functions - GPL3 + GPL3 or later ceammc math math log2 diff --git a/ceammc/ext/doc/math.mul-help.pd b/ceammc/ext/doc/math.mul-help.pd index 4cdf6bc4f5..8007b0169e 100644 --- a/ceammc/ext/doc/math.mul-help.pd +++ b/ceammc/ext/doc/math.mul-help.pd @@ -46,13 +46,13 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 539 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 542 library: ceammc v0.7.1; +#X text 10 542 library: ceammc v0.8.0; #N canvas 10 561 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 math.mul; #X text 10 76 category:; @@ -62,7 +62,7 @@ #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 math \, mul; #X text 10 186 website:; diff --git a/ceammc/ext/doc/math.mul.pddoc b/ceammc/ext/doc/math.mul.pddoc index d51637979f..7e65ca6de7 100644 --- a/ceammc/ext/doc/math.mul.pddoc +++ b/ceammc/ext/doc/math.mul.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky multiplication (on lists too) - GPL3 + GPL3 or later ceammc math math mul diff --git a/ceammc/ext/doc/math.nan-help.pd b/ceammc/ext/doc/math.nan-help.pd index d16ebe9408..aa8d38252e 100644 --- a/ceammc/ext/doc/math.nan-help.pd +++ b/ceammc/ext/doc/math.nan-help.pd @@ -33,7 +33,7 @@ infinities.; #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #X text 608 520 see also:; #X obj 682 520 math.inf; #N canvas 10 527 400 290 info 0; @@ -41,7 +41,7 @@ infinities.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 math.nan; #X text 10 76 category:; @@ -51,7 +51,7 @@ infinities.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 math \, nan; #X text 10 186 website:; diff --git a/ceammc/ext/doc/math.nan.pddoc b/ceammc/ext/doc/math.nan.pddoc index 40ae24b024..ba488751d0 100644 --- a/ceammc/ext/doc/math.nan.pddoc +++ b/ceammc/ext/doc/math.nan.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky Not a Number, unrepresentable value - GPL3 + GPL3 or later ceammc math math nan diff --git a/ceammc/ext/doc/math.neg-help.pd b/ceammc/ext/doc/math.neg-help.pd index 66aea7d3d0..c7adbce927 100644 --- a/ceammc/ext/doc/math.neg-help.pd +++ b/ceammc/ext/doc/math.neg-help.pd @@ -31,13 +31,13 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #N canvas 10 527 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 math.neg; #X text 10 76 category:; @@ -47,7 +47,7 @@ #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 math \, negate; #X text 10 186 website:; diff --git a/ceammc/ext/doc/math.neg.pddoc b/ceammc/ext/doc/math.neg.pddoc index f0b3bfdcc4..f1881f6005 100644 --- a/ceammc/ext/doc/math.neg.pddoc +++ b/ceammc/ext/doc/math.neg.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky negate function - GPL3 + GPL3 or later ceammc math math negate diff --git a/ceammc/ext/doc/math.or-help.pd b/ceammc/ext/doc/math.or-help.pd index 016b6c57c7..73256b6bd2 100644 --- a/ceammc/ext/doc/math.or-help.pd +++ b/ceammc/ext/doc/math.or-help.pd @@ -63,7 +63,7 @@ int. Default value: 0\. Allowed values: 0 \, 1\.; #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 741 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 744 library: ceammc v0.7.1; +#X text 10 744 library: ceammc v0.8.0; #X text 608 756 see also:; #X obj 682 756 math.and; #N canvas 10 763 400 290 info 0; @@ -71,7 +71,7 @@ int. Default value: 0\. Allowed values: 0 \, 1\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 math.or; #X text 10 76 category:; @@ -81,7 +81,7 @@ int. Default value: 0\. Allowed values: 0 \, 1\.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 math \, or \, logic; #X text 10 186 website:; diff --git a/ceammc/ext/doc/math.or.pddoc b/ceammc/ext/doc/math.or.pddoc index 4e2d8b9ab7..55dcca1d19 100644 --- a/ceammc/ext/doc/math.or.pddoc +++ b/ceammc/ext/doc/math.or.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky operation OR for multiple arguments - GPL3 + GPL3 or later ceammc math math or logic diff --git a/ceammc/ext/doc/math.pi-help.pd b/ceammc/ext/doc/math.pi-help.pd index 48f9a6c9f2..bdbcd02cb7 100644 --- a/ceammc/ext/doc/math.pi-help.pd +++ b/ceammc/ext/doc/math.pi-help.pd @@ -30,7 +30,7 @@ as 3.14159\.; #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #X text 622 520 see also:; #X obj 696 520 math.e; #N canvas 10 527 400 290 info 0; @@ -38,7 +38,7 @@ as 3.14159\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 math.pi; #X text 10 76 category:; @@ -48,7 +48,7 @@ as 3.14159\.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 math \, pi; #X text 10 186 website:; diff --git a/ceammc/ext/doc/math.pi.pddoc b/ceammc/ext/doc/math.pi.pddoc index 3fcf4a5930..174bbd45e7 100644 --- a/ceammc/ext/doc/math.pi.pddoc +++ b/ceammc/ext/doc/math.pi.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky mathematical constant - GPL3 + GPL3 or later ceammc math math pi diff --git a/ceammc/ext/doc/math.polyeval-help.pd b/ceammc/ext/doc/math.polyeval-help.pd index e3ceed05ab..826a5fac1d 100644 --- a/ceammc/ext/doc/math.polyeval-help.pd +++ b/ceammc/ext/doc/math.polyeval-help.pd @@ -46,13 +46,13 @@ list; #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 526 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 529 library: ceammc v0.7.1; +#X text 10 529 library: ceammc v0.8.0; #N canvas 10 548 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 math.polyeval; #X text 10 76 category:; @@ -62,7 +62,7 @@ list; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 math \, polynomial; #X text 10 186 website:; diff --git a/ceammc/ext/doc/math.polyeval.pddoc b/ceammc/ext/doc/math.polyeval.pddoc index 8202915024..7bb5c6a621 100644 --- a/ceammc/ext/doc/math.polyeval.pddoc +++ b/ceammc/ext/doc/math.polyeval.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky evaluates the polynomial described by the coefficients list - GPL3 + GPL3 or later ceammc math math polynomial diff --git a/ceammc/ext/doc/math.reciprocal-help.pd b/ceammc/ext/doc/math.reciprocal-help.pd index 86605fd34f..431a827822 100644 --- a/ceammc/ext/doc/math.reciprocal-help.pd +++ b/ceammc/ext/doc/math.reciprocal-help.pd @@ -36,13 +36,13 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #N canvas 10 527 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 math.reciprocal; #X text 10 76 category:; @@ -52,7 +52,7 @@ #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 math \, reciprocal; #X text 10 186 website:; diff --git a/ceammc/ext/doc/math.reciprocal.pddoc b/ceammc/ext/doc/math.reciprocal.pddoc index d0082f0bbd..90bd41bd1c 100644 --- a/ceammc/ext/doc/math.reciprocal.pddoc +++ b/ceammc/ext/doc/math.reciprocal.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky calculate reciprocal number - GPL3 + GPL3 or later ceammc math math reciprocal diff --git a/ceammc/ext/doc/math.round-help.pd b/ceammc/ext/doc/math.round-help.pd index b21a563c18..60ed9c9909 100644 --- a/ceammc/ext/doc/math.round-help.pd +++ b/ceammc/ext/doc/math.round-help.pd @@ -36,7 +36,7 @@ rounding direction.; #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #X text 424 520 see also:; #X obj 498 520 math.ceil; #X obj 579 520 math.floor; @@ -46,7 +46,7 @@ rounding direction.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 math.round; #X text 10 76 category:; @@ -56,7 +56,7 @@ rounding direction.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 math \, round; #X text 10 186 website:; diff --git a/ceammc/ext/doc/math.round.pddoc b/ceammc/ext/doc/math.round.pddoc index db796f9744..fa4e02593b 100644 --- a/ceammc/ext/doc/math.round.pddoc +++ b/ceammc/ext/doc/math.round.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky round to integral value, regardless of rounding direction - GPL3 + GPL3 or later ceammc math math round diff --git a/ceammc/ext/doc/math.round~-help.pd b/ceammc/ext/doc/math.round~-help.pd index 76f3b3592d..912acbaa23 100644 --- a/ceammc/ext/doc/math.round~-help.pd +++ b/ceammc/ext/doc/math.round~-help.pd @@ -29,7 +29,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #X text 594 520 see also:; #X obj 668 520 math.round; #N canvas 10 527 400 290 info 0; @@ -37,7 +37,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 math.round~; #X text 10 76 category:; @@ -47,7 +47,7 @@ #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 math \, round~; #X text 10 186 website:; diff --git a/ceammc/ext/doc/math.round~.pddoc b/ceammc/ext/doc/math.round~.pddoc index b219c95fb2..78c326af6a 100644 --- a/ceammc/ext/doc/math.round~.pddoc +++ b/ceammc/ext/doc/math.round~.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky signal round - GPL3 + GPL3 or later ceammc math math round~ diff --git a/ceammc/ext/doc/math.sign-help.pd b/ceammc/ext/doc/math.sign-help.pd index d34da460d7..be85d75494 100644 --- a/ceammc/ext/doc/math.sign-help.pd +++ b/ceammc/ext/doc/math.sign-help.pd @@ -32,13 +32,13 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #N canvas 10 527 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 math.sign; #X text 10 76 category:; @@ -48,7 +48,7 @@ #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 math \, sign; #X text 10 186 website:; diff --git a/ceammc/ext/doc/math.sign.pddoc b/ceammc/ext/doc/math.sign.pddoc index ae03f0ee9b..28a43091ff 100644 --- a/ceammc/ext/doc/math.sign.pddoc +++ b/ceammc/ext/doc/math.sign.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky sign function - GPL3 + GPL3 or later ceammc math math sign diff --git a/ceammc/ext/doc/math.sin-help.pd b/ceammc/ext/doc/math.sin-help.pd index 71f51bbbdf..f81bd33884 100644 --- a/ceammc/ext/doc/math.sin-help.pd +++ b/ceammc/ext/doc/math.sin-help.pd @@ -35,7 +35,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #X text 441 520 see also:; #X obj 515 520 math.acos; #X obj 595 520 math.asin; @@ -45,7 +45,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 math.sin; #X text 10 76 category:; @@ -55,7 +55,7 @@ #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 math \, sin; #X text 10 186 website:; diff --git a/ceammc/ext/doc/math.sin.pddoc b/ceammc/ext/doc/math.sin.pddoc index 1d3cc88089..a32afc4457 100644 --- a/ceammc/ext/doc/math.sin.pddoc +++ b/ceammc/ext/doc/math.sin.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky sine function - GPL3 + GPL3 or later ceammc math math sin diff --git a/ceammc/ext/doc/math.sinh-help.pd b/ceammc/ext/doc/math.sinh-help.pd index fda80f1cda..5d2a7e474c 100644 --- a/ceammc/ext/doc/math.sinh-help.pd +++ b/ceammc/ext/doc/math.sinh-help.pd @@ -33,7 +33,7 @@ x.; #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #X text 441 520 see also:; #X obj 515 520 math.acos; #X obj 595 520 math.asin; @@ -43,7 +43,7 @@ x.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 math.sinh; #X text 10 76 category:; @@ -53,7 +53,7 @@ x.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 math \, sinh; #X text 10 186 website:; diff --git a/ceammc/ext/doc/math.sinh.pddoc b/ceammc/ext/doc/math.sinh.pddoc index 2423cda0e0..68be090ddc 100644 --- a/ceammc/ext/doc/math.sinh.pddoc +++ b/ceammc/ext/doc/math.sinh.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky hyperbolic sine function - GPL3 + GPL3 or later ceammc math math sinh diff --git a/ceammc/ext/doc/math.sqrt-help.pd b/ceammc/ext/doc/math.sqrt-help.pd index 2f1173a6a2..82a867dcc7 100644 --- a/ceammc/ext/doc/math.sqrt-help.pd +++ b/ceammc/ext/doc/math.sqrt-help.pd @@ -34,7 +34,7 @@ for x < 0\.; #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #X text 601 520 see also:; #X obj 675 520 math.math; #N canvas 10 527 400 290 info 0; @@ -42,7 +42,7 @@ for x < 0\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 math.sqrt; #X text 10 76 category:; @@ -52,7 +52,7 @@ for x < 0\.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 math \, sqrt; #X text 10 186 website:; diff --git a/ceammc/ext/doc/math.sqrt.pddoc b/ceammc/ext/doc/math.sqrt.pddoc index 15bcfcae1e..178cbc1ac7 100644 --- a/ceammc/ext/doc/math.sqrt.pddoc +++ b/ceammc/ext/doc/math.sqrt.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky square root function - GPL3 + GPL3 or later ceammc math math sqrt diff --git a/ceammc/ext/doc/math.squared-help.pd b/ceammc/ext/doc/math.squared-help.pd index c05714214a..3bd701f828 100644 --- a/ceammc/ext/doc/math.squared-help.pd +++ b/ceammc/ext/doc/math.squared-help.pd @@ -29,13 +29,13 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #N canvas 10 527 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 math.squared; #X text 10 76 category:; @@ -45,7 +45,7 @@ #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 math \, square; #X text 10 186 website:; diff --git a/ceammc/ext/doc/math.squared.pddoc b/ceammc/ext/doc/math.squared.pddoc index f4e5610a67..a1401ce7e5 100644 --- a/ceammc/ext/doc/math.squared.pddoc +++ b/ceammc/ext/doc/math.squared.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky value square - GPL3 + GPL3 or later ceammc math math square diff --git a/ceammc/ext/doc/math.sync_add-help.pd b/ceammc/ext/doc/math.sync_add-help.pd new file mode 100644 index 0000000000..cf65fea213 --- /dev/null +++ b/ceammc/ext/doc/math.sync_add-help.pd @@ -0,0 +1,90 @@ +#N canvas 0 0 785 555 12; +#X declare -lib ceammc; +#X obj 660 50 cnv 1 105 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 660 50 sync addition; +#X obj 1 1 cnv 5 765 40 empty empty math.sync_add 20 20 0 20 -104026 +-4096 0; +#X obj 530 11 math.+'; +#X obj 604 11 +'; +#X obj 646 11 math.sync_add; +#X floatatom 50 118 5 0 0 0 - - -; +#X floatatom 107 118 5 0 0 0 - - -; +#X text 165 118 same as:; +#X floatatom 290 118 5 0 0 0 - - -; +#X floatatom 338 118 5 0 0 0 - - -; +#X obj 338 147 t b f; +#X obj 50 176 +'; +#X obj 290 176 +; +#X floatatom 50 205 5 0 0 0 - - -; +#X floatatom 290 205 5 0 0 0 - - -; +#X obj 20 244 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 249 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +-49933 0; +#X text 110 284 1\.; +#X text 150 284 float; +#X obj 246 285 cnv 1 15 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 284 F: second addend.; +#X obj 20 314 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 319 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 354 @int; +#X text 245 354 operate on integers only.; +#X obj 20 393 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 398 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +0; +#X text 110 399 1\.; +#X text 150 399 *float*; +#X text 245 399 set first addend \, calculate and output result.; +#X text 150 419 *list*; +#X text 245 419 pair: set first and second addends \, calculate and +output result.; +#X text 110 454 2\.; +#X text 150 454 *float*; +#X text 245 454 change second addend \, calculate and output result.; +#X obj 20 484 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 489 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 490 1\.; +#X text 245 490 result output.; +#X obj 10 48 ui.link @title index @url ../index-help.pd; +#X text 51 45 ::; +#X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; +#X text 115 45 ::; +#X obj 131 48 ui.link @title math @url ceammc.math-help.pd; +#X obj 1 540 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 543 library: ceammc v0.8.0; +#X text 571 555 see also:; +#X obj 645 555 math.sync_sub; +#N canvas 10 562 400 290 info 0; +#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; +#X text 10 10 library:; +#X text 120 10 ceammc; +#X text 10 32 version:; +#X text 120 32 0.8.0; +#X text 10 54 object:; +#X text 120 54 math.sync_add; +#X text 10 76 category:; +#X text 120 76 math; +#X text 10 98 since:; +#X text 120 98 0.8; +#X text 10 120 authors:; +#X text 120 120 Serge Poltavsky; +#X text 10 142 license:; +#X text 120 142 GPL3 or later; +#X text 10 164 keywords:; +#X text 120 164 math \, add \, sync; +#X text 10 186 website:; +#X obj 120 189 ui.link @title https://github.com/uliss/pure-data @url +https://github.com/uliss/pure-data; +#X obj 120 208 declare -lib ceammc; +#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 120 268 generated by pddoc; +#X restore 10 562 pd info; +#X connect 10 0 11 0; +#X connect 6 0 12 0; +#X connect 7 0 12 1; +#X connect 9 0 13 0; +#X connect 11 0 13 0; +#X connect 11 1 13 1; +#X connect 12 0 14 0; +#X connect 13 0 15 0; \ No newline at end of file diff --git a/ceammc/ext/doc/math.sync_add.pddoc b/ceammc/ext/doc/math.sync_add.pddoc new file mode 100644 index 0000000000..ec6aec6bf0 --- /dev/null +++ b/ceammc/ext/doc/math.sync_add.pddoc @@ -0,0 +1,56 @@ + + + + math.sync_add + + + Serge Poltavsky + + sync addition + GPL3 or later + ceammc + math + math add sync + + math.+' + +' + + 0.8 + + math.sync_sub + + + + second addend + + + operate on integers only + + + + set first addend, calculate and output result + pair: set first and second addends, calculate and output + result + + + change second addend, calculate and output result + + + + result output + + + + + + + + diff --git a/ceammc/ext/doc/math.sync_and-help.pd b/ceammc/ext/doc/math.sync_and-help.pd new file mode 100644 index 0000000000..4471e6349d --- /dev/null +++ b/ceammc/ext/doc/math.sync_and-help.pd @@ -0,0 +1,92 @@ +#N canvas 0 0 785 555 12; +#X declare -lib ceammc; +#X obj 561 50 cnv 1 204 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 561 50 sync logical AND operation; +#X obj 1 1 cnv 5 765 40 empty empty math.sync_and 20 20 0 20 -104026 +-4096 0; +#X obj 520 11 math.&&'; +#X obj 601 11 &&'; +#X obj 646 11 math.sync_and; +#X obj 210 80 cnv 1 555 50 empty empty empty 17 7 0 10 -257983 -1 0; +#X text 215 80 Only 1 and 0 values are accepted. Any other number treat +as 1 \, but print error to console.; +#X obj 50 158 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; +#X obj 107 158 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; +#X text 165 158 same as:; +#X obj 290 158 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; +#X obj 338 158 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; +#X text 424 158 0 0 | 0; +#X obj 338 187 t b f; +#X text 424 187 0 1 | 0; +#X obj 50 216 &&'; +#X obj 290 216 &&; +#X text 424 216 1 0 | 0; +#X obj 50 245 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; +#X obj 290 245 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; +#X text 424 245 1 1 | 1; +#X obj 20 282 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 287 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +-49933 0; +#X text 110 322 1\.; +#X text 150 322 int; +#X obj 246 323 cnv 1 16 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 322 V: second value.; +#X obj 20 352 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 357 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +0; +#X text 110 358 1\.; +#X text 150 358 *float*; +#X text 245 358 set first value \, calculate and output result.; +#X text 150 378 *list*; +#X text 245 378 pair: set first and second values \, calculate and +output result.; +#X text 110 413 2\.; +#X text 150 413 *float*; +#X text 245 413 change second value \, calculate and output result.; +#X obj 20 443 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 448 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 449 1\.; +#X text 245 449 output 1 or 0 \, according logical AND operation.; +#X obj 10 48 ui.link @title index @url ../index-help.pd; +#X text 51 45 ::; +#X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; +#X text 115 45 ::; +#X obj 131 48 ui.link @title math @url ceammc.math-help.pd; +#X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 508 library: ceammc v0.8.0; +#X text 610 520 see also:; +#X obj 684 520 math.||'; +#N canvas 10 527 400 290 info 0; +#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; +#X text 10 10 library:; +#X text 120 10 ceammc; +#X text 10 32 version:; +#X text 120 32 0.8.0; +#X text 10 54 object:; +#X text 120 54 math.sync_and; +#X text 10 76 category:; +#X text 120 76 math; +#X text 10 98 since:; +#X text 120 98 0.8; +#X text 10 120 authors:; +#X text 120 120 Serge Poltavsky; +#X text 10 142 license:; +#X text 120 142 GPL3 or later; +#X text 10 164 keywords:; +#X text 120 164 math \, sync \, logical \, and; +#X text 10 186 website:; +#X obj 120 189 ui.link @title https://github.com/uliss/pure-data @url +https://github.com/uliss/pure-data; +#X obj 120 208 declare -lib ceammc; +#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 120 268 generated by pddoc; +#X restore 10 527 pd info; +#X connect 12 0 14 0; +#X connect 8 0 16 0; +#X connect 9 0 16 1; +#X connect 11 0 17 0; +#X connect 14 0 17 0; +#X connect 14 1 17 1; +#X connect 16 0 19 0; +#X connect 17 0 20 0; \ No newline at end of file diff --git a/ceammc/ext/doc/math.sync_and.pddoc b/ceammc/ext/doc/math.sync_and.pddoc new file mode 100644 index 0000000000..5e72447561 --- /dev/null +++ b/ceammc/ext/doc/math.sync_and.pddoc @@ -0,0 +1,57 @@ + + + + math.sync_and + + + Serge Poltavsky + + sync logical AND operation + GPL3 or later + ceammc + math + math sync logical and + + math.&&' + &&' + + 0.8 + + math.||' + + + + Only 1 and 0 values are accepted. Any other number treat as 1, but print error to + console. + + + second value + + + + set first value, calculate and output result + pair: set first and second values, calculate and output + result + + + change second value, calculate and output result + + + + output 1 or 0, according logical AND operation + + + + + + + + diff --git a/ceammc/ext/doc/math.sync_div-help.pd b/ceammc/ext/doc/math.sync_div-help.pd new file mode 100644 index 0000000000..62f24e75c3 --- /dev/null +++ b/ceammc/ext/doc/math.sync_div-help.pd @@ -0,0 +1,98 @@ +#N canvas 0 0 785 555 12; +#X declare -lib ceammc; +#X obj 660 50 cnv 1 105 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 660 50 sync division; +#X obj 1 1 cnv 5 765 40 empty empty math.sync_div 20 20 0 20 -104026 +-4096 0; +#X obj 529 11 math./'; +#X obj 603 11 /'; +#X obj 645 11 math.sync_div; +#X obj 210 80 cnv 1 555 50 empty empty empty 17 7 0 10 -257983 -1 0; +#X text 215 80 on division by zero outputs nothing: just put error +message into console; +#X floatatom 50 158 5 0 0 0 - - -; +#X floatatom 107 158 5 0 0 0 - - -; +#X text 165 158 same as:; +#X floatatom 290 158 5 0 0 0 - - -; +#X floatatom 338 158 5 0 0 0 - - -; +#X obj 338 187 t b f; +#X obj 50 216 math.sync_div 2; +#X obj 290 216 / 2; +#X floatatom 50 245 5 0 0 0 - - -; +#X floatatom 290 245 5 0 0 0 - - -; +#X msg 50 274 3.1415 5.1; +#X msg 174 274 13 0; +#X obj 50 317 math.sync_div @int; +#X floatatom 50 345 5 0 0 0 - - -; +#X obj 20 384 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 389 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +-49933 0; +#X text 110 424 1\.; +#X text 150 424 float; +#X obj 246 425 cnv 1 31 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 424 DIV: divisor.; +#X obj 20 454 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 459 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 494 @int; +#X text 245 494 operate on integers only.; +#X obj 20 533 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 538 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +0; +#X text 110 539 1\.; +#X text 150 539 *float*; +#X text 245 539 set divident \, calculate and output result.; +#X text 150 559 *list*; +#X text 245 559 pair: set divident and divisor \, calculate and output +result.; +#X text 110 579 2\.; +#X text 150 579 *float*; +#X text 245 579 change divisor \, calculate and output result.; +#X obj 20 609 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 614 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 615 1\.; +#X text 245 615 division result.; +#X obj 10 48 ui.link @title index @url ../index-help.pd; +#X text 51 45 ::; +#X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; +#X text 115 45 ::; +#X obj 131 48 ui.link @title math @url ceammc.math-help.pd; +#X obj 1 665 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 668 library: ceammc v0.8.0; +#N canvas 10 687 400 290 info 0; +#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; +#X text 10 10 library:; +#X text 120 10 ceammc; +#X text 10 32 version:; +#X text 120 32 0.8.0; +#X text 10 54 object:; +#X text 120 54 math.sync_div; +#X text 10 76 category:; +#X text 120 76 math; +#X text 10 98 since:; +#X text 120 98 0.8; +#X text 10 120 authors:; +#X text 120 120 Serge Poltavsky; +#X text 10 142 license:; +#X text 120 142 GPL3 or later; +#X text 10 164 keywords:; +#X text 120 164 math \, division \, sync; +#X text 10 186 website:; +#X obj 120 189 ui.link @title https://github.com/uliss/pure-data @url +https://github.com/uliss/pure-data; +#X obj 120 208 declare -lib ceammc; +#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 120 268 generated by pddoc; +#X restore 10 687 pd info; +#X connect 12 0 13 0; +#X connect 8 0 14 0; +#X connect 9 0 14 1; +#X connect 11 0 15 0; +#X connect 13 0 15 0; +#X connect 13 1 15 1; +#X connect 14 0 16 0; +#X connect 15 0 17 0; +#X connect 18 0 20 0; +#X connect 19 0 20 0; +#X connect 20 0 21 0; \ No newline at end of file diff --git a/ceammc/ext/doc/math.sync_div.pddoc b/ceammc/ext/doc/math.sync_div.pddoc new file mode 100644 index 0000000000..f69c57f61f --- /dev/null +++ b/ceammc/ext/doc/math.sync_div.pddoc @@ -0,0 +1,63 @@ + + + + math.sync_div + + + Serge Poltavsky + + sync division + GPL3 or later + ceammc + math + math division sync + + math./' + /' + + 0.8 + + + on division by zero outputs nothing: just put error message into console + + + divisor + + + operate on integers only + + + + set divident, calculate and output result + pair: set divident and divisor, calculate and output + result + + + change divisor, calculate and output result + + + + division result + + + + + + + + diff --git a/ceammc/ext/doc/math.sync_eq-help.pd b/ceammc/ext/doc/math.sync_eq-help.pd new file mode 100644 index 0000000000..dd48bc1ed9 --- /dev/null +++ b/ceammc/ext/doc/math.sync_eq-help.pd @@ -0,0 +1,101 @@ +#N canvas 0 0 785 555 12; +#X declare -lib ceammc; +#X obj 575 50 cnv 1 190 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 575 50 sync equal numbers check; +#X obj 1 1 cnv 5 765 40 empty empty math.sync_eq 20 20 0 20 -104026 +-4096 0; +#X obj 527 11 math.=='; +#X obj 608 11 =='; +#X obj 653 11 math.sync_eq; +#X floatatom 50 118 5 0 0 0 - - -; +#X floatatom 107 118 5 0 0 0 - - -; +#X text 165 118 same as:; +#X floatatom 290 118 5 0 0 0 - - -; +#X floatatom 338 118 5 0 0 0 - - -; +#X obj 338 147 t b f; +#X obj 50 176 =='; +#X obj 290 176 ==; +#X obj 50 205 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; +#X obj 290 205 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; +#X msg 50 234 100 100.01; +#X msg 174 234 100 101; +#X msg 270 234 100 99.99; +#X obj 50 277 ==' @epsilon 0.1; +#X obj 50 305 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; +#X obj 20 342 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 347 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +-49933 0; +#X text 110 382 1\.; +#X text 150 382 float; +#X obj 246 383 cnv 1 15 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 382 F: second number.; +#X obj 20 412 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 417 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 452 @epsilon; +#X text 245 452 Get/Set compare epsilon. If not zero calculates expession: +-epsilon < abs(A-B) < +epsilon. Type: float. Default value: 0\. Min +value: 0\.; +#X obj 20 519 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 524 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +0; +#X text 110 525 1\.; +#X text 150 525 *float*; +#X text 245 525 set first number \, calculate and output result.; +#X text 150 545 *list*; +#X text 245 545 pair: set first and second numbers \, calculate and +output result.; +#X text 110 580 2\.; +#X text 150 580 *float*; +#X text 245 580 change second number \, calculate and output result.; +#X obj 20 610 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 615 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 616 1\.; +#X text 245 616 result output: 1 if numbers are equal otherwise 0\.; +#X obj 10 48 ui.link @title index @url ../index-help.pd; +#X text 51 45 ::; +#X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; +#X text 115 45 ::; +#X obj 131 48 ui.link @title math @url ceammc.math-help.pd; +#X obj 1 666 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 669 library: ceammc v0.8.0; +#X text 610 681 see also:; +#X obj 684 681 math.!='; +#N canvas 10 688 400 290 info 0; +#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; +#X text 10 10 library:; +#X text 120 10 ceammc; +#X text 10 32 version:; +#X text 120 32 0.8.0; +#X text 10 54 object:; +#X text 120 54 math.sync_eq; +#X text 10 76 category:; +#X text 120 76 math; +#X text 10 98 since:; +#X text 120 98 0.8; +#X text 10 120 authors:; +#X text 120 120 Serge Poltavsky; +#X text 10 142 license:; +#X text 120 142 GPL3 or later; +#X text 10 164 keywords:; +#X text 120 164 math \, sync \, equal; +#X text 10 186 website:; +#X obj 120 189 ui.link @title https://github.com/uliss/pure-data @url +https://github.com/uliss/pure-data; +#X obj 120 208 declare -lib ceammc; +#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 120 268 generated by pddoc; +#X restore 10 688 pd info; +#X connect 10 0 11 0; +#X connect 6 0 12 0; +#X connect 7 0 12 1; +#X connect 9 0 13 0; +#X connect 11 0 13 0; +#X connect 11 1 13 1; +#X connect 12 0 14 0; +#X connect 13 0 15 0; +#X connect 16 0 19 0; +#X connect 17 0 19 0; +#X connect 18 0 19 0; +#X connect 19 0 20 0; \ No newline at end of file diff --git a/ceammc/ext/doc/math.sync_eq.pddoc b/ceammc/ext/doc/math.sync_eq.pddoc new file mode 100644 index 0000000000..906ed20694 --- /dev/null +++ b/ceammc/ext/doc/math.sync_eq.pddoc @@ -0,0 +1,64 @@ + + + + math.sync_eq + + + Serge Poltavsky + + sync equal numbers check + GPL3 or later + ceammc + math + math sync equal + + math.==' + ==' + + 0.8 + + math.!=' + + + + second number + + + compare epsilon. If not + zero calculates expession: -epsilon < abs(A-B) < +epsilon + + + + set first number, calculate and output result + pair: set first and second numbers, calculate and output + result + + + change second number, calculate and output result + + + + result output: 1 if numbers are equal otherwise 0 + + + + + + + + diff --git a/ceammc/ext/doc/math.sync_ge-help.pd b/ceammc/ext/doc/math.sync_ge-help.pd new file mode 100644 index 0000000000..3ec330ae14 --- /dev/null +++ b/ceammc/ext/doc/math.sync_ge-help.pd @@ -0,0 +1,86 @@ +#N canvas 0 0 785 555 12; +#X declare -lib ceammc; +#X obj 499 50 cnv 1 266 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 499 50 sync greater equal numbers compare; +#X obj 1 1 cnv 5 765 40 empty empty math.sync_ge 20 20 0 20 -104026 +-4096 0; +#X obj 527 11 math.>='; +#X obj 608 11 >='; +#X obj 653 11 math.sync_ge; +#X floatatom 50 118 5 0 0 0 - - -; +#X floatatom 107 118 5 0 0 0 - - -; +#X text 165 118 same as:; +#X floatatom 290 118 5 0 0 0 - - -; +#X floatatom 338 118 5 0 0 0 - - -; +#X obj 338 147 t b f; +#X obj 50 176 >='; +#X obj 290 176 >=; +#X obj 50 205 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; +#X obj 290 205 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; +#X obj 20 242 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 247 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +-49933 0; +#X text 110 282 1\.; +#X text 150 282 float; +#X obj 246 283 cnv 1 15 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 282 F: second number.; +#X obj 20 312 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 317 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +0; +#X text 110 318 1\.; +#X text 150 318 *float*; +#X text 245 318 set first number \, calculate and output result.; +#X text 150 338 *list*; +#X text 245 338 pair: set first and second numbers \, calculate and +output result.; +#X text 110 373 2\.; +#X text 150 373 *float*; +#X text 245 373 change second number \, calculate and output result.; +#X obj 20 403 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 408 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 409 1\.; +#X text 245 409 result output: 1 if first number is greater or equal +second \, otherwise 0\.; +#X obj 10 48 ui.link @title index @url ../index-help.pd; +#X text 51 45 ::; +#X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; +#X text 115 45 ::; +#X obj 131 48 ui.link @title math @url ceammc.math-help.pd; +#X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 508 library: ceammc v0.8.0; +#X text 610 520 see also:; +#X obj 684 520 math.<='; +#N canvas 10 527 400 290 info 0; +#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; +#X text 10 10 library:; +#X text 120 10 ceammc; +#X text 10 32 version:; +#X text 120 32 0.8.0; +#X text 10 54 object:; +#X text 120 54 math.sync_ge; +#X text 10 76 category:; +#X text 120 76 math; +#X text 10 98 since:; +#X text 120 98 0.8; +#X text 10 120 authors:; +#X text 120 120 Serge Poltavsky; +#X text 10 142 license:; +#X text 120 142 GPL3 or later; +#X text 10 164 keywords:; +#X text 120 164 math \, sync \, greater \, equal \, compare; +#X text 10 186 website:; +#X obj 120 189 ui.link @title https://github.com/uliss/pure-data @url +https://github.com/uliss/pure-data; +#X obj 120 208 declare -lib ceammc; +#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 120 268 generated by pddoc; +#X restore 10 527 pd info; +#X connect 10 0 11 0; +#X connect 6 0 12 0; +#X connect 7 0 12 1; +#X connect 9 0 13 0; +#X connect 11 0 13 0; +#X connect 11 1 13 1; +#X connect 12 0 14 0; +#X connect 13 0 15 0; \ No newline at end of file diff --git a/ceammc/ext/doc/math.sync_ge.pddoc b/ceammc/ext/doc/math.sync_ge.pddoc new file mode 100644 index 0000000000..6caacd6823 --- /dev/null +++ b/ceammc/ext/doc/math.sync_ge.pddoc @@ -0,0 +1,54 @@ + + + + math.sync_ge + + + Serge Poltavsky + + sync greater equal numbers compare + GPL3 or later + ceammc + math + math sync greater equal compare + + math.>=' + >=' + + 0.8 + + math.<=' + + + + second number + + + + set first number, calculate and output result + pair: set first and second numbers, calculate and output + result + + + change second number, calculate and output result + + + + result output: 1 if first number is greater or equal second, otherwise + 0 + + + +=' ] [>= ] +| | +[_] [_] +]]> + + + + diff --git a/ceammc/ext/doc/math.sync_gt-help.pd b/ceammc/ext/doc/math.sync_gt-help.pd new file mode 100644 index 0000000000..7ac4a22b28 --- /dev/null +++ b/ceammc/ext/doc/math.sync_gt-help.pd @@ -0,0 +1,86 @@ +#N canvas 0 0 785 555 12; +#X declare -lib ceammc; +#X obj 507 50 cnv 1 258 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 507 50 sync greater then numbers compare; +#X obj 1 1 cnv 5 765 40 empty empty math.sync_gt 20 20 0 20 -104026 +-4096 0; +#X obj 537 11 math.>'; +#X obj 611 11 >'; +#X obj 653 11 math.sync_gt; +#X floatatom 50 118 5 0 0 0 - - -; +#X floatatom 107 118 5 0 0 0 - - -; +#X text 165 118 same as:; +#X floatatom 290 118 5 0 0 0 - - -; +#X floatatom 338 118 5 0 0 0 - - -; +#X obj 338 147 t b f; +#X obj 50 176 >'; +#X obj 290 176 >; +#X obj 50 205 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; +#X obj 290 205 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; +#X obj 20 242 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 247 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +-49933 0; +#X text 110 282 1\.; +#X text 150 282 float; +#X obj 246 283 cnv 1 15 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 282 F: second number.; +#X obj 20 312 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 317 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +0; +#X text 110 318 1\.; +#X text 150 318 *float*; +#X text 245 318 set first number \, calculate and output result.; +#X text 150 338 *list*; +#X text 245 338 pair: set first and second numbers \, calculate and +output result.; +#X text 110 373 2\.; +#X text 150 373 *float*; +#X text 245 373 change second number \, calculate and output result.; +#X obj 20 403 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 408 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 409 1\.; +#X text 245 409 result output: 1 if first number is greater then second +\, otherwise 0\.; +#X obj 10 48 ui.link @title index @url ../index-help.pd; +#X text 51 45 ::; +#X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; +#X text 115 45 ::; +#X obj 131 48 ui.link @title math @url ceammc.math-help.pd; +#X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 508 library: ceammc v0.8.0; +#X text 617 520 see also:; +#X obj 691 520 math.<'; +#N canvas 10 527 400 290 info 0; +#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; +#X text 10 10 library:; +#X text 120 10 ceammc; +#X text 10 32 version:; +#X text 120 32 0.8.0; +#X text 10 54 object:; +#X text 120 54 math.sync_gt; +#X text 10 76 category:; +#X text 120 76 math; +#X text 10 98 since:; +#X text 120 98 0.8; +#X text 10 120 authors:; +#X text 120 120 Serge Poltavsky; +#X text 10 142 license:; +#X text 120 142 GPL3 or later; +#X text 10 164 keywords:; +#X text 120 164 math \, sync \, greater \, then \, compare; +#X text 10 186 website:; +#X obj 120 189 ui.link @title https://github.com/uliss/pure-data @url +https://github.com/uliss/pure-data; +#X obj 120 208 declare -lib ceammc; +#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 120 268 generated by pddoc; +#X restore 10 527 pd info; +#X connect 10 0 11 0; +#X connect 6 0 12 0; +#X connect 7 0 12 1; +#X connect 9 0 13 0; +#X connect 11 0 13 0; +#X connect 11 1 13 1; +#X connect 12 0 14 0; +#X connect 13 0 15 0; \ No newline at end of file diff --git a/ceammc/ext/doc/math.sync_gt.pddoc b/ceammc/ext/doc/math.sync_gt.pddoc new file mode 100644 index 0000000000..cbee888c10 --- /dev/null +++ b/ceammc/ext/doc/math.sync_gt.pddoc @@ -0,0 +1,53 @@ + + + + math.sync_gt + + + Serge Poltavsky + + sync greater then numbers compare + GPL3 or later + ceammc + math + math sync greater then compare + + math.>' + >' + + 0.8 + + math.<' + + + + second number + + + + set first number, calculate and output result + pair: set first and second numbers, calculate and output + result + + + change second number, calculate and output result + + + + result output: 1 if first number is greater then second, otherwise 0 + + + +' ] [> ] +| | +[_] [_] +]]> + + + + diff --git a/ceammc/ext/doc/math.sync_le-help.pd b/ceammc/ext/doc/math.sync_le-help.pd new file mode 100644 index 0000000000..59dbed73f1 --- /dev/null +++ b/ceammc/ext/doc/math.sync_le-help.pd @@ -0,0 +1,86 @@ +#N canvas 0 0 785 555 12; +#X declare -lib ceammc; +#X obj 522 50 cnv 1 243 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 522 50 sync less equal numbers compare; +#X obj 1 1 cnv 5 765 40 empty empty math.sync_le 20 20 0 20 -104026 +-4096 0; +#X obj 527 11 math.<='; +#X obj 608 11 <='; +#X obj 653 11 math.sync_le; +#X floatatom 50 118 5 0 0 0 - - -; +#X floatatom 107 118 5 0 0 0 - - -; +#X text 165 118 same as:; +#X floatatom 290 118 5 0 0 0 - - -; +#X floatatom 338 118 5 0 0 0 - - -; +#X obj 338 147 t b f; +#X obj 50 176 <='; +#X obj 290 176 <=; +#X obj 50 205 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; +#X obj 290 205 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; +#X obj 20 242 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 247 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +-49933 0; +#X text 110 282 1\.; +#X text 150 282 float; +#X obj 246 283 cnv 1 15 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 282 F: second number.; +#X obj 20 312 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 317 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +0; +#X text 110 318 1\.; +#X text 150 318 *float*; +#X text 245 318 set first number \, calculate and output result.; +#X text 150 338 *list*; +#X text 245 338 pair: set first and second numbers \, calculate and +output result.; +#X text 110 373 2\.; +#X text 150 373 *float*; +#X text 245 373 change second number \, calculate and output result.; +#X obj 20 403 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 408 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 409 1\.; +#X text 245 409 result output: 1 if first number is less or equal second +\, otherwise 0\.; +#X obj 10 48 ui.link @title index @url ../index-help.pd; +#X text 51 45 ::; +#X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; +#X text 115 45 ::; +#X obj 131 48 ui.link @title math @url ceammc.math-help.pd; +#X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 508 library: ceammc v0.8.0; +#X text 610 520 see also:; +#X obj 684 520 math.>='; +#N canvas 10 527 400 290 info 0; +#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; +#X text 10 10 library:; +#X text 120 10 ceammc; +#X text 10 32 version:; +#X text 120 32 0.8.0; +#X text 10 54 object:; +#X text 120 54 math.sync_le; +#X text 10 76 category:; +#X text 120 76 math; +#X text 10 98 since:; +#X text 120 98 0.8; +#X text 10 120 authors:; +#X text 120 120 Serge Poltavsky; +#X text 10 142 license:; +#X text 120 142 GPL3 or later; +#X text 10 164 keywords:; +#X text 120 164 math \, sync \, less \, equal \, compare; +#X text 10 186 website:; +#X obj 120 189 ui.link @title https://github.com/uliss/pure-data @url +https://github.com/uliss/pure-data; +#X obj 120 208 declare -lib ceammc; +#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 120 268 generated by pddoc; +#X restore 10 527 pd info; +#X connect 10 0 11 0; +#X connect 6 0 12 0; +#X connect 7 0 12 1; +#X connect 9 0 13 0; +#X connect 11 0 13 0; +#X connect 11 1 13 1; +#X connect 12 0 14 0; +#X connect 13 0 15 0; \ No newline at end of file diff --git a/ceammc/ext/doc/math.sync_le.pddoc b/ceammc/ext/doc/math.sync_le.pddoc new file mode 100644 index 0000000000..aee51a99e7 --- /dev/null +++ b/ceammc/ext/doc/math.sync_le.pddoc @@ -0,0 +1,53 @@ + + + + math.sync_le + + + Serge Poltavsky + + sync less equal numbers compare + GPL3 or later + ceammc + math + math sync less equal compare + + math.<=' + <=' + + 0.8 + + math.>=' + + + + second number + + + + set first number, calculate and output result + pair: set first and second numbers, calculate and output + result + + + change second number, calculate and output result + + + + result output: 1 if first number is less or equal second, otherwise 0 + + + + + + + + diff --git a/ceammc/ext/doc/math.sync_lt-help.pd b/ceammc/ext/doc/math.sync_lt-help.pd new file mode 100644 index 0000000000..e63e79bff2 --- /dev/null +++ b/ceammc/ext/doc/math.sync_lt-help.pd @@ -0,0 +1,86 @@ +#N canvas 0 0 785 555 12; +#X declare -lib ceammc; +#X obj 530 50 cnv 1 235 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 530 50 sync less then numbers compare; +#X obj 1 1 cnv 5 765 40 empty empty math.sync_lt 20 20 0 20 -104026 +-4096 0; +#X obj 537 11 math.<'; +#X obj 611 11 <'; +#X obj 653 11 math.sync_lt; +#X floatatom 50 118 5 0 0 0 - - -; +#X floatatom 107 118 5 0 0 0 - - -; +#X text 165 118 same as:; +#X floatatom 290 118 5 0 0 0 - - -; +#X floatatom 338 118 5 0 0 0 - - -; +#X obj 338 147 t b f; +#X obj 50 176 <'; +#X obj 290 176 <; +#X obj 50 205 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; +#X obj 290 205 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; +#X obj 20 242 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 247 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +-49933 0; +#X text 110 282 1\.; +#X text 150 282 float; +#X obj 246 283 cnv 1 15 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 282 F: second number.; +#X obj 20 312 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 317 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +0; +#X text 110 318 1\.; +#X text 150 318 *float*; +#X text 245 318 set first number \, calculate and output result.; +#X text 150 338 *list*; +#X text 245 338 pair: set first and second numbers \, calculate and +output result.; +#X text 110 373 2\.; +#X text 150 373 *float*; +#X text 245 373 change second number \, calculate and output result.; +#X obj 20 403 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 408 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 409 1\.; +#X text 245 409 result output: 1 if first number is less then second +\, otherwise 0\.; +#X obj 10 48 ui.link @title index @url ../index-help.pd; +#X text 51 45 ::; +#X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; +#X text 115 45 ::; +#X obj 131 48 ui.link @title math @url ceammc.math-help.pd; +#X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 508 library: ceammc v0.8.0; +#X text 617 520 see also:; +#X obj 691 520 math.>'; +#N canvas 10 527 400 290 info 0; +#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; +#X text 10 10 library:; +#X text 120 10 ceammc; +#X text 10 32 version:; +#X text 120 32 0.8.0; +#X text 10 54 object:; +#X text 120 54 math.sync_lt; +#X text 10 76 category:; +#X text 120 76 math; +#X text 10 98 since:; +#X text 120 98 0.8; +#X text 10 120 authors:; +#X text 120 120 Serge Poltavsky; +#X text 10 142 license:; +#X text 120 142 GPL3 or later; +#X text 10 164 keywords:; +#X text 120 164 math \, sync \, less \, then; +#X text 10 186 website:; +#X obj 120 189 ui.link @title https://github.com/uliss/pure-data @url +https://github.com/uliss/pure-data; +#X obj 120 208 declare -lib ceammc; +#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 120 268 generated by pddoc; +#X restore 10 527 pd info; +#X connect 10 0 11 0; +#X connect 6 0 12 0; +#X connect 7 0 12 1; +#X connect 9 0 13 0; +#X connect 11 0 13 0; +#X connect 11 1 13 1; +#X connect 12 0 14 0; +#X connect 13 0 15 0; \ No newline at end of file diff --git a/ceammc/ext/doc/math.sync_lt.pddoc b/ceammc/ext/doc/math.sync_lt.pddoc new file mode 100644 index 0000000000..b8e5b1e872 --- /dev/null +++ b/ceammc/ext/doc/math.sync_lt.pddoc @@ -0,0 +1,53 @@ + + + + math.sync_lt + + + Serge Poltavsky + + sync less then numbers compare + GPL3 or later + ceammc + math + math sync less then + + math.<' + <' + + 0.8 + + math.>' + + + + second number + + + + set first number, calculate and output result + pair: set first and second numbers, calculate and output + result + + + change second number, calculate and output result + + + + result output: 1 if first number is less then second, otherwise 0 + + + + + + + + diff --git a/ceammc/ext/doc/math.sync_mod-help.pd b/ceammc/ext/doc/math.sync_mod-help.pd new file mode 100644 index 0000000000..8c22226d27 --- /dev/null +++ b/ceammc/ext/doc/math.sync_mod-help.pd @@ -0,0 +1,100 @@ +#N canvas 0 0 785 555 12; +#X declare -lib ceammc; +#X obj 363 50 cnv 1 402 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 363 50 sync remainder of modulo division (float or integer); +#X obj 1 1 cnv 5 765 40 empty empty math.sync_mod 20 20 0 20 -104026 +-4096 0; +#X obj 530 11 math.%'; +#X obj 604 11 %'; +#X obj 646 11 math.sync_mod; +#X obj 210 80 cnv 1 555 50 empty empty empty 17 7 0 10 -257983 -1 0; +#X text 215 80 on division by zero outputs nothing: just put error +message into console; +#X floatatom 50 158 5 0 0 0 - - -; +#X floatatom 107 158 5 0 0 0 - - -; +#X text 165 158 same as:; +#X floatatom 290 158 5 0 0 0 - - -; +#X floatatom 338 158 5 0 0 0 - - -; +#X obj 338 187 t b f; +#X obj 50 216 %'; +#X obj 290 216 mod; +#X floatatom 50 245 5 0 0 0 - - -; +#X floatatom 290 245 5 0 0 0 - - -; +#X floatatom 50 274 5 0 0 0 - - -; +#X floatatom 117 274 5 0 0 0 - - -; +#X obj 50 317 math.%' @int; +#X floatatom 50 345 5 0 0 0 - - -; +#X obj 20 384 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 389 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +-49933 0; +#X text 110 424 1\.; +#X text 150 424 float; +#X obj 246 425 cnv 1 31 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 424 DIV: modulo divisor.; +#X obj 20 454 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 459 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 494 @int; +#X text 245 494 operate on integers only.; +#X obj 20 533 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 538 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +0; +#X text 110 539 1\.; +#X text 150 539 *float*; +#X text 245 539 set modulo divident \, calculate and output remainder.; +#X text 150 559 *list*; +#X text 245 559 pair: set modulo divident and divisor \, calculate +and output remainder.; +#X text 110 594 2\.; +#X text 150 594 *float*; +#X text 245 594 change divisor \, calculate and output result.; +#X obj 20 624 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 629 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 630 1\.; +#X text 245 630 remainder signed as first number.; +#X obj 10 48 ui.link @title index @url ../index-help.pd; +#X text 51 45 ::; +#X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; +#X text 115 45 ::; +#X obj 131 48 ui.link @title math @url ceammc.math-help.pd; +#X obj 1 680 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 683 library: ceammc v0.8.0; +#X text 571 695 see also:; +#X obj 645 695 math.sync_div; +#N canvas 10 702 400 290 info 0; +#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; +#X text 10 10 library:; +#X text 120 10 ceammc; +#X text 10 32 version:; +#X text 120 32 0.8.0; +#X text 10 54 object:; +#X text 120 54 math.sync_mod; +#X text 10 76 category:; +#X text 120 76 math; +#X text 10 98 since:; +#X text 120 98 0.8; +#X text 10 120 authors:; +#X text 120 120 Serge Poltavsky; +#X text 10 142 license:; +#X text 120 142 GPL3 or later; +#X text 10 164 keywords:; +#X text 120 164 math \, modulo \, sync; +#X text 10 186 website:; +#X obj 120 189 ui.link @title https://github.com/uliss/pure-data @url +https://github.com/uliss/pure-data; +#X obj 120 208 declare -lib ceammc; +#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 120 268 generated by pddoc; +#X restore 10 702 pd info; +#X connect 12 0 13 0; +#X connect 8 0 14 0; +#X connect 9 0 14 1; +#X connect 11 0 15 0; +#X connect 13 0 15 0; +#X connect 13 1 15 1; +#X connect 14 0 16 0; +#X connect 15 0 17 0; +#X connect 18 0 20 0; +#X connect 19 0 20 1; +#X connect 20 0 21 0; \ No newline at end of file diff --git a/ceammc/ext/doc/math.sync_mod.pddoc b/ceammc/ext/doc/math.sync_mod.pddoc new file mode 100644 index 0000000000..6e6b3178c7 --- /dev/null +++ b/ceammc/ext/doc/math.sync_mod.pddoc @@ -0,0 +1,66 @@ + + + + math.sync_mod + + + Serge Poltavsky + + sync remainder of modulo division (float or integer) + GPL3 or later + ceammc + math + math modulo sync + + math.%' + %' + + 0.8 + + math.sync_div + + + + on division by zero outputs nothing: just put error message into console + + + modulo divisor + + + operate on integers only + + + + set modulo divident, calculate and output remainder + pair: set modulo divident and divisor, calculate and output + remainder + + + change divisor, calculate and output result + + + + remainder signed as first number + + + + + + + + diff --git a/ceammc/ext/doc/math.sync_mul-help.pd b/ceammc/ext/doc/math.sync_mul-help.pd new file mode 100644 index 0000000000..181c00a66d --- /dev/null +++ b/ceammc/ext/doc/math.sync_mul-help.pd @@ -0,0 +1,95 @@ +#N canvas 0 0 785 555 12; +#X declare -lib ceammc; +#X obj 614 50 cnv 1 151 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 614 50 sync multiplication; +#X obj 1 1 cnv 5 765 40 empty empty math.sync_mul 20 20 0 20 -104026 +-4096 0; +#X obj 529 11 math.*'; +#X obj 603 11 *'; +#X obj 645 11 math.sync_mul; +#X floatatom 50 118 5 0 0 0 - - -; +#X floatatom 107 118 5 0 0 0 - - -; +#X text 165 118 same as:; +#X floatatom 290 118 5 0 0 0 - - -; +#X floatatom 338 118 5 0 0 0 - - -; +#X obj 338 147 t b f; +#X obj 50 176 *' 2; +#X obj 290 176 * 2; +#X floatatom 50 205 5 0 0 0 - - -; +#X floatatom 290 205 5 0 0 0 - - -; +#X msg 50 234 3.1415 5.1; +#X msg 174 234 -3.1415 5.9; +#X obj 50 277 *' @int; +#X floatatom 50 305 5 0 0 0 - - -; +#X obj 20 344 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 349 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +-49933 0; +#X text 110 384 1\.; +#X text 150 384 float; +#X obj 246 385 cnv 1 32 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 384 MUL: multiplicand.; +#X obj 20 414 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 419 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 454 @int; +#X text 245 454 operate on integers only.; +#X obj 20 493 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 498 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +0; +#X text 110 499 1\.; +#X text 150 499 *float*; +#X text 245 499 set multiplier \, calculate and output result.; +#X text 150 519 *list*; +#X text 245 519 pair: set multipliers and multiplicand \, calculate +and output result.; +#X text 110 554 2\.; +#X text 150 554 *float*; +#X text 245 554 change multiplicand \, calculate and output result.; +#X obj 20 584 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 589 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 590 1\.; +#X text 245 590 multiplication result.; +#X obj 10 48 ui.link @title index @url ../index-help.pd; +#X text 51 45 ::; +#X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; +#X text 115 45 ::; +#X obj 131 48 ui.link @title math @url ceammc.math-help.pd; +#X obj 1 640 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 643 library: ceammc v0.8.0; +#N canvas 10 662 400 290 info 0; +#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; +#X text 10 10 library:; +#X text 120 10 ceammc; +#X text 10 32 version:; +#X text 120 32 0.8.0; +#X text 10 54 object:; +#X text 120 54 math.sync_mul; +#X text 10 76 category:; +#X text 120 76 math; +#X text 10 98 since:; +#X text 120 98 0.8; +#X text 10 120 authors:; +#X text 120 120 Serge Poltavsky; +#X text 10 142 license:; +#X text 120 142 GPL3 or later; +#X text 10 164 keywords:; +#X text 120 164 math \, mul \, sync; +#X text 10 186 website:; +#X obj 120 189 ui.link @title https://github.com/uliss/pure-data @url +https://github.com/uliss/pure-data; +#X obj 120 208 declare -lib ceammc; +#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 120 268 generated by pddoc; +#X restore 10 662 pd info; +#X connect 10 0 11 0; +#X connect 6 0 12 0; +#X connect 7 0 12 1; +#X connect 9 0 13 0; +#X connect 11 0 13 0; +#X connect 11 1 13 1; +#X connect 12 0 14 0; +#X connect 13 0 15 0; +#X connect 16 0 18 0; +#X connect 17 0 18 0; +#X connect 18 0 19 0; \ No newline at end of file diff --git a/ceammc/ext/doc/math.sync_mul.pddoc b/ceammc/ext/doc/math.sync_mul.pddoc new file mode 100644 index 0000000000..ad27756f42 --- /dev/null +++ b/ceammc/ext/doc/math.sync_mul.pddoc @@ -0,0 +1,60 @@ + + + + math.sync_mul + + + Serge Poltavsky + + sync multiplication + GPL3 or later + ceammc + math + math mul sync + + math.*' + *' + + 0.8 + + + multiplicand + + + operate on integers only + + + + set multiplier, calculate and output result + pair: set multipliers and multiplicand, calculate and output + result + + + change multiplicand, calculate and output result + + + + multiplication result + + + + + + + + diff --git a/ceammc/ext/doc/math.sync_ne-help.pd b/ceammc/ext/doc/math.sync_ne-help.pd new file mode 100644 index 0000000000..33b74fce67 --- /dev/null +++ b/ceammc/ext/doc/math.sync_ne-help.pd @@ -0,0 +1,102 @@ +#N canvas 0 0 785 555 12; +#X declare -lib ceammc; +#X obj 537 50 cnv 1 228 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 537 50 sync numbers for not equality; +#X obj 1 1 cnv 5 765 40 empty empty math.sync_ne 20 20 0 20 -104026 +-4096 0; +#X obj 529 11 math.!='; +#X obj 610 11 !='; +#X obj 653 11 math.sync_ne; +#X floatatom 50 118 5 0 0 0 - - -; +#X floatatom 107 118 5 0 0 0 - - -; +#X text 165 118 same as:; +#X floatatom 290 118 5 0 0 0 - - -; +#X floatatom 338 118 5 0 0 0 - - -; +#X obj 338 147 t b f; +#X obj 50 176 !='; +#X obj 290 176 !=; +#X obj 50 205 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; +#X obj 290 205 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; +#X msg 50 234 100 101; +#X msg 174 234 100 100.1; +#X msg 290 234 100 99; +#X obj 50 277 !=' @epsilon 0.1; +#X obj 50 305 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; +#X obj 20 342 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 347 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +-49933 0; +#X text 110 382 1\.; +#X text 150 382 float; +#X obj 246 383 cnv 1 15 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 382 F: second number.; +#X obj 20 412 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 417 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 452 @epsilon; +#X text 245 452 Get/Set compare epsilon. If not zero calculates expession: +!(-epsilon < abs(A-B) < +epsilon). Type: float. Default value: 0\. +Min value: 0\.; +#X obj 20 519 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 524 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +0; +#X text 110 525 1\.; +#X text 150 525 *float*; +#X text 245 525 set first number \, calculate and output result.; +#X text 150 545 *list*; +#X text 245 545 pair: set first and second numbers \, calculate and +output result.; +#X text 110 580 2\.; +#X text 150 580 *float*; +#X text 245 580 change second number \, calculate and output result.; +#X obj 20 610 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 615 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 616 1\.; +#X text 245 616 result output: 1 if numbers are not equal otherwise +0\.; +#X obj 10 48 ui.link @title index @url ../index-help.pd; +#X text 51 45 ::; +#X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; +#X text 115 45 ::; +#X obj 131 48 ui.link @title math @url ceammc.math-help.pd; +#X obj 1 666 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 669 library: ceammc v0.8.0; +#X text 610 681 see also:; +#X obj 684 681 math.=='; +#N canvas 10 688 400 290 info 0; +#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; +#X text 10 10 library:; +#X text 120 10 ceammc; +#X text 10 32 version:; +#X text 120 32 0.8.0; +#X text 10 54 object:; +#X text 120 54 math.sync_ne; +#X text 10 76 category:; +#X text 120 76 math; +#X text 10 98 since:; +#X text 120 98 0.8; +#X text 10 120 authors:; +#X text 120 120 Serge Poltavsky; +#X text 10 142 license:; +#X text 120 142 GPL3 or later; +#X text 10 164 keywords:; +#X text 120 164 math \, sync \, not \, equal; +#X text 10 186 website:; +#X obj 120 189 ui.link @title https://github.com/uliss/pure-data @url +https://github.com/uliss/pure-data; +#X obj 120 208 declare -lib ceammc; +#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 120 268 generated by pddoc; +#X restore 10 688 pd info; +#X connect 10 0 11 0; +#X connect 6 0 12 0; +#X connect 7 0 12 1; +#X connect 9 0 13 0; +#X connect 11 0 13 0; +#X connect 11 1 13 1; +#X connect 12 0 14 0; +#X connect 13 0 15 0; +#X connect 16 0 19 0; +#X connect 17 0 19 0; +#X connect 18 0 19 0; +#X connect 19 0 20 0; \ No newline at end of file diff --git a/ceammc/ext/doc/math.sync_ne.pddoc b/ceammc/ext/doc/math.sync_ne.pddoc new file mode 100644 index 0000000000..1e0597e0b4 --- /dev/null +++ b/ceammc/ext/doc/math.sync_ne.pddoc @@ -0,0 +1,64 @@ + + + + math.sync_ne + + + Serge Poltavsky + + sync numbers for not equality + GPL3 or later + ceammc + math + math sync not equal + + math.!=' + !=' + + 0.8 + + math.==' + + + + second number + + + compare epsilon. If not + zero calculates expession: !(-epsilon < abs(A-B) < +epsilon) + + + + set first number, calculate and output result + pair: set first and second numbers, calculate and output + result + + + change second number, calculate and output result + + + + result output: 1 if numbers are not equal otherwise 0 + + + + + + + + diff --git a/ceammc/ext/doc/math.sync_or-help.pd b/ceammc/ext/doc/math.sync_or-help.pd new file mode 100644 index 0000000000..4b6bedf3ec --- /dev/null +++ b/ceammc/ext/doc/math.sync_or-help.pd @@ -0,0 +1,92 @@ +#N canvas 0 0 785 555 12; +#X declare -lib ceammc; +#X obj 569 50 cnv 1 196 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 569 50 sync logical OR operation; +#X obj 1 1 cnv 5 765 40 empty empty math.sync_or 20 20 0 20 -104026 +-4096 0; +#X obj 529 11 math.||'; +#X obj 610 11 ||'; +#X obj 652 11 math.sync_or; +#X obj 210 80 cnv 1 555 50 empty empty empty 17 7 0 10 -257983 -1 0; +#X text 215 80 Only 1 and 0 values are accepted. Any other number treat +as 1 \, but print error to console.; +#X obj 50 158 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; +#X obj 107 158 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; +#X text 165 158 same as:; +#X obj 290 158 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; +#X obj 338 158 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; +#X text 414 158 0 0 | 0; +#X obj 338 187 t b f; +#X text 414 187 0 1 | 1; +#X obj 50 216 ||'; +#X obj 290 216 ||; +#X text 414 216 1 0 | 1; +#X obj 50 245 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; +#X obj 290 245 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; +#X text 414 245 1 1 | 1; +#X obj 20 282 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 287 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +-49933 0; +#X text 110 322 1\.; +#X text 150 322 int; +#X obj 246 323 cnv 1 16 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 322 V: second value.; +#X obj 20 352 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 357 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +0; +#X text 110 358 1\.; +#X text 150 358 *float*; +#X text 245 358 set first value \, calculate and output result.; +#X text 150 378 *list*; +#X text 245 378 pair: set first and second values \, calculate and +output result.; +#X text 110 413 2\.; +#X text 150 413 *float*; +#X text 245 413 change second value \, calculate and output result.; +#X obj 20 443 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 448 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 449 1\.; +#X text 245 449 output 1 or 0 \, according logical OR operation.; +#X obj 10 48 ui.link @title index @url ../index-help.pd; +#X text 51 45 ::; +#X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; +#X text 115 45 ::; +#X obj 131 48 ui.link @title math @url ceammc.math-help.pd; +#X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 508 library: ceammc v0.8.0; +#X text 610 520 see also:; +#X obj 684 520 math.&&'; +#N canvas 10 527 400 290 info 0; +#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; +#X text 10 10 library:; +#X text 120 10 ceammc; +#X text 10 32 version:; +#X text 120 32 0.8.0; +#X text 10 54 object:; +#X text 120 54 math.sync_or; +#X text 10 76 category:; +#X text 120 76 math; +#X text 10 98 since:; +#X text 120 98 0.8; +#X text 10 120 authors:; +#X text 120 120 Serge Poltavsky; +#X text 10 142 license:; +#X text 120 142 GPL3 or later; +#X text 10 164 keywords:; +#X text 120 164 math \, sync \, logical \, or; +#X text 10 186 website:; +#X obj 120 189 ui.link @title https://github.com/uliss/pure-data @url +https://github.com/uliss/pure-data; +#X obj 120 208 declare -lib ceammc; +#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 120 268 generated by pddoc; +#X restore 10 527 pd info; +#X connect 12 0 14 0; +#X connect 8 0 16 0; +#X connect 9 0 16 1; +#X connect 11 0 17 0; +#X connect 14 0 17 0; +#X connect 14 1 17 1; +#X connect 16 0 19 0; +#X connect 17 0 20 0; \ No newline at end of file diff --git a/ceammc/ext/doc/math.sync_or.pddoc b/ceammc/ext/doc/math.sync_or.pddoc new file mode 100644 index 0000000000..6719f0bcf2 --- /dev/null +++ b/ceammc/ext/doc/math.sync_or.pddoc @@ -0,0 +1,57 @@ + + + + math.sync_or + + + Serge Poltavsky + + sync logical OR operation + GPL3 or later + ceammc + math + math sync logical or + + math.||' + ||' + + 0.8 + + math.&&' + + + + Only 1 and 0 values are accepted. Any other number treat as 1, but print error to + console. + + + second value + + + + set first value, calculate and output result + pair: set first and second values, calculate and output + result + + + change second value, calculate and output result + + + + output 1 or 0, according logical OR operation + + + + + + + + diff --git a/ceammc/ext/doc/math.sync_sub-help.pd b/ceammc/ext/doc/math.sync_sub-help.pd new file mode 100644 index 0000000000..c392a789df --- /dev/null +++ b/ceammc/ext/doc/math.sync_sub-help.pd @@ -0,0 +1,90 @@ +#N canvas 0 0 785 555 12; +#X declare -lib ceammc; +#X obj 637 50 cnv 1 128 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 637 50 sync subtraction; +#X obj 1 1 cnv 5 765 40 empty empty math.sync_sub 20 20 0 20 -104026 +-4096 0; +#X obj 529 11 math.-'; +#X obj 603 11 -'; +#X obj 645 11 math.sync_sub; +#X floatatom 50 118 5 0 0 0 - - -; +#X floatatom 107 118 5 0 0 0 - - -; +#X text 165 118 same as:; +#X floatatom 290 118 5 0 0 0 - - -; +#X floatatom 338 118 5 0 0 0 - - -; +#X obj 338 147 t b f; +#X obj 50 176 -'; +#X obj 290 176 -; +#X floatatom 50 205 5 0 0 0 - - -; +#X floatatom 290 205 5 0 0 0 - - -; +#X obj 20 244 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 249 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +-49933 0; +#X text 110 284 1\.; +#X text 150 284 float; +#X obj 246 285 cnv 1 15 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 284 F: subtrahend.; +#X obj 20 314 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 319 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 354 @int; +#X text 245 354 operate on integers only.; +#X obj 20 393 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 398 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +0; +#X text 110 399 1\.; +#X text 150 399 *float*; +#X text 245 399 set minuend \, calculate and output result.; +#X text 150 419 *list*; +#X text 245 419 pair: set minuend and subtrahend \, calculate and output +result.; +#X text 110 454 2\.; +#X text 150 454 *float*; +#X text 245 454 change subtrahend \, calculate and output result.; +#X obj 20 484 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 489 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 490 1\.; +#X text 245 490 difference output.; +#X obj 10 48 ui.link @title index @url ../index-help.pd; +#X text 51 45 ::; +#X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; +#X text 115 45 ::; +#X obj 131 48 ui.link @title math @url ceammc.math-help.pd; +#X obj 1 540 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 543 library: ceammc v0.8.0; +#X text 572 555 see also:; +#X obj 646 555 math.sync_add; +#N canvas 10 562 400 290 info 0; +#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; +#X text 10 10 library:; +#X text 120 10 ceammc; +#X text 10 32 version:; +#X text 120 32 0.8.0; +#X text 10 54 object:; +#X text 120 54 math.sync_sub; +#X text 10 76 category:; +#X text 120 76 math; +#X text 10 98 since:; +#X text 120 98 0.8; +#X text 10 120 authors:; +#X text 120 120 Serge Poltavsky; +#X text 10 142 license:; +#X text 120 142 GPL3 or later; +#X text 10 164 keywords:; +#X text 120 164 math \, sub \, sync; +#X text 10 186 website:; +#X obj 120 189 ui.link @title https://github.com/uliss/pure-data @url +https://github.com/uliss/pure-data; +#X obj 120 208 declare -lib ceammc; +#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 120 268 generated by pddoc; +#X restore 10 562 pd info; +#X connect 10 0 11 0; +#X connect 6 0 12 0; +#X connect 7 0 12 1; +#X connect 9 0 13 0; +#X connect 11 0 13 0; +#X connect 11 1 13 1; +#X connect 12 0 14 0; +#X connect 13 0 15 0; \ No newline at end of file diff --git a/ceammc/ext/doc/math.sync_sub.pddoc b/ceammc/ext/doc/math.sync_sub.pddoc new file mode 100644 index 0000000000..51434c2295 --- /dev/null +++ b/ceammc/ext/doc/math.sync_sub.pddoc @@ -0,0 +1,56 @@ + + + + math.sync_sub + + + Serge Poltavsky + + sync subtraction + GPL3 or later + ceammc + math + math sub sync + + math.-' + -' + + 0.8 + + math.sync_add + + + + subtrahend + + + operate on integers only + + + + set minuend, calculate and output result + pair: set minuend and subtrahend, calculate and output + result + + + change subtrahend, calculate and output result + + + + difference output + + + + + + + + diff --git a/ceammc/ext/doc/math.sync_xor-help.pd b/ceammc/ext/doc/math.sync_xor-help.pd new file mode 100644 index 0000000000..edcfc1ec03 --- /dev/null +++ b/ceammc/ext/doc/math.sync_xor-help.pd @@ -0,0 +1,81 @@ +#N canvas 0 0 785 555 12; +#X declare -lib ceammc; +#X obj 561 50 cnv 1 204 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 561 50 sync logical XOR operation; +#X obj 1 1 cnv 5 765 40 empty empty math.sync_xor 20 20 0 20 -104026 +-4096 0; +#X obj 529 11 math.^'; +#X obj 603 11 ^'; +#X obj 645 11 math.sync_xor; +#X obj 210 80 cnv 1 555 50 empty empty empty 17 7 0 10 -257983 -1 0; +#X text 215 80 Only 1 and 0 values are accepted. Any other number treat +as 1 \, but print error to console.; +#X obj 50 158 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; +#X obj 107 158 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; +#X text 165 158 0 0 | 0; +#X text 165 187 0 1 | 1; +#X obj 50 216 ^'; +#X text 165 216 1 0 | 1; +#X obj 50 245 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; +#X text 165 245 1 1 | 0; +#X obj 20 282 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 287 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +-49933 0; +#X text 110 322 1\.; +#X text 150 322 int; +#X obj 246 323 cnv 1 16 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 322 V: second value.; +#X obj 20 352 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 357 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +0; +#X text 110 358 1\.; +#X text 150 358 *float*; +#X text 245 358 set first value \, calculate and output result.; +#X text 150 378 *list*; +#X text 245 378 pair: set first and second values \, calculate and +output result.; +#X text 110 413 2\.; +#X text 150 413 *float*; +#X text 245 413 change second value \, calculate and output result.; +#X obj 20 443 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 448 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 449 1\.; +#X text 245 449 output 1 or 0 \, according logical XOR operation.; +#X obj 10 48 ui.link @title index @url ../index-help.pd; +#X text 51 45 ::; +#X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; +#X text 115 45 ::; +#X obj 131 48 ui.link @title math @url ceammc.math-help.pd; +#X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 508 library: ceammc v0.8.0; +#X text 610 520 see also:; +#X obj 684 520 math.||'; +#N canvas 10 527 400 290 info 0; +#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; +#X text 10 10 library:; +#X text 120 10 ceammc; +#X text 10 32 version:; +#X text 120 32 0.8.0; +#X text 10 54 object:; +#X text 120 54 math.sync_xor; +#X text 10 76 category:; +#X text 120 76 math; +#X text 10 98 since:; +#X text 120 98 0.8; +#X text 10 120 authors:; +#X text 120 120 Serge Poltavsky; +#X text 10 142 license:; +#X text 120 142 GPL3 or later; +#X text 10 164 keywords:; +#X text 120 164 math \, sync \, logical \, xor; +#X text 10 186 website:; +#X obj 120 189 ui.link @title https://github.com/uliss/pure-data @url +https://github.com/uliss/pure-data; +#X obj 120 208 declare -lib ceammc; +#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 120 268 generated by pddoc; +#X restore 10 527 pd info; +#X connect 8 0 12 0; +#X connect 9 0 12 1; +#X connect 12 0 14 0; \ No newline at end of file diff --git a/ceammc/ext/doc/math.sync_xor.pddoc b/ceammc/ext/doc/math.sync_xor.pddoc new file mode 100644 index 0000000000..7514439ebc --- /dev/null +++ b/ceammc/ext/doc/math.sync_xor.pddoc @@ -0,0 +1,57 @@ + + + + math.sync_xor + + + Serge Poltavsky + + sync logical XOR operation + GPL3 or later + ceammc + math + math sync logical xor + + math.^' + ^' + + 0.8 + + math.||' + + + + Only 1 and 0 values are accepted. Any other number treat as 1, but print error to + console. + + + second value + + + + set first value, calculate and output result + pair: set first and second values, calculate and output + result + + + change second value, calculate and output result + + + + output 1 or 0, according logical XOR operation + + + + + + + + diff --git a/ceammc/ext/doc/math.tan-help.pd b/ceammc/ext/doc/math.tan-help.pd index ad40441cfa..990a16251e 100644 --- a/ceammc/ext/doc/math.tan-help.pd +++ b/ceammc/ext/doc/math.tan-help.pd @@ -34,7 +34,7 @@ floating-point exception.; #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #X text 441 520 see also:; #X obj 515 520 math.acos; #X obj 595 520 math.asin; @@ -44,7 +44,7 @@ floating-point exception.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 math.tan; #X text 10 76 category:; @@ -54,7 +54,7 @@ floating-point exception.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 math \, tan; #X text 10 186 website:; diff --git a/ceammc/ext/doc/math.tan.pddoc b/ceammc/ext/doc/math.tan.pddoc index b0c00b1e78..8ee5a8bbb6 100644 --- a/ceammc/ext/doc/math.tan.pddoc +++ b/ceammc/ext/doc/math.tan.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky tangent function - GPL3 + GPL3 or later ceammc math math tan diff --git a/ceammc/ext/doc/math.tanh-help.pd b/ceammc/ext/doc/math.tanh-help.pd index 917ae7135f..33af33b419 100644 --- a/ceammc/ext/doc/math.tanh-help.pd +++ b/ceammc/ext/doc/math.tanh-help.pd @@ -33,7 +33,7 @@ of x.; #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #X text 441 520 see also:; #X obj 515 520 math.acos; #X obj 595 520 math.asin; @@ -43,7 +43,7 @@ of x.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 math.tanh; #X text 10 76 category:; @@ -53,7 +53,7 @@ of x.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 math \, tanh; #X text 10 186 website:; diff --git a/ceammc/ext/doc/math.tanh.pddoc b/ceammc/ext/doc/math.tanh.pddoc index 11f7b7d01f..d8b4573927 100644 --- a/ceammc/ext/doc/math.tanh.pddoc +++ b/ceammc/ext/doc/math.tanh.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky hyperbolic tangent function - GPL3 + GPL3 or later ceammc math math tanh diff --git a/ceammc/ext/doc/math.trunc-help.pd b/ceammc/ext/doc/math.trunc-help.pd index bfb5019ac2..b47bcd36c5 100644 --- a/ceammc/ext/doc/math.trunc-help.pd +++ b/ceammc/ext/doc/math.trunc-help.pd @@ -35,7 +35,7 @@ to but no larger in magnitude than x.; #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #X text 345 520 see also:; #X obj 419 520 math.ceil; #X obj 500 520 math.floor; @@ -46,7 +46,7 @@ to but no larger in magnitude than x.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 math.trunc; #X text 10 76 category:; @@ -56,7 +56,7 @@ to but no larger in magnitude than x.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 math \, trunc; #X text 10 186 website:; diff --git a/ceammc/ext/doc/math.trunc.pddoc b/ceammc/ext/doc/math.trunc.pddoc index 406d6d14e7..763a9a432d 100644 --- a/ceammc/ext/doc/math.trunc.pddoc +++ b/ceammc/ext/doc/math.trunc.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky truncate to integer value - GPL3 + GPL3 or later ceammc math math trunc diff --git a/ceammc/ext/doc/matrix~-help.pd b/ceammc/ext/doc/matrix~-help.pd index ec030d41a8..813f88a76c 100644 --- a/ceammc/ext/doc/matrix~-help.pd +++ b/ceammc/ext/doc/matrix~-help.pd @@ -72,13 +72,13 @@ Arguments are:; #X text 115 45 ::; #X obj 131 48 ui.link @title base @url ceammc.base-help.pd; #X obj 1 819 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 822 library: ceammc v0.7.1; +#X text 10 822 library: ceammc v0.8.0; #N canvas 10 841 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 matrix~; #X text 10 76 category:; @@ -88,7 +88,7 @@ Arguments are:; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 matrix; #X text 10 186 website:; diff --git a/ceammc/ext/doc/matrix~.pddoc b/ceammc/ext/doc/matrix~.pddoc index 19685095a8..f4ac1ffed2 100644 --- a/ceammc/ext/doc/matrix~.pddoc +++ b/ceammc/ext/doc/matrix~.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky signal routing matrix - GPL3 + GPL3 or later ceammc base matrix diff --git a/ceammc/ext/doc/metro.pattern-help.pd b/ceammc/ext/doc/metro.pattern-help.pd index 03daa11cd4..89b39179d6 100644 --- a/ceammc/ext/doc/metro.pattern-help.pd +++ b/ceammc/ext/doc/metro.pattern-help.pd @@ -54,7 +54,7 @@ Type: int. Default value: 0\. Allowed values: 0 \, 1\.; #X text 115 45 ::; #X obj 131 48 ui.link @title base @url ceammc.base-help.pd; #X obj 1 675 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 678 library: ceammc v0.7.1; +#X text 10 678 library: ceammc v0.8.0; #X text 549 690 see also:; #X obj 623 690 metro; #X obj 675 690 metro.seq; @@ -63,7 +63,7 @@ Type: int. Default value: 0\. Allowed values: 0 \, 1\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 metro.pattern; #X text 10 76 category:; @@ -73,7 +73,7 @@ Type: int. Default value: 0\. Allowed values: 0 \, 1\.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 metro \, pattern \, rhythm; #X text 10 186 website:; diff --git a/ceammc/ext/doc/metro.pattern.pddoc b/ceammc/ext/doc/metro.pattern.pddoc index 9ea3c0d34f..4cdfd96742 100644 --- a/ceammc/ext/doc/metro.pattern.pddoc +++ b/ceammc/ext/doc/metro.pattern.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky metro with rhythmic patterns - GPL3 + GPL3 or later ceammc base metro pattern rhythm diff --git a/ceammc/ext/doc/metro.seq-help.pd b/ceammc/ext/doc/metro.seq-help.pd index 537df3658a..8dcc20b640 100644 --- a/ceammc/ext/doc/metro.seq-help.pd +++ b/ceammc/ext/doc/metro.seq-help.pd @@ -8,7 +8,7 @@ #X obj 210 80 cnv 1 555 35 empty empty empty 17 7 0 10 -257983 -1 0; #X text 215 80 Easy way to build beat machines; #X msg 50 143 1 0 1 1 0 1 0 1; -#X obj 50 172 ui.radio @mode 1 @size 127 15; +#X obj 50 172 ui.radio @mode 1; #X obj 50 201 msg @pattern; #X obj 78 230 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; #X obj 50 259 metro.seq 100 1 0 0 1; @@ -55,7 +55,7 @@ on this beat. Type: list.; #X text 115 45 ::; #X obj 131 48 ui.link @title base @url ceammc.base-help.pd; #X obj 1 728 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 731 library: ceammc v0.7.1; +#X text 10 731 library: ceammc v0.8.0; #X text 520 743 see also:; #X obj 594 743 metro; #X obj 646 743 metro.pattern; @@ -64,7 +64,7 @@ on this beat. Type: list.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 metro.seq; #X text 10 76 category:; @@ -74,7 +74,7 @@ on this beat. Type: list.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 metro \, sequencer; #X text 10 186 website:; diff --git a/ceammc/ext/doc/metro.seq.pddoc b/ceammc/ext/doc/metro.seq.pddoc index 5d3f92a0e4..6dde928f45 100644 --- a/ceammc/ext/doc/metro.seq.pddoc +++ b/ceammc/ext/doc/metro.seq.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky metro sequencer - GPL3 + GPL3 or later ceammc base metro sequencer @@ -47,7 +47,7 @@ Serge Poltavsky convert Standard MIDI Controllers number to name - GPL3 + GPL3 or later ceammc midi midi controller name diff --git a/ceammc/ext/doc/midi.event2ctl-help.pd b/ceammc/ext/doc/midi.event2ctl-help.pd index ec0f9896a7..bb9eee5d64 100644 --- a/ceammc/ext/doc/midi.event2ctl-help.pd +++ b/ceammc/ext/doc/midi.event2ctl-help.pd @@ -36,13 +36,13 @@ pair; #X text 115 45 ::; #X obj 131 48 ui.link @title midi @url ceammc.midi-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #N canvas 10 527 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 midi.event2ctl; #X text 10 76 category:; @@ -52,7 +52,7 @@ pair; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 midi \, event \, control; #X text 10 186 website:; diff --git a/ceammc/ext/doc/midi.event2ctl.pddoc b/ceammc/ext/doc/midi.event2ctl.pddoc index a89107da25..355d62c958 100644 --- a/ceammc/ext/doc/midi.event2ctl.pddoc +++ b/ceammc/ext/doc/midi.event2ctl.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky convert MidiEvent message to controller channel/value pair - GPL3 + GPL3 or later ceammc midi midi event control diff --git a/ceammc/ext/doc/midi.event2note-help.pd b/ceammc/ext/doc/midi.event2note-help.pd index 10d9ceb9f5..1494545ebe 100644 --- a/ceammc/ext/doc/midi.event2note-help.pd +++ b/ceammc/ext/doc/midi.event2note-help.pd @@ -37,13 +37,13 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title midi @url ceammc.midi-help.pd; #X obj 1 520 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 523 library: ceammc v0.7.1; +#X text 10 523 library: ceammc v0.8.0; #N canvas 10 542 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 midi.event2note; #X text 10 76 category:; @@ -53,7 +53,7 @@ #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 midi \, track; #X text 10 186 website:; diff --git a/ceammc/ext/doc/midi.event2note.pddoc b/ceammc/ext/doc/midi.event2note.pddoc index 0905ea9bba..8b24a645bd 100644 --- a/ceammc/ext/doc/midi.event2note.pddoc +++ b/ceammc/ext/doc/midi.event2note.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky convert MidiEvent message to midi note/velocity pair - GPL3 + GPL3 or later ceammc midi midi track diff --git a/ceammc/ext/doc/midi.event2prg-help.pd b/ceammc/ext/doc/midi.event2prg-help.pd index 4bf49ab52b..7639ad046d 100644 --- a/ceammc/ext/doc/midi.event2prg-help.pd +++ b/ceammc/ext/doc/midi.event2prg-help.pd @@ -34,13 +34,13 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title midi @url ceammc.midi-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #N canvas 10 527 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 midi.event2prg; #X text 10 76 category:; @@ -50,7 +50,7 @@ #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 midi \, program; #X text 10 186 website:; diff --git a/ceammc/ext/doc/midi.event2prg.pddoc b/ceammc/ext/doc/midi.event2prg.pddoc index 464d7d37d6..0b2ebc3f8d 100644 --- a/ceammc/ext/doc/midi.event2prg.pddoc +++ b/ceammc/ext/doc/midi.event2prg.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky convert MidiEvent message to midi program change value - GPL3 + GPL3 or later ceammc midi midi program diff --git a/ceammc/ext/doc/midi.file-help.pd b/ceammc/ext/doc/midi.file-help.pd index 3ada685611..88fb39a451 100644 --- a/ceammc/ext/doc/midi.file-help.pd +++ b/ceammc/ext/doc/midi.file-help.pd @@ -62,13 +62,13 @@ float.; #X text 115 45 ::; #X obj 131 48 ui.link @title midi @url ceammc.midi-help.pd; #X obj 1 921 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 924 library: ceammc v0.7.1; +#X text 10 924 library: ceammc v0.8.0; #N canvas 10 943 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 midi.file; #X text 10 76 category:; @@ -78,7 +78,7 @@ float.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 midi \, file; #X text 10 186 website:; diff --git a/ceammc/ext/doc/midi.file.pddoc b/ceammc/ext/doc/midi.file.pddoc index 0f72ba275b..323127a7e5 100644 --- a/ceammc/ext/doc/midi.file.pddoc +++ b/ceammc/ext/doc/midi.file.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky standard midi file SMF reader and writer - GPL3 + GPL3 or later ceammc midi midi file diff --git a/ceammc/ext/doc/midi.key2str-help.pd b/ceammc/ext/doc/midi.key2str-help.pd index be89055ac9..61718378bf 100644 --- a/ceammc/ext/doc/midi.key2str-help.pd +++ b/ceammc/ext/doc/midi.key2str-help.pd @@ -38,13 +38,13 @@ C major.; #X text 115 45 ::; #X obj 131 48 ui.link @title midi @url ceammc.midi-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #N canvas 10 527 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 midi.key2str; #X text 10 76 category:; @@ -54,7 +54,7 @@ C major.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 midi \, key \, name; #X text 10 186 website:; diff --git a/ceammc/ext/doc/midi.key2str.pddoc b/ceammc/ext/doc/midi.key2str.pddoc index 0d807c6873..6f5e3ee65e 100644 --- a/ceammc/ext/doc/midi.key2str.pddoc +++ b/ceammc/ext/doc/midi.key2str.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky convert key number to SPN name according to tonality - GPL3 + GPL3 or later ceammc midi midi key name diff --git a/ceammc/ext/doc/midi.prg2str-help.pd b/ceammc/ext/doc/midi.prg2str-help.pd index 274ba24171..a01238cd5c 100644 --- a/ceammc/ext/doc/midi.prg2str-help.pd +++ b/ceammc/ext/doc/midi.prg2str-help.pd @@ -39,13 +39,13 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title midi @url ceammc.midi-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #N canvas 10 527 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 midi.prg2str; #X text 10 76 category:; @@ -55,7 +55,7 @@ #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 midi \, convert \, midi; #X text 10 186 website:; diff --git a/ceammc/ext/doc/midi.prg2str.pddoc b/ceammc/ext/doc/midi.prg2str.pddoc index 54422cae26..2963f32276 100644 --- a/ceammc/ext/doc/midi.prg2str.pddoc +++ b/ceammc/ext/doc/midi.prg2str.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky convert GM Instrument number to name (string or symbol) - GPL3 + GPL3 or later ceammc midi midi convert midi diff --git a/ceammc/ext/doc/midi.track-help.pd b/ceammc/ext/doc/midi.track-help.pd index c950cc5bdf..85069f5b8e 100644 --- a/ceammc/ext/doc/midi.track-help.pd +++ b/ceammc/ext/doc/midi.track-help.pd @@ -61,13 +61,13 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title midi @url ceammc.midi-help.pd; #X obj 1 923 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 926 library: ceammc v0.7.1; +#X text 10 926 library: ceammc v0.8.0; #N canvas 10 945 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 midi.track; #X text 10 76 category:; @@ -77,7 +77,7 @@ #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 midi \, track; #X text 10 186 website:; diff --git a/ceammc/ext/doc/midi.track.pddoc b/ceammc/ext/doc/midi.track.pddoc index 2643a797dc..4fc95489df 100644 --- a/ceammc/ext/doc/midi.track.pddoc +++ b/ceammc/ext/doc/midi.track.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky extract track from MidiFile - GPL3 + GPL3 or later ceammc midi midi track diff --git a/ceammc/ext/doc/mix~-help.pd b/ceammc/ext/doc/mix~-help.pd index 0d561ffd4c..098ed1cc75 100644 --- a/ceammc/ext/doc/mix~-help.pd +++ b/ceammc/ext/doc/mix~-help.pd @@ -4,88 +4,90 @@ #X text 590 50 multislot signal mixer; #X obj 1 1 cnv 5 765 40 empty empty mix~ 20 20 0 20 -104026 -4096 0; #X obj 710 11 mix~; -#X obj 50 118 ui.sliders @count 4 @size 150 100; +#X obj 50 118 ui.sliders @count 4; #X obj 299 118 ui.dsp~; -#X obj 501 205 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; +#X obj 462 205 ui.radio @nitems 4 @mode 1; +#X obj 597 205 ui.radio @nitems 4 @mode 1; #X obj 78 234 osc~ 200; -#X obj 184 234 osc~ 400; -#X obj 290 234 osc~ 600; -#X obj 395 234 osc~ 800; -#X msg 501 234 mute 0 \$1; -#X obj 50 262 mix~ 4; -#X obj 50 291 ui.gain~ @size 120 16; -#X obj 50 320 dac~; -#X obj 20 359 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 364 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +#X obj 174 234 osc~ 400; +#X obj 270 234 osc~ 600; +#X obj 366 234 osc~ 800; +#X obj 462 234 msg @mute; +#X obj 597 234 msg @solo; +#X obj 50 277 mix~ 4; +#X obj 50 305 ui.gain~ @size 120 16; +#X obj 50 334 dac~; +#X obj 20 373 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 378 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 -49933 0; -#X text 110 399 1\.; -#X text 150 399 int; -#X obj 246 400 cnv 1 17 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 399 N: number of inputs. Range: 2\...16; -#X obj 20 429 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 434 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +#X text 110 413 1\.; +#X text 150 413 int; +#X obj 246 414 cnv 1 17 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 413 N: number of inputs. Range: 2\...16; +#X obj 20 443 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 448 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; -#X msg 110 469 @db; -#X text 245 469 Get/Set amplitude values in decibels. Type: list. Units: +#X msg 110 483 @db; +#X text 245 483 Get/Set amplitude values in decibels. Type: list. Units: db. Min value: -144\.; -#X msg 110 511 @mute; -#X text 245 511 Get/Set mute channel list. Type: list. Allowed values: +#X msg 110 525 @mute; +#X text 245 525 Get/Set mute channel list. Type: list. Allowed values: 0 \, 1\.; -#X msg 110 540 @solo; -#X text 245 540 Get/Set solo channel list. Type: list. Allowed values: +#X msg 110 554 @solo; +#X text 245 554 Get/Set solo channel list. Type: list. Allowed values: 0 \, 1\.; -#X msg 110 569 @value; -#X text 245 569 Get/Set linear amplitude values. Type: list. Min value: +#X msg 110 583 @value; +#X text 245 583 Get/Set linear amplitude values. Type: list. Min value: 0\.; -#X msg 110 598 @xfade_time; -#X text 245 598 Get/Set smooth time. Type: float. Units: ms. Default +#X msg 110 612 @xfade_time; +#X text 245 612 Get/Set smooth time. Type: float. Units: ms. Default value: 20\. Min value: 1\.; -#X obj 20 650 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 655 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 664 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 669 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 690 mute; -#X text 245 690 mute specified channel. Arguments are:; -#X obj 255 713 cnv 1 21 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 713 CH: channel index (from 0). Type: int. Min value: 0\.; -#X obj 255 736 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 736 VAL: 1 - mute \, 0 - unmute. Type: int. Allowed values: +#X msg 110 704 mute; +#X text 245 704 mute specified channel. Arguments are:; +#X obj 255 727 cnv 1 21 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 727 CH: channel index (from 0). Type: int. Min value: 0\.; +#X obj 255 750 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 750 VAL: 1 - mute \, 0 - unmute. Type: int. Allowed values: 0 \, 1\.; -#X msg 110 761 solo; -#X text 245 761 solo (mute all others that not solo) specified channel. +#X msg 110 775 solo; +#X text 245 775 solo (mute all others that not solo) specified channel. Arguments are:; -#X obj 255 799 cnv 1 21 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 799 CH: channel index (from 0). Type: int. Min value: 0\.; -#X obj 255 822 cnv 1 39 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 822 [VAL]: 1 - enable solo \, 0 - disable solo. Type: int. +#X obj 255 813 cnv 1 21 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 813 CH: channel index (from 0). Type: int. Min value: 0\.; +#X obj 255 836 cnv 1 39 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 836 [VAL]: 1 - enable solo \, 0 - disable solo. Type: int. Allowed values: 0 \, 1\.; -#X obj 20 872 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 877 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X obj 20 886 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 891 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 878 1\.; -#X text 245 878 input signal.; -#X text 110 898 ....; -#X text 245 898 input signal.; -#X text 110 918 n.; -#X text 150 918 *float*; -#X text 245 918 input signal.; -#X obj 20 948 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 953 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 892 1\.; +#X text 245 892 input signal.; +#X text 110 912 ....; +#X text 245 912 input signal.; +#X text 110 932 n.; +#X text 150 932 *float*; +#X text 245 932 input signal.; +#X obj 20 962 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 967 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 954 1\.; -#X text 245 954 output mixed signal.; +#X text 110 968 1\.; +#X text 245 968 output mixed signal.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title base @url ceammc.base-help.pd; -#X obj 1 1004 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1007 library: ceammc v0.7.1; -#N canvas 10 1026 400 290 info 0; +#X obj 1 1018 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1021 library: ceammc v0.8.0; +#N canvas 10 1040 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 mix~; #X text 10 76 category:; @@ -95,7 +97,7 @@ Allowed values: 0 \, 1\.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 mix \, amplitude \, decibel; #X text 10 186 website:; @@ -104,14 +106,16 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1026 pd info; -#X connect 6 0 11 0; -#X connect 4 0 12 0; -#X connect 7 0 12 0; -#X connect 8 0 12 1; -#X connect 9 0 12 2; -#X connect 10 0 12 3; -#X connect 11 0 12 0; -#X connect 12 0 13 0; +#X restore 10 1040 pd info; +#X connect 6 0 12 0; +#X connect 7 0 13 0; +#X connect 4 0 14 0; +#X connect 8 0 14 0; +#X connect 9 0 14 1; +#X connect 10 0 14 2; +#X connect 11 0 14 3; +#X connect 12 0 14 0; #X connect 13 0 14 0; -#X connect 13 0 14 1; \ No newline at end of file +#X connect 14 0 15 0; +#X connect 15 0 16 0; +#X connect 15 0 16 1; \ No newline at end of file diff --git a/ceammc/ext/doc/mix~.pddoc b/ceammc/ext/doc/mix~.pddoc index bbc1e2def2..10bc06297f 100644 --- a/ceammc/ext/doc/mix~.pddoc +++ b/ceammc/ext/doc/mix~.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky multislot signal mixer - GPL3 + GPL3 or later ceammc base mix amplitude decibel @@ -52,21 +52,29 @@ diff --git a/ceammc/ext/doc/mlist.flatten-help.pd b/ceammc/ext/doc/mlist.flatten-help.pd index 3184fb2c33..2f68bf0401 100644 --- a/ceammc/ext/doc/mlist.flatten-help.pd +++ b/ceammc/ext/doc/mlist.flatten-help.pd @@ -26,7 +26,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title data @url ceammc.data-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #X text 594 520 see also:; #X obj 668 520 data.mlist; #N canvas 10 527 400 290 info 0; @@ -34,7 +34,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 mlist.flatten; #X text 10 76 category:; @@ -44,7 +44,7 @@ #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 flatten \, list; #X text 10 186 website:; diff --git a/ceammc/ext/doc/mlist.flatten.pddoc b/ceammc/ext/doc/mlist.flatten.pddoc index 139cbef250..d48c21ac33 100644 --- a/ceammc/ext/doc/mlist.flatten.pddoc +++ b/ceammc/ext/doc/mlist.flatten.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky flatten nested mlist - GPL3 + GPL3 or later ceammc data flatten list diff --git a/ceammc/ext/doc/modplug~-help.pd b/ceammc/ext/doc/modplug~-help.pd index 6f23e03b0f..cfa4dd73ce 100644 --- a/ceammc/ext/doc/modplug~-help.pd +++ b/ceammc/ext/doc/modplug~-help.pd @@ -69,13 +69,13 @@ Default value: 0\. Range: 0\...1\.; #X text 115 45 ::; #X obj 131 48 ui.link @title misc @url ceammc.misc-help.pd; #X obj 1 849 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 852 library: ceammc v0.7.1; +#X text 10 852 library: ceammc v0.8.0; #N canvas 10 871 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 modplug~; #X text 10 76 category:; @@ -85,7 +85,7 @@ Default value: 0\. Range: 0\...1\.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 mod \, player; #X text 10 186 website:; diff --git a/ceammc/ext/doc/modplug~.pddoc b/ceammc/ext/doc/modplug~.pddoc index cad1ff4a4f..58f96e17f5 100644 --- a/ceammc/ext/doc/modplug~.pddoc +++ b/ceammc/ext/doc/modplug~.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky MOD file player (using libmodplug) - GPL3 + GPL3 or later ceammc misc mod player diff --git a/ceammc/ext/doc/msg-help.pd b/ceammc/ext/doc/msg-help.pd index b7e6f73904..8194e92a1f 100644 --- a/ceammc/ext/doc/msg-help.pd +++ b/ceammc/ext/doc/msg-help.pd @@ -92,13 +92,13 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title msg @url ceammc.msg-help.pd; #X obj 1 858 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 861 library: ceammc v0.7.1; +#X text 10 861 library: ceammc v0.8.0; #N canvas 10 880 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 msg; #X text 10 76 category:; @@ -108,7 +108,7 @@ #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 msg \, message; #X text 10 186 website:; diff --git a/ceammc/ext/doc/msg.after-help.pd b/ceammc/ext/doc/msg.after-help.pd index 5f0ec23df9..6f9295c14a 100644 --- a/ceammc/ext/doc/msg.after-help.pd +++ b/ceammc/ext/doc/msg.after-help.pd @@ -46,7 +46,7 @@ is not send \, the delayed message is resetted; #X text 115 45 ::; #X obj 131 48 ui.link @title msg @url ceammc.msg-help.pd; #X obj 1 543 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 546 library: ceammc v0.7.1; +#X text 10 546 library: ceammc v0.8.0; #X text 644 558 see also:; #X obj 718 558 msg; #N canvas 10 565 400 290 info 0; @@ -54,7 +54,7 @@ is not send \, the delayed message is resetted; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 msg.after; #X text 10 76 category:; @@ -64,7 +64,7 @@ is not send \, the delayed message is resetted; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 message \, after \, onload; #X text 10 186 website:; diff --git a/ceammc/ext/doc/msg.after.pddoc b/ceammc/ext/doc/msg.after.pddoc index 27bbd1afcf..add099f98d 100644 --- a/ceammc/ext/doc/msg.after.pddoc +++ b/ceammc/ext/doc/msg.after.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky send specified message after incoming message - GPL3 + GPL3 or later ceammc msg message after onload diff --git a/ceammc/ext/doc/msg.onload-help.pd b/ceammc/ext/doc/msg.onload-help.pd index 5e80d11aad..ff34750d03 100644 --- a/ceammc/ext/doc/msg.onload-help.pd +++ b/ceammc/ext/doc/msg.onload-help.pd @@ -14,35 +14,35 @@ #X obj 50 240 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 -1; #X obj 88 240 print; -#X obj 165 240 ui.d; -#X obj 20 279 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 284 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +#X obj 165 240 ui.display @display_type 1 @size 150 18; +#X obj 20 280 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 285 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 -49933 0; -#X text 110 319 1\.; -#X text 150 319 list; -#X obj 246 320 cnv 1 40 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 319 ARGS: message.; -#X obj 20 349 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 354 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X text 110 320 1\.; +#X text 150 320 list; +#X obj 246 321 cnv 1 40 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 320 ARGS: message.; +#X obj 20 350 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 355 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X obj 20 375 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 380 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X obj 20 376 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 381 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 381 1\.; -#X text 245 381 message output.; +#X text 110 382 1\.; +#X text 245 382 message output.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title msg @url ceammc.msg-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #N canvas 10 527 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 msg.onload; #X text 10 76 category:; @@ -52,7 +52,7 @@ #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 message \, loadbang \, onload; #X text 10 186 website:; diff --git a/ceammc/ext/doc/msg.onload.pddoc b/ceammc/ext/doc/msg.onload.pddoc index 964aeeba4c..59acd437e0 100644 --- a/ceammc/ext/doc/msg.onload.pddoc +++ b/ceammc/ext/doc/msg.onload.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky send message when patch loads - GPL3 + GPL3 or later ceammc msg message loadbang onload @@ -39,7 +39,7 @@ [loadmsg load message] | | | | | | -[B] [print] [ui.d] +[B] [print] [ui.display @display_type=1] ]]> diff --git a/ceammc/ext/doc/msg.pddoc b/ceammc/ext/doc/msg.pddoc index eed4868cd5..9fbd658d15 100644 --- a/ceammc/ext/doc/msg.pddoc +++ b/ceammc/ext/doc/msg.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky message constructor - GPL3 + GPL3 or later ceammc msg msg message diff --git a/ceammc/ext/doc/net.host2ip-help.pd b/ceammc/ext/doc/net.host2ip-help.pd index c46518edd5..0e9e8a13a9 100644 --- a/ceammc/ext/doc/net.host2ip-help.pd +++ b/ceammc/ext/doc/net.host2ip-help.pd @@ -39,13 +39,13 @@ ipv4\. Allowed values: ipv4 \, ipv6\.; #X text 115 45 ::; #X obj 131 48 ui.link @title net @url ceammc.net-help.pd; #X obj 1 520 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 523 library: ceammc v0.7.1; +#X text 10 523 library: ceammc v0.8.0; #N canvas 10 542 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 net.host2ip; #X text 10 76 category:; @@ -55,7 +55,7 @@ ipv4\. Allowed values: ipv4 \, ipv6\.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 net \, dns \, ip; #X text 10 186 website:; diff --git a/ceammc/ext/doc/net.host2ip.pddoc b/ceammc/ext/doc/net.host2ip.pddoc index df510632f7..e207f9ab02 100644 --- a/ceammc/ext/doc/net.host2ip.pddoc +++ b/ceammc/ext/doc/net.host2ip.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky returns IP address by DNS name - GPL3 + GPL3 or later ceammc net net dns ip diff --git a/ceammc/ext/doc/noise.crackle~-help.pd b/ceammc/ext/doc/noise.crackle~-help.pd index 57431697e1..904d477cb8 100644 --- a/ceammc/ext/doc/noise.crackle~-help.pd +++ b/ceammc/ext/doc/noise.crackle~-help.pd @@ -24,33 +24,36 @@ at an average rate of @freq impulses per second; #X obj 20 383 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 388 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; -#X msg 110 423 @freq; -#X text 245 423 Get/Set average frequency of noise impulses per second. +#X msg 110 423 @active; +#X text 245 423 Get/Set on/off dsp processing. Type: int. Default value: +1\. Allowed values: 0 \, 1\.; +#X msg 110 465 @freq; +#X text 245 465 Get/Set average frequency of noise impulses per second. Type: float. Default value: 10\. Range: 0\...100\.; -#X obj 20 475 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 480 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X obj 20 517 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 522 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 481 1\.; -#X text 150 481 *float*; -#X text 245 481 set average frequency.; -#X obj 20 511 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 516 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 523 1\.; +#X text 150 523 *float*; +#X text 245 523 set average frequency.; +#X obj 20 553 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 558 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 517 1\.; -#X text 245 517 output signal.; +#X text 110 559 1\.; +#X text 245 559 output signal.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title noise @url ceammc.noise-help.pd; -#X obj 1 567 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 570 library: ceammc v0.7.1; -#N canvas 10 589 400 290 info 0; +#X obj 1 609 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 612 library: ceammc v0.8.0; +#N canvas 10 631 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 noise.crackle~; #X text 10 76 category:; @@ -60,7 +63,7 @@ Type: float. Default value: 10\. Range: 0\...100\.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 noise \, crackle; #X text 10 186 website:; @@ -69,7 +72,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 589 pd info; +#X restore 10 631 pd info; #X connect 6 0 8 0; #X connect 7 0 8 0; #X connect 8 0 9 0; diff --git a/ceammc/ext/doc/noise.crackle~.pddoc b/ceammc/ext/doc/noise.crackle~.pddoc index 9ca1aadff7..1399a7e28d 100644 --- a/ceammc/ext/doc/noise.crackle~.pddoc +++ b/ceammc/ext/doc/noise.crackle~.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky sparse noise generator - GPL3 + GPL3 or later ceammc noise noise crackle @@ -24,6 +24,8 @@ average frequency of noise impulses per second + on/off dsp + processing diff --git a/ceammc/ext/doc/noise.lfreq0~-help.pd b/ceammc/ext/doc/noise.lfreq0~-help.pd index 28961541e2..618b53b69d 100644 --- a/ceammc/ext/doc/noise.lfreq0~-help.pd +++ b/ceammc/ext/doc/noise.lfreq0~-help.pd @@ -24,35 +24,38 @@ #X obj 20 497 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 502 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; -#X msg 110 537 @freq; -#X text 245 537 Get/Set noise generation freq. New random number every +#X msg 110 537 @active; +#X text 245 537 Get/Set on/off dsp processing. Type: int. Default value: +1\. Allowed values: 0 \, 1\.; +#X msg 110 579 @freq; +#X text 245 579 Get/Set noise generation freq. New random number every int(SR/freq). Type: float. Default value: 1000\. Range: 5\...22050\.; -#X obj 20 604 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 609 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X obj 20 646 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 651 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 610 1\.; -#X text 150 610 *float*; -#X text 245 610 set average frequency.; -#X obj 20 640 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 645 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 652 1\.; +#X text 150 652 *float*; +#X text 245 652 set average frequency.; +#X obj 20 682 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 687 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 646 1\.; -#X text 245 646 output signal.; +#X text 110 688 1\.; +#X text 245 688 output signal.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title noise @url ceammc.noise-help.pd; -#X obj 1 696 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 699 library: ceammc v0.7.1; -#X text 579 711 see also:; -#X obj 653 711 noise.lfreq~; -#N canvas 10 718 400 290 info 0; +#X obj 1 738 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 741 library: ceammc v0.8.0; +#X text 579 753 see also:; +#X obj 653 753 noise.lfreq~; +#N canvas 10 760 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 noise.lfreq0~; #X text 10 76 category:; @@ -62,7 +65,7 @@ int(SR/freq). Type: float. Default value: 1000\. Range: 5\...22050\.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 noise \, white; #X text 10 186 website:; @@ -71,7 +74,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 718 pd info; +#X restore 10 760 pd info; #X connect 6 0 8 0; #X connect 7 0 8 0; #X connect 8 0 9 0; diff --git a/ceammc/ext/doc/noise.lfreq0~.pddoc b/ceammc/ext/doc/noise.lfreq0~.pddoc index 5b52133f61..d6e74c6c2f 100644 --- a/ceammc/ext/doc/noise.lfreq0~.pddoc +++ b/ceammc/ext/doc/noise.lfreq0~.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky sampled/held noise (piecewise constant) - GPL3 + GPL3 or later ceammc noise noise white @@ -25,6 +25,8 @@ noise generation freq. New random number every int(SR/freq) + on/off dsp + processing diff --git a/ceammc/ext/doc/noise.lfreq~-help.pd b/ceammc/ext/doc/noise.lfreq~-help.pd index 52cbace924..60b7c017d7 100644 --- a/ceammc/ext/doc/noise.lfreq~-help.pd +++ b/ceammc/ext/doc/noise.lfreq~-help.pd @@ -22,35 +22,38 @@ #X obj 20 472 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 477 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; -#X msg 110 512 @freq; -#X text 245 512 Get/Set noise generation freq. Type: float. Default +#X msg 110 512 @active; +#X text 245 512 Get/Set on/off dsp processing. Type: int. Default value: +1\. Allowed values: 0 \, 1\.; +#X msg 110 554 @freq; +#X text 245 554 Get/Set noise generation freq. Type: float. Default value: 1000\. Range: 5\...22050\.; -#X obj 20 564 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 569 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X obj 20 606 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 611 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 570 1\.; -#X text 150 570 *float*; -#X text 245 570 set average frequency.; -#X obj 20 600 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 605 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 612 1\.; +#X text 150 612 *float*; +#X text 245 612 set average frequency.; +#X obj 20 642 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 647 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 606 1\.; -#X text 245 606 output signal.; +#X text 110 648 1\.; +#X text 245 648 output signal.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title noise @url ceammc.noise-help.pd; -#X obj 1 656 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 659 library: ceammc v0.7.1; -#X text 571 671 see also:; -#X obj 645 671 noise.lfreq0~; -#N canvas 10 678 400 290 info 0; +#X obj 1 698 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 701 library: ceammc v0.8.0; +#X text 571 713 see also:; +#X obj 645 713 noise.lfreq0~; +#N canvas 10 720 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 noise.lfreq~; #X text 10 76 category:; @@ -60,7 +63,7 @@ value: 1000\. Range: 5\...22050\.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 noise \, lfreq; #X text 10 186 website:; @@ -69,7 +72,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 678 pd info; +#X restore 10 720 pd info; #X connect 4 0 6 0; #X connect 5 0 6 0; #X connect 6 0 7 0; diff --git a/ceammc/ext/doc/noise.lfreq~.pddoc b/ceammc/ext/doc/noise.lfreq~.pddoc index 50f68cfe0d..60fa967daf 100644 --- a/ceammc/ext/doc/noise.lfreq~.pddoc +++ b/ceammc/ext/doc/noise.lfreq~.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky noise.lfreq0~ smoothed with no overshoot - GPL3 + GPL3 or later ceammc noise noise lfreq @@ -22,6 +22,8 @@ noise generation freq + on/off dsp + processing diff --git a/ceammc/ext/doc/noise.pink~-help.pd b/ceammc/ext/doc/noise.pink~-help.pd index 24bc3870af..f4fa02be88 100644 --- a/ceammc/ext/doc/noise.pink~-help.pd +++ b/ceammc/ext/doc/noise.pink~-help.pd @@ -28,7 +28,7 @@ light with this power spectrum.; #X text 115 45 ::; #X obj 131 48 ui.link @title noise @url ceammc.noise-help.pd; #X obj 1 547 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 550 library: ceammc v0.7.1; +#X text 10 550 library: ceammc v0.8.0; #X text 579 562 see also:; #X obj 653 562 noise.white~; #N canvas 10 569 400 290 info 0; @@ -36,7 +36,7 @@ light with this power spectrum.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 noise.pink~; #X text 10 76 category:; @@ -46,7 +46,7 @@ light with this power spectrum.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 noise \, pink; #X text 10 186 website:; diff --git a/ceammc/ext/doc/noise.pink~.pddoc b/ceammc/ext/doc/noise.pink~.pddoc index c5b597252b..e302783d20 100644 --- a/ceammc/ext/doc/noise.pink~.pddoc +++ b/ceammc/ext/doc/noise.pink~.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky Pink noise generator - GPL3 + GPL3 or later ceammc noise noise pink diff --git a/ceammc/ext/doc/noise.white~-help.pd b/ceammc/ext/doc/noise.white~-help.pd index f819105931..f9049df50b 100644 --- a/ceammc/ext/doc/noise.white~-help.pd +++ b/ceammc/ext/doc/noise.white~-help.pd @@ -21,7 +21,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title noise @url ceammc.noise-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #X text 586 520 see also:; #X obj 660 520 noise.pink~; #N canvas 10 527 400 290 info 0; @@ -29,7 +29,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 noise.white~; #X text 10 76 category:; @@ -39,7 +39,7 @@ #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 noise \, white; #X text 10 186 website:; diff --git a/ceammc/ext/doc/noise.white~.pddoc b/ceammc/ext/doc/noise.white~.pddoc index 1a5bd86cc9..26565250ad 100644 --- a/ceammc/ext/doc/noise.white~.pddoc +++ b/ceammc/ext/doc/noise.white~.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky White noise generator - GPL3 + GPL3 or later ceammc noise noise white diff --git a/ceammc/ext/doc/obj.props-help.pd b/ceammc/ext/doc/obj.props-help.pd index 5e1f77696c..7f2cacd298 100644 --- a/ceammc/ext/doc/obj.props-help.pd +++ b/ceammc/ext/doc/obj.props-help.pd @@ -33,13 +33,13 @@ outlet; #X text 115 45 ::; #X obj 131 48 ui.link @title base @url ceammc.base-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #N canvas 10 527 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 obj.props; #X text 10 76 category:; @@ -49,7 +49,7 @@ outlet; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 property; #X text 10 186 website:; diff --git a/ceammc/ext/doc/obj.props.pddoc b/ceammc/ext/doc/obj.props.pddoc index eef2965ffa..cd1b4e867a 100644 --- a/ceammc/ext/doc/obj.props.pddoc +++ b/ceammc/ext/doc/obj.props.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky property extractor - GPL3 + GPL3 or later ceammc base property diff --git a/ceammc/ext/doc/osc.blit~-help.pd b/ceammc/ext/doc/osc.blit~-help.pd index c66b08e29f..22a34c5536 100644 --- a/ceammc/ext/doc/osc.blit~-help.pd +++ b/ceammc/ext/doc/osc.blit~-help.pd @@ -50,7 +50,7 @@ harmonics until SR/2\. Type: int. Default value: 0\. Min value: 0\.; #X text 115 45 ::; #X obj 131 48 ui.link @title osc @url ceammc.osc-help.pd; #X obj 1 686 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 689 library: ceammc v0.7.1; +#X text 10 689 library: ceammc v0.8.0; #X text 511 701 see also:; #X obj 585 701 osc.saw~; #X obj 659 701 osc.square~; @@ -59,7 +59,7 @@ harmonics until SR/2\. Type: int. Default value: 0\. Min value: 0\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 osc.blit~; #X text 10 76 category:; @@ -69,7 +69,7 @@ harmonics until SR/2\. Type: int. Default value: 0\. Min value: 0\.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 oscillator \, band-limited; #X text 10 186 website:; diff --git a/ceammc/ext/doc/osc.blit~.pddoc b/ceammc/ext/doc/osc.blit~.pddoc index 800a1df443..fde639454b 100644 --- a/ceammc/ext/doc/osc.blit~.pddoc +++ b/ceammc/ext/doc/osc.blit~.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky Bandlimited impulse train oscillator - GPL3 + GPL3 or later ceammc osc oscillator band-limited diff --git a/ceammc/ext/doc/osc.impulse~-help.pd b/ceammc/ext/doc/osc.impulse~-help.pd index a644fdcdd7..609c1ccfa9 100644 --- a/ceammc/ext/doc/osc.impulse~-help.pd +++ b/ceammc/ext/doc/osc.impulse~-help.pd @@ -43,7 +43,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title osc @url ceammc.osc-help.pd; #X obj 1 547 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 550 library: ceammc v0.7.1; +#X text 10 550 library: ceammc v0.8.0; #X text 335 562 see also:; #X obj 409 562 osc.saw~; #X obj 483 562 osc.tri~; @@ -54,7 +54,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 osc.impulse~; #X text 10 76 category:; @@ -64,7 +64,7 @@ #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 oscillator \, band-limited; #X text 10 186 website:; diff --git a/ceammc/ext/doc/osc.impulse~.pddoc b/ceammc/ext/doc/osc.impulse~.pddoc index 5ff03b320b..ea03bf8239 100644 --- a/ceammc/ext/doc/osc.impulse~.pddoc +++ b/ceammc/ext/doc/osc.impulse~.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky Bandlimited impulse train generator - GPL3 + GPL3 or later ceammc osc oscillator band-limited diff --git a/ceammc/ext/doc/osc.pulse~-help.pd b/ceammc/ext/doc/osc.pulse~-help.pd index ed2a3de516..2dcb2c9629 100644 --- a/ceammc/ext/doc/osc.pulse~-help.pd +++ b/ceammc/ext/doc/osc.pulse~-help.pd @@ -6,7 +6,7 @@ -4096 0; #X obj 667 11 osc.pulse~; #X floatatom 50 118 5 0 0 0 - - -; -#X obj 136 118 ui.knob @size 40 40; +#X obj 136 118 ui.knob; #X obj 251 118 ui.dsp~; #X msg 136 176 @duty \$1; #X obj 50 205 osc.pulse~ 220 0.5; @@ -53,7 +53,7 @@ Range: 0\...1\.; #X text 115 45 ::; #X obj 131 48 ui.link @title osc @url ceammc.osc-help.pd; #X obj 1 720 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 723 library: ceammc v0.7.1; +#X text 10 723 library: ceammc v0.8.0; #X text 578 735 see also:; #X obj 652 735 osc.impulse~; #N canvas 10 742 400 290 info 0; @@ -61,7 +61,7 @@ Range: 0\...1\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 osc.pulse~; #X text 10 76 category:; @@ -71,7 +71,7 @@ Range: 0\...1\.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 oscillator \, band-limited; #X text 10 186 website:; diff --git a/ceammc/ext/doc/osc.pulse~.pddoc b/ceammc/ext/doc/osc.pulse~.pddoc index e4948a773f..1a5c7ed9e8 100644 --- a/ceammc/ext/doc/osc.pulse~.pddoc +++ b/ceammc/ext/doc/osc.pulse~.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky Bandlimited pulse train oscillator - GPL3 + GPL3 or later ceammc osc oscillator band-limited diff --git a/ceammc/ext/doc/osc.saw4~-help.pd b/ceammc/ext/doc/osc.saw4~-help.pd index 8289f3df43..20ffbd395a 100644 --- a/ceammc/ext/doc/osc.saw4~-help.pd +++ b/ceammc/ext/doc/osc.saw4~-help.pd @@ -53,7 +53,7 @@ suppression. 4nd order interpolation.; #X text 115 45 ::; #X obj 131 48 ui.link @title osc @url ceammc.osc-help.pd; #X obj 1 740 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 743 library: ceammc v0.7.1; +#X text 10 743 library: ceammc v0.8.0; #X text 364 755 see also:; #X obj 438 755 osc.saw~; #X obj 512 755 osc.tri~; @@ -64,7 +64,7 @@ suppression. 4nd order interpolation.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 osc.saw4~; #X text 10 76 category:; @@ -74,7 +74,7 @@ suppression. 4nd order interpolation.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 oscillator \, band-limited; #X text 10 186 website:; diff --git a/ceammc/ext/doc/osc.saw4~.pddoc b/ceammc/ext/doc/osc.saw4~.pddoc index 11be8b4a50..20af1ff6ec 100644 --- a/ceammc/ext/doc/osc.saw4~.pddoc +++ b/ceammc/ext/doc/osc.saw4~.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky Bandlimited sawtooth wave - GPL3 + GPL3 or later ceammc osc oscillator band-limited diff --git a/ceammc/ext/doc/osc.saw~-help.pd b/ceammc/ext/doc/osc.saw~-help.pd index a348939669..ee14088ac4 100644 --- a/ceammc/ext/doc/osc.saw~-help.pd +++ b/ceammc/ext/doc/osc.saw~-help.pd @@ -50,7 +50,7 @@ suppression. 2nd order interpolation.; #X text 115 45 ::; #X obj 131 48 ui.link @title osc @url ceammc.osc-help.pd; #X obj 1 698 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 701 library: ceammc v0.7.1; +#X text 10 701 library: ceammc v0.8.0; #X text 357 713 see also:; #X obj 431 713 osc.saw4~; #X obj 512 713 osc.tri~; @@ -61,7 +61,7 @@ suppression. 2nd order interpolation.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 osc.saw~; #X text 10 76 category:; @@ -71,7 +71,7 @@ suppression. 2nd order interpolation.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 oscillator \, band-limited; #X text 10 186 website:; diff --git a/ceammc/ext/doc/osc.saw~.pddoc b/ceammc/ext/doc/osc.saw~.pddoc index 1d214c7cae..8748097b64 100644 --- a/ceammc/ext/doc/osc.saw~.pddoc +++ b/ceammc/ext/doc/osc.saw~.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky Alias-free sawtooth wave - GPL3 + GPL3 or later ceammc osc oscillator band-limited diff --git a/ceammc/ext/doc/osc.sinfb~-help.pd b/ceammc/ext/doc/osc.sinfb~-help.pd index 0fe1757d1f..c59964c9cc 100644 --- a/ceammc/ext/doc/osc.sinfb~-help.pd +++ b/ceammc/ext/doc/osc.sinfb~-help.pd @@ -6,7 +6,7 @@ -4096 0; #X obj 667 11 osc.sinfb~; #X floatatom 50 118 5 0 0 0 - - -; -#X obj 126 118 ui.knob @max 6.28 @min 0 @size 40 40; +#X obj 126 118 ui.knob @min 0 @max 6.28; #X msg 126 176 @feedback \$1; #X obj 50 205 osc.sinfb~ 440 2; #X obj 50 234 ui.gain~ @size 120 14; @@ -53,13 +53,13 @@ Default value: 0\. Range: 0\...6.28319\.; #X text 115 45 ::; #X obj 131 48 ui.link @title osc @url ceammc.osc-help.pd; #X obj 1 735 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 738 library: ceammc v0.7.1; +#X text 10 738 library: ceammc v0.8.0; #N canvas 10 757 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 osc.sinfb~; #X text 10 76 category:; @@ -69,7 +69,7 @@ Default value: 0\. Range: 0\...6.28319\.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 osc \, feedback; #X text 10 186 website:; diff --git a/ceammc/ext/doc/osc.sinfb~.pddoc b/ceammc/ext/doc/osc.sinfb~.pddoc index c8f22b8e11..747bb275af 100644 --- a/ceammc/ext/doc/osc.sinfb~.pddoc +++ b/ceammc/ext/doc/osc.sinfb~.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky Sine oscilator with feedback - GPL3 + GPL3 or later ceammc osc osc feedback @@ -39,7 +39,7 @@ Serge Poltavsky Sine wave oscillator - GPL3 + GPL3 or later ceammc osc oscillator band-limited diff --git a/ceammc/ext/doc/osc.square~-help.pd b/ceammc/ext/doc/osc.square~-help.pd index ef5b38b2fb..db87bc0973 100644 --- a/ceammc/ext/doc/osc.square~-help.pd +++ b/ceammc/ext/doc/osc.square~-help.pd @@ -47,7 +47,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title osc @url ceammc.osc-help.pd; #X obj 1 658 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 661 library: ceammc v0.7.1; +#X text 10 661 library: ceammc v0.8.0; #X text 438 673 see also:; #X obj 512 673 osc.saw~; #X obj 586 673 osc.tri~; @@ -57,7 +57,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 osc.square~; #X text 10 76 category:; @@ -67,7 +67,7 @@ #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 oscillator \, band-limited; #X text 10 186 website:; diff --git a/ceammc/ext/doc/osc.square~.pddoc b/ceammc/ext/doc/osc.square~.pddoc index 1371260090..38bfec8ff6 100644 --- a/ceammc/ext/doc/osc.square~.pddoc +++ b/ceammc/ext/doc/osc.square~.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky Bandlimited square wave oscillator - GPL3 + GPL3 or later ceammc osc oscillator band-limited diff --git a/ceammc/ext/doc/osc.tri~-help.pd b/ceammc/ext/doc/osc.tri~-help.pd index 7a21972fd9..bd4855a509 100644 --- a/ceammc/ext/doc/osc.tri~-help.pd +++ b/ceammc/ext/doc/osc.tri~-help.pd @@ -46,7 +46,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title osc @url ceammc.osc-help.pd; #X obj 1 658 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 661 library: ceammc v0.7.1; +#X text 10 661 library: ceammc v0.8.0; #X text 438 673 see also:; #X obj 512 673 osc.saw~; #X obj 586 673 osc.square~; @@ -56,7 +56,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 osc.tri~; #X text 10 76 category:; @@ -66,7 +66,7 @@ #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 oscillator \, band-limited; #X text 10 186 website:; diff --git a/ceammc/ext/doc/osc.tri~.pddoc b/ceammc/ext/doc/osc.tri~.pddoc index a634ed2536..7b5d370194 100644 --- a/ceammc/ext/doc/osc.tri~.pddoc +++ b/ceammc/ext/doc/osc.tri~.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky Bandlimited triangle wave oscillator - GPL3 + GPL3 or later ceammc osc oscillator band-limited diff --git a/ceammc/ext/doc/pan.cos~-help.pd b/ceammc/ext/doc/pan.cos~-help.pd index dfb49d1839..6d6b15f4ad 100644 --- a/ceammc/ext/doc/pan.cos~-help.pd +++ b/ceammc/ext/doc/pan.cos~-help.pd @@ -58,7 +58,7 @@ Type: int. Default value: 20\. Range: 0\...100\.; #X text 115 45 ::; #X obj 131 48 ui.link @title spat @url ceammc.spat-help.pd; #X obj 1 707 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 710 library: ceammc v0.7.1; +#X text 10 710 library: ceammc v0.8.0; #X text 526 722 see also:; #X obj 600 722 pan.lin~; #X obj 674 722 pan.sqrt~; @@ -67,7 +67,7 @@ Type: int. Default value: 20\. Range: 0\...100\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 pan.cos~; #X text 10 76 category:; @@ -77,7 +77,7 @@ Type: int. Default value: 20\. Range: 0\...100\.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 pan \, span; #X text 10 186 website:; diff --git a/ceammc/ext/doc/pan.cos~.pddoc b/ceammc/ext/doc/pan.cos~.pddoc index 92df9a639a..5780ad7472 100644 --- a/ceammc/ext/doc/pan.cos~.pddoc +++ b/ceammc/ext/doc/pan.cos~.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky two channel equal power sine/cosine panner - GPL3 + GPL3 or later ceammc spat pan span diff --git a/ceammc/ext/doc/pan.linsig~-help.pd b/ceammc/ext/doc/pan.linsig~-help.pd index 6686455ca3..0e836f2758 100644 --- a/ceammc/ext/doc/pan.linsig~-help.pd +++ b/ceammc/ext/doc/pan.linsig~-help.pd @@ -31,7 +31,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title spat @url ceammc.spat-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #X text 526 520 see also:; #X obj 600 520 pan.sqrt~; #X obj 681 520 pan.cos~; @@ -40,7 +40,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 pan.linsig~; #X text 10 76 category:; @@ -50,7 +50,7 @@ #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 pan \, span; #X text 10 186 website:; diff --git a/ceammc/ext/doc/pan.linsig~.pddoc b/ceammc/ext/doc/pan.linsig~.pddoc index 90651274b4..48ea0602c8 100644 --- a/ceammc/ext/doc/pan.linsig~.pddoc +++ b/ceammc/ext/doc/pan.linsig~.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky two channel linear panner with signal control - GPL3 + GPL3 or later ceammc spat pan span diff --git a/ceammc/ext/doc/pan.lin~-help.pd b/ceammc/ext/doc/pan.lin~-help.pd index 4a7b534372..0cd9a47df4 100644 --- a/ceammc/ext/doc/pan.lin~-help.pd +++ b/ceammc/ext/doc/pan.lin~-help.pd @@ -64,7 +64,7 @@ Type: int. Default value: 20\. Range: 0\...100\.; #X text 115 45 ::; #X obj 131 48 ui.link @title spat @url ceammc.spat-help.pd; #X obj 1 832 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 835 library: ceammc v0.7.1; +#X text 10 835 library: ceammc v0.8.0; #X text 526 847 see also:; #X obj 600 847 pan.sqrt~; #X obj 681 847 pan.cos~; @@ -73,7 +73,7 @@ Type: int. Default value: 20\. Range: 0\...100\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 pan.lin~; #X text 10 76 category:; @@ -83,7 +83,7 @@ Type: int. Default value: 20\. Range: 0\...100\.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 pan \, span; #X text 10 186 website:; diff --git a/ceammc/ext/doc/pan.lin~.pddoc b/ceammc/ext/doc/pan.lin~.pddoc index cbcfc871e7..30c1f985f6 100644 --- a/ceammc/ext/doc/pan.lin~.pddoc +++ b/ceammc/ext/doc/pan.lin~.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky two channel linear panner - GPL3 + GPL3 or later ceammc spat pan span diff --git a/ceammc/ext/doc/pan.spread~-help.pd b/ceammc/ext/doc/pan.spread~-help.pd index 2925751e91..b16088398c 100644 --- a/ceammc/ext/doc/pan.spread~-help.pd +++ b/ceammc/ext/doc/pan.spread~-help.pd @@ -70,13 +70,13 @@ value: 1\. Range: 0\...1\.; #X text 115 45 ::; #X obj 131 48 ui.link @title spat @url ceammc.spat-help.pd; #X obj 1 1002 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1005 library: ceammc v0.7.1; +#X text 10 1005 library: ceammc v0.8.0; #N canvas 10 1024 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 pan.spread~; #X text 10 76 category:; @@ -86,7 +86,7 @@ value: 1\. Range: 0\...1\.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 pan \, spread; #X text 10 186 website:; diff --git a/ceammc/ext/doc/pan.spread~.pddoc b/ceammc/ext/doc/pan.spread~.pddoc index 9266bde986..51c9ff38b0 100644 --- a/ceammc/ext/doc/pan.spread~.pddoc +++ b/ceammc/ext/doc/pan.spread~.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky spreads input channels across the stereo field - GPL3 + GPL3 or later ceammc spat pan spread diff --git a/ceammc/ext/doc/pan.sqrt~-help.pd b/ceammc/ext/doc/pan.sqrt~-help.pd index 8091015929..b53b8139ec 100644 --- a/ceammc/ext/doc/pan.sqrt~-help.pd +++ b/ceammc/ext/doc/pan.sqrt~-help.pd @@ -60,7 +60,7 @@ Type: int. Default value: 20\. Range: 0\...100\.; #X text 115 45 ::; #X obj 131 48 ui.link @title spat @url ceammc.spat-help.pd; #X obj 1 792 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 795 library: ceammc v0.7.1; +#X text 10 795 library: ceammc v0.8.0; #X text 533 807 see also:; #X obj 607 807 pan.lin~; #X obj 681 807 pan.cos~; @@ -69,7 +69,7 @@ Type: int. Default value: 20\. Range: 0\...100\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 pan.sqrt~; #X text 10 76 category:; @@ -79,7 +79,7 @@ Type: int. Default value: 20\. Range: 0\...100\.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 pan \, span; #X text 10 186 website:; diff --git a/ceammc/ext/doc/pan.sqrt~.pddoc b/ceammc/ext/doc/pan.sqrt~.pddoc index 4c0784878c..8d4ccd25ac 100644 --- a/ceammc/ext/doc/pan.sqrt~.pddoc +++ b/ceammc/ext/doc/pan.sqrt~.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky two channel equal power square root panner - GPL3 + GPL3 or later ceammc spat pan span diff --git a/ceammc/ext/doc/patch.args-help.pd b/ceammc/ext/doc/patch.args-help.pd index 7746cd58f2..94dc11fdd7 100644 --- a/ceammc/ext/doc/patch.args-help.pd +++ b/ceammc/ext/doc/patch.args-help.pd @@ -26,16 +26,17 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title patch @url ceammc.patch-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; -#X text 478 520 see also:; -#X obj 552 520 canvas.current; -#X obj 668 520 canvas.top; +#X text 10 508 library: ceammc v0.8.0; +#X text 384 520 see also:; +#X obj 458 520 canvas.current; +#X obj 574 520 canvas.top; +#X obj 661 520 list->props; #N canvas 10 527 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 patch.args; #X text 10 76 category:; @@ -45,7 +46,7 @@ #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 patch \, args \, arguments \, canvas; #X text 10 186 website:; diff --git a/ceammc/ext/doc/patch.args.pddoc b/ceammc/ext/doc/patch.args.pddoc index 1e39d9d334..e03d3ba081 100644 --- a/ceammc/ext/doc/patch.args.pddoc +++ b/ceammc/ext/doc/patch.args.pddoc @@ -7,13 +7,14 @@ Serge Poltavsky Get patch or subpatch arguments - GPL3 + GPL3 or later ceammc patch patch args arguments canvas canvas.current canvas.top + list->props 0.4 diff --git a/ceammc/ext/doc/patch.props-help.pd b/ceammc/ext/doc/patch.props-help.pd index 7812f4d421..b871d26454 100644 --- a/ceammc/ext/doc/patch.props-help.pd +++ b/ceammc/ext/doc/patch.props-help.pd @@ -47,7 +47,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title property @url ceammc.property-help.pd; #X obj 1 600 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 603 library: ceammc v0.7.1; +#X text 10 603 library: ceammc v0.8.0; #X text 535 615 see also:; #X obj 609 615 prop.declare; #X obj 711 615 prop; @@ -56,7 +56,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 patch.props; #X text 10 76 category:; @@ -66,7 +66,7 @@ #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 property; #X text 10 186 website:; diff --git a/ceammc/ext/doc/patch.props.pddoc b/ceammc/ext/doc/patch.props.pddoc index 8f2e6cba77..0e06095e2d 100644 --- a/ceammc/ext/doc/patch.props.pddoc +++ b/ceammc/ext/doc/patch.props.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky patch properties manager - GPL3 + GPL3 or later ceammc property property diff --git a/ceammc/ext/doc/path.basename-help.pd b/ceammc/ext/doc/path.basename-help.pd index 29fce37362..d1601d3f81 100644 --- a/ceammc/ext/doc/path.basename-help.pd +++ b/ceammc/ext/doc/path.basename-help.pd @@ -36,7 +36,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title path @url ceammc.path-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #X text 579 520 see also:; #X obj 653 520 path.dirname; #N canvas 10 527 400 290 info 0; @@ -44,7 +44,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 path.basename; #X text 10 76 category:; @@ -54,7 +54,7 @@ #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 path \, environment; #X text 10 186 website:; diff --git a/ceammc/ext/doc/path.basename.pddoc b/ceammc/ext/doc/path.basename.pddoc index f9fa55b4cf..238e04277d 100644 --- a/ceammc/ext/doc/path.basename.pddoc +++ b/ceammc/ext/doc/path.basename.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky outputs filename portion of pathname - GPL3 + GPL3 or later ceammc path path environment diff --git a/ceammc/ext/doc/path.dirname-help.pd b/ceammc/ext/doc/path.dirname-help.pd index c058851269..e3360a6caf 100644 --- a/ceammc/ext/doc/path.dirname-help.pd +++ b/ceammc/ext/doc/path.dirname-help.pd @@ -36,7 +36,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title path @url ceammc.path-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #X text 572 520 see also:; #X obj 646 520 path.basename; #N canvas 10 527 400 290 info 0; @@ -44,7 +44,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 path.dirname; #X text 10 76 category:; @@ -54,7 +54,7 @@ #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 path \, environment; #X text 10 186 website:; diff --git a/ceammc/ext/doc/path.dirname.pddoc b/ceammc/ext/doc/path.dirname.pddoc index 11cf711407..00e42b1e67 100644 --- a/ceammc/ext/doc/path.dirname.pddoc +++ b/ceammc/ext/doc/path.dirname.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky outputs directory portion of pathname - GPL3 + GPL3 or later ceammc path path environment diff --git a/ceammc/ext/doc/path.exists-help.pd b/ceammc/ext/doc/path.exists-help.pd index ba7aa8ec4f..4786563968 100644 --- a/ceammc/ext/doc/path.exists-help.pd +++ b/ceammc/ext/doc/path.exists-help.pd @@ -31,13 +31,13 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title path @url ceammc.path-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #N canvas 10 527 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 path.exists; #X text 10 76 category:; @@ -47,7 +47,7 @@ #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 path \, exists; #X text 10 186 website:; diff --git a/ceammc/ext/doc/path.exists.pddoc b/ceammc/ext/doc/path.exists.pddoc index 72b23df34b..9fb00ed45d 100644 --- a/ceammc/ext/doc/path.exists.pddoc +++ b/ceammc/ext/doc/path.exists.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky checks if given path exists - GPL3 + GPL3 or later ceammc path path exists diff --git a/ceammc/ext/doc/path.lsdir-help.pd b/ceammc/ext/doc/path.lsdir-help.pd index 0f7eecac87..5498bd5b97 100644 --- a/ceammc/ext/doc/path.lsdir-help.pd +++ b/ceammc/ext/doc/path.lsdir-help.pd @@ -56,13 +56,13 @@ content. If not absolute path is given list current patch directory.; #X text 115 45 ::; #X obj 131 48 ui.link @title path @url ceammc.path-help.pd; #X obj 1 648 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 651 library: ceammc v0.7.1; +#X text 10 651 library: ceammc v0.8.0; #N canvas 10 670 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 path.lsdir; #X text 10 76 category:; @@ -72,7 +72,7 @@ content. If not absolute path is given list current patch directory.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 path \, list; #X text 10 186 website:; diff --git a/ceammc/ext/doc/path.lsdir.pddoc b/ceammc/ext/doc/path.lsdir.pddoc index a04afb3056..8d032a46d0 100644 --- a/ceammc/ext/doc/path.lsdir.pddoc +++ b/ceammc/ext/doc/path.lsdir.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky list directory contents - GPL3 + GPL3 or later ceammc path path list diff --git a/ceammc/ext/doc/preset.float-help.pd b/ceammc/ext/doc/preset.float-help.pd index f705ac603a..f2f6c795b0 100644 --- a/ceammc/ext/doc/preset.float-help.pd +++ b/ceammc/ext/doc/preset.float-help.pd @@ -67,7 +67,7 @@ Type: symbol.; #X text 115 45 ::; #X obj 131 48 ui.link @title preset @url ceammc.preset-help.pd; #X obj 1 820 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 823 library: ceammc v0.7.1; +#X text 10 823 library: ceammc v0.8.0; #X text 362 835 see also:; #X obj 436 835 preset.storage; #X obj 552 835 preset.symbol; @@ -77,7 +77,7 @@ Type: symbol.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 preset.float; #X text 10 76 category:; @@ -87,7 +87,7 @@ Type: symbol.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 preset \, storage \, float; #X text 10 186 website:; diff --git a/ceammc/ext/doc/preset.float.pddoc b/ceammc/ext/doc/preset.float.pddoc index 2c0f4767b5..acb153f2a0 100644 --- a/ceammc/ext/doc/preset.float.pddoc +++ b/ceammc/ext/doc/preset.float.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky load/store float preset - GPL3 + GPL3 or later ceammc preset preset storage float diff --git a/ceammc/ext/doc/preset.list-help.pd b/ceammc/ext/doc/preset.list-help.pd index c663db8123..f16727dd21 100644 --- a/ceammc/ext/doc/preset.list-help.pd +++ b/ceammc/ext/doc/preset.list-help.pd @@ -69,7 +69,7 @@ Type: symbol.; #X text 115 45 ::; #X obj 131 48 ui.link @title preset @url ceammc.preset-help.pd; #X obj 1 906 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 909 library: ceammc v0.7.1; +#X text 10 909 library: ceammc v0.8.0; #X text 355 921 see also:; #X obj 429 921 preset.storage; #X obj 545 921 preset.float; @@ -79,7 +79,7 @@ Type: symbol.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 preset.list; #X text 10 76 category:; @@ -89,7 +89,7 @@ Type: symbol.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 preset \, storage \, symbol; #X text 10 186 website:; diff --git a/ceammc/ext/doc/preset.list.pddoc b/ceammc/ext/doc/preset.list.pddoc index 5060a303f9..1a98ba9f0a 100644 --- a/ceammc/ext/doc/preset.list.pddoc +++ b/ceammc/ext/doc/preset.list.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky load/store symbol preset - GPL3 + GPL3 or later ceammc preset preset storage symbol diff --git a/ceammc/ext/doc/preset.storage-help.pd b/ceammc/ext/doc/preset.storage-help.pd index 325052f915..ecc9b98089 100644 --- a/ceammc/ext/doc/preset.storage-help.pd +++ b/ceammc/ext/doc/preset.storage-help.pd @@ -12,8 +12,8 @@ and write them to files; #X obj 107 158 preset.float id1; #X floatatom 290 158 5 0 0 0 - - -; #X obj 347 158 preset.float id2; -#X obj 50 187 ui.radio @size 127 15; -#X obj 222 187 ui.radio @size 127 15; +#X obj 50 187 ui.radio; +#X obj 222 187 ui.radio; #X msg 50 216 load \$1; #X msg 222 216 store \$1; #X msg 328 216 @keys?; @@ -57,7 +57,7 @@ autogenerated name like PATCHNAME-preset.txt.; #X text 115 45 ::; #X obj 131 48 ui.link @title preset @url ceammc.preset-help.pd; #X obj 1 723 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 726 library: ceammc v0.7.1; +#X text 10 726 library: ceammc v0.8.0; #X text 377 738 see also:; #X obj 451 738 preset.float; #X obj 552 738 preset.symbol; @@ -67,7 +67,7 @@ autogenerated name like PATCHNAME-preset.txt.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 preset.storage; #X text 10 76 category:; @@ -77,7 +77,7 @@ autogenerated name like PATCHNAME-preset.txt.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 preset \, storage; #X text 10 186 website:; diff --git a/ceammc/ext/doc/preset.storage.pddoc b/ceammc/ext/doc/preset.storage.pddoc index 0024dfcefe..1c97bd5c73 100644 --- a/ceammc/ext/doc/preset.storage.pddoc +++ b/ceammc/ext/doc/preset.storage.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky preset storage control - GPL3 + GPL3 or later ceammc preset preset storage diff --git a/ceammc/ext/doc/preset.symbol-help.pd b/ceammc/ext/doc/preset.symbol-help.pd index a1fd81b71d..802312926a 100644 --- a/ceammc/ext/doc/preset.symbol-help.pd +++ b/ceammc/ext/doc/preset.symbol-help.pd @@ -66,7 +66,7 @@ Type: symbol.; #X text 115 45 ::; #X obj 131 48 ui.link @title preset @url ceammc.preset-help.pd; #X obj 1 820 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 823 library: ceammc v0.7.1; +#X text 10 823 library: ceammc v0.8.0; #X text 370 835 see also:; #X obj 444 835 preset.storage; #X obj 560 835 preset.float; @@ -76,7 +76,7 @@ Type: symbol.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 preset.symbol; #X text 10 76 category:; @@ -86,7 +86,7 @@ Type: symbol.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 preset \, storage \, symbol; #X text 10 186 website:; diff --git a/ceammc/ext/doc/preset.symbol.pddoc b/ceammc/ext/doc/preset.symbol.pddoc index 0ea7bd3103..0ed766222f 100644 --- a/ceammc/ext/doc/preset.symbol.pddoc +++ b/ceammc/ext/doc/preset.symbol.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky load/store symbol preset - GPL3 + GPL3 or later ceammc preset preset storage symbol diff --git a/ceammc/ext/doc/prop-help.pd b/ceammc/ext/doc/prop-help.pd index 6c23a9bcee..80035a18f7 100644 --- a/ceammc/ext/doc/prop-help.pd +++ b/ceammc/ext/doc/prop-help.pd @@ -48,7 +48,7 @@ limits can be set to property; #X text 115 45 ::; #X obj 131 48 ui.link @title property @url ceammc.property-help.pd; #X obj 1 658 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 661 library: ceammc v0.7.1; +#X text 10 661 library: ceammc v0.8.0; #X text 485 673 see also:; #X obj 559 673 prop.declare; #X obj 661 673 patch.props; @@ -57,7 +57,7 @@ limits can be set to property; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 prop; #X text 10 76 category:; @@ -67,7 +67,7 @@ limits can be set to property; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 property; #X text 10 186 website:; diff --git a/ceammc/ext/doc/prop.declare-help.pd b/ceammc/ext/doc/prop.declare-help.pd index f869b5dd50..68db2af323 100644 --- a/ceammc/ext/doc/prop.declare-help.pd +++ b/ceammc/ext/doc/prop.declare-help.pd @@ -28,7 +28,7 @@ current canvas).; #X text 245 398 Get/Set default property value. Type: list.; #X msg 110 427 @enum; #X text 245 427 Get/Set allowed values (without default value) (for -symbol proeprties only). Type: list.; +symbol properties only). Type: list.; #X msg 110 469 @f; #X text 245 469 alias to @type float.; #X msg 110 498 @i; @@ -45,14 +45,14 @@ only). Type: float.; #X text 245 640 alias to @type symbol.; #X msg 110 669 @type; #X text 245 669 Get/Set property type. Type: symbol. Allowed values: -float \, int \, bool \, symbol \, list.; +float \, int \, bool \, enum \, symbol \, list.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title property @url ceammc.property-help.pd; #X obj 1 741 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 744 library: ceammc v0.7.1; +#X text 10 744 library: ceammc v0.8.0; #X text 543 756 see also:; #X obj 617 756 prop; #X obj 661 756 patch.props; @@ -61,7 +61,7 @@ float \, int \, bool \, symbol \, list.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 prop.declare; #X text 10 76 category:; @@ -71,7 +71,7 @@ float \, int \, bool \, symbol \, list.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 property \, declare; #X text 10 186 website:; diff --git a/ceammc/ext/doc/prop.declare.pddoc b/ceammc/ext/doc/prop.declare.pddoc index ce19908c45..21772b8a40 100644 --- a/ceammc/ext/doc/prop.declare.pddoc +++ b/ceammc/ext/doc/prop.declare.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky declare named property for subpatch or abstraction - GPL3 + GPL3 or later ceammc property property declare @@ -22,7 +22,7 @@ current canvas) - property + property type alias to @type float alias to @type int @@ -35,7 +35,7 @@ maximum value (for float and int properties only) allowed values (without default value) (for symbol - proeprties only) + properties only) diff --git a/ceammc/ext/doc/prop.get-help.pd b/ceammc/ext/doc/prop.get-help.pd index 272eac50dd..22e506ed8d 100644 --- a/ceammc/ext/doc/prop.get-help.pd +++ b/ceammc/ext/doc/prop.get-help.pd @@ -18,9 +18,9 @@ Non property values are passed untouched.; -1; #X msg 203 216 @prop1 2; #X obj 50 274 prop-> @prop1; -#X obj 174 302 ui.display @size 150 18; -#X obj 98 331 ui.display @size 150 18; -#X obj 50 360 ui.display @size 150 18; +#X obj 174 302 ui.display @display_type 1 @size 150 18; +#X obj 98 331 ui.display @display_type 1 @size 150 18; +#X obj 50 360 ui.display @display_type 1 @size 150 18; #X obj 20 400 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 405 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; @@ -44,7 +44,7 @@ Non property values are passed untouched.; #X text 115 45 ::; #X obj 131 48 ui.link @title property @url ceammc.property-help.pd; #X obj 1 552 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 555 library: ceammc v0.7.1; +#X text 10 555 library: ceammc v0.8.0; #X text 622 567 see also:; #X obj 696 567 prop<-; #N canvas 10 574 400 290 info 0; @@ -52,7 +52,7 @@ Non property values are passed untouched.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 prop.get; #X text 10 76 category:; @@ -62,7 +62,7 @@ Non property values are passed untouched.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 property; #X text 10 186 website:; diff --git a/ceammc/ext/doc/prop.get.pddoc b/ceammc/ext/doc/prop.get.pddoc index 579befdedc..5af3e0f81f 100644 --- a/ceammc/ext/doc/prop.get.pddoc +++ b/ceammc/ext/doc/prop.get.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky Property extractor - GPL3 + GPL3 or later ceammc property property @@ -48,11 +48,11 @@ | | | | | | [prop-> @prop1 ] | ^| ^^| -| | [ui.display @display_type 1] +| | [ui.display @display_type=1] | | -| [ui.display @display_type 1] +| [ui.display @display_type=1] | -[ui.display @display_type 1] +[ui.display @display_type=1] ]]> diff --git a/ceammc/ext/doc/prop.get~-help.pd b/ceammc/ext/doc/prop.get~-help.pd index c31ee01332..fc46e040c6 100644 --- a/ceammc/ext/doc/prop.get~-help.pd +++ b/ceammc/ext/doc/prop.get~-help.pd @@ -43,7 +43,7 @@ Non property values are passed untouched.; #X text 115 45 ::; #X obj 131 48 ui.link @title property @url ceammc.property-help.pd; #X obj 1 576 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 579 library: ceammc v0.7.1; +#X text 10 579 library: ceammc v0.8.0; #X text 622 591 see also:; #X obj 696 591 prop->; #N canvas 10 598 400 290 info 0; @@ -51,7 +51,7 @@ Non property values are passed untouched.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 prop.get~; #X text 10 76 category:; @@ -61,7 +61,7 @@ Non property values are passed untouched.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 property; #X text 10 186 website:; diff --git a/ceammc/ext/doc/prop.get~.pddoc b/ceammc/ext/doc/prop.get~.pddoc index 30ddef662d..d42ff9c2b6 100644 --- a/ceammc/ext/doc/prop.get~.pddoc +++ b/ceammc/ext/doc/prop.get~.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky Property extractor from sound stream - GPL3 + GPL3 or later ceammc property property diff --git a/ceammc/ext/doc/prop.pddoc b/ceammc/ext/doc/prop.pddoc index 429268d98e..12730816f6 100644 --- a/ceammc/ext/doc/prop.pddoc +++ b/ceammc/ext/doc/prop.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky get/set named property value for subpatch or abstraction - GPL3 + GPL3 or later ceammc property property diff --git a/ceammc/ext/doc/prop.set-help.pd b/ceammc/ext/doc/prop.set-help.pd index 7495acf8c9..b22fe489ce 100644 --- a/ceammc/ext/doc/prop.set-help.pd +++ b/ceammc/ext/doc/prop.set-help.pd @@ -42,7 +42,7 @@ value on inlet it immediately outputs it.; #X text 115 45 ::; #X obj 131 48 ui.link @title property @url ceammc.property-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #X text 622 520 see also:; #X obj 696 520 prop->; #N canvas 10 527 400 290 info 0; @@ -50,7 +50,7 @@ value on inlet it immediately outputs it.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 prop.set; #X text 10 76 category:; @@ -60,7 +60,7 @@ value on inlet it immediately outputs it.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 property; #X text 10 186 website:; diff --git a/ceammc/ext/doc/prop.set.pddoc b/ceammc/ext/doc/prop.set.pddoc index b2065c3d4e..3330fa2154 100644 --- a/ceammc/ext/doc/prop.set.pddoc +++ b/ceammc/ext/doc/prop.set.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky Property injector - GPL3 + GPL3 or later ceammc property property diff --git a/ceammc/ext/doc/proto.firmata-help.pd b/ceammc/ext/doc/proto.firmata-help.pd index e28fc03b31..e944d7b520 100644 --- a/ceammc/ext/doc/proto.firmata-help.pd +++ b/ceammc/ext/doc/proto.firmata-help.pd @@ -130,13 +130,13 @@ parsed output from Arduino.; #X text 115 45 ::; #X obj 131 48 ui.link @title proto @url ceammc.proto-help.pd; #X obj 1 1817 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1820 library: ceammc v0.7.1; +#X text 10 1820 library: ceammc v0.8.0; #N canvas 10 1839 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 proto.firmata; #X text 10 76 category:; @@ -146,7 +146,7 @@ parsed output from Arduino.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 arduino \, firmata; #X text 10 186 website:; diff --git a/ceammc/ext/doc/proto.firmata.pddoc b/ceammc/ext/doc/proto.firmata.pddoc index 1e2d9606a6..3af2691e65 100644 --- a/ceammc/ext/doc/proto.firmata.pddoc +++ b/ceammc/ext/doc/proto.firmata.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky Firmata Arduino protocol support - GPL3 + GPL3 or later ceammc proto arduino firmata diff --git a/ceammc/ext/doc/proto.sp.alpaca-help.pd b/ceammc/ext/doc/proto.sp.alpaca-help.pd new file mode 100644 index 0000000000..df45845025 --- /dev/null +++ b/ceammc/ext/doc/proto.sp.alpaca-help.pd @@ -0,0 +1,171 @@ +#N canvas 0 0 785 555 12; +#X declare -lib ceammc; +#X obj 369 50 cnv 1 396 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 369 50 protocol parser for Arduino-based CEAMMC footswitch; +#X obj 1 1 cnv 5 765 40 empty empty proto.sp.alpaca 20 20 0 20 -104026 +-4096 0; +#X obj 632 11 proto.sp.alpaca; +#X obj 50 118 ui.knob; +#X msg 146 118 version?; +#X msg 146 147 clear; +#X msg 251 147 fill; +#X obj 347 147 ui.hrd @mode 1; +#X floatatom 510 147 5 0 0 0 - - -; +#X symbolatom 626 147 5 0 0 0 - - -; +#X msg 50 176 brightness \$1; +#X obj 347 176 msg row 2; +#X msg 510 176 str \$1; +#X msg 626 176 char \$1; +#X obj 347 205 ui.menu none digital1 digital2 analog; +#X msg 347 234 mode 0 \$2; +#X obj 50 262 proto.sp.alpaca; +#X obj 50 291 hw.arduino @rate 9600 @reconnect; +#X obj 50 320 proto.sp.alpaca; +#X obj 50 349 route digital analog; +#X obj 50 378 route 0 1 2 3; +#X obj 232 378 route 0 1; +#X obj 50 406 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; +#X obj 98 406 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; +#X obj 146 406 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; +#X obj 194 406 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; +#X floatatom 232 406 5 0 0 0 - - -; +#X floatatom 290 406 5 0 0 0 - - -; +#X obj 20 445 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 450 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +-49933 0; +#X msg 110 485 brightness; +#X text 245 485 set LED brightness. Arguments are:; +#X obj 255 508 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 508 VAL: value. Type: float. Range: 0\...1\.; +#X msg 110 533 char; +#X text 245 533 draw char at specified position. Arguments are:; +#X obj 255 556 cnv 1 21 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 556 CH: char symbol or int value from 0 to 9\. Type: atom.; +#X obj 255 579 cnv 1 47 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 579 [XOFF]: horizontal character offset. Type: int. Range: +0\...7\.; +#X msg 110 619 char; +#X text 245 619 draw char at specified position. Arguments are:; +#X obj 255 642 cnv 1 21 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 642 CH: char symbol or int value from 0 to 9\. Type: atom.; +#X obj 255 665 cnv 1 47 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 665 [XOFF]: horizontal character offset. Type: int. Range: +0\...7\.; +#X msg 110 705 clear; +#X text 245 705 clear LED display.; +#X msg 110 732 col; +#X text 245 732 draw column pixels. Arguments are:; +#X obj 255 755 cnv 1 14 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 755 N: column index. Type: int. Range: 0\...7\.; +#X obj 255 778 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 778 BITS: list of 0 and 1\. Type: list.; +#X msg 110 803 fill; +#X text 245 803 fill LED display.; +#X msg 110 830 invert; +#X text 245 830 invert LED display.; +#X msg 110 857 mode; +#X text 245 857 set device jack mode. Arguments are:; +#X obj 255 880 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 880 IDX: left (0) or right (1) device side. Type: int. +Allowed values: 0 \, 1\.; +#X obj 255 918 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 918 MODE: output mode: none - no output \, digital1 - send +only first button press \, digital2 - send only second button press +\, digital - send both buttons press \, analog - send analog value +(from pedal) \, analog_row - send raw analog values (pair). Type: symbol. +Allowed values: digital1 \, digital2 \, digital \, analog \, analog_raw +\, none.; +#X msg 110 1018 pixel; +#X text 245 1018 draw/clear pixel on display matrix (6x8). Arguments +are:; +#X obj 255 1041 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1041 X: x-pixel coordinate. Type: int. Range: 0\...7\.; +#X obj 255 1064 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1064 Y: y-pixel coordinate. Type: int. Range: 0\...5\.; +#X obj 255 1087 cnv 1 52 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1087 ON/OFF: draw (1) or clear (0). Type: int. Allowed +values: 0 \, 1\.; +#X msg 110 1127 row; +#X text 245 1127 draw row pixels. Arguments are:; +#X obj 255 1150 cnv 1 14 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1150 N: row index. Type: int. Range: 0\...5\.; +#X obj 255 1173 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1173 BITS: list of 0 and 1\. Type: list.; +#X msg 110 1198 str; +#X text 245 1198 draw string. Arguments are:; +#X obj 255 1221 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1221 STR: string or int value from -9 to 99\. Type: atom.; +#X msg 110 1246 sync; +#X text 245 1246 force device to send it's button and mode state.; +#X msg 110 1273 version?; +#X text 245 1273 outputs device protocol version as message: [version +N].; +#X msg 110 1300 dump; +#X text 245 1300 dumps all object info to Pd console window.; +#X obj 20 1337 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1342 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 1343 1\.; +#X text 150 1343 *float*; +#X text 245 1343 input byte value from arduino.; +#X obj 20 1373 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1378 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 1379 1\.; +#X text 245 1379 output parsed messages from device.; +#X obj 10 48 ui.link @title index @url ../index-help.pd; +#X text 51 45 ::; +#X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; +#X text 115 45 ::; +#X obj 131 48 ui.link @title proto @url ceammc.proto-help.pd; +#X obj 1 1429 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1432 library: ceammc v0.8.0; +#N canvas 10 1451 400 290 info 0; +#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; +#X text 10 10 library:; +#X text 120 10 ceammc; +#X text 10 32 version:; +#X text 120 32 0.8.0; +#X text 10 54 object:; +#X text 120 54 proto.sp.alpaca; +#X text 10 76 category:; +#X text 120 76 proto; +#X text 10 98 since:; +#X text 120 98 0.8; +#X text 10 120 authors:; +#X text 120 120 Serge Poltavski; +#X text 10 142 license:; +#X text 120 142 GPL3 or later; +#X text 10 164 keywords:; +#X text 120 164 protocol \, diy \, alpaca \, footswitch; +#X text 10 186 website:; +#X obj 120 189 ui.link @title https://github.com/uliss/pure-data @url +https://github.com/uliss/pure-data; +#X obj 120 208 declare -lib ceammc; +#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 120 268 generated by pddoc; +#X restore 10 1451 pd info; +#X connect 4 0 11 0; +#X connect 8 0 12 0; +#X connect 9 0 13 0; +#X connect 10 0 14 0; +#X connect 15 0 16 0; +#X connect 11 0 17 0; +#X connect 17 0 18 0; +#X connect 18 0 19 0; +#X connect 19 0 20 0; +#X connect 20 0 21 0; +#X connect 20 1 22 0; +#X connect 21 0 23 0; +#X connect 21 1 24 0; +#X connect 21 2 25 0; +#X connect 21 3 26 0; +#X connect 22 0 27 0; +#X connect 22 1 28 0; +#X connect 6 0 17 0; +#X connect 7 0 17 0; +#X connect 12 0 17 0; +#X connect 5 0 17 0; +#X connect 13 0 17 0; +#X connect 14 0 17 0; +#X connect 16 0 17 0; \ No newline at end of file diff --git a/ceammc/ext/doc/proto.sp.alpaca.pddoc b/ceammc/ext/doc/proto.sp.alpaca.pddoc new file mode 100644 index 0000000000..4493320ee8 --- /dev/null +++ b/ceammc/ext/doc/proto.sp.alpaca.pddoc @@ -0,0 +1,107 @@ + + + + proto.sp.alpaca + + + Serge Poltavski + + protocol parser for Arduino-based CEAMMC footswitch + GPL3 or later + ceammc + proto + protocol diy alpaca footswitch + 0.8 + + + dumps all object info to Pd console window. + set LED brightness + + value + clear LED display + fill LED display + invert LED display + force device to send it's button and mode state + outputs device protocol version as message: [version + N] + set device jack mode + left (0) or right (1) device + side + output mode: none - no output, + digital1 - send only first button press, digital2 - send only second button press, + digital - send both buttons press, analog - send analog value (from pedal), analog_row + - send raw analog values (pair) + draw/clear pixel on display matrix (6x8). + x-pixel + coordinate + y-pixel + coordinate + draw (1) or clear + (0) + draw char at specified position + char symbol or int value from 0 to + 9 + horizontal character + offset + draw char at specified position + char symbol or int value from 0 to + 9 + horizontal character + offset + draw string + string or int value from -9 to + 99 + draw column pixels + column + index + list of 0 and 1 + draw row pixels + row index + list of 0 and 1 + + + + input byte value from arduino + + + + output parsed messages from device + + + +z] +[X b->z] +[X c->z] +[X d->z] +[X e->z] +[X f->z] +[X g->z] +]]> + + + + diff --git a/ceammc/ext/doc/radio-help.pd b/ceammc/ext/doc/radio-help.pd index 2d01fb648c..467ad820f0 100644 --- a/ceammc/ext/doc/radio-help.pd +++ b/ceammc/ext/doc/radio-help.pd @@ -4,7 +4,7 @@ #X text 423 50 float index to outlet values as radio switch; #X obj 1 1 cnv 5 765 40 empty empty radio 20 20 0 20 -104026 -4096 0; #X obj 705 11 radio; -#X obj 50 118 ui.radio @nitems 4 @size 127 15; +#X obj 50 118 ui.radio @nitems 4; #X msg 78 176 reset; #X obj 50 205 radio 4; #X obj 50 234 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; @@ -48,7 +48,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title base @url ceammc.base-help.pd; #X obj 1 622 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 625 library: ceammc v0.7.1; +#X text 10 625 library: ceammc v0.8.0; #X text 551 637 see also:; #X obj 625 637 hradio 15 1 0 8 empty empty empty 17 7 0 10 -262144 -1 -1 0; @@ -57,7 +57,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 radio; #X text 10 76 category:; @@ -67,7 +67,7 @@ #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 radio; #X text 10 186 website:; diff --git a/ceammc/ext/doc/radio.pddoc b/ceammc/ext/doc/radio.pddoc index ab49cd8a8f..3c92e10032 100644 --- a/ceammc/ext/doc/radio.pddoc +++ b/ceammc/ext/doc/radio.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky float index to outlet values as radio switch - GPL3 + GPL3 or later ceammc base radio @@ -38,7 +38,7 @@ Serge Poltavsky random weighted integers on interval [0, n) - GPL3 + GPL3 or later ceammc random linear random discrete diff --git a/ceammc/ext/doc/random.float-help.pd b/ceammc/ext/doc/random.float-help.pd index a621f11a7d..8b81746318 100644 --- a/ceammc/ext/doc/random.float-help.pd +++ b/ceammc/ext/doc/random.float-help.pd @@ -49,7 +49,7 @@ value: 0\.; #X text 115 45 ::; #X obj 131 48 ui.link @title random @url ceammc.random-help.pd; #X obj 1 600 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 603 library: ceammc v0.7.1; +#X text 10 603 library: ceammc v0.8.0; #X text 495 615 see also:; #X obj 569 615 random.int; #X obj 655 615 random.gauss; @@ -58,7 +58,7 @@ value: 0\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 random.float; #X text 10 76 category:; @@ -68,7 +68,7 @@ value: 0\.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 random; #X text 10 186 website:; diff --git a/ceammc/ext/doc/random.float.pddoc b/ceammc/ext/doc/random.float.pddoc index c8a4a4e09d..afed91dafb 100644 --- a/ceammc/ext/doc/random.float.pddoc +++ b/ceammc/ext/doc/random.float.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky random float generator in specified range - GPL3 + GPL3 or later ceammc random random diff --git a/ceammc/ext/doc/random.gauss-help.pd b/ceammc/ext/doc/random.gauss-help.pd index f08c0c3736..62e46e9e23 100644 --- a/ceammc/ext/doc/random.gauss-help.pd +++ b/ceammc/ext/doc/random.gauss-help.pd @@ -72,7 +72,7 @@ value: 0\. Min value: 0\.; #X text 115 45 ::; #X obj 131 48 ui.link @title random @url ceammc.random-help.pd; #X obj 1 886 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 889 library: ceammc v0.7.1; +#X text 10 889 library: ceammc v0.8.0; #X text 495 901 see also:; #X obj 569 901 random.float; #X obj 669 901 random.int; @@ -81,7 +81,7 @@ value: 0\. Min value: 0\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 random.gauss; #X text 10 76 category:; @@ -91,7 +91,7 @@ value: 0\. Min value: 0\.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 gauss \, random; #X text 10 186 website:; diff --git a/ceammc/ext/doc/random.gauss.pddoc b/ceammc/ext/doc/random.gauss.pddoc index 89a77976cb..06fd2fafe3 100644 --- a/ceammc/ext/doc/random.gauss.pddoc +++ b/ceammc/ext/doc/random.gauss.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky gaussian random distribution - GPL3 + GPL3 or later ceammc random gauss random diff --git a/ceammc/ext/doc/random.int-help.pd b/ceammc/ext/doc/random.int-help.pd index dd90c52045..2473bb0df0 100644 --- a/ceammc/ext/doc/random.int-help.pd +++ b/ceammc/ext/doc/random.int-help.pd @@ -28,7 +28,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title random @url ceammc.random-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #X text 481 520 see also:; #X obj 555 520 random.float; #X obj 655 520 random.gauss; @@ -37,7 +37,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 random.int; #X text 10 76 category:; @@ -47,7 +47,7 @@ #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 random; #X text 10 186 website:; diff --git a/ceammc/ext/doc/random.int.pddoc b/ceammc/ext/doc/random.int.pddoc index 915c030a66..f9db47cc5c 100644 --- a/ceammc/ext/doc/random.int.pddoc +++ b/ceammc/ext/doc/random.int.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky Random integer generator in specified range - GPL3 + GPL3 or later ceammc random random diff --git a/ceammc/ext/doc/random.linear-help.pd b/ceammc/ext/doc/random.linear-help.pd index f4b4e09e03..35133daf8a 100644 --- a/ceammc/ext/doc/random.linear-help.pd +++ b/ceammc/ext/doc/random.linear-help.pd @@ -61,7 +61,7 @@ value: 1\.; #X text 115 45 ::; #X obj 131 48 ui.link @title random @url ceammc.random-help.pd; #X obj 1 741 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 744 library: ceammc v0.7.1; +#X text 10 744 library: ceammc v0.8.0; #X text 495 756 see also:; #X obj 569 756 random.float; #X obj 669 756 random.int; @@ -70,7 +70,7 @@ value: 1\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 random.linear; #X text 10 76 category:; @@ -80,7 +80,7 @@ value: 1\.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 linear \, random; #X text 10 186 website:; diff --git a/ceammc/ext/doc/random.linear.pddoc b/ceammc/ext/doc/random.linear.pddoc index ecd1e58f94..ecbb88655a 100644 --- a/ceammc/ext/doc/random.linear.pddoc +++ b/ceammc/ext/doc/random.linear.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky random linear distribution - GPL3 + GPL3 or later ceammc random linear random diff --git a/ceammc/ext/doc/random.pw_const-help.pd b/ceammc/ext/doc/random.pw_const-help.pd index 68a5fe3dae..c42bcc866d 100644 --- a/ceammc/ext/doc/random.pw_const-help.pd +++ b/ceammc/ext/doc/random.pw_const-help.pd @@ -65,7 +65,7 @@ propabilities. Type: list.; #X text 115 45 ::; #X obj 131 48 ui.link @title random @url ceammc.random-help.pd; #X obj 1 802 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 805 library: ceammc v0.7.1; +#X text 10 805 library: ceammc v0.8.0; #X text 465 817 see also:; #X obj 539 817 random.linear; #X obj 647 817 random.pw_lin; @@ -74,7 +74,7 @@ propabilities. Type: list.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 random.pw_const; #X text 10 76 category:; @@ -84,7 +84,7 @@ propabilities. Type: list.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 linear \, random \, piecewise; #X text 10 186 website:; diff --git a/ceammc/ext/doc/random.pw_const.pddoc b/ceammc/ext/doc/random.pw_const.pddoc index 59a143926b..82b7941aba 100644 --- a/ceammc/ext/doc/random.pw_const.pddoc +++ b/ceammc/ext/doc/random.pw_const.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky piecewise constant random distribution - GPL3 + GPL3 or later ceammc random linear random piecewise diff --git a/ceammc/ext/doc/random.pw_lin-help.pd b/ceammc/ext/doc/random.pw_lin-help.pd index 4e9fb52628..c5f0a5fe31 100644 --- a/ceammc/ext/doc/random.pw_lin-help.pd +++ b/ceammc/ext/doc/random.pw_lin-help.pd @@ -65,7 +65,7 @@ Type: list.; #X text 115 45 ::; #X obj 131 48 ui.link @title random @url ceammc.random-help.pd; #X obj 1 817 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 820 library: ceammc v0.7.1; +#X text 10 820 library: ceammc v0.8.0; #X text 451 832 see also:; #X obj 525 832 random.linear; #X obj 633 832 random.pw_const; @@ -74,7 +74,7 @@ Type: list.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 random.pw_lin; #X text 10 76 category:; @@ -84,7 +84,7 @@ Type: list.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 linear \, random \, piecewise; #X text 10 186 website:; diff --git a/ceammc/ext/doc/random.pw_lin.pddoc b/ceammc/ext/doc/random.pw_lin.pddoc index c0805618fb..9425193395 100644 --- a/ceammc/ext/doc/random.pw_lin.pddoc +++ b/ceammc/ext/doc/random.pw_lin.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky piecewise linear random distribution - GPL3 + GPL3 or later ceammc random linear random piecewise diff --git a/ceammc/ext/doc/replace-help.pd b/ceammc/ext/doc/replace-help.pd index 73428e719d..ecb9d81713 100644 --- a/ceammc/ext/doc/replace-help.pd +++ b/ceammc/ext/doc/replace-help.pd @@ -54,7 +54,7 @@ or first and second arguments.; #X text 115 45 ::; #X obj 131 48 ui.link @title flow @url ceammc.flow-help.pd; #X obj 1 672 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 675 library: ceammc v0.7.1; +#X text 10 675 library: ceammc v0.8.0; #X text 601 687 see also:; #X obj 675 687 flow.pass; #N canvas 10 694 400 290 info 0; @@ -62,7 +62,7 @@ or first and second arguments.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 replace; #X text 10 76 category:; @@ -72,7 +72,7 @@ or first and second arguments.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 replace \, test; #X text 10 186 website:; diff --git a/ceammc/ext/doc/replace.pddoc b/ceammc/ext/doc/replace.pddoc index ef39ed54b5..bc43dc7372 100644 --- a/ceammc/ext/doc/replace.pddoc +++ b/ceammc/ext/doc/replace.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky Replace atoms in data stream - GPL3 + GPL3 or later ceammc flow replace test diff --git a/ceammc/ext/doc/set.contains-help.pd b/ceammc/ext/doc/set.contains-help.pd index db49e143b2..4a4aef4cc3 100644 --- a/ceammc/ext/doc/set.contains-help.pd +++ b/ceammc/ext/doc/set.contains-help.pd @@ -39,7 +39,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title data @url ceammc.data-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #X text 608 520 see also:; #X obj 682 520 data.set; #N canvas 10 527 400 290 info 0; @@ -47,7 +47,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 set.contains; #X text 10 76 category:; @@ -57,7 +57,7 @@ #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 data \, predicate \, contains; #X text 10 186 website:; diff --git a/ceammc/ext/doc/set.contains.pddoc b/ceammc/ext/doc/set.contains.pddoc index 18598d88f6..dbfb18c823 100644 --- a/ceammc/ext/doc/set.contains.pddoc +++ b/ceammc/ext/doc/set.contains.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky check if specified element is in set - GPL3 + GPL3 or later ceammc data data predicate contains diff --git a/ceammc/ext/doc/set.diff-help.pd b/ceammc/ext/doc/set.diff-help.pd index 33687cc803..03ca14dfe1 100644 --- a/ceammc/ext/doc/set.diff-help.pd +++ b/ceammc/ext/doc/set.diff-help.pd @@ -39,7 +39,7 @@ not in second set.; #X text 115 45 ::; #X obj 131 48 ui.link @title data @url ceammc.data-help.pd; #X obj 1 513 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 516 library: ceammc v0.7.1; +#X text 10 516 library: ceammc v0.8.0; #X text 528 528 see also:; #X obj 602 528 data.set; #X obj 675 528 set.union; @@ -48,7 +48,7 @@ not in second set.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 set.diff; #X text 10 76 category:; @@ -58,7 +58,7 @@ not in second set.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 data \, difference \, set; #X text 10 186 website:; diff --git a/ceammc/ext/doc/set.diff.pddoc b/ceammc/ext/doc/set.diff.pddoc index 8b93e4ca70..1cbc84b10d 100644 --- a/ceammc/ext/doc/set.diff.pddoc +++ b/ceammc/ext/doc/set.diff.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky difference between two sets - GPL3 + GPL3 or later ceammc data data difference set diff --git a/ceammc/ext/doc/set.equal-help.pd b/ceammc/ext/doc/set.equal-help.pd index 18291647cc..bf79eea5c1 100644 --- a/ceammc/ext/doc/set.equal-help.pd +++ b/ceammc/ext/doc/set.equal-help.pd @@ -40,7 +40,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title data @url ceammc.data-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #X text 608 520 see also:; #X obj 682 520 data.set; #N canvas 10 527 400 290 info 0; @@ -48,7 +48,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 set.equal; #X text 10 76 category:; @@ -58,7 +58,7 @@ #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 data \, equal \, set; #X text 10 186 website:; diff --git a/ceammc/ext/doc/set.equal.pddoc b/ceammc/ext/doc/set.equal.pddoc index 8286507a76..9093d6e18b 100644 --- a/ceammc/ext/doc/set.equal.pddoc +++ b/ceammc/ext/doc/set.equal.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky checks if two sets are equal (contains same elements) - GPL3 + GPL3 or later ceammc data data equal set diff --git a/ceammc/ext/doc/set.intersect-help.pd b/ceammc/ext/doc/set.intersect-help.pd index ebc1f6f1ce..3b51cbbad9 100644 --- a/ceammc/ext/doc/set.intersect-help.pd +++ b/ceammc/ext/doc/set.intersect-help.pd @@ -40,7 +40,7 @@ are ignored.; #X text 115 45 ::; #X obj 131 48 ui.link @title data @url ceammc.data-help.pd; #X obj 1 527 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 530 library: ceammc v0.7.1; +#X text 10 530 library: ceammc v0.8.0; #X text 528 542 see also:; #X obj 602 542 data.set; #X obj 675 542 set.union; @@ -49,7 +49,7 @@ are ignored.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 set.intersect; #X text 10 76 category:; @@ -59,7 +59,7 @@ are ignored.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 data \, intersection \, set; #X text 10 186 website:; diff --git a/ceammc/ext/doc/set.intersect.pddoc b/ceammc/ext/doc/set.intersect.pddoc index 7949f9d0e0..6a35486e39 100644 --- a/ceammc/ext/doc/set.intersect.pddoc +++ b/ceammc/ext/doc/set.intersect.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky output intersection of given sets - GPL3 + GPL3 or later ceammc data data intersection set diff --git a/ceammc/ext/doc/set.size-help.pd b/ceammc/ext/doc/set.size-help.pd index 606e247b6e..e362ee0a5d 100644 --- a/ceammc/ext/doc/set.size-help.pd +++ b/ceammc/ext/doc/set.size-help.pd @@ -28,7 +28,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title data @url ceammc.data-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #X text 608 520 see also:; #X obj 682 520 data.set; #N canvas 10 527 400 290 info 0; @@ -36,7 +36,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 set.size; #X text 10 76 category:; @@ -46,7 +46,7 @@ #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 data \, set \, size; #X text 10 186 website:; diff --git a/ceammc/ext/doc/set.size.pddoc b/ceammc/ext/doc/set.size.pddoc index d356cd415f..df4ad1db12 100644 --- a/ceammc/ext/doc/set.size.pddoc +++ b/ceammc/ext/doc/set.size.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky get number of elements in set - GPL3 + GPL3 or later ceammc data data set size diff --git a/ceammc/ext/doc/set.symdiff-help.pd b/ceammc/ext/doc/set.symdiff-help.pd index 06c20554e7..8d9230f56e 100644 --- a/ceammc/ext/doc/set.symdiff-help.pd +++ b/ceammc/ext/doc/set.symdiff-help.pd @@ -41,7 +41,7 @@ are ignored.; #X text 115 45 ::; #X obj 131 48 ui.link @title data @url ceammc.data-help.pd; #X obj 1 538 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 541 library: ceammc v0.7.1; +#X text 10 541 library: ceammc v0.8.0; #X text 535 553 see also:; #X obj 609 553 data.set; #X obj 682 553 set.diff; @@ -50,7 +50,7 @@ are ignored.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 set.symdiff; #X text 10 76 category:; @@ -60,7 +60,7 @@ are ignored.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 data \, symmetric \, difference \, set; #X text 10 186 website:; diff --git a/ceammc/ext/doc/set.symdiff.pddoc b/ceammc/ext/doc/set.symdiff.pddoc index ee6866bb42..9ec1f5d8e4 100644 --- a/ceammc/ext/doc/set.symdiff.pddoc +++ b/ceammc/ext/doc/set.symdiff.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky symmetric difference between two sets - GPL3 + GPL3 or later ceammc data data symmetric difference set diff --git a/ceammc/ext/doc/set.union-help.pd b/ceammc/ext/doc/set.union-help.pd index 4f3bd042be..0970c29ac6 100644 --- a/ceammc/ext/doc/set.union-help.pd +++ b/ceammc/ext/doc/set.union-help.pd @@ -40,7 +40,7 @@ are ignored.; #X text 115 45 ::; #X obj 131 48 ui.link @title data @url ceammc.data-help.pd; #X obj 1 527 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 530 library: ceammc v0.7.1; +#X text 10 530 library: ceammc v0.8.0; #X text 500 542 see also:; #X obj 574 542 data.set; #X obj 647 542 set.intersect; @@ -49,7 +49,7 @@ are ignored.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 set.union; #X text 10 76 category:; @@ -59,7 +59,7 @@ are ignored.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 data \, union \, set; #X text 10 186 website:; diff --git a/ceammc/ext/doc/set.union.pddoc b/ceammc/ext/doc/set.union.pddoc index f82a50b331..4c0fda4cbd 100644 --- a/ceammc/ext/doc/set.union.pddoc +++ b/ceammc/ext/doc/set.union.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky output union of given sets - GPL3 + GPL3 or later ceammc data data union set diff --git a/ceammc/ext/doc/snd.file-help.pd b/ceammc/ext/doc/snd.file-help.pd index 4c4092338e..5f8f6f75ca 100644 --- a/ceammc/ext/doc/snd.file-help.pd +++ b/ceammc/ext/doc/snd.file-help.pd @@ -87,13 +87,13 @@ of file. Type: property.; #X text 115 45 ::; #X obj 131 48 ui.link @title snd @url ceammc.snd-help.pd; #X obj 1 1015 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1018 library: ceammc v0.7.1; +#X text 10 1018 library: ceammc v0.8.0; #N canvas 10 1037 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 snd.file; #X text 10 76 category:; @@ -103,7 +103,7 @@ of file. Type: property.; #X text 10 120 authors:; #X text 120 120 Pierre Guillot; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 soundfiler; #X text 10 186 website:; diff --git a/ceammc/ext/doc/snd.file.pddoc b/ceammc/ext/doc/snd.file.pddoc index c5e3484ca5..198e9c75eb 100644 --- a/ceammc/ext/doc/snd.file.pddoc +++ b/ceammc/ext/doc/snd.file.pddoc @@ -7,7 +7,7 @@ Pierre Guillot Sound file loader on steroids - GPL3 + GPL3 or later ceammc snd soundfiler diff --git a/ceammc/ext/doc/spat.pan4~-help.pd b/ceammc/ext/doc/spat.pan4~-help.pd index ebd4009d1d..e3cd7924c2 100644 --- a/ceammc/ext/doc/spat.pan4~-help.pd +++ b/ceammc/ext/doc/spat.pan4~-help.pd @@ -7,8 +7,8 @@ #X obj 605 11 pan4~; #X obj 667 11 spat.pan4~; #X obj 50 118 osc~ 1000; -#X obj 165 118 ui.knob @size 40 40; -#X obj 299 118 ui.knob @size 40 40; +#X obj 165 118 ui.knob; +#X obj 299 118 ui.knob; #X obj 165 162 * 6.2831852; #X msg 165 190 @angle \$1; #X msg 299 190 @dist \$1; @@ -60,7 +60,7 @@ value: 1\. Range: 0\...1\.; #X text 115 45 ::; #X obj 131 48 ui.link @title spat @url ceammc.spat-help.pd; #X obj 1 843 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 846 library: ceammc v0.7.1; +#X text 10 846 library: ceammc v0.8.0; #X text 629 858 see also:; #X obj 703 858 pan8~; #N canvas 10 865 400 290 info 0; @@ -68,7 +68,7 @@ value: 1\. Range: 0\...1\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 spat.pan4~; #X text 10 76 category:; @@ -78,7 +78,7 @@ value: 1\. Range: 0\...1\.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 spat \, span; #X text 10 186 website:; diff --git a/ceammc/ext/doc/spat.pan4~.pddoc b/ceammc/ext/doc/spat.pan4~.pddoc index ba1c484772..69131d9868 100644 --- a/ceammc/ext/doc/spat.pan4~.pddoc +++ b/ceammc/ext/doc/spat.pan4~.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky GMEM SPAT: 4-outputs spatializer - GPL3 + GPL3 or later ceammc spat spat span diff --git a/ceammc/ext/doc/spat.pan8~-help.pd b/ceammc/ext/doc/spat.pan8~-help.pd index 2639c9cb11..11484716d0 100644 --- a/ceammc/ext/doc/spat.pan8~-help.pd +++ b/ceammc/ext/doc/spat.pan8~-help.pd @@ -7,8 +7,8 @@ #X obj 605 11 pan8~; #X obj 667 11 spat.pan8~; #X obj 50 118 osc~ 1000; -#X obj 165 118 ui.knob @size 40 40; -#X obj 299 118 ui.knob @size 40 40; +#X obj 165 118 ui.knob; +#X obj 299 118 ui.knob; #X obj 165 162 * 6.2831852; #X msg 165 190 @angle \$1; #X msg 299 190 @dist \$1; @@ -72,7 +72,7 @@ value: 1\. Range: 0\...1\.; #X text 115 45 ::; #X obj 131 48 ui.link @title spat @url ceammc.spat-help.pd; #X obj 1 923 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 926 library: ceammc v0.7.1; +#X text 10 926 library: ceammc v0.8.0; #X text 629 938 see also:; #X obj 703 938 pan4~; #N canvas 10 945 400 290 info 0; @@ -80,7 +80,7 @@ value: 1\. Range: 0\...1\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 spat.pan8~; #X text 10 76 category:; @@ -90,7 +90,7 @@ value: 1\. Range: 0\...1\.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 spat \, pan; #X text 10 186 website:; diff --git a/ceammc/ext/doc/spat.pan8~.pddoc b/ceammc/ext/doc/spat.pan8~.pddoc index 336da52a6a..8442bfb52d 100644 --- a/ceammc/ext/doc/spat.pan8~.pddoc +++ b/ceammc/ext/doc/spat.pan8~.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky GMEM SPAT: 8-outputs spatializer - GPL3 + GPL3 or later ceammc spat spat pan diff --git a/ceammc/ext/doc/speech.flite-help.pd b/ceammc/ext/doc/speech.flite-help.pd index 6518b2f5cc..d8a81f8fe0 100644 --- a/ceammc/ext/doc/speech.flite-help.pd +++ b/ceammc/ext/doc/speech.flite-help.pd @@ -19,7 +19,7 @@ flite TTS engine.; #X obj 50 270 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; #X obj 50 299 metro 1000; #X obj 184 299 ui.menu kal16 slt rms awb; -#X obj 453 299 ui.knob @max 4 @min 1 @size 40 40; +#X obj 453 299 ui.knob @min 1 @max 4; #X obj 50 327 flow.count; #X msg 184 327 @voice \$2; #X floatatom 299 327 5 0 0 0 - - -; @@ -76,13 +76,13 @@ kal16\. Allowed values: kal16 \, slt \, rms \, awb.; #X text 115 45 ::; #X obj 131 48 ui.link @title misc @url ceammc.misc-help.pd; #X obj 1 966 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 969 library: ceammc v0.7.1; +#X text 10 969 library: ceammc v0.8.0; #N canvas 10 988 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 speech.flite; #X text 10 76 category:; @@ -92,7 +92,7 @@ kal16\. Allowed values: kal16 \, slt \, rms \, awb.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 speak \, speech \, flite; #X text 10 186 website:; diff --git a/ceammc/ext/doc/speech.flite.pddoc b/ceammc/ext/doc/speech.flite.pddoc index ff6b6bc6bd..5cba25a120 100644 --- a/ceammc/ext/doc/speech.flite.pddoc +++ b/ceammc/ext/doc/speech.flite.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky render speech to array - GPL3 + GPL3 or later ceammc misc speak speech flite @@ -53,7 +53,7 @@ [T] | -[metro 1000] [ui.menu kal16 slt rms awb] [ui.knob @min=1 @max=4] +[metro 1000] [ui.menu kal16 slt rms awb] [ui.knob @min 1 @max 4] | | | [flow.count] [@voice $2( [F] | | | | | diff --git a/ceammc/ext/doc/string-help.pd b/ceammc/ext/doc/string-help.pd index c0b3eb7c0b..08ff9616ee 100644 --- a/ceammc/ext/doc/string-help.pd +++ b/ceammc/ext/doc/string-help.pd @@ -59,13 +59,13 @@ outputs value.; #X text 115 45 ::; #X obj 131 48 ui.link @title string @url ceammc.string-help.pd; #X obj 1 712 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 715 library: ceammc v0.7.1; +#X text 10 715 library: ceammc v0.8.0; #N canvas 10 734 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 string; #X text 10 76 category:; @@ -75,7 +75,7 @@ outputs value.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 string \, data; #X text 10 186 website:; diff --git a/ceammc/ext/doc/string.contains-help.pd b/ceammc/ext/doc/string.contains-help.pd index 497d14d1f9..9041cfada9 100644 --- a/ceammc/ext/doc/string.contains-help.pd +++ b/ceammc/ext/doc/string.contains-help.pd @@ -39,7 +39,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title string @url ceammc.string-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #X text 572 520 see also:; #X obj 646 520 str.ends_with; #N canvas 10 527 400 290 info 0; @@ -47,7 +47,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 string.contains; #X text 10 76 category:; @@ -57,7 +57,7 @@ #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 contains; #X text 10 186 website:; diff --git a/ceammc/ext/doc/string.contains.pddoc b/ceammc/ext/doc/string.contains.pddoc index f52fe6c2d7..ae35524c31 100644 --- a/ceammc/ext/doc/string.contains.pddoc +++ b/ceammc/ext/doc/string.contains.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky checks if given string contains specified substring - GPL3 + GPL3 or later ceammc string contains diff --git a/ceammc/ext/doc/string.ends_with-help.pd b/ceammc/ext/doc/string.ends_with-help.pd index cd9a1ef50e..062e787d96 100644 --- a/ceammc/ext/doc/string.ends_with-help.pd +++ b/ceammc/ext/doc/string.ends_with-help.pd @@ -38,7 +38,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title string @url ceammc.string-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #X text 558 520 see also:; #X obj 632 520 str.starts_with; #N canvas 10 527 400 290 info 0; @@ -46,7 +46,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 string.ends_with; #X text 10 76 category:; @@ -56,7 +56,7 @@ #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 ends_with; #X text 10 186 website:; diff --git a/ceammc/ext/doc/string.ends_with.pddoc b/ceammc/ext/doc/string.ends_with.pddoc index ae94db91be..d38d13efaa 100644 --- a/ceammc/ext/doc/string.ends_with.pddoc +++ b/ceammc/ext/doc/string.ends_with.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky checks if given string ends with specified suffix - GPL3 + GPL3 or later ceammc string ends_with diff --git a/ceammc/ext/doc/string.equal-help.pd b/ceammc/ext/doc/string.equal-help.pd index 42d08ed0c2..684712eb9a 100644 --- a/ceammc/ext/doc/string.equal-help.pd +++ b/ceammc/ext/doc/string.equal-help.pd @@ -37,7 +37,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title string @url ceammc.string-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #X text 623 520 see also:; #X obj 697 520 string; #N canvas 10 527 400 290 info 0; @@ -45,7 +45,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 string.equal; #X text 10 76 category:; @@ -55,7 +55,7 @@ #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 string \, compare \, euql; #X text 10 186 website:; diff --git a/ceammc/ext/doc/string.equal.pddoc b/ceammc/ext/doc/string.equal.pddoc index 9e019cd8a7..14195815ee 100644 --- a/ceammc/ext/doc/string.equal.pddoc +++ b/ceammc/ext/doc/string.equal.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky check strings for equality - GPL3 + GPL3 or later ceammc string string compare euql diff --git a/ceammc/ext/doc/string.format-help.pd b/ceammc/ext/doc/string.format-help.pd index 946d3a822f..8fdc422ad7 100644 --- a/ceammc/ext/doc/string.format-help.pd +++ b/ceammc/ext/doc/string.format-help.pd @@ -51,13 +51,13 @@ converted to integers. This usefull for hex and octal formatting.; #X text 115 45 ::; #X obj 131 48 ui.link @title string @url ceammc.string-help.pd; #X obj 1 650 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 653 library: ceammc v0.7.1; +#X text 10 653 library: ceammc v0.8.0; #N canvas 10 672 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 string.format; #X text 10 76 category:; @@ -67,7 +67,7 @@ converted to integers. This usefull for hex and octal formatting.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 string \, format; #X text 10 186 website:; diff --git a/ceammc/ext/doc/string.format.pddoc b/ceammc/ext/doc/string.format.pddoc index babc067d88..5b327cea17 100644 --- a/ceammc/ext/doc/string.format.pddoc +++ b/ceammc/ext/doc/string.format.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky formats string like printf. - GPL3 + GPL3 or later ceammc string string format diff --git a/ceammc/ext/doc/string.join-help.pd b/ceammc/ext/doc/string.join-help.pd index b9ae134ef6..cde66dff7f 100644 --- a/ceammc/ext/doc/string.join-help.pd +++ b/ceammc/ext/doc/string.join-help.pd @@ -42,7 +42,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title string @url ceammc.string-help.pd; #X obj 1 571 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 574 library: ceammc v0.7.1; +#X text 10 574 library: ceammc v0.8.0; #X text 580 586 see also:; #X obj 654 586 string.split; #N canvas 10 593 400 290 info 0; @@ -50,7 +50,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 string.join; #X text 10 76 category:; @@ -60,7 +60,7 @@ #X text 10 120 authors:; #X text 120 120 Alex Nadzharov \, Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 join; #X text 10 186 website:; diff --git a/ceammc/ext/doc/string.join.pddoc b/ceammc/ext/doc/string.join.pddoc index fe046ed04b..4582282c0a 100644 --- a/ceammc/ext/doc/string.join.pddoc +++ b/ceammc/ext/doc/string.join.pddoc @@ -8,7 +8,7 @@ Serge Poltavsky joins (concatenates) strings with separator - GPL3 + GPL3 or later ceammc string join diff --git a/ceammc/ext/doc/string.length-help.pd b/ceammc/ext/doc/string.length-help.pd index 96ed8f0502..78f54cf759 100644 --- a/ceammc/ext/doc/string.length-help.pd +++ b/ceammc/ext/doc/string.length-help.pd @@ -27,13 +27,13 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title string @url ceammc.string-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #N canvas 10 527 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 string.length; #X text 10 76 category:; @@ -43,7 +43,7 @@ #X text 10 120 authors:; #X text 120 120 Alex Nadzharov \, Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 string \, length; #X text 10 186 website:; diff --git a/ceammc/ext/doc/string.length.pddoc b/ceammc/ext/doc/string.length.pddoc index e7a185d936..d330473785 100644 --- a/ceammc/ext/doc/string.length.pddoc +++ b/ceammc/ext/doc/string.length.pddoc @@ -8,7 +8,7 @@ Serge Poltavsky number of characters in string (unicode supported) - GPL3 + GPL3 or later ceammc string string length diff --git a/ceammc/ext/doc/string.match-help.pd b/ceammc/ext/doc/string.match-help.pd index 66ade5c332..915f3039c2 100644 --- a/ceammc/ext/doc/string.match-help.pd +++ b/ceammc/ext/doc/string.match-help.pd @@ -20,46 +20,44 @@ of { \, )) instead of } \, .. instead of comma \, `: instead of semicolon; #X msg 520 228 symbol [a-z]((2..4))`..+; #X obj 50 272 symbol; #X obj 50 300 str.match \[a-z\]+`.mp\[34\]; -#X obj 50 329 ui.d @display_type=1; -#X obj 20 368 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 373 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +#X obj 50 329 ui.display @display_type 1 @size 150 18; +#X obj 20 369 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 374 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 -49933 0; -#X text 110 408 1\.; -#X text 150 408 symbol; -#X obj 246 409 cnv 1 24 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 408 RE: regular expression.; -#X obj 20 438 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 443 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +#X text 110 409 1\.; +#X text 150 409 symbol; +#X obj 246 410 cnv 1 24 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 409 RE: regular expression.; +#X obj 20 439 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 444 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; -#X msg 110 478 @re; -#X text 245 478 Get/Set regular expression. Type: symbol.; -#X obj 20 517 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 522 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X msg 110 479 @re; +#X text 245 479 Get/Set regular expression. Type: symbol.; +#X obj 20 518 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 523 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 523 1\.; -#X text 245 523 input string or symbol.; -#X text 110 543 2\.; -#X text 245 543 change regular expression.; -#X obj 20 573 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 578 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 524 1\.; +#X text 245 524 input string or symbol.; +#X text 110 544 2\.; +#X text 245 544 change regular expression.; +#X obj 20 574 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 579 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 579 1\.; -#X text 245 579 output 1 on successfull match \, otherwise 0\.; +#X text 110 580 1\.; +#X text 245 580 output 1 on successfull match \, otherwise 0\.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title string @url ceammc.string-help.pd; -#X obj 1 629 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 632 library: ceammc v0.7.1; -#X text 608 644 see also:; -#X obj 682 644 str.grep; -#N canvas 10 651 400 290 info 0; +#X obj 1 630 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 633 library: ceammc v0.8.0; +#N canvas 10 652 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 string.match; #X text 10 76 category:; @@ -69,7 +67,7 @@ of { \, )) instead of } \, .. instead of comma \, `: instead of semicolon; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 match \, regex; #X text 10 186 website:; @@ -78,7 +76,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 651 pd info; +#X restore 10 652 pd info; #X connect 8 0 14 0; #X connect 9 0 14 0; #X connect 10 0 14 0; diff --git a/ceammc/ext/doc/string.match.pddoc b/ceammc/ext/doc/string.match.pddoc index ee6f1a15b9..6e9ef3eb28 100644 --- a/ceammc/ext/doc/string.match.pddoc +++ b/ceammc/ext/doc/string.match.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky check if string match regular expression - GPL3 + GPL3 or later ceammc string match regex @@ -15,9 +15,6 @@ str.match - - str.grep - Used syntax: re2 (like pcre). Some characters are non-supported in Pd. Use ` @@ -52,7 +49,7 @@ | |. [str.match \[a-z\]+`.mp\[34\] ] | -[ui.d @display_type=1] +[ui.display @display_type=1] ]]> diff --git a/ceammc/ext/doc/string.pddoc b/ceammc/ext/doc/string.pddoc index 31775d100d..90a6c59253 100644 --- a/ceammc/ext/doc/string.pddoc +++ b/ceammc/ext/doc/string.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky string constructor - GPL3 + GPL3 or later ceammc string string data diff --git a/ceammc/ext/doc/string.remove-help.pd b/ceammc/ext/doc/string.remove-help.pd index f022e2e78b..4f28757a89 100644 --- a/ceammc/ext/doc/string.remove-help.pd +++ b/ceammc/ext/doc/string.remove-help.pd @@ -61,13 +61,13 @@ Allowed values: all \, first \, last.; #X text 115 45 ::; #X obj 131 48 ui.link @title string @url ceammc.string-help.pd; #X obj 1 704 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 707 library: ceammc v0.7.1; +#X text 10 707 library: ceammc v0.8.0; #N canvas 10 726 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 string.remove; #X text 10 76 category:; @@ -77,7 +77,7 @@ Allowed values: all \, first \, last.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 remove; #X text 10 186 website:; diff --git a/ceammc/ext/doc/string.remove.pddoc b/ceammc/ext/doc/string.remove.pddoc index 04514b2021..5dd7f359fd 100644 --- a/ceammc/ext/doc/string.remove.pddoc +++ b/ceammc/ext/doc/string.remove.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky remove substring from input string - GPL3 + GPL3 or later ceammc string remove @@ -20,7 +20,7 @@ substring to remove - remove + remove mode alias to @mode all - remove all occurences in input string diff --git a/ceammc/ext/doc/string.replace-help.pd b/ceammc/ext/doc/string.replace-help.pd index 37d5417ed1..ac95ef27d9 100644 --- a/ceammc/ext/doc/string.replace-help.pd +++ b/ceammc/ext/doc/string.replace-help.pd @@ -63,7 +63,7 @@ all. Allowed values: all \, first \, last.; #X text 115 45 ::; #X obj 131 48 ui.link @title string @url ceammc.string-help.pd; #X obj 1 773 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 776 library: ceammc v0.7.1; +#X text 10 776 library: ceammc v0.8.0; #X text 594 788 see also:; #X obj 668 788 str.remove; #N canvas 10 795 400 290 info 0; @@ -71,7 +71,7 @@ all. Allowed values: all \, first \, last.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 string.replace; #X text 10 76 category:; @@ -81,7 +81,7 @@ all. Allowed values: all \, first \, last.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 replace; #X text 10 186 website:; diff --git a/ceammc/ext/doc/string.replace.pddoc b/ceammc/ext/doc/string.replace.pddoc index 9bd6dea891..bd1fb306ca 100644 --- a/ceammc/ext/doc/string.replace.pddoc +++ b/ceammc/ext/doc/string.replace.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky replace from one substring to another in input string - GPL3 + GPL3 or later ceammc string replace @@ -24,9 +24,9 @@ substring to replace - replace from - replace to - replace + replace from + replace to + replace mode alias to @mode all - replace all occurences in input string diff --git a/ceammc/ext/doc/string.split-help.pd b/ceammc/ext/doc/string.split-help.pd index 91198d21ae..fbd9316100 100644 --- a/ceammc/ext/doc/string.split-help.pd +++ b/ceammc/ext/doc/string.split-help.pd @@ -56,7 +56,7 @@ char. To separate by space - use ' ' argument.; #X text 115 45 ::; #X obj 131 48 ui.link @title string @url ceammc.string-help.pd; #X obj 1 586 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 589 library: ceammc v0.7.1; +#X text 10 589 library: ceammc v0.8.0; #X text 587 601 see also:; #X obj 661 601 string.join; #N canvas 10 608 400 290 info 0; @@ -64,7 +64,7 @@ char. To separate by space - use ' ' argument.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 string.split; #X text 10 76 category:; @@ -74,7 +74,7 @@ char. To separate by space - use ' ' argument.; #X text 10 120 authors:; #X text 120 120 Alex Nadzharov \, Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 split; #X text 10 186 website:; diff --git a/ceammc/ext/doc/string.split.pddoc b/ceammc/ext/doc/string.split.pddoc index 00f5133fc7..15516eac17 100644 --- a/ceammc/ext/doc/string.split.pddoc +++ b/ceammc/ext/doc/string.split.pddoc @@ -8,7 +8,7 @@ Serge Poltavsky split string by separator - GPL3 + GPL3 or later ceammc string split diff --git a/ceammc/ext/doc/string.starts_with-help.pd b/ceammc/ext/doc/string.starts_with-help.pd index 7fdd083703..d44b3be71a 100644 --- a/ceammc/ext/doc/string.starts_with-help.pd +++ b/ceammc/ext/doc/string.starts_with-help.pd @@ -38,7 +38,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title string @url ceammc.string-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #X text 572 520 see also:; #X obj 646 520 str.ends_with; #N canvas 10 527 400 290 info 0; @@ -46,7 +46,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 string.starts_with; #X text 10 76 category:; @@ -56,7 +56,7 @@ #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 starts_with; #X text 10 186 website:; diff --git a/ceammc/ext/doc/string.starts_with.pddoc b/ceammc/ext/doc/string.starts_with.pddoc index cf0e62442e..34a48d1ee4 100644 --- a/ceammc/ext/doc/string.starts_with.pddoc +++ b/ceammc/ext/doc/string.starts_with.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky checks if given string starts with specified prefix - GPL3 + GPL3 or later ceammc string starts_with diff --git a/ceammc/ext/doc/string.substr-help.pd b/ceammc/ext/doc/string.substr-help.pd index 3525772b15..fc0ac159e8 100644 --- a/ceammc/ext/doc/string.substr-help.pd +++ b/ceammc/ext/doc/string.substr-help.pd @@ -22,7 +22,7 @@ one character from the end of stirng.; #X text 110 348 2\.; #X text 150 348 int; #X obj 246 349 cnv 1 54 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 348 LENGTH: substring lenght. If -1 given (by default) +#X text 245 348 LENGTH: substring length. If -1 given (by default) \, means 'till string end'.. Min value: 0; #X obj 20 393 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 398 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 @@ -49,7 +49,7 @@ to the end of string. Type: int. Default value: -1\. Min value: 0\.; #X text 115 45 ::; #X obj 131 48 ui.link @title string @url ceammc.string-help.pd; #X obj 1 619 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 622 library: ceammc v0.7.1; +#X text 10 622 library: ceammc v0.8.0; #X text 580 634 see also:; #X obj 654 634 string.split; #N canvas 10 641 400 290 info 0; @@ -57,7 +57,7 @@ to the end of string. Type: int. Default value: -1\. Min value: 0\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 string.substr; #X text 10 76 category:; @@ -67,7 +67,7 @@ to the end of string. Type: int. Default value: -1\. Min value: 0\.; #X text 10 120 authors:; #X text 120 120 Alex Nadzharov \, Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 substring; #X text 10 186 website:; diff --git a/ceammc/ext/doc/string.substr.pddoc b/ceammc/ext/doc/string.substr.pddoc index 20a80e3b73..a933fd59df 100644 --- a/ceammc/ext/doc/string.substr.pddoc +++ b/ceammc/ext/doc/string.substr.pddoc @@ -8,7 +8,7 @@ Serge Poltavsky extract substring from input string - GPL3 + GPL3 or later ceammc string substring @@ -23,7 +23,7 @@ substring position. May be relative: -1 means one character from the end of stirng - substring lenght. If -1 given (by + substring length. If -1 given (by default), means 'till string end'. diff --git a/ceammc/ext/doc/string2symbol-help.pd b/ceammc/ext/doc/string2symbol-help.pd index 6d517d728b..ee0aad6ed2 100644 --- a/ceammc/ext/doc/string2symbol-help.pd +++ b/ceammc/ext/doc/string2symbol-help.pd @@ -30,13 +30,13 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title string @url ceammc.string-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #N canvas 10 527 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 string2symbol; #X text 10 76 category:; @@ -46,7 +46,7 @@ #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 string \, symbol \, convert; #X text 10 186 website:; diff --git a/ceammc/ext/doc/string2symbol.pddoc b/ceammc/ext/doc/string2symbol.pddoc index 0dacd386d9..98b18033b8 100644 --- a/ceammc/ext/doc/string2symbol.pddoc +++ b/ceammc/ext/doc/string2symbol.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky converts string to symbol - GPL3 + GPL3 or later ceammc string string symbol convert diff --git a/ceammc/ext/doc/symbol.equal-help.pd b/ceammc/ext/doc/symbol.equal-help.pd index 85cd985b8b..0cab2dde27 100644 --- a/ceammc/ext/doc/symbol.equal-help.pd +++ b/ceammc/ext/doc/symbol.equal-help.pd @@ -31,13 +31,13 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title symbol @url ceammc.symbol-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #N canvas 10 527 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 symbol.equal; #X text 10 76 category:; @@ -47,7 +47,7 @@ #X text 10 120 authors:; #X text 120 120 Alex Nadzharov \, Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 symbol \, compare; #X text 10 186 website:; diff --git a/ceammc/ext/doc/symbol.equal.pddoc b/ceammc/ext/doc/symbol.equal.pddoc index 78ae47f8ca..6c40b47461 100644 --- a/ceammc/ext/doc/symbol.equal.pddoc +++ b/ceammc/ext/doc/symbol.equal.pddoc @@ -8,7 +8,7 @@ Serge Poltavsky check symbols for equality - GPL3 + GPL3 or later ceammc symbol symbol compare diff --git a/ceammc/ext/doc/symbol.length-help.pd b/ceammc/ext/doc/symbol.length-help.pd index a3a88e41ca..e73a4e8936 100644 --- a/ceammc/ext/doc/symbol.length-help.pd +++ b/ceammc/ext/doc/symbol.length-help.pd @@ -26,13 +26,13 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title symbol @url ceammc.symbol-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #N canvas 10 527 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 symbol.length; #X text 10 76 category:; @@ -42,7 +42,7 @@ #X text 10 120 authors:; #X text 120 120 Alex Nadzharov \, Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 symbol \, length; #X text 10 186 website:; diff --git a/ceammc/ext/doc/symbol.length.pddoc b/ceammc/ext/doc/symbol.length.pddoc index faffb90791..f2ca55656e 100644 --- a/ceammc/ext/doc/symbol.length.pddoc +++ b/ceammc/ext/doc/symbol.length.pddoc @@ -8,7 +8,7 @@ Serge Poltavsky number of characters in symbol (unicode supported) - GPL3 + GPL3 or later ceammc symbol symbol length diff --git a/ceammc/ext/doc/symbol.num_compare-help.pd b/ceammc/ext/doc/symbol.num_compare-help.pd index 671b03bf2b..ef23391ce6 100644 --- a/ceammc/ext/doc/symbol.num_compare-help.pd +++ b/ceammc/ext/doc/symbol.num_compare-help.pd @@ -38,13 +38,13 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title symbol @url ceammc.symbol-help.pd; #X obj 1 549 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 552 library: ceammc v0.7.1; +#X text 10 552 library: ceammc v0.8.0; #N canvas 10 571 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 symbol.num_compare; #X text 10 76 category:; @@ -54,7 +54,7 @@ #X text 10 120 authors:; #X text 120 120 Alex Nadzharov \, Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 symbol \, num_compare \, compare; #X text 10 186 website:; diff --git a/ceammc/ext/doc/symbol.num_compare.pddoc b/ceammc/ext/doc/symbol.num_compare.pddoc index 499adf0573..7951539756 100644 --- a/ceammc/ext/doc/symbol.num_compare.pddoc +++ b/ceammc/ext/doc/symbol.num_compare.pddoc @@ -8,7 +8,7 @@ Serge Poltavsky numeric symbol compare - GPL3 + GPL3 or later ceammc symbol symbol num_compare compare diff --git a/ceammc/ext/doc/synth.bee3~-help.pd b/ceammc/ext/doc/synth.bee3~-help.pd index 4f30a32843..90edbe8d20 100644 --- a/ceammc/ext/doc/synth.bee3~-help.pd +++ b/ceammc/ext/doc/synth.bee3~-help.pd @@ -24,22 +24,21 @@ also referred to as algorithm 8 of the TX81Z; #X obj 20 447 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 482 @adsr; -#X text 245 482 Get/Set ADSR 2 & 4 Target. Type: float. Range: 0\...127\.; +#X text 245 482 Get/Set ADSR 2 & 4 Target. Type: int. Range: 0\...127\.; #X msg 110 511 @freq; -#X text 245 511 Get/Set maximum speed of whistles. Type: float. Default -value: 240\. Range: 20\...480\.; +#X text 245 511 Get/Set maximum speed of whistles. Type: float. Units: +Hz. Default value: 220\. Range: 0\...480\.; #X msg 110 553 @gate; #X text 245 553 Get/Set synth gate (>0 - play). Type: float. Default value: 0\. Range: 0\...1\.; #X msg 110 595 @lfo_depth; -#X text 245 595 Get/Set LFO Speed (cc1). Type: float. Range: 0\...127\.; +#X text 245 595 Get/Set LFO Speed (cc1). Type: int. Range: 0\...127\.; #X msg 110 624 @lfo_speed; -#X text 245 624 Get/Set LFO Speed (cc11). Type: float. Range: 0\...127\.; +#X text 245 624 Get/Set LFO Speed (cc11). Type: int. Range: 0\...127\.; #X msg 110 653 @op3; -#X text 245 653 Get/Set operator 3 gain (cc4). Type: float. Range: -0\...127\.; +#X text 245 653 Get/Set operator 3 gain (cc4). Type: int. Range: 0\...127\.; #X msg 110 682 @op4; -#X text 245 682 Get/Set operator 4 (feedback) gain (cc2). Type: float. +#X text 245 682 Get/Set operator 4 (feedback) gain (cc2). Type: int. Range: 0\...127\.; #X obj 20 734 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 739 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 @@ -66,13 +65,13 @@ Range: 0\...127\.; #X text 115 45 ::; #X obj 131 48 ui.link @title synth @url ceammc.synth-help.pd; #X obj 1 947 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 950 library: ceammc v0.7.1; +#X text 10 950 library: ceammc v0.8.0; #N canvas 10 969 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 synth.bee3~; #X text 10 76 category:; @@ -82,7 +81,7 @@ Range: 0\...127\.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 hammond \, synth \, fm; #X text 10 186 website:; diff --git a/ceammc/ext/doc/synth.bee3~.pddoc b/ceammc/ext/doc/synth.bee3~.pddoc index e27737d459..6608f662d9 100644 --- a/ceammc/ext/doc/synth.bee3~.pddoc +++ b/ceammc/ext/doc/synth.bee3~.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky Hammond-oid organ FM synthesis instrument - GPL3 + GPL3 or later ceammc synth hammond synth fm @@ -18,19 +18,19 @@ 8 of the TX81Z - maximum - speed of whistles + maximum speed of whistles synth gate (>0 - play) - operator 4 (feedback) - gain (cc2) - operator 3 gain + operator 4 (feedback) gain + (cc2) + operator 3 gain (cc4) - LFO Speed + LFO Speed (cc11) - LFO Speed + LFO Speed (cc1) - ADSR 2 & 4 + ADSR 2 & 4 Target diff --git a/ceammc/ext/doc/synth.birds~-help.pd b/ceammc/ext/doc/synth.birds~-help.pd index 8fb06e9a07..05822631f8 100644 --- a/ceammc/ext/doc/synth.birds~-help.pd +++ b/ceammc/ext/doc/synth.birds~-help.pd @@ -5,8 +5,8 @@ #X obj 1 1 cnv 5 765 40 empty empty synth.birds~ 20 20 0 20 -104026 -4096 0; #X obj 653 11 synth.birds~; -#X obj 50 118 ui.knob @size 40 40; -#X obj 270 118 ui.knob @size 40 40; +#X obj 50 118 ui.knob; +#X obj 270 118 ui.knob; #X obj 50 176 lin->lin 0 1 120 480; #X obj 270 176 lin->lin 0 1 25 100; #X msg 50 205 @speed \$1; @@ -20,37 +20,40 @@ #X obj 20 402 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 407 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; -#X msg 110 442 @probability; -#X text 245 442 Get/Set whistles probability. Type: float. Default +#X msg 110 442 @active; +#X text 245 442 Get/Set on/off dsp processing. Type: int. Default value: +1\. Allowed values: 0 \, 1\.; +#X msg 110 484 @probability; +#X text 245 484 Get/Set whistles probability. Type: float. Default value: 50\. Range: 25\...100\.; -#X msg 110 484 @speed; -#X text 245 484 Get/Set maximum speed of whistles. Type: float. Default +#X msg 110 526 @speed; +#X text 245 526 Get/Set maximum speed of whistles. Type: float. Default value: 240\. Range: 120\...480\.; -#X obj 20 536 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 541 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X obj 20 578 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 583 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 542 1\.; -#X text 245 542 control inlet.; -#X obj 20 572 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 577 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 584 1\.; +#X text 245 584 control inlet.; +#X obj 20 614 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 619 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 578 1\.; -#X text 245 578; -#X text 110 598 2\.; -#X text 245 598; +#X text 110 620 1\.; +#X text 245 620; +#X text 110 640 2\.; +#X text 245 640; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title synth @url ceammc.synth-help.pd; -#X obj 1 648 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 651 library: ceammc v0.7.1; -#N canvas 10 670 400 290 info 0; +#X obj 1 690 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 693 library: ceammc v0.8.0; +#N canvas 10 712 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 synth.birds~; #X text 10 76 category:; @@ -60,7 +63,7 @@ value: 240\. Range: 120\...480\.; #X text 10 120 authors:; #X text 120 120 Pierre Cochard \, Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 birds; #X text 10 186 website:; @@ -69,7 +72,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 670 pd info; +#X restore 10 712 pd info; #X connect 4 0 6 0; #X connect 5 0 7 0; #X connect 6 0 8 0; diff --git a/ceammc/ext/doc/synth.birds~.pddoc b/ceammc/ext/doc/synth.birds~.pddoc index c89f0100d4..c363f54a3f 100644 --- a/ceammc/ext/doc/synth.birds~.pddoc +++ b/ceammc/ext/doc/synth.birds~.pddoc @@ -8,7 +8,7 @@ Serge Poltavsky bird singing generator - GPL3 + GPL3 or later ceammc synth birds @@ -19,6 +19,8 @@ maximum speed of whistles whistles probability + on/off dsp + processing diff --git a/ceammc/ext/doc/synth.church_bell~-help.pd b/ceammc/ext/doc/synth.church_bell~-help.pd index 19aa297be5..ed2bd86d4f 100644 --- a/ceammc/ext/doc/synth.church_bell~-help.pd +++ b/ceammc/ext/doc/synth.church_bell~-help.pd @@ -17,7 +17,7 @@ from the bottom to the top of the bell; #X msg 50 310 1; #X obj 309 310 random.int 0 7; #X obj 50 339 flow.append 0 @delay 10; -#X obj 309 339 ui.radio @size 127 15; +#X obj 309 339 ui.radio; #X msg 50 367 @gate \$1; #X msg 309 367 @pos \$1; #X obj 50 396 synth.church_bell~; @@ -27,44 +27,47 @@ from the bottom to the top of the bell; #X obj 20 522 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 527 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; -#X msg 110 562 @cutoff; -#X text 245 562 Get/Set cutoff coefficent. Type: float. Default value: +#X msg 110 562 @active; +#X text 245 562 Get/Set on/off dsp processing. Type: int. Default value: +1\. Allowed values: 0 \, 1\.; +#X msg 110 604 @cutoff; +#X text 245 604 Get/Set cutoff coefficent. Type: float. Default value: 6500\. Range: 20\...20000\.; -#X msg 110 604 @gain; -#X text 245 604 Get/Set pluck gain. Type: float. Default value: 1\. +#X msg 110 646 @gain; +#X text 245 646 Get/Set pluck gain. Type: float. Default value: 1\. Range: 0\...1\.; -#X msg 110 646 @gate; -#X text 245 646 Get/Set play trigger - 1: on \, 0: off. Type: float. +#X msg 110 688 @gate; +#X text 245 688 Get/Set play trigger - 1: on \, 0: off. Type: float. Default value: 0\. Range: 0\...1\.; -#X msg 110 688 @pos; -#X text 245 688 Get/Set strike position (0 is on the bottom). Type: +#X msg 110 730 @pos; +#X text 245 730 Get/Set strike position (0 is on the bottom). Type: int. Default value: 0\. Range: 0\...6\.; -#X msg 110 730 @sharp; -#X text 245 730 Get/Set strike sharpness. Type: float. Default value: +#X msg 110 772 @sharp; +#X text 245 772 Get/Set strike sharpness. Type: float. Default value: 0.5\. Range: 0.01\...5\.; -#X obj 20 782 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 787 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X obj 20 824 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 829 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 788 1\.; -#X text 245 788 input signal.; -#X obj 20 818 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 823 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 830 1\.; +#X text 245 830 input signal.; +#X obj 20 860 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 865 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 824 1\.; -#X text 245 824; +#X text 110 866 1\.; +#X text 245 866; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title synth @url ceammc.synth-help.pd; -#X obj 1 874 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 877 library: ceammc v0.7.1; -#N canvas 10 896 400 290 info 0; +#X obj 1 916 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 919 library: ceammc v0.8.0; +#N canvas 10 938 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 synth.church_bell~; #X text 10 76 category:; @@ -74,7 +77,7 @@ int. Default value: 0\. Range: 0\...6\.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 bell \, church; #X text 10 186 website:; @@ -83,7 +86,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 896 pd info; +#X restore 10 938 pd info; #X connect 8 0 9 0; #X connect 9 0 10 0; #X connect 10 0 11 0; diff --git a/ceammc/ext/doc/synth.church_bell~.pddoc b/ceammc/ext/doc/synth.church_bell~.pddoc index 82fc35e09b..d797ad4e48 100644 --- a/ceammc/ext/doc/synth.church_bell~.pddoc +++ b/ceammc/ext/doc/synth.church_bell~.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky generic church bell modal model - GPL3 + GPL3 or later ceammc synth bell church @@ -31,6 +31,8 @@ cutoff coefficent play trigger - 1: on, 0: off + on/off dsp + processing diff --git a/ceammc/ext/doc/synth.dubdub~-help.pd b/ceammc/ext/doc/synth.dubdub~-help.pd index ae8f1f4bc9..f154de7cb0 100644 --- a/ceammc/ext/doc/synth.dubdub~-help.pd +++ b/ceammc/ext/doc/synth.dubdub~-help.pd @@ -11,8 +11,8 @@ resonant lowpass; #X obj 242 190 > 0; #X msg 50 219 @pitch \$1 \, @gate \$2; #X obj 69 248 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; -#X obj 328 248 ui.knob @size 40 40; -#X obj 434 248 ui.knob @size 40 40; +#X obj 328 248 ui.knob; +#X obj 434 248 ui.knob; #X obj 69 277 metro.pattern 200 150 50; #X msg 328 291 @q \$1; #X obj 434 291 lin->lin 0 1 100 8000; @@ -29,41 +29,44 @@ resonant lowpass; #X obj 20 575 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 580 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; -#X msg 110 615 @cutoff; -#X text 245 615 Get/Set cutoff frequency. Type: float. Default value: +#X msg 110 615 @active; +#X text 245 615 Get/Set on/off dsp processing. Type: int. Default value: +1\. Allowed values: 0 \, 1\.; +#X msg 110 657 @cutoff; +#X text 245 657 Get/Set cutoff frequency. Type: float. Default value: 3000\. Range: 20\...20000\.; -#X msg 110 657 @gate; -#X text 245 657 Get/Set play trigger - 1: on \, 0: off. Type: float. +#X msg 110 699 @gate; +#X text 245 699 Get/Set play trigger - 1: on \, 0: off. Type: float. Default value: 0\. Range: 0\...1\.; -#X msg 110 699 @pitch; -#X text 245 699 Get/Set pitch. Type: float. Default value: 48\. Range: +#X msg 110 741 @pitch; +#X text 245 741 Get/Set pitch. Type: float. Default value: 48\. Range: 24\...84\.; -#X msg 110 741 @q; -#X text 245 741 Get/Set quality factor. Type: float. Default value: +#X msg 110 783 @q; +#X text 245 783 Get/Set quality factor. Type: float. Default value: 0.1\. Range: 0.01\...100\.; -#X obj 20 793 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 798 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X obj 20 835 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 840 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 799 1\.; -#X text 245 799 input control.; -#X obj 20 829 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 834 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 841 1\.; +#X text 245 841 input control.; +#X obj 20 871 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 876 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 835 1\.; -#X text 245 835; +#X text 110 877 1\.; +#X text 245 877; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title synth @url ceammc.synth-help.pd; -#X obj 1 885 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 888 library: ceammc v0.7.1; -#N canvas 10 907 400 290 info 0; +#X obj 1 927 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 930 library: ceammc v0.8.0; +#N canvas 10 949 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 synth.dubdub~; #X text 10 76 category:; @@ -73,7 +76,7 @@ Default value: 0\. Range: 0\...1\.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 dubdub \, saw; #X text 10 186 website:; @@ -82,7 +85,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 907 pd info; +#X restore 10 949 pd info; #X connect 4 0 5 0; #X connect 5 0 7 0; #X connect 8 0 11 0; diff --git a/ceammc/ext/doc/synth.dubdub~.pddoc b/ceammc/ext/doc/synth.dubdub~.pddoc index 02d0aae9bf..e26bf4cadf 100644 --- a/ceammc/ext/doc/synth.dubdub~.pddoc +++ b/ceammc/ext/doc/synth.dubdub~.pddoc @@ -8,7 +8,7 @@ simple synth based on a sawtooth wave filtered by a resonant lowpass - GPL3 + GPL3 or later ceammc synth dubdub saw @@ -23,6 +23,8 @@ - 1: on, 0: off quality factor + on/off dsp + processing diff --git a/ceammc/ext/doc/synth.eguitar~-help.pd b/ceammc/ext/doc/synth.eguitar~-help.pd index 77e72d864b..62cb6c2d64 100644 --- a/ceammc/ext/doc/synth.eguitar~-help.pd +++ b/ceammc/ext/doc/synth.eguitar~-help.pd @@ -9,8 +9,8 @@ #X obj 50 147 metro 130; #X msg 50 176 0 12 0 36 7 12; #X obj 50 205 list.choice; -#X obj 251 205 ui.knob @size 40 40; -#X obj 376 205 ui.knob @size 40 40; +#X obj 251 205 ui.knob; +#X obj 376 205 ui.knob; #X obj 50 234 + 36; #X msg 50 262 @pitch \$1 \, @gate 1; #X msg 251 262 @pos \$1; @@ -23,44 +23,47 @@ #X obj 20 474 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 479 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; -#X msg 110 514 @gain; -#X text 245 514 Get/Set pluck gain. Type: float. Default value: 1\. +#X msg 110 514 @active; +#X text 245 514 Get/Set on/off dsp processing. Type: int. Default value: +1\. Allowed values: 0 \, 1\.; +#X msg 110 556 @gain; +#X text 245 556 Get/Set pluck gain. Type: float. Default value: 1\. Range: 0\...1\.; -#X msg 110 556 @gate; -#X text 245 556 Get/Set play trigger - 1: on \, 0: off. Type: float. +#X msg 110 598 @gate; +#X text 245 598 Get/Set play trigger - 1: on \, 0: off. Type: float. Default value: 0\. Range: 0\...1\.; -#X msg 110 598 @mute; -#X text 245 598 Get/Set mute coefficient (0 for no mute and 1 for instant +#X msg 110 640 @mute; +#X text 245 640 Get/Set mute coefficient (0 for no mute and 1 for instant mute). Type: float. Default value: 0\. Range: 0\...1\.; -#X msg 110 640 @pitch; -#X text 245 640 Get/Set pitch. Type: float. Default value: 48\. Range: +#X msg 110 682 @pitch; +#X text 245 682 Get/Set pitch. Type: float. Default value: 48\. Range: 36\...84\.; -#X msg 110 682 @pos; -#X text 245 682 Get/Set pluck position (1 is on the bridge). Type: +#X msg 110 724 @pos; +#X text 245 724 Get/Set pluck position (1 is on the bridge). Type: float. Default value: 0.5\. Range: 0\...1\.; -#X obj 20 734 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 739 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X obj 20 776 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 781 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 740 1\.; -#X text 245 740 input signal.; -#X obj 20 770 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 775 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 782 1\.; +#X text 245 782 input signal.; +#X obj 20 812 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 817 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 776 1\.; -#X text 245 776; +#X text 110 818 1\.; +#X text 245 818; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title synth @url ceammc.synth-help.pd; -#X obj 1 826 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 829 library: ceammc v0.7.1; -#N canvas 10 848 400 290 info 0; +#X obj 1 868 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 871 library: ceammc v0.8.0; +#N canvas 10 890 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 synth.eguitar~; #X text 10 76 category:; @@ -70,7 +73,7 @@ float. Default value: 0.5\. Range: 0\...1\.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 guitar \, electric; #X text 10 186 website:; @@ -79,7 +82,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 848 pd info; +#X restore 10 890 pd info; #X connect 4 0 5 0; #X connect 5 0 6 0; #X connect 6 0 7 0; diff --git a/ceammc/ext/doc/synth.eguitar~.pddoc b/ceammc/ext/doc/synth.eguitar~.pddoc index a790943faa..109d8db817 100644 --- a/ceammc/ext/doc/synth.eguitar~.pddoc +++ b/ceammc/ext/doc/synth.eguitar~.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky simple electric guitar model with steel strings - GPL3 + GPL3 or later ceammc synth guitar electric @@ -24,6 +24,8 @@ gain play trigger - 1: on, 0: off + on/off dsp + processing diff --git a/ceammc/ext/doc/synth.fgrain~-help.pd b/ceammc/ext/doc/synth.fgrain~-help.pd index 1c0495df7c..c491c06a03 100644 --- a/ceammc/ext/doc/synth.fgrain~-help.pd +++ b/ceammc/ext/doc/synth.fgrain~-help.pd @@ -6,9 +6,9 @@ -4096 0; #X obj 645 11 synth.fgrain~; #X obj 50 118 loadbang; -#X msg 50 147 open %DOC%/sound/voice.wav; +#X msg 50 147 open %CEAMMC%/guitar1.wav; #X obj 50 176 expand_env; -#X obj 338 176 ui.knob @size 40 40; +#X obj 338 176 ui.knob; #X floatatom 69 205 5 0 0 0 - - -; #X floatatom 194 205 5 0 0 0 - - -; #X msg 69 234 @voices \$1; @@ -51,20 +51,20 @@ produces a trapezoidal window. Type: float. Default value: 0.5\. Range: #X msg 110 770 @random; #X text 245 770 Get/Set factor used when setting individual grain parameters. This random factor is applied when all grain state durations are calculated. -If set to 0.0 \, no randomness occurs. When @random=1.0 \, a grain +If set to 0.0 \, no randomness occurs. When @random=0.5 \, a grain segment of length duration will be randomly augmented by up to +-duration seconds (i.e. \, a 30 millisecond length will be augmented by an extra -length of up to +30 or -30 milliseconds). Type: float. Default value: -0.1\. Range: 0\...1\.; +length of up to +15 or -15 milliseconds). Type: float. Default value: +0.1\. Range: 0\...0.97\.; #X msg 110 902 @stretch; #X text 245 902 Get/Set stretch factor used for grain playback (1 - 1000). Granular synthesis allows for time-stetching without affecting the original pitch of a sound. A stretch factor of 4 will produce a resulting sound of length 4 times the orignal sound. The default parameter -of 1 produces no stretching. Type: int. Default value: 1\. Range: 1\...100\.; +of 1 produces no stretching. Type: int. Default value: 1\. Range: 1\...1000\.; #X msg 110 1004 @voices; #X text 245 1004 Get/Set number of simultaneous grain "voices" to use. -Type: int. Default value: 1\. Range: 0\...1000\.; +Type: int. Default value: 1\. Range: 0\...200\.; #X obj 20 1056 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 1061 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; @@ -92,13 +92,13 @@ the file start.; #X text 115 45 ::; #X obj 131 48 ui.link @title synth @url ceammc.synth-help.pd; #X obj 1 1301 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1304 library: ceammc v0.7.1; +#X text 10 1304 library: ceammc v0.8.0; #N canvas 10 1323 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 synth.fgrain~; #X text 10 76 category:; @@ -108,7 +108,7 @@ the file start.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 grain; #X text 10 186 website:; diff --git a/ceammc/ext/doc/synth.fgrain~.pddoc b/ceammc/ext/doc/synth.fgrain~.pddoc index f8b77ff896..5e00f5c992 100644 --- a/ceammc/ext/doc/synth.fgrain~.pddoc +++ b/ceammc/ext/doc/synth.fgrain~.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky file granulator from STK - GPL3 + GPL3 or later ceammc synth grain @@ -23,19 +23,19 @@ path file to granulate. Only WAV and AIFF formats are supported. - number of + number of simultaneous grain "voices" to use - stretch + stretch factor used for grain playback (1 - 1000). Granular synthesis allows for time-stetching without affecting the original pitch of a sound. A stretch factor of 4 will produce a resulting sound of length 4 times the orignal sound. The default parameter of 1 produces no stretching. - factor + factor used when setting individual grain parameters. This random factor is applied when all grain state durations are calculated. If set to 0.0, no randomness occurs. When - @random=1.0, a grain segment of length duration will be randomly augmented by up to + @random=0.5, a grain segment of length duration will be randomly augmented by up to +-duration seconds (i.e., a 30 millisecond length will be augmented by an extra length - of up to +30 or -30 milliseconds) + of up to +15 or -15 milliseconds) grain ramp. For values of @gramp greater than zero, a linear envelope will be applied to each grain. If @gramp = 1, the resultant grain "window" is triangular while @gramp = 0.5 @@ -60,7 +60,7 @@ Serge Poltavsky Karplus-Strong string - GPL3 + GPL3 or later ceammc synth karplus strong @@ -30,6 +30,8 @@ excitation mode: 0 - pluck, 1 - strike play trigger - 1: on, 0: off + on/off dsp + processing diff --git a/ceammc/ext/doc/synth.marimba~-help.pd b/ceammc/ext/doc/synth.marimba~-help.pd index 8f8dffc48c..79eb670d3d 100644 --- a/ceammc/ext/doc/synth.marimba~-help.pd +++ b/ceammc/ext/doc/synth.marimba~-help.pd @@ -10,62 +10,65 @@ tone bar connected to tube; #X obj 50 147 metro 130; #X msg 50 176 0 12 0 36 7 12; #X obj 50 205 list.choice; -#X obj 251 205 ui.knob @size 40 40; -#X obj 482 205 ui.knob @size 40 40; +#X obj 251 205 ui.knob @min 0 @max 4; +#X obj 482 205 ui.knob; #X obj 50 234 + 36; #X msg 50 262 @pitch \$1 \, @gate 1; #X msg 251 262 @pos \$1; #X msg 482 262 @sharp \$1; -#X obj 50 291 flow.append gate 0 @msg @delay 10; +#X obj 50 291 flow.append @gate 0 @msg @delay 10; #X obj 50 349 synth.marimba~; -#X obj 50 378 fx.freeverb~ @roomsize 0.95 @drywet 0.001; +#X obj 50 378 fx.freeverb~ @room 0.95 @drywet 0.001; #X obj 50 406 ui.gain~ @size 120 16; #X obj 50 435 dac~; #X obj 50 464 ui.dsp~; #X obj 20 503 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 508 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; -#X msg 110 543 @cutoff; -#X text 245 543 Get/Set cuttoff frequency of the strike generator. +#X msg 110 543 @active; +#X text 245 543 Get/Set on/off dsp processing. Type: int. Default value: +1\. Allowed values: 0 \, 1\.; +#X msg 110 585 @cutoff; +#X text 245 585 Get/Set cuttoff frequency of the strike generator. Type: float. Default value: 7000\. Range: 1000\...10000\.; -#X msg 110 585 @gain; -#X text 245 585 Get/Set strike gain. Type: float. Default value: 1\. +#X msg 110 627 @gain; +#X text 245 627 Get/Set strike gain. Type: float. Default value: 1\. Range: 0\...1\.; -#X msg 110 627 @gate; -#X text 245 627 Get/Set play trigger - 1: on \, 0: off. Type: float. +#X msg 110 669 @gate; +#X text 245 669 Get/Set play trigger - 1: on \, 0: off. Type: float. Default value: 0\. Range: 0\...1\.; -#X msg 110 669 @pitch; -#X text 245 669 Get/Set pitch. Type: float. Default value: 48\. Range: +#X msg 110 711 @pitch; +#X text 245 711 Get/Set pitch. Type: float. Default value: 48\. Range: 36\...84\.; -#X msg 110 711 @pos; -#X text 245 711 Get/Set excitation position. Type: float. Default value: +#X msg 110 753 @pos; +#X text 245 753 Get/Set excitation position. Type: float. Default value: 0\. Range: 0\...4\.; -#X msg 110 753 @sharp; -#X text 245 753 Get/Set sharpness of the strike. Type: float. Default +#X msg 110 795 @sharp; +#X text 245 795 Get/Set sharpness of the strike. Type: float. Default value: 0.25\. Range: 0.01\...1\.; -#X obj 20 805 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 810 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X obj 20 847 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 852 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 811 1\.; -#X text 245 811 input signal.; -#X obj 20 841 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 846 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 853 1\.; +#X text 245 853 input signal.; +#X obj 20 883 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 888 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 847 1\.; -#X text 245 847; +#X text 110 889 1\.; +#X text 245 889; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title synth @url ceammc.synth-help.pd; -#X obj 1 897 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 900 library: ceammc v0.7.1; -#N canvas 10 919 400 290 info 0; +#X obj 1 939 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 942 library: ceammc v0.8.0; +#N canvas 10 961 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 synth.marimba~; #X text 10 76 category:; @@ -75,7 +78,7 @@ value: 0.25\. Range: 0.01\...1\.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 marimba; #X text 10 186 website:; @@ -84,7 +87,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 919 pd info; +#X restore 10 961 pd info; #X connect 4 0 5 0; #X connect 5 0 6 0; #X connect 6 0 7 0; diff --git a/ceammc/ext/doc/synth.marimba~.pddoc b/ceammc/ext/doc/synth.marimba~.pddoc index 5271143abf..50a7b0b77e 100644 --- a/ceammc/ext/doc/synth.marimba~.pddoc +++ b/ceammc/ext/doc/synth.marimba~.pddoc @@ -8,7 +8,7 @@ simple marimba physical model implementing a single tone bar connected to tube - GPL3 + GPL3 or later ceammc synth marimba @@ -27,6 +27,8 @@ gain play trigger - 1: on, 0: off + on/off dsp + processing @@ -51,13 +53,13 @@ | | | [@pitch $1, @gate 1( [@pos $1 #b( [@sharp $1 #c( | -[flow.append gate 0 @msg @delay 10] +[flow.append @gate 0 @msg @delay 10] | | | [synth.marimba~ #a] | -[fx.freeverb~ @roomsize 0.95 @drywet 0.001] +[fx.freeverb~ @room 0.95 @drywet 0.001] | [ui.gain~ @size 120 16] |\ diff --git a/ceammc/ext/doc/synth.rhodey~-help.pd b/ceammc/ext/doc/synth.rhodey~-help.pd index 14da7674f1..bbde830832 100644 --- a/ceammc/ext/doc/synth.rhodey~-help.pd +++ b/ceammc/ext/doc/synth.rhodey~-help.pd @@ -24,22 +24,22 @@ #X obj 20 447 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 482 @adsr; -#X text 245 482 Get/Set ADSR 2 & 4 Target. Type: float. Range: 0\...127\.; +#X text 245 482 Get/Set ADSR 2 & 4 Target. Type: int. Range: 0\...127\.; #X msg 110 511 @freq; -#X text 245 511 Get/Set maximum speed of whistles. Type: float. Default -value: 240\. Range: 20\...480\.; +#X text 245 511 Get/Set maximum speed of whistles. Type: float. Units: +Hz. Default value: 220\. Range: 0\...480\.; #X msg 110 553 @gate; #X text 245 553 Get/Set synth gate (>0 - play). Type: float. Default value: 0\. Range: 0\...1\.; #X msg 110 595 @lfo_depth; -#X text 245 595 Get/Set LFO Speed (cc1). Type: float. Range: 0\...127\.; +#X text 245 595 Get/Set LFO Speed (cc1). Type: int. Range: 0\...127\.; #X msg 110 624 @lfo_speed; -#X text 245 624 Get/Set LFO Speed (cc11). Type: float. Range: 0\...127\.; +#X text 245 624 Get/Set LFO Speed (cc11). Type: int. Range: 0\...127\.; #X msg 110 653 @mod; -#X text 245 653 Get/Set modulator index one (cc2). Type: float. Range: +#X text 245 653 Get/Set modulator index one (cc2). Type: int. Range: 0\...127\.; #X msg 110 695 @xfade; -#X text 245 695 Get/Set crossfade of outputs (cc4). Type: float. Range: +#X text 245 695 Get/Set crossfade of outputs (cc4). Type: int. Range: 0\...127\.; #X obj 20 747 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 752 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 @@ -66,13 +66,13 @@ value: 0\. Range: 0\...1\.; #X text 115 45 ::; #X obj 131 48 ui.link @title synth @url ceammc.synth-help.pd; #X obj 1 960 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 963 library: ceammc v0.7.1; +#X text 10 963 library: ceammc v0.8.0; #N canvas 10 982 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 synth.rhodey~; #X text 10 76 category:; @@ -82,7 +82,7 @@ value: 0\. Range: 0\...1\.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 rhodes \, fender \, synth \, fm; #X text 10 186 website:; diff --git a/ceammc/ext/doc/synth.rhodey~.pddoc b/ceammc/ext/doc/synth.rhodey~.pddoc index a37f67a04c..75098f88b3 100644 --- a/ceammc/ext/doc/synth.rhodey~.pddoc +++ b/ceammc/ext/doc/synth.rhodey~.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky STK Fender Rhodes electric piano FM synthesis instrument - GPL3 + GPL3 or later ceammc synth rhodes fender synth fm @@ -18,19 +18,19 @@ algorithm 5 of the TX81Z - maximum - speed of whistles + maximum speed of whistles synth gate (>0 - play) - modulator index one + modulator index one (cc2) - crossfade of outputs + crossfade of outputs (cc4) - LFO Speed + LFO Speed (cc11) - LFO Speed + LFO Speed (cc1) - ADSR 2 & 4 + ADSR 2 & 4 Target diff --git a/ceammc/ext/doc/synth.risset_arp~-help.pd b/ceammc/ext/doc/synth.risset_arp~-help.pd index 7b969c0f44..6d7c925f1b 100644 --- a/ceammc/ext/doc/synth.risset_arp~-help.pd +++ b/ceammc/ext/doc/synth.risset_arp~-help.pd @@ -8,7 +8,7 @@ #X obj 50 118 r $0s; #X floatatom 136 118 5 0 0 0 - - -; #X floatatom 242 118 5 0 0 0 - - -; -#X obj 405 118 ui.sliders @size 150 100; +#X obj 405 118 ui.sliders; #X msg 136 147 @freq \$1; #X msg 242 147 @detune \$1; #X obj 50 176 synth.risset_arp~; @@ -23,64 +23,67 @@ #X obj 20 359 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 364 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; -#X msg 110 399 @detune; -#X text 245 399 Get/Set detune percent. Type: float. Default value: +#X msg 110 399 @active; +#X text 245 399 Get/Set on/off dsp processing. Type: int. Default value: +1\. Allowed values: 0 \, 1\.; +#X msg 110 441 @detune; +#X text 245 441 Get/Set detune percent. Type: float. Default value: 5\. Range: 0\...1000\.; -#X msg 110 441 @freq; -#X text 245 441 Get/Set base frequency. Type: float. Default value: +#X msg 110 483 @freq; +#X text 245 483 Get/Set base frequency. Type: float. Default value: 100\. Range: 40\...500\.; -#X msg 110 483 @harmonic1; -#X text 245 483 Get/Set 1st harmonic amplitude. Type: float. Default +#X msg 110 525 @harmonic1; +#X text 245 525 Get/Set 1st harmonic amplitude. Type: float. Default value: 1\. Range: 0\...1\.; -#X msg 110 525 @harmonic2; -#X text 245 525 Get/Set 2nd harmonic amplitude. Type: float. Default +#X msg 110 567 @harmonic2; +#X text 245 567 Get/Set 2nd harmonic amplitude. Type: float. Default value: 1\. Range: 0\...1\.; -#X msg 110 567 @harmonic3; -#X text 245 567 Get/Set 3rd harmonic amplitude. Type: float. Default +#X msg 110 609 @harmonic3; +#X text 245 609 Get/Set 3rd harmonic amplitude. Type: float. Default value: 1\. Range: 0\...1\.; -#X msg 110 609 @harmonic4; -#X text 245 609 Get/Set 4th harmonic amplitude. Type: float. Default +#X msg 110 651 @harmonic4; +#X text 245 651 Get/Set 4th harmonic amplitude. Type: float. Default value: 1\. Range: 0\...1\.; -#X msg 110 651 @harmonic5; -#X text 245 651 Get/Set 5th harmonic amplitude. Type: float. Default +#X msg 110 693 @harmonic5; +#X text 245 693 Get/Set 5th harmonic amplitude. Type: float. Default value: 1\. Range: 0\...1\.; -#X msg 110 693 @harmonic6; -#X text 245 693 Get/Set 6th harmonic amplitude. Type: float. Default +#X msg 110 735 @harmonic6; +#X text 245 735 Get/Set 6th harmonic amplitude. Type: float. Default value: 1\. Range: 0\...1\.; -#X msg 110 735 @harmonic7; -#X text 245 735 Get/Set 7th harmonic amplitude. Type: float. Default +#X msg 110 777 @harmonic7; +#X text 245 777 Get/Set 7th harmonic amplitude. Type: float. Default value: 1\. Range: 0\...1\.; -#X msg 110 777 @harmonic8; -#X text 245 777 Get/Set 8th harmonic amplitude. Type: float. Default +#X msg 110 819 @harmonic8; +#X text 245 819 Get/Set 8th harmonic amplitude. Type: float. Default value: 1\. Range: 0\...1\.; -#X msg 110 819 @spread; -#X text 245 819 Get/Set stereo spread. Type: float. Default value: +#X msg 110 861 @spread; +#X text 245 861 Get/Set stereo spread. Type: float. Default value: 1\. Range: 0\...1\.; -#X obj 20 871 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 876 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X obj 20 913 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 918 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 877 1\.; -#X text 245 877 control inlet.; -#X obj 20 907 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 912 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 919 1\.; +#X text 245 919 control inlet.; +#X obj 20 949 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 954 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 913 1\.; -#X text 245 913; -#X text 110 933 2\.; -#X text 245 933; +#X text 110 955 1\.; +#X text 245 955; +#X text 110 975 2\.; +#X text 245 975; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title synth @url ceammc.synth-help.pd; -#X obj 1 983 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 986 library: ceammc v0.7.1; -#N canvas 10 1005 400 290 info 0; +#X obj 1 1025 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1028 library: ceammc v0.8.0; +#N canvas 10 1047 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 synth.risset_arp~; #X text 10 76 category:; @@ -90,7 +93,7 @@ value: 1\. Range: 0\...1\.; #X text 10 120 authors:; #X text 120 120 Oliver Larkin \, Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 risset \, arpeggio; #X text 10 186 website:; @@ -99,7 +102,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1005 pd info; +#X restore 10 1047 pd info; #X connect 5 0 8 0; #X connect 6 0 9 0; #X connect 4 0 10 0; diff --git a/ceammc/ext/doc/synth.risset_arp~.pddoc b/ceammc/ext/doc/synth.risset_arp~.pddoc index 9f5e04829d..cb90dfb2d7 100644 --- a/ceammc/ext/doc/synth.risset_arp~.pddoc +++ b/ceammc/ext/doc/synth.risset_arp~.pddoc @@ -8,7 +8,7 @@ Serge Poltavsky Jean Claude Risset's harmonic arpeggio effect - GPL3 + GPL3 or later ceammc synth risset arpeggio @@ -37,6 +37,8 @@ harmonic amplitude 8th harmonic amplitude + on/off dsp + processing diff --git a/ceammc/ext/doc/synth.risset_tone~-help.pd b/ceammc/ext/doc/synth.risset_tone~-help.pd index 4e421f340e..34c1f577c8 100644 --- a/ceammc/ext/doc/synth.risset_tone~-help.pd +++ b/ceammc/ext/doc/synth.risset_tone~-help.pd @@ -18,38 +18,41 @@ #X obj 20 301 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 306 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; -#X msg 110 341 @centroid; -#X text 245 341 Get/Set main frequency. Units: MIDI note. Type: float. +#X msg 110 341 @active; +#X text 245 341 Get/Set on/off dsp processing. Type: int. Default value: +1\. Allowed values: 0 \, 1\.; +#X msg 110 383 @centroid; +#X text 245 383 Get/Set main frequency. Units: MIDI note. Type: float. Default value: 60\. Range: 20\...120\.; -#X msg 110 383 @range; -#X text 245 383 Get/Set glissando range in MIDI note units. Type: float. +#X msg 110 425 @range; +#X text 245 425 Get/Set glissando range in MIDI note units. Type: float. Default value: 120\. Range: 1\...120\.; -#X msg 110 425 @rate; -#X text 245 425 Get/Set glissanso speed. Type: float. Default value: +#X msg 110 467 @rate; +#X text 245 467 Get/Set glissanso speed. Type: float. Default value: 0.01\. Range: -2\...2\.; -#X obj 20 477 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 482 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X obj 20 519 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 524 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 483 1\.; -#X text 245 483 control inlet.; -#X obj 20 513 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 518 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 525 1\.; +#X text 245 525 control inlet.; +#X obj 20 555 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 560 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 519 1\.; -#X text 245 519; +#X text 110 561 1\.; +#X text 245 561; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title synth @url ceammc.synth-help.pd; -#X obj 1 569 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 572 library: ceammc v0.7.1; -#N canvas 10 591 400 290 info 0; +#X obj 1 611 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 614 library: ceammc v0.8.0; +#N canvas 10 633 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 synth.risset_tone~; #X text 10 76 category:; @@ -59,7 +62,7 @@ Default value: 120\. Range: 1\...120\.; #X text 10 120 authors:; #X text 120 120 Oliver Larkin \, Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 risset; #X text 10 186 website:; @@ -68,7 +71,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 591 pd info; +#X restore 10 633 pd info; #X connect 4 0 10 0; #X connect 7 0 10 0; #X connect 5 0 10 0; diff --git a/ceammc/ext/doc/synth.risset_tone~.pddoc b/ceammc/ext/doc/synth.risset_tone~.pddoc index d07970531b..301c32a4f7 100644 --- a/ceammc/ext/doc/synth.risset_tone~.pddoc +++ b/ceammc/ext/doc/synth.risset_tone~.pddoc @@ -8,7 +8,7 @@ Serge Poltavsky Jean Claude Risset's endless glissando - GPL3 + GPL3 or later ceammc synth risset @@ -21,6 +21,8 @@ frequency. Units: MIDI note glissando range in MIDI note units + on/off dsp + processing diff --git a/ceammc/ext/doc/synth.shakers~-help.pd b/ceammc/ext/doc/synth.shakers~-help.pd index 49daf9221e..cc4190e77f 100644 --- a/ceammc/ext/doc/synth.shakers~-help.pd +++ b/ceammc/ext/doc/synth.shakers~-help.pd @@ -71,13 +71,13 @@ crunch \, big_rocks \, little_rocks \, next_mug \, penny_mug \, nickle_mug #X text 115 45 ::; #X obj 131 48 ui.link @title synth @url ceammc.synth-help.pd; #X obj 1 1066 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1069 library: ceammc v0.7.1; +#X text 10 1069 library: ceammc v0.8.0; #N canvas 10 1088 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 synth.shakers~; #X text 10 76 category:; @@ -87,7 +87,7 @@ crunch \, big_rocks \, little_rocks \, next_mug \, penny_mug \, nickle_mug #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 shakers \, percussion; #X text 10 186 website:; diff --git a/ceammc/ext/doc/synth.shakers~.pddoc b/ceammc/ext/doc/synth.shakers~.pddoc index 4bf034c1dd..3bc88d1961 100644 --- a/ceammc/ext/doc/synth.shakers~.pddoc +++ b/ceammc/ext/doc/synth.shakers~.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky various percussion sounds from STK library - GPL3 + GPL3 or later ceammc synth shakers percussion diff --git a/ceammc/ext/doc/synth.wurley~-help.pd b/ceammc/ext/doc/synth.wurley~-help.pd index 6dd399fd09..2feeb4e534 100644 --- a/ceammc/ext/doc/synth.wurley~-help.pd +++ b/ceammc/ext/doc/synth.wurley~-help.pd @@ -24,22 +24,22 @@ #X obj 20 447 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 482 @adsr; -#X text 245 482 Get/Set ADSR 2 & 4 Target. Type: float. Range: 0\...127\.; +#X text 245 482 Get/Set ADSR 2 & 4 Target. Type: int. Range: 0\...127\.; #X msg 110 511 @freq; -#X text 245 511 Get/Set maximum speed of whistles. Type: float. Default -value: 240\. Range: 20\...480\.; +#X text 245 511 Get/Set maximum speed of whistles. Type: float. Units: +Hz. Default value: 220\. Range: 0\...480\.; #X msg 110 553 @gate; #X text 245 553 Get/Set synth gate (>0 - play). Type: float. Default value: 0\. Range: 0\...1\.; #X msg 110 595 @lfo_depth; -#X text 245 595 Get/Set LFO Speed (cc1). Type: float. Range: 0\...127\.; +#X text 245 595 Get/Set LFO Speed (cc1). Type: int. Range: 0\...127\.; #X msg 110 624 @lfo_speed; -#X text 245 624 Get/Set LFO Speed (cc11). Type: float. Range: 0\...127\.; +#X text 245 624 Get/Set LFO Speed (cc11). Type: int. Range: 0\...127\.; #X msg 110 653 @mod; -#X text 245 653 Get/Set modulator index one (cc2). Type: float. Range: +#X text 245 653 Get/Set modulator index one (cc2). Type: int. Range: 0\...127\.; #X msg 110 695 @xfade; -#X text 245 695 Get/Set crossfade of outputs (cc4). Type: float. Range: +#X text 245 695 Get/Set crossfade of outputs (cc4). Type: int. Range: 0\...127\.; #X obj 20 747 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 752 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 @@ -66,13 +66,13 @@ value: 0\. Range: 0\...1\.; #X text 115 45 ::; #X obj 131 48 ui.link @title synth @url ceammc.synth-help.pd; #X obj 1 960 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 963 library: ceammc v0.7.1; +#X text 10 963 library: ceammc v0.8.0; #N canvas 10 982 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 synth.wurley~; #X text 10 76 category:; @@ -82,7 +82,7 @@ value: 0\. Range: 0\...1\.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 wurlitzer \, synth \, fm; #X text 10 186 website:; diff --git a/ceammc/ext/doc/synth.wurley~.pddoc b/ceammc/ext/doc/synth.wurley~.pddoc index 9a46b3fe21..553256375e 100644 --- a/ceammc/ext/doc/synth.wurley~.pddoc +++ b/ceammc/ext/doc/synth.wurley~.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky Wurlitzer electric piano FM synthesis instrument - GPL3 + GPL3 or later ceammc synth wurlitzer synth fm @@ -18,19 +18,19 @@ algorithm 5 of the TX81Z - maximum - speed of whistles + maximum speed of whistles synth gate (>0 - play) - modulator index one + modulator index one (cc2) - crossfade of outputs + crossfade of outputs (cc4) - LFO Speed + LFO Speed (cc11) - LFO Speed + LFO Speed (cc1) - ADSR 2 & 4 + ADSR 2 & 4 Target diff --git a/ceammc/ext/doc/system.colorpanel-help.pd b/ceammc/ext/doc/system.colorpanel-help.pd new file mode 100644 index 0000000000..c7eebba346 --- /dev/null +++ b/ceammc/ext/doc/system.colorpanel-help.pd @@ -0,0 +1,90 @@ +#N canvas 0 0 785 555 12; +#X declare -lib ceammc; +#X obj 522 50 cnv 1 243 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 522 50 System color panel dialog popup; +#X obj 1 1 cnv 5 765 40 empty empty system.colorpanel 20 20 0 20 +-104026 -4096 0; +#X obj 617 11 system.colorpanel; +#X msg 50 118 bang; +#X obj 261 118 ui.menu float int hex; +#X msg 78 147 symbol; +#X msg 261 147 @mode \$2; +#X obj 50 176 system.colorpanel @f; +#X obj 50 205 ui.display @size 150 18; +#X obj 20 245 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 250 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 285 @f; +#X text 245 285 alias for @mode float. Output values as RGB list in +0-1 range.; +#X msg 110 327 @float; +#X text 245 327 Get/Set RGB color value in float range (0-1). Type: +list.; +#X msg 110 356 @h; +#X text 245 356 alias for @mode hex. Output value as #RRGGBB symbol.; +#X msg 110 385 @hex; +#X text 245 385 Get/Set color value as #RRGGBB symbol. Type: symbol.; +#X msg 110 414 @i; +#X text 245 414 alias for @mode int. Output values as RGB list in 0-255 +range.; +#X msg 110 456 @int; +#X text 245 456 Get/Set RGB color value in int range (0-255). Type: +list.; +#X msg 110 485 @mode; +#X text 245 485 Get/Set output mode. Type: symbol. Default value: float. +Allowed values: float \, int \, hex.; +#X obj 20 537 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 542 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +0; +#X text 110 543 1\.; +#X text 150 543 *bang*; +#X text 245 543 opens colorpanel.; +#X text 150 563 *symbol*; +#X text 245 563 opens colorpanel with selected color. The hex format +#RRGGBB is expected.; +#X text 150 598 *list*; +#X text 245 598 opens colorpanel with selected color. RGB color triplet +expected in float (0-1) or int (0-255) range \, depending from @mode.; +#X obj 20 658 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 663 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 664 1\.; +#X text 245 664 messages: hex color symbol in format #RRGGBB or RGB +color triplet in float (0-1) or int (0-255) range depending from @mode.; +#X obj 10 48 ui.link @title index @url ../index-help.pd; +#X text 51 45 ::; +#X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; +#X text 115 45 ::; +#X obj 131 48 ui.link @title system @url ceammc.system-help.pd; +#X obj 1 744 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 747 library: ceammc v0.8.0; +#N canvas 10 766 400 290 info 0; +#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; +#X text 10 10 library:; +#X text 120 10 ceammc; +#X text 10 32 version:; +#X text 120 32 0.8.0; +#X text 10 54 object:; +#X text 120 54 system.colorpanel; +#X text 10 76 category:; +#X text 120 76 system; +#X text 10 98 since:; +#X text 120 98 0.1; +#X text 10 120 authors:; +#X text 120 120 Hans-Christoph Steiner \, Serge Poltavski; +#X text 10 142 license:; +#X text 120 142 GPL3 or later; +#X text 10 164 keywords:; +#X text 120 164 colorpanel; +#X text 10 186 website:; +#X obj 120 189 ui.link @title https://github.com/uliss/pure-data @url +https://github.com/uliss/pure-data; +#X obj 120 208 declare -lib ceammc; +#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 120 268 generated by pddoc; +#X restore 10 766 pd info; +#X connect 5 0 7 0; +#X connect 4 0 8 0; +#X connect 6 0 8 0; +#X connect 7 0 8 0; +#X connect 8 0 9 0; \ No newline at end of file diff --git a/ceammc/ext/doc/system.colorpanel.pddoc b/ceammc/ext/doc/system.colorpanel.pddoc new file mode 100644 index 0000000000..bacf837613 --- /dev/null +++ b/ceammc/ext/doc/system.colorpanel.pddoc @@ -0,0 +1,57 @@ + + + + system.colorpanel + + + Hans-Christoph Steiner + Serge Poltavski + + System color panel dialog popup + GPL3 or later + ceammc + system + colorpanel + 0.1 + + + output + mode + alias for @mode float. Output values as RGB list in + 0-1 range. + alias for @mode int. Output values as RGB list in + 0-255 range. + alias for @mode hex. Output value as #RRGGBB + symbol. + RGB color value in float range (0-1) + RGB color value in int range (0-255) + color value as #RRGGBB symbol + + + + opens colorpanel + opens colorpanel with selected color. The hex format #RRGGBB is + expected. + opens colorpanel with selected color. RGB color triplet expected + in float (0-1) or int (0-255) range, depending from @mode + + + + messages: hex color symbol in format #RRGGBB or RGB color triplet in float + (0-1) or int (0-255) range depending from @mode + + + + + + + + diff --git a/ceammc/ext/doc/system.cursor-help.pd b/ceammc/ext/doc/system.cursor-help.pd index a15b75b49e..42f1fbbe99 100644 --- a/ceammc/ext/doc/system.cursor-help.pd +++ b/ceammc/ext/doc/system.cursor-help.pd @@ -1,13 +1,14 @@ #N canvas 0 0 785 555 12; #X declare -lib ceammc; -#X obj 369 50 cnv 1 396 38 empty empty empty 17 7 0 10 -245760 -1 0; -#X text 369 50 Get information about cursor motion \, mousewheel and -buttonclick; +#X obj 384 50 cnv 1 381 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 384 50 Output cursor motion \, mousewheel and buttonclicks; #X obj 1 1 cnv 5 765 40 empty empty system.cursor 20 20 0 20 -104026 -4096 0; #X obj 646 11 system.cursor; #X obj 50 118 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; +#X obj 203 118 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; #X msg 78 147 bang; +#X msg 203 147 @relative \$1; #X obj 50 176 system.cursor; #X obj 50 205 route motion mousewheel button; #X obj 50 234 msg set; @@ -18,32 +19,40 @@ buttonclick; #X obj 251 262 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; #X obj 299 262 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; #X obj 20 301 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 306 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X obj 20 306 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 341 @relative; +#X text 245 341 Get/Set relative output mode: if on output coords relative +to window \, otherwise output screen coordinates. Type: int. Default +value: 0\. Allowed values: 0 \, 1\.; +#X obj 20 408 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 413 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 307 1\.; -#X text 150 307 *bang*; -#X text 245 307 output cursor position.; -#X text 150 327 *float*; -#X text 245 327 when 1 is received - turns on cursor polling (position +#X text 110 414 1\.; +#X text 150 414 *bang*; +#X text 245 414 output cursor position.; +#X text 150 434 *float*; +#X text 245 434 when 1 is received - turns on cursor polling (position and buttons) \, when 0 is received - turns it off.; -#X obj 20 372 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 377 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X obj 20 479 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 484 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 378 1\.; -#X text 245 378 messages: motion \, mousewheel \, button.; +#X text 110 485 1\.; +#X text 245 485 messages: motion X Y \, mousewheel DELTA \, button +IDX STATE.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title system @url ceammc.system-help.pd; -#X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; -#N canvas 10 527 400 290 info 0; +#X obj 1 535 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 538 library: ceammc v0.8.0; +#N canvas 10 557 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 system.cursor; #X text 10 76 category:; @@ -51,25 +60,27 @@ and buttons) \, when 0 is received - turns it off.; #X text 10 98 since:; #X text 120 98 0.1; #X text 10 120 authors:; -#X text 120 120 Hans-Christoph Steiner; +#X text 120 120 Hans-Christoph Steiner \, Serge Poltavski; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; -#X text 120 164 cursor \, mouse; +#X text 120 164 cursor \, mouse \, mousewheel; #X text 10 186 website:; #X obj 120 189 ui.link @title https://github.com/uliss/pure-data @url https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 527 pd info; -#X connect 4 0 6 0; -#X connect 5 0 6 0; -#X connect 6 0 7 0; +#X restore 10 557 pd info; +#X connect 5 0 7 0; +#X connect 4 0 8 0; +#X connect 6 0 8 0; #X connect 7 0 8 0; -#X connect 7 1 9 0; -#X connect 7 2 10 0; -#X connect 8 0 11 0; -#X connect 10 0 12 0; -#X connect 10 1 13 0; -#X connect 10 2 14 0; \ No newline at end of file +#X connect 8 0 9 0; +#X connect 9 0 10 0; +#X connect 9 1 11 0; +#X connect 9 2 12 0; +#X connect 10 0 13 0; +#X connect 12 0 14 0; +#X connect 12 1 15 0; +#X connect 12 2 16 0; \ No newline at end of file diff --git a/ceammc/ext/doc/system.cursor.pddoc b/ceammc/ext/doc/system.cursor.pddoc index 90d3f99fe3..1913356e63 100644 --- a/ceammc/ext/doc/system.cursor.pddoc +++ b/ceammc/ext/doc/system.cursor.pddoc @@ -5,15 +5,19 @@ Hans-Christoph Steiner + Serge Poltavski - Get information about cursor motion, mousewheel and - buttonclick - GPL3 + Output cursor motion, mousewheel and buttonclicks + GPL3 or later ceammc system - cursor mouse + cursor mouse mousewheel 0.1 + + relative output mode: if + on output coords relative to window, otherwise output screen coordinates + output cursor position @@ -22,16 +26,16 @@ - messages: motion, mousewheel, button + messages: motion X Y, mousewheel DELTA, button IDX STATE Serge Poltavsky Get system environment variables - GPL3 + GPL3 or later ceammc system system environment diff --git a/ceammc/ext/doc/system.hostname-help.pd b/ceammc/ext/doc/system.hostname-help.pd index 9e536b079c..c2e09000ad 100644 --- a/ceammc/ext/doc/system.hostname-help.pd +++ b/ceammc/ext/doc/system.hostname-help.pd @@ -26,13 +26,13 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title system @url ceammc.system-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #N canvas 10 527 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 system.hostname; #X text 10 76 category:; @@ -42,7 +42,7 @@ #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 system \, hostname; #X text 10 186 website:; diff --git a/ceammc/ext/doc/system.hostname.pddoc b/ceammc/ext/doc/system.hostname.pddoc index 7a71cdd709..70e9ee209e 100644 --- a/ceammc/ext/doc/system.hostname.pddoc +++ b/ceammc/ext/doc/system.hostname.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky outputs system hostname - GPL3 + GPL3 or later ceammc system system hostname diff --git a/ceammc/ext/doc/system.memsize-help.pd b/ceammc/ext/doc/system.memsize-help.pd index bc39fd5275..dbe5acebf2 100644 --- a/ceammc/ext/doc/system.memsize-help.pd +++ b/ceammc/ext/doc/system.memsize-help.pd @@ -30,7 +30,7 @@ to float data type.; #X text 115 45 ::; #X obj 131 48 ui.link @title system @url ceammc.system-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #X text 565 520 see also:; #X obj 639 520 system.memused; #N canvas 10 527 400 290 info 0; @@ -38,7 +38,7 @@ to float data type.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 system.memsize; #X text 10 76 category:; @@ -48,7 +48,7 @@ to float data type.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 system \, memory; #X text 10 186 website:; diff --git a/ceammc/ext/doc/system.memsize.pddoc b/ceammc/ext/doc/system.memsize.pddoc index 01786c44d3..7ac0d5a106 100644 --- a/ceammc/ext/doc/system.memsize.pddoc +++ b/ceammc/ext/doc/system.memsize.pddoc @@ -8,7 +8,7 @@ returns the size of physical memory (RAM) in bytes round to float data type. - GPL3 + GPL3 or later ceammc system system memory diff --git a/ceammc/ext/doc/system.memused-help.pd b/ceammc/ext/doc/system.memused-help.pd index 533ba781a6..f00d4a062a 100644 --- a/ceammc/ext/doc/system.memused-help.pd +++ b/ceammc/ext/doc/system.memused-help.pd @@ -34,7 +34,7 @@ in bytes \, or zero if the value cannot be determined on this OS.; #X text 115 45 ::; #X obj 131 48 ui.link @title system @url ceammc.system-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #X text 565 520 see also:; #X obj 639 520 system.memsize; #N canvas 10 527 400 290 info 0; @@ -42,7 +42,7 @@ in bytes \, or zero if the value cannot be determined on this OS.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 system.memused; #X text 10 76 category:; @@ -52,7 +52,7 @@ in bytes \, or zero if the value cannot be determined on this OS.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 system \, memory; #X text 10 186 website:; diff --git a/ceammc/ext/doc/system.memused.pddoc b/ceammc/ext/doc/system.memused.pddoc index 6e660b09fc..ad88a8c83f 100644 --- a/ceammc/ext/doc/system.memused.pddoc +++ b/ceammc/ext/doc/system.memused.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky returns the process physical memory use - current and peak - GPL3 + GPL3 or later ceammc system system memory diff --git a/ceammc/ext/doc/system.screen_size-help.pd b/ceammc/ext/doc/system.screen_size-help.pd index eac57046bf..1ab97fb064 100644 --- a/ceammc/ext/doc/system.screen_size-help.pd +++ b/ceammc/ext/doc/system.screen_size-help.pd @@ -26,13 +26,13 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title system @url ceammc.system-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #N canvas 10 527 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 system.screen_size; #X text 10 76 category:; @@ -42,7 +42,7 @@ #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 screen \, info; #X text 10 186 website:; diff --git a/ceammc/ext/doc/system.screen_size.pddoc b/ceammc/ext/doc/system.screen_size.pddoc index dc1e5d9560..acf2e8eb6c 100644 --- a/ceammc/ext/doc/system.screen_size.pddoc +++ b/ceammc/ext/doc/system.screen_size.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky returns current screen size in pixels - GPL3 + GPL3 or later ceammc system screen info diff --git a/ceammc/ext/doc/system.shell-help.pd b/ceammc/ext/doc/system.shell-help.pd index d56827839b..660a699eea 100644 --- a/ceammc/ext/doc/system.shell-help.pd +++ b/ceammc/ext/doc/system.shell-help.pd @@ -48,13 +48,13 @@ string.; #X text 115 45 ::; #X obj 131 48 ui.link @title system @url ceammc.system-help.pd; #X obj 1 629 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 632 library: ceammc v0.7.1; +#X text 10 632 library: ceammc v0.8.0; #N canvas 10 651 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 system.shell; #X text 10 76 category:; @@ -64,7 +64,7 @@ string.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 system \, shell; #X text 10 186 website:; diff --git a/ceammc/ext/doc/system.shell.pddoc b/ceammc/ext/doc/system.shell.pddoc index 1ef0e338bb..a8e2d6931f 100644 --- a/ceammc/ext/doc/system.shell.pddoc +++ b/ceammc/ext/doc/system.shell.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky run external command in separate process - GPL3 + GPL3 or later ceammc system system shell diff --git a/ceammc/ext/doc/tl.bang-help.pd b/ceammc/ext/doc/tl.bang-help.pd index fb55061921..7069ecad15 100644 --- a/ceammc/ext/doc/tl.bang-help.pd +++ b/ceammc/ext/doc/tl.bang-help.pd @@ -45,7 +45,7 @@ Units: ms. Default value: 0\. Min value: 0\.; #X text 115 45 ::; #X obj 131 48 ui.link @title tl @url ceammc.tl-help.pd; #X obj 1 512 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 515 library: ceammc v0.7.1; +#X text 10 515 library: ceammc v0.8.0; #X text 539 527 see also:; #X obj 613 527 tl.toggle; #X obj 694 530 ui.link @background_color 0.78431 0.78431 0.78431 @@ -55,7 +55,7 @@ Units: ms. Default value: 0\. Min value: 0\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 tl.bang; #X text 10 76 category:; @@ -65,7 +65,7 @@ Units: ms. Default value: 0\. Min value: 0\.; #X text 10 120 authors:; #X text 120 120 Alex Nadzharov \, Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 timeline \, bang; #X text 10 186 website:; diff --git a/ceammc/ext/doc/tl.bang.pddoc b/ceammc/ext/doc/tl.bang.pddoc index 8ed47830ad..a2b25c6e24 100644 --- a/ceammc/ext/doc/tl.bang.pddoc +++ b/ceammc/ext/doc/tl.bang.pddoc @@ -8,7 +8,7 @@ Serge Poltavsky Timeline bang (with possible delay) - GPL3 + GPL3 or later ceammc tl timeline bang diff --git a/ceammc/ext/doc/tl.cue-help.pd b/ceammc/ext/doc/tl.cue-help.pd index 3e6cf79b14..16bf646656 100644 --- a/ceammc/ext/doc/tl.cue-help.pd +++ b/ceammc/ext/doc/tl.cue-help.pd @@ -32,7 +32,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title tl @url ceammc.tl-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #X text 530 520 see also:; #X obj 604 523 ui.link @background_color 0.78431 0.78431 0.78431 @title [tl.bang] @url tl.bang-help.pd; @@ -43,7 +43,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 tl.cue; #X text 10 76 category:; @@ -53,7 +53,7 @@ #X text 10 120 authors:; #X text 120 120 Alex Nadzharov \, Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 timeline \, cue; #X text 10 186 website:; diff --git a/ceammc/ext/doc/tl.cue.pddoc b/ceammc/ext/doc/tl.cue.pddoc index d209ee4765..1680ea0342 100644 --- a/ceammc/ext/doc/tl.cue.pddoc +++ b/ceammc/ext/doc/tl.cue.pddoc @@ -8,7 +8,7 @@ Serge Poltavsky Timeline section - GPL3 + GPL3 or later ceammc tl timeline cue diff --git a/ceammc/ext/doc/tl.timeline-help.pd b/ceammc/ext/doc/tl.timeline-help.pd index eddaf7a66a..00de8b2fae 100644 --- a/ceammc/ext/doc/tl.timeline-help.pd +++ b/ceammc/ext/doc/tl.timeline-help.pd @@ -28,21 +28,21 @@ last user event); #X obj 318 399 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; #X msg 318 427 @loop \$1; #X obj 50 456 tl.timeline 20 @loop 1; -#X obj 50 485 prop-> @current; +#X obj 50 485 prop-> @current, f 20; #X obj 50 514 sel 0 1 2 begin end; -#X obj 280 514 / 1000; +#X obj 290 514 / 1000; #X obj 50 543 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 -1; #X obj 88 543 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 -1; -#X obj 136 543 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 +#X obj 126 543 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 -1; -#X obj 174 543 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 +#X obj 184 543 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 -1; -#X obj 242 543 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 +#X obj 251 543 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 -1; -#X obj 280 543 sec->str @symbol @ms; -#X symbolatom 280 571 15 0 0 0 - - -; +#X obj 290 543 sec->str @symbol @ms; +#X symbolatom 290 571 15 0 0 0 - - -; #X obj 20 610 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 615 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 -49933 0; @@ -140,7 +140,7 @@ Type: list.; #X text 115 45 ::; #X obj 131 48 ui.link @title tl @url ceammc.tl-help.pd; #X obj 1 1762 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1765 library: ceammc v0.7.1; +#X text 10 1765 library: ceammc v0.8.0; #X text 620 1777 see also:; #X obj 694 1780 ui.link @background_color 0.78431 0.78431 0.78431 @title [tl.cue] @url tl.cue-help.pd; @@ -149,7 +149,7 @@ Type: list.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 tl.timeline; #X text 10 76 category:; @@ -159,7 +159,7 @@ Type: list.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 timeline; #X text 10 186 website:; @@ -183,7 +183,7 @@ https://github.com/uliss/pure-data; #X connect 22 0 24 0; #X connect 22 1 25 0; #X connect 22 2 26 0; -#X connect 22 3 26 0; +#X connect 22 3 27 0; #X connect 22 4 28 0; #X connect 23 0 29 0; #X connect 29 0 30 0; diff --git a/ceammc/ext/doc/tl.timeline.pddoc b/ceammc/ext/doc/tl.timeline.pddoc index e3b34f84a9..53ac0cd580 100644 --- a/ceammc/ext/doc/tl.timeline.pddoc +++ b/ceammc/ext/doc/tl.timeline.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky Timeline - event scheduler - GPL3 + GPL3 or later ceammc tl timeline @@ -106,13 +106,13 @@ | | | | | [tl.timeline 20 @loop 1 #a] | -[prop-> @current ] -| ^| -[sel 0 1 2 begin end ] [/ 1000] -| ^| ^^| ^^^| ^^^^| | -[B] [B] [B] [B] [B] [sec->str @symbol @ms] - | -[X b->a] [S digits=15] +[prop-> @current {w=20} ] +| ^| +[sel 0 1 2 begin end ] [/ 1000] +| ^| ^^| ^^^| ^^^^| | +[B] [B] [B] [B] [B] [sec->str @symbol @ms] + | +[X b->a] [S digits=15] [X c->a] [X d->a] ]]> diff --git a/ceammc/ext/doc/tl.toggle-help.pd b/ceammc/ext/doc/tl.toggle-help.pd index e593fe3817..41a3e7ca94 100644 --- a/ceammc/ext/doc/tl.toggle-help.pd +++ b/ceammc/ext/doc/tl.toggle-help.pd @@ -39,7 +39,7 @@ to other cue section; #X text 115 45 ::; #X obj 131 48 ui.link @title tl @url ceammc.tl-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #X text 554 520 see also:; #X obj 628 520 tl.bang; #X obj 694 523 ui.link @background_color 0.78431 0.78431 0.78431 @@ -49,7 +49,7 @@ to other cue section; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 tl.toggle; #X text 10 76 category:; @@ -59,7 +59,7 @@ to other cue section; #X text 10 120 authors:; #X text 120 120 Alex Nadzharov \, Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 timeline \, toggle; #X text 10 186 website:; diff --git a/ceammc/ext/doc/tl.toggle.pddoc b/ceammc/ext/doc/tl.toggle.pddoc index 874d5fbdc7..dcd8a0e1ce 100644 --- a/ceammc/ext/doc/tl.toggle.pddoc +++ b/ceammc/ext/doc/tl.toggle.pddoc @@ -8,7 +8,7 @@ Serge Poltavsky Timeline bang - GPL3 + GPL3 or later ceammc tl timeline toggle diff --git a/ceammc/ext/doc/tl.transport-help.pd b/ceammc/ext/doc/tl.transport-help.pd index c3f453fd06..ebcdc2587f 100644 --- a/ceammc/ext/doc/tl.transport-help.pd +++ b/ceammc/ext/doc/tl.transport-help.pd @@ -38,7 +38,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title tl @url ceammc.tl-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.7.1; +#X text 10 508 library: ceammc v0.8.0; #X text 620 520 see also:; #X obj 694 523 ui.link @background_color 0.78431 0.78431 0.78431 @title [tl.cue] @url tl.cue-help.pd; @@ -47,7 +47,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 tl.transport; #X text 10 76 category:; @@ -57,7 +57,7 @@ #X text 10 120 authors:; #X text 120 120 Alex Nadzharov \, Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 timeline \, transport; #X text 10 186 website:; diff --git a/ceammc/ext/doc/tl.transport.pddoc b/ceammc/ext/doc/tl.transport.pddoc index 2c1fb4573b..5a3a8693f3 100644 --- a/ceammc/ext/doc/tl.transport.pddoc +++ b/ceammc/ext/doc/tl.transport.pddoc @@ -8,7 +8,7 @@ Serge Poltavsky Timeline transport control - GPL3 + GPL3 or later ceammc tl timeline transport diff --git a/ceammc/ext/doc/ui.aview-help.pd b/ceammc/ext/doc/ui.aview-help.pd index cf60e2b757..cacf039b0b 100644 --- a/ceammc/ext/doc/ui.aview-help.pd +++ b/ceammc/ext/doc/ui.aview-help.pd @@ -12,156 +12,178 @@ #X obj 50 176 expand_env; #X obj 50 205 snd.file; #X msg 50 234 update; -#X text 146 234 Shift+drag - select region to play; +#X text 146 234 Ctrl+drag - select region to play; #X obj 50 262 ui.aview @array array_view @show_labels 1 @size 300 80; -#X obj 50 349 route @select_samp; -#X obj 50 378 flow.change; -#X obj 280 378 loadbang; -#X obj 50 406 expr $f1\; $f2 - $f1; -#X msg 280 406 1; -#X obj 98 435 b; -#X floatatom 280 435 5 0 0 0 - - -; -#X text 347 435 speed; -#X obj 98 464 loop~; -#X obj 98 493 *~; -#X obj 50 521 +~; -#X obj 50 550 tabread4~ array_view; -#X obj 50 579 ui.gain~ @size 120 16; -#X obj 290 579 ui.dsp~; -#X obj 50 608 dac~; -#X obj 20 647 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 652 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +#X obj 50 349 ui.mf @up; +#X obj 50 378 route @select_samp; +#X obj 50 406 flow.change; +#X obj 280 406 loadbang; +#X obj 50 435 expr $f1\; $f2 - $f1; +#X msg 280 435 1; +#X obj 98 464 b; +#X floatatom 280 464 5 0 0 0 - - -; +#X text 347 464 speed; +#X obj 98 493 loop~; +#X obj 98 521 *~; +#X obj 50 550 +~; +#X obj 50 579 tabread4~ array_view; +#X obj 50 608 ui.gain~ @size 120 16; +#X obj 290 608 ui.dsp~; +#X obj 50 637 dac~; +#X obj 20 676 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 681 cnv 5 115 26 empty empty mouse_events: 4 10 0 14 -262144 -49933 0; -#X msg 110 687 @array; -#X text 245 687 Get/Set array name. Type: symbol.; -#X msg 110 716 @cursor_ms; -#X text 245 716 Get/Set cursor position in milliseconds. Type: float. +#X text 110 716 Left-click; +#X text 285 716 move view cursor under mouse pointer.; +#X text 110 736 Left-click; +#X text 285 736 starts range selection.; +#X text 110 756 Left-click + ⌥; +#X text 285 756 edit selection nearest border.; +#X text 110 776 Left-click + ⇧; +#X text 285 776 starts moving selection.; +#X text 110 796 Mouse-drag; +#X text 285 796 move view cursor.; +#X text 110 816 Mouse-drag + ⌥; +#X text 285 816 change nearest selection border.; +#X text 110 836 Mouse-drag + ⇧; +#X text 285 836 move selection.; +#X obj 20 866 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 871 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 906 @array; +#X text 245 906 Get/Set array name. Type: symbol.; +#X msg 110 935 @cursor_ms; +#X text 245 935 Get/Set cursor position in milliseconds. Type: float. Units: ms. Default value: 0\.; -#X msg 110 758 @cursor_phase; -#X text 245 758 Get/Set cursor position in 0-1 range. Type: float. +#X msg 110 977 @cursor_phase; +#X text 245 977 Get/Set cursor position in 0-1 range. Type: float. Default value: 0\. Range: 0\...1\.; -#X msg 110 800 @cursor_samp; -#X text 245 800 Get/Set cursor position in samples. Type: int. Default -value: 0\.; -#X msg 110 842 @cursor_sec; -#X text 245 842 Get/Set cursor position in seconds. Type: float. Units: +#X msg 110 1019 @cursor_samp; +#X text 245 1019 Get/Set cursor position in samples. Type: int. Units: +samp. Default value: 0\.; +#X msg 110 1061 @cursor_sec; +#X text 245 1061 Get/Set cursor position in seconds. Type: float. Units: sec. Default value: 0\.; -#X msg 110 884 @receive; -#X text 245 884 Get/Set receive source. Type: symbol.; -#X msg 110 913 @select_ms; -#X text 245 913 Get/Set selection range in milliseconds \, pair of -values: begin \, end. Type: list.; -#X msg 110 955 @select_phase; -#X text 245 955 Get/Set selection range noramlized to 0-1 range \, +#X msg 110 1103 @mouse_events; +#X text 245 1103 Get/Set mouse events output mode. If on outputs @mouse_down +\, @mouse_up and @mouse_drag events. Type: int. Default value: 1\. +Allowed values: 0 \, 1\.; +#X msg 110 1160 @receive; +#X text 245 1160 Get/Set receive source. Type: symbol.; +#X msg 110 1189 @select_ms; +#X text 245 1189 Get/Set selection range in milliseconds \, pair of +values: begin \, end. Type: list. Units: ms.; +#X msg 110 1231 @select_phase; +#X text 245 1231 Get/Set selection range noramlized to 0-1 range \, pair of values: begin \, end. Type: list.; -#X msg 110 997 @select_samp; -#X text 245 997 Get/Set selection range in samples \, pair of values: -begin \, end. Type: list.; -#X msg 110 1039 @select_sec; -#X text 245 1039 Get/Set selection range in seconds \, pair of values: -begin \, end. Type: list.; -#X msg 110 1081 @send; -#X text 245 1081 Get/Set send destination. Type: symbol.; -#X msg 110 1110 @show_rms; -#X text 245 1110 Get/Set show RMS graph. Type: int. Default value: +#X msg 110 1273 @select_samp; +#X text 245 1273 Get/Set selection range in samples \, pair of values: +begin \, end. Type: list. Units: samp.; +#X msg 110 1315 @select_sec; +#X text 245 1315 Get/Set selection range in seconds \, pair of values: +begin \, end. Type: list. Units: sec.; +#X msg 110 1357 @send; +#X text 245 1357 Get/Set send destination. Type: symbol.; +#X msg 110 1386 @show_rms; +#X text 245 1386 Get/Set show RMS graph. Type: int. Default value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 1152 @size_ms; -#X text 245 1152 (readonly) Get array size in milliseconds. Type: float. +#X msg 110 1428 @size_ms; +#X text 245 1428 (readonly) Get array size in milliseconds. Type: float. Units: ms. Min value: 0\.; -#X msg 110 1194 @size_samp; -#X text 245 1194 (readonly) Get array size in samples. Type: int. Min -value: 0\.; -#X msg 110 1236 @size_sec; -#X text 245 1236 (readonly) Get array size in seconds. Type: float. +#X msg 110 1470 @size_samp; +#X text 245 1470 (readonly) Get array size in samples. Type: int. Units: +samp. Min value: 0\.; +#X msg 110 1512 @size_sec; +#X text 245 1512 (readonly) Get array size in seconds. Type: float. Units: sec. Min value: 0\.; -#X msg 110 1278 @background_color; -#X text 245 1278 Get/Set element background color (list of red \, green +#X msg 110 1554 @background_color; +#X text 245 1554 Get/Set element background color (list of red \, green \, blue values in 0-1 range). Type: list.; -#X msg 110 1320 @border_color; -#X text 245 1320 Get/Set border color (list of red \, green \, blue +#X msg 110 1596 @border_color; +#X text 245 1596 Get/Set border color (list of red \, green \, blue values in 0-1 range). Type: list.; -#X msg 110 1362 @cursor_color; -#X text 245 1362 Get/Set cursor color (list of red \, green \, blue +#X msg 110 1638 @cursor_color; +#X text 245 1638 Get/Set cursor color (list of red \, green \, blue values in 0-1 range). Type: list.; -#X msg 110 1404 @selection_color; -#X text 245 1404 Get/Set selection color (list of red \, green \, blue +#X msg 110 1680 @selection_color; +#X text 245 1680 Get/Set selection color (list of red \, green \, blue values in 0-1 range). Type: list.; -#X msg 110 1446 @wave_color; -#X text 245 1446 Get/Set wave color (list of red \, green \, blue values +#X msg 110 1722 @wave_color; +#X text 245 1722 Get/Set wave color (list of red \, green \, blue values in 0-1 range). Type: list.; -#X msg 110 1488 @label_bottom; -#X text 245 1488 Get/Set bottom right label if @show_labels is on. +#X msg 110 1764 @label_bottom; +#X text 245 1764 Get/Set bottom right label if @show_labels is on. Type: symbol.; -#X msg 110 1530 @label_top; -#X text 245 1530 Get/Set top right label if @show_labels is on. Type: +#X msg 110 1806 @label_top; +#X text 245 1806 Get/Set top right label if @show_labels is on. Type: symbol.; -#X msg 110 1559 @show_labels; -#X text 245 1559 Get/Set if show corner labels. Type: int. Default +#X msg 110 1835 @show_labels; +#X text 245 1835 Get/Set if show corner labels. Type: int. Default value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 1601 @fontname; -#X text 245 1601 Get/Set fontname. Type: symbol.; -#X msg 110 1630 @fontsize; -#X text 245 1630 Get/Set fontsize. Type: int. Default value: 11\. Range: +#X msg 110 1877 @fontname; +#X text 245 1877 Get/Set fontname. Type: symbol.; +#X msg 110 1906 @fontsize; +#X text 245 1906 Get/Set fontsize. Type: int. Default value: 11\. Range: 4\...11\.; -#X msg 110 1672 @fontslant; -#X text 245 1672 Get/Set font slant. Type: symbol. Default value: roman. +#X msg 110 1948 @fontslant; +#X text 245 1948 Get/Set font slant. Type: symbol. Default value: roman. Allowed values: roman \, italic.; -#X msg 110 1714 @fontweight; -#X text 245 1714 Get/Set font weight. Type: symbol. Default value: +#X msg 110 1990 @fontweight; +#X text 245 1990 Get/Set font weight. Type: symbol. Default value: normal. Allowed values: normal \, bold.; -#X msg 110 1756 @pinned; -#X text 245 1756 Get/Set pin mode. if 1 - put element to the lowest +#X msg 110 2032 @pinned; +#X text 245 2032 Get/Set pin mode. if 1 - put element to the lowest level. Type: int. Default value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 1798 @size; -#X text 245 1798 Get/Set element size (width \, height pair). Type: +#X msg 110 2074 @size; +#X text 245 2074 Get/Set element size (width \, height pair). Type: list.; -#X obj 20 1837 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1842 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 2113 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 2118 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 1877 pos; -#X text 245 1877 set UI element position. Arguments are:; -#X obj 255 1900 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1900 X: top left x-coord. Type: float.; -#X obj 255 1923 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1923 Y: top right y-coord. Type: float.; -#X msg 110 1948 select; -#X text 245 1948 set selection. Arguments are:; -#X obj 255 1971 cnv 1 44 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1971 BEGIN: selection start in samples. Type: int.; -#X obj 255 1994 cnv 1 28 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1994 END: selection end in samples. Type: int.; -#X msg 110 2019 update; -#X text 245 2019 redraws view.; -#X msg 110 2046 dump; -#X text 245 2046 dumps all object info to Pd console window.; -#X obj 20 2083 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 2088 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +#X msg 110 2153 pos; +#X text 245 2153 set UI element position. Arguments are:; +#X obj 255 2176 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2176 X: top left x-coord. Type: float.; +#X obj 255 2199 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2199 Y: top right y-coord. Type: float.; +#X msg 110 2224 select; +#X text 245 2224 set selection. Arguments are:; +#X obj 255 2247 cnv 1 44 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2247 BEGIN: selection start in samples. Type: int.; +#X obj 255 2270 cnv 1 28 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2270 END: selection end in samples. Type: int.; +#X msg 110 2295 update; +#X text 245 2295 redraws view.; +#X msg 110 2322 dump; +#X text 245 2322 dumps all object info to Pd console window.; +#X obj 20 2359 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 2364 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 2089 1\.; -#X text 150 2089 *bang*; -#X text 245 2089 output current cursor positions: @cursor_samp \, @cursor_phase +#X text 110 2365 1\.; +#X text 150 2365 *bang*; +#X text 245 2365 output current cursor positions: @cursor_samp \, @cursor_phase \, @cursor_ms \, @cursor_sec and selection (if selected): @select_samp \, @select_phase \, @select_ms \, @select_sec \, @begin \, @end.; -#X text 150 2154 *float*; -#X text 245 2154 move cursor to specified sample position.; -#X obj 20 2184 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 2189 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 150 2430 *float*; +#X text 245 2430 move cursor to specified sample position.; +#X obj 20 2460 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 2465 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 2190 1\.; -#X text 245 2190 output.; +#X text 110 2466 1\.; +#X text 245 2466 output.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title ui @url ceammc.ui-help.pd; -#X obj 1 2240 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 2243 library: ceammc v0.7.1; -#N canvas 10 2262 400 290 info 0; +#X obj 1 2516 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 2519 library: ceammc v0.8.0; +#N canvas 10 2538 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 ui.aview; #X text 10 76 category:; @@ -171,7 +193,7 @@ list.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 ui \, array \, view; #X text 10 186 website:; @@ -180,7 +202,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 2262 pd info; +#X restore 10 2538 pd info; #X connect 4 0 6 0; #X connect 6 0 7 0; #X connect 7 0 8 0; @@ -188,18 +210,19 @@ https://github.com/uliss/pure-data; #X connect 9 0 11 0; #X connect 11 0 12 0; #X connect 12 0 13 0; -#X connect 13 0 15 0; +#X connect 13 0 14 0; #X connect 14 0 16 0; -#X connect 16 0 18 0; -#X connect 17 0 20 0; -#X connect 15 1 20 1; -#X connect 18 0 20 0; -#X connect 20 0 21 0; -#X connect 20 1 21 1; -#X connect 15 0 22 0; -#X connect 21 0 22 1; -#X connect 22 0 23 0; +#X connect 15 0 17 0; +#X connect 17 0 19 0; +#X connect 18 0 21 0; +#X connect 16 1 21 1; +#X connect 19 0 21 0; +#X connect 21 0 22 0; +#X connect 21 1 22 1; +#X connect 16 0 23 0; +#X connect 22 0 23 1; #X connect 23 0 24 0; -#X connect 24 0 26 0; -#X connect 24 0 26 1; -#X connect 13 0 17 0; \ No newline at end of file +#X connect 24 0 25 0; +#X connect 25 0 27 0; +#X connect 25 0 27 1; +#X connect 14 0 18 0; \ No newline at end of file diff --git a/ceammc/ext/doc/ui.aview.pddoc b/ceammc/ext/doc/ui.aview.pddoc index 247c6282b5..74609a692e 100644 --- a/ceammc/ext/doc/ui.aview.pddoc +++ b/ceammc/ext/doc/ui.aview.pddoc @@ -7,16 +7,28 @@ Serge Poltavsky array view with cursor and selection - GPL3 + GPL3 or later ceammc ui ui array view 0.6 + + move view cursor under mouse pointer + starts range selection + edit selection nearest + border + starts moving selection + move view cursor + change nearest selection border + move selection + array name + mouse events output + mode. If on outputs @mouse_down, @mouse_up and @mouse_drag events - cursor position in + cursor position in samples cursor position in 0-1 range @@ -25,12 +37,12 @@ cursor position in milliseconds - selection range in samples, pair of values: - begin, end - selection range in seconds, pair of values: - begin, end - selection range in milliseconds, pair of - values: begin, end + selection range in samples, + pair of values: begin, end + selection range in seconds, + pair of values: begin, end + selection range in + milliseconds, pair of values: begin, end selection range noramlized to 0-1 range, pair of values: begin, end @@ -42,8 +54,8 @@ bottom right label if @show_labels is on - array size in - samples + + array size in samples array size in seconds Pierre Guillot A bang... that's all - GPL3 + GPL3 or later ceammc ui ui bang @@ -47,6 +47,20 @@ weight font slant + + label text + label color in RGB format within 0-1 range, + for example: 0.2 0.4 0.1 + label position (1 - + inner, 0 - outer). + + label horizontal align + + label vertical align + + label snap side + label offset in + pixels diff --git a/ceammc/ext/doc/ui.colorpanel-help.pd b/ceammc/ext/doc/ui.colorpanel-help.pd index 290a75b9ac..a363916ddd 100644 --- a/ceammc/ext/doc/ui.colorpanel-help.pd +++ b/ceammc/ext/doc/ui.colorpanel-help.pd @@ -10,7 +10,7 @@ #X obj 290 118 ui.colorpanel @size 193 14; #X obj 290 162 route @rgb; #X obj 290 190 msg @background_color; -#X obj 290 219 ui.radio @size 127 15; +#X obj 290 219 ui.radio; #X obj 50 248 route @pd; #X msg 50 277 color \$1; #X obj 50 305 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; @@ -119,7 +119,7 @@ list.; #X text 115 45 ::; #X obj 131 48 ui.link @title ui @url ceammc.ui-help.pd; #X obj 1 1574 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1577 library: ceammc v0.7.1; +#X text 10 1577 library: ceammc v0.8.0; #X text 598 1589 see also:; #X obj 672 1592 ui.link @background_color 0.78431 0.78431 0.78431 @title [ui.number] @url ui.number-help.pd; @@ -128,7 +128,7 @@ list.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 ui.colorpanel; #X text 10 76 category:; @@ -138,7 +138,7 @@ list.; #X text 10 120 authors:; #X text 120 120 Pierre Guillot \, Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 ui \, color \, choose; #X text 10 186 website:; diff --git a/ceammc/ext/doc/ui.colorpanel.pddoc b/ceammc/ext/doc/ui.colorpanel.pddoc index 102568e118..116e8ce36b 100644 --- a/ceammc/ext/doc/ui.colorpanel.pddoc +++ b/ceammc/ext/doc/ui.colorpanel.pddoc @@ -8,7 +8,7 @@ Serge Poltavsky colorchooser widget - GPL3 + GPL3 or later ceammc ui ui color choose diff --git a/ceammc/ext/doc/ui.display-help.pd b/ceammc/ext/doc/ui.display-help.pd index 4a55e4dfbf..dd90c93906 100644 --- a/ceammc/ext/doc/ui.display-help.pd +++ b/ceammc/ext/doc/ui.display-help.pd @@ -8,97 +8,110 @@ [ui.d] @url ui.display-help.pd; #X obj 665 13 ui.link @background_color 0.39216 0.39216 0.39216 @title [ui.display] @url ui.display-help.pd; -#X obj 210 80 cnv 1 555 35 empty empty empty 17 7 0 10 -257983 -1 0; -#X text 215 80 Double click to show/hide message type display; -#X msg 50 158 list a b c; -#X msg 174 158 1; -#X msg 213 158 symbol X; -#X msg 318 158 any msg; -#X msg 414 158 bang; -#X obj 50 215 ui.display @size 150 18; -#X text 50 259 display message type; -#X msg 50 287 list a b c; -#X msg 174 287 1; -#X msg 213 287 symbol X; -#X msg 318 287 any msg; -#X msg 414 287 bang; -#X obj 50 345 ui.display @display_type 1 @size 150 18; -#X obj 20 370 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 375 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +#X msg 50 133 list a b c; +#X msg 174 133 1; +#X msg 213 133 symbol X; +#X msg 318 133 any msg; +#X msg 414 133 bang; +#X obj 50 190 ui.display @size 150 18; +#X text 50 234 display message type; +#X msg 50 262 list a b c; +#X msg 174 262 1; +#X msg 213 262 symbol X; +#X msg 318 262 any msg; +#X msg 414 262 bang; +#X obj 50 320 ui.display @display_type 1 @size 150 18; +#X obj 20 345 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 350 cnv 5 115 26 empty empty mouse_events: 4 10 0 14 -262144 -49933 0; -#X msg 110 410 @auto_size; -#X text 245 410 Get/Set flag if automatically resize contents to feet +#X text 110 385 Double-click; +#X text 285 385 show/hide message type.; +#X text 110 405 Right-click + ⇧; +#X text 285 405 open object help.; +#X text 110 425 Right-click + ⌥; +#X text 285 425 open properties dialog.; +#X text 110 445 Right-click + ⇧; +#X text 285 445 open object help.; +#X text 61 445 [Edit]; +#X text 110 465 Right-click + ⌥; +#X text 285 465 open properties dialog.; +#X text 61 465 [Edit]; +#X obj 20 495 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 500 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 535 @auto_size; +#X text 245 535 Get/Set flag if automatically resize contents to feet incoming message. Type: int. Default value: 1\. Allowed values: 0 \, 1\.; -#X msg 110 467 @display_events; -#X text 245 467 Get/Set flag for blinking on incoming messages. Type: +#X msg 110 592 @display_events; +#X text 245 592 Get/Set flag for blinking on incoming messages. Type: int. Default value: 1\. Allowed values: 0 \, 1\.; -#X msg 110 509 @display_type; -#X text 245 509 Get/Set flag for displaying incoming message type. +#X msg 110 634 @display_type; +#X text 245 634 Get/Set flag for displaying incoming message type. Type: int. Default value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 551 @receive; -#X text 245 551 Get/Set receive source. Type: symbol.; -#X msg 110 580 @send; -#X text 245 580 Get/Set send destination. Type: symbol.; -#X msg 110 609 @active_color; -#X text 245 609 Get/Set element active color (list of red \, green +#X msg 110 676 @receive; +#X text 245 676 Get/Set receive source. Type: symbol.; +#X msg 110 705 @send; +#X text 245 705 Get/Set send destination. Type: symbol.; +#X msg 110 734 @active_color; +#X text 245 734 Get/Set element active color (list of red \, green \, blue values in 0-1 range). Type: list.; -#X msg 110 651 @background_color; -#X text 245 651 Get/Set element background color (list of red \, green +#X msg 110 776 @background_color; +#X text 245 776 Get/Set element background color (list of red \, green \, blue values in 0-1 range). Type: list.; -#X msg 110 693 @border_color; -#X text 245 693 Get/Set border color (list of red \, green \, blue +#X msg 110 818 @border_color; +#X text 245 818 Get/Set border color (list of red \, green \, blue values in 0-1 range). Type: list.; -#X msg 110 735 @text_color; -#X text 245 735 Get/Set text color (list of red \, green \, blue values +#X msg 110 860 @text_color; +#X text 245 860 Get/Set text color (list of red \, green \, blue values in 0-1 range). Type: list.; -#X msg 110 777 @fontname; -#X text 245 777 Get/Set fontname. Type: symbol.; -#X msg 110 806 @fontsize; -#X text 245 806 Get/Set fontsize. Type: int. Default value: 11\. Range: +#X msg 110 902 @fontname; +#X text 245 902 Get/Set fontname. Type: symbol.; +#X msg 110 931 @fontsize; +#X text 245 931 Get/Set fontsize. Type: int. Default value: 11\. Range: 4\...11\.; -#X msg 110 848 @fontslant; -#X text 245 848 Get/Set font slant. Type: symbol. Default value: roman. +#X msg 110 973 @fontslant; +#X text 245 973 Get/Set font slant. Type: symbol. Default value: roman. Allowed values: roman \, italic.; -#X msg 110 890 @fontweight; -#X text 245 890 Get/Set font weight. Type: symbol. Default value: normal. -Allowed values: normal \, bold.; -#X msg 110 932 @pinned; -#X text 245 932 Get/Set pin mode. if 1 - put element to the lowest +#X msg 110 1015 @fontweight; +#X text 245 1015 Get/Set font weight. Type: symbol. Default value: +normal. Allowed values: normal \, bold.; +#X msg 110 1057 @pinned; +#X text 245 1057 Get/Set pin mode. if 1 - put element to the lowest level. Type: int. Default value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 974 @size; -#X text 245 974 Get/Set element size (width \, height pair). Type: +#X msg 110 1099 @size; +#X text 245 1099 Get/Set element size (width \, height pair). Type: list.; -#X obj 20 1013 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1018 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 1138 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1143 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 1053 pos; -#X text 245 1053 set UI element position. Arguments are:; -#X obj 255 1076 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1076 X: top left x-coord. Type: float.; -#X obj 255 1099 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1099 Y: top right y-coord. Type: float.; -#X obj 20 1134 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1139 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +#X msg 110 1178 pos; +#X text 245 1178 set UI element position. Arguments are:; +#X obj 255 1201 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1201 X: top left x-coord. Type: float.; +#X obj 255 1224 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1224 Y: top right y-coord. Type: float.; +#X obj 20 1259 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1264 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1140 1\.; -#X text 150 1140 *list*; -#X text 245 1140 accepts any messages and displays it.; +#X text 110 1265 1\.; +#X text 150 1265 *list*; +#X text 245 1265 accepts any messages and displays it.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title ui @url ceammc.ui-help.pd; -#X obj 1 1190 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1193 library: ceammc v0.7.1; -#X text 644 1205 see also:; -#X obj 718 1205 msg; -#N canvas 10 1212 400 290 info 0; +#X obj 1 1315 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1318 library: ceammc v0.8.0; +#X text 644 1330 see also:; +#X obj 718 1330 msg; +#N canvas 10 1337 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 ui.display; #X text 10 76 category:; @@ -108,7 +121,7 @@ list.; #X text 10 120 authors:; #X text 120 120 Alex Nadzharov \, Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 display; #X text 10 186 website:; @@ -117,14 +130,14 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1212 pd info; -#X connect 7 0 12 0; -#X connect 8 0 12 0; -#X connect 9 0 12 0; -#X connect 10 0 12 0; -#X connect 11 0 12 0; -#X connect 14 0 19 0; -#X connect 15 0 19 0; -#X connect 16 0 19 0; -#X connect 17 0 19 0; -#X connect 18 0 19 0; \ No newline at end of file +#X restore 10 1337 pd info; +#X connect 5 0 10 0; +#X connect 6 0 10 0; +#X connect 7 0 10 0; +#X connect 8 0 10 0; +#X connect 9 0 10 0; +#X connect 12 0 17 0; +#X connect 13 0 17 0; +#X connect 14 0 17 0; +#X connect 15 0 17 0; +#X connect 16 0 17 0; \ No newline at end of file diff --git a/ceammc/ext/doc/ui.display.pddoc b/ceammc/ext/doc/ui.display.pddoc index 06a3f3fb8c..824e667910 100644 --- a/ceammc/ext/doc/ui.display.pddoc +++ b/ceammc/ext/doc/ui.display.pddoc @@ -8,7 +8,7 @@ Serge Poltavsky Display GUI object - GPL3 + GPL3 or later ceammc ui display @@ -20,9 +20,13 @@ msg - - Double click to show/hide message type display - + + show/hide message type + open object help + open properties dialog + open object help + open properties dialog + accepts any messages and displays it. diff --git a/ceammc/ext/doc/ui.dsp~-help.pd b/ceammc/ext/doc/ui.dsp~-help.pd index 6881a480cd..a3ca6a0128 100644 --- a/ceammc/ext/doc/ui.dsp~-help.pd +++ b/ceammc/ext/doc/ui.dsp~-help.pd @@ -13,73 +13,85 @@ #X obj 20 201 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 206 cnv 5 115 26 empty empty mouse_events: 4 10 0 14 -262144 -49933 0; -#X text 110 241 Right-click; -#X text 285 241 opens popup menu with items: Audio Settings.; -#X obj 20 271 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 276 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +#X text 110 241 Left-click; +#X text 285 241 toggle DSP processing.; +#X text 110 261 Right-click; +#X text 285 261 opens popup menu with items: Audio Settings.; +#X text 110 281 Right-click + ⇧; +#X text 285 281 open object help.; +#X text 110 301 Right-click + ⌥; +#X text 285 301 open properties dialog.; +#X text 110 321 Right-click + ⇧; +#X text 285 321 open object help.; +#X text 61 321 [Edit]; +#X text 110 341 Right-click + ⌥; +#X text 285 341 open properties dialog.; +#X text 61 341 [Edit]; +#X obj 20 371 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 376 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; -#X msg 110 311 @receive; -#X text 245 311 Get/Set receive source. Type: symbol.; -#X msg 110 340 @send; -#X text 245 340 Get/Set send destination. Type: symbol.; -#X msg 110 369 @active_color; -#X text 245 369 Get/Set element active color (list of red \, green +#X msg 110 411 @receive; +#X text 245 411 Get/Set receive source. Type: symbol.; +#X msg 110 440 @send; +#X text 245 440 Get/Set send destination. Type: symbol.; +#X msg 110 469 @active_color; +#X text 245 469 Get/Set element active color (list of red \, green \, blue values in 0-1 range). Type: list.; -#X msg 110 411 @background_color; -#X text 245 411 Get/Set element background color (list of red \, green +#X msg 110 511 @background_color; +#X text 245 511 Get/Set element background color (list of red \, green \, blue values in 0-1 range). Type: list.; -#X msg 110 453 @border_color; -#X text 245 453 Get/Set border color (list of red \, green \, blue +#X msg 110 553 @border_color; +#X text 245 553 Get/Set border color (list of red \, green \, blue values in 0-1 range). Type: list.; -#X msg 110 495 @fontname; -#X text 245 495 Get/Set fontname. Type: symbol.; -#X msg 110 524 @fontsize; -#X text 245 524 Get/Set fontsize. Type: int. Default value: 11\. Range: +#X msg 110 595 @fontname; +#X text 245 595 Get/Set fontname. Type: symbol.; +#X msg 110 624 @fontsize; +#X text 245 624 Get/Set fontsize. Type: int. Default value: 11\. Range: 4\...11\.; -#X msg 110 566 @fontslant; -#X text 245 566 Get/Set font slant. Type: symbol. Default value: roman. +#X msg 110 666 @fontslant; +#X text 245 666 Get/Set font slant. Type: symbol. Default value: roman. Allowed values: roman \, italic.; -#X msg 110 608 @fontweight; -#X text 245 608 Get/Set font weight. Type: symbol. Default value: normal. +#X msg 110 708 @fontweight; +#X text 245 708 Get/Set font weight. Type: symbol. Default value: normal. Allowed values: normal \, bold.; -#X msg 110 650 @pinned; -#X text 245 650 Get/Set pin mode. if 1 - put element to the lowest +#X msg 110 750 @pinned; +#X text 245 750 Get/Set pin mode. if 1 - put element to the lowest level. Type: int. Default value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 692 @size; -#X text 245 692 Get/Set element size (width \, height pair). Type: +#X msg 110 792 @size; +#X text 245 792 Get/Set element size (width \, height pair). Type: list.; -#X obj 20 731 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 736 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 831 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 836 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 771 pos; -#X text 245 771 set UI element position. Arguments are:; -#X obj 255 794 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 794 X: top left x-coord. Type: float.; -#X obj 255 817 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 817 Y: top right y-coord. Type: float.; -#X msg 110 842 settings; -#X text 245 842 opens audio settings dialog.; -#X msg 110 869 start; -#X text 245 869 starts audio processing.; -#X msg 110 896 stop; -#X text 245 896 stops audio processing.; -#X obj 20 933 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 938 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 -0; -#X text 110 939 1\.; +#X msg 110 871 pos; +#X text 245 871 set UI element position. Arguments are:; +#X obj 255 894 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 894 X: top left x-coord. Type: float.; +#X obj 255 917 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 917 Y: top right y-coord. Type: float.; +#X msg 110 942 settings; +#X text 245 942 opens audio settings dialog.; +#X msg 110 969 start; +#X text 245 969 starts audio processing.; +#X msg 110 996 stop; +#X text 245 996 stops audio processing.; +#X obj 20 1033 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1038 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 1039 1\.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title ui @url ceammc.ui-help.pd; -#X obj 1 969 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 972 library: ceammc v0.7.1; -#N canvas 10 991 400 290 info 0; +#X obj 1 1069 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1072 library: ceammc v0.8.0; +#N canvas 10 1091 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 ui.dsp~; #X text 10 76 category:; @@ -89,7 +101,7 @@ list.; #X text 10 120 authors:; #X text 120 120 Pierre Guillot \, Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 ui \, dsp; #X text 10 186 website:; @@ -98,7 +110,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 991 pd info; +#X restore 10 1091 pd info; #X connect 4 0 7 0; #X connect 5 0 7 0; #X connect 6 0 7 0; \ No newline at end of file diff --git a/ceammc/ext/doc/ui.dsp~.pddoc b/ceammc/ext/doc/ui.dsp~.pddoc index f70c6731a8..dcfc7d6f7f 100644 --- a/ceammc/ext/doc/ui.dsp~.pddoc +++ b/ceammc/ext/doc/ui.dsp~.pddoc @@ -8,15 +8,20 @@ Serge Poltavsky GUI for turning DSP on/off - GPL3 + GPL3 or later ceammc ui ui dsp 0.1 + toggle DSP processing opens popup menu with items: Audio Settings + open object help + open properties dialog + open object help + open properties dialog starts audio processing diff --git a/ceammc/ext/doc/ui.env-help.pd b/ceammc/ext/doc/ui.env-help.pd index 6f4fd10099..50df7e3812 100644 --- a/ceammc/ext/doc/ui.env-help.pd +++ b/ceammc/ext/doc/ui.env-help.pd @@ -15,247 +15,278 @@ #X msg 309 201 easr 200 2 30 7; #X msg 146 230 ar 10 80; #X msg 328 230 ear 10 -4 70 -6; -#X text 347 273 Click+Drag - move point; -#X obj 50 287 ui.env @size 200 150; -#X text 347 287 Shift+Click - add new point; -#X text 347 302 Alt+Click - delete point; -#X text 347 316 Ctl+Click - toggle stop point; -#X text 347 330 Ctl+DblClick - change segment type; -#X text 347 345 MouseWheel - change sigmoid or curve skew; -#X text 347 359 MouseUp - output envelope; -#X obj 50 446 env->vline @sync 1; -#X obj 50 474 vline~; -#X obj 146 474 osc~ 1000; -#X obj 50 503 *~; -#X obj 50 532 ui.gain~ @size 120 16; -#X obj 280 532 ui.dsp~; -#X obj 50 561 dac~; -#X obj 20 600 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 605 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +#X obj 50 287 ui.env @mouse_events 1 @size 240 60; +#X text 424 287 Cmd+Click to play envelope; +#X obj 50 359 ui.mf @down; +#X obj 50 388 env->vline @sync 1; +#X obj 50 417 vline~; +#X obj 146 417 osc~ 1000; +#X obj 50 446 *~; +#X obj 50 474 ui.gain~ @size 120 16; +#X obj 280 474 ui.dsp~; +#X obj 50 503 dac~; +#X obj 20 542 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 547 cnv 5 115 26 empty empty mouse_events: 4 10 0 14 -262144 -49933 0; -#X msg 110 640 @length; -#X text 245 640 Get/Set envelope time length. Type: float. Units: ms. +#X text 110 582 Left-click; +#X text 285 582 on segment: toggle segment selection.; +#X text 110 602 Left-click + ⌥; +#X text 285 602 remove node under cursor.; +#X text 110 622 Left-click + ⇧; +#X text 285 622 create new node under cursor.; +#X text 110 642 Left-click + ⌘; +#X text 285 642 output envelope on mouse up/down.; +#X text 110 662 Mouse-drag; +#X text 285 662 move node under the cursor. Note: node can have fixed +Y coordinate.; +#X text 110 697 Mouse-drag + ⌘; +#X text 285 697 move node under the cursor and output envelope.; +#X text 110 717 Right-click; +#X text 285 717 on segment: segment type context menu. on selected +node: node context menu. if no selection: opens standard envelope menu.; +#X text 110 752 Right-click + ⇧; +#X text 285 752 open object help.; +#X text 110 772 Right-click + ⌥; +#X text 285 772 open properties dialog.; +#X text 110 792 Mouse-wheel; +#X text 285 792 on selected segment: change curve of exp or sigmoid +curve. on selected node: move node up/down.; +#X text 110 827 Right-click + ⇧; +#X text 285 827 open object help.; +#X text 61 827 [Edit]; +#X text 110 847 Right-click + ⌥; +#X text 285 847 open properties dialog.; +#X text 61 847 [Edit]; +#X obj 20 877 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 882 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 917 @length; +#X text 245 917 Get/Set envelope time length. Type: float. Units: ms. Default value: 400\. Min value: 10\.; -#X msg 110 682 @receive; -#X text 245 682 Get/Set receive source. Type: symbol.; -#X msg 110 711 @send; -#X text 245 711 Get/Set send destination. Type: symbol.; -#X msg 110 740 @active_color; -#X text 245 740 Get/Set element active color (list of red \, green +#X msg 110 959 @mouse_events; +#X text 245 959 Get/Set mouse events output mode. If on outputs @mouse_down +\, @mouse_up and @mouse_drag events. Type: int. Default value: 0\. +Allowed values: 0 \, 1\.; +#X msg 110 1016 @receive; +#X text 245 1016 Get/Set receive source. Type: symbol.; +#X msg 110 1045 @send; +#X text 245 1045 Get/Set send destination. Type: symbol.; +#X msg 110 1074 @active_color; +#X text 245 1074 Get/Set element active color (list of red \, green \, blue values in 0-1 range). Type: list.; -#X msg 110 782 @background_color; -#X text 245 782 Get/Set element background color (list of red \, green +#X msg 110 1116 @background_color; +#X text 245 1116 Get/Set element background color (list of red \, green \, blue values in 0-1 range). Type: list.; -#X msg 110 824 @border_color; -#X text 245 824 Get/Set border color (list of red \, green \, blue +#X msg 110 1158 @border_color; +#X text 245 1158 Get/Set border color (list of red \, green \, blue values in 0-1 range). Type: list.; -#X msg 110 866 @line_color; -#X text 245 866 Get/Set line color (list of red \, green \, blue values +#X msg 110 1200 @line_color; +#X text 245 1200 Get/Set line color (list of red \, green \, blue values in 0-1 range). Type: list.; -#X msg 110 908 @fontname; -#X text 245 908 Get/Set fontname. Type: symbol.; -#X msg 110 937 @fontsize; -#X text 245 937 Get/Set fontsize. Type: int. Default value: 11\. Range: +#X msg 110 1242 @fontname; +#X text 245 1242 Get/Set fontname. Type: symbol.; +#X msg 110 1271 @fontsize; +#X text 245 1271 Get/Set fontsize. Type: int. Default value: 11\. Range: 4\...11\.; -#X msg 110 979 @fontslant; -#X text 245 979 Get/Set font slant. Type: symbol. Default value: roman. +#X msg 110 1313 @fontslant; +#X text 245 1313 Get/Set font slant. Type: symbol. Default value: roman. Allowed values: roman \, italic.; -#X msg 110 1021 @fontweight; -#X text 245 1021 Get/Set font weight. Type: symbol. Default value: +#X msg 110 1355 @fontweight; +#X text 245 1355 Get/Set font weight. Type: symbol. Default value: normal. Allowed values: normal \, bold.; -#X msg 110 1063 @pinned; -#X text 245 1063 Get/Set pin mode. if 1 - put element to the lowest +#X msg 110 1397 @pinned; +#X text 245 1397 Get/Set pin mode. if 1 - put element to the lowest level. Type: int. Default value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 1105 @presetname; -#X text 245 1105 Get/Set preset name for using with [ui.preset]. Type: +#X msg 110 1439 @presetname; +#X text 245 1439 Get/Set preset name for using with [ui.preset]. Type: symbol.; -#X msg 110 1134 @size; -#X text 245 1134 Get/Set element size (width \, height pair). Type: +#X msg 110 1468 @size; +#X text 245 1468 Get/Set element size (width \, height pair). Type: list.; -#X obj 20 1173 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1178 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 1507 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1512 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 1213 adsr; -#X text 245 1213 creates ADSR envelope with one stop point. Arguments +#X msg 110 1547 adsr; +#X text 245 1547 creates ADSR envelope with one stop point. Arguments are:; -#X obj 255 1236 cnv 1 22 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1236 MS: attack time. Type: float. Min value: 0\.; -#X obj 255 1259 cnv 1 22 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1259 MS: decay time. Type: float. Min value: 0\.; -#X obj 255 1282 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1282 %: sustain level. Type: float. Range: 0\...100\.; -#X obj 255 1305 cnv 1 22 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1305 MS: release time. Type: float. Min value: 0\.; -#X msg 110 1330 ar; -#X text 245 1330 creates AR envelope without stop points. Arguments +#X obj 255 1570 cnv 1 22 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1570 MS: attack time. Type: float. Min value: 0\.; +#X obj 255 1593 cnv 1 22 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1593 MS: decay time. Type: float. Min value: 0\.; +#X obj 255 1616 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1616 %: sustain level. Type: float. Range: 0\...100\.; +#X obj 255 1639 cnv 1 22 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1639 MS: release time. Type: float. Min value: 0\.; +#X msg 110 1664 ar; +#X text 245 1664 creates AR envelope without stop points. Arguments are:; -#X obj 255 1353 cnv 1 22 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1353 MS: attack time. Type: float. Min value: 0\.; -#X obj 255 1376 cnv 1 22 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1376 MS: release time. Type: float. Min value: 0\.; -#X msg 110 1401 asr; -#X text 245 1401 creates ASR envelope with one stop point. Arguments +#X obj 255 1687 cnv 1 22 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1687 MS: attack time. Type: float. Min value: 0\.; +#X obj 255 1710 cnv 1 22 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1710 MS: release time. Type: float. Min value: 0\.; +#X msg 110 1735 asr; +#X text 245 1735 creates ASR envelope with one stop point. Arguments are:; -#X obj 255 1424 cnv 1 22 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1424 MS: attack time. Type: float. Min value: 0\.; -#X obj 255 1447 cnv 1 22 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1447 MS: release time. Type: float. Min value: 0\.; -#X msg 110 1472 clear; -#X text 245 1472 clear specified preset. Arguments are:; -#X obj 255 1495 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1495 IDX: preset index. Type: int. Min value: 0\.; -#X msg 110 1520 eadsr; -#X text 245 1520 creates exponential ADSR envelope with one stop point. +#X obj 255 1758 cnv 1 22 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1758 MS: attack time. Type: float. Min value: 0\.; +#X obj 255 1781 cnv 1 22 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1781 MS: release time. Type: float. Min value: 0\.; +#X msg 110 1806 clear; +#X text 245 1806 clear specified preset. Arguments are:; +#X obj 255 1829 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1829 IDX: preset index. Type: int. Min value: 0\.; +#X msg 110 1854 eadsr; +#X text 245 1854 creates exponential ADSR envelope with one stop point. Arguments are:; -#X obj 255 1558 cnv 1 22 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1558 MS: attack time. Type: float. Min value: 0\.; -#X obj 255 1581 cnv 1 98 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1581 ATTACK_CURVE: attack segment curve. Type: float.; -#X obj 255 1604 cnv 1 22 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1604 MS: decay time. Type: float. Min value: 0\.; -#X obj 255 1627 cnv 1 90 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1627 DECAY_CURVE: decay segment curve. Type: float.; -#X obj 255 1650 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1650 %: sustain level. Type: float. Range: 0\...100\.; -#X obj 255 1673 cnv 1 22 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1673 MS: release time. Type: float. Min value: 0\.; -#X obj 255 1696 cnv 1 105 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1696 RELEASE_CURVE: release segment curve. Type: float.; -#X msg 110 1721 ear; -#X text 245 1721 creates exponential AR envelope without stop points. +#X obj 255 1892 cnv 1 22 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1892 MS: attack time. Type: float. Min value: 0\.; +#X obj 255 1915 cnv 1 98 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1915 ATTACK_CURVE: attack segment curve. Type: float.; +#X obj 255 1938 cnv 1 22 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1938 MS: decay time. Type: float. Min value: 0\.; +#X obj 255 1961 cnv 1 90 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1961 DECAY_CURVE: decay segment curve. Type: float.; +#X obj 255 1984 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1984 %: sustain level. Type: float. Range: 0\...100\.; +#X obj 255 2007 cnv 1 22 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2007 MS: release time. Type: float. Min value: 0\.; +#X obj 255 2030 cnv 1 105 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2030 RELEASE_CURVE: release segment curve. Type: float.; +#X msg 110 2055 ear; +#X text 245 2055 creates exponential AR envelope without stop points. Arguments are:; -#X obj 255 1759 cnv 1 22 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1759 MS: attack time. Type: float.; -#X obj 255 1782 cnv 1 98 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1782 ATTACK_CURVE: attack segment curve. Type: float.; -#X obj 255 1805 cnv 1 22 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1805 MS: release time. Type: float.; -#X obj 255 1828 cnv 1 105 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1828 RELEASE_CURVE: release segment curve. Type: float.; -#X msg 110 1853 easr; -#X text 245 1853 creates exponential AR envelope with one stop point. +#X obj 255 2093 cnv 1 22 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2093 MS: attack time. Type: float.; +#X obj 255 2116 cnv 1 98 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2116 ATTACK_CURVE: attack segment curve. Type: float.; +#X obj 255 2139 cnv 1 22 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2139 MS: release time. Type: float.; +#X obj 255 2162 cnv 1 105 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2162 RELEASE_CURVE: release segment curve. Type: float.; +#X msg 110 2187 easr; +#X text 245 2187 creates exponential AR envelope with one stop point. Arguments are:; -#X obj 255 1891 cnv 1 22 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1891 MS: attack time. Type: float. Min value: 0\.; -#X obj 255 1914 cnv 1 98 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1914 ATTACK_CURVE: attack segment curve. Type: float.; -#X obj 255 1937 cnv 1 22 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1937 MS: release time. Type: float. Min value: 0\.; -#X obj 255 1960 cnv 1 105 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1960 RELEASE_CURVE: release segment curve. Type: float.; -#X msg 110 1985 exp; -#X text 245 1985 creates exponential-segmented envelope with arbitrary +#X obj 255 2225 cnv 1 22 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2225 MS: attack time. Type: float. Min value: 0\.; +#X obj 255 2248 cnv 1 98 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2248 ATTACK_CURVE: attack segment curve. Type: float.; +#X obj 255 2271 cnv 1 22 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2271 MS: release time. Type: float. Min value: 0\.; +#X obj 255 2294 cnv 1 105 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2294 RELEASE_CURVE: release segment curve. Type: float.; +#X msg 110 2319 exp; +#X text 245 2319 creates exponential-segmented envelope with arbitrary number of segments. Arguments are:; -#X obj 255 2023 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2023 VAL0: begin value. Type: float.; -#X obj 255 2046 cnv 1 22 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2046 MS: line length. Type: float. Min value: 1\.; -#X obj 255 2069 cnv 1 52 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2069 CURVE0: segment curve. Type: float.; -#X obj 255 2092 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2092 VAL1: value. Type: float.; -#X obj 255 2115 cnv 1 47 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2115 [LEN1]: segment length. Type: float.; -#X obj 255 2138 cnv 1 62 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2138 [CURVE1]: segment curve. Type: float.; -#X obj 255 2161 cnv 1 47 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2161 [VAL2]: value. Type: float.; -#X msg 110 2186 line; -#X text 245 2186 creates line-segmented envelope with arbitrary number +#X obj 255 2357 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2357 VAL0: begin value. Type: float.; +#X obj 255 2380 cnv 1 22 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2380 MS: line length. Type: float. Min value: 1\.; +#X obj 255 2403 cnv 1 52 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2403 CURVE0: segment curve. Type: float.; +#X obj 255 2426 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2426 VAL1: value. Type: float.; +#X obj 255 2449 cnv 1 47 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2449 [LEN1]: segment length. Type: float.; +#X obj 255 2472 cnv 1 62 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2472 [CURVE1]: segment curve. Type: float.; +#X obj 255 2495 cnv 1 47 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2495 [VAL2]: value. Type: float.; +#X msg 110 2520 line; +#X text 245 2520 creates line-segmented envelope with arbitrary number of segments. Arguments are:; -#X obj 255 2224 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2224 VAL0: begin value. Type: float.; -#X obj 255 2247 cnv 1 22 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2247 MS: line length. Type: float. Min value: 1\.; -#X obj 255 2270 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2270 VAL1: value. Type: float.; -#X obj 255 2293 cnv 1 47 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2293 [LEN1]: segment length. Type: float.; -#X obj 255 2316 cnv 1 47 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2316 [VAL2]: value. Type: float.; -#X msg 110 2341 load; -#X text 245 2341 loads specified preset. Arguments are:; -#X obj 255 2364 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2364 IDX: preset index. Type: int.; -#X msg 110 2389 pos; -#X text 245 2389 set UI element position. Arguments are:; -#X obj 255 2412 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2412 X: top left x-coord. Type: float.; -#X obj 255 2435 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2435 Y: top right y-coord. Type: float.; -#X msg 110 2460 sigmoid; -#X text 245 2460 creates sigmoid-segmented envelope with arbitrary +#X obj 255 2558 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2558 VAL0: begin value. Type: float.; +#X obj 255 2581 cnv 1 22 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2581 MS: line length. Type: float. Min value: 1\.; +#X obj 255 2604 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2604 VAL1: value. Type: float.; +#X obj 255 2627 cnv 1 47 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2627 [LEN1]: segment length. Type: float.; +#X obj 255 2650 cnv 1 47 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2650 [VAL2]: value. Type: float.; +#X msg 110 2675 load; +#X text 245 2675 loads specified preset. Arguments are:; +#X obj 255 2698 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2698 IDX: preset index. Type: int.; +#X msg 110 2723 pos; +#X text 245 2723 set UI element position. Arguments are:; +#X obj 255 2746 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2746 X: top left x-coord. Type: float.; +#X obj 255 2769 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2769 Y: top right y-coord. Type: float.; +#X msg 110 2794 sigmoid; +#X text 245 2794 creates sigmoid-segmented envelope with arbitrary number of segments. Arguments are:; -#X obj 255 2498 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2498 VAL0: begin value. Type: float.; -#X obj 255 2521 cnv 1 22 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2521 MS: line length. Type: float. Min value: 1\.; -#X obj 255 2544 cnv 1 52 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2544 CURVE0: segment curve. Type: float.; -#X obj 255 2567 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2567 VAL1: value. Type: float.; -#X obj 255 2590 cnv 1 47 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2590 [LEN1]: segment length. Type: float.; -#X obj 255 2613 cnv 1 62 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2613 [CURVE1]: segment curve. Type: float.; -#X obj 255 2636 cnv 1 47 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2636 [VAL2]: value. Type: float.; -#X msg 110 2661 sin2; -#X text 245 2661 creates quadratic sine-segmented envelope with arbitrary +#X obj 255 2832 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2832 VAL0: begin value. Type: float.; +#X obj 255 2855 cnv 1 22 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2855 MS: line length. Type: float. Min value: 1\.; +#X obj 255 2878 cnv 1 52 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2878 CURVE0: segment curve. Type: float.; +#X obj 255 2901 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2901 VAL1: value. Type: float.; +#X obj 255 2924 cnv 1 47 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2924 [LEN1]: segment length. Type: float.; +#X obj 255 2947 cnv 1 62 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2947 [CURVE1]: segment curve. Type: float.; +#X obj 255 2970 cnv 1 47 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2970 [VAL2]: value. Type: float.; +#X msg 110 2995 sin2; +#X text 245 2995 creates quadratic sine-segmented envelope with arbitrary number of segments. Arguments are:; -#X obj 255 2699 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2699 VAL0: begin value. Type: float.; -#X obj 255 2722 cnv 1 22 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2722 MS: line length. Type: float. Min value: 1\.; -#X obj 255 2745 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2745 VAL1: value. Type: float.; -#X obj 255 2768 cnv 1 47 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2768 [LEN1]: segment length. Type: float.; -#X obj 255 2791 cnv 1 47 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2791 [VAL2]: value. Type: float.; -#X msg 110 2816 step; -#X text 245 2816 creates step-segmented envelope with arbitrary number +#X obj 255 3033 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 3033 VAL0: begin value. Type: float.; +#X obj 255 3056 cnv 1 22 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 3056 MS: line length. Type: float. Min value: 1\.; +#X obj 255 3079 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 3079 VAL1: value. Type: float.; +#X obj 255 3102 cnv 1 47 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 3102 [LEN1]: segment length. Type: float.; +#X obj 255 3125 cnv 1 47 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 3125 [VAL2]: value. Type: float.; +#X msg 110 3150 step; +#X text 245 3150 creates step-segmented envelope with arbitrary number of segments. Arguments are:; -#X obj 255 2854 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2854 VAL0: begin value. Type: float.; -#X obj 255 2877 cnv 1 22 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2877 MS: step length. Type: float. Min value: 1\.; -#X obj 255 2900 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2900 VAL1: value. Type: float.; -#X obj 255 2923 cnv 1 47 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2923 [LEN1]: segment length. Type: float.; -#X obj 255 2946 cnv 1 47 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2946 [VAL2]: value. Type: float.; -#X msg 110 2971 store; -#X text 245 2971 stores specified preset. Arguments are:; -#X obj 255 2994 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2994 IDX: preset index. Type: int.; -#X obj 20 3029 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 3034 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +#X obj 255 3188 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 3188 VAL0: begin value. Type: float.; +#X obj 255 3211 cnv 1 22 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 3211 MS: step length. Type: float. Min value: 1\.; +#X obj 255 3234 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 3234 VAL1: value. Type: float.; +#X obj 255 3257 cnv 1 47 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 3257 [LEN1]: segment length. Type: float.; +#X obj 255 3280 cnv 1 47 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 3280 [VAL2]: value. Type: float.; +#X msg 110 3305 store; +#X text 245 3305 stores specified preset. Arguments are:; +#X obj 255 3328 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 3328 IDX: preset index. Type: int.; +#X obj 20 3363 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 3368 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 3035 1\.; -#X text 150 3035 *data*; -#X text 245 3035 set new envelope and output it.; -#X text 150 3055 *bang*; -#X text 245 3055 output current envelope.; -#X obj 20 3085 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 3090 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 3369 1\.; +#X text 150 3369 *data*; +#X text 245 3369 set new envelope and output it.; +#X text 150 3389 *bang*; +#X text 245 3389 output current envelope.; +#X obj 20 3419 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 3424 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 3091 1\.; -#X text 245 3091 envelope.; +#X text 110 3425 1\.; +#X text 245 3425 envelope.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title ui @url ceammc.ui-help.pd; -#X obj 1 3141 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 3144 library: ceammc v0.7.1; -#N canvas 10 3163 400 290 info 0; +#X obj 1 3475 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 3478 library: ceammc v0.8.0; +#N canvas 10 3497 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 ui.env; #X text 10 76 category:; @@ -265,7 +296,7 @@ of segments. Arguments are:; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 ui \, envelope; #X text 10 186 website:; @@ -274,19 +305,20 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 3163 pd info; +#X restore 10 3497 pd info; #X connect 6 0 7 0; -#X connect 7 0 15 0; -#X connect 8 0 15 0; -#X connect 10 0 15 0; -#X connect 12 0 15 0; -#X connect 9 0 15 0; -#X connect 11 0 15 0; -#X connect 13 0 15 0; -#X connect 15 0 22 0; -#X connect 22 0 23 0; -#X connect 23 0 25 0; -#X connect 24 0 25 1; -#X connect 25 0 26 0; -#X connect 26 0 28 0; -#X connect 26 0 28 1; \ No newline at end of file +#X connect 7 0 14 0; +#X connect 8 0 14 0; +#X connect 10 0 14 0; +#X connect 12 0 14 0; +#X connect 9 0 14 0; +#X connect 11 0 14 0; +#X connect 13 0 14 0; +#X connect 14 0 16 0; +#X connect 16 0 17 0; +#X connect 17 0 18 0; +#X connect 18 0 20 0; +#X connect 19 0 20 1; +#X connect 20 0 21 0; +#X connect 21 0 23 0; +#X connect 21 0 23 1; \ No newline at end of file diff --git a/ceammc/ext/doc/ui.env.pddoc b/ceammc/ext/doc/ui.env.pddoc index 4adda90b35..60be7b7980 100644 --- a/ceammc/ext/doc/ui.env.pddoc +++ b/ceammc/ext/doc/ui.env.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky envelope editor widget - GPL3 + GPL3 or later ceammc ui ui envelope @@ -16,6 +16,27 @@ Editor of sound envelope function + + on segment: toggle segment selection + remove node under cursor + create new node under + cursor + output envelope on mouse + up/down + move node under the cursor. Note: node can have + fixed Y coordinate. + move node under the cursor and output + envelope + on segment: segment type context menu. on + selected node: node context menu. if no selection: opens standard envelope + menu. + open object help + open properties dialog + on selected segment: change curve of exp or + sigmoid curve. on selected node: move node up/down + open object help + open properties dialog + envelope time length @@ -41,6 +62,8 @@ weight font slant + mouse events output + mode. If on outputs @mouse_down, @mouse_up and @mouse_drag events @@ -177,17 +200,13 @@ | | | [ar 10 80( | | [ear 10 -4 70 -6( | | | | | | | | | | | | | | -| | | | | | | /*Click+Drag - move point */ -[ui.env ] /*Shift+Click - add new point */ -| /*Alt+Click - delete point */ -| /*Ctl+Click - toggle stop point */ -| /*Ctl+DblClick - change segment type */ -| /*MouseWheel - change sigmoid or curve skew */ -| /*MouseUp - output envelope */ +| | | | | | | +[ui.env @mouse_events 1 @size 240 60] /*Cmd+Click to play envelope*/ | | | | +[ui.mf @down] | [env->vline @sync 1] | diff --git a/ceammc/ext/doc/ui.gain2~-help.pd b/ceammc/ext/doc/ui.gain2~-help.pd index 672f76f821..dcab4940ab 100644 --- a/ceammc/ext/doc/ui.gain2~-help.pd +++ b/ceammc/ext/doc/ui.gain2~-help.pd @@ -4,6 +4,10 @@ #X text 591 50 UI stereo gain control; #X obj 1 1 cnv 5 765 40 empty empty ui.gain2~ 20 20 0 20 -104026 -4096 0; +#X obj 472 13 ui.link @background_color 0.39216 0.39216 0.39216 @title +[ui.hgain2~] @url ui.gain2~-help.pd; +#X obj 572 13 ui.link @background_color 0.39216 0.39216 0.39216 @title +[ui.vgain2~] @url ui.gain2~-help.pd; #X obj 672 13 ui.link @background_color 0.39216 0.39216 0.39216 @title [ui.gain2~] @url ui.gain2~-help.pd; #X msg 50 118 open %CEAMMC%/guitar1.wav \, 1; @@ -14,116 +18,172 @@ #X obj 290 234 ui.dsp~; #X obj 50 262 dac~; #X obj 20 301 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 306 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +#X obj 20 306 cnv 5 115 26 empty empty mouse_events: 4 10 0 14 -262144 -49933 0; -#X msg 110 341 @amp; -#X text 245 341 Get/Set gain as amplitude ratio. Type: float. Default +#X text 110 341 Left-click; +#X text 285 341 jump to click position if @relative property is off.; +#X text 110 361 Mouse-drag; +#X text 285 361 relative gain change if @relative is on \, otherwise +follows mouse pointer.; +#X text 110 396 Mouse-drag + ⇧; +#X text 285 396 slow relative gain change if @relative is on.; +#X text 110 416 Mouse-wheel; +#X text 285 416 change the knob value.; +#X text 110 436 Mouse-wheel + ⇧; +#X text 285 436 change the knob value slowly.; +#X text 110 456 Right-click; +#X text 285 456 open popup menu.; +#X text 110 476 Right-click + ⇧; +#X text 285 476 open object help.; +#X text 110 496 Right-click + ⌥; +#X text 285 496 open properties dialog.; +#X text 110 516 Double-click + ⇧; +#X text 285 516 toggle MIDI-learn mode (red border displayed).; +#X text 110 536 Mouse-drag + ⌘; +#X text 285 536 relative gain change.; +#X text 61 536 [Edit]; +#X text 110 556 Double-click + ⌘; +#X text 285 556 toggle horizontal/vertical orientation.; +#X text 61 556 [Edit]; +#X text 110 576 Right-click + ⇧; +#X text 285 576 open object help.; +#X text 61 576 [Edit]; +#X text 110 596 Right-click + ⌥; +#X text 285 596 open properties dialog.; +#X text 61 596 [Edit]; +#X obj 20 626 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 631 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 666 @amp; +#X text 245 666 Get/Set gain as amplitude ratio. Type: float. Default value: 0\.; -#X msg 110 383 @db; -#X text 245 383 Get/Set gain in dbfs scale. Type: float. Units: db. +#X msg 110 708 @db; +#X text 245 708 Get/Set gain in dbfs scale. Type: float. Units: db. Default value: -60\.; -#X msg 110 425 @max; -#X text 245 425 Get/Set maximum gain value. Type: int. Units: db. Default +#X msg 110 750 @max; +#X text 245 750 Get/Set maximum gain value. Type: int. Units: db. Default value: 0\. Range: -12\...12\.; -#X msg 110 467 @min; -#X text 245 467 Get/Set minimal gain value. Type: int. Units: db. Default -value: -60\. Range: -90\...-30\.; -#X msg 110 509 @output_value; -#X text 245 509 Get/Set flag to output @db property after each knob +#X msg 110 792 @min; +#X text 245 792 Get/Set minimal gain value. Type: int. Units: db. Default +value: -60\. Range: -90\...-15\.; +#X msg 110 834 @mouse_events; +#X text 245 834 Get/Set mouse events output mode. If on outputs @mouse_down +\, @mouse_up and @mouse_drag events. Type: int. Default value: 0\. +Allowed values: 0 \, 1\.; +#X msg 110 891 @output_value; +#X text 245 891 Get/Set flag to output @db property after each knob move. Type: int. Default value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 551 @receive; -#X text 245 551 Get/Set receive source. Type: symbol.; -#X msg 110 580 @send; -#X text 245 580 Get/Set send destination. Type: symbol.; -#X msg 110 609 @background_color; -#X text 245 609 Get/Set element background color (list of red \, green +#X msg 110 933 @receive; +#X text 245 933 Get/Set receive source. Type: symbol.; +#X msg 110 962 @relative; +#X text 245 962 Get/Set relative input mode. When set do not jump to +value on click. Type: int. Default value: 1\. Allowed values: 0 \, +1\.; +#X msg 110 1004 @send; +#X text 245 1004 Get/Set send destination. Type: symbol.; +#X msg 110 1033 @show_range; +#X text 245 1033 Get/Set if show slider range. Type: int. Default value: +1\. Allowed values: 0 \, 1\.; +#X msg 110 1075 @midi_channel; +#X text 245 1075 Get/Set binded MIDI channel. 0 means listen to all +channels. Type: int. Default value: 0\. Range: 0\...16\.; +#X msg 110 1117 @midi_control; +#X text 245 1117 Get/Set binded MIDI controller number. 0 means not +binded to any controller. Type: int. Default value: 0\. Range: 0\...128\.; +#X msg 110 1174 @midi_pickup; +#X text 245 1174 Get/Set pickup current value. If slider is binded +to value \, first time you should pass over this value to make binding. +It prevents from sudden value change on first control change. Type: +int. Default value: 1\. Allowed values: 0 \, 1\.; +#X msg 110 1246 @background_color; +#X text 245 1246 Get/Set element background color (list of red \, green \, blue values in 0-1 range). Type: list.; -#X msg 110 651 @border_color; -#X text 245 651 Get/Set border color (list of red \, green \, blue +#X msg 110 1288 @border_color; +#X text 245 1288 Get/Set border color (list of red \, green \, blue values in 0-1 range). Type: list.; -#X msg 110 693 @knob_color; -#X text 245 693 Get/Set knob color (list of red \, green \, blue values +#X msg 110 1330 @knob_color; +#X text 245 1330 Get/Set knob color (list of red \, green \, blue values in 0-1 range). Type: list.; -#X msg 110 735 @fontname; -#X text 245 735 Get/Set fontname. Type: symbol.; -#X msg 110 764 @fontsize; -#X text 245 764 Get/Set fontsize. Type: int. Default value: 11\. Range: +#X msg 110 1372 @fontname; +#X text 245 1372 Get/Set fontname. Type: symbol.; +#X msg 110 1401 @fontsize; +#X text 245 1401 Get/Set fontsize. Type: int. Default value: 11\. Range: 4\...11\.; -#X msg 110 806 @fontslant; -#X text 245 806 Get/Set font slant. Type: symbol. Default value: roman. +#X msg 110 1443 @fontslant; +#X text 245 1443 Get/Set font slant. Type: symbol. Default value: roman. Allowed values: roman \, italic.; -#X msg 110 848 @fontweight; -#X text 245 848 Get/Set font weight. Type: symbol. Default value: normal. -Allowed values: normal \, bold.; -#X msg 110 890 @pinned; -#X text 245 890 Get/Set pin mode. if 1 - put element to the lowest +#X msg 110 1485 @fontweight; +#X text 245 1485 Get/Set font weight. Type: symbol. Default value: +normal. Allowed values: normal \, bold.; +#X msg 110 1527 @pinned; +#X text 245 1527 Get/Set pin mode. if 1 - put element to the lowest level. Type: int. Default value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 932 @presetname; -#X text 245 932 Get/Set preset name for using with [ui.preset]. Type: +#X msg 110 1569 @presetname; +#X text 245 1569 Get/Set preset name for using with [ui.preset]. Type: symbol.; -#X msg 110 961 @size; -#X text 245 961 Get/Set element size (width \, height pair). Type: +#X msg 110 1598 @size; +#X text 245 1598 Get/Set element size (width \, height pair). Type: list.; -#X obj 20 1000 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1005 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 1637 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1642 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 1040 clear; -#X text 245 1040 clears specified preset. Arguments are:; -#X obj 255 1063 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1063 IDX: preset index. Type: int.; -#X msg 110 1088 load; -#X text 245 1088 loads specified preset. Arguments are:; -#X obj 255 1111 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1111 IDX: preset index. Type: int.; -#X msg 110 1136 pos; -#X text 245 1136 set UI element position. Arguments are:; -#X obj 255 1159 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1159 X: top left x-coord. Type: float.; -#X obj 255 1182 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1182 Y: top right y-coord. Type: float.; -#X msg 110 1207 set N; -#X text 245 1207 set current gain to N db.; -#X msg 110 1234 store; -#X text 245 1234 stores specified preset. Arguments are:; -#X obj 255 1257 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1257 IDX: preset index. Type: int.; -#X msg 110 1282 + N; -#X text 245 1282 increase current gain by N db.; -#X msg 110 1309 ++; -#X text 245 1309 decrease current gain by 1 db.; -#X msg 110 1336 - N; -#X text 245 1336 decrease current gain by N db.; -#X msg 110 1363 --; -#X text 245 1363 decrease current gain by 1 db.; -#X obj 20 1400 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1405 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +#X msg 110 1677 clear; +#X text 245 1677 clears specified preset. Arguments are:; +#X obj 255 1700 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1700 IDX: preset index. Type: int.; +#X msg 110 1725 load; +#X text 245 1725 loads specified preset. Arguments are:; +#X obj 255 1748 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1748 IDX: preset index. Type: int.; +#X msg 110 1773 pos; +#X text 245 1773 set UI element position. Arguments are:; +#X obj 255 1796 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1796 X: top left x-coord. Type: float.; +#X obj 255 1819 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1819 Y: top right y-coord. Type: float.; +#X msg 110 1844 set N; +#X text 245 1844 set current gain to N db.; +#X msg 110 1871 store; +#X text 245 1871 stores specified preset. Arguments are:; +#X obj 255 1894 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1894 IDX: preset index. Type: int.; +#X msg 110 1919 + N; +#X text 245 1919 increase current gain by N db.; +#X msg 110 1946 ++; +#X text 245 1946 decrease current gain by 1 db.; +#X msg 110 1973 - N; +#X text 245 1973 decrease current gain by N db.; +#X msg 110 2000 --; +#X text 245 2000 decrease current gain by 1 db.; +#X obj 20 2037 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 2042 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1406 1\.; -#X text 245 1406 left input signal.; -#X text 150 1426 *bang*; -#X text 245 1426 output current gain @db property.; -#X text 110 1446 2\.; -#X text 245 1446 right input signal.; -#X obj 20 1476 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1481 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 2043 1\.; +#X text 245 2043 left input signal.; +#X text 150 2063 *bang*; +#X text 245 2063 output current gain @db property.; +#X text 110 2083 2\.; +#X text 245 2083 right input signal.; +#X obj 20 2113 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 2118 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1482 1\.; -#X text 245 1482 left output signal.; -#X text 110 1502 2\.; -#X text 245 1502 right output signal.; +#X text 110 2119 1\.; +#X text 245 2119 left output signal.; +#X text 110 2139 2\.; +#X text 245 2139 right output signal.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title ui @url ceammc.ui-help.pd; -#X obj 1 1552 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1555 library: ceammc v0.7.1; -#N canvas 10 1574 400 290 info 0; +#X obj 1 2189 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 2192 library: ceammc v0.8.0; +#N canvas 10 2211 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 ui.gain2~; #X text 10 76 category:; @@ -133,7 +193,7 @@ list.; #X text 10 120 authors:; #X text 120 120 Serge Potlavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 ui \, gain; #X text 10 186 website:; @@ -142,11 +202,11 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1574 pd info; -#X connect 4 0 5 0; -#X connect 5 0 6 0; +#X restore 10 2211 pd info; #X connect 6 0 7 0; #X connect 7 0 8 0; -#X connect 7 1 8 1; -#X connect 8 0 10 0; -#X connect 8 1 10 1; \ No newline at end of file +#X connect 8 0 9 0; +#X connect 9 0 10 0; +#X connect 9 1 10 1; +#X connect 10 0 12 0; +#X connect 10 1 12 1; \ No newline at end of file diff --git a/ceammc/ext/doc/ui.gain2~.pddoc b/ceammc/ext/doc/ui.gain2~.pddoc index 3d46ddba95..7e171b7b75 100644 --- a/ceammc/ext/doc/ui.gain2~.pddoc +++ b/ceammc/ext/doc/ui.gain2~.pddoc @@ -7,24 +7,54 @@ Serge Potlavsky UI stereo gain control - GPL3 + GPL3 or later ceammc ui ui gain 0.7 + + ui.hgain2~ + ui.vgain2~ + + + jump to click position if @relative property + is off + relative gain change if @relative is on, otherwise + follows mouse pointer + slow relative gain change if @relative + is on + change the knob value + change the knob value slowly + open popup menu + open object help + open properties dialog + relative gain change + toggle horizontal/vertical + orientation + toggle MIDI-learn mode (red border + displayed) + open object help + open properties dialog + maximum gain value - minimal gain value gain in dbfs scale gain as amplitude ratio flag to output @db property after each knob move + relative input mode. When + set do not jump to value on click. + if show slider + range preset name for using with [ui.preset] + mouse events output + mode. If on outputs @mouse_down, @mouse_up and @mouse_drag events send destination receive source element size (width, height pair) @@ -43,6 +73,14 @@ weight font slant + + binded + MIDI channel. 0 means listen to all channels + + binded MIDI controller number. 0 means not binded to any controller. + pickup current value. + If slider is binded to value, first time you should pass over this value to make + binding. It prevents from sudden value change on first control change increase current gain by N db diff --git a/ceammc/ext/doc/ui.gain~-help.pd b/ceammc/ext/doc/ui.gain~-help.pd index bc7d6bf9c4..5400f56d8b 100644 --- a/ceammc/ext/doc/ui.gain~-help.pd +++ b/ceammc/ext/doc/ui.gain~-help.pd @@ -4,128 +4,190 @@ #X text 644 50 UI gain control; #X obj 1 1 cnv 5 765 40 empty empty ui.gain~ 20 20 0 20 -104026 -4096 0; +#X obj 494 13 ui.link @background_color 0.39216 0.39216 0.39216 @title +[ui.hgain~] @url ui.gain~-help.pd; +#X obj 587 13 ui.link @background_color 0.39216 0.39216 0.39216 @title +[ui.vgain~] @url ui.gain~-help.pd; #X obj 680 13 ui.link @background_color 0.39216 0.39216 0.39216 @title [ui.gain~] @url ui.gain~-help.pd; -#X obj 50 118 osc~ 440; -#X msg 78 147 @db -30; -#X msg 174 147 @amp 0.25; -#X msg 290 147 - 3; -#X msg 347 147 + 3; -#X msg 405 147 ++; -#X msg 453 147 --; -#X msg 98 176 bang; -#X obj 50 205 ui.gain~ @output_value 1; -#X obj 98 234 ui.dsp~; -#X obj 50 334 ~->; -#X obj 50 363 dac~; -#X obj 126 363 ui.display @display_type 1 @size 150 18; -#X obj 20 403 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 408 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +#X text 50 118 use [ui.hgain~] to create horizontal control]; +#X obj 50 147 ui.hgain~; +#X obj 50 176 osc~ 440; +#X msg 78 205 @db -30; +#X msg 174 205 @amp 0.25; +#X msg 290 205 - 3; +#X msg 347 205 + 3; +#X msg 405 205 ++; +#X msg 453 205 --; +#X msg 98 234 bang; +#X obj 50 262 ui.gain~ @output_value 1; +#X obj 98 291 ui.dsp~; +#X obj 50 392 ~->; +#X obj 50 421 dac~; +#X obj 126 421 ui.display @display_type 1 @size 150 18; +#X obj 20 461 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 466 cnv 5 115 26 empty empty mouse_events: 4 10 0 14 -262144 -49933 0; -#X msg 110 443 @amp; -#X text 245 443 Get/Set gain as amplitude ratio. Type: float. Default +#X text 110 501 Left-click; +#X text 285 501 jump to click position if @relative property is off.; +#X text 110 521 Mouse-drag; +#X text 285 521 relative gain change if @relative is on \, otherwise +follows mouse pointer.; +#X text 110 556 Mouse-drag + ⇧; +#X text 285 556 slow relative gain change if @relative is on.; +#X text 110 576 Mouse-wheel; +#X text 285 576 change the knob value.; +#X text 110 596 Mouse-wheel + ⇧; +#X text 285 596 change the knob value slowly.; +#X text 110 616 Right-click; +#X text 285 616 open popup menu.; +#X text 110 636 Right-click + ⇧; +#X text 285 636 open object help.; +#X text 110 656 Right-click + ⌥; +#X text 285 656 open properties dialog.; +#X text 110 676 Double-click + ⇧; +#X text 285 676 toggle MIDI-learn mode (red border displayed).; +#X text 110 696 Mouse-drag + ⌘; +#X text 285 696 relative gain change.; +#X text 61 696 [Edit]; +#X text 110 716 Double-click + ⌘; +#X text 285 716 toggle horizontal/vertical orientation.; +#X text 61 716 [Edit]; +#X text 110 736 Right-click + ⇧; +#X text 285 736 open object help.; +#X text 61 736 [Edit]; +#X text 110 756 Right-click + ⌥; +#X text 285 756 open properties dialog.; +#X text 61 756 [Edit]; +#X obj 20 786 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 791 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 826 @amp; +#X text 245 826 Get/Set gain as amplitude ratio. Type: float. Default value: 0\.; -#X msg 110 485 @db; -#X text 245 485 Get/Set gain in dbfs scale. Type: float. Units: db. +#X msg 110 868 @db; +#X text 245 868 Get/Set gain in dbfs scale. Type: float. Units: db. Default value: -60\.; -#X msg 110 527 @max; -#X text 245 527 Get/Set maximum gain value. Type: int. Units: db. Default +#X msg 110 910 @max; +#X text 245 910 Get/Set maximum gain value. Type: int. Units: db. Default value: 0\. Range: -12\...12\.; -#X msg 110 569 @min; -#X text 245 569 Get/Set minimal gain value. Type: int. Units: db. Default -value: -60\. Range: -90\...-30\.; -#X msg 110 611 @output_value; -#X text 245 611 Get/Set flag to output @db property after each knob +#X msg 110 952 @min; +#X text 245 952 Get/Set minimal gain value. Type: int. Units: db. Default +value: -60\. Range: -90\...-15\.; +#X msg 110 994 @mouse_events; +#X text 245 994 Get/Set mouse events output mode. If on outputs @mouse_down +\, @mouse_up and @mouse_drag events. Type: int. Default value: 0\. +Allowed values: 0 \, 1\.; +#X msg 110 1051 @output_value; +#X text 245 1051 Get/Set flag to output @db property after each knob move. Type: int. Default value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 653 @receive; -#X text 245 653 Get/Set receive source. Type: symbol.; -#X msg 110 682 @send; -#X text 245 682 Get/Set send destination. Type: symbol.; -#X msg 110 711 @background_color; -#X text 245 711 Get/Set element background color (list of red \, green +#X msg 110 1093 @receive; +#X text 245 1093 Get/Set receive source. Type: symbol.; +#X msg 110 1122 @relative; +#X text 245 1122 Get/Set relative input mode. When set do not jump +to value on click. Type: int. Default value: 1\. Allowed values: 0 +\, 1\.; +#X msg 110 1164 @send; +#X text 245 1164 Get/Set send destination. Type: symbol.; +#X msg 110 1193 @show_range; +#X text 245 1193 Get/Set if show slider range. Type: int. Default value: +1\. Allowed values: 0 \, 1\.; +#X msg 110 1235 @midi_channel; +#X text 245 1235 Get/Set binded MIDI channel. 0 means listen to all +channels. Type: int. Default value: 0\. Range: 0\...16\.; +#X msg 110 1277 @midi_control; +#X text 245 1277 Get/Set binded MIDI controller number. 0 means not +binded to any controller. Type: int. Default value: 0\. Range: 0\...128\.; +#X msg 110 1334 @midi_pickup; +#X text 245 1334 Get/Set pickup current value. If slider is binded +to value \, first time you should pass over this value to make binding. +It prevents from sudden value change on first control change. Type: +int. Default value: 1\. Allowed values: 0 \, 1\.; +#X msg 110 1406 @background_color; +#X text 245 1406 Get/Set element background color (list of red \, green \, blue values in 0-1 range). Type: list.; -#X msg 110 753 @border_color; -#X text 245 753 Get/Set border color (list of red \, green \, blue +#X msg 110 1448 @border_color; +#X text 245 1448 Get/Set border color (list of red \, green \, blue values in 0-1 range). Type: list.; -#X msg 110 795 @knob_color; -#X text 245 795 Get/Set knob color (list of red \, green \, blue values +#X msg 110 1490 @knob_color; +#X text 245 1490 Get/Set knob color (list of red \, green \, blue values in 0-1 range). Type: list.; -#X msg 110 837 @fontname; -#X text 245 837 Get/Set fontname. Type: symbol.; -#X msg 110 866 @fontsize; -#X text 245 866 Get/Set fontsize. Type: int. Default value: 11\. Range: +#X msg 110 1532 @fontname; +#X text 245 1532 Get/Set fontname. Type: symbol.; +#X msg 110 1561 @fontsize; +#X text 245 1561 Get/Set fontsize. Type: int. Default value: 11\. Range: 4\...11\.; -#X msg 110 908 @fontslant; -#X text 245 908 Get/Set font slant. Type: symbol. Default value: roman. +#X msg 110 1603 @fontslant; +#X text 245 1603 Get/Set font slant. Type: symbol. Default value: roman. Allowed values: roman \, italic.; -#X msg 110 950 @fontweight; -#X text 245 950 Get/Set font weight. Type: symbol. Default value: normal. -Allowed values: normal \, bold.; -#X msg 110 992 @pinned; -#X text 245 992 Get/Set pin mode. if 1 - put element to the lowest +#X msg 110 1645 @fontweight; +#X text 245 1645 Get/Set font weight. Type: symbol. Default value: +normal. Allowed values: normal \, bold.; +#X msg 110 1687 @pinned; +#X text 245 1687 Get/Set pin mode. if 1 - put element to the lowest level. Type: int. Default value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 1034 @presetname; -#X text 245 1034 Get/Set preset name for using with [ui.preset]. Type: +#X msg 110 1729 @presetname; +#X text 245 1729 Get/Set preset name for using with [ui.preset]. Type: symbol.; -#X msg 110 1063 @size; -#X text 245 1063 Get/Set element size (width \, height pair). Type: +#X msg 110 1758 @size; +#X text 245 1758 Get/Set element size (width \, height pair). Type: list.; -#X obj 20 1102 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1107 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 1797 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1802 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 1142 clear; -#X text 245 1142 clears specified preset. Arguments are:; -#X obj 255 1165 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1165 IDX: preset index. Type: int.; -#X msg 110 1190 load; -#X text 245 1190 loads specified preset. Arguments are:; -#X obj 255 1213 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1213 IDX: preset index. Type: int.; -#X msg 110 1238 pos; -#X text 245 1238 set UI element position. Arguments are:; -#X obj 255 1261 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1261 X: top left x-coord. Type: float.; -#X obj 255 1284 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1284 Y: top right y-coord. Type: float.; -#X msg 110 1309 set N; -#X text 245 1309 set current gain to N db.; -#X msg 110 1336 store; -#X text 245 1336 stores specified preset. Arguments are:; -#X obj 255 1359 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1359 IDX: preset index. Type: int.; -#X msg 110 1384 + N; -#X text 245 1384 increase current gain by N db.; -#X msg 110 1411 ++; -#X text 245 1411 decrease current gain by 1 db.; -#X msg 110 1438 - N; -#X text 245 1438 decrease current gain by N db.; -#X msg 110 1465 --; -#X text 245 1465 decrease current gain by 1 db.; -#X obj 20 1502 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1507 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +#X msg 110 1837 clear; +#X text 245 1837 clears specified preset. Arguments are:; +#X obj 255 1860 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1860 IDX: preset index. Type: int.; +#X msg 110 1885 load; +#X text 245 1885 loads specified preset. Arguments are:; +#X obj 255 1908 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1908 IDX: preset index. Type: int.; +#X msg 110 1933 pos; +#X text 245 1933 set UI element position. Arguments are:; +#X obj 255 1956 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1956 X: top left x-coord. Type: float.; +#X obj 255 1979 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1979 Y: top right y-coord. Type: float.; +#X msg 110 2004 set N; +#X text 245 2004 set current gain to N db.; +#X msg 110 2031 store; +#X text 245 2031 stores specified preset. Arguments are:; +#X obj 255 2054 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2054 IDX: preset index. Type: int.; +#X msg 110 2079 + N; +#X text 245 2079 increase current gain by N db.; +#X msg 110 2106 ++; +#X text 245 2106 decrease current gain by 1 db.; +#X msg 110 2133 - N; +#X text 245 2133 decrease current gain by N db.; +#X msg 110 2160 --; +#X text 245 2160 decrease current gain by 1 db.; +#X obj 20 2197 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 2202 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1508 1\.; -#X text 245 1508 input signal.; -#X text 150 1528 *bang*; -#X text 245 1528 output current gain @db property.; -#X obj 20 1558 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1563 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 2203 1\.; +#X text 245 2203 input signal.; +#X text 150 2223 *bang*; +#X text 245 2223 output current gain @db property.; +#X obj 20 2253 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 2258 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1564 1\.; -#X text 245 1564 output signal.; +#X text 110 2259 1\.; +#X text 245 2259 output signal.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title ui @url ceammc.ui-help.pd; -#X obj 1 1614 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1617 library: ceammc v0.7.1; -#N canvas 10 1636 400 290 info 0; +#X obj 1 2309 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 2312 library: ceammc v0.8.0; +#N canvas 10 2331 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 ui.gain~; #X text 10 76 category:; @@ -135,7 +197,7 @@ list.; #X text 10 120 authors:; #X text 120 120 Serge Potlavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 ui \, gain; #X text 10 186 website:; @@ -144,15 +206,15 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1636 pd info; -#X connect 4 0 12 0; -#X connect 5 0 12 0; -#X connect 11 0 12 0; -#X connect 6 0 12 0; -#X connect 7 0 12 0; -#X connect 8 0 12 0; -#X connect 9 0 12 0; -#X connect 10 0 12 0; -#X connect 12 0 14 0; -#X connect 14 0 15 0; -#X connect 14 1 16 0; \ No newline at end of file +#X restore 10 2331 pd info; +#X connect 8 0 16 0; +#X connect 9 0 16 0; +#X connect 15 0 16 0; +#X connect 10 0 16 0; +#X connect 11 0 16 0; +#X connect 12 0 16 0; +#X connect 13 0 16 0; +#X connect 14 0 16 0; +#X connect 16 0 18 0; +#X connect 18 0 19 0; +#X connect 18 1 20 0; \ No newline at end of file diff --git a/ceammc/ext/doc/ui.gain~.pddoc b/ceammc/ext/doc/ui.gain~.pddoc index f4c7ad1f37..d5178611f3 100644 --- a/ceammc/ext/doc/ui.gain~.pddoc +++ b/ceammc/ext/doc/ui.gain~.pddoc @@ -7,24 +7,54 @@ Serge Potlavsky UI gain control - GPL3 + GPL3 or later ceammc ui ui gain 0.5 + + ui.hgain~ + ui.vgain~ + + + jump to click position if @relative property + is off + relative gain change if @relative is on, otherwise + follows mouse pointer + slow relative gain change if @relative + is on + change the knob value + change the knob value slowly + open popup menu + open object help + open properties dialog + relative gain change + toggle horizontal/vertical + orientation + toggle MIDI-learn mode (red border + displayed) + open object help + open properties dialog + maximum gain value - minimal gain value gain in dbfs scale gain as amplitude ratio flag to output @db property after each knob move + relative input mode. When + set do not jump to value on click preset name for using with [ui.preset] + if show slider + range + mouse events output + mode. If on outputs @mouse_down, @mouse_up and @mouse_drag events send destination receive source @@ -44,6 +74,14 @@ weight font slant + + binded + MIDI channel. 0 means listen to all channels + + binded MIDI controller number. 0 means not binded to any controller. + pickup current value. + If slider is binded to value, first time you should pass over this value to make + binding. It prevents from sudden value change on first control change increase current gain by N db @@ -75,6 +113,10 @@ Serge Poltavsky simple icon with button capabilities - GPL3 + GPL3 or later ceammc ui ui icon button @@ -32,8 +32,8 @@ enabled property icons size - + icon name preset name for using with diff --git a/ceammc/ext/doc/ui.incdec-help.pd b/ceammc/ext/doc/ui.incdec-help.pd index 6c98fdaf29..9ffd3b9990 100644 --- a/ceammc/ext/doc/ui.incdec-help.pd +++ b/ceammc/ext/doc/ui.incdec-help.pd @@ -109,7 +109,7 @@ list.; #X text 115 45 ::; #X obj 131 48 ui.link @title ui @url ceammc.ui-help.pd; #X obj 1 1340 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1343 library: ceammc v0.7.1; +#X text 10 1343 library: ceammc v0.8.0; #X text 598 1355 see also:; #X obj 672 1358 ui.link @background_color 0.78431 0.78431 0.78431 @title [ui.number] @url ui.number-help.pd; @@ -118,7 +118,7 @@ list.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 ui.incdec; #X text 10 76 category:; @@ -128,7 +128,7 @@ list.; #X text 10 120 authors:; #X text 120 120 Pierre Guillot; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 ui \, increment \, decrement; #X text 10 186 website:; diff --git a/ceammc/ext/doc/ui.incdec.pddoc b/ceammc/ext/doc/ui.incdec.pddoc index 148fea68a2..e6173a048c 100644 --- a/ceammc/ext/doc/ui.incdec.pddoc +++ b/ceammc/ext/doc/ui.incdec.pddoc @@ -7,7 +7,7 @@ Pierre Guillot value increment/decrement - GPL3 + GPL3 or later ceammc ui ui increment decrement diff --git a/ceammc/ext/doc/ui.keyboard-help.pd b/ceammc/ext/doc/ui.keyboard-help.pd index ed06160544..a813ab357c 100644 --- a/ceammc/ext/doc/ui.keyboard-help.pd +++ b/ceammc/ext/doc/ui.keyboard-help.pd @@ -6,98 +6,122 @@ -4096 0; #X obj 658 13 ui.link @background_color 0.39216 0.39216 0.39216 @title [ui.keyboard] @url ui.keyboard-help.pd; -#X obj 210 80 cnv 1 555 75 empty empty empty 17 7 0 10 -257983 -1 0; +#X obj 210 80 cnv 1 555 35 empty empty empty 17 7 0 10 -257983 -1 0; #X text 215 80 Piano keyboard widget; -#X text 215 105 Shift+click allows multiple selection. Alt+Click release -sustained notes; -#X msg 50 183 dump; -#X obj 50 212 ui.keyboard @size 433 60; -#X obj 50 284 unpack f f; -#X obj 50 313 mtof; -#X obj 194 313 clip 0 100; -#X obj 50 342 osc.pulse~; -#X obj 194 342 / 1000; -#X obj 50 370 *~; -#X obj 50 399 ui.gain~ @size 120 16; -#X obj 290 399 ui.dsp~; -#X obj 50 428 dac~; -#X obj 20 467 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 472 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +#X msg 50 143 dump; +#X obj 50 172 ui.keyboard @size 433 60; +#X obj 50 244 unpack f f; +#X obj 50 273 mtof; +#X obj 194 273 clip 0 100; +#X obj 50 302 osc.pulse~; +#X obj 194 302 / 1000; +#X obj 50 330 *~; +#X obj 50 359 ui.gain~ @size 120 16; +#X obj 290 359 ui.dsp~; +#X obj 50 388 dac~; +#X obj 20 427 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 432 cnv 5 115 26 empty empty mouse_events: 4 10 0 14 -262144 -49933 0; -#X msg 110 507 @keys; -#X text 245 507 Get/Set number of keys. Type: int. Default value: 61\. +#X text 110 467 Left-click; +#X text 285 467 play selected note: output [NOTE VELOCITY( on mouse +press and [NOTE 0( on mouse release. Velocity depends on click position: +lower position produces higher velocity.; +#X text 110 517 Left-click + ⇧; +#X text 285 517 play/stop sustained note.; +#X text 110 537 Left-click + ⌥; +#X text 285 537 release all note (send [NOTE 0( message for each sustained +note).; +#X text 110 572 Mouse-drag; +#X text 285 572 play notes under cursor and release others.; +#X text 110 592 Right-click; +#X text 285 592 open popup menu with various chords.; +#X text 110 612 Right-click + ⇧; +#X text 285 612 open object help.; +#X text 110 632 Right-click + ⌥; +#X text 285 632 open properties dialog.; +#X text 110 652 Right-click + ⇧; +#X text 285 652 open object help.; +#X text 61 652 [Edit]; +#X text 110 672 Right-click + ⌥; +#X text 285 672 open properties dialog.; +#X text 61 672 [Edit]; +#X obj 20 702 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 707 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 742 @keys; +#X text 245 742 Get/Set number of keys. Type: int. Default value: 61\. Range: 5\...88\.; -#X msg 110 549 @receive; -#X text 245 549 Get/Set receive source. Type: symbol.; -#X msg 110 578 @send; -#X text 245 578 Get/Set send destination. Type: symbol.; -#X msg 110 607 @shift; -#X text 245 607 Get/Set MIDI pitch of lefmost key. Type: int. Default +#X msg 110 784 @receive; +#X text 245 784 Get/Set receive source. Type: symbol.; +#X msg 110 813 @send; +#X text 245 813 Get/Set send destination. Type: symbol.; +#X msg 110 842 @shift; +#X text 245 842 Get/Set MIDI pitch of lefmost key. Type: int. Default value: 36\. Range: 6\...88\.; -#X msg 110 649 @active_color; -#X text 245 649 Get/Set active color (list of red \, green \, blue +#X msg 110 884 @active_color; +#X text 245 884 Get/Set active color (list of red \, green \, blue values in 0-1 range). Type: list.; -#X msg 110 691 @background_color; -#X text 245 691 Get/Set element background color (list of red \, green +#X msg 110 926 @background_color; +#X text 245 926 Get/Set element background color (list of red \, green \, blue values in 0-1 range). Type: list.; -#X msg 110 733 @border_color; -#X text 245 733 Get/Set border color (list of red \, green \, blue +#X msg 110 968 @border_color; +#X text 245 968 Get/Set border color (list of red \, green \, blue values in 0-1 range). Type: list.; -#X msg 110 775 @fontname; -#X text 245 775 Get/Set fontname. Type: symbol.; -#X msg 110 804 @fontsize; -#X text 245 804 Get/Set fontsize. Type: int. Default value: 11\. Range: +#X msg 110 1010 @fontname; +#X text 245 1010 Get/Set fontname. Type: symbol.; +#X msg 110 1039 @fontsize; +#X text 245 1039 Get/Set fontsize. Type: int. Default value: 11\. Range: 4\...11\.; -#X msg 110 846 @fontslant; -#X text 245 846 Get/Set font slant. Type: symbol. Default value: roman. +#X msg 110 1081 @fontslant; +#X text 245 1081 Get/Set font slant. Type: symbol. Default value: roman. Allowed values: roman \, italic.; -#X msg 110 888 @fontweight; -#X text 245 888 Get/Set font weight. Type: symbol. Default value: normal. -Allowed values: normal \, bold.; -#X msg 110 930 @pinned; -#X text 245 930 Get/Set pin mode. if 1 - put element to the lowest +#X msg 110 1123 @fontweight; +#X text 245 1123 Get/Set font weight. Type: symbol. Default value: +normal. Allowed values: normal \, bold.; +#X msg 110 1165 @pinned; +#X text 245 1165 Get/Set pin mode. if 1 - put element to the lowest level. Type: int. Default value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 972 @size; -#X text 245 972 Get/Set element size (width \, height pair). Type: +#X msg 110 1207 @size; +#X text 245 1207 Get/Set element size (width \, height pair). Type: list.; -#X obj 20 1011 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1016 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 1246 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1251 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 1051 pos; -#X text 245 1051 set UI element position. Arguments are:; -#X obj 255 1074 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1074 X: top left x-coord. Type: float.; -#X obj 255 1097 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1097 Y: top right y-coord. Type: float.; -#X msg 110 1122 dump; -#X text 245 1122 dumps all object info to Pd console window.; -#X obj 20 1159 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1164 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +#X msg 110 1286 pos; +#X text 245 1286 set UI element position. Arguments are:; +#X obj 255 1309 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1309 X: top left x-coord. Type: float.; +#X obj 255 1332 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1332 Y: top right y-coord. Type: float.; +#X msg 110 1357 dump; +#X text 245 1357 dumps all object info to Pd console window.; +#X obj 20 1394 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1399 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1165 1\.; -#X text 245 1165 control inlet.; -#X obj 20 1195 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1200 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 1400 1\.; +#X text 245 1400 control inlet.; +#X obj 20 1430 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1435 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1201 1\.; -#X text 245 1201 list from two elements: MIDI pitch \, MIDI velocity. +#X text 110 1436 1\.; +#X text 245 1436 list from two elements: MIDI pitch \, MIDI velocity. Velocity depends from key press position.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title ui @url ceammc.ui-help.pd; -#X obj 1 1266 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1269 library: ceammc v0.7.1; -#X text 591 1281 see also:; -#X obj 665 1284 ui.link @background_color 0.78431 0.78431 0.78431 -@title [ui.presets] @url ui.presets-help.pd; -#N canvas 10 1288 400 290 info 0; +#X obj 1 1501 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1504 library: ceammc v0.8.0; +#X text 598 1516 see also:; +#X obj 672 1519 ui.link @background_color 0.78431 0.78431 0.78431 +@title [ui.preset] @url ui.preset-help.pd; +#N canvas 10 1523 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 ui.keyboard; #X text 10 76 category:; @@ -107,7 +131,7 @@ Velocity depends from key press position.; #X text 10 120 authors:; #X text 120 120 Alex Nadzharov \, Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 ui \, keyboard; #X text 10 186 website:; @@ -116,15 +140,15 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1288 pd info; +#X restore 10 1523 pd info; +#X connect 6 0 7 0; #X connect 7 0 8 0; #X connect 8 0 9 0; -#X connect 9 0 10 0; -#X connect 9 1 11 0; +#X connect 8 1 10 0; +#X connect 9 0 11 0; #X connect 10 0 12 0; #X connect 11 0 13 0; -#X connect 12 0 14 0; -#X connect 13 0 14 1; -#X connect 14 0 15 0; -#X connect 15 0 17 0; -#X connect 15 0 17 1; \ No newline at end of file +#X connect 12 0 13 1; +#X connect 13 0 14 0; +#X connect 14 0 16 0; +#X connect 14 0 16 1; \ No newline at end of file diff --git a/ceammc/ext/doc/ui.keyboard.pddoc b/ceammc/ext/doc/ui.keyboard.pddoc index dd9c377584..4b5b6e3e7b 100644 --- a/ceammc/ext/doc/ui.keyboard.pddoc +++ b/ceammc/ext/doc/ui.keyboard.pddoc @@ -8,19 +8,33 @@ Serge Poltavsky keyboard widget - GPL3 + GPL3 or later ceammc ui ui keyboard 0.1 - ui.presets + ui.preset Piano keyboard widget - Shift+click allows multiple selection. Alt+Click release sustained notes + + play selected note: output [NOTE VELOCITY( on + mouse press and [NOTE 0( on mouse release. Velocity depends on click position: lower + position produces higher velocity + play/stop sustained + note. + release all note (send [NOTE 0( + message for each sustained note) + play notes under cursor and release others + open popup menu with various chords + open object help + open properties dialog + open object help + open properties dialog + number of keys diff --git a/ceammc/ext/doc/ui.knob-help.pd b/ceammc/ext/doc/ui.knob-help.pd index bcde9ce226..76a37c3e4f 100644 --- a/ceammc/ext/doc/ui.knob-help.pd +++ b/ceammc/ext/doc/ui.knob-help.pd @@ -17,162 +17,204 @@ #X msg 318 187 / 2; #X msg 376 187 ++ \, bang; #X msg 482 187 -- \, bang; -#X obj 50 244 ui.knob @max 10 @size 30 30; +#X obj 50 244 ui.knob @size 30 30 @max 10; #X floatatom 50 302 5 0 0 0 - - -; #X obj 20 341 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 346 cnv 5 115 26 empty empty mouse_events: 4 10 0 14 -262144 -49933 0; #X text 110 381 Mouse-drag; -#X text 285 381 changes the knob value.; -#X text 110 401 Right-click; -#X text 285 401 opens popup menu.; +#X text 285 381 change the knob value (with ⇧ change slowly).; +#X text 110 401 Mouse-wheel; +#X text 285 401 change the knob value (with ⇧ change slowly).; #X text 110 421 Double-click; #X text 285 421 set knob to the middle position.; -#X text 110 441 Double-click + Shift; +#X text 110 441 Double-click + ⇧; #X text 285 441 toggle MIDI-learn mode (red border displayed).; -#X text 110 461 Mouse-drag + Cmd; -#X text 285 461 changes the knob value.; -#X text 61 461 [Edit]; -#X obj 20 491 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 496 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +#X text 110 461 Right-click; +#X text 285 461 open popup menu.; +#X text 110 481 Right-click + ⇧; +#X text 285 481 open object help.; +#X text 110 501 Right-click + ⌥; +#X text 285 501 open properties dialog.; +#X text 110 521 Mouse-drag + ⌘; +#X text 285 521 change the knob value (with ⇧ change slowly).; +#X text 61 521 [Edit]; +#X text 110 541 Mouse-wheel + ⌘; +#X text 285 541 change the knob value (with ⇧ change slowly).; +#X text 61 541 [Edit]; +#X text 110 561 Right-click + ⇧; +#X text 285 561 open object help.; +#X text 61 561 [Edit]; +#X text 110 581 Right-click + ⌥; +#X text 285 581 open properties dialog.; +#X text 61 581 [Edit]; +#X obj 20 611 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 616 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; -#X msg 110 531 @active_scale; -#X text 245 531 Get/Set if should draw active scale. Type: int. Default +#X msg 110 651 @active_scale; +#X text 245 651 Get/Set if should draw active scale. Type: int. Default value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 573 @max; -#X text 245 573 Get/Set maximum knob value. Type: float. Default value: +#X msg 110 693 @max; +#X text 245 693 Get/Set maximum knob value. Type: float. Default value: 1\.; -#X msg 110 602 @min; -#X text 245 602 Get/Set minimum knob value. Type: float. Default value: +#X msg 110 722 @min; +#X text 245 722 Get/Set minimum knob value. Type: float. Default value: 0\.; -#X msg 110 631 @show_range; -#X text 245 631 Get/Set show knob range. Type: int. Default value: +#X msg 110 751 @mouse_events; +#X text 245 751 Get/Set mouse events output mode. If on outputs @mouse_down +\, @mouse_up and @mouse_drag events. Type: int. Default value: 0\. +Allowed values: 0 \, 1\.; +#X msg 110 808 @scale; +#X text 245 808 Get/Set scale mode. Linear or logarithmic. Type: symbol. +Default value: linear. Allowed values: linear \, log.; +#X msg 110 850 @show_range; +#X text 245 850 Get/Set show knob range. Type: int. Default value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 673 @value; -#X text 245 673 Get/Set current value. Type: float. Default value: +#X msg 110 892 @value; +#X text 245 892 Get/Set current value. Type: float. Default value: 0\.; -#X msg 110 702 @midi_channel; -#X text 245 702 Get/Set binded MIDI channel. 0 means listen to all +#X msg 110 921 @midi_channel; +#X text 245 921 Get/Set binded MIDI channel. 0 means listen to all channels. Type: int. Default value: 0\. Range: 0\...16\.; -#X msg 110 744 @midi_control; -#X text 245 744 Get/Set binded MIDI controller number. 0 means not +#X msg 110 963 @midi_control; +#X text 245 963 Get/Set binded MIDI controller number. 0 means not binded to any controller. Type: int. Default value: 0\. Range: 0\...128\.; -#X msg 110 801 @midi_pickup; -#X text 245 801 Get/Set pickup current value. If slider is binded to -value \, first time you should pass over this value to make binding. +#X msg 110 1020 @midi_pickup; +#X text 245 1020 Get/Set pickup current value. If slider is binded +to value \, first time you should pass over this value to make binding. It prevents from sudden value change on first control change. Type: int. Default value: 1\. Allowed values: 0 \, 1\.; -#X msg 110 873 @background_color; -#X text 245 873 Get/Set element background color (list of red \, green +#X msg 110 1092 @background_color; +#X text 245 1092 Get/Set element background color (list of red \, green \, blue values in 0-1 range). Type: list.; -#X msg 110 915 @border_color; -#X text 245 915 Get/Set border color (list of red \, green \, blue +#X msg 110 1134 @border_color; +#X text 245 1134 Get/Set border color (list of red \, green \, blue values in 0-1 range). Type: list.; -#X msg 110 957 @knob_color; -#X text 245 957 Get/Set knob color (list of red \, green \, blue values +#X msg 110 1176 @knob_color; +#X text 245 1176 Get/Set knob color (list of red \, green \, blue values in 0-1 range). Type: list.; -#X msg 110 999 @scale_color; -#X text 245 999 Get/Set scale color (list of red \, green \, blue values -in 0-1 range). Type: list.; -#X msg 110 1041 @fontname; -#X text 245 1041 Get/Set fontname. Type: symbol.; -#X msg 110 1070 @fontsize; -#X text 245 1070 Get/Set fontsize. Type: int. Default value: 11\. Range: +#X msg 110 1218 @label_color; +#X text 245 1218 Get/Set label color in RGB format within 0-1 range +\, for example: 0.2 0.4 0.1\. Type: list.; +#X msg 110 1260 @scale_color; +#X text 245 1260 Get/Set scale color (list of red \, green \, blue +values in 0-1 range). Type: list.; +#X msg 110 1302 @label; +#X text 245 1302 Get/Set label text. Type: symbol.; +#X msg 110 1331 @label_align; +#X text 245 1331 Get/Set label horizontal align. Type: symbol. Default +value: left. Allowed values: left \, center \, right.; +#X msg 110 1373 @label_inner; +#X text 245 1373 Get/Set label position (1 - inner \, 0 - outer). Type: +int. Default value: 0\. Allowed values: 0 \, 1\.; +#X msg 110 1415 @label_margins; +#X text 245 1415 Get/Set label offset in pixels. Type: list. Default +value: 0 0\.; +#X msg 110 1457 @label_side; +#X text 245 1457 Get/Set label snap side. Type: symbol. Default value: +top. Allowed values: left \, top \, right \, bottom.; +#X msg 110 1499 @label_valign; +#X text 245 1499 Get/Set label vertical align. Type: symbol. Default +value: top. Allowed values: top \, center \, bottom.; +#X msg 110 1541 @fontname; +#X text 245 1541 Get/Set fontname. Type: symbol.; +#X msg 110 1570 @fontsize; +#X text 245 1570 Get/Set fontsize. Type: int. Default value: 11\. Range: 4\...11\.; -#X msg 110 1112 @fontslant; -#X text 245 1112 Get/Set font slant. Type: symbol. Default value: roman. +#X msg 110 1612 @fontslant; +#X text 245 1612 Get/Set font slant. Type: symbol. Default value: roman. Allowed values: roman \, italic.; -#X msg 110 1154 @fontweight; -#X text 245 1154 Get/Set font weight. Type: symbol. Default value: +#X msg 110 1654 @fontweight; +#X text 245 1654 Get/Set font weight. Type: symbol. Default value: normal. Allowed values: normal \, bold.; -#X msg 110 1196 @pinned; -#X text 245 1196 Get/Set pin mode. if 1 - put element to the lowest +#X msg 110 1696 @pinned; +#X text 245 1696 Get/Set pin mode. if 1 - put element to the lowest level. Type: int. Default value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 1238 @presetname; -#X text 245 1238 Get/Set preset name for using with [ui.preset]. Type: +#X msg 110 1738 @presetname; +#X text 245 1738 Get/Set preset name for using with [ui.preset]. Type: symbol.; -#X msg 110 1267 @receive; -#X text 245 1267 Get/Set receive source. Type: symbol.; -#X msg 110 1296 @send; -#X text 245 1296 Get/Set send destination. Type: symbol.; -#X msg 110 1325 @size; -#X text 245 1325 Get/Set element size (width \, height pair). Type: +#X msg 110 1767 @receive; +#X text 245 1767 Get/Set receive source. Type: symbol.; +#X msg 110 1796 @send; +#X text 245 1796 Get/Set send destination. Type: symbol.; +#X msg 110 1825 @size; +#X text 245 1825 Get/Set element size (width \, height pair). Type: list.; -#X obj 20 1364 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1369 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 1864 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1869 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 1404 set; -#X text 245 1404 sets knob state without output.; -#X msg 110 1431 *; -#X text 245 1431 multiply knob value without output. Arguments are:; -#X obj 255 1454 cnv 1 14 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1454 V: multiplied value. Type: float.; -#X msg 110 1479 +; -#X text 245 1479 add value to knob without output. Arguments are:; -#X obj 255 1502 cnv 1 14 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1502 V: added value. Type: float.; -#X msg 110 1527 ++; -#X text 245 1527 increment knob value without output.; -#X msg 110 1554 -; -#X text 245 1554 subtract value from knob without output. Arguments +#X msg 110 1904 set; +#X text 245 1904 sets knob state without output.; +#X msg 110 1931 *; +#X text 245 1931 multiply knob value without output. Arguments are:; +#X obj 255 1954 cnv 1 14 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1954 V: multiplied value. Type: float.; +#X msg 110 1979 +; +#X text 245 1979 add value to knob without output. Arguments are:; +#X obj 255 2002 cnv 1 14 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2002 V: added value. Type: float.; +#X msg 110 2027 ++; +#X text 245 2027 increment knob value without output.; +#X msg 110 2054 -; +#X text 245 2054 subtract value from knob without output. Arguments are:; -#X obj 255 1577 cnv 1 14 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1577 V: subtracted value. Type: float.; -#X msg 110 1602 --; -#X text 245 1602 decrement knob value without output.; -#X msg 110 1629 /; -#X text 245 1629 divide knob value without output. Arguments are:; -#X obj 255 1652 cnv 1 14 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1652 V: denominator value. Type: float.; -#X msg 110 1677 clear; -#X text 245 1677 clears specified preset. Arguments are:; -#X obj 255 1700 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1700 IDX: preset index. Type: int.; -#X msg 110 1725 load; -#X text 245 1725 loads specified preset. Arguments are:; -#X obj 255 1748 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1748 IDX: preset index. Type: int.; -#X msg 110 1773 store; -#X text 245 1773 stores specified preset. Arguments are:; -#X obj 255 1796 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1796 IDX: preset index. Type: int.; -#X msg 110 1821 pos; -#X text 245 1821 set UI element position. Arguments are:; -#X obj 255 1844 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1844 X: top left x-coord. Type: float.; -#X obj 255 1867 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1867 Y: top right y-coord. Type: float.; -#X msg 110 1892 dump; -#X text 245 1892 dumps all object info to Pd console window.; -#X obj 20 1929 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1934 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +#X obj 255 2077 cnv 1 14 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2077 V: subtracted value. Type: float.; +#X msg 110 2102 --; +#X text 245 2102 decrement knob value without output.; +#X msg 110 2129 /; +#X text 245 2129 divide knob value without output. Arguments are:; +#X obj 255 2152 cnv 1 14 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2152 V: denominator value. Type: float.; +#X msg 110 2177 clear; +#X text 245 2177 clears specified preset. Arguments are:; +#X obj 255 2200 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2200 IDX: preset index. Type: int.; +#X msg 110 2225 load; +#X text 245 2225 loads specified preset. Arguments are:; +#X obj 255 2248 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2248 IDX: preset index. Type: int.; +#X msg 110 2273 store; +#X text 245 2273 stores specified preset. Arguments are:; +#X obj 255 2296 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2296 IDX: preset index. Type: int.; +#X msg 110 2321 pos; +#X text 245 2321 set UI element position. Arguments are:; +#X obj 255 2344 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2344 X: top left x-coord. Type: float.; +#X obj 255 2367 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2367 Y: top right y-coord. Type: float.; +#X msg 110 2392 dump; +#X text 245 2392 dumps all object info to Pd console window.; +#X obj 20 2429 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 2434 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1935 1\.; -#X text 150 1935 *bang*; -#X text 245 1935 outputs knob value.; -#X text 150 1955 *float*; -#X text 245 1955 sets knob value and output it.; -#X obj 20 1985 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1990 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 2435 1\.; +#X text 150 2435 *bang*; +#X text 245 2435 outputs knob value.; +#X text 150 2455 *float*; +#X text 245 2455 sets knob value and output it.; +#X obj 20 2485 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 2490 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1991 1\.; -#X text 245 1991 knob output.; +#X text 110 2491 1\.; +#X text 245 2491 knob output.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title ui @url ceammc.ui-help.pd; -#X obj 1 2041 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 2044 library: ceammc v0.7.1; -#X text 598 2056 see also:; -#X obj 672 2059 ui.link @background_color 0.78431 0.78431 0.78431 +#X obj 1 2541 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 2544 library: ceammc v0.8.0; +#X text 598 2556 see also:; +#X obj 672 2559 ui.link @background_color 0.78431 0.78431 0.78431 @title [ui.slider] @url ui.slider-help.pd; -#N canvas 10 2063 400 290 info 0; +#N canvas 10 2563 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 ui.knob; #X text 10 76 category:; @@ -182,7 +224,7 @@ are:; #X text 10 120 authors:; #X text 120 120 Alex Nadzharov \, Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 ui \, knob; #X text 10 186 website:; @@ -191,7 +233,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 2063 pd info; +#X restore 10 2563 pd info; #X connect 6 0 7 0; #X connect 7 0 14 0; #X connect 8 0 14 0; diff --git a/ceammc/ext/doc/ui.knob.pddoc b/ceammc/ext/doc/ui.knob.pddoc index 2f3f201e54..81925f9ca7 100644 --- a/ceammc/ext/doc/ui.knob.pddoc +++ b/ceammc/ext/doc/ui.knob.pddoc @@ -8,7 +8,7 @@ Serge Poltavsky knob widget - GPL3 + GPL3 or later ceammc ui ui knob @@ -21,12 +21,22 @@ Simple knob widget with default range 0-1. - changes the knob value - changes the knob value - opens popup menu - set knob to the middle position - toggle MIDI-learn mode (red border - displayed) + change the knob value (with ⇧ change + slowly) + change the knob value (with ⇧ change + slowly) + set knob to the middle position + toggle MIDI-learn mode (red + border displayed) + open popup menu + open object help + open properties dialog + change the knob value (with ⇧ change + slowly) + change the knob value (with ⇧ change + slowly) + open object help + open properties dialog minimum knob value @@ -43,6 +53,8 @@ current value show knob range + scale mode. + Linear or logarithmic. preset name for using with [ui.preset] @@ -52,6 +64,8 @@ pair) pin mode. if 1 - put element to the lowest level + mouse events output + mode. If on outputs @mouse_down, @mouse_up and @mouse_drag events knob color (list of red, green, blue values in 0-1 range) scale color (list of red, @@ -67,6 +81,20 @@ weight font slant + + label text + label color in RGB format within 0-1 range, + for example: 0.2 0.4 0.1 + label position (1 - + inner, 0 - outer). + + label horizontal align + + label vertical align + + label snap side + label offset in + pixels sets knob state without output @@ -112,7 +140,7 @@ | | | | | | | | | | | | | | | | | | | | | -[ui.knob @size=30x30 @max=10 ] +[ui.knob @size 30 30 @max 10 ] | | | diff --git a/ceammc/ext/doc/ui.label-help.pd b/ceammc/ext/doc/ui.label-help.pd index 4fa9472fb5..07bf6fd757 100644 --- a/ceammc/ext/doc/ui.label-help.pd +++ b/ceammc/ext/doc/ui.label-help.pd @@ -114,13 +114,13 @@ would be saved in patch.; #X text 115 45 ::; #X obj 131 48 ui.link @title ui @url ceammc.ui-help.pd; #X obj 1 1563 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1566 library: ceammc v0.7.1; +#X text 10 1566 library: ceammc v0.8.0; #N canvas 10 1585 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 ui.label; #X text 10 76 category:; @@ -130,7 +130,7 @@ would be saved in patch.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 ui \, label; #X text 10 186 website:; diff --git a/ceammc/ext/doc/ui.label.pddoc b/ceammc/ext/doc/ui.label.pddoc index b7d3358138..70fb24282e 100644 --- a/ceammc/ext/doc/ui.label.pddoc +++ b/ceammc/ext/doc/ui.label.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky simple label widget - GPL3 + GPL3 or later ceammc ui ui label diff --git a/ceammc/ext/doc/ui.link-help.pd b/ceammc/ext/doc/ui.link-help.pd index aa1238649e..b15b71551e 100644 --- a/ceammc/ext/doc/ui.link-help.pd +++ b/ceammc/ext/doc/ui.link-help.pd @@ -70,13 +70,13 @@ list.; #X text 115 45 ::; #X obj 131 48 ui.link @title ui @url ceammc.ui-help.pd; #X obj 1 1022 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1025 library: ceammc v0.7.1; +#X text 10 1025 library: ceammc v0.8.0; #N canvas 10 1044 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 ui.link; #X text 10 76 category:; @@ -86,7 +86,7 @@ list.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 ui \, link; #X text 10 186 website:; diff --git a/ceammc/ext/doc/ui.link.pddoc b/ceammc/ext/doc/ui.link.pddoc index aa8391a1f5..e3beb33c15 100644 --- a/ceammc/ext/doc/ui.link.pddoc +++ b/ceammc/ext/doc/ui.link.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky Hyperlink widget - GPL3 + GPL3 or later ceammc ui ui link diff --git a/ceammc/ext/doc/ui.matrix-help.pd b/ceammc/ext/doc/ui.matrix-help.pd index e7b6d2c7bd..a090aead6e 100644 --- a/ceammc/ext/doc/ui.matrix-help.pd +++ b/ceammc/ext/doc/ui.matrix-help.pd @@ -211,7 +211,7 @@ row.; #X text 115 45 ::; #X obj 131 48 ui.link @title ui @url ceammc.ui-help.pd; #X obj 1 2663 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 2666 library: ceammc v0.7.1; +#X text 10 2666 library: ceammc v0.8.0; #X text 523 2678 see also:; #X obj 597 2681 ui.link @background_color 0.78431 0.78431 0.78431 @title [ui.radio] @url ui.radio-help.pd; @@ -222,7 +222,7 @@ row.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 ui.matrix; #X text 10 76 category:; @@ -232,7 +232,7 @@ row.; #X text 10 120 authors:; #X text 120 120 Pierre Guillot \, Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 ui \, matrix; #X text 10 186 website:; diff --git a/ceammc/ext/doc/ui.matrix.pddoc b/ceammc/ext/doc/ui.matrix.pddoc index 23b7f81d3c..256c80868d 100644 --- a/ceammc/ext/doc/ui.matrix.pddoc +++ b/ceammc/ext/doc/ui.matrix.pddoc @@ -8,7 +8,7 @@ Serge Poltavsky The matrix of toggles has you. - GPL3 + GPL3 or later ceammc ui ui matrix diff --git a/ceammc/ext/doc/ui.menu-help.pd b/ceammc/ext/doc/ui.menu-help.pd index 6dd39b3fac..317e51fcad 100644 --- a/ceammc/ext/doc/ui.menu-help.pd +++ b/ceammc/ext/doc/ui.menu-help.pd @@ -134,11 +134,12 @@ are:; -49933 0; #X text 110 1885 1\.; #X text 150 1885 *bang*; -#X text 245 1885 outputs current menu state as list: INDEX VALUE.; +#X text 245 1885 outputs current menu state as list: INDEX ITEM_NAME.; #X text 150 1905 *float*; -#X text 245 1905 change menu state and output new value.; +#X text 245 1905 change menu state and output list: INDEX ITEM_NAME.; #X text 150 1925 *any*; -#X text 245 1925 selects item equal to given.; +#X text 245 1925 selects item equal to given and output list: INDEX +ITEM_NAME.; #X obj 20 1955 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 1960 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; @@ -150,7 +151,7 @@ are:; #X text 115 45 ::; #X obj 131 48 ui.link @title ui @url ceammc.ui-help.pd; #X obj 1 2011 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 2014 library: ceammc v0.7.1; +#X text 10 2014 library: ceammc v0.8.0; #X text 606 2026 see also:; #X obj 680 2029 ui.link @background_color 0.78431 0.78431 0.78431 @title [ui.radio] @url ui.radio-help.pd; @@ -159,7 +160,7 @@ are:; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 ui.menu; #X text 10 76 category:; @@ -169,7 +170,7 @@ are:; #X text 10 120 authors:; #X text 120 120 Pierre Guillot \, Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 ui \, menu; #X text 10 186 website:; diff --git a/ceammc/ext/doc/ui.menu.pddoc b/ceammc/ext/doc/ui.menu.pddoc index 7de854aaac..1faab6958d 100644 --- a/ceammc/ext/doc/ui.menu.pddoc +++ b/ceammc/ext/doc/ui.menu.pddoc @@ -8,7 +8,7 @@ Serge Poltavsky Dropdown menu - GPL3 + GPL3 or later ceammc ui ui menu @@ -83,9 +83,10 @@ - outputs current menu state as list: INDEX VALUE - change menu state and output new value - selects item equal to given + outputs current menu state as list: INDEX ITEM_NAME + change menu state and output list: INDEX ITEM_NAME + selects item equal to given and output list: INDEX + ITEM_NAME diff --git a/ceammc/ext/doc/ui.meter~-help.pd b/ceammc/ext/doc/ui.meter~-help.pd index fbe7f934a5..4d8192be11 100644 --- a/ceammc/ext/doc/ui.meter~-help.pd +++ b/ceammc/ext/doc/ui.meter~-help.pd @@ -93,13 +93,13 @@ list.; #X text 115 45 ::; #X obj 131 48 ui.link @title ui @url ceammc.ui-help.pd; #X obj 1 1322 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1325 library: ceammc v0.7.1; +#X text 10 1325 library: ceammc v0.8.0; #N canvas 10 1344 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 ui.meter~; #X text 10 76 category:; @@ -109,7 +109,7 @@ list.; #X text 10 120 authors:; #X text 120 120 Pierre Guillot \, Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 ui \, meter; #X text 10 186 website:; diff --git a/ceammc/ext/doc/ui.meter~.pddoc b/ceammc/ext/doc/ui.meter~.pddoc index 8827af13fe..cbaa8c6e81 100644 --- a/ceammc/ext/doc/ui.meter~.pddoc +++ b/ceammc/ext/doc/ui.meter~.pddoc @@ -8,7 +8,7 @@ Serge Poltavsky Shows peak and rms signal level - GPL3 + GPL3 or later ceammc ui ui meter diff --git a/ceammc/ext/doc/ui.mouse_filter-help.pd b/ceammc/ext/doc/ui.mouse_filter-help.pd new file mode 100644 index 0000000000..d8dd108394 --- /dev/null +++ b/ceammc/ext/doc/ui.mouse_filter-help.pd @@ -0,0 +1,104 @@ +#N canvas 0 0 785 555 12; +#X declare -lib ceammc; +#X obj 492 50 cnv 1 273 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 492 50 filter mouse events from ui objects; +#X obj 1 1 cnv 5 765 40 empty empty ui.mouse_filter 20 20 0 20 -104026 +-4096 0; +#X obj 570 11 ui.mf; +#X obj 631 11 ui.mouse_filter; +#X obj 210 80 cnv 1 555 35 empty empty empty 17 7 0 10 -257983 -1 0; +#X text 215 80 pass only specified mouse events from ui.* objects; +#X obj 50 143 ui.rslider @mouse_events 1; +#X obj 328 143 ui.rslider @mouse_events 1; +#X obj 50 172 ui.mouse_filter @up; +#X obj 328 172 ui.mouse_filter @drag; +#X obj 50 201 ui.display @display_type 1 @size 150 18; +#X obj 328 201 ui.display @display_type 1 @size 150 18; +#X obj 50 230 ui.rslider @mouse_events 1; +#X obj 50 259 ui.mouse_filter @down; +#X obj 50 287 ui.display @display_type 1 @size 150 18; +#X obj 20 327 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 332 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 367 @down; +#X text 245 367 alias to @mouse_down 1 property.; +#X msg 110 396 @drag; +#X text 245 396 alias to @mouse_drag 1 property.; +#X msg 110 425 @enter; +#X text 245 425 alias to @mouse_enter 1 property.; +#X msg 110 454 @leave; +#X text 245 454 alias to @mouse_leave 1 property.; +#X msg 110 483 @mouse_down; +#X text 245 483 Get/Set passing a @mouse_down events. Type: int. Default +value: 0\. Allowed values: 0 \, 1\.; +#X msg 110 525 @mouse_drag; +#X text 245 525 Get/Set passing a @mouse_drag events. Type: int. Default +value: 0\. Allowed values: 0 \, 1\.; +#X msg 110 567 @mouse_enter; +#X text 245 567 Get/Set passing a @mouse_enter events. Type: int. Default +value: 0\. Allowed values: 0 \, 1\.; +#X msg 110 609 @mouse_leave; +#X text 245 609 Get/Set passing a @mouse_leave events. Type: int. Default +value: 0\. Allowed values: 0 \, 1\.; +#X msg 110 651 @mouse_move; +#X text 245 651 Get/Set passing a @mouse_move events. Type: int. Default +value: 0\. Allowed values: 0 \, 1\.; +#X msg 110 693 @mouse_up; +#X text 245 693 Get/Set passing a @mouse_up events. Type: int. Default +value: 0\. Allowed values: 0 \, 1\.; +#X msg 110 735 @move; +#X text 245 735 alias to @mouse_move 1 property.; +#X msg 110 764 @up; +#X text 245 764 alias to @mouse_up 1 property.; +#X obj 20 803 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 808 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +0; +#X text 110 809 1\.; +#X text 245 809 input messages from ui object.; +#X obj 20 839 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 844 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 845 1\.; +#X text 245 845 passed messages from ui object.; +#X obj 10 48 ui.link @title index @url ../index-help.pd; +#X text 51 45 ::; +#X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; +#X text 115 45 ::; +#X obj 131 48 ui.link @title ui @url ceammc.ui-help.pd; +#X obj 1 895 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 898 library: ceammc v0.8.0; +#X text 475 910 see also:; +#X obj 549 910 ui.mouse_route; +#X obj 665 913 ui.link @background_color 0.78431 0.78431 0.78431 +@title [ui.rslider] @url ui.rslider-help.pd; +#N canvas 10 917 400 290 info 0; +#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; +#X text 10 10 library:; +#X text 120 10 ceammc; +#X text 10 32 version:; +#X text 120 32 0.8.0; +#X text 10 54 object:; +#X text 120 54 ui.mouse_filter; +#X text 10 76 category:; +#X text 120 76 ui; +#X text 10 98 since:; +#X text 120 98 0.8; +#X text 10 120 authors:; +#X text 120 120 Serge Poltavsky; +#X text 10 142 license:; +#X text 120 142 GPL3 or later; +#X text 10 164 keywords:; +#X text 120 164 ui \, mouse \, filter \, events; +#X text 10 186 website:; +#X obj 120 189 ui.link @title https://github.com/uliss/pure-data @url +https://github.com/uliss/pure-data; +#X obj 120 208 declare -lib ceammc; +#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 120 268 generated by pddoc; +#X restore 10 917 pd info; +#X connect 7 0 9 0; +#X connect 8 0 10 0; +#X connect 9 0 11 0; +#X connect 10 0 12 0; +#X connect 13 0 14 0; +#X connect 14 0 15 0; \ No newline at end of file diff --git a/ceammc/ext/doc/ui.mouse_filter.pddoc b/ceammc/ext/doc/ui.mouse_filter.pddoc new file mode 100644 index 0000000000..cf9ad74f0b --- /dev/null +++ b/ceammc/ext/doc/ui.mouse_filter.pddoc @@ -0,0 +1,72 @@ + + + + ui.mouse_filter + + + Serge Poltavsky + + filter mouse events from ui objects + GPL3 or later + ceammc + ui + ui mouse filter events + 0.8 + + ui.mf + + + ui.mouse_route + ui.rslider + + + + pass only specified mouse events from ui.* objects + + + passing a @mouse_up + events + passing a @mouse_down + events + passing a @mouse_leave + events + passing a @mouse_enter + events + passing a @mouse_move + events + passing a @mouse_drag + events + alias to @mouse_up 1 property + alias to @mouse_down 1 property + alias to @mouse_leave 1 property + alias to @mouse_enter 1 property + alias to @mouse_move 1 property + alias to @mouse_drag 1 property + + + + input messages from ui object + + + + passed messages from ui object + + + + + + + + diff --git a/ceammc/ext/doc/ui.mouse_route-help.pd b/ceammc/ext/doc/ui.mouse_route-help.pd new file mode 100644 index 0000000000..85e7b5f051 --- /dev/null +++ b/ceammc/ext/doc/ui.mouse_route-help.pd @@ -0,0 +1,102 @@ +#N canvas 0 0 785 555 12; +#X declare -lib ceammc; +#X obj 493 50 cnv 1 272 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 493 50 routes mouse events from ui objects; +#X obj 1 1 cnv 5 765 40 empty empty ui.mouse_route 20 20 0 20 -104026 +-4096 0; +#X obj 577 11 ui.mr; +#X obj 639 11 ui.mouse_route; +#X obj 210 80 cnv 1 555 35 empty empty empty 17 7 0 10 -257983 -1 0; +#X text 215 80 routes only specified mouse events from ui.* objects; +#X obj 50 143 ui.hsl @mouse_events 1; +#X obj 50 172 ui.mouse_route @down @up @drag; +#X floatatom 50 201 5 0 0 0 - - -; +#X floatatom 146 201 5 0 0 0 - - -; +#X floatatom 251 201 5 0 0 0 - - -; +#X obj 20 240 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 245 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 280 @down; +#X text 245 280 alias to @mouse_down 1 property.; +#X msg 110 309 @drag; +#X text 245 309 alias to @mouse_drag 1 property.; +#X msg 110 338 @enter; +#X text 245 338 alias to @mouse_enter 1 property.; +#X msg 110 367 @leave; +#X text 245 367 alias to @mouse_leave 1 property.; +#X msg 110 396 @mouse_down; +#X text 245 396 Get/Set passing a @mouse_down events. Type: int. Default +value: 0\. Allowed values: 0 \, 1\.; +#X msg 110 438 @mouse_drag; +#X text 245 438 Get/Set passing a @mouse_drag events. Type: int. Default +value: 0\. Allowed values: 0 \, 1\.; +#X msg 110 480 @mouse_enter; +#X text 245 480 Get/Set passing a @mouse_enter events. Type: int. Default +value: 0\. Allowed values: 0 \, 1\.; +#X msg 110 522 @mouse_leave; +#X text 245 522 Get/Set passing a @mouse_leave events. Type: int. Default +value: 0\. Allowed values: 0 \, 1\.; +#X msg 110 564 @mouse_move; +#X text 245 564 Get/Set passing a @mouse_move events. Type: int. Default +value: 0\. Allowed values: 0 \, 1\.; +#X msg 110 606 @mouse_up; +#X text 245 606 Get/Set passing a @mouse_up events. Type: int. Default +value: 0\. Allowed values: 0 \, 1\.; +#X msg 110 648 @move; +#X text 245 648 alias to @mouse_move 1 property.; +#X msg 110 677 @up; +#X text 245 677 alias to @mouse_up 1 property.; +#X obj 20 716 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 721 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +0; +#X text 110 722 1\.; +#X text 245 722 input messages from ui object.; +#X obj 20 752 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 757 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 758 1\.; +#X text 245 758 first mouse event type match output.; +#X text 110 778 ....; +#X text 245 778 ... mouse event type match output.; +#X text 110 798 n.; +#X text 245 798 n-th mouse event type match output.; +#X obj 10 48 ui.link @title index @url ../index-help.pd; +#X text 51 45 ::; +#X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; +#X text 115 45 ::; +#X obj 131 48 ui.link @title ui @url ceammc.ui-help.pd; +#X obj 1 848 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 851 library: ceammc v0.8.0; +#X text 467 863 see also:; +#X obj 541 863 ui.mouse_filter; +#X obj 665 866 ui.link @background_color 0.78431 0.78431 0.78431 +@title [ui.rslider] @url ui.rslider-help.pd; +#N canvas 10 870 400 290 info 0; +#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; +#X text 10 10 library:; +#X text 120 10 ceammc; +#X text 10 32 version:; +#X text 120 32 0.8.0; +#X text 10 54 object:; +#X text 120 54 ui.mouse_route; +#X text 10 76 category:; +#X text 120 76 ui; +#X text 10 98 since:; +#X text 120 98 0.8; +#X text 10 120 authors:; +#X text 120 120 Serge Poltavsky; +#X text 10 142 license:; +#X text 120 142 GPL3 or later; +#X text 10 164 keywords:; +#X text 120 164 ui \, mouse \, filter \, events; +#X text 10 186 website:; +#X obj 120 189 ui.link @title https://github.com/uliss/pure-data @url +https://github.com/uliss/pure-data; +#X obj 120 208 declare -lib ceammc; +#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 120 268 generated by pddoc; +#X restore 10 870 pd info; +#X connect 7 0 8 0; +#X connect 8 0 9 0; +#X connect 8 1 10 0; +#X connect 8 2 11 0; \ No newline at end of file diff --git a/ceammc/ext/doc/ui.mouse_route.pddoc b/ceammc/ext/doc/ui.mouse_route.pddoc new file mode 100644 index 0000000000..a60a1cf45c --- /dev/null +++ b/ceammc/ext/doc/ui.mouse_route.pddoc @@ -0,0 +1,68 @@ + + + + ui.mouse_route + + + Serge Poltavsky + + routes mouse events from ui objects + GPL3 or later + ceammc + ui + ui mouse filter events + 0.8 + + ui.mr + + + ui.mouse_filter + ui.rslider + + + + routes only specified mouse events from ui.* objects + + + passing a @mouse_up + events + passing a @mouse_down + events + passing a @mouse_leave + events + passing a @mouse_enter + events + passing a @mouse_move + events + passing a @mouse_drag + events + alias to @mouse_up 1 property + alias to @mouse_down 1 property + alias to @mouse_leave 1 property + alias to @mouse_enter 1 property + alias to @mouse_move 1 property + alias to @mouse_drag 1 property + + + + input messages from ui object + + + + first mouse event type match output + ... mouse event type match output + n-th mouse event type match output + + + + + + + + diff --git a/ceammc/ext/doc/ui.number-help.pd b/ceammc/ext/doc/ui.number-help.pd index bb4a3b4bbe..c2acbb661e 100644 --- a/ceammc/ext/doc/ui.number-help.pd +++ b/ceammc/ext/doc/ui.number-help.pd @@ -36,10 +36,10 @@ input \, BACKSPACE removes last character.; Type: int. Default value: -1\. Range: -1\...8\.; #X msg 110 536 @max; #X text 245 536 Get/Set maximum value. Type: float. Default value: --inf.; ++inf.; #X msg 110 565 @min; #X text 245 565 Get/Set minimum value. Type: float. Default value: -+inf.; +-inf.; #X msg 110 594 @receive; #X text 245 594 Get/Set receive source. Type: symbol.; #X msg 110 623 @send; @@ -145,7 +145,7 @@ are:; #X text 115 45 ::; #X obj 131 48 ui.link @title ui @url ceammc.ui-help.pd; #X obj 1 1805 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1808 library: ceammc v0.7.1; +#X text 10 1808 library: ceammc v0.8.0; #X text 591 1820 see also:; #X obj 665 1823 ui.link @background_color 0.78431 0.78431 0.78431 @title [ui.number~] @url ui.number~-help.pd; @@ -154,7 +154,7 @@ are:; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 ui.number; #X text 10 76 category:; @@ -164,7 +164,7 @@ are:; #X text 10 120 authors:; #X text 120 120 Pierre Guillot \, Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 ui \, number; #X text 10 186 website:; diff --git a/ceammc/ext/doc/ui.number.pddoc b/ceammc/ext/doc/ui.number.pddoc index 623d388088..1cc3362e3f 100644 --- a/ceammc/ext/doc/ui.number.pddoc +++ b/ceammc/ext/doc/ui.number.pddoc @@ -8,7 +8,7 @@ Serge Poltavsky counterpart of the vanilla [nbx] - GPL3 + GPL3 or later ceammc ui ui number @@ -27,8 +27,8 @@ ENTER or TAB key to finish. ESCAPE undo input, BACKSPACE removes last character. - minimum value - maximum value + minimum value + maximum value widget value number of digits. If -1 - no fixed digits used diff --git a/ceammc/ext/doc/ui.number~-help.pd b/ceammc/ext/doc/ui.number~-help.pd index 71b35cb5e7..72161e8913 100644 --- a/ceammc/ext/doc/ui.number~-help.pd +++ b/ceammc/ext/doc/ui.number~-help.pd @@ -80,7 +80,7 @@ list.; #X text 115 45 ::; #X obj 131 48 ui.link @title ui @url ceammc.ui-help.pd; #X obj 1 1025 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1028 library: ceammc v0.7.1; +#X text 10 1028 library: ceammc v0.8.0; #X text 598 1040 see also:; #X obj 672 1043 ui.link @background_color 0.78431 0.78431 0.78431 @title [ui.number] @url ui.number-help.pd; @@ -89,7 +89,7 @@ list.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 ui.number~; #X text 10 76 category:; @@ -99,7 +99,7 @@ list.; #X text 10 120 authors:; #X text 120 120 Pierre Guillot \, Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 ui \, number; #X text 10 186 website:; diff --git a/ceammc/ext/doc/ui.number~.pddoc b/ceammc/ext/doc/ui.number~.pddoc index 8c3eb40a43..a0989dcf67 100644 --- a/ceammc/ext/doc/ui.number~.pddoc +++ b/ceammc/ext/doc/ui.number~.pddoc @@ -8,7 +8,7 @@ Serge Poltavsky counterpart of the vanilla [nbx] for signal - GPL3 + GPL3 or later ceammc ui ui number diff --git a/ceammc/ext/doc/ui.polar-help.pd b/ceammc/ext/doc/ui.polar-help.pd new file mode 100644 index 0000000000..bd2f4567af --- /dev/null +++ b/ceammc/ext/doc/ui.polar-help.pd @@ -0,0 +1,203 @@ +#N canvas 0 0 785 555 12; +#X declare -lib ceammc; +#X obj 530 50 cnv 1 235 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 530 50 2D slider in polar coordinates; +#X obj 1 1 cnv 5 765 40 empty empty ui.polar 20 20 0 20 -104026 -4096 +0; +#X obj 680 13 ui.link @background_color 0.39216 0.39216 0.39216 @title +[ui.polar] @url ui.polar-help.pd; +#X msg 50 118 1 45; +#X msg 117 118 rotate 45; +#X obj 50 147 ui.polar; +#X obj 50 262 ui.display @display_type 1 @size 150 18; +#X obj 20 302 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 307 cnv 5 115 26 empty empty mouse_events: 4 10 0 14 -262144 +-49933 0; +#X text 110 342 Left-click; +#X text 285 342 jump to coord under mouse pointer.; +#X text 110 362 Right-click; +#X text 285 362 opens popup menu for quick settings of position: center +\, left \, right \, top \, bottom.; +#X text 110 397 Mouse-drag; +#X text 285 397 change slider coords.; +#X text 110 417 Mouse-drag + ⌥; +#X text 285 417 change only angle coord.; +#X text 110 437 Mouse-wheel; +#X text 285 437 change only radius coord.; +#X text 110 457 Mouse-wheel + ⇧; +#X text 285 457 change precisely radius coord.; +#X obj 20 487 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 492 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 527 @angle; +#X text 245 527 Get/Set angle. Type: float.; +#X msg 110 556 @clockwise; +#X text 245 556 Get/Set clockwise positive direction. Type: int. Default +value: 1\. Allowed values: 0 \, 1\.; +#X msg 110 598 @direction; +#X text 245 598 Get/Set zero-angle direction. Type: symbol. Default +value: N. Allowed values: N \, E \, S \, W.; +#X msg 110 640 @mouse_events; +#X text 245 640 Get/Set mouse events output mode. If on outputs @mouse_down +\, @mouse_up and @mouse_drag events. Type: int. Default value: 0\. +Allowed values: 0 \, 1\.; +#X msg 110 697 @positive; +#X text 245 697 Get/Set use positive output angle range. For example: +[0\..360) when using degrees \, otherwise using [-180\..180) range. +Type: int. Default value: 0\. Allowed values: 0 \, 1\.; +#X msg 110 754 @radians; +#X text 245 754 Get/Set using radians instead of degrees. Type: int. +Default value: 0\. Allowed values: 0 \, 1\.; +#X msg 110 796 @radius; +#X text 245 796 Get/Set radius. Type: float. Range: 0\...1\.; +#X msg 110 825 @receive; +#X text 245 825 Get/Set receive source. Type: symbol.; +#X msg 110 854 @send; +#X text 245 854 Get/Set send destination. Type: symbol.; +#X msg 110 883 @background_color; +#X text 245 883 Get/Set element background color (list of red \, green +\, blue values in 0-1 range). Type: list.; +#X msg 110 925 @border_color; +#X text 245 925 Get/Set border color (list of red \, green \, blue +values in 0-1 range). Type: list.; +#X msg 110 967 @label_color; +#X text 245 967 Get/Set label color in RGB format within 0-1 range +\, for example: 0.2 0.4 0.1\. Type: list.; +#X msg 110 1009 @label; +#X text 245 1009 Get/Set label text. Type: symbol.; +#X msg 110 1038 @label_align; +#X text 245 1038 Get/Set label horizontal align. Type: symbol. Default +value: left. Allowed values: left \, center \, right.; +#X msg 110 1080 @label_inner; +#X text 245 1080 Get/Set label position (1 - inner \, 0 - outer). Type: +int. Default value: 0\. Allowed values: 0 \, 1\.; +#X msg 110 1122 @label_margins; +#X text 245 1122 Get/Set label offset in pixels. Type: list. Default +value: 0 0\.; +#X msg 110 1164 @label_side; +#X text 245 1164 Get/Set label snap side. Type: symbol. Default value: +top. Allowed values: left \, top \, right \, bottom.; +#X msg 110 1206 @label_valign; +#X text 245 1206 Get/Set label vertical align. Type: symbol. Default +value: top. Allowed values: top \, center \, bottom.; +#X msg 110 1248 @fontname; +#X text 245 1248 Get/Set fontname. Type: symbol.; +#X msg 110 1277 @fontsize; +#X text 245 1277 Get/Set fontsize. Type: int. Default value: 11\. Range: +4\...11\.; +#X msg 110 1319 @fontslant; +#X text 245 1319 Get/Set font slant. Type: symbol. Default value: roman. +Allowed values: roman \, italic.; +#X msg 110 1361 @fontweight; +#X text 245 1361 Get/Set font weight. Type: symbol. Default value: +normal. Allowed values: normal \, bold.; +#X msg 110 1403 @pinned; +#X text 245 1403 Get/Set pin mode. if 1 - put element to the lowest +level. Type: int. Default value: 0\. Allowed values: 0 \, 1\.; +#X msg 110 1445 @presetname; +#X text 245 1445 Get/Set preset name for using with [ui.preset]. Type: +symbol.; +#X msg 110 1474 @size; +#X text 245 1474 Get/Set element size (width \, height pair). Type: +list.; +#X obj 20 1513 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1518 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +-49933 0; +#X msg 110 1553 cartesian; +#X text 245 1553 sets slider position in cartesian coords and output. +Arguments are:; +#X obj 255 1591 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1591 X: x-coord. Type: float. Range: -1\...1\.; +#X obj 255 1614 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1614 Y: y-coord. Type: float. Range: -1\...1\.; +#X msg 110 1639 clear; +#X text 245 1639 clears specified preset. Arguments are:; +#X obj 255 1662 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1662 IDX: preset index. Type: int.; +#X msg 110 1687 load; +#X text 245 1687 loads specified preset. Arguments are:; +#X obj 255 1710 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1710 IDX: preset index. Type: int.; +#X msg 110 1735 polar; +#X text 245 1735 sets slider position in polar coords and output. Arguments +are:; +#X obj 255 1773 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1773 RAD: radius. Type: float. Range: 0\...1\.; +#X obj 255 1796 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1796 ANG: angle in degrees or radians (depends on @use_degrees +property). Type: float.; +#X msg 110 1836 pos; +#X text 245 1836 set UI element position. Arguments are:; +#X obj 255 1859 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1859 X: top left x-coord. Type: float.; +#X obj 255 1882 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1882 Y: top right y-coord. Type: float.; +#X msg 110 1907 rotate; +#X text 245 1907 rotate slider by specified angle. Arguments are:; +#X obj 255 1930 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1930 A: angle in degrees or radians (depends on @use_degrees +property). Type: float.; +#X msg 110 1970 set; +#X text 245 1970 sets slider position without output. Arguments are:; +#X obj 255 1993 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1993 RAD: radius. Type: float. Range: 0\...1\.; +#X obj 255 2016 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2016 ANG: angle in degrees or radians (depends on @use_degrees +property). Type: float.; +#X msg 110 2056 store; +#X text 245 2056 stores specified preset. Arguments are:; +#X obj 255 2079 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2079 IDX: preset index. Type: int.; +#X msg 110 2104 dump; +#X text 245 2104 dumps all object info to Pd console window.; +#X obj 20 2141 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 2146 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 2147 1\.; +#X text 150 2147 *bang*; +#X text 245 2147 outputs slider position.; +#X text 150 2167 *list*; +#X text 245 2167 sets slider position and outputs it.; +#X obj 20 2197 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 2202 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 2203 1\.; +#X text 245 2203 list output of two values: RADIUS and ANGLE.; +#X obj 10 48 ui.link @title index @url ../index-help.pd; +#X text 51 45 ::; +#X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; +#X text 115 45 ::; +#X obj 131 48 ui.link @title ui @url ceammc.ui-help.pd; +#X obj 1 2253 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 2256 library: ceammc v0.8.0; +#X text 584 2268 see also:; +#X obj 658 2271 ui.link @background_color 0.78431 0.78431 0.78431 +@title [ui.slider2d] @url ui.slider2d-help.pd; +#N canvas 10 2275 400 290 info 0; +#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; +#X text 10 10 library:; +#X text 120 10 ceammc; +#X text 10 32 version:; +#X text 120 32 0.8.0; +#X text 10 54 object:; +#X text 120 54 ui.polar; +#X text 10 76 category:; +#X text 120 76 ui; +#X text 10 98 since:; +#X text 120 98 0.8; +#X text 10 120 authors:; +#X text 120 120 Serge Poltavsky; +#X text 10 142 license:; +#X text 120 142 GPL3 or later; +#X text 10 164 keywords:; +#X text 120 164 ui \, slider \, polar; +#X text 10 186 website:; +#X obj 120 189 ui.link @title https://github.com/uliss/pure-data @url +https://github.com/uliss/pure-data; +#X obj 120 208 declare -lib ceammc; +#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 120 268 generated by pddoc; +#X restore 10 2275 pd info; +#X connect 4 0 6 0; +#X connect 5 0 6 0; +#X connect 6 0 7 0; \ No newline at end of file diff --git a/ceammc/ext/doc/ui.polar.pddoc b/ceammc/ext/doc/ui.polar.pddoc new file mode 100644 index 0000000000..e2f7a8b69a --- /dev/null +++ b/ceammc/ext/doc/ui.polar.pddoc @@ -0,0 +1,132 @@ + + + + ui.polar + + + Serge Poltavsky + + 2D slider in polar coordinates + GPL3 or later + ceammc + ui + ui slider polar + 0.8 + + ui.slider2d + + + + jump to coord under mouse pointer + opens popup menu for quick settings of + position: center, left, right, top, bottom + change slider coords + change only angle coord + change only radius coord + change precisely radius coord + + + clockwise positive + direction + zero-angle + direction + use positive output angle + range. For example: [0..360) when using degrees, otherwise using [-180..180) + range. + using radians instead of + degrees + angle + radius + + preset name for using with + [ui.preset] + send destination + receive source + element size (width, height pair) + pin mode. if 1 - put element + to the lowest level + mouse events output + mode. If on outputs @mouse_down, @mouse_up and @mouse_drag events + element background color (list of red, + green, blue values in 0-1 range) + border color (list of red, green, blue + values in 0-1 range) + + fontsize + fontname + font + weight + font + slant + + label text + label color in RGB format within 0-1 range, + for example: 0.2 0.4 0.1 + label position (1 - + inner, 0 - outer). + + label horizontal align + + label vertical align + + label snap side + label offset in + pixels + + + dumps all object info to Pd console window + sets slider position without output + radius + angle in degrees or radians (depends on + @use_degrees property) + sets slider position in polar coords and output + radius + angle in degrees or radians (depends on + @use_degrees property) + sets slider position in cartesian coords and output + x-coord + + y-coord + rotate slider by specified angle + angle in degrees or radians (depends on + @use_degrees property) + + loads specified preset + preset index + stores specified preset + preset index + clears specified preset + preset index + + set UI element position + top left x-coord + top right y-coord + + + + outputs slider position + sets slider position and outputs it + + + + list output of two values: RADIUS and ANGLE + + + + + + + + diff --git a/ceammc/ext/doc/ui.preset-help.pd b/ceammc/ext/doc/ui.preset-help.pd index 76a693088a..1f91976222 100644 --- a/ceammc/ext/doc/ui.preset-help.pd +++ b/ceammc/ext/doc/ui.preset-help.pd @@ -6,123 +6,132 @@ 0; #X obj 672 13 ui.link @background_color 0.39216 0.39216 0.39216 @title [ui.preset] @url ui.preset-help.pd; -#X obj 210 80 cnv 1 555 170 empty empty empty 17 7 0 10 -257983 -1 0; +#X obj 210 80 cnv 1 555 130 empty empty empty 17 7 0 10 -257983 -1 0; #X text 215 80 Saves presets value of UI objects that have @presetname property. Can handle UI objects only on the save canvas \, no subpatches or abstractions are supported.; -#X text 215 135 *Click* activates preset slot \, *Shift+click* saves -to specified preset slot \, *Alt+click* removes preset value;; -#X text 215 175 NOTE: if no UI widgets with @presetname on canvas - +#X text 215 135 NOTE: if no UI widgets with @presetname on canvas - *Shift-click* is disabled.; -#X text 215 215 Active slot is highlighted \, available slots are dark +#X text 215 175 Active slot is highlighted \, available slots are dark gray; -#X obj 50 278 ui.radio @presetname P-radio @size 127 15; -#X obj 366 278 ui.sliders @presetname P-sliders @size 150 100; -#X obj 50 322 ui.toggle @presetname P-toggle @size 17 17; -#X obj 50 365 ui.rslider @presetname P-rslider @size 120 16; -#X floatatom 50 394 5 0 0 0 - - -; -#X msg 50 422 load \$1; -#X msg 69 451 clear 1; -#X msg 184 451 clearall; -#X obj 366 451 loadbang; -#X msg 88 480 store 1; -#X msg 203 480 write prs.txt; -#X msg 366 480 read prs.txt; -#X obj 50 523 ui.preset @size 102 42; -#X obj 20 587 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 592 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +#X obj 50 238 ui.radio @presetname P-radio; +#X obj 366 238 ui.sliders @presetname P-sliders; +#X obj 50 282 ui.toggle @presetname P-toggle @size 17 17; +#X obj 50 325 ui.rslider @presetname P-rslider; +#X floatatom 50 354 5 0 0 0 - - -; +#X msg 50 382 load \$1; +#X msg 69 411 clear 1; +#X msg 184 411 clearall; +#X obj 366 411 loadbang; +#X msg 88 440 store 1; +#X msg 203 440 write prs.txt; +#X msg 366 440 read prs.txt; +#X obj 50 483 ui.preset @size 102 42; +#X obj 20 547 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 552 cnv 5 115 26 empty empty mouse_events: 4 10 0 14 -262144 -49933 0; -#X msg 110 627 @current; -#X text 245 627 Get/Set current preset index. Type: int. Default value: -0\.; -#X msg 110 656 @receive; -#X text 245 656 Get/Set receive source. Type: symbol.; -#X msg 110 685 @send; -#X text 245 685 Get/Set send destination. Type: symbol.; -#X msg 110 714 @active_color; -#X text 245 714 Get/Set active color (list of red \, green \, blue +#X text 110 587 Left-click; +#X text 285 587 select preset slot under cursor.; +#X text 110 607 Left-click + ⇧; +#X text 285 607 saves current settings to specified preset slot.; +#X text 110 627 Left-click + ⌥; +#X text 285 627 clear all values from specified preset slot.; +#X text 110 647 Right-click; +#X text 285 647 opens popup menu with read/write actions.; +#X obj 20 677 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 682 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 717 @current; +#X text 245 717 (readonly) Get current preset index. Type: int. Default +value: 0\.; +#X msg 110 759 @receive; +#X text 245 759 Get/Set receive source. Type: symbol.; +#X msg 110 788 @send; +#X text 245 788 Get/Set send destination. Type: symbol.; +#X msg 110 817 @active_color; +#X text 245 817 Get/Set active color (list of red \, green \, blue values in 0-1 range). Type: list.; -#X msg 110 756 @background_color; -#X text 245 756 Get/Set element background color (list of red \, green +#X msg 110 859 @background_color; +#X text 245 859 Get/Set element background color (list of red \, green \, blue values in 0-1 range). Type: list.; -#X msg 110 798 @border_color; -#X text 245 798 Get/Set border color (list of red \, green \, blue +#X msg 110 901 @border_color; +#X text 245 901 Get/Set border color (list of red \, green \, blue values in 0-1 range). Type: list.; -#X msg 110 840 @empty_color; -#X text 245 840 Get/Set empty cell color (list of red \, green \, blue +#X msg 110 943 @empty_color; +#X text 245 943 Get/Set empty cell color (list of red \, green \, blue values in 0-1 range). Type: list.; -#X msg 110 882 @stored_color; -#X text 245 882 Get/Set stored cell color (list of red \, green \, +#X msg 110 985 @stored_color; +#X text 245 985 Get/Set stored cell color (list of red \, green \, blue values in 0-1 range). Type: list.; -#X msg 110 924 @text_color; -#X text 245 924 Get/Set text color (list of red \, green \, blue values +#X msg 110 1027 @text_color; +#X text 245 1027 Get/Set text color (list of red \, green \, blue values in 0-1 range). Type: list.; -#X msg 110 966 @fontname; -#X text 245 966 Get/Set fontname. Type: symbol.; -#X msg 110 995 @fontsize; -#X text 245 995 Get/Set fontsize. Type: int. Default value: 11\. Range: +#X msg 110 1069 @fontname; +#X text 245 1069 Get/Set fontname. Type: symbol.; +#X msg 110 1098 @fontsize; +#X text 245 1098 Get/Set fontsize. Type: int. Default value: 11\. Range: 4\...11\.; -#X msg 110 1037 @fontslant; -#X text 245 1037 Get/Set font slant. Type: symbol. Default value: roman. +#X msg 110 1140 @fontslant; +#X text 245 1140 Get/Set font slant. Type: symbol. Default value: roman. Allowed values: roman \, italic.; -#X msg 110 1079 @fontweight; -#X text 245 1079 Get/Set font weight. Type: symbol. Default value: +#X msg 110 1182 @fontweight; +#X text 245 1182 Get/Set font weight. Type: symbol. Default value: normal. Allowed values: normal \, bold.; -#X msg 110 1121 @pinned; -#X text 245 1121 Get/Set pin mode. if 1 - put element to the lowest +#X msg 110 1224 @pinned; +#X text 245 1224 Get/Set pin mode. if 1 - put element to the lowest level. Type: int. Default value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 1163 @size; -#X text 245 1163 Get/Set element size (width \, height pair). Type: +#X msg 110 1266 @size; +#X text 245 1266 Get/Set element size (width \, height pair). Type: list.; -#X obj 20 1202 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1207 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 1305 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1310 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 1242 clear; -#X text 245 1242 clear specified preset. Arguments are:; -#X obj 255 1265 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1265 IDX: preset index. Type: int. Min value: 0\.; -#X msg 110 1290 load; -#X text 245 1290 loads specified preset. Arguments are:; -#X obj 255 1313 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1313 IDX: preset index. Type: int.; -#X msg 110 1338 pos; -#X text 245 1338 set UI element position. Arguments are:; -#X obj 255 1361 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1361 X: top left x-coord. Type: float.; -#X obj 255 1384 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1384 Y: top right y-coord. Type: float.; -#X msg 110 1409 read; -#X text 245 1409 read presets from file. Arguments are:; -#X obj 255 1432 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1432 PATH: path to preset file. Type: symbol.; -#X msg 110 1457 store; -#X text 245 1457 stores specified preset. Arguments are:; -#X obj 255 1480 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1480 IDX: preset index. Type: int.; -#X msg 110 1505 write; -#X text 245 1505 read presets from file. Arguments are:; -#X obj 255 1528 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1528 PATH: path to preset file. Type: symbol.; -#X obj 20 1563 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1568 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +#X msg 110 1345 clear; +#X text 245 1345 clear specified preset. Arguments are:; +#X obj 255 1368 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1368 IDX: preset index. Type: int. Min value: 0\.; +#X msg 110 1393 load; +#X text 245 1393 loads specified preset. Arguments are:; +#X obj 255 1416 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1416 IDX: preset index. Type: int.; +#X msg 110 1441 pos; +#X text 245 1441 set UI element position. Arguments are:; +#X obj 255 1464 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1464 X: top left x-coord. Type: float.; +#X obj 255 1487 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1487 Y: top right y-coord. Type: float.; +#X msg 110 1512 read; +#X text 245 1512 read presets from file. Arguments are:; +#X obj 255 1535 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1535 PATH: path to preset file. Type: symbol.; +#X msg 110 1560 store; +#X text 245 1560 stores specified preset. Arguments are:; +#X obj 255 1583 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1583 IDX: preset index. Type: int.; +#X msg 110 1608 write; +#X text 245 1608 read presets from file. Arguments are:; +#X obj 255 1631 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1631 PATH: path to preset file. Type: symbol.; +#X obj 20 1666 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1671 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1569 1\.; +#X text 110 1672 1\.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title ui @url ceammc.ui-help.pd; -#X obj 1 1599 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1602 library: ceammc v0.7.1; -#X text 464 1614 see also:; -#X obj 538 1614 preset.float; -#X obj 639 1614 preset.storage; -#N canvas 10 1621 400 290 info 0; +#X obj 1 1702 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1705 library: ceammc v0.8.0; +#X text 464 1717 see also:; +#X obj 538 1717 preset.float; +#X obj 639 1717 preset.storage; +#N canvas 10 1724 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 ui.preset; #X text 10 76 category:; @@ -132,7 +141,7 @@ list.; #X text 10 120 authors:; #X text 120 120 Pierre Guillot \, Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 ui \, preset; #X text 10 186 website:; @@ -141,12 +150,12 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1621 pd info; -#X connect 13 0 14 0; +#X restore 10 1724 pd info; +#X connect 12 0 13 0; +#X connect 16 0 19 0; +#X connect 13 0 20 0; +#X connect 14 0 20 0; #X connect 17 0 20 0; -#X connect 14 0 21 0; -#X connect 15 0 21 0; -#X connect 18 0 21 0; -#X connect 16 0 21 0; -#X connect 19 0 21 0; -#X connect 20 0 21 0; \ No newline at end of file +#X connect 15 0 20 0; +#X connect 18 0 20 0; +#X connect 19 0 20 0; \ No newline at end of file diff --git a/ceammc/ext/doc/ui.preset.pddoc b/ceammc/ext/doc/ui.preset.pddoc index 2c9b0f9042..bb7aefc963 100644 --- a/ceammc/ext/doc/ui.preset.pddoc +++ b/ceammc/ext/doc/ui.preset.pddoc @@ -8,7 +8,7 @@ Serge Poltavsky Preset manager - GPL3 + GPL3 or later ceammc ui ui preset @@ -21,14 +21,22 @@ Saves presets value of UI objects that have @presetname property. Can handle UI objects only on the save canvas, no subpatches or abstractions are supported. - *Click* activates preset slot, *Shift+click* saves to specified preset slot, - *Alt+click* removes preset value; NOTE: if no UI widgets with @presetname on canvas - *Shift-click* is disabled. Active slot is highlighted, available slots are dark gray + + select preset slot under cursor + saves current settings to + specified preset slot + clear all values from specified + preset slot + opens popup menu with read/write + actions + - current preset index + current preset + index send destination receive source @@ -77,13 +85,13 @@ Pierre Guillot counterpart of the vanilla radio toggle - GPL3 + GPL3 or later ceammc ui ui radio @@ -16,14 +16,24 @@ ui.matrix + ui.radio* ui.hrd + ui.hrd* ui.vrd + ui.vrd* - Double click in edit mode changes slider orientation - [ui.hrd] alias for horizontal radio, [ui.vrd] alias for vertical radio + [ui.hrd] alias for horizontal radio, [ui.vrd] alias for vertical radio, [ui.hrd*] + alias for horizontal radio checklist. + + changes slider + orientation + select cell in radio mode, toggle cell in check + list mode + show context menu + number of cells @@ -55,11 +65,14 @@ weight font slant + mouse events output + mode. If on outputs @mouse_down and @mouse_drag events sets radio without output new value reset radio (only in checklist mode) + check random cells flips radio (only in checklist mode) moves to next position until last cell is reached (single mode only) @@ -96,9 +109,9 @@ [F] [set 2( [flip( [reset( [1 1 0 1 0 0 1( | | | | | | | | | | -[ui.radio ] [ui.radio @mode=1] +[ui.radio ] [ui.radio @mode 1] | | -[F] [ui.display @display_type 1] +[F] [ui.display @display_type=1] [+ 3( [- 1( [prev( [next( | | | | diff --git a/ceammc/ext/doc/ui.rslider-help.pd b/ceammc/ext/doc/ui.rslider-help.pd index 769e36fa9d..9202674ee3 100644 --- a/ceammc/ext/doc/ui.rslider-help.pd +++ b/ceammc/ext/doc/ui.rslider-help.pd @@ -8,132 +8,176 @@ [ui.rsl] @url ui.rslider-help.pd; #X obj 665 13 ui.link @background_color 0.39216 0.39216 0.39216 @title [ui.rslider] @url ui.rslider-help.pd; -#X obj 210 80 cnv 1 555 50 empty empty empty 17 7 0 10 -257983 -1 0; -#X text 215 80 Hold *Shift* to move ranges separately. When @sync property -is true \, outputs value on every mouse move; -#X msg 50 158 20 80; -#X msg 174 158 60 90; -#X msg 69 187 @range?; -#X msg 194 187 @low?; -#X msg 270 187 @high?; -#X obj 50 245 ui.rslider @max 100 @min 0 @size 120 16; -#X obj 50 274 ui.display @display_type 1 @size 150 18; -#X text 50 302 Mouse sync is on; -#X obj 50 331 ui.rslider @size 120 16 @sync 1; -#X obj 50 360 ui.display @display_type 1 @size 150 18; -#X obj 20 400 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 405 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +#X obj 210 80 cnv 1 555 90 empty empty empty 17 7 0 10 -257983 -1 0; +#X text 215 80 By default outputs messages on mouse click \, mouse +up and dragging; +#X text 215 120 To output messages only on specified event use: @mouse_events=1 +and [ui.mouse_filter]; +#X msg 50 198 20 80; +#X msg 174 198 60 90; +#X msg 69 227 @range?; +#X msg 194 227 @low?; +#X msg 270 227 @high?; +#X obj 50 285 ui.rslider @min 0 @max 100; +#X obj 50 314 ui.display @display_type 1 @size 150 18; +#X obj 20 354 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 359 cnv 5 115 26 empty empty mouse_events: 4 10 0 14 -262144 -49933 0; -#X msg 110 440 @high; -#X text 245 440 Get/Set max (right) selection value. Type: float. Default +#X text 110 394 Left-click; +#X text 285 394 jump both ends to coord under mouse pointer.; +#X text 110 414 Left-click + ⌘; +#X text 285 414 outputs current slider value.; +#X text 110 434 Left-click + ⌥; +#X text 285 434 jump nearest border to coord under mouse pointer.; +#X text 110 454 Mouse-drag; +#X text 285 454 increase slider range.; +#X text 110 474 Mouse-drag + ⌥; +#X text 285 474 change nearest border coord.; +#X text 110 494 Mouse-drag + ⇧; +#X text 285 494 move slider range.; +#X text 110 514 Right-click + ⇧; +#X text 285 514 open object help.; +#X text 110 534 Right-click + ⌥; +#X text 285 534 open properties dialog.; +#X text 110 554 Right-click + ⇧; +#X text 285 554 open object help.; +#X text 61 554 [Edit]; +#X text 110 574 Right-click + ⌥; +#X text 285 574 open properties dialog.; +#X text 61 574 [Edit]; +#X obj 20 604 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 609 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 644 @high; +#X text 245 644 Get/Set max (right) selection value. Type: float. Default value: 0\.; -#X msg 110 482 @low; -#X text 245 482 Get/Set low (left) selection value. Type: float. Default +#X msg 110 686 @low; +#X text 245 686 Get/Set low (left) selection value. Type: float. Default value: 0\.; -#X msg 110 524 @max; -#X text 245 524 Get/Set maximum allowed slider value. Type: float. +#X msg 110 728 @max; +#X text 245 728 Get/Set maximum allowed slider value. Type: float. Default value: 1\.; -#X msg 110 566 @min; -#X text 245 566 Get/Set minimum allowed slider value. Type: float. +#X msg 110 770 @min; +#X text 245 770 Get/Set minimum allowed slider value. Type: float. Default value: 0\.; -#X msg 110 608 @range; -#X text 245 608 Get/Set selected slider value. Type: float. Default -value: 0\. Min value: 0\.; -#X msg 110 650 @receive; -#X text 245 650 Get/Set receive source. Type: symbol.; -#X msg 110 679 @send; -#X text 245 679 Get/Set send destination. Type: symbol.; -#X msg 110 708 @sync; -#X text 245 708 Get/Set mouse sync. If true \, outputs while mouse -dragging \, otherwise outputs only on mouse down/up. Type: int. Default -value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 765 @value; -#X text 245 765 Get/Set current slider value. Type: list.; -#X msg 110 794 @background_color; -#X text 245 794 Get/Set element background color (list of red \, green +#X msg 110 812 @mouse_events; +#X text 245 812 Get/Set mouse events output mode. If on outputs @mouse_down +\, @mouse_up and @mouse_drag events. Type: int. Default value: 0\. +Allowed values: 0 \, 1\.; +#X msg 110 869 @range; +#X text 245 869 (readonly) Get selected slider value. Type: float. +Default value: 0\. Min value: 0\.; +#X msg 110 911 @receive; +#X text 245 911 Get/Set receive source. Type: symbol.; +#X msg 110 940 @send; +#X text 245 940 Get/Set send destination. Type: symbol.; +#X msg 110 969 @value; +#X text 245 969 Get/Set current slider value. Type: list.; +#X msg 110 998 @background_color; +#X text 245 998 Get/Set element background color (list of red \, green \, blue values in 0-1 range). Type: list.; -#X msg 110 836 @border_color; -#X text 245 836 Get/Set border color (list of red \, green \, blue +#X msg 110 1040 @border_color; +#X text 245 1040 Get/Set border color (list of red \, green \, blue values in 0-1 range). Type: list.; -#X msg 110 878 @knob_color; -#X text 245 878 Get/Set knob color (list of red \, green \, blue values +#X msg 110 1082 @knob_color; +#X text 245 1082 Get/Set knob color (list of red \, green \, blue values in 0-1 range). Type: list.; -#X msg 110 920 @fontname; -#X text 245 920 Get/Set fontname. Type: symbol.; -#X msg 110 949 @fontsize; -#X text 245 949 Get/Set fontsize. Type: int. Default value: 11\. Range: +#X msg 110 1124 @label_color; +#X text 245 1124 Get/Set label color in RGB format within 0-1 range +\, for example: 0.2 0.4 0.1\. Type: list.; +#X msg 110 1166 @label; +#X text 245 1166 Get/Set label text. Type: symbol.; +#X msg 110 1195 @label_align; +#X text 245 1195 Get/Set label horizontal align. Type: symbol. Default +value: left. Allowed values: left \, center \, right.; +#X msg 110 1237 @label_inner; +#X text 245 1237 Get/Set label position (1 - inner \, 0 - outer). Type: +int. Default value: 0\. Allowed values: 0 \, 1\.; +#X msg 110 1279 @label_margins; +#X text 245 1279 Get/Set label offset in pixels. Type: list. Default +value: 0 0\.; +#X msg 110 1321 @label_side; +#X text 245 1321 Get/Set label snap side. Type: symbol. Default value: +top. Allowed values: left \, top \, right \, bottom.; +#X msg 110 1363 @label_valign; +#X text 245 1363 Get/Set label vertical align. Type: symbol. Default +value: top. Allowed values: top \, center \, bottom.; +#X msg 110 1405 @fontname; +#X text 245 1405 Get/Set fontname. Type: symbol.; +#X msg 110 1434 @fontsize; +#X text 245 1434 Get/Set fontsize. Type: int. Default value: 11\. Range: 4\...11\.; -#X msg 110 991 @fontslant; -#X text 245 991 Get/Set font slant. Type: symbol. Default value: roman. +#X msg 110 1476 @fontslant; +#X text 245 1476 Get/Set font slant. Type: symbol. Default value: roman. Allowed values: roman \, italic.; -#X msg 110 1033 @fontweight; -#X text 245 1033 Get/Set font weight. Type: symbol. Default value: +#X msg 110 1518 @fontweight; +#X text 245 1518 Get/Set font weight. Type: symbol. Default value: normal. Allowed values: normal \, bold.; -#X msg 110 1075 @pinned; -#X text 245 1075 Get/Set pin mode. if 1 - put element to the lowest +#X msg 110 1560 @pinned; +#X text 245 1560 Get/Set pin mode. if 1 - put element to the lowest level. Type: int. Default value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 1117 @presetname; -#X text 245 1117 Get/Set preset name for using with [ui.preset]. Type: +#X msg 110 1602 @presetname; +#X text 245 1602 Get/Set preset name for using with [ui.preset]. Type: symbol.; -#X msg 110 1146 @size; -#X text 245 1146 Get/Set element size (width \, height pair). Type: +#X msg 110 1631 @size; +#X text 245 1631 Get/Set element size (width \, height pair). Type: list.; -#X obj 20 1185 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1190 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 1670 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1675 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 1225 clear; -#X text 245 1225 clears specified preset. Arguments are:; -#X obj 255 1248 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1248 IDX: preset index. Type: int.; -#X msg 110 1273 load; -#X text 245 1273 loads specified preset. Arguments are:; -#X obj 255 1296 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1296 IDX: preset index. Type: int.; -#X msg 110 1321 pos; -#X text 245 1321 set UI element position. Arguments are:; -#X obj 255 1344 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1344 X: top left x-coord. Type: float.; -#X obj 255 1367 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1367 Y: top right y-coord. Type: float.; -#X msg 110 1392 set; -#X text 245 1392 sets slider value without output. Arguments are:; -#X obj 255 1415 cnv 1 14 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1415 V: new value. Type: float.; -#X msg 110 1440 store; -#X text 245 1440 stores specified preset. Arguments are:; -#X obj 255 1463 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1463 IDX: preset index. Type: int.; -#X obj 20 1498 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1503 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +#X msg 110 1710 clear; +#X text 245 1710 clears specified preset. Arguments are:; +#X obj 255 1733 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1733 IDX: preset index. Type: int.; +#X msg 110 1758 load; +#X text 245 1758 loads specified preset. Arguments are:; +#X obj 255 1781 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1781 IDX: preset index. Type: int.; +#X msg 110 1806 pos; +#X text 245 1806 set UI element position. Arguments are:; +#X obj 255 1829 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1829 X: top left x-coord. Type: float.; +#X obj 255 1852 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1852 Y: top right y-coord. Type: float.; +#X msg 110 1877 set; +#X text 245 1877 sets slider value without output. Arguments are:; +#X obj 255 1900 cnv 1 14 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1900 V: new value. Type: float.; +#X msg 110 1925 store; +#X text 245 1925 stores specified preset. Arguments are:; +#X obj 255 1948 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1948 IDX: preset index. Type: int.; +#X obj 20 1983 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1988 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1504 1\.; -#X text 150 1504 *bang*; -#X text 245 1504 outputs current slider state.; -#X text 150 1524 *list*; -#X text 245 1524 set range value without output.; -#X obj 20 1554 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1559 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 1989 1\.; +#X text 150 1989 *bang*; +#X text 245 1989 outputs current slider state.; +#X text 150 2009 *list*; +#X text 245 2009 set range value without output.; +#X obj 20 2039 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 2044 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1560 1\.; -#X text 245 1560 output slider range as pair of values.; +#X text 110 2045 1\.; +#X text 245 2045 output slider range as pair of values.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title ui @url ceammc.ui-help.pd; -#X obj 1 1610 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1613 library: ceammc v0.7.1; -#X text 508 1625 see also:; -#X obj 582 1628 ui.link @background_color 0.78431 0.78431 0.78431 +#X obj 1 2095 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 2098 library: ceammc v0.8.0; +#X text 508 2110 see also:; +#X obj 582 2113 ui.link @background_color 0.78431 0.78431 0.78431 @title [ui.slider] @url ui.slider-help.pd; -#X obj 665 1628 ui.link @background_color 0.78431 0.78431 0.78431 +#X obj 665 2113 ui.link @background_color 0.78431 0.78431 0.78431 @title [ui.sliders] @url ui.sliders-help.pd; -#N canvas 10 1632 400 290 info 0; +#N canvas 10 2117 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 ui.rslider; #X text 10 76 category:; @@ -143,7 +187,7 @@ list.; #X text 10 120 authors:; #X text 120 120 Pierre Guillot \, Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 ui \, range \, slider; #X text 10 186 website:; @@ -152,11 +196,10 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1632 pd info; -#X connect 7 0 12 0; -#X connect 9 0 12 0; -#X connect 8 0 12 0; -#X connect 10 0 12 0; -#X connect 11 0 12 0; +#X restore 10 2117 pd info; +#X connect 8 0 13 0; +#X connect 10 0 13 0; +#X connect 9 0 13 0; +#X connect 11 0 13 0; #X connect 12 0 13 0; -#X connect 15 0 16 0; \ No newline at end of file +#X connect 13 0 14 0; \ No newline at end of file diff --git a/ceammc/ext/doc/ui.rslider.pddoc b/ceammc/ext/doc/ui.rslider.pddoc index 9525b6a768..55a594fecb 100644 --- a/ceammc/ext/doc/ui.rslider.pddoc +++ b/ceammc/ext/doc/ui.rslider.pddoc @@ -8,7 +8,7 @@ Serge Poltavsky range slider - GPL3 + GPL3 or later ceammc ui ui range slider @@ -22,19 +22,33 @@ - Hold *Shift* to move ranges separately. When @sync property is true, outputs value - on every mouse move + By default outputs messages on mouse click, mouse up and dragging + To output messages only on specified event use: @mouse_events=1 and + [ui.mouse_filter] + + jump both ends to coord under mouse + pointer + outputs current slider + value + jump nearest border to coord under + mouse pointer + increase slider range + change nearest border coord + move slider range + open object help + open properties dialog + open object help + open properties dialog + minimum allowed slider value maximum allowed slider value - mouse sync. If true, outputs - while mouse dragging, otherwise outputs only on mouse down/up current slider value low (left) selection value max (right) selection value - selected slider - value + selected + slider value preset name for using with [ui.preset] @@ -43,6 +57,8 @@ element size (width, height pair) pin mode. if 1 - put element to the lowest level + mouse events output + mode. If on outputs @mouse_down, @mouse_up and @mouse_drag events knob color (list of red, green, blue values in 0-1 range) element background color (list of red, @@ -56,6 +72,20 @@ weight font slant + + label text + label color in RGB format within 0-1 range, + for example: 0.2 0.4 0.1 + label position (1 - + inner, 0 - outer). + + label horizontal align + + label vertical align + + label snap side + label offset in + pixels sets slider value without output @@ -90,13 +120,7 @@ | | | | | | | | | | | | | | | -[ui.rslider @min=0 @max=100] -| -[ui.display @display_type=1] - -/*Mouse sync is on*/ - -[ui.rslider @sync=1] +[ui.rslider @min 0 @max 100] | [ui.display @display_type=1] ]]> diff --git a/ceammc/ext/doc/ui.scope~-help.pd b/ceammc/ext/doc/ui.scope~-help.pd index 6a833514e0..df8a0c05cd 100644 --- a/ceammc/ext/doc/ui.scope~-help.pd +++ b/ceammc/ext/doc/ui.scope~-help.pd @@ -6,103 +6,127 @@ 0; #X obj 672 13 ui.link @background_color 0.39216 0.39216 0.39216 @title [ui.scope~] @url ui.scope~-help.pd; -#X obj 210 80 cnv 1 555 50 empty empty empty 17 7 0 10 -257983 -1 0; -#X text 215 80 Shows waveform. Double-click toggles freeze mode. Shift+Click -- zoomin \, Ctrl+Click - zoomout; -#X obj 50 158 ui.dsp~ @size=40x40; -#X msg 50 202 300; -#X msg 107 202 660; -#X floatatom 165 202 5 0 0 0 - - -; -#X obj 50 245 osc~ 440; -#X msg 184 245 scale 0.5; -#X msg 299 245 scale 1; -#X msg 395 245 scale 2; -#X obj 50 288 ui.scope~ @size 450 200; -#X obj 20 510 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 515 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +#X obj 50 118 ui.dsp~ @size 40 40; +#X msg 50 162 300; +#X msg 107 162 660; +#X floatatom 165 162 5 0 0 0 - - -; +#X obj 50 205 osc~ 440; +#X msg 184 205 scale 0.5; +#X msg 299 205 scale 1; +#X msg 395 205 scale 2; +#X obj 50 248 ui.scope~ @size 450 200; +#X obj 20 470 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 475 cnv 5 115 26 empty empty mouse_events: 4 10 0 14 -262144 -49933 0; -#X msg 110 550 @max; -#X text 245 550 Get/Set maximum (top) graph value. Type: float. Default +#X text 110 510 Left-click + ⇧; +#X text 285 510 Y-axis zoomin.; +#X text 110 530 Left-click + ⌥; +#X text 285 530 Y-axis zoomout.; +#X text 110 550 Mouse-wheel; +#X text 285 550 Y-axis zoom.; +#X text 110 570 Mouse-wheel + ⇧; +#X text 285 570 X-axis zoom.; +#X text 110 590 Mouse-wheel; +#X text 285 590 Y-axis zoom.; +#X text 110 610 Double-click; +#X text 285 610 toggle freeze mode.; +#X text 110 630 Right-click; +#X text 285 630 open object popup menu with zoom options.; +#X text 110 650 Right-click + ⇧; +#X text 285 650 open object help.; +#X text 110 670 Right-click + ⌥; +#X text 285 670 open properties dialog.; +#X text 110 690 Right-click + ⇧; +#X text 285 690 open object help.; +#X text 61 690 [Edit]; +#X text 110 710 Right-click + ⌥; +#X text 285 710 open properties dialog.; +#X text 61 710 [Edit]; +#X obj 20 740 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 745 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 780 @max; +#X text 245 780 Get/Set maximum (top) graph value. Type: float. Default value: 1\.; -#X msg 110 592 @min; -#X text 245 592 Get/Set minimum (bottom) graph value. Type: float. +#X msg 110 822 @min; +#X text 245 822 Get/Set minimum (bottom) graph value. Type: float. Default value: -1\.; -#X msg 110 634 @receive; -#X text 245 634 Get/Set receive source. Type: symbol.; -#X msg 110 663 @refresh; -#X text 245 663 Get/Set approximate refresh rate. Type: int. Units: +#X msg 110 864 @receive; +#X text 245 864 Get/Set receive source. Type: symbol.; +#X msg 110 893 @refresh; +#X text 245 893 Get/Set approximate refresh rate. Type: int. Units: ms. Default value: 40\. Range: 10\...1000\.; -#X msg 110 705 @send; -#X text 245 705 Get/Set send destination. Type: symbol.; -#X msg 110 734 @window; -#X text 245 734 Get/Set window size. Type: int. Default value: 2048\. +#X msg 110 935 @send; +#X text 245 935 Get/Set send destination. Type: symbol.; +#X msg 110 964 @window; +#X text 245 964 Get/Set window size. Type: int. Default value: 2048\. Range: 512\...4096\.; -#X msg 110 776 @active_color; -#X text 245 776 Get/Set active color (list of red \, green \, blue +#X msg 110 1006 @active_color; +#X text 245 1006 Get/Set active color (list of red \, green \, blue values in 0-1 range). Type: list.; -#X msg 110 818 @background_color; -#X text 245 818 Get/Set element background color (list of red \, green +#X msg 110 1048 @background_color; +#X text 245 1048 Get/Set element background color (list of red \, green \, blue values in 0-1 range). Type: list.; -#X msg 110 860 @border_color; -#X text 245 860 Get/Set border color (list of red \, green \, blue +#X msg 110 1090 @border_color; +#X text 245 1090 Get/Set border color (list of red \, green \, blue values in 0-1 range). Type: list.; -#X msg 110 902 @fontname; -#X text 245 902 Get/Set fontname. Type: symbol.; -#X msg 110 931 @fontsize; -#X text 245 931 Get/Set fontsize. Type: int. Default value: 11\. Range: +#X msg 110 1132 @fontname; +#X text 245 1132 Get/Set fontname. Type: symbol.; +#X msg 110 1161 @fontsize; +#X text 245 1161 Get/Set fontsize. Type: int. Default value: 11\. Range: 4\...11\.; -#X msg 110 973 @fontslant; -#X text 245 973 Get/Set font slant. Type: symbol. Default value: roman. +#X msg 110 1203 @fontslant; +#X text 245 1203 Get/Set font slant. Type: symbol. Default value: roman. Allowed values: roman \, italic.; -#X msg 110 1015 @fontweight; -#X text 245 1015 Get/Set font weight. Type: symbol. Default value: +#X msg 110 1245 @fontweight; +#X text 245 1245 Get/Set font weight. Type: symbol. Default value: normal. Allowed values: normal \, bold.; -#X msg 110 1057 @pinned; -#X text 245 1057 Get/Set pin mode. if 1 - put element to the lowest +#X msg 110 1287 @pinned; +#X text 245 1287 Get/Set pin mode. if 1 - put element to the lowest level. Type: int. Default value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 1099 @size; -#X text 245 1099 Get/Set element size (width \, height pair). Type: +#X msg 110 1329 @size; +#X text 245 1329 Get/Set element size (width \, height pair). Type: list.; -#X obj 20 1138 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1143 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 1368 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1373 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 1178 freeze; -#X text 245 1178 stop/start processing. Arguments are:; -#X obj 255 1201 cnv 1 24 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1201 [V]: 1 - freeze \, 0 - unfreeze. Type: int. Allowed +#X msg 110 1408 freeze; +#X text 245 1408 stop/start processing. Arguments are:; +#X obj 255 1431 cnv 1 24 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1431 [V]: 1 - freeze \, 0 - unfreeze. Type: int. Allowed values: 0 \, 1\.; -#X msg 110 1241 pos; -#X text 245 1241 set UI element position. Arguments are:; -#X obj 255 1264 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1264 X: top left x-coord. Type: float.; -#X obj 255 1287 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1287 Y: top right y-coord. Type: float.; -#X msg 110 1312 scale; -#X text 245 1312 sets widget scale. Arguments are:; -#X obj 255 1335 cnv 1 24 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1335 [N]: 1 - normal scale \, 2 - range from -2\..2 (zoomout) +#X msg 110 1471 pos; +#X text 245 1471 set UI element position. Arguments are:; +#X obj 255 1494 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1494 X: top left x-coord. Type: float.; +#X obj 255 1517 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1517 Y: top right y-coord. Type: float.; +#X msg 110 1542 scale; +#X text 245 1542 sets widget scale. Arguments are:; +#X obj 255 1565 cnv 1 24 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1565 [N]: 1 - normal scale \, 2 - range from -2\..2 (zoomout) \, 0.1 - range from -0.1\..0.1 (zoomin). Type: float. Min value: 0\.; -#X obj 20 1385 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1390 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +#X obj 20 1615 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1620 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1391 1\.; -#X text 245 1391 signal input.; +#X text 110 1621 1\.; +#X text 245 1621 signal input.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title ui @url ceammc.ui-help.pd; -#X obj 1 1441 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1444 library: ceammc v0.7.1; -#X text 548 1456 see also:; -#X obj 622 1459 ui.link @background_color 0.78431 0.78431 0.78431 +#X obj 1 1671 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1674 library: ceammc v0.8.0; +#X text 548 1686 see also:; +#X obj 622 1689 ui.link @background_color 0.78431 0.78431 0.78431 @title [ui.spectroscope~] @url ui.spectroscope~-help.pd; -#N canvas 10 1463 400 290 info 0; +#N canvas 10 1693 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 ui.scope~; #X text 10 76 category:; @@ -112,7 +136,7 @@ values: 0 \, 1\.; #X text 10 120 authors:; #X text 120 120 Alex Nadzharov \, Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 ui \, scope; #X text 10 186 website:; @@ -121,11 +145,11 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1463 pd info; -#X connect 7 0 10 0; -#X connect 8 0 10 0; -#X connect 9 0 10 0; -#X connect 10 0 14 0; -#X connect 11 0 14 0; -#X connect 12 0 14 0; -#X connect 13 0 14 0; \ No newline at end of file +#X restore 10 1693 pd info; +#X connect 5 0 8 0; +#X connect 6 0 8 0; +#X connect 7 0 8 0; +#X connect 8 0 12 0; +#X connect 9 0 12 0; +#X connect 10 0 12 0; +#X connect 11 0 12 0; \ No newline at end of file diff --git a/ceammc/ext/doc/ui.scope~.pddoc b/ceammc/ext/doc/ui.scope~.pddoc index 5a8397847d..e0165b5427 100644 --- a/ceammc/ext/doc/ui.scope~.pddoc +++ b/ceammc/ext/doc/ui.scope~.pddoc @@ -8,7 +8,7 @@ Serge Poltavsky Scope GUI object - GPL3 + GPL3 or later ceammc ui ui scope @@ -17,10 +17,20 @@ ui.spectroscope~ - - Shows waveform. Double-click toggles freeze mode. Shift+Click - zoomin, Ctrl+Click - - zoomout - + + Y-axis zoomin + Y-axis zoomout + Y-axis zoom + X-axis zoom + Y-axis zoom + toggle freeze mode + open object popup menu with zoom + options + open object help + open properties dialog + open object help + open properties dialog + maximum (top) graph value minimum (bottom) graph value @@ -67,7 +77,7 @@ Pierre Guillot counterpart of the vanilla slider - GPL3 + GPL3 or later ceammc ui ui slider @@ -23,12 +23,19 @@ - Ctrl+Double click in edit mode changes slider orientation [ui.hsl] is alias for horizontal slider, [ui.vsl] - for vertical - Shift+click in performance mode - to bind to first received MIDI control event - from controller (red border appears). By default @midi_pickup is on, so you have to - pass over current slider value by MIDI control knob to activate binding. + + changes the slider value + changes slider + orientation + changes the slider value + changes the slider value slowly (only in + relative mode) + jump to value unless @mode property is on + toggle MIDI-learn mode (red border + displayed) + minimum slider value maximum slider value @@ -41,11 +48,17 @@ pickup current value. If slider is binded to value, first time you should pass over this value to make binding. It prevents from sudden value change on first control change - if output only on - mouse-up event if should draw active scale current value + show value (in + horizontal mode only) + + value position + + number of digits shown after decimal point + scale mode. + Linear or logarithmic. preset name for using with [ui.preset] @@ -54,12 +67,16 @@ element size (width, height pair) pin mode. if 1 - put element to the lowest level + mouse events output + mode. If on outputs @mouse_down, @mouse_up and @mouse_drag events knob color (list of red, green, blue values in 0-1 range) element background color (list of red, green, blue values in 0-1 range) border color (list of red, green, blue values in 0-1 range) + value text color (list of red, green, blue + values in 0-1 range) fontsize fontname @@ -67,6 +84,20 @@ weight font slant + + label text + label color in RGB format within 0-1 range, + for example: 0.2 0.4 0.1 + label position (1 - + inner, 0 - outer). + + label horizontal align + + label vertical align + + label snap side + label offset in + pixels sets slider value without output diff --git a/ceammc/ext/doc/ui.slider2d-help.pd b/ceammc/ext/doc/ui.slider2d-help.pd index 721d0575cd..a03f23b776 100644 --- a/ceammc/ext/doc/ui.slider2d-help.pd +++ b/ceammc/ext/doc/ui.slider2d-help.pd @@ -20,128 +20,151 @@ to activate; #X obj 20 452 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 457 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; -#X msg 110 492 @receive; -#X text 245 492 Get/Set receive source. Type: symbol.; -#X msg 110 521 @send; -#X text 245 521 Get/Set send destination. Type: symbol.; -#X msg 110 550 @show_grid; -#X text 245 550 Get/Set if show grid. Type: int. Default value: 0\. +#X msg 110 492 @mouse_events; +#X text 245 492 Get/Set mouse events output mode. If on outputs @mouse_down +\, @mouse_up and @mouse_drag events. Type: int. Default value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 592 @show_range; -#X text 245 592 Get/Set if show slider range. Type: int. Default value: +#X msg 110 549 @receive; +#X text 245 549 Get/Set receive source. Type: symbol.; +#X msg 110 578 @send; +#X text 245 578 Get/Set send destination. Type: symbol.; +#X msg 110 607 @show_grid; +#X text 245 607 Get/Set if show grid. Type: int. Default value: 0\. +Allowed values: 0 \, 1\.; +#X msg 110 649 @show_range; +#X text 245 649 Get/Set if show slider range. Type: int. Default value: 1\. Allowed values: 0 \, 1\.; -#X msg 110 634 @x_max; -#X text 245 634 Get/Set maximum x-value. Type: float. Default value: -1\.; -#X msg 110 663 @x_min; -#X text 245 663 Get/Set minimal x-value. Type: float. Default value: +#X msg 110 691 @x_left; +#X text 245 691 Get/Set leftmost x-value. Type: float. Default value: -1\.; -#X msg 110 692 @x_range; -#X text 245 692 (readonly) Get x-value range. Type: float.; -#X msg 110 721 @x_value; -#X text 245 721 Get/Set slider x-value. Type: float.; -#X msg 110 750 @y_max; -#X text 245 750 Get/Set maximum y-value. Type: float. Default value: +#X msg 110 720 @x_range; +#X text 245 720 (readonly) Get abs x-value range. Type: float.; +#X msg 110 749 @x_right; +#X text 245 749 Get/Set rightmost x-value. Type: float. Default value: 1\.; -#X msg 110 779 @y_min; -#X text 245 779 Get/Set minimal y-value. Type: float. Default value: +#X msg 110 778 @x_value; +#X text 245 778 Get/Set slider x-value. Type: float.; +#X msg 110 807 @y_bottom; +#X text 245 807 Get/Set bottom y-value. Type: float. Default value: -1\.; -#X msg 110 808 @y_range; -#X text 245 808 (readonly) Get y-value range. Type: float.; -#X msg 110 837 @y_value; -#X text 245 837 Get/Set slider y-value. Type: float.; -#X msg 110 866 @background_color; -#X text 245 866 Get/Set element background color (list of red \, green +#X msg 110 836 @y_range; +#X text 245 836 (readonly) Get abs y-value range. Type: float.; +#X msg 110 865 @y_top; +#X text 245 865 Get/Set top y-value. Type: float. Default value: 1\.; +#X msg 110 894 @y_value; +#X text 245 894 Get/Set slider y-value. Type: float.; +#X msg 110 923 @background_color; +#X text 245 923 Get/Set element background color (list of red \, green \, blue values in 0-1 range). Type: list.; -#X msg 110 908 @border_color; -#X text 245 908 Get/Set border color (list of red \, green \, blue +#X msg 110 965 @border_color; +#X text 245 965 Get/Set border color (list of red \, green \, blue values in 0-1 range). Type: list.; -#X msg 110 950 @fontname; -#X text 245 950 Get/Set fontname. Type: symbol.; -#X msg 110 979 @fontsize; -#X text 245 979 Get/Set fontsize. Type: int. Default value: 11\. Range: +#X msg 110 1007 @label_color; +#X text 245 1007 Get/Set label color in RGB format within 0-1 range +\, for example: 0.2 0.4 0.1\. Type: list.; +#X msg 110 1049 @label; +#X text 245 1049 Get/Set label text. Type: symbol.; +#X msg 110 1078 @label_align; +#X text 245 1078 Get/Set label horizontal align. Type: symbol. Default +value: left. Allowed values: left \, center \, right.; +#X msg 110 1120 @label_inner; +#X text 245 1120 Get/Set label position (1 - inner \, 0 - outer). Type: +int. Default value: 0\. Allowed values: 0 \, 1\.; +#X msg 110 1162 @label_margins; +#X text 245 1162 Get/Set label offset in pixels. Type: list. Default +value: 0 0\.; +#X msg 110 1204 @label_side; +#X text 245 1204 Get/Set label snap side. Type: symbol. Default value: +top. Allowed values: left \, top \, right \, bottom.; +#X msg 110 1246 @label_valign; +#X text 245 1246 Get/Set label vertical align. Type: symbol. Default +value: top. Allowed values: top \, center \, bottom.; +#X msg 110 1288 @fontname; +#X text 245 1288 Get/Set fontname. Type: symbol.; +#X msg 110 1317 @fontsize; +#X text 245 1317 Get/Set fontsize. Type: int. Default value: 11\. Range: 4\...11\.; -#X msg 110 1021 @fontslant; -#X text 245 1021 Get/Set font slant. Type: symbol. Default value: roman. +#X msg 110 1359 @fontslant; +#X text 245 1359 Get/Set font slant. Type: symbol. Default value: roman. Allowed values: roman \, italic.; -#X msg 110 1063 @fontweight; -#X text 245 1063 Get/Set font weight. Type: symbol. Default value: +#X msg 110 1401 @fontweight; +#X text 245 1401 Get/Set font weight. Type: symbol. Default value: normal. Allowed values: normal \, bold.; -#X msg 110 1105 @pinned; -#X text 245 1105 Get/Set pin mode. if 1 - put element to the lowest +#X msg 110 1443 @pinned; +#X text 245 1443 Get/Set pin mode. if 1 - put element to the lowest level. Type: int. Default value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 1147 @presetname; -#X text 245 1147 Get/Set preset name for using with [ui.preset]. Type: +#X msg 110 1485 @presetname; +#X text 245 1485 Get/Set preset name for using with [ui.preset]. Type: symbol.; -#X msg 110 1176 @size; -#X text 245 1176 Get/Set element size (width \, height pair). Type: +#X msg 110 1514 @size; +#X text 245 1514 Get/Set element size (width \, height pair). Type: list.; -#X obj 20 1215 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1220 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 1553 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1558 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 1255 clear; -#X text 245 1255 clears specified preset. Arguments are:; -#X obj 255 1278 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1278 IDX: preset index. Type: int.; -#X msg 110 1303 load; -#X text 245 1303 loads specified preset. Arguments are:; -#X obj 255 1326 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1326 IDX: preset index. Type: int.; -#X msg 110 1351 move; -#X text 245 1351 move slider by given offset. Arguments are:; -#X obj 255 1374 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1374 X: x-offset. Type: float.; -#X obj 255 1397 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1397 Y: y-offset. Type: float.; -#X msg 110 1422 pos; -#X text 245 1422 set UI element position. Arguments are:; -#X obj 255 1445 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1445 X: top left x-coord. Type: float.; -#X obj 255 1468 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1468 Y: top right y-coord. Type: float.; -#X msg 110 1493 set; -#X text 245 1493 sets slider position without output. Arguments are:; -#X obj 255 1516 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1516 X: x-position. Type: float.; -#X obj 255 1539 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1539 Y: y-position. Type: float.; -#X msg 110 1564 store; -#X text 245 1564 stores specified preset. Arguments are:; -#X obj 255 1587 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1587 IDX: preset index. Type: int.; -#X msg 110 1612 dump; -#X text 245 1612 dumps all object info to Pd console window.; -#X obj 20 1649 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1654 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +#X msg 110 1593 clear; +#X text 245 1593 clears specified preset. Arguments are:; +#X obj 255 1616 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1616 IDX: preset index. Type: int.; +#X msg 110 1641 load; +#X text 245 1641 loads specified preset. Arguments are:; +#X obj 255 1664 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1664 IDX: preset index. Type: int.; +#X msg 110 1689 move; +#X text 245 1689 move slider by given offset. Arguments are:; +#X obj 255 1712 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1712 X: x-offset. Type: float.; +#X obj 255 1735 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1735 Y: y-offset. Type: float.; +#X msg 110 1760 pos; +#X text 245 1760 set UI element position. Arguments are:; +#X obj 255 1783 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1783 X: top left x-coord. Type: float.; +#X obj 255 1806 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1806 Y: top right y-coord. Type: float.; +#X msg 110 1831 set; +#X text 245 1831 sets slider position without output. Arguments are:; +#X obj 255 1854 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1854 X: x-position. Type: float.; +#X obj 255 1877 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1877 Y: y-position. Type: float.; +#X msg 110 1902 store; +#X text 245 1902 stores specified preset. Arguments are:; +#X obj 255 1925 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1925 IDX: preset index. Type: int.; +#X msg 110 1950 dump; +#X text 245 1950 dumps all object info to Pd console window.; +#X obj 20 1987 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1992 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1655 1\.; -#X text 150 1655 *bang*; -#X text 245 1655 outputs slider position.; -#X text 150 1675 *list*; -#X text 245 1675 sets slider position and outputs it.; -#X obj 20 1705 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1710 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 1993 1\.; +#X text 150 1993 *bang*; +#X text 245 1993 outputs slider position.; +#X text 150 2013 *list*; +#X text 245 2013 sets slider position and outputs it.; +#X obj 20 2043 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 2048 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1711 1\.; -#X text 245 1711 list output of two values: X and Y.; +#X text 110 2049 1\.; +#X text 245 2049 list output of two values: X and Y.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title ui @url ceammc.ui-help.pd; -#X obj 1 1761 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1764 library: ceammc v0.7.1; -#X text 508 1776 see also:; -#X obj 582 1779 ui.link @background_color 0.78431 0.78431 0.78431 +#X obj 1 2099 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 2102 library: ceammc v0.8.0; +#X text 523 2114 see also:; +#X obj 597 2117 ui.link @background_color 0.78431 0.78431 0.78431 @title [ui.slider] @url ui.slider-help.pd; -#X obj 665 1779 ui.link @background_color 0.78431 0.78431 0.78431 -@title [ui.presets] @url ui.presets-help.pd; -#N canvas 10 1783 400 290 info 0; +#X obj 680 2117 ui.link @background_color 0.78431 0.78431 0.78431 +@title [ui.polar] @url ui.polar-help.pd; +#N canvas 10 2121 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 ui.slider2d; #X text 10 76 category:; @@ -151,7 +174,7 @@ list.; #X text 10 120 authors:; #X text 120 120 Alex Nadzharov \, Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 ui \, slider; #X text 10 186 website:; @@ -160,7 +183,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1783 pd info; +#X restore 10 2121 pd info; #X connect 6 0 9 0; #X connect 7 0 10 0; #X connect 8 0 10 0; diff --git a/ceammc/ext/doc/ui.slider2d.pddoc b/ceammc/ext/doc/ui.slider2d.pddoc index 8f3226a47c..8521f718fc 100644 --- a/ceammc/ext/doc/ui.slider2d.pddoc +++ b/ceammc/ext/doc/ui.slider2d.pddoc @@ -8,26 +8,26 @@ Serge Poltavsky 2D slider widget - GPL3 + GPL3 or later ceammc ui ui slider 0.1 ui.slider - ui.presets + ui.polar 2D sliders widget - minimal x-value - maximum x-value - minimal y-value - maximum y-value - x-value range - y-value range + leftmost x-value + rightmost x-value + top y-value + bottom y-value + abs x-value range + abs y-value range slider x-value slider y-value if show slider @@ -41,6 +41,8 @@ element size (width, height pair) pin mode. if 1 - put element to the lowest level + mouse events output + mode. If on outputs @mouse_down, @mouse_up and @mouse_drag events element background color (list of red, green, blue values in 0-1 range) border color (list of red, green, blue @@ -52,6 +54,20 @@ weight font slant + + label text + label color in RGB format within 0-1 range, + for example: 0.2 0.4 0.1 + label position (1 - + inner, 0 - outer). + + label horizontal align + + label vertical align + + label snap side + label offset in + pixels dumps all object info to Pd console window diff --git a/ceammc/ext/doc/ui.sliders-help.pd b/ceammc/ext/doc/ui.sliders-help.pd index 0183f9f1be..c43d81091e 100644 --- a/ceammc/ext/doc/ui.sliders-help.pd +++ b/ceammc/ext/doc/ui.sliders-help.pd @@ -6,190 +6,228 @@ -4096 0; #X obj 665 13 ui.link @background_color 0.39216 0.39216 0.39216 @title [ui.sliders] @url ui.sliders-help.pd; -#X obj 210 80 cnv 1 555 35 empty empty empty 17 7 0 10 -257983 -1 0; -#X text 215 80 Double click in edit mode changes multislider orientation; -#X msg 50 143 1 2 3 4 5; -#X msg 165 143 0 30; -#X floatatom 357 143 5 0 0 0 - - -; -#X obj 472 143 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; -#X obj 78 172 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 +#X msg 50 118 1 2 3 4 5; +#X msg 165 118 0 30; +#X floatatom 357 118 5 0 0 0 - - -; +#X obj 472 118 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; +#X obj 78 147 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 -1; -#X obj 165 172 list.seq; -#X msg 357 172 @count \$1; -#X msg 472 172 @auto_range \$1; -#X floatatom 184 201 5 0 0 0 - - -; -#X msg 510 215 select 4; -#X msg 184 230 set slider 4 \$1; -#X text 539 259 vertical slider; -#X obj 50 287 ui.sliders @max 10 @presetname sl-help @size 150 100; -#X obj 539 287 ui.sliders @size 100 150; -#X obj 50 403 ui.display @display_type 1 @size 150 18; -#X obj 20 459 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 464 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +#X obj 165 147 list.seq; +#X msg 357 147 @count \$1; +#X msg 472 147 @auto_range \$1; +#X floatatom 184 176 5 0 0 0 - - -; +#X msg 510 190 select 4; +#X msg 184 205 set slider 4 \$1; +#X text 539 234 vertical slider; +#X obj 50 262 ui.sliders @max 10 @presetname sl-help; +#X obj 539 262 ui.sliders @size 100 150; +#X obj 50 378 ui.display @display_type 1 @size 150 18; +#X obj 20 418 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 423 cnv 5 115 26 empty empty mouse_events: 4 10 0 14 -262144 -49933 0; -#X text 110 499 1\.; -#X text 150 499 float; -#X obj 246 500 cnv 1 17 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 499 N: number of sliders. Range: 1\...1024; -#X obj 20 529 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 534 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +#X text 110 458 Right-click; +#X text 285 458 opens popup menu for quick settings of values: fill +\, linup \, lindown and random.; +#X text 110 493 Mouse-drag; +#X text 285 493 change slider values.; +#X text 110 513 Double-click + ⌘; +#X text 285 513 changes slider orientation.; +#X text 61 513 [Edit]; +#X obj 20 543 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 548 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 -49933 0; -#X msg 110 569 @auto_range; -#X text 245 569 Get/Set if set numbers of sliders equal to input list +#X text 110 583 1\.; +#X text 150 583 float; +#X obj 246 584 cnv 1 17 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 583 N: number of sliders. Range: 1\...1024; +#X obj 20 613 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 618 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 653 @auto_range; +#X text 245 653 Get/Set if set numbers of sliders equal to input list length. Type: int. Default value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 611 @count; -#X text 245 611 Get/Set number of sliders. Type: int. Default value: +#X msg 110 695 @count; +#X text 245 695 Get/Set number of sliders. Type: int. Default value: 8\. Range: 1\...1024\.; -#X msg 110 653 @max; -#X text 245 653 Get/Set maximum value. Type: float. Default value: +#X msg 110 737 @max; +#X text 245 737 Get/Set maximum value. Type: float. Default value: 1\.; -#X msg 110 682 @min; -#X text 245 682 Get/Set minimal value. Type: float. Default value: +#X msg 110 766 @min; +#X text 245 766 Get/Set minimal value. Type: float. Default value: 0\.; -#X msg 110 711 @range; -#X text 245 711 (readonly) Get value range. Type: float. Default value: -1\.; -#X msg 110 740 @receive; -#X text 245 740 Get/Set receive source. Type: symbol.; -#X msg 110 769 @send; -#X text 245 769 Get/Set send destination. Type: symbol.; -#X msg 110 798 @show_range; -#X text 245 798 Get/Set if show slider range. Type: int. Default value: +#X msg 110 795 @mouse_events; +#X text 245 795 Get/Set mouse events output mode. If on outputs @mouse_down +\, @mouse_up and @mouse_drag events. Type: int. Default value: 0\. +Allowed values: 0 \, 1\.; +#X msg 110 852 @range; +#X text 245 852 (readonly) Get value range. Type: float.; +#X msg 110 881 @receive; +#X text 245 881 Get/Set receive source. Type: symbol.; +#X msg 110 910 @send; +#X text 245 910 Get/Set send destination. Type: symbol.; +#X msg 110 939 @show_range; +#X text 245 939 Get/Set if show slider range. Type: int. Default value: 1\. Allowed values: 0 \, 1\.; -#X msg 110 840 @value; -#X text 245 840 (readonly) Get sliders value. Type: list.; -#X msg 110 869 @background_color; -#X text 245 869 Get/Set element background color (list of red \, green +#X msg 110 981 @value; +#X text 245 981 (readonly) Get sliders value. Type: list.; +#X msg 110 1010 @background_color; +#X text 245 1010 Get/Set element background color (list of red \, green \, blue values in 0-1 range). Type: list.; -#X msg 110 911 @border_color; -#X text 245 911 Get/Set border color (list of red \, green \, blue +#X msg 110 1052 @border_color; +#X text 245 1052 Get/Set border color (list of red \, green \, blue values in 0-1 range). Type: list.; -#X msg 110 953 @select_color; -#X text 245 953 Get/Set selection color (list of red \, green \, blue +#X msg 110 1094 @label_color; +#X text 245 1094 Get/Set label color in RGB format within 0-1 range +\, for example: 0.2 0.4 0.1\. Type: list.; +#X msg 110 1136 @select_color; +#X text 245 1136 Get/Set selection color (list of red \, green \, blue values in 0-1 range). Type: list.; -#X msg 110 995 @slider_color; -#X text 245 995 Get/Set slider color (list of red \, green \, blue +#X msg 110 1178 @slider_color; +#X text 245 1178 Get/Set slider color (list of red \, green \, blue values in 0-1 range). Type: list.; -#X msg 110 1037 @fontname; -#X text 245 1037 Get/Set fontname. Type: symbol.; -#X msg 110 1066 @fontsize; -#X text 245 1066 Get/Set fontsize. Type: int. Default value: 11\. Range: +#X msg 110 1220 @label; +#X text 245 1220 Get/Set label text. Type: symbol.; +#X msg 110 1249 @label_align; +#X text 245 1249 Get/Set label horizontal align. Type: symbol. Default +value: left. Allowed values: left \, center \, right.; +#X msg 110 1291 @label_inner; +#X text 245 1291 Get/Set label position (1 - inner \, 0 - outer). Type: +int. Default value: 0\. Allowed values: 0 \, 1\.; +#X msg 110 1333 @label_margins; +#X text 245 1333 Get/Set label offset in pixels. Type: list. Default +value: 0 0\.; +#X msg 110 1375 @label_side; +#X text 245 1375 Get/Set label snap side. Type: symbol. Default value: +top. Allowed values: left \, top \, right \, bottom.; +#X msg 110 1417 @label_valign; +#X text 245 1417 Get/Set label vertical align. Type: symbol. Default +value: top. Allowed values: top \, center \, bottom.; +#X msg 110 1459 @fontname; +#X text 245 1459 Get/Set fontname. Type: symbol.; +#X msg 110 1488 @fontsize; +#X text 245 1488 Get/Set fontsize. Type: int. Default value: 11\. Range: 4\...11\.; -#X msg 110 1108 @fontslant; -#X text 245 1108 Get/Set font slant. Type: symbol. Default value: roman. +#X msg 110 1530 @fontslant; +#X text 245 1530 Get/Set font slant. Type: symbol. Default value: roman. Allowed values: roman \, italic.; -#X msg 110 1150 @fontweight; -#X text 245 1150 Get/Set font weight. Type: symbol. Default value: +#X msg 110 1572 @fontweight; +#X text 245 1572 Get/Set font weight. Type: symbol. Default value: normal. Allowed values: normal \, bold.; -#X msg 110 1192 @pinned; -#X text 245 1192 Get/Set pin mode. if 1 - put element to the lowest +#X msg 110 1614 @pinned; +#X text 245 1614 Get/Set pin mode. if 1 - put element to the lowest level. Type: int. Default value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 1234 @presetname; -#X text 245 1234 Get/Set preset name for using with [ui.preset]. Type: +#X msg 110 1656 @presetname; +#X text 245 1656 Get/Set preset name for using with [ui.preset]. Type: symbol.; -#X msg 110 1263 @size; -#X text 245 1263 Get/Set element size (width \, height pair). Type: +#X msg 110 1685 @size; +#X text 245 1685 Get/Set element size (width \, height pair). Type: list.; -#X obj 20 1302 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1307 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 1724 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1729 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 1342 clear; -#X text 245 1342 clears specified preset. Arguments are:; -#X obj 255 1365 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1365 IDX: preset index. Type: int.; -#X msg 110 1390 fill; -#X text 245 1390 fill sliders value with specified value without output.; -#X msg 110 1417 get slider N; -#X text 245 1417 get specified slider value. Arguments are:; -#X obj 255 1440 cnv 1 14 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1440 N: slider position \, starting from 0\. Type: int. +#X msg 110 1764 clear; +#X text 245 1764 clears specified preset. Arguments are:; +#X obj 255 1787 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1787 IDX: preset index. Type: int.; +#X msg 110 1812 fill; +#X text 245 1812 fill sliders value with specified value without output.; +#X msg 110 1839 get slider N; +#X text 245 1839 get specified slider value. Arguments are:; +#X obj 255 1862 cnv 1 14 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1862 N: slider position \, starting from 0\. Type: int. Min value: 0\.; -#X msg 110 1480 load; -#X text 245 1480 loads specified preset. Arguments are:; -#X obj 255 1503 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1503 IDX: preset index. Type: int.; -#X msg 110 1528 pos; -#X text 245 1528 set UI element position. Arguments are:; -#X obj 255 1551 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1551 X: top left x-coord. Type: float.; -#X obj 255 1574 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1574 Y: top right y-coord. Type: float.; -#X msg 110 1599 select; -#X text 245 1599 draws specified slider with select color. Arguments +#X msg 110 1902 lindown; +#X text 245 1902 fill sliders with decreasing values without output.; +#X msg 110 1929 linup; +#X text 245 1929 fill sliders with increasing values without output.; +#X msg 110 1956 load; +#X text 245 1956 loads specified preset. Arguments are:; +#X obj 255 1979 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1979 IDX: preset index. Type: int.; +#X msg 110 2004 pos; +#X text 245 2004 set UI element position. Arguments are:; +#X obj 255 2027 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2027 X: top left x-coord. Type: float.; +#X obj 255 2050 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2050 Y: top right y-coord. Type: float.; +#X msg 110 2075 random; +#X text 245 2075 fill sliders with random values without output.; +#X msg 110 2102 select; +#X text 245 2102 draws specified slider with select color. Arguments are:; -#X obj 255 1622 cnv 1 14 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1622 N: slider index \, starting from 0\. Type: int. Min +#X obj 255 2125 cnv 1 14 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2125 N: slider index \, starting from 0\. Type: int. Min value: 0\.; -#X msg 110 1647 set; -#X text 245 1647 sets sliders values without output. Arguments are:; -#X obj 255 1670 cnv 1 62 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1670 [VALUES]: slider values. Type: list.; -#X msg 110 1695 set slider N V; -#X text 245 1695 sets specified slider value. Arguments are:; -#X obj 255 1718 cnv 1 14 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1718 N: slider position \, starting from 0\. Type: int. +#X msg 110 2150 set; +#X text 245 2150 sets sliders values without output. Arguments are:; +#X obj 255 2173 cnv 1 62 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2173 [VALUES]: slider values. Type: list.; +#X msg 110 2198 set slider N V; +#X text 245 2198 sets specified slider value. Arguments are:; +#X obj 255 2221 cnv 1 14 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2221 N: slider position \, starting from 0\. Type: int. Min value: 0\.; -#X obj 255 1756 cnv 1 14 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1756 V: slider value. Type: float.; -#X msg 110 1781 store; -#X text 245 1781 stores specified preset. Arguments are:; -#X obj 255 1804 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1804 IDX: preset index. Type: int.; -#X msg 110 1829 *; -#X text 245 1829 multiply each slider without output. Arguments are:; -#X obj 255 1852 cnv 1 14 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1852 V: multiplied value. Type: float.; -#X msg 110 1877 +; -#X text 245 1877 add value to every slider without output. Arguments +#X obj 255 2259 cnv 1 14 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2259 V: slider value. Type: float.; +#X msg 110 2284 store; +#X text 245 2284 stores specified preset. Arguments are:; +#X obj 255 2307 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2307 IDX: preset index. Type: int.; +#X msg 110 2332 *; +#X text 245 2332 multiply each slider without output. Arguments are:; +#X obj 255 2355 cnv 1 14 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2355 V: multiplied value. Type: float.; +#X msg 110 2380 +; +#X text 245 2380 add value to every slider without output. Arguments are:; -#X obj 255 1900 cnv 1 14 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1900 V: added value. Type: float.; -#X msg 110 1925 ++; -#X text 245 1925 increment all sliders without output.; -#X msg 110 1952 -; -#X text 245 1952 subtract value from every slider without output. Arguments +#X obj 255 2403 cnv 1 14 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2403 V: added value. Type: float.; +#X msg 110 2428 ++; +#X text 245 2428 increment all sliders without output.; +#X msg 110 2455 -; +#X text 245 2455 subtract value from every slider without output. Arguments are:; -#X obj 255 1990 cnv 1 14 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1990 V: subtracted value. Type: float.; -#X msg 110 2015 --; -#X text 245 2015 decrement all sliders without output.; -#X msg 110 2042 /; -#X text 245 2042 divide each slider without output. Arguments are:; -#X obj 255 2065 cnv 1 14 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2065 V: denominator value. Type: float.; -#X msg 110 2090 dump; -#X text 245 2090 dumps all object info to Pd console window.; -#X obj 20 2127 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 2132 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +#X obj 255 2493 cnv 1 14 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2493 V: subtracted value. Type: float.; +#X msg 110 2518 --; +#X text 245 2518 decrement all sliders without output.; +#X msg 110 2545 /; +#X text 245 2545 divide each slider without output. Arguments are:; +#X obj 255 2568 cnv 1 14 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2568 V: denominator value. Type: float.; +#X msg 110 2593 dump; +#X text 245 2593 dumps all object info to Pd console window.; +#X obj 20 2630 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 2635 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 2133 1\.; -#X text 150 2133 *bang*; -#X text 245 2133 outputs sliders position.; -#X text 150 2153 *list*; -#X text 245 2153 sets slider values and outputs it.; -#X obj 20 2183 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 2188 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 2636 1\.; +#X text 150 2636 *bang*; +#X text 245 2636 outputs sliders position.; +#X text 150 2656 *list*; +#X text 245 2656 sets slider values and output them.; +#X obj 20 2686 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 2691 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 2189 1\.; -#X text 245 2189 list of slider values.; +#X text 110 2692 1\.; +#X text 245 2692 list of slider values.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title ui @url ceammc.ui-help.pd; -#X obj 1 2239 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 2242 library: ceammc v0.7.1; -#X text 508 2254 see also:; -#X obj 582 2257 ui.link @background_color 0.78431 0.78431 0.78431 +#X obj 1 2742 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 2745 library: ceammc v0.8.0; +#X text 515 2757 see also:; +#X obj 589 2760 ui.link @background_color 0.78431 0.78431 0.78431 @title [ui.slider] @url ui.slider-help.pd; -#X obj 665 2257 ui.link @background_color 0.78431 0.78431 0.78431 -@title [ui.presets] @url ui.presets-help.pd; -#N canvas 10 2261 400 290 info 0; +#X obj 672 2760 ui.link @background_color 0.78431 0.78431 0.78431 +@title [ui.preset] @url ui.preset-help.pd; +#N canvas 10 2764 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 ui.sliders; #X text 10 76 category:; @@ -199,7 +237,7 @@ are:; #X text 10 120 authors:; #X text 120 120 Alex Nadzharov \, Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 ui \, slider; #X text 10 186 website:; @@ -208,16 +246,16 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 2261 pd info; +#X restore 10 2764 pd info; +#X connect 5 0 9 0; +#X connect 6 0 10 0; #X connect 7 0 11 0; -#X connect 8 0 12 0; -#X connect 9 0 13 0; +#X connect 12 0 14 0; +#X connect 4 0 16 0; +#X connect 8 0 16 0; +#X connect 9 0 16 0; #X connect 14 0 16 0; -#X connect 6 0 18 0; -#X connect 10 0 18 0; -#X connect 11 0 18 0; -#X connect 16 0 18 0; -#X connect 12 0 18 0; -#X connect 13 0 18 0; -#X connect 15 0 18 0; -#X connect 18 0 20 0; \ No newline at end of file +#X connect 10 0 16 0; +#X connect 11 0 16 0; +#X connect 13 0 16 0; +#X connect 16 0 18 0; \ No newline at end of file diff --git a/ceammc/ext/doc/ui.sliders.pddoc b/ceammc/ext/doc/ui.sliders.pddoc index ce788a93a9..39b231ee45 100644 --- a/ceammc/ext/doc/ui.sliders.pddoc +++ b/ceammc/ext/doc/ui.sliders.pddoc @@ -8,19 +8,23 @@ Serge Poltavsky Multiple slider widget - GPL3 + GPL3 or later ceammc ui ui slider 0.1 ui.slider - ui.presets + ui.preset - - Double click in edit mode changes multislider orientation - + + changes slider + orientation + opens popup menu for quick settings of + values: fill, linup, lindown and random + change slider values + number of sliders @@ -30,7 +34,7 @@ sliders minimal value maximum value - value range + value range sliders value if set numbers of sliders equal to input list length @@ -44,6 +48,8 @@ element size (width, height pair) pin mode. if 1 - put element to the lowest level + mouse events output + mode. If on outputs @mouse_down, @mouse_up and @mouse_drag events slider color (list of red, green, blue values in 0-1 range) selection color (list of red, green, blue @@ -59,12 +65,29 @@ weight font slant + + label text + label color in RGB format within 0-1 range, + for example: 0.2 0.4 0.1 + label position (1 - + inner, 0 - outer). + + label horizontal align + + label vertical align + + label snap side + label offset in + pixels dumps all object info to Pd console window draws specified slider with select color slider index, starting from 0. + fill sliders with random values without output + fill sliders with increasing values without output + fill sliders with decreasing values without output fill sliders value with specified value without output sets sliders values without output slider values @@ -100,7 +123,7 @@ outputs sliders position - sets slider values and outputs it + sets slider values and output them @@ -119,7 +142,7 @@ | | | | | | | | | | | | | | /*vertical slider*/ | | | | | | | -[ui.sliders @max=10 @presetname=sl-help ] [ui.sliders @size=100x150] +[ui.sliders @max 10 @presetname sl-help ] [ui.sliders @size 100 150] | | | diff --git a/ceammc/ext/doc/ui.spectroscope~-help.pd b/ceammc/ext/doc/ui.spectroscope~-help.pd index d851bb89a1..2573247c0a 100644 --- a/ceammc/ext/doc/ui.spectroscope~-help.pd +++ b/ceammc/ext/doc/ui.spectroscope~-help.pd @@ -85,7 +85,7 @@ list.; #X text 115 45 ::; #X obj 131 48 ui.link @title ui @url ceammc.ui-help.pd; #X obj 1 1197 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1200 library: ceammc v0.7.1; +#X text 10 1200 library: ceammc v0.8.0; #X text 598 1212 see also:; #X obj 672 1215 ui.link @background_color 0.78431 0.78431 0.78431 @title [ui.scope~] @url ui.scope~-help.pd; @@ -94,7 +94,7 @@ list.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 ui.spectroscope~; #X text 10 76 category:; @@ -104,7 +104,7 @@ list.; #X text 10 120 authors:; #X text 120 120 Alex Nadzharov \, Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 ui \, spectroscope; #X text 10 186 website:; diff --git a/ceammc/ext/doc/ui.spectroscope~.pddoc b/ceammc/ext/doc/ui.spectroscope~.pddoc index a9e3265a34..b9e1133118 100644 --- a/ceammc/ext/doc/ui.spectroscope~.pddoc +++ b/ceammc/ext/doc/ui.spectroscope~.pddoc @@ -8,7 +8,7 @@ Serge Poltavsky Spectroscope GUI object - GPL3 + GPL3 or later ceammc ui ui spectroscope diff --git a/ceammc/ext/doc/ui.tab-help.pd b/ceammc/ext/doc/ui.tab-help.pd index 071931feb1..5a230f5db6 100644 --- a/ceammc/ext/doc/ui.tab-help.pd +++ b/ceammc/ext/doc/ui.tab-help.pd @@ -17,155 +17,154 @@ #X obj 395 176 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; #X msg 395 205 @toggle \$1; #X obj 50 234 ui.tab @items sin tri @size 350 15; -#X obj 50 262 prop-> @title; -#X obj 50 291 ui.d; -#X obj 126 320 ui.d; -#X obj 20 359 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 364 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +#X obj 50 262 ui.d; +#X obj 20 301 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 306 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; -#X msg 110 399 @count; -#X text 245 399 (readonly) Get number of tabs. Type: int. Default value: +#X msg 110 341 @count; +#X text 245 341 (readonly) Get number of tabs. Type: int. Default value: 0\.; -#X msg 110 428 @current; -#X text 245 428 (readonly) Get current selected index (in switch mode). +#X msg 110 370 @current; +#X text 245 370 (readonly) Get current selected index (in switch mode). Type: int. Default value: 0\.; -#X msg 110 470 @items; -#X text 245 470 Get/Set number of tabs. Type: int. Default value: 1\. +#X msg 110 412 @items; +#X text 245 412 Get/Set number of tabs. Type: int. Default value: 1\. Range: 1\...256\.; -#X msg 110 512 @orientation; -#X text 245 512 Get/Set tab orientation. 1 is vertical \, 0 is horizontal. +#X msg 110 454 @orientation; +#X text 245 454 Get/Set tab orientation. 1 is vertical \, 0 is horizontal. Type: int. Default value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 554 @receive; -#X text 245 554 Get/Set receive source. Type: symbol.; -#X msg 110 583 @selected; -#X text 245 583 (readonly) Get list of selected items (in toggle mode). +#X msg 110 496 @receive; +#X text 245 496 Get/Set receive source. Type: symbol.; +#X msg 110 525 @selected; +#X text 245 525 (readonly) Get list of selected items (in toggle mode). Type: list.; -#X msg 110 625 @send; -#X text 245 625 Get/Set send destination. Type: symbol.; -#X msg 110 654 @toggle; -#X text 245 654 Get/Set toggle mode. In toggle moe multiple selection +#X msg 110 567 @send; +#X text 245 567 Get/Set send destination. Type: symbol.; +#X msg 110 596 @toggle; +#X text 245 596 Get/Set toggle mode. In toggle moe multiple selection is possible. Type: int. Default value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 711 @active_color; -#X text 245 711 Get/Set active color (list of red \, green \, blue +#X msg 110 653 @active_color; +#X text 245 653 Get/Set active color (list of red \, green \, blue values in 0-1 range). Type: list.; -#X msg 110 753 @background_color; -#X text 245 753 Get/Set element background color (list of red \, green +#X msg 110 695 @background_color; +#X text 245 695 Get/Set element background color (list of red \, green \, blue values in 0-1 range). Type: list.; -#X msg 110 795 @border_color; -#X text 245 795 Get/Set border color (list of red \, green \, blue +#X msg 110 737 @border_color; +#X text 245 737 Get/Set border color (list of red \, green \, blue values in 0-1 range). Type: list.; -#X msg 110 837 @hover_color; -#X text 245 837 Get/Set hover color (list of red \, green \, blue values +#X msg 110 779 @hover_color; +#X text 245 779 Get/Set hover color (list of red \, green \, blue values in 0-1 range). Type: list.; -#X msg 110 879 @text_color; -#X text 245 879 Get/Set text color (list of red \, green \, blue values +#X msg 110 821 @text_color; +#X text 245 821 Get/Set text color (list of red \, green \, blue values in 0-1 range). Type: list.; -#X msg 110 921 @fontname; -#X text 245 921 Get/Set fontname. Type: symbol.; -#X msg 110 950 @fontsize; -#X text 245 950 Get/Set fontsize. Type: int. Default value: 11\. Range: +#X msg 110 863 @fontname; +#X text 245 863 Get/Set fontname. Type: symbol.; +#X msg 110 892 @fontsize; +#X text 245 892 Get/Set fontsize. Type: int. Default value: 11\. Range: 4\...11\.; -#X msg 110 992 @fontslant; -#X text 245 992 Get/Set font slant. Type: symbol. Default value: roman. +#X msg 110 934 @fontslant; +#X text 245 934 Get/Set font slant. Type: symbol. Default value: roman. Allowed values: roman \, italic.; -#X msg 110 1034 @fontweight; -#X text 245 1034 Get/Set font weight. Type: symbol. Default value: -normal. Allowed values: normal \, bold.; -#X msg 110 1076 @pinned; -#X text 245 1076 Get/Set pin mode. if 1 - put element to the lowest +#X msg 110 976 @fontweight; +#X text 245 976 Get/Set font weight. Type: symbol. Default value: normal. +Allowed values: normal \, bold.; +#X msg 110 1018 @pinned; +#X text 245 1018 Get/Set pin mode. if 1 - put element to the lowest level. Type: int. Default value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 1118 @presetname; -#X text 245 1118 Get/Set preset name for using with [ui.preset]. Type: +#X msg 110 1060 @presetname; +#X text 245 1060 Get/Set preset name for using with [ui.preset]. Type: symbol.; -#X msg 110 1147 @size; -#X text 245 1147 Get/Set element size (width \, height pair). Type: +#X msg 110 1089 @size; +#X text 245 1089 Get/Set element size (width \, height pair). Type: list.; -#X obj 20 1186 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1191 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 1128 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1133 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 1226 append; -#X text 245 1226 appends new tab item. Arguments are:; -#X obj 255 1249 cnv 1 45 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1249 ATOMS: item name. Type: list.; -#X msg 110 1274 clear; -#X text 245 1274 clears all tab menu.; -#X msg 110 1301 clear; -#X text 245 1301 clears specified preset. Arguments are:; -#X obj 255 1324 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1324 IDX: preset index. Type: int.; -#X msg 110 1349 delete; -#X text 245 1349 removes item from tab. Arguments are:; -#X obj 255 1372 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1372 IDX: removed item index. Type: int. Min value: 0\.; -#X msg 110 1397 insert; -#X text 245 1397 inserts new tab item before specified position. Arguments +#X msg 110 1168 append; +#X text 245 1168 appends new tab item. Arguments are:; +#X obj 255 1191 cnv 1 45 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1191 ATOMS: item name. Type: list.; +#X msg 110 1216 clear; +#X text 245 1216 clears all tab menu.; +#X msg 110 1243 clear; +#X text 245 1243 clears specified preset. Arguments are:; +#X obj 255 1266 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1266 IDX: preset index. Type: int.; +#X msg 110 1291 delete; +#X text 245 1291 removes item from tab. Arguments are:; +#X obj 255 1314 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1314 IDX: removed item index. Type: int. Min value: 0\.; +#X msg 110 1339 insert; +#X text 245 1339 inserts new tab item before specified position. Arguments are:; -#X obj 255 1435 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1435 IDX: item position. Type: int. Min value: 0\.; -#X obj 255 1458 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1458 ATOM: item name. Type: atom.; -#X msg 110 1483 load; -#X text 245 1483 loads specified preset. Arguments are:; -#X obj 255 1506 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1506 IDX: preset index. Type: int.; -#X msg 110 1531 pos; -#X text 245 1531 set UI element position. Arguments are:; -#X obj 255 1554 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1554 X: top left x-coord. Type: float.; -#X obj 255 1577 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1577 Y: top right y-coord. Type: float.; -#X msg 110 1602 select; -#X text 245 1602 selects specified item in tab. Arguments are:; -#X obj 255 1625 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1625 IDX: item index. Type: int. Min value: 0\.; -#X msg 110 1650 set; -#X text 245 1650 silently sets tab state. Arguments are:; -#X obj 255 1673 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1673 IDX: item index. Type: int. Min value: 0\.; -#X msg 110 1698 set_item; -#X text 245 1698 renames tab item. Arguments are:; -#X obj 255 1721 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1721 IDX: item index. Type: int. Min value: 0\.; -#X obj 255 1744 cnv 1 45 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1744 ATOMS: item name. Type: list.; -#X msg 110 1769 store; -#X text 245 1769 stores specified preset. Arguments are:; -#X obj 255 1792 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1792 IDX: preset index. Type: int.; -#X obj 20 1827 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1832 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +#X obj 255 1377 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1377 IDX: item position. Type: int. Min value: 0\.; +#X obj 255 1400 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1400 ATOM: item name. Type: atom.; +#X msg 110 1425 load; +#X text 245 1425 loads specified preset. Arguments are:; +#X obj 255 1448 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1448 IDX: preset index. Type: int.; +#X msg 110 1473 pos; +#X text 245 1473 set UI element position. Arguments are:; +#X obj 255 1496 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1496 X: top left x-coord. Type: float.; +#X obj 255 1519 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1519 Y: top right y-coord. Type: float.; +#X msg 110 1544 select; +#X text 245 1544 selects specified item in tab. Arguments are:; +#X obj 255 1567 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1567 IDX: item index. Type: int. Min value: 0\.; +#X msg 110 1592 set; +#X text 245 1592 silently sets tab state. Arguments are:; +#X obj 255 1615 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1615 IDX: item index. Type: int. Min value: 0\.; +#X msg 110 1640 set_item; +#X text 245 1640 renames tab item. Arguments are:; +#X obj 255 1663 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1663 IDX: item index. Type: int. Min value: 0\.; +#X obj 255 1686 cnv 1 45 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1686 ATOMS: item name. Type: list.; +#X msg 110 1711 store; +#X text 245 1711 stores specified preset. Arguments are:; +#X obj 255 1734 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1734 IDX: preset index. Type: int.; +#X obj 20 1769 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1774 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1833 1\.; -#X text 150 1833 *bang*; -#X text 245 1833 in single mode outputs @title TAB and index of selected -tab. In toggle mode outputs current state like: @selected 0 1 0 1 0 -etc. and list of two values: [CHANGED_IDX CHANGED_VALUE].; -#X text 150 1883 *float*; -#X text 245 1883 onle in single mode: change tab select tab by index -and output tab @title and new index.; -#X text 150 1918 *any*; -#X text 245 1918 selects item equal to given.; -#X obj 20 1948 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1953 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 1775 1\.; +#X text 150 1775 *bang*; +#X text 245 1775 in single mode outputs tab state as list: INDEX TAB_NAME. +In toggle mode outputs current state like: @selected 0 1 0 1 0 etc. +and list of two values: [CHANGED_IDX CHANGED_VALUE].; +#X text 150 1825 *float*; +#X text 245 1825 only in single mode: change tab by index and output +list: INDEX TAB_NAME.; +#X text 150 1860 *any*; +#X text 245 1860 selects item equal to given and output list: INDEX +TAB_NAME.; +#X obj 20 1890 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1895 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1954 1\.; -#X text 245 1954 output.; +#X text 110 1896 1\.; +#X text 245 1896 output.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title ui @url ceammc.ui-help.pd; -#X obj 1 2004 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 2007 library: ceammc v0.7.1; -#X text 613 2019 see also:; -#X obj 687 2022 ui.link @background_color 0.78431 0.78431 0.78431 +#X obj 1 1946 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1949 library: ceammc v0.8.0; +#X text 613 1961 see also:; +#X obj 687 1964 ui.link @background_color 0.78431 0.78431 0.78431 @title [ui.menu] @url ui.menu-help.pd; -#N canvas 10 2026 400 290 info 0; +#N canvas 10 1968 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 ui.tab; #X text 10 76 category:; @@ -175,7 +174,7 @@ and output tab @title and new index.; #X text 10 120 authors:; #X text 120 120 Pierre Guillot \, Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 ui \, tab; #X text 10 186 website:; @@ -184,7 +183,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 2026 pd info; +#X restore 10 1968 pd info; #X connect 12 0 13 0; #X connect 4 0 14 0; #X connect 6 0 14 0; @@ -195,6 +194,4 @@ https://github.com/uliss/pure-data; #X connect 10 0 14 0; #X connect 11 0 14 0; #X connect 13 0 14 0; -#X connect 14 0 15 0; -#X connect 15 0 16 0; -#X connect 15 1 17 0; \ No newline at end of file +#X connect 14 0 15 0; \ No newline at end of file diff --git a/ceammc/ext/doc/ui.tab.pddoc b/ceammc/ext/doc/ui.tab.pddoc index eb399c2734..99a3f7920d 100644 --- a/ceammc/ext/doc/ui.tab.pddoc +++ b/ceammc/ext/doc/ui.tab.pddoc @@ -8,7 +8,7 @@ Serge Poltavsky displays a list of text buttons or text toggles - GPL3 + GPL3 or later ceammc ui ui tab @@ -87,12 +87,12 @@ - in single mode outputs @title TAB and index of selected tab. In + in single mode outputs tab state as list: INDEX TAB_NAME. In toggle mode outputs current state like: @selected 0 1 0 1 0 etc. and list of two values: [CHANGED_IDX CHANGED_VALUE] - onle in single mode: change tab select tab by index and output - tab @title and new index - selects item equal to given + only in single mode: change tab by index and output list: INDEX + TAB_NAME + selects item equal to given and output list: INDEX TAB_NAME @@ -111,11 +111,7 @@ | | | | | | | | | [ui.tab @items sin tri @size 350 15] | -[prop-> @title] -| ^| -[ui.d] | - | - [ui.d] +[ui.d] ]]> diff --git a/ceammc/ext/doc/ui.toggle-help.pd b/ceammc/ext/doc/ui.toggle-help.pd index 4a293af13e..5d8418a915 100644 --- a/ceammc/ext/doc/ui.toggle-help.pd +++ b/ceammc/ext/doc/ui.toggle-help.pd @@ -104,7 +104,7 @@ list.; #X text 115 45 ::; #X obj 131 48 ui.link @title ui @url ceammc.ui-help.pd; #X obj 1 1303 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1306 library: ceammc v0.7.1; +#X text 10 1306 library: ceammc v0.8.0; #X text 613 1318 see also:; #X obj 687 1321 ui.link @background_color 0.78431 0.78431 0.78431 @title [ui.bang] @url ui.bang-help.pd; @@ -113,7 +113,7 @@ list.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 ui.toggle; #X text 10 76 category:; @@ -123,7 +123,7 @@ list.; #X text 10 120 authors:; #X text 120 120 Pierre Guillot \, Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 ui \, toggle; #X text 10 186 website:; diff --git a/ceammc/ext/doc/ui.toggle.pddoc b/ceammc/ext/doc/ui.toggle.pddoc index ca878ed9c2..a75317f1fa 100644 --- a/ceammc/ext/doc/ui.toggle.pddoc +++ b/ceammc/ext/doc/ui.toggle.pddoc @@ -8,7 +8,7 @@ Serge Poltavsky modern toggle widget - GPL3 + GPL3 or later ceammc ui ui toggle diff --git a/ceammc/ext/doc/vline2env-help.pd b/ceammc/ext/doc/vline2env-help.pd index 2d84f6c205..cd23531d74 100644 --- a/ceammc/ext/doc/vline2env-help.pd +++ b/ceammc/ext/doc/vline2env-help.pd @@ -11,36 +11,36 @@ #X msg 270 118 0 \, 1 300 \, 0 500 300; #X msg 290 147 0 \, 1 300 \, 0 500 500; #X obj 50 205 vline2env; -#X obj 50 234 ui.env @size 200 150; -#X obj 20 406 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 411 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X obj 50 234 ui.env; +#X obj 20 273 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 278 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 412 1\.; -#X text 150 412 *bang*; -#X text 245 412 output current envelope.; -#X text 150 432 *list*; -#X text 245 432 vline message.; -#X obj 20 462 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 467 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 279 1\.; +#X text 150 279 *bang*; +#X text 245 279 output current envelope.; +#X text 150 299 *list*; +#X text 245 299 vline message.; +#X obj 20 329 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 334 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 468 1\.; -#X text 245 468 envelope output.; +#X text 110 335 1\.; +#X text 245 335 envelope output.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title env @url ceammc.env-help.pd; -#X obj 1 518 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 521 library: ceammc v0.7.1; -#X text 505 533 see also:; -#X obj 579 533 env->vline; -#X obj 667 533 env->array; -#N canvas 10 540 400 290 info 0; +#X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 508 library: ceammc v0.8.0; +#X text 505 520 see also:; +#X obj 579 520 env->vline; +#X obj 667 520 env->array; +#N canvas 10 527 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 vline2env; #X text 10 76 category:; @@ -50,7 +50,7 @@ #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 envelope \, vline; #X text 10 186 website:; @@ -59,7 +59,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 540 pd info; +#X restore 10 527 pd info; #X connect 5 0 9 0; #X connect 6 0 9 0; #X connect 7 0 9 0; diff --git a/ceammc/ext/doc/vline2env.pddoc b/ceammc/ext/doc/vline2env.pddoc index 31a657b521..69ed19beca 100644 --- a/ceammc/ext/doc/vline2env.pddoc +++ b/ceammc/ext/doc/vline2env.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky Converts vline messages to env - GPL3 + GPL3 or later ceammc env envelope vline diff --git a/ceammc/ext/doc/window-help.pd b/ceammc/ext/doc/window-help.pd index e001af41f2..ddc30defa6 100644 --- a/ceammc/ext/doc/window-help.pd +++ b/ceammc/ext/doc/window-help.pd @@ -108,13 +108,13 @@ Output window value at given index.; #X text 115 45 ::; #X obj 131 48 ui.link @title base @url ceammc.base-help.pd; #X obj 1 1162 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1165 library: ceammc v0.7.1; +#X text 10 1165 library: ceammc v0.8.0; #N canvas 10 1184 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 window; #X text 10 76 category:; @@ -124,7 +124,7 @@ Output window value at given index.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 window; #X text 10 186 website:; diff --git a/ceammc/ext/doc/window.pddoc b/ceammc/ext/doc/window.pddoc index 0ff132b01f..1b365cb0fb 100644 --- a/ceammc/ext/doc/window.pddoc +++ b/ceammc/ext/doc/window.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky returns window value by given window position - GPL3 + GPL3 or later ceammc base window diff --git a/ceammc/ext/doc/xdac~-help.pd b/ceammc/ext/doc/xdac~-help.pd new file mode 100644 index 0000000000..7bb23f9282 --- /dev/null +++ b/ceammc/ext/doc/xdac~-help.pd @@ -0,0 +1,67 @@ +#N canvas 0 0 785 555 12; +#X declare -lib ceammc; +#X obj 576 50 cnv 1 189 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 576 50 dac~ with channel ranges; +#X obj 1 1 cnv 5 765 40 empty empty xdac~ 20 20 0 20 -104026 -4096 0; +#X obj 702 11 xdac~; +#X obj 50 118 xdac~; +#X obj 126 118 xdac~ 1:6; +#X obj 242 118 xdac~ 1:3 5 7:12; +#X obj 20 157 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 162 cnv 5 115 26 empty empty mouse_events: 4 10 0 14 -262144 +-49933 0; +#X text 110 197 Left-click; +#X text 285 197 opens audio properties dialog.; +#X obj 20 227 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 232 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +-49933 0; +#X text 110 267 1\.; +#X text 150 267 list; +#X obj 246 268 cnv 1 39 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 267 OUTS: list of output channels: single channel number +or X:Y range \, that means from X channel to Y (including last one). +If not specified - using 1 and 2 out channels.; +#X obj 20 327 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 332 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +0; +#X text 110 333 1\.; +#X text 245 333 first specified channel.; +#X text 110 353 ....; +#X text 245 353 ... specified channel.; +#X text 110 373 n.; +#X text 245 373 n-th specified channel.; +#X obj 20 403 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 408 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +-49933 0; +#X obj 10 48 ui.link @title index @url ../index-help.pd; +#X text 51 45 ::; +#X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; +#X text 115 45 ::; +#X obj 131 48 ui.link @title base @url ceammc.base-help.pd; +#X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 508 library: ceammc v0.8.0; +#N canvas 10 527 400 290 info 0; +#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; +#X text 10 10 library:; +#X text 120 10 ceammc; +#X text 10 32 version:; +#X text 120 32 0.8.0; +#X text 10 54 object:; +#X text 120 54 xdac~; +#X text 10 76 category:; +#X text 120 76 base; +#X text 10 98 since:; +#X text 120 98 0.8; +#X text 10 120 authors:; +#X text 120 120 Serge Poltavsky; +#X text 10 142 license:; +#X text 120 142 GPL3 or later; +#X text 10 164 keywords:; +#X text 120 164 base; +#X text 10 186 website:; +#X obj 120 189 ui.link @title https://github.com/uliss/pure-data @url +https://github.com/uliss/pure-data; +#X obj 120 208 declare -lib ceammc; +#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 120 268 generated by pddoc; +#X restore 10 527 pd info; \ No newline at end of file diff --git a/ceammc/ext/doc/xdac~.pddoc b/ceammc/ext/doc/xdac~.pddoc new file mode 100644 index 0000000000..0f0d9bdce2 --- /dev/null +++ b/ceammc/ext/doc/xdac~.pddoc @@ -0,0 +1,44 @@ + + + + xdac~ + + + Serge Poltavsky + + dac~ with channel ranges + GPL3 or later + ceammc + base + base + 0.8 + + + opens audio properties dialog + + + list of output channels: single channel number or X:Y + range, that means from X channel to Y (including last one). If not specified - using 1 + and 2 out channels + + + + first specified channel + + + ... specified channel + + + n-th specified channel + + + + + + + + + + diff --git a/ceammc/ext/doc/xfade2~-help.pd b/ceammc/ext/doc/xfade2~-help.pd index c8632829f8..6405362303 100644 --- a/ceammc/ext/doc/xfade2~-help.pd +++ b/ceammc/ext/doc/xfade2~-help.pd @@ -10,7 +10,7 @@ first and second signals \, [1-2) between second and third etc.; #X obj 50 158 osc~ 440; #X obj 184 158 osc~ 1000; -#X obj 318 158 ui.knob @size 40 40; +#X obj 318 158 ui.knob; #X obj 69 187 osc~ 441; #X obj 203 187 osc~ 1002; #X floatatom 318 216 5 0 0 0 - - -; @@ -69,7 +69,7 @@ Allowed values: lin \, pow.; #X text 115 45 ::; #X obj 131 48 ui.link @title base @url ceammc.base-help.pd; #X obj 1 864 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 867 library: ceammc v0.7.1; +#X text 10 867 library: ceammc v0.8.0; #X text 621 879 see also:; #X obj 695 879 xfade~; #N canvas 10 886 400 290 info 0; @@ -77,7 +77,7 @@ Allowed values: lin \, pow.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 xfade2~; #X text 10 76 category:; @@ -87,7 +87,7 @@ Allowed values: lin \, pow.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 crossfade \, xfade; #X text 10 186 website:; diff --git a/ceammc/ext/doc/xfade2~.pddoc b/ceammc/ext/doc/xfade2~.pddoc index 29712ca130..e4c8c8987c 100644 --- a/ceammc/ext/doc/xfade2~.pddoc +++ b/ceammc/ext/doc/xfade2~.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky multi stereo-signal crossfade - GPL3 + GPL3 or later ceammc base crossfade xfade diff --git a/ceammc/ext/doc/xfade~-help.pd b/ceammc/ext/doc/xfade~-help.pd index e5c49373eb..1a6572af68 100644 --- a/ceammc/ext/doc/xfade~-help.pd +++ b/ceammc/ext/doc/xfade~-help.pd @@ -8,11 +8,11 @@ #X text 215 80 control float value in range [0-1) controls xfade between first and second signals \, [1-2) between second and third etc.; #X text 50 158 simple 2-channel crossfade; -#X obj 491 158 ui.radio @nitems 3 @size 45 15; +#X obj 491 158 ui.radio 3; #X obj 50 187 osc~ 440; -#X obj 194 187 ui.knob @size 40 40; +#X obj 194 187 ui.knob; #X obj 338 187 osc~ 440; -#X obj 491 187 ui.knob @max 2 @size 40 40; +#X obj 491 187 ui.knob @max 2; #X obj 78 216 osc~ 1000; #X obj 357 216 osc~ 1000; #X floatatom 194 245 5 0 0 0 - - -; @@ -67,13 +67,13 @@ Allowed values: lin \, pow.; #X text 115 45 ::; #X obj 131 48 ui.link @title base @url ceammc.base-help.pd; #X obj 1 784 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 787 library: ceammc v0.7.1; +#X text 10 787 library: ceammc v0.8.0; #N canvas 10 806 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.7.1; +#X text 120 32 0.8.0; #X text 10 54 object:; #X text 120 54 xfade~; #X text 10 76 category:; @@ -83,7 +83,7 @@ Allowed values: lin \, pow.; #X text 10 120 authors:; #X text 120 120 Serge Poltavsky; #X text 10 142 license:; -#X text 120 142 GPL3; +#X text 120 142 GPL3 or later; #X text 10 164 keywords:; #X text 120 164 crossfade \, xfade; #X text 10 186 website:; diff --git a/ceammc/ext/doc/xfade~.pddoc b/ceammc/ext/doc/xfade~.pddoc index 7dd3a90eb3..9a7bd67d63 100644 --- a/ceammc/ext/doc/xfade~.pddoc +++ b/ceammc/ext/doc/xfade~.pddoc @@ -7,7 +7,7 @@ Serge Poltavsky multi signal crossfade - GPL3 + GPL3 or later ceammc base crossfade xfade @@ -48,9 +48,9 @@ value()) { if (destpos >= out.size()) { OBJ_ERR << "invalid destination position: " << destpos; diff --git a/ceammc/ext/src/array/array_fill.cpp b/ceammc/ext/src/array/array_fill.cpp index 03726b9b53..dfeab919c8 100644 --- a/ceammc/ext/src/array/array_fill.cpp +++ b/ceammc/ext/src/array/array_fill.cpp @@ -11,10 +11,6 @@ * contact the author of this file, or the owner of the project in which * this file belongs to. *****************************************************************************/ - -#define _USE_MATH_DEFINES -#include - #include "array_fill.h" #include "ceammc_convert.h" #include "ceammc_factory.h" diff --git a/ceammc/ext/src/array/array_vline_play.cpp b/ceammc/ext/src/array/array_vline_play.cpp index abaf32cfc3..2fbad0a636 100644 --- a/ceammc/ext/src/array/array_vline_play.cpp +++ b/ceammc/ext/src/array/array_vline_play.cpp @@ -46,22 +46,43 @@ ArrayVlinePlay::ArrayVlinePlay(const PdArgs& args) createOutlet(); createOutlet(); - createCbProperty("@state", &ArrayVlinePlay::propState); - createCbProperty("@speed", &ArrayVlinePlay::propSpeed, &ArrayVlinePlay::propSetSpeed); - property("@speed")->info().setType(PropertyInfoType::FLOAT); - property("@speed")->info().setMin(0.1); - property("@speed")->info().setDefault(1.f); - - createCbProperty("@begin", &ArrayVlinePlay::propBeginSample, &ArrayVlinePlay::propSetBeginSample); - property("@begin")->info().setType(PropertyInfoType::INTEGER); - property("@begin")->info().setUnits(PropertyInfoUnits::SAMP); - createCbProperty("@end", &ArrayVlinePlay::propEndSample, &ArrayVlinePlay::propSetEndSample); - property("@end")->info().setType(PropertyInfoType::INTEGER); - property("@end")->info().setUnits(PropertyInfoUnits::SAMP); - createCbProperty("@abs_begin", &ArrayVlinePlay::propAbsBeginSample); - property("@abs_begin")->info().setType(PropertyInfoType::FLOAT); - createCbProperty("@abs_end", &ArrayVlinePlay::propAbsEndSample); - property("@abs_end")->info().setType(PropertyInfoType::FLOAT); + { + auto p = createCbProperty("@state", &ArrayVlinePlay::propState); + p->info().setType(PropertyInfoType::SYMBOL); + p->info().addEnum("play"); + p->info().addEnum("stop"); + } + + { + auto p = createCbProperty("@speed", &ArrayVlinePlay::propSpeed, &ArrayVlinePlay::propSetSpeed); + p->info().setType(PropertyInfoType::FLOAT); + p->info().setMin(0.1); + p->info().setDefault(1.f); + } + + { + auto p = createCbProperty("@begin", &ArrayVlinePlay::propBeginSample, &ArrayVlinePlay::propSetBeginSample); + p->info().setType(PropertyInfoType::INTEGER); + p->info().setUnits(PropertyInfoUnits::SAMP); + } + + { + auto p = createCbProperty("@end", &ArrayVlinePlay::propEndSample, &ArrayVlinePlay::propSetEndSample); + p->info().setType(PropertyInfoType::INTEGER); + p->info().setUnits(PropertyInfoUnits::SAMP); + } + + { + auto p = createCbProperty("@abs_begin", &ArrayVlinePlay::propAbsBeginSample); + p->info().setType(PropertyInfoType::INTEGER); + p->info().setUnits(PropertyInfoUnits::SAMP); + } + + { + auto p = createCbProperty("@abs_end", &ArrayVlinePlay::propAbsEndSample); + p->info().setType(PropertyInfoType::INTEGER); + p->info().setUnits(PropertyInfoUnits::SAMP); + } reversed_ = new BoolProperty("@reversed", false); createProperty(reversed_); diff --git a/ceammc/ext/src/base/CMakeLists.txt b/ceammc/ext/src/base/CMakeLists.txt index efb7f011e4..abc4f6ded9 100644 --- a/ceammc/ext/src/base/CMakeLists.txt +++ b/ceammc/ext/src/base/CMakeLists.txt @@ -2,6 +2,9 @@ include_directories(${CMAKE_BINARY_DIR}) # for config.h set(BASE_SOURCES canvas_current.cpp + canvas_dir.cpp + canvas_name.cpp + canvas_path.cpp canvas_top.cpp expand_env.cpp function.cpp @@ -44,6 +47,7 @@ list(APPEND BASE_SOURCES # sound list(APPEND BASE_SOURCES base_click.cpp + base_dac.cpp gain.cpp matrix.cpp mix.cpp diff --git a/ceammc/ext/src/base/base_dac.cpp b/ceammc/ext/src/base/base_dac.cpp new file mode 100644 index 0000000000..b423c2a514 --- /dev/null +++ b/ceammc/ext/src/base/base_dac.cpp @@ -0,0 +1,122 @@ +/***************************************************************************** + * Copyright 2019 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#include "base_dac.h" +#include "ceammc_factory.h" + +#include +#include + +extern "C" { +#include "s_stuff.h" +} + +#define OBJ_NAME "xdac~" +#define DEFDACBLKSIZE 64 + +static std::vector parseRange(const std::string& str) +{ + std::vector res; + const std::regex re("([0-9]+):([0-9]+)"); + std::smatch match; + try { + if (std::regex_match(str, match, re)) { + if (match.size() == 3) { + int v0 = std::stoi(match.str(1)); + int v1 = std::stoi(match.str(2)); + auto p = std::minmax(v0, v1); + + if (v0 == v1) + return res; + + for (int i = p.first; i <= p.second; i++) + res.push_back(i); + } + } else { + return res; + } + } catch (std::exception& e) { + LIB_ERR << e.what(); + } catch (...) { + LIB_ERR << "unknown exception"; + } + + return res; +} + +BaseDac::BaseDac(const PdArgs& args) + : SoundExternal(args) +{ + auto& pos_args = positionalArguments(); + if (pos_args.empty()) { + vec_.assign({ 1, 2 }); + } else { + for (const Atom& a : pos_args) { + if (a.isFloat()) { + vec_.push_back(a.asInt()); + continue; + } else if (a.isSymbol()) { + auto rng = parseRange(a.asSymbol()->s_name); + if (rng.empty()) { + OBJ_ERR << "invalid range: " << a; + continue; + } + + std::copy(rng.begin(), rng.end(), std::back_inserter(vec_)); + } else { + OBJ_ERR << "invalid argument: " << a; + } + } + } + + for (size_t i = 1; i < vec_.size(); i++) + createSignalInlet(); +} + +void BaseDac::processBlock(const t_sample** in, t_sample** out) +{ + // should be empty +} + +void BaseDac::setupDSP(t_signal** sp) +{ + const int NOUTS = sys_get_outchannels(); + + for (size_t i = 0; i < vec_.size(); i++) { + t_signal* sig = sp[i]; + if (sig->s_n != DEFDACBLKSIZE) { + error(OBJ_NAME ": bad vector size"); + break; + } + + int ch = vec_[i] - 1; + if (ch >= 0 && ch < NOUTS) { + auto in = sig->s_vec; + auto out = get_sys_soundout() + (DEFDACBLKSIZE * ch); + + dsp_add_plus(in, out, out, DEFDACBLKSIZE); + } else + OBJ_LOG << "invalid channel number: " << (ch + 1); + } +} + +void BaseDac::onClick(t_floatarg xpos, t_floatarg ypos, t_floatarg shift, t_floatarg ctrl, t_floatarg alt) +{ + sys_gui("pdsend \"pd audio-properties\"\n"); +} + +void setup_base_dac() +{ + SoundExternalFactory obj(OBJ_NAME); + obj.useClick(); +} diff --git a/ceammc/ext/src/base/base_dac.h b/ceammc/ext/src/base/base_dac.h new file mode 100644 index 0000000000..74cfaa76b7 --- /dev/null +++ b/ceammc/ext/src/base/base_dac.h @@ -0,0 +1,35 @@ +/***************************************************************************** + * Copyright 2019 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#ifndef BASE_DAC_H +#define BASE_DAC_H + +#include "ceammc_sound_external.h" + +using namespace ceammc; + +class BaseDac : public SoundExternal { + std::vector vec_; + +public: + BaseDac(const PdArgs& args); + + void processBlock(const t_sample** in, t_sample** out) override; + void setupDSP(t_signal** sp) override; + + void onClick(t_floatarg xpos, t_floatarg ypos, t_floatarg shift, t_floatarg ctrl, t_floatarg alt) override; +}; + +void setup_base_dac(); + +#endif // BASE_DAC_H diff --git a/ceammc/ext/src/base/canvas_current.cpp b/ceammc/ext/src/base/canvas_current.cpp index 78fcf2340c..f3bfa68718 100644 --- a/ceammc/ext/src/base/canvas_current.cpp +++ b/ceammc/ext/src/base/canvas_current.cpp @@ -8,18 +8,55 @@ CanvasCurrent::CanvasCurrent(const PdArgs& a) { createOutlet(); - createCbProperty("@name", &CanvasCurrent::p_name); - createCbProperty("@dir", &CanvasCurrent::p_dir); - createCbProperty("@root", &CanvasCurrent::p_root); - createCbProperty("@abstraction", &CanvasCurrent::p_abstraction); + { + Property* p = createCbProperty("@name", &CanvasCurrent::p_name); + p->info().setType(PropertyInfoType::SYMBOL); + } + + { + Property* p = createCbProperty("@dir", &CanvasCurrent::p_dir); + p->info().setType(PropertyInfoType::SYMBOL); + } + + { + Property* p = createCbProperty("@root", &CanvasCurrent::p_root); + p->info().setType(PropertyInfoType::BOOLEAN); + } + + { + Property* p = createCbProperty("@abstraction", &CanvasCurrent::p_abstraction); + p->info().setType(PropertyInfoType::BOOLEAN); + } + createCbProperty("@args", &CanvasCurrent::p_args); - createCbProperty("@font", &CanvasCurrent::p_font); + + { + Property* p = createCbProperty("@font", &CanvasCurrent::p_font); + p->info().setType(PropertyInfoType::INTEGER); + } + createCbProperty("@paths", &CanvasCurrent::p_paths); createCbProperty("@size", &CanvasCurrent::p_size); - createCbProperty("@x", &CanvasCurrent::p_x); - createCbProperty("@y", &CanvasCurrent::p_y); - createCbProperty("@width", &CanvasCurrent::p_width); - createCbProperty("@height", &CanvasCurrent::p_height); + + { + Property* p = createCbProperty("@x", &CanvasCurrent::p_x); + p->info().setType(PropertyInfoType::INTEGER); + } + + { + Property* p = createCbProperty("@y", &CanvasCurrent::p_y); + p->info().setType(PropertyInfoType::INTEGER); + } + + { + Property* p = createCbProperty("@width", &CanvasCurrent::p_width); + p->info().setType(PropertyInfoType::INTEGER); + } + + { + Property* p = createCbProperty("@height", &CanvasCurrent::p_height); + p->info().setType(PropertyInfoType::INTEGER); + } } void CanvasCurrent::onBang() diff --git a/ceammc/ext/src/base/canvas_dir.cpp b/ceammc/ext/src/base/canvas_dir.cpp new file mode 100644 index 0000000000..438c7bb9fc --- /dev/null +++ b/ceammc/ext/src/base/canvas_dir.cpp @@ -0,0 +1,32 @@ +/***************************************************************************** + * Copyright 2019 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#include "canvas_dir.h" +#include "ceammc_canvas.h" +#include "ceammc_factory.h" + +CanvasDir::CanvasDir(const PdArgs& args) + : BaseObject(args) +{ + createOutlet(); +} + +void CanvasDir::onBang() +{ + symbolTo(0, canvas_info_dir(canvas())); +} + +void setup_base_canvas_dir() +{ + ObjectFactory obj("canvas.dir"); +} diff --git a/ceammc/ext/src/base/canvas_dir.h b/ceammc/ext/src/base/canvas_dir.h new file mode 100644 index 0000000000..602b9cd7a0 --- /dev/null +++ b/ceammc/ext/src/base/canvas_dir.h @@ -0,0 +1,28 @@ +/***************************************************************************** + * Copyright 2019 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#ifndef CANVAS_DIR_H +#define CANVAS_DIR_H + +#include "ceammc_object.h" +using namespace ceammc; + +class CanvasDir : public BaseObject { +public: + CanvasDir(const PdArgs& args); + void onBang() override; +}; + +void setup_base_canvas_dir(); + +#endif // CANVAS_DIR_H diff --git a/ceammc/ext/src/base/canvas_name.cpp b/ceammc/ext/src/base/canvas_name.cpp new file mode 100644 index 0000000000..a08e26f0a8 --- /dev/null +++ b/ceammc/ext/src/base/canvas_name.cpp @@ -0,0 +1,32 @@ +/***************************************************************************** + * Copyright 2019 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#include "canvas_name.h" +#include "ceammc_canvas.h" +#include "ceammc_factory.h" + +CanvasName::CanvasName(const PdArgs& args) + : BaseObject(args) +{ + createOutlet(); +} + +void CanvasName::onBang() +{ + symbolTo(0, canvas_info_name(canvas())); +} + +void setup_base_canvas_name() +{ + ObjectFactory obj("canvas.name"); +} diff --git a/ceammc/ext/src/base/canvas_name.h b/ceammc/ext/src/base/canvas_name.h new file mode 100644 index 0000000000..3d50393e49 --- /dev/null +++ b/ceammc/ext/src/base/canvas_name.h @@ -0,0 +1,28 @@ +/***************************************************************************** + * Copyright 2019 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#ifndef CANVAS_NAME_H +#define CANVAS_NAME_H + +#include "ceammc_object.h" +using namespace ceammc; + +class CanvasName : public BaseObject { +public: + CanvasName(const PdArgs& args); + void onBang() override; +}; + +void setup_base_canvas_name(); + +#endif // CANVAS_NAME_H diff --git a/ceammc/ext/src/base/canvas_path.cpp b/ceammc/ext/src/base/canvas_path.cpp new file mode 100644 index 0000000000..73a3e5a947 --- /dev/null +++ b/ceammc/ext/src/base/canvas_path.cpp @@ -0,0 +1,43 @@ +/***************************************************************************** + * Copyright 2019 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#include "canvas_path.h" +#include "ceammc_canvas.h" +#include "ceammc_factory.h" + +CanvasPath::CanvasPath(const PdArgs& args) + : BaseObject(args) + , path_(nullptr) +{ + createOutlet(); +} + +void CanvasPath::onBang() +{ + if (!path_) { + std::string path = canvas_info_dir(canvas())->s_name; + if (!path.empty()) + path += '/'; + + path += canvas_info_name(canvas())->s_name; + path_ = gensym(path.c_str()); + } + + symbolTo(0, path_); + +} + +void setup_base_canvas_path() +{ + ObjectFactory obj("canvas.path"); +} diff --git a/ceammc/ext/src/base/canvas_path.h b/ceammc/ext/src/base/canvas_path.h new file mode 100644 index 0000000000..5d2ef3f0c6 --- /dev/null +++ b/ceammc/ext/src/base/canvas_path.h @@ -0,0 +1,30 @@ +/***************************************************************************** + * Copyright 2019 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#ifndef CANVAS_PATH_H +#define CANVAS_PATH_H + +#include "ceammc_object.h" +using namespace ceammc; + +class CanvasPath : public BaseObject { + t_symbol* path_; + +public: + CanvasPath(const PdArgs& args); + void onBang() override; +}; + +void setup_base_canvas_path(); + +#endif // CANVAS_PATH_H diff --git a/ceammc/ext/src/base/load_msg.cpp b/ceammc/ext/src/base/load_msg.cpp index c4fbda747d..379d127a5d 100644 --- a/ceammc/ext/src/base/load_msg.cpp +++ b/ceammc/ext/src/base/load_msg.cpp @@ -14,29 +14,6 @@ #include "load_msg.h" #include "ceammc_factory.h" -extern "C" { -#include "g_canvas.h" -} - -static LoadMsg* toObj(t_object* x) -{ - typedef ObjectFactory::ObjectProxy ObjectProxy; - ObjectProxy* obj = reinterpret_cast(x); - return obj->impl; -} - -static void msg_loadbang(t_object* x, t_floatarg action) -{ - if (action == LB_LOAD) - toObj((t_object*)x)->output(); -} - -static void msg_click(t_object* x, - t_floatarg xpos, t_floatarg ypos, t_floatarg shift, t_floatarg ctrl, t_floatarg alt) -{ - toObj((t_object*)x)->output(); -} - LoadMsg::LoadMsg(const PdArgs& args) : BaseObject(args) { @@ -69,12 +46,20 @@ bool LoadMsg::processAnyProps(t_symbol* sel, const AtomList& lst) return true; } +void LoadMsg::onClick(t_floatarg xpos, t_floatarg ypos, t_floatarg shift, t_floatarg ctrl, t_floatarg alt) +{ + output(); +} + +void LoadMsg::onLoadBang() +{ + output(); +} + void setup_load_msg() { ObjectFactory obj("msg.onload", OBJECT_FACTORY_NO_DEFAULT_INLET); obj.addAlias("loadmsg"); - - t_class* c = obj.classPointer(); - class_addmethod(c, (t_method)msg_click, gensym("click"), A_FLOAT, A_FLOAT, A_FLOAT, A_FLOAT, A_FLOAT, 0); - class_addmethod(c, (t_method)msg_loadbang, gensym("loadbang"), A_DEFFLOAT, 0); + obj.useClick(); + obj.useLoadBang(); } diff --git a/ceammc/ext/src/base/load_msg.h b/ceammc/ext/src/base/load_msg.h index 339705f98b..7de0100d4f 100644 --- a/ceammc/ext/src/base/load_msg.h +++ b/ceammc/ext/src/base/load_msg.h @@ -27,6 +27,8 @@ class LoadMsg : public BaseObject { void parseProperties() override; bool processAnyProps(t_symbol* sel, const AtomList& lst) override; + void onClick(t_floatarg xpos, t_floatarg ypos, t_floatarg shift, t_floatarg ctrl, t_floatarg alt) override; + void onLoadBang() override; }; void setup_load_msg(); diff --git a/ceammc/ext/src/base/matrix.cpp b/ceammc/ext/src/base/matrix.cpp index 754673701f..f484d12b5b 100644 --- a/ceammc/ext/src/base/matrix.cpp +++ b/ceammc/ext/src/base/matrix.cpp @@ -36,8 +36,21 @@ Matrix::Matrix(const PdArgs& args) blocks_.assign(nouts_, DSPBlock(64, 0)); - createCbProperty("@outputs", &Matrix::propRows); - createCbProperty("@inputs", &Matrix::propColumns); + { + auto p = createCbProperty("@outputs", &Matrix::propRows); + p->info().setType(PropertyInfoType::INTEGER); + p->info().setDefault(2); + p->info().setMin(2); + p->info().setMax(16); + } + + { + auto p = createCbProperty("@inputs", &Matrix::propColumns); + p->info().setType(PropertyInfoType::INTEGER); + p->info().setDefault(2); + p->info().setMin(2); + p->info().setMax(16); + } } void Matrix::processBlock(const t_sample** in, t_sample** out) diff --git a/ceammc/ext/src/base/mix.cpp b/ceammc/ext/src/base/mix.cpp index 9c77f39a10..52f555f166 100644 --- a/ceammc/ext/src/base/mix.cpp +++ b/ceammc/ext/src/base/mix.cpp @@ -49,14 +49,32 @@ Mix::Mix(const PdArgs& args) solo_.assign(n_, t_smooth(0, 1)); solo_values_.assign(n_, 0); - createCbProperty("@xfade_time", &Mix::propXFadeTime, &Mix::setPropXFadeTime); - property("@xfade_time")->info().setType(PropertyInfoType::FLOAT); - property("@xfade_time")->info().setDefault(DEFAULT_XFADE); + { + auto p = createCbProperty("@xfade_time", &Mix::propXFadeTime, &Mix::setPropXFadeTime); + p->info().setType(PropertyInfoType::FLOAT); + p->info().setDefault(DEFAULT_XFADE); + p->info().setUnits(PropertyInfoUnits::MSEC); + } + + { + auto p = createCbProperty("@db", &Mix::propDb, &Mix::setPropDb); + p->info().setType(PropertyInfoType::LIST); + p->info().setUnits(PropertyInfoUnits::DB); + } createCbProperty("@value", &Mix::propValue, &Mix::setPropValue); - createCbProperty("@db", &Mix::propDb, &Mix::setPropDb); - createCbProperty("@mute", &Mix::propMute, &Mix::setPropMute); - createCbProperty("@solo", &Mix::propSolo, &Mix::setPropSolo); + + { + Property* p = createCbProperty("@mute", &Mix::propMute, &Mix::setPropMute); + p->info().addEnum(0); + p->info().addEnum(1); + } + + { + Property* p = createCbProperty("@solo", &Mix::propSolo, &Mix::setPropSolo); + p->info().addEnum(0); + p->info().addEnum(1); + } } void Mix::onList(const AtomList& lst) diff --git a/ceammc/ext/src/base/mod_base.cpp b/ceammc/ext/src/base/mod_base.cpp index bb9128b8b3..1881e63ba9 100644 --- a/ceammc/ext/src/base/mod_base.cpp +++ b/ceammc/ext/src/base/mod_base.cpp @@ -1,6 +1,7 @@ #include "mod_base.h" #include "base_click.h" +#include "base_dac.h" #include "canvas_current.h" #include "canvas_top.h" #include "function.h" @@ -41,6 +42,9 @@ extern "C" void setup_test0x2edata(); extern "C" void setup_test0x2eexpect(); extern "C" void setup_prop0x2eget_tilde(); +void setup_base_canvas_dir(); +void setup_base_canvas_name(); +void setup_base_canvas_path(); void setup_is_data(); void setup_load_msg(); @@ -61,6 +65,10 @@ void ceammc_base_setup() is_symbol_setup(); msg_setup(); replace_setup(); + + setup_base_canvas_dir(); + setup_base_canvas_name(); + setup_base_canvas_path(); setup_base_prop(); setup_is_data(); setup_load_msg(); @@ -82,6 +90,7 @@ void ceammc_base_setup() setup_test0x2edata(); setup_test0x2eexpect(); + setup_base_dac(); setup_canvas_current(); setup_canvas_top(); setup_gain_tilde(); diff --git a/ceammc/ext/src/base/patch_props.cpp b/ceammc/ext/src/base/patch_props.cpp index 7cb454db26..701ee20fcb 100644 --- a/ceammc/ext/src/base/patch_props.cpp +++ b/ceammc/ext/src/base/patch_props.cpp @@ -37,16 +37,16 @@ bool PatchProps::processAnyProps(t_symbol* sel, const AtomList& lst) void PatchProps::onBang() { - t_canvas* x = canvas(); - if (!x) + t_canvas* cnv = canvas(); + if (!cnv) return; - for (t_gobj* y = x->gl_list; y; y = y->g_next) { - if (y->g_pd->c_name != className()) + for (t_gobj* x = cnv->gl_list; x != nullptr; x = x->g_next) { + if (x->g_pd != ObjectFactory::classPointer()) continue; - PdObject* prop = reinterpret_cast*>(y); - t_symbol* prop_name = prop->impl->fullName(); + PropDeclare* prop = ObjectFactory::fromObject((t_object*)x); + t_symbol* prop_name = prop->fullName(); if (prop_name->s_thing) pd_bang(prop_name->s_thing); } @@ -116,13 +116,12 @@ void PatchProps::m_all_props(t_symbol* s, const AtomList& args) return; AtomList res; - char buf[MAXPDSTRING]; for (t_gobj* y = x->gl_list; y; y = y->g_next) { - if (y->g_pd->c_name != className()) + if (y->g_pd != ObjectFactory::classPointer()) continue; - PropDeclare* prop = reinterpret_cast*>(y)->impl; + PropDeclare* prop = ObjectFactory::fromObject((t_object*)y); res.append(prop->name()); } @@ -136,7 +135,7 @@ void PatchProps::m_default(t_symbol*, const AtomList&) return; for (t_gobj* x = cnv->gl_list; x; x = x->g_next) { - if (x->g_pd->c_name != className()) + if (x->g_pd != ObjectFactory::classPointer()) continue; PdObject* prop = reinterpret_cast*>(x); @@ -155,13 +154,21 @@ void PatchProps::dump() const return; for (t_gobj* x = cnv->gl_list; x; x = x->g_next) { - if (x->g_pd->c_name != className()) + if (x->g_pd != ObjectFactory::classPointer()) continue; - PropDeclare* prop = reinterpret_cast*>(x)->impl; - PropertyPtr pprop(prop->fullName()->s_name); + PropertyPtr pprop(ObjectFactory::fromObject((t_object*)x)->fullName()); if (pprop) { - OBJ_DBG << pprop->name(); + OBJ_DBG << "full name: " << pprop->name()->s_name << "\n" + << "type: " << pprop->propertyStrType() << "\n" + << "value: " << pprop->propertyStrValue(); + + if (pprop->hasMinValue()) + OBJ_DBG << "min: " << pprop->propertyStrMinValue(); + if (pprop->hasMaxValue()) + OBJ_DBG << "max: " << pprop->propertyStrMaxValue(); + if (pprop->hasEnumValues()) + OBJ_DBG << "enum: " << pprop->enumValues(); } } } @@ -181,11 +188,6 @@ void PatchProps::outputProp(const std::string& name, const AtomList& l) anyTo(0, gensym(name.c_str()), l); } -t_symbol* PatchProps::className() const -{ - return owner()->te_g.g_pd->c_name; -} - void setup_patch_props() { ObjectFactory obj("patch.props"); diff --git a/ceammc/ext/src/base/patch_props.h b/ceammc/ext/src/base/patch_props.h index e239285601..bd48056028 100644 --- a/ceammc/ext/src/base/patch_props.h +++ b/ceammc/ext/src/base/patch_props.h @@ -32,7 +32,6 @@ class PatchProps : public BaseObject { void outputProp(const std::string& name, t_float f); void outputProp(const std::string& name, t_symbol* s); void outputProp(const std::string& name, const AtomList& l); - t_symbol* className() const; }; void setup_patch_props(); diff --git a/ceammc/ext/src/base/prop.cpp b/ceammc/ext/src/base/prop.cpp index f5f80f94df..e4eab2650c 100644 --- a/ceammc/ext/src/base/prop.cpp +++ b/ceammc/ext/src/base/prop.cpp @@ -19,6 +19,9 @@ extern "C" { #include "g_canvas.h" } +static t_symbol* SYM_TRUE; +static t_symbol* SYM_FALSE; + static t_symbol* makePropName(const AtomList& l) { static t_symbol* SYM_INVALID = gensym("@invalid"); @@ -32,10 +35,10 @@ static t_symbol* makePropName(const AtomList& l) BaseProp::BaseProp(const PdArgs& args) : BaseObject(args) , name_(makePropName(args.args)) - , full_name_(PropertyStorage::makeFullName(name_->s_name, canvas())) + , full_name_(PropertyStorage::makeFullName(name_, canvas())) { createOutlet(); - bindReceive(gensym(full_name_.c_str())); + bindReceive(full_name_); } void BaseProp::parseProperties() @@ -95,7 +98,7 @@ void BaseProp::onFloat(t_float v) } else prop->setBool(v); } else { - OBJ_ERR << "unknown property type"; + OBJ_ERR << "not a float, int or bool property"; } } @@ -109,12 +112,15 @@ void BaseProp::onSymbol(t_symbol* s) } if (prop->isSymbol()) { + if (!prop->setSymbol(s)) + OBJ_ERR << "can't set property to " << s; + } else if (prop->isBool()) { + if (!(s == SYM_TRUE || s == SYM_FALSE)) + OBJ_ERR << "only " << SYM_TRUE << " and " << SYM_FALSE << " values are supported"; + else if (!prop->setBool(s == SYM_TRUE)) + OBJ_ERR << "can't set property to " << s; + } else OBJ_ERR << "not a symbol property"; - return; - } - - if (!prop->setSymbol(s)) - OBJ_ERR << "can't set property to " << s; } void BaseProp::onList(const AtomList& l) @@ -126,7 +132,13 @@ void BaseProp::onList(const AtomList& l) return; } - if (prop->isList()) { + if (l.isFloat() && (prop->isFloat() || prop->isInt() || prop->isBool())) + return onFloat(l[0].asFloat()); + + if (l.isSymbol() && (prop->isSymbol() || prop->isBool())) + return onSymbol(l[0].asSymbol()); + + if (!prop->isList()) { OBJ_ERR << "not a list property"; return; } @@ -149,8 +161,37 @@ void BaseProp::m_default(t_symbol*, const AtomList&) PropertyStorage::storage().release(full_name_); } +void BaseProp::dump() const +{ + BaseObject::dump(); + + DataTypeProperty* prop = PropertyStorage::storage().acquire(full_name_); + + if (!prop) { + OBJ_ERR << "can't get property info: " << name_; + return; + } + + OBJ_DBG << "name: " << name_->s_name << "\n" + << "full name: " << full_name_ << "\n" + << "type: " << prop->propertyStrType() << "\n" + << "value: " << prop->propertyStrValue(); + + if (prop->hasMinValue()) + OBJ_DBG << "min: " << prop->propertyStrMinValue(); + if (prop->hasMaxValue()) + OBJ_DBG << "max: " << prop->propertyStrMaxValue(); + if (prop->hasEnumValues()) + OBJ_DBG << "enum: " << prop->enumValues(); + + PropertyStorage::storage().release(full_name_); +} + void setup_base_prop() { + SYM_TRUE = gensym("true"); + SYM_FALSE = gensym("false"); + ObjectFactory obj("prop"); obj.addMethod("default", &BaseProp::m_default); } diff --git a/ceammc/ext/src/base/prop.h b/ceammc/ext/src/base/prop.h index baaf8b793c..26aca6acd8 100644 --- a/ceammc/ext/src/base/prop.h +++ b/ceammc/ext/src/base/prop.h @@ -21,7 +21,7 @@ using namespace ceammc; class BaseProp : public BaseObject { t_symbol* name_; - std::string full_name_; + t_symbol* full_name_; public: BaseProp(const PdArgs& args); @@ -33,6 +33,8 @@ class BaseProp : public BaseObject { void onList(const AtomList& l) override; void m_default(t_symbol*, const AtomList&); + + void dump() const override; }; void setup_base_prop(); diff --git a/ceammc/ext/src/base/prop_declare.cpp b/ceammc/ext/src/base/prop_declare.cpp index 1fedd0f2c6..72999fb517 100644 --- a/ceammc/ext/src/base/prop_declare.cpp +++ b/ceammc/ext/src/base/prop_declare.cpp @@ -70,14 +70,6 @@ class CanvasEditCallback { } }; -static void prop_declare_loadbang(t_object* x, t_floatarg action) -{ - if (action == LB_LOAD) { - PropDeclare* prop = reinterpret_cast*>(x)->impl; - prop->onLoadBang(); - } -} - PropDeclare::PropDeclare(const PdArgs& args) : BaseObject(args) , sym_name_(&s_) @@ -90,18 +82,18 @@ PropDeclare::PropDeclare(const PdArgs& args) { initName(); - if (PropertyStorage::storage().contains(full_name_)) { + if (PropertyStorage::storage().contains(sym_full_name_)) { auto msg = tfm::format("\"%s\" is already declared", sym_name_->s_name); - throw std::runtime_error(msg.c_str()); + throw std::runtime_error(msg); } - auto pprop = new DataTypeProperty(gensym(full_name_.c_str())); - if (!PropertyStorage::storage().create(full_name_, pprop)) { + auto pprop = new DataTypeProperty(sym_full_name_); + if (!PropertyStorage::storage().create(sym_full_name_, pprop)) { delete pprop; throw std::runtime_error("can't create property"); } - pprop_ = PropertyStorage::storage().acquire(full_name_); + pprop_ = PropertyStorage::storage().acquire(sym_full_name_); type_ = new SymbolEnumProperty("@type", &s_float); type_->appendEnum(SYM_BOOL); @@ -130,7 +122,7 @@ PropDeclare::PropDeclare(const PdArgs& args) PropDeclare::~PropDeclare() { - PropertyStorage::storage().release(full_name_); + PropertyStorage::storage().release(sym_full_name_); } void PropDeclare::parseProperties() @@ -177,7 +169,8 @@ void PropDeclare::parseProperties() pprop_->setTypeList(default_->value()); } else if (isSymbol()) { pprop_->setTypeSymbol(atomlistToValue(default_->value(), &s_)); - pprop_->setEnumValues(enum_->get()); + if (!enum_->value().empty()) + pprop_->setEnumValues(enum_->get()); } } @@ -198,6 +191,7 @@ void PropDeclare::onLoadBang() return; AtomList pv; + // no property defined in canvas arguments if (!canvas_info_args(cnv).property(sym_name_->s_name, &pv)) { // output default values if (sym_full_name_->s_thing) @@ -206,12 +200,15 @@ void PropDeclare::onLoadBang() return; } - PropertyPtr pptr(full_name_); + PropertyPtr pptr(sym_full_name_); if (!pptr) return; if (!pptr->setFromPdArgs(pv)) OBJ_ERR << "error setting property: " << sym_name_; + + if (sym_full_name_->s_thing) + pd_bang(sym_full_name_->s_thing); } bool PropDeclare::isFloat() const @@ -249,8 +246,7 @@ void PropDeclare::initName() sym_name_ = gensym(buf); } - full_name_ = PropertyStorage::makeFullName(sym_name_->s_name, canvas()); - sym_full_name_ = gensym(full_name_.c_str()); + sym_full_name_ = PropertyStorage::makeFullName(sym_name_->s_name, canvas()); } void setup_prop_declare() @@ -260,5 +256,5 @@ void setup_prop_declare() SYM_ENUM = gensym("enum"); ObjectFactory obj("prop.declare", OBJECT_FACTORY_NO_DEFAULT_INLET); - class_addmethod(obj.classPointer(), (t_method)prop_declare_loadbang, gensym("loadbang"), A_DEFFLOAT, 0); + obj.useLoadBang(); } diff --git a/ceammc/ext/src/base/prop_declare.h b/ceammc/ext/src/base/prop_declare.h index 4bb03004dd..999bedb71c 100644 --- a/ceammc/ext/src/base/prop_declare.h +++ b/ceammc/ext/src/base/prop_declare.h @@ -22,7 +22,6 @@ using namespace ceammc; class PropDeclare : public BaseObject { t_symbol* sym_name_; t_symbol* sym_full_name_; - std::string full_name_; SymbolEnumProperty* type_; FloatProperty* min_; FloatProperty* max_; @@ -38,7 +37,7 @@ class PropDeclare : public BaseObject { t_symbol* name() const; t_symbol* fullName() const; - void onLoadBang(); + void onLoadBang() override; bool isFloat() const; bool isInt() const; diff --git a/ceammc/ext/src/base/xfade_tilde.cpp b/ceammc/ext/src/base/xfade_tilde.cpp index f03f0c4501..b1f527d940 100644 --- a/ceammc/ext/src/base/xfade_tilde.cpp +++ b/ceammc/ext/src/base/xfade_tilde.cpp @@ -60,10 +60,13 @@ XFadeTilde::XFadeTilde(const PdArgs& args) createProperty(new SymbolEnumAlias("@pow", prop_type_, SYM_POW)); createProperty(new SymbolEnumAlias("@lin", prop_type_, SYM_LIN)); - createCbProperty("@smooth", &XFadeTilde::propSmooth, &XFadeTilde::propSetSmooth); - property("@smooth")->info().setType(PropertyInfoType::FLOAT); - property("@smooth")->info().setDefault(DEFAULT_SMOOTH_MS); - property("@smooth")->info().setMin(1); + { + auto p = createCbProperty("@smooth", &XFadeTilde::propSmooth, &XFadeTilde::propSetSmooth); + p->info().setType(PropertyInfoType::FLOAT); + p->info().setDefault(DEFAULT_SMOOTH_MS); + p->info().setMin(1); + p->info().setUnits(PropertyInfoUnits::MSEC); + } gain_.assign(n_, t_smooth(0)); gain_[0].setTargetValue(1); diff --git a/ceammc/ext/src/ceammc.cpp b/ceammc/ext/src/ceammc.cpp index aeb1d2c8db..2dfa9d4fbc 100644 --- a/ceammc/ext/src/ceammc.cpp +++ b/ceammc/ext/src/ceammc.cpp @@ -22,7 +22,7 @@ t_class* ceammc_class = 0; static void ceammc_info_message() { post("\nCEAMMC library\n" - " Centre for Electroacoustic Music Moscow Conservatory, © 2016-2019\n" + " Centre for Electroacoustic Music Moscow Conservatory, © 2016-2020\n" " authors: Serge Poltavsky and Alex Nadzharov\n" " version: %s\n" " url: %s\n" diff --git a/ceammc/ext/src/conv/CMakeLists.txt b/ceammc/ext/src/conv/CMakeLists.txt index e174617e24..ed56489464 100644 --- a/ceammc/ext/src/conv/CMakeLists.txt +++ b/ceammc/ext/src/conv/CMakeLists.txt @@ -9,6 +9,8 @@ endmacro() # MIDI ceammc_conv_external(cc2amp) +ceammc_conv_external(angles) + ceammc_conv_external(lin2curve) ceammc_conv_external(lin2exp) ceammc_conv_external(lin2lin) diff --git a/ceammc/ext/src/conv/conv_angles.cpp b/ceammc/ext/src/conv/conv_angles.cpp new file mode 100644 index 0000000000..7493f37b1f --- /dev/null +++ b/ceammc/ext/src/conv/conv_angles.cpp @@ -0,0 +1,95 @@ +/***************************************************************************** + * Copyright 2019 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#include "conv_angles.h" +#include "ceammc_convert.h" +#include "ceammc_factory.h" + +Phase2Rad::Phase2Rad(const PdArgs& args) + : SimpleConverter(args, convert::phase2rad) +{ +} + +Rad2Phase::Rad2Phase(const PdArgs& args) + : SimpleConverter(args, convert::rad2phase) +{ +} + +Phase2RadTilde::Phase2RadTilde(const PdArgs& args) + : SimpleConverterTilde(args, convert::phase2rad) +{ +} + +Rad2PhaseTilde::Rad2PhaseTilde(const PdArgs& args) + : SimpleConverterTilde(args, convert::rad2phase) +{ +} + +Car2Pol::Car2Pol(const PdArgs& args) + : BaseObject(args) +{ + createOutlet(); +} + +void Car2Pol::onList(const AtomList& lst) +{ + if (!checkArgs(lst, ARG_FLOAT, ARG_FLOAT)) { + OBJ_ERR << "X Y coordinates expected: " << lst; + return; + } + + const auto x = lst[0].asFloat(); + const auto y = lst[1].asFloat(); + + listTo(0, { std::hypot(x, y), std::atan2(y, x) }); +} + +Pol2Car::Pol2Car(const PdArgs& args) + : BaseObject(args) +{ + createOutlet(); +} + +void Pol2Car::onList(const AtomList& lst) +{ + if (!checkArgs(lst, ARG_FLOAT, ARG_FLOAT)) { + OBJ_ERR << "R THETA coordinates expected: " << lst; + return; + } + + const auto r = lst[0].asFloat(); + const auto theta = lst[1].asFloat(); + + listTo(0, { r * std::cos(theta), r * std::sin(theta) }); +} + +void setup_conv_angles() +{ + ObjectFactory p2r("conv.phase2rad"); + p2r.addAlias("phase->rad"); + + ObjectFactory r2p("conv.rad2phase"); + r2p.addAlias("rad->phase"); + + ObjectFactory pol2car("conv.pol2car"); + pol2car.addAlias("pol->car"); + + ObjectFactory car2pol("conv.car2pol"); + car2pol.addAlias("car->pol"); + + SoundExternalFactory p2rt("conv.phase2rad~"); + p2rt.addAlias("phase->rad~"); + + SoundExternalFactory r2pt("conv.rad2phase~"); + r2pt.addAlias("rad->phase~"); +} diff --git a/ceammc/ext/src/conv/conv_angles.h b/ceammc/ext/src/conv/conv_angles.h new file mode 100644 index 0000000000..0061972a95 --- /dev/null +++ b/ceammc/ext/src/conv/conv_angles.h @@ -0,0 +1,53 @@ +/***************************************************************************** + * Copyright 2019 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#ifndef CONV_ANGLES_H +#define CONV_ANGLES_H + +#include "simple_converter.h" + +class Phase2Rad : public SimpleConverter { +public: + Phase2Rad(const PdArgs& args); +}; + +class Rad2Phase : public SimpleConverter { +public: + Rad2Phase(const PdArgs& args); +}; + +class Car2Pol : public BaseObject { +public: + Car2Pol(const PdArgs& args); + void onList(const AtomList& lst) override; +}; + +class Pol2Car : public BaseObject { +public: + Pol2Car(const PdArgs& args); + void onList(const AtomList& lst) override; +}; + +class Phase2RadTilde : public SimpleConverterTilde { +public: + Phase2RadTilde(const PdArgs& args); +}; + +class Rad2PhaseTilde : public SimpleConverterTilde { +public: + Rad2PhaseTilde(const PdArgs& args); +}; + +void setup_conv_angles(); + +#endif // CONV_ANGLES_H diff --git a/ceammc/ext/src/conv/conv_lin2lin.cpp b/ceammc/ext/src/conv/conv_lin2lin.cpp index a7794cbfe5..184e9ad225 100644 --- a/ceammc/ext/src/conv/conv_lin2lin.cpp +++ b/ceammc/ext/src/conv/conv_lin2lin.cpp @@ -35,6 +35,23 @@ void Lin2Lin::onFloat(float value) floatTo(0, convert::lin2lin(value, x0, x1, y0, y1)); } +void Lin2Lin::onList(const AtomList& l) +{ + const t_float x0 = in_from(); + const t_float x1 = in_to(); + const t_float y0 = out_from(); + const t_float y1 = out_to(); + + auto fn = [this, x0, x1, y0, y1](t_float value) { + if (doClip(value)) + return value; + + return convert::lin2lin(value, x0, x1, y0, y1); + }; + + listTo(0, l.mapFloat(fn)); +} + extern "C" void setup_conv0x2elin2lin() { ObjectFactory obj("conv.lin2lin"); diff --git a/ceammc/ext/src/conv/conv_lin2lin.h b/ceammc/ext/src/conv/conv_lin2lin.h index 6fa855db02..a608469001 100644 --- a/ceammc/ext/src/conv/conv_lin2lin.h +++ b/ceammc/ext/src/conv/conv_lin2lin.h @@ -22,6 +22,7 @@ class Lin2Lin : public BaseRangeConverter { public: Lin2Lin(const PdArgs& a); void onFloat(float value); + void onList(const AtomList& l); }; #endif // CONV_LIN2LIN_H diff --git a/ceammc/ext/src/conv/conv_list2props.cpp b/ceammc/ext/src/conv/conv_list2props.cpp index c62965ccca..cf118ef924 100644 --- a/ceammc/ext/src/conv/conv_list2props.cpp +++ b/ceammc/ext/src/conv/conv_list2props.cpp @@ -18,10 +18,21 @@ ConvList2Props::ConvList2Props(const PdArgs& args) : BaseObject(args) { createOutlet(); + createOutlet(); } void ConvList2Props::onList(const AtomList& lst) { + AtomList non_props; + for (auto& a : lst) { + if (a.isProperty()) + break; + + non_props.append(a); + } + + listTo(1, non_props); + auto props = lst.properties(); for (auto& l : props) anyTo(0, l); diff --git a/ceammc/ext/src/conv/mod_conv.cpp b/ceammc/ext/src/conv/mod_conv.cpp index 4fc57b0e40..38907c1da3 100644 --- a/ceammc/ext/src/conv/mod_conv.cpp +++ b/ceammc/ext/src/conv/mod_conv.cpp @@ -19,6 +19,8 @@ extern "C" void setup_conv0x2ebpm2ms(); extern "C" void setup_conv0x2ebpm2sec(); extern "C" void setup_conv0x2ebpm2hz(); +extern void setup_conv_angles(); + void ceammc_conv_setup() { setup_conv0x2esec2str(); @@ -42,4 +44,6 @@ void ceammc_conv_setup() setup_conv_midi2freq(); setup_list_to_props(); + + setup_conv_angles(); } diff --git a/ceammc/ext/src/conv/simple_converter.h b/ceammc/ext/src/conv/simple_converter.h new file mode 100644 index 0000000000..4f3e8ee9d7 --- /dev/null +++ b/ceammc/ext/src/conv/simple_converter.h @@ -0,0 +1,82 @@ +/***************************************************************************** + * Copyright 2019 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#ifndef SIMPLE_CONVERTER_H +#define SIMPLE_CONVERTER_H + +#include + +#include "ceammc_object.h" +#include "ceammc_sound_external.h" +using namespace ceammc; + +class SimpleConverter : public BaseObject { + std::function fn_; + +public: + template + SimpleConverter(const PdArgs& args, Fn fn) + : BaseObject(args) + , fn_(fn) + { + createOutlet(); + } + + void onFloat(t_float v) override + { + floatTo(0, fn_(v)); + } + + void onList(const AtomList& l) override + { + AtomList res; + res.reserve(l.size()); + + for (auto& a : l) { + res.append(Atom(fn_(a.asFloat()))); + } + + listTo(0, res); + } +}; + +class SimpleConverterTilde : public SoundExternal { + std::function fn_; + +public: + template + SimpleConverterTilde(const PdArgs& args, Fn fn) + : SoundExternal(args) + , fn_(fn) + { + createSignalOutlet(); + } + + void processBlock(const t_sample** in, t_sample** out) override + { + const size_t BS = blockSize(); + + for (size_t i = 0; i < BS; i += 8) { + out[0][i + 0] = fn_(in[0][i + 0]); + out[0][i + 1] = fn_(in[0][i + 1]); + out[0][i + 2] = fn_(in[0][i + 2]); + out[0][i + 3] = fn_(in[0][i + 3]); + out[0][i + 4] = fn_(in[0][i + 4]); + out[0][i + 5] = fn_(in[0][i + 5]); + out[0][i + 6] = fn_(in[0][i + 6]); + out[0][i + 7] = fn_(in[0][i + 7]); + } + } +}; + +#endif // SIMPLE_CONVERTER_H diff --git a/ceammc/ext/src/cppcheck.cmake b/ceammc/ext/src/cppcheck.cmake index 33daae3f35..f9f8096895 100644 --- a/ceammc/ext/src/cppcheck.cmake +++ b/ceammc/ext/src/cppcheck.cmake @@ -6,37 +6,50 @@ if(APPLE) set(HTML_OPEN "open") endif() -file(GLOB_RECURSE CEAMMC_ALL_SOURCE_FILES "*.cpp" "*.h") - if(CPPCHECK) - message(STATUS "CppCheck found: ${CPPCHECK}. The 'ceammc_cppcheck' make target is available.") + message(STATUS "CppCheck found: ${CPPCHECK}. The 'cppcheck' make target is available.") + + list(APPEND _CPPCHECK_FLAGS -DHAVE_DIRENT_H -DPD_FLOATSIZE=32) + if(APPLE) + list(APPEND _CPPCHECK_FLAGS -U_WINDOWS -U_MSC_VER -U_WIN32 -U__WIN32 -D__MACH__ -D__APPLE__ -D__MAC_OS_X_VERSION_MIN_REQUIRED=1090) + endif() - add_custom_command( - OUTPUT cppcheck_result.xml - DEPENDS ${CEAMMC_ALL_SOURCE_FILES} + add_custom_target( + ceammc_cppcheck COMMAND ${CPPCHECK} ${CMAKE_CURRENT_SOURCE_DIR} --enable=warning,performance,portability,information,missingInclude - -i tests/Catch - -i src/rtmidi + --suppressions-list=${PROJECT_SOURCE_DIR}/ceammc/cppcheck_suppressions.txt -i src/proto/firmata/firmata_bison.tab.c - -i src/data/rapidjson - -i src/data/rapidjson/document.h - -i src/lib/utf8rewind - -i src/exp - --std=c++03 + -i data/rapidjson + -i data/rapidjson/document.h + -i lib/dict_parser.tab.c + -i lib/lex.dict_parser.c + -i lib/lex.mlist_parser.c + -i lib/mlist_parser.tab.c + -i lib/utf8rewind + -i math/lex.math_expr.c + -i math/math_expr.tab.c + -i lib/dict_parser_impl.cpp + -i lib/mlist_parser_impl.cpp + -i exp/ + -i rtmidi/ + -i spat/Hoa_Tools.hpp + ${_CPPCHECK_FLAGS} + --std=c++11 --xml --xml-version=2 - 2> cppcheck_result.xml + --output-file=${CMAKE_BINARY_DIR}/cppcheck_result.xml + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} ) add_custom_target( - ceammc_cppcheck - DEPENDS cppcheck_result.xml + cppcheck + DEPENDS ceammc_cppcheck COMMAND ${CPPCHECK_HTML} - --file cppcheck_result.xml + --file ${CMAKE_BINARY_DIR}/cppcheck_result.xml --source-dir "${CMAKE_CURRENT_SOURCE_DIR}" - --report-dir cppcheck_html - COMMAND ${HTML_OPEN} cppcheck_html/index.html + --report-dir ${CMAKE_BINARY_DIR}/cppcheck_html + COMMAND ${HTML_OPEN} ${CMAKE_BINARY_DIR}/cppcheck_html/index.html ) endif() diff --git a/ceammc/ext/src/data/data_dict.cpp b/ceammc/ext/src/data/data_dict.cpp index b3f6558ff0..369f727a61 100644 --- a/ceammc/ext/src/data/data_dict.cpp +++ b/ceammc/ext/src/data/data_dict.cpp @@ -12,7 +12,6 @@ * this file belongs to. *****************************************************************************/ #include "data_dict.h" -#include "ceammc_factory.h" DataDict::DataDict(const PdArgs& args) : DictIFace(args) diff --git a/ceammc/ext/src/data/data_fifo.cpp b/ceammc/ext/src/data/data_fifo.cpp index fcc35da5df..a091b409ed 100644 --- a/ceammc/ext/src/data/data_fifo.cpp +++ b/ceammc/ext/src/data/data_fifo.cpp @@ -26,10 +26,25 @@ class DataFifo : public BaseObject { size_ = args.args.asSizeT(DEFAULT_SIZE); createOutlet(); - createCbProperty("@empty", &DataFifo::p_empty); - createCbProperty("@filled", &DataFifo::p_size); - createCbProperty("@size", &DataFifo::p_max_size); - createCbProperty("@free", &DataFifo::p_free); + { + auto p = createCbProperty("@empty", &DataFifo::p_empty); + p->info().setType(PropertyInfoType::BOOLEAN); + } + + { + Property* p = createCbProperty("@filled", &DataFifo::p_size); + p->info().setType(PropertyInfoType::INTEGER); + } + + { + Property* p = createCbProperty("@size", &DataFifo::p_max_size); + p->info().setType(PropertyInfoType::INTEGER); + } + + { + Property* p = createCbProperty("@free", &DataFifo::p_free); + p->info().setType(PropertyInfoType::INTEGER); + } } void onBang() { flush(); } diff --git a/ceammc/ext/src/data/data_float.cpp b/ceammc/ext/src/data/data_float.cpp index 3b57c6a91b..79f5f47287 100644 --- a/ceammc/ext/src/data/data_float.cpp +++ b/ceammc/ext/src/data/data_float.cpp @@ -19,6 +19,8 @@ DataFloat::DataFloat(const PdArgs& a) { createInlet(); createOutlet(); + + property("@value")->info().setType(PropertyInfoType::FLOAT); } void setup_data_float() diff --git a/ceammc/ext/src/data/data_int.cpp b/ceammc/ext/src/data/data_int.cpp index 9c0d2e4261..19867afa4d 100644 --- a/ceammc/ext/src/data/data_int.cpp +++ b/ceammc/ext/src/data/data_int.cpp @@ -19,6 +19,8 @@ DataInt::DataInt(const PdArgs& a) { createInlet(); createOutlet(); + + property("@value")->info().setType(PropertyInfoType::INTEGER); } void setup_data_int() diff --git a/ceammc/ext/src/data/global_base.h b/ceammc/ext/src/data/global_base.h index 72f22fc00b..a13f39d252 100644 --- a/ceammc/ext/src/data/global_base.h +++ b/ceammc/ext/src/data/global_base.h @@ -23,21 +23,37 @@ namespace ceammc { template class GlobalBase : public BaseObject { GlobalData data_; - GlobalBase(const GlobalBase&); - void operator=(const GlobalBase&); + GlobalBase(const GlobalBase&) = delete; + void operator=(const GlobalBase&) = delete; + + static t_symbol* to_symbol(const Atom& a) + { + if (a.isSymbol()) + return a.asSymbol(); + else + return gensym(to_string(a).c_str()); + } + + static t_symbol* arg_id(const AtomList& args) + { + if (args.empty()) + return gensym("default"); + else + return to_symbol(args[0]); + } public: GlobalBase(const PdArgs& a) : BaseObject(a) - , data_(a.args.empty() ? "default" : to_string(a.args[0]), a.className->s_name) + , data_(arg_id(a.args), a.className->s_name) { if (positionalArguments().empty()) - OBJ_DBG << "global object ID required! Using default id: \"" << data_.name() << '"'; + OBJ_DBG << "global object ID required! Using default id: \"" << data_.name()->s_name << '"'; createOutlet(); - createCbProperty("@id", &GlobalBase::m_id); - createCbProperty("@obj_refs", &GlobalBase::m_refs); - createCbProperty("@obj_keys", &GlobalBase::m_keys); + createCbProperty("@.id", &GlobalBase::m_id); + createCbProperty("@.obj_refs", &GlobalBase::m_refs); + createCbProperty("@.obj_keys", &GlobalBase::m_keys); } T& ref() { return data_.ref(); } @@ -52,9 +68,15 @@ class GlobalBase : public BaseObject { AtomList m_keys() const { - std::vector keys; + std::vector keys; data_.keys(keys); - return listFrom(keys); + + AtomList res; + res.reserve(keys.size()); + for (auto s : keys) + res.append(Atom(s)); + + return res; } AtomList m_refs() const diff --git a/ceammc/ext/src/data/global_float.cpp b/ceammc/ext/src/data/global_float.cpp index 8e64187c84..4cb18aa8e3 100644 --- a/ceammc/ext/src/data/global_float.cpp +++ b/ceammc/ext/src/data/global_float.cpp @@ -4,6 +4,7 @@ GlobalFloat::GlobalFloat(const PdArgs& a) : GlobalFloatBase(a) { + property("@value")->info().setType(PropertyInfoType::FLOAT); } void setup_global_float() diff --git a/ceammc/ext/src/data/global_int.cpp b/ceammc/ext/src/data/global_int.cpp index efd7548992..da671f3453 100644 --- a/ceammc/ext/src/data/global_int.cpp +++ b/ceammc/ext/src/data/global_int.cpp @@ -4,6 +4,7 @@ GlobalInt::GlobalInt(const PdArgs& a) : GlobalIntBase(a) { + property("@value")->info().setType(PropertyInfoType::INTEGER); } void setup_global_int() diff --git a/ceammc/ext/src/data/local_float.cpp b/ceammc/ext/src/data/local_float.cpp index 3b1979bfc5..f31f5d7c9b 100644 --- a/ceammc/ext/src/data/local_float.cpp +++ b/ceammc/ext/src/data/local_float.cpp @@ -4,6 +4,7 @@ LocalFloat::LocalFloat(const PdArgs& a) : LocalFloatBase(a) { + property("@value")->info().setType(PropertyInfoType::FLOAT); } void setup_local_float() diff --git a/ceammc/ext/src/data/local_int.cpp b/ceammc/ext/src/data/local_int.cpp index ba6923c97e..deefd720ec 100644 --- a/ceammc/ext/src/data/local_int.cpp +++ b/ceammc/ext/src/data/local_int.cpp @@ -3,6 +3,7 @@ LocalInt::LocalInt(const PdArgs& a) : LocalIntBase(a) { + property("@value")->info().setType(PropertyInfoType::INTEGER); } void setup_local_int() diff --git a/ceammc/ext/src/dyn/dyn_comp.h b/ceammc/ext/src/dyn/dyn_comp.h index 56010cb59f..5b5f5623d3 100644 --- a/ceammc/ext/src/dyn/dyn_comp.h +++ b/ceammc/ext/src/dyn/dyn_comp.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "dyn.comp" -Code generated with Faust 2.15.10 (https://faust.grame.fr) -Compilation options: cpp, -scal -ftz 0 +Code generated with Faust 2.22.1 (https://faust.grame.fr) +Compilation options: -lang cpp -scal -ftz 0 ------------------------------------------------------------ */ #ifndef __dyn_comp_H__ @@ -14,6 +14,7 @@ Compilation options: cpp, -scal -ftz 0 #include #include +/************************** BEGIN dsp.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -96,23 +97,23 @@ class dsp { * - static class 'classInit': static tables initialization * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void init(int samplingRate) = 0; + virtual void init(int sample_rate) = 0; /** * Init instance state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceInit(int samplingRate) = 0; + virtual void instanceInit(int sample_rate) = 0; /** * Init instance constant state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceConstants(int samplingRate) = 0; + virtual void instanceConstants(int sample_rate) = 0; /* Init default control parameters values */ virtual void instanceResetUserInterface() = 0; @@ -149,8 +150,8 @@ class dsp { * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the number of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) * */ virtual void compute(double /*date_usec*/, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -169,16 +170,16 @@ class decorator_dsp : public dsp { public: - decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + decorator_dsp(dsp* dsp = nullptr):fDSP(dsp) {} virtual ~decorator_dsp() { delete fDSP; } virtual int getNumInputs() { return fDSP->getNumInputs(); } virtual int getNumOutputs() { return fDSP->getNumOutputs(); } virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } virtual int getSampleRate() { return fDSP->getSampleRate(); } - virtual void init(int samplingRate) { fDSP->init(samplingRate); } - virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } - virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void init(int sample_rate) { fDSP->init(sample_rate); } + virtual void instanceInit(int sample_rate) { fDSP->instanceInit(sample_rate); } + virtual void instanceConstants(int sample_rate) { fDSP->instanceConstants(sample_rate); } virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } @@ -233,6 +234,8 @@ class dsp_factory { #endif #endif +/************************** END dsp.h **************************/ +/************************** BEGIN UI.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -272,45 +275,54 @@ class dsp_factory { struct Soundfile; -class UI +template +class UIReal { - + public: - - UI() {} - - virtual ~UI() {} - + + UIReal() {} + virtual ~UIReal() {} + // -- widget's layouts - + virtual void openTabBox(const char* label) = 0; virtual void openHorizontalBox(const char* label) = 0; virtual void openVerticalBox(const char* label) = 0; virtual void closeBox() = 0; - + // -- active widgets - - virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - + + virtual void addButton(const char* label, REAL* zone) = 0; + virtual void addCheckButton(const char* label, REAL* zone) = 0; + virtual void addVerticalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addHorizontalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addNumEntry(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + // -- passive widgets - - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - + + virtual void addHorizontalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + virtual void addVerticalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + // -- soundfiles - + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; - + // -- metadata declarations + + virtual void declare(REAL* zone, const char* key, const char* val) {} +}; - virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +struct UI : public UIReal +{ + + UI() {} + virtual ~UI() {} }; #endif +/************************** END UI.h **************************/ +/************************** BEGIN meta.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -339,11 +351,14 @@ class UI struct Meta { - virtual void declare(const char* key, const char* value) = 0; virtual ~Meta() {}; + virtual void declare(const char* key, const char* value) = 0; + }; #endif +/************************** END meta.h **************************/ +/************************** BEGIN misc.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -366,7 +381,7 @@ struct Meta that work under terms of your choice, so long as this FAUST architecture section is not modified. ************************************************************************/ - + #ifndef __misc__ #define __misc__ @@ -374,6 +389,8 @@ struct Meta #include #include #include +#include +#include using std::max; @@ -395,27 +412,65 @@ static int int2pow2(int x) { int r = 0; while ((1<declare("analyzers.lib/name", "Faust Analyzer Library"); m->declare("analyzers.lib/version", "0.0"); m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.0"); + m->declare("basics.lib/version", "0.1"); m->declare("ceammc.lib/name", "Ceammc PureData misc utils"); m->declare("ceammc.lib/version", "0.1.1"); m->declare("compressors.lib/name", "Faust Compressor Effect Library"); m->declare("compressors.lib/version", "0.0"); - m->declare("filename", "dyn_comp"); + m->declare("filename", "dyn_comp.dsp"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); @@ -495,15 +549,13 @@ class dyn_comp : public dsp { virtual int getNumInputs() { return 1; - } virtual int getNumOutputs() { return 1; - } virtual int getInputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -512,14 +564,12 @@ class dyn_comp : public dsp { rate = -1; break; } - } return rate; - } virtual int getOutputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -528,22 +578,16 @@ class dyn_comp : public dsp { rate = -1; break; } - } return rate; - } - static void classInit(int samplingFreq) { - + static void classInit(int sample_rate) { } - virtual void instanceConstants(int samplingFreq) { - fSamplingFreq = samplingFreq; - fConst0 = std::min(192000.0f, std::max(1.0f, float(fSamplingFreq))); - fConst1 = (2000.0f / fConst0); - fConst2 = (1000.0f / fConst0); - + virtual void instanceConstants(int sample_rate) { + fSampleRate = sample_rate; + fConst0 = (1.0f / std::min(192000.0f, std::max(1.0f, float(fSampleRate)))); } virtual void instanceResetUserInterface() { @@ -551,32 +595,26 @@ class dyn_comp : public dsp { fVslider1 = FAUSTFLOAT(1.0f); fVslider2 = FAUSTFLOAT(50.0f); fVslider3 = FAUSTFLOAT(100.0f); - } virtual void instanceClear() { for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { fRec2[l0] = 0.0f; - } for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { fRec1[l1] = 0.0f; - } for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { fRec0[l2] = 0.0f; - } - } - virtual void init(int samplingFreq) { - classInit(samplingFreq); - instanceInit(samplingFreq); + virtual void init(int sample_rate) { + classInit(sample_rate); + instanceInit(sample_rate); } - - virtual void instanceInit(int samplingFreq) { - instanceConstants(samplingFreq); + virtual void instanceInit(int sample_rate) { + instanceConstants(sample_rate); instanceResetUserInterface(); instanceClear(); } @@ -586,8 +624,7 @@ class dyn_comp : public dsp { } virtual int getSampleRate() { - return fSamplingFreq; - + return fSampleRate; } virtual void buildUserInterface(UI* ui_interface) { @@ -600,32 +637,36 @@ class dyn_comp : public dsp { ui_interface->declare(&fVslider3, "unit", "db"); ui_interface->addVerticalSlider("threshold", &fVslider3, 100.0f, 0.0f, 100.0f, 0.100000001f); ui_interface->closeBox(); - } virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { FAUSTFLOAT* input0 = inputs[0]; FAUSTFLOAT* output0 = outputs[0]; float fSlow0 = float(fVslider0); - float fSlow1 = std::exp((0.0f - (fConst1 / fSlow0))); - float fSlow2 = (((1.0f / float(fVslider1)) + -1.0f) * (1.0f - fSlow1)); - float fSlow3 = std::exp((0.0f - (fConst2 / fSlow0))); - float fSlow4 = std::exp((0.0f - (fConst2 / float(fVslider2)))); - float fSlow5 = float(fVslider3); + float fSlow1 = (0.000500000024f * fSlow0); + int iSlow2 = (std::fabs(fSlow1) < 1.19999996e-07f); + float fSlow3 = (iSlow2 ? 0.0f : std::exp((0.0f - (fConst0 / (iSlow2 ? 1.0f : fSlow1))))); + float fSlow4 = ((1.0f / float(fVslider1)) + -1.0f); + float fSlow5 = (0.00100000005f * fSlow0); + int iSlow6 = (std::fabs(fSlow5) < 1.19999996e-07f); + float fSlow7 = (iSlow6 ? 0.0f : std::exp((0.0f - (fConst0 / (iSlow6 ? 1.0f : fSlow5))))); + float fSlow8 = (0.00100000005f * float(fVslider2)); + int iSlow9 = (std::fabs(fSlow8) < 1.19999996e-07f); + float fSlow10 = (iSlow9 ? 0.0f : std::exp((0.0f - (fConst0 / (iSlow9 ? 1.0f : fSlow8))))); + float fSlow11 = float(fVslider3); + float fSlow12 = (1.0f - fSlow3); for (int i = 0; (i < count); i = (i + 1)) { float fTemp0 = float(input0[i]); float fTemp1 = std::fabs(fTemp0); - float fTemp2 = ((fRec1[1] > fTemp1)?fSlow4:fSlow3); + float fTemp2 = ((fRec1[1] > fTemp1) ? fSlow10 : fSlow7); fRec2[0] = ((fRec2[1] * fTemp2) + (fTemp1 * (1.0f - fTemp2))); fRec1[0] = fRec2[0]; - fRec0[0] = ((fSlow1 * fRec0[1]) + (fSlow2 * std::max((((20.0f * std::log10(fRec1[0])) + 100.0f) - fSlow5), 0.0f))); + fRec0[0] = ((fRec0[1] * fSlow3) + (fSlow4 * (std::max((((20.0f * std::log10(fRec1[0])) + 100.0f) - fSlow11), 0.0f) * fSlow12))); output0[i] = FAUSTFLOAT((fTemp0 * std::pow(10.0f, (0.0500000007f * fRec0[0])))); fRec2[1] = fRec2[0]; fRec1[1] = fRec1[0]; fRec0[1] = fRec0[0]; - } - } }; diff --git a/ceammc/ext/src/dyn/dyn_comp2.h b/ceammc/ext/src/dyn/dyn_comp2.h index daa2d82975..ae21ee10e9 100644 --- a/ceammc/ext/src/dyn/dyn_comp2.h +++ b/ceammc/ext/src/dyn/dyn_comp2.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "dyn.comp2" -Code generated with Faust 2.15.10 (https://faust.grame.fr) -Compilation options: cpp, -scal -ftz 0 +Code generated with Faust 2.22.1 (https://faust.grame.fr) +Compilation options: -lang cpp -scal -ftz 0 ------------------------------------------------------------ */ #ifndef __dyn_comp2_H__ @@ -14,6 +14,7 @@ Compilation options: cpp, -scal -ftz 0 #include #include +/************************** BEGIN dsp.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -96,23 +97,23 @@ class dsp { * - static class 'classInit': static tables initialization * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void init(int samplingRate) = 0; + virtual void init(int sample_rate) = 0; /** * Init instance state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceInit(int samplingRate) = 0; + virtual void instanceInit(int sample_rate) = 0; /** * Init instance constant state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceConstants(int samplingRate) = 0; + virtual void instanceConstants(int sample_rate) = 0; /* Init default control parameters values */ virtual void instanceResetUserInterface() = 0; @@ -149,8 +150,8 @@ class dsp { * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the number of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) * */ virtual void compute(double /*date_usec*/, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -169,16 +170,16 @@ class decorator_dsp : public dsp { public: - decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + decorator_dsp(dsp* dsp = nullptr):fDSP(dsp) {} virtual ~decorator_dsp() { delete fDSP; } virtual int getNumInputs() { return fDSP->getNumInputs(); } virtual int getNumOutputs() { return fDSP->getNumOutputs(); } virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } virtual int getSampleRate() { return fDSP->getSampleRate(); } - virtual void init(int samplingRate) { fDSP->init(samplingRate); } - virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } - virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void init(int sample_rate) { fDSP->init(sample_rate); } + virtual void instanceInit(int sample_rate) { fDSP->instanceInit(sample_rate); } + virtual void instanceConstants(int sample_rate) { fDSP->instanceConstants(sample_rate); } virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } @@ -233,6 +234,8 @@ class dsp_factory { #endif #endif +/************************** END dsp.h **************************/ +/************************** BEGIN UI.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -272,45 +275,54 @@ class dsp_factory { struct Soundfile; -class UI +template +class UIReal { - + public: - - UI() {} - - virtual ~UI() {} - + + UIReal() {} + virtual ~UIReal() {} + // -- widget's layouts - + virtual void openTabBox(const char* label) = 0; virtual void openHorizontalBox(const char* label) = 0; virtual void openVerticalBox(const char* label) = 0; virtual void closeBox() = 0; - + // -- active widgets - - virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - + + virtual void addButton(const char* label, REAL* zone) = 0; + virtual void addCheckButton(const char* label, REAL* zone) = 0; + virtual void addVerticalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addHorizontalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addNumEntry(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + // -- passive widgets - - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - + + virtual void addHorizontalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + virtual void addVerticalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + // -- soundfiles - + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; - + // -- metadata declarations + + virtual void declare(REAL* zone, const char* key, const char* val) {} +}; - virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +struct UI : public UIReal +{ + + UI() {} + virtual ~UI() {} }; #endif +/************************** END UI.h **************************/ +/************************** BEGIN meta.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -339,11 +351,14 @@ class UI struct Meta { - virtual void declare(const char* key, const char* value) = 0; virtual ~Meta() {}; + virtual void declare(const char* key, const char* value) = 0; + }; #endif +/************************** END meta.h **************************/ +/************************** BEGIN misc.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -366,7 +381,7 @@ struct Meta that work under terms of your choice, so long as this FAUST architecture section is not modified. ************************************************************************/ - + #ifndef __misc__ #define __misc__ @@ -374,6 +389,8 @@ struct Meta #include #include #include +#include +#include using std::max; @@ -395,27 +412,65 @@ static int int2pow2(int x) { int r = 0; while ((1<declare("analyzers.lib/name", "Faust Analyzer Library"); m->declare("analyzers.lib/version", "0.0"); m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.0"); + m->declare("basics.lib/version", "0.1"); m->declare("ceammc.lib/name", "Ceammc PureData misc utils"); m->declare("ceammc.lib/version", "0.1.1"); m->declare("compressors.lib/name", "Faust Compressor Effect Library"); m->declare("compressors.lib/version", "0.0"); - m->declare("filename", "dyn_comp2"); + m->declare("filename", "dyn_comp2.dsp"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); @@ -495,15 +549,13 @@ class dyn_comp2 : public dsp { virtual int getNumInputs() { return 2; - } virtual int getNumOutputs() { return 2; - } virtual int getInputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -516,14 +568,12 @@ class dyn_comp2 : public dsp { rate = -1; break; } - } return rate; - } virtual int getOutputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -536,22 +586,16 @@ class dyn_comp2 : public dsp { rate = -1; break; } - } return rate; - } - static void classInit(int samplingFreq) { - + static void classInit(int sample_rate) { } - virtual void instanceConstants(int samplingFreq) { - fSamplingFreq = samplingFreq; - fConst0 = std::min(192000.0f, std::max(1.0f, float(fSamplingFreq))); - fConst1 = (2000.0f / fConst0); - fConst2 = (1000.0f / fConst0); - + virtual void instanceConstants(int sample_rate) { + fSampleRate = sample_rate; + fConst0 = (1.0f / std::min(192000.0f, std::max(1.0f, float(fSampleRate)))); } virtual void instanceResetUserInterface() { @@ -559,32 +603,26 @@ class dyn_comp2 : public dsp { fVslider1 = FAUSTFLOAT(1.0f); fVslider2 = FAUSTFLOAT(50.0f); fVslider3 = FAUSTFLOAT(100.0f); - } virtual void instanceClear() { for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { fRec2[l0] = 0.0f; - } for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { fRec1[l1] = 0.0f; - } for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { fRec0[l2] = 0.0f; - } - } - virtual void init(int samplingFreq) { - classInit(samplingFreq); - instanceInit(samplingFreq); + virtual void init(int sample_rate) { + classInit(sample_rate); + instanceInit(sample_rate); } - - virtual void instanceInit(int samplingFreq) { - instanceConstants(samplingFreq); + virtual void instanceInit(int sample_rate) { + instanceConstants(sample_rate); instanceResetUserInterface(); instanceClear(); } @@ -594,8 +632,7 @@ class dyn_comp2 : public dsp { } virtual int getSampleRate() { - return fSamplingFreq; - + return fSampleRate; } virtual void buildUserInterface(UI* ui_interface) { @@ -608,7 +645,6 @@ class dyn_comp2 : public dsp { ui_interface->declare(&fVslider3, "unit", "db"); ui_interface->addVerticalSlider("threshold", &fVslider3, 100.0f, 0.0f, 100.0f, 0.100000001f); ui_interface->closeBox(); - } virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { @@ -617,28 +653,33 @@ class dyn_comp2 : public dsp { FAUSTFLOAT* output0 = outputs[0]; FAUSTFLOAT* output1 = outputs[1]; float fSlow0 = float(fVslider0); - float fSlow1 = std::exp((0.0f - (fConst1 / fSlow0))); - float fSlow2 = (((1.0f / float(fVslider1)) + -1.0f) * (1.0f - fSlow1)); - float fSlow3 = std::exp((0.0f - (fConst2 / fSlow0))); - float fSlow4 = std::exp((0.0f - (fConst2 / float(fVslider2)))); - float fSlow5 = float(fVslider3); + float fSlow1 = (0.000500000024f * fSlow0); + int iSlow2 = (std::fabs(fSlow1) < 1.19999996e-07f); + float fSlow3 = (iSlow2 ? 0.0f : std::exp((0.0f - (fConst0 / (iSlow2 ? 1.0f : fSlow1))))); + float fSlow4 = ((1.0f / float(fVslider1)) + -1.0f); + float fSlow5 = (0.00100000005f * fSlow0); + int iSlow6 = (std::fabs(fSlow5) < 1.19999996e-07f); + float fSlow7 = (iSlow6 ? 0.0f : std::exp((0.0f - (fConst0 / (iSlow6 ? 1.0f : fSlow5))))); + float fSlow8 = (0.00100000005f * float(fVslider2)); + int iSlow9 = (std::fabs(fSlow8) < 1.19999996e-07f); + float fSlow10 = (iSlow9 ? 0.0f : std::exp((0.0f - (fConst0 / (iSlow9 ? 1.0f : fSlow8))))); + float fSlow11 = float(fVslider3); + float fSlow12 = (1.0f - fSlow3); for (int i = 0; (i < count); i = (i + 1)) { float fTemp0 = float(input0[i]); float fTemp1 = float(input1[i]); float fTemp2 = std::fabs((std::fabs(fTemp0) + std::fabs(fTemp1))); - float fTemp3 = ((fRec1[1] > fTemp2)?fSlow4:fSlow3); + float fTemp3 = ((fRec1[1] > fTemp2) ? fSlow10 : fSlow7); fRec2[0] = ((fRec2[1] * fTemp3) + (fTemp2 * (1.0f - fTemp3))); fRec1[0] = fRec2[0]; - fRec0[0] = ((fSlow1 * fRec0[1]) + (fSlow2 * std::max((((20.0f * std::log10(fRec1[0])) + 100.0f) - fSlow5), 0.0f))); + fRec0[0] = ((fRec0[1] * fSlow3) + (fSlow4 * (std::max((((20.0f * std::log10(fRec1[0])) + 100.0f) - fSlow11), 0.0f) * fSlow12))); float fTemp4 = std::pow(10.0f, (0.0500000007f * fRec0[0])); output0[i] = FAUSTFLOAT((fTemp0 * fTemp4)); output1[i] = FAUSTFLOAT((fTemp1 * fTemp4)); fRec2[1] = fRec2[0]; fRec1[1] = fRec1[0]; fRec0[1] = fRec0[0]; - } - } }; diff --git a/ceammc/ext/src/dyn/dyn_gate.h b/ceammc/ext/src/dyn/dyn_gate.h index 2791ef033f..2c67c94f44 100644 --- a/ceammc/ext/src/dyn/dyn_gate.h +++ b/ceammc/ext/src/dyn/dyn_gate.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "dyn.gate" -Code generated with Faust 2.15.10 (https://faust.grame.fr) -Compilation options: cpp, -scal -ftz 0 +Code generated with Faust 2.22.1 (https://faust.grame.fr) +Compilation options: -lang cpp -scal -ftz 0 ------------------------------------------------------------ */ #ifndef __dyn_gate_H__ @@ -14,6 +14,7 @@ Compilation options: cpp, -scal -ftz 0 #include #include +/************************** BEGIN dsp.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -96,23 +97,23 @@ class dsp { * - static class 'classInit': static tables initialization * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void init(int samplingRate) = 0; + virtual void init(int sample_rate) = 0; /** * Init instance state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceInit(int samplingRate) = 0; + virtual void instanceInit(int sample_rate) = 0; /** * Init instance constant state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceConstants(int samplingRate) = 0; + virtual void instanceConstants(int sample_rate) = 0; /* Init default control parameters values */ virtual void instanceResetUserInterface() = 0; @@ -149,8 +150,8 @@ class dsp { * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the number of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) * */ virtual void compute(double /*date_usec*/, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -169,16 +170,16 @@ class decorator_dsp : public dsp { public: - decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + decorator_dsp(dsp* dsp = nullptr):fDSP(dsp) {} virtual ~decorator_dsp() { delete fDSP; } virtual int getNumInputs() { return fDSP->getNumInputs(); } virtual int getNumOutputs() { return fDSP->getNumOutputs(); } virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } virtual int getSampleRate() { return fDSP->getSampleRate(); } - virtual void init(int samplingRate) { fDSP->init(samplingRate); } - virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } - virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void init(int sample_rate) { fDSP->init(sample_rate); } + virtual void instanceInit(int sample_rate) { fDSP->instanceInit(sample_rate); } + virtual void instanceConstants(int sample_rate) { fDSP->instanceConstants(sample_rate); } virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } @@ -233,6 +234,8 @@ class dsp_factory { #endif #endif +/************************** END dsp.h **************************/ +/************************** BEGIN UI.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -272,45 +275,54 @@ class dsp_factory { struct Soundfile; -class UI +template +class UIReal { - + public: - - UI() {} - - virtual ~UI() {} - + + UIReal() {} + virtual ~UIReal() {} + // -- widget's layouts - + virtual void openTabBox(const char* label) = 0; virtual void openHorizontalBox(const char* label) = 0; virtual void openVerticalBox(const char* label) = 0; virtual void closeBox() = 0; - + // -- active widgets - - virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - + + virtual void addButton(const char* label, REAL* zone) = 0; + virtual void addCheckButton(const char* label, REAL* zone) = 0; + virtual void addVerticalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addHorizontalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addNumEntry(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + // -- passive widgets - - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - + + virtual void addHorizontalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + virtual void addVerticalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + // -- soundfiles - + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; - + // -- metadata declarations + + virtual void declare(REAL* zone, const char* key, const char* val) {} +}; + +struct UI : public UIReal +{ - virtual void declare(FAUSTFLOAT*, const char*, const char*) {} + UI() {} + virtual ~UI() {} }; #endif +/************************** END UI.h **************************/ +/************************** BEGIN meta.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -339,11 +351,14 @@ class UI struct Meta { - virtual void declare(const char* key, const char* value) = 0; virtual ~Meta() {}; + virtual void declare(const char* key, const char* value) = 0; + }; #endif +/************************** END meta.h **************************/ +/************************** BEGIN misc.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -366,7 +381,7 @@ struct Meta that work under terms of your choice, so long as this FAUST architecture section is not modified. ************************************************************************/ - + #ifndef __misc__ #define __misc__ @@ -374,6 +389,8 @@ struct Meta #include #include #include +#include +#include using std::max; @@ -395,27 +412,65 @@ static int int2pow2(int x) { int r = 0; while ((1<declare("analyzers.lib/name", "Faust Analyzer Library"); m->declare("analyzers.lib/version", "0.0"); m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.0"); + m->declare("basics.lib/version", "0.1"); m->declare("ceammc.lib/name", "Ceammc PureData misc utils"); m->declare("ceammc.lib/version", "0.1.1"); - m->declare("filename", "dyn_gate"); + m->declare("filename", "dyn_gate.dsp"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); @@ -499,15 +554,13 @@ class dyn_gate : public dsp { virtual int getNumInputs() { return 1; - } virtual int getNumOutputs() { return 1; - } virtual int getInputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -516,14 +569,12 @@ class dyn_gate : public dsp { rate = -1; break; } - } return rate; - } virtual int getOutputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -532,23 +583,18 @@ class dyn_gate : public dsp { rate = -1; break; } - } return rate; - } - static void classInit(int samplingFreq) { - + static void classInit(int sample_rate) { } - virtual void instanceConstants(int samplingFreq) { - fSamplingFreq = samplingFreq; - fConst0 = std::min(192000.0f, std::max(1.0f, float(fSamplingFreq))); + virtual void instanceConstants(int sample_rate) { + fSampleRate = sample_rate; + fConst0 = std::min(192000.0f, std::max(1.0f, float(fSampleRate))); fConst1 = (1.0f / fConst0); fConst2 = (0.00100000005f * fConst0); - fConst3 = (1000.0f / fConst0); - } virtual void instanceResetUserInterface() { @@ -556,44 +602,35 @@ class dyn_gate : public dsp { fVslider1 = FAUSTFLOAT(20.0f); fVslider2 = FAUSTFLOAT(40.0f); fVslider3 = FAUSTFLOAT(100.0f); - } virtual void instanceClear() { for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { fRec3[l0] = 0.0f; - } for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { fRec4[l1] = 0.0f; - } for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { iVec0[l2] = 0; - } for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { iRec5[l3] = 0; - } for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { fRec1[l4] = 0.0f; - } for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { fRec0[l5] = 0.0f; - } - } - virtual void init(int samplingFreq) { - classInit(samplingFreq); - instanceInit(samplingFreq); + virtual void init(int sample_rate) { + classInit(sample_rate); + instanceInit(sample_rate); } - - virtual void instanceInit(int samplingFreq) { - instanceConstants(samplingFreq); + virtual void instanceInit(int sample_rate) { + instanceConstants(sample_rate); instanceResetUserInterface(); instanceClear(); } @@ -603,8 +640,7 @@ class dyn_gate : public dsp { } virtual int getSampleRate() { - return fSamplingFreq; - + return fSampleRate; } virtual void buildUserInterface(UI* ui_interface) { @@ -618,30 +654,33 @@ class dyn_gate : public dsp { ui_interface->declare(&fVslider2, "unit", "db"); ui_interface->addVerticalSlider("threshold", &fVslider2, 40.0f, 0.0f, 100.0f, 0.100000001f); ui_interface->closeBox(); - } virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { FAUSTFLOAT* input0 = inputs[0]; FAUSTFLOAT* output0 = outputs[0]; - float fSlow0 = float(fVslider0); - float fSlow1 = float(fVslider1); - float fSlow2 = std::exp((0.0f - (fConst1 / std::min((0.00100000005f * fSlow0), (0.00100000005f * fSlow1))))); - float fSlow3 = (1.0f - fSlow2); - float fSlow4 = (0.00100000005f * (float(fVslider2) + -100.0f)); - int iSlow5 = int((fConst2 * float(fVslider3))); - float fSlow6 = std::exp((0.0f - (fConst3 / fSlow0))); - float fSlow7 = std::exp((0.0f - (fConst3 / fSlow1))); + float fSlow0 = (0.00100000005f * float(fVslider0)); + float fSlow1 = (0.00100000005f * float(fVslider1)); + float fSlow2 = std::min(fSlow0, fSlow1); + int iSlow3 = (std::fabs(fSlow2) < 1.19999996e-07f); + float fSlow4 = (iSlow3 ? 0.0f : std::exp((0.0f - (fConst1 / (iSlow3 ? 1.0f : fSlow2))))); + float fSlow5 = (1.0f - fSlow4); + float fSlow6 = (0.00100000005f * (float(fVslider2) + -100.0f)); + int iSlow7 = int((fConst2 * float(fVslider3))); + int iSlow8 = (std::fabs(fSlow0) < 1.19999996e-07f); + float fSlow9 = (iSlow8 ? 0.0f : std::exp((0.0f - (fConst1 / (iSlow8 ? 1.0f : fSlow0))))); + int iSlow10 = (std::fabs(fSlow1) < 1.19999996e-07f); + float fSlow11 = (iSlow10 ? 0.0f : std::exp((0.0f - (fConst1 / (iSlow10 ? 1.0f : fSlow1))))); for (int i = 0; (i < count); i = (i + 1)) { float fTemp0 = float(input0[i]); - fRec3[0] = ((fSlow2 * fRec3[1]) + (fSlow3 * std::fabs(fTemp0))); + fRec3[0] = ((fRec3[1] * fSlow4) + (std::fabs(fTemp0) * fSlow5)); float fRec2 = fRec3[0]; - fRec4[0] = (fSlow4 + (0.999000013f * fRec4[1])); + fRec4[0] = (fSlow6 + (0.999000013f * fRec4[1])); int iTemp1 = (fRec2 > std::pow(10.0f, (0.0500000007f * fRec4[0]))); iVec0[0] = iTemp1; - iRec5[0] = std::max(int((iSlow5 * (iTemp1 < iVec0[1]))), int((iRec5[1] + -1))); + iRec5[0] = std::max(int((iSlow7 * (iTemp1 < iVec0[1]))), int((iRec5[1] + -1))); float fTemp2 = std::fabs(std::max(float(iTemp1), float((iRec5[0] > 0)))); - float fTemp3 = ((fRec0[1] > fTemp2)?fSlow7:fSlow6); + float fTemp3 = ((fRec0[1] > fTemp2) ? fSlow11 : fSlow9); fRec1[0] = ((fRec1[1] * fTemp3) + (fTemp2 * (1.0f - fTemp3))); fRec0[0] = fRec1[0]; output0[i] = FAUSTFLOAT((fTemp0 * fRec0[0])); @@ -651,9 +690,7 @@ class dyn_gate : public dsp { iRec5[1] = iRec5[0]; fRec1[1] = fRec1[0]; fRec0[1] = fRec0[0]; - } - } }; diff --git a/ceammc/ext/src/dyn/dyn_gate2.h b/ceammc/ext/src/dyn/dyn_gate2.h index ccadcc862c..d10b0c4c0c 100644 --- a/ceammc/ext/src/dyn/dyn_gate2.h +++ b/ceammc/ext/src/dyn/dyn_gate2.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "dyn.gate2" -Code generated with Faust 2.15.10 (https://faust.grame.fr) -Compilation options: cpp, -scal -ftz 0 +Code generated with Faust 2.22.1 (https://faust.grame.fr) +Compilation options: -lang cpp -scal -ftz 0 ------------------------------------------------------------ */ #ifndef __dyn_gate2_H__ @@ -14,6 +14,7 @@ Compilation options: cpp, -scal -ftz 0 #include #include +/************************** BEGIN dsp.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -96,23 +97,23 @@ class dsp { * - static class 'classInit': static tables initialization * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void init(int samplingRate) = 0; + virtual void init(int sample_rate) = 0; /** * Init instance state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceInit(int samplingRate) = 0; + virtual void instanceInit(int sample_rate) = 0; /** * Init instance constant state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceConstants(int samplingRate) = 0; + virtual void instanceConstants(int sample_rate) = 0; /* Init default control parameters values */ virtual void instanceResetUserInterface() = 0; @@ -149,8 +150,8 @@ class dsp { * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the number of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) * */ virtual void compute(double /*date_usec*/, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -169,16 +170,16 @@ class decorator_dsp : public dsp { public: - decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + decorator_dsp(dsp* dsp = nullptr):fDSP(dsp) {} virtual ~decorator_dsp() { delete fDSP; } virtual int getNumInputs() { return fDSP->getNumInputs(); } virtual int getNumOutputs() { return fDSP->getNumOutputs(); } virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } virtual int getSampleRate() { return fDSP->getSampleRate(); } - virtual void init(int samplingRate) { fDSP->init(samplingRate); } - virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } - virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void init(int sample_rate) { fDSP->init(sample_rate); } + virtual void instanceInit(int sample_rate) { fDSP->instanceInit(sample_rate); } + virtual void instanceConstants(int sample_rate) { fDSP->instanceConstants(sample_rate); } virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } @@ -233,6 +234,8 @@ class dsp_factory { #endif #endif +/************************** END dsp.h **************************/ +/************************** BEGIN UI.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -272,45 +275,54 @@ class dsp_factory { struct Soundfile; -class UI +template +class UIReal { - + public: - - UI() {} - - virtual ~UI() {} - + + UIReal() {} + virtual ~UIReal() {} + // -- widget's layouts - + virtual void openTabBox(const char* label) = 0; virtual void openHorizontalBox(const char* label) = 0; virtual void openVerticalBox(const char* label) = 0; virtual void closeBox() = 0; - + // -- active widgets - - virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - + + virtual void addButton(const char* label, REAL* zone) = 0; + virtual void addCheckButton(const char* label, REAL* zone) = 0; + virtual void addVerticalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addHorizontalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addNumEntry(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + // -- passive widgets - - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - + + virtual void addHorizontalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + virtual void addVerticalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + // -- soundfiles - + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; - + // -- metadata declarations + + virtual void declare(REAL* zone, const char* key, const char* val) {} +}; + +struct UI : public UIReal +{ - virtual void declare(FAUSTFLOAT*, const char*, const char*) {} + UI() {} + virtual ~UI() {} }; #endif +/************************** END UI.h **************************/ +/************************** BEGIN meta.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -339,11 +351,14 @@ class UI struct Meta { - virtual void declare(const char* key, const char* value) = 0; virtual ~Meta() {}; + virtual void declare(const char* key, const char* value) = 0; + }; #endif +/************************** END meta.h **************************/ +/************************** BEGIN misc.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -366,7 +381,7 @@ struct Meta that work under terms of your choice, so long as this FAUST architecture section is not modified. ************************************************************************/ - + #ifndef __misc__ #define __misc__ @@ -374,6 +389,8 @@ struct Meta #include #include #include +#include +#include using std::max; @@ -395,27 +412,65 @@ static int int2pow2(int x) { int r = 0; while ((1<declare("analyzers.lib/name", "Faust Analyzer Library"); m->declare("analyzers.lib/version", "0.0"); m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.0"); + m->declare("basics.lib/version", "0.1"); m->declare("ceammc.lib/name", "Ceammc PureData misc utils"); m->declare("ceammc.lib/version", "0.1.1"); - m->declare("filename", "dyn_gate2"); + m->declare("filename", "dyn_gate2.dsp"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); @@ -499,15 +554,13 @@ class dyn_gate2 : public dsp { virtual int getNumInputs() { return 2; - } virtual int getNumOutputs() { return 2; - } virtual int getInputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -520,14 +573,12 @@ class dyn_gate2 : public dsp { rate = -1; break; } - } return rate; - } virtual int getOutputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -540,23 +591,18 @@ class dyn_gate2 : public dsp { rate = -1; break; } - } return rate; - } - static void classInit(int samplingFreq) { - + static void classInit(int sample_rate) { } - virtual void instanceConstants(int samplingFreq) { - fSamplingFreq = samplingFreq; - fConst0 = std::min(192000.0f, std::max(1.0f, float(fSamplingFreq))); + virtual void instanceConstants(int sample_rate) { + fSampleRate = sample_rate; + fConst0 = std::min(192000.0f, std::max(1.0f, float(fSampleRate))); fConst1 = (1.0f / fConst0); fConst2 = (0.00100000005f * fConst0); - fConst3 = (1000.0f / fConst0); - } virtual void instanceResetUserInterface() { @@ -564,44 +610,35 @@ class dyn_gate2 : public dsp { fVslider1 = FAUSTFLOAT(20.0f); fVslider2 = FAUSTFLOAT(40.0f); fVslider3 = FAUSTFLOAT(100.0f); - } virtual void instanceClear() { for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { fRec3[l0] = 0.0f; - } for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { fRec4[l1] = 0.0f; - } for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { iVec0[l2] = 0; - } for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { iRec5[l3] = 0; - } for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { fRec1[l4] = 0.0f; - } for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { fRec0[l5] = 0.0f; - } - } - virtual void init(int samplingFreq) { - classInit(samplingFreq); - instanceInit(samplingFreq); + virtual void init(int sample_rate) { + classInit(sample_rate); + instanceInit(sample_rate); } - - virtual void instanceInit(int samplingFreq) { - instanceConstants(samplingFreq); + virtual void instanceInit(int sample_rate) { + instanceConstants(sample_rate); instanceResetUserInterface(); instanceClear(); } @@ -611,8 +648,7 @@ class dyn_gate2 : public dsp { } virtual int getSampleRate() { - return fSamplingFreq; - + return fSampleRate; } virtual void buildUserInterface(UI* ui_interface) { @@ -626,7 +662,6 @@ class dyn_gate2 : public dsp { ui_interface->declare(&fVslider2, "unit", "db"); ui_interface->addVerticalSlider("threshold", &fVslider2, 40.0f, 0.0f, 100.0f, 0.100000001f); ui_interface->closeBox(); - } virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { @@ -634,25 +669,29 @@ class dyn_gate2 : public dsp { FAUSTFLOAT* input1 = inputs[1]; FAUSTFLOAT* output0 = outputs[0]; FAUSTFLOAT* output1 = outputs[1]; - float fSlow0 = float(fVslider0); - float fSlow1 = float(fVslider1); - float fSlow2 = std::exp((0.0f - (fConst1 / std::min((0.00100000005f * fSlow0), (0.00100000005f * fSlow1))))); - float fSlow3 = (1.0f - fSlow2); - float fSlow4 = (0.00100000005f * (float(fVslider2) + -100.0f)); - int iSlow5 = int((fConst2 * float(fVslider3))); - float fSlow6 = std::exp((0.0f - (fConst3 / fSlow0))); - float fSlow7 = std::exp((0.0f - (fConst3 / fSlow1))); + float fSlow0 = (0.00100000005f * float(fVslider0)); + float fSlow1 = (0.00100000005f * float(fVslider1)); + float fSlow2 = std::min(fSlow0, fSlow1); + int iSlow3 = (std::fabs(fSlow2) < 1.19999996e-07f); + float fSlow4 = (iSlow3 ? 0.0f : std::exp((0.0f - (fConst1 / (iSlow3 ? 1.0f : fSlow2))))); + float fSlow5 = (1.0f - fSlow4); + float fSlow6 = (0.00100000005f * (float(fVslider2) + -100.0f)); + int iSlow7 = int((fConst2 * float(fVslider3))); + int iSlow8 = (std::fabs(fSlow0) < 1.19999996e-07f); + float fSlow9 = (iSlow8 ? 0.0f : std::exp((0.0f - (fConst1 / (iSlow8 ? 1.0f : fSlow0))))); + int iSlow10 = (std::fabs(fSlow1) < 1.19999996e-07f); + float fSlow11 = (iSlow10 ? 0.0f : std::exp((0.0f - (fConst1 / (iSlow10 ? 1.0f : fSlow1))))); for (int i = 0; (i < count); i = (i + 1)) { float fTemp0 = float(input0[i]); float fTemp1 = float(input1[i]); - fRec3[0] = ((fSlow2 * fRec3[1]) + (fSlow3 * std::fabs((std::fabs(fTemp0) + std::fabs(fTemp1))))); + fRec3[0] = ((fRec3[1] * fSlow4) + (std::fabs((std::fabs(fTemp0) + std::fabs(fTemp1))) * fSlow5)); float fRec2 = fRec3[0]; - fRec4[0] = (fSlow4 + (0.999000013f * fRec4[1])); + fRec4[0] = (fSlow6 + (0.999000013f * fRec4[1])); int iTemp2 = (fRec2 > std::pow(10.0f, (0.0500000007f * fRec4[0]))); iVec0[0] = iTemp2; - iRec5[0] = std::max(int((iSlow5 * (iTemp2 < iVec0[1]))), int((iRec5[1] + -1))); + iRec5[0] = std::max(int((iSlow7 * (iTemp2 < iVec0[1]))), int((iRec5[1] + -1))); float fTemp3 = std::fabs(std::max(float(iTemp2), float((iRec5[0] > 0)))); - float fTemp4 = ((fRec0[1] > fTemp3)?fSlow7:fSlow6); + float fTemp4 = ((fRec0[1] > fTemp3) ? fSlow11 : fSlow9); fRec1[0] = ((fRec1[1] * fTemp4) + (fTemp3 * (1.0f - fTemp4))); fRec0[0] = fRec1[0]; output0[i] = FAUSTFLOAT((fTemp0 * fRec0[0])); @@ -663,9 +702,7 @@ class dyn_gate2 : public dsp { iRec5[1] = iRec5[0]; fRec1[1] = fRec1[0]; fRec0[1] = fRec0[0]; - } - } }; diff --git a/ceammc/ext/src/dyn/dyn_limit.h b/ceammc/ext/src/dyn/dyn_limit.h index 1d63e665c3..7cb4893798 100644 --- a/ceammc/ext/src/dyn/dyn_limit.h +++ b/ceammc/ext/src/dyn/dyn_limit.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "dyn_limit" -Code generated with Faust 2.15.10 (https://faust.grame.fr) -Compilation options: cpp, -scal -ftz 0 +Code generated with Faust 2.22.1 (https://faust.grame.fr) +Compilation options: -lang cpp -scal -ftz 0 ------------------------------------------------------------ */ #ifndef __limit_H__ @@ -39,6 +39,7 @@ Compilation options: cpp, -scal -ftz 0 #include #include +/************************** BEGIN dsp.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -121,23 +122,23 @@ class dsp { * - static class 'classInit': static tables initialization * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void init(int samplingRate) = 0; + virtual void init(int sample_rate) = 0; /** * Init instance state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceInit(int samplingRate) = 0; + virtual void instanceInit(int sample_rate) = 0; /** * Init instance constant state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceConstants(int samplingRate) = 0; + virtual void instanceConstants(int sample_rate) = 0; /* Init default control parameters values */ virtual void instanceResetUserInterface() = 0; @@ -174,8 +175,8 @@ class dsp { * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the number of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) * */ virtual void compute(double /*date_usec*/, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -194,16 +195,16 @@ class decorator_dsp : public dsp { public: - decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + decorator_dsp(dsp* dsp = nullptr):fDSP(dsp) {} virtual ~decorator_dsp() { delete fDSP; } virtual int getNumInputs() { return fDSP->getNumInputs(); } virtual int getNumOutputs() { return fDSP->getNumOutputs(); } virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } virtual int getSampleRate() { return fDSP->getSampleRate(); } - virtual void init(int samplingRate) { fDSP->init(samplingRate); } - virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } - virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void init(int sample_rate) { fDSP->init(sample_rate); } + virtual void instanceInit(int sample_rate) { fDSP->instanceInit(sample_rate); } + virtual void instanceConstants(int sample_rate) { fDSP->instanceConstants(sample_rate); } virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } @@ -258,6 +259,8 @@ class dsp_factory { #endif #endif +/************************** END dsp.h **************************/ +/************************** BEGIN UI.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -297,45 +300,54 @@ class dsp_factory { struct Soundfile; -class UI +template +class UIReal { - + public: - - UI() {} - - virtual ~UI() {} - + + UIReal() {} + virtual ~UIReal() {} + // -- widget's layouts - + virtual void openTabBox(const char* label) = 0; virtual void openHorizontalBox(const char* label) = 0; virtual void openVerticalBox(const char* label) = 0; virtual void closeBox() = 0; - + // -- active widgets - - virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - + + virtual void addButton(const char* label, REAL* zone) = 0; + virtual void addCheckButton(const char* label, REAL* zone) = 0; + virtual void addVerticalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addHorizontalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addNumEntry(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + // -- passive widgets - - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - + + virtual void addHorizontalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + virtual void addVerticalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + // -- soundfiles - + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; - + // -- metadata declarations + + virtual void declare(REAL* zone, const char* key, const char* val) {} +}; - virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +struct UI : public UIReal +{ + + UI() {} + virtual ~UI() {} }; #endif +/************************** END UI.h **************************/ +/************************** BEGIN meta.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -364,11 +376,14 @@ class UI struct Meta { - virtual void declare(const char* key, const char* value) = 0; virtual ~Meta() {}; + virtual void declare(const char* key, const char* value) = 0; + }; #endif +/************************** END meta.h **************************/ +/************************** BEGIN misc.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -391,7 +406,7 @@ struct Meta that work under terms of your choice, so long as this FAUST architecture section is not modified. ************************************************************************/ - + #ifndef __misc__ #define __misc__ @@ -399,6 +414,8 @@ struct Meta #include #include #include +#include +#include using std::max; @@ -420,27 +437,65 @@ static int int2pow2(int x) { int r = 0; while ((1<declare("analyzers.lib/name", "Faust Analyzer Library"); m->declare("analyzers.lib/version", "0.0"); m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.0"); + m->declare("basics.lib/version", "0.1"); m->declare("compressors.lib/name", "Faust Compressor Effect Library"); m->declare("compressors.lib/version", "0.0"); - m->declare("filename", "dyn_limit"); + m->declare("filename", "dyn_limit.dsp"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); @@ -543,15 +599,13 @@ class limit : public dsp { virtual int getNumInputs() { return 1; - } virtual int getNumOutputs() { return 1; - } virtual int getInputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -560,14 +614,12 @@ class limit : public dsp { rate = -1; break; } - } return rate; - } virtual int getOutputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -576,53 +628,43 @@ class limit : public dsp { rate = -1; break; } - } return rate; - } - static void classInit(int samplingFreq) { - + static void classInit(int sample_rate) { } - virtual void instanceConstants(int samplingFreq) { - fSamplingFreq = samplingFreq; - fConst0 = std::min(192000.0f, std::max(1.0f, float(fSamplingFreq))); + virtual void instanceConstants(int sample_rate) { + fSampleRate = sample_rate; + fConst0 = std::min(192000.0f, std::max(1.0f, float(fSampleRate))); fConst1 = std::exp((0.0f - (2500.0f / fConst0))); fConst2 = (1.0f - fConst1); fConst3 = std::exp((0.0f - (1250.0f / fConst0))); fConst4 = std::exp((0.0f - (2.0f / fConst0))); - } virtual void instanceResetUserInterface() { - } virtual void instanceClear() { for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { fRec2[l0] = 0.0f; - } for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { fRec1[l1] = 0.0f; - } for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { fRec0[l2] = 0.0f; - } - } - virtual void init(int samplingFreq) { - classInit(samplingFreq); - instanceInit(samplingFreq); + virtual void init(int sample_rate) { + classInit(sample_rate); + instanceInit(sample_rate); } - - virtual void instanceInit(int samplingFreq) { - instanceConstants(samplingFreq); + virtual void instanceInit(int sample_rate) { + instanceConstants(sample_rate); instanceResetUserInterface(); instanceClear(); } @@ -632,14 +674,12 @@ class limit : public dsp { } virtual int getSampleRate() { - return fSamplingFreq; - + return fSampleRate; } virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("dyn_limit"); ui_interface->closeBox(); - } virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { @@ -648,7 +688,7 @@ class limit : public dsp { for (int i = 0; (i < count); i = (i + 1)) { float fTemp0 = float(input0[i]); float fTemp1 = std::fabs(fTemp0); - float fTemp2 = ((fRec1[1] > fTemp1)?fConst4:fConst3); + float fTemp2 = ((fRec1[1] > fTemp1) ? fConst4 : fConst3); fRec2[0] = ((fRec2[1] * fTemp2) + (fTemp1 * (1.0f - fTemp2))); fRec1[0] = fRec2[0]; fRec0[0] = ((fConst1 * fRec0[1]) + (fConst2 * (0.0f - (0.75f * std::max(((20.0f * std::log10(fRec1[0])) + 6.0f), 0.0f))))); @@ -656,9 +696,7 @@ class limit : public dsp { fRec2[1] = fRec2[0]; fRec1[1] = fRec1[0]; fRec0[1] = fRec0[0]; - } - } }; diff --git a/ceammc/ext/src/dyn/dyn_limit2.h b/ceammc/ext/src/dyn/dyn_limit2.h index f896b2d1a9..a96fe7ba9d 100644 --- a/ceammc/ext/src/dyn/dyn_limit2.h +++ b/ceammc/ext/src/dyn/dyn_limit2.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "dyn_limit2" -Code generated with Faust 2.15.10 (https://faust.grame.fr) -Compilation options: cpp, -scal -ftz 0 +Code generated with Faust 2.22.1 (https://faust.grame.fr) +Compilation options: -lang cpp -scal -ftz 0 ------------------------------------------------------------ */ #ifndef __limit2_H__ @@ -39,6 +39,7 @@ Compilation options: cpp, -scal -ftz 0 #include #include +/************************** BEGIN dsp.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -121,23 +122,23 @@ class dsp { * - static class 'classInit': static tables initialization * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void init(int samplingRate) = 0; + virtual void init(int sample_rate) = 0; /** * Init instance state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceInit(int samplingRate) = 0; + virtual void instanceInit(int sample_rate) = 0; /** * Init instance constant state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceConstants(int samplingRate) = 0; + virtual void instanceConstants(int sample_rate) = 0; /* Init default control parameters values */ virtual void instanceResetUserInterface() = 0; @@ -174,8 +175,8 @@ class dsp { * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the number of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) * */ virtual void compute(double /*date_usec*/, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -194,16 +195,16 @@ class decorator_dsp : public dsp { public: - decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + decorator_dsp(dsp* dsp = nullptr):fDSP(dsp) {} virtual ~decorator_dsp() { delete fDSP; } virtual int getNumInputs() { return fDSP->getNumInputs(); } virtual int getNumOutputs() { return fDSP->getNumOutputs(); } virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } virtual int getSampleRate() { return fDSP->getSampleRate(); } - virtual void init(int samplingRate) { fDSP->init(samplingRate); } - virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } - virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void init(int sample_rate) { fDSP->init(sample_rate); } + virtual void instanceInit(int sample_rate) { fDSP->instanceInit(sample_rate); } + virtual void instanceConstants(int sample_rate) { fDSP->instanceConstants(sample_rate); } virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } @@ -258,6 +259,8 @@ class dsp_factory { #endif #endif +/************************** END dsp.h **************************/ +/************************** BEGIN UI.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -297,45 +300,54 @@ class dsp_factory { struct Soundfile; -class UI +template +class UIReal { - + public: - - UI() {} - - virtual ~UI() {} - + + UIReal() {} + virtual ~UIReal() {} + // -- widget's layouts - + virtual void openTabBox(const char* label) = 0; virtual void openHorizontalBox(const char* label) = 0; virtual void openVerticalBox(const char* label) = 0; virtual void closeBox() = 0; - + // -- active widgets - - virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - + + virtual void addButton(const char* label, REAL* zone) = 0; + virtual void addCheckButton(const char* label, REAL* zone) = 0; + virtual void addVerticalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addHorizontalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addNumEntry(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + // -- passive widgets - - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - + + virtual void addHorizontalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + virtual void addVerticalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + // -- soundfiles - + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; - + // -- metadata declarations + + virtual void declare(REAL* zone, const char* key, const char* val) {} +}; - virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +struct UI : public UIReal +{ + + UI() {} + virtual ~UI() {} }; #endif +/************************** END UI.h **************************/ +/************************** BEGIN meta.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -364,11 +376,14 @@ class UI struct Meta { - virtual void declare(const char* key, const char* value) = 0; virtual ~Meta() {}; + virtual void declare(const char* key, const char* value) = 0; + }; #endif +/************************** END meta.h **************************/ +/************************** BEGIN misc.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -391,7 +406,7 @@ struct Meta that work under terms of your choice, so long as this FAUST architecture section is not modified. ************************************************************************/ - + #ifndef __misc__ #define __misc__ @@ -399,6 +414,8 @@ struct Meta #include #include #include +#include +#include using std::max; @@ -420,27 +437,65 @@ static int int2pow2(int x) { int r = 0; while ((1<declare("analyzers.lib/name", "Faust Analyzer Library"); m->declare("analyzers.lib/version", "0.0"); m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.0"); + m->declare("basics.lib/version", "0.1"); m->declare("compressors.lib/name", "Faust Compressor Effect Library"); m->declare("compressors.lib/version", "0.0"); - m->declare("filename", "dyn_limit2"); + m->declare("filename", "dyn_limit2.dsp"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); @@ -543,15 +599,13 @@ class limit2 : public dsp { virtual int getNumInputs() { return 2; - } virtual int getNumOutputs() { return 2; - } virtual int getInputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -564,14 +618,12 @@ class limit2 : public dsp { rate = -1; break; } - } return rate; - } virtual int getOutputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -584,53 +636,43 @@ class limit2 : public dsp { rate = -1; break; } - } return rate; - } - static void classInit(int samplingFreq) { - + static void classInit(int sample_rate) { } - virtual void instanceConstants(int samplingFreq) { - fSamplingFreq = samplingFreq; - fConst0 = std::min(192000.0f, std::max(1.0f, float(fSamplingFreq))); + virtual void instanceConstants(int sample_rate) { + fSampleRate = sample_rate; + fConst0 = std::min(192000.0f, std::max(1.0f, float(fSampleRate))); fConst1 = std::exp((0.0f - (2500.0f / fConst0))); fConst2 = (1.0f - fConst1); fConst3 = std::exp((0.0f - (1250.0f / fConst0))); fConst4 = std::exp((0.0f - (2.0f / fConst0))); - } virtual void instanceResetUserInterface() { - } virtual void instanceClear() { for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { fRec2[l0] = 0.0f; - } for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { fRec1[l1] = 0.0f; - } for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { fRec0[l2] = 0.0f; - } - } - virtual void init(int samplingFreq) { - classInit(samplingFreq); - instanceInit(samplingFreq); + virtual void init(int sample_rate) { + classInit(sample_rate); + instanceInit(sample_rate); } - - virtual void instanceInit(int samplingFreq) { - instanceConstants(samplingFreq); + virtual void instanceInit(int sample_rate) { + instanceConstants(sample_rate); instanceResetUserInterface(); instanceClear(); } @@ -640,14 +682,12 @@ class limit2 : public dsp { } virtual int getSampleRate() { - return fSamplingFreq; - + return fSampleRate; } virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("dyn_limit2"); ui_interface->closeBox(); - } virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { @@ -659,8 +699,8 @@ class limit2 : public dsp { float fTemp0 = float(input0[i]); float fTemp1 = float(input1[i]); float fTemp2 = std::fabs((std::fabs(fTemp0) + std::fabs(fTemp1))); - float fTemp3 = ((fRec1[1] > fTemp2)?fConst4:fConst3); - fRec2[0] = ((fTemp2 * (1.0f - fTemp3)) + (fRec2[1] * fTemp3)); + float fTemp3 = ((fRec1[1] > fTemp2) ? fConst4 : fConst3); + fRec2[0] = ((fRec2[1] * fTemp3) + (fTemp2 * (1.0f - fTemp3))); fRec1[0] = fRec2[0]; fRec0[0] = ((fConst1 * fRec0[1]) + (fConst2 * (0.0f - (0.75f * std::max(((20.0f * std::log10(fRec1[0])) + 6.0f), 0.0f))))); float fTemp4 = std::pow(10.0f, (0.0500000007f * fRec0[0])); @@ -669,9 +709,7 @@ class limit2 : public dsp { fRec2[1] = fRec2[0]; fRec1[1] = fRec1[0]; fRec0[1] = fRec0[0]; - } - } }; diff --git a/ceammc/ext/src/dyn/dyn_softclip.h b/ceammc/ext/src/dyn/dyn_softclip.h index 6db35b1344..ff7012315f 100644 --- a/ceammc/ext/src/dyn/dyn_softclip.h +++ b/ceammc/ext/src/dyn/dyn_softclip.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "dyn_softclip" -Code generated with Faust 2.15.10 (https://faust.grame.fr) -Compilation options: cpp, -scal -ftz 0 +Code generated with Faust 2.22.1 (https://faust.grame.fr) +Compilation options: -lang cpp -scal -ftz 0 ------------------------------------------------------------ */ #ifndef __softclip_H__ @@ -39,6 +39,7 @@ Compilation options: cpp, -scal -ftz 0 #include #include +/************************** BEGIN dsp.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -121,23 +122,23 @@ class dsp { * - static class 'classInit': static tables initialization * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void init(int samplingRate) = 0; + virtual void init(int sample_rate) = 0; /** * Init instance state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceInit(int samplingRate) = 0; + virtual void instanceInit(int sample_rate) = 0; /** * Init instance constant state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceConstants(int samplingRate) = 0; + virtual void instanceConstants(int sample_rate) = 0; /* Init default control parameters values */ virtual void instanceResetUserInterface() = 0; @@ -174,8 +175,8 @@ class dsp { * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the number of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) * */ virtual void compute(double /*date_usec*/, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -194,16 +195,16 @@ class decorator_dsp : public dsp { public: - decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + decorator_dsp(dsp* dsp = nullptr):fDSP(dsp) {} virtual ~decorator_dsp() { delete fDSP; } virtual int getNumInputs() { return fDSP->getNumInputs(); } virtual int getNumOutputs() { return fDSP->getNumOutputs(); } virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } virtual int getSampleRate() { return fDSP->getSampleRate(); } - virtual void init(int samplingRate) { fDSP->init(samplingRate); } - virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } - virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void init(int sample_rate) { fDSP->init(sample_rate); } + virtual void instanceInit(int sample_rate) { fDSP->instanceInit(sample_rate); } + virtual void instanceConstants(int sample_rate) { fDSP->instanceConstants(sample_rate); } virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } @@ -258,6 +259,8 @@ class dsp_factory { #endif #endif +/************************** END dsp.h **************************/ +/************************** BEGIN UI.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -297,45 +300,54 @@ class dsp_factory { struct Soundfile; -class UI +template +class UIReal { - + public: - - UI() {} - - virtual ~UI() {} - + + UIReal() {} + virtual ~UIReal() {} + // -- widget's layouts - + virtual void openTabBox(const char* label) = 0; virtual void openHorizontalBox(const char* label) = 0; virtual void openVerticalBox(const char* label) = 0; virtual void closeBox() = 0; - + // -- active widgets - - virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - + + virtual void addButton(const char* label, REAL* zone) = 0; + virtual void addCheckButton(const char* label, REAL* zone) = 0; + virtual void addVerticalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addHorizontalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addNumEntry(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + // -- passive widgets - - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - + + virtual void addHorizontalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + virtual void addVerticalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + // -- soundfiles - + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; - + // -- metadata declarations + + virtual void declare(REAL* zone, const char* key, const char* val) {} +}; + +struct UI : public UIReal +{ - virtual void declare(FAUSTFLOAT*, const char*, const char*) {} + UI() {} + virtual ~UI() {} }; #endif +/************************** END UI.h **************************/ +/************************** BEGIN meta.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -364,11 +376,14 @@ class UI struct Meta { - virtual void declare(const char* key, const char* value) = 0; virtual ~Meta() {}; + virtual void declare(const char* key, const char* value) = 0; + }; #endif +/************************** END meta.h **************************/ +/************************** BEGIN misc.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -391,7 +406,7 @@ struct Meta that work under terms of your choice, so long as this FAUST architecture section is not modified. ************************************************************************/ - + #ifndef __misc__ #define __misc__ @@ -399,6 +414,8 @@ struct Meta #include #include #include +#include +#include using std::max; @@ -420,27 +437,65 @@ static int int2pow2(int x) { int r = 0; while ((1<declare("filename", "dyn_softclip"); + m->declare("filename", "dyn_softclip.dsp"); m->declare("name", "dyn_softclip"); } virtual int getNumInputs() { return 1; - } virtual int getNumOutputs() { return 1; - } virtual int getInputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -542,14 +595,12 @@ class softclip : public dsp { rate = -1; break; } - } return rate; - } virtual int getOutputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -558,36 +609,29 @@ class softclip : public dsp { rate = -1; break; } - } return rate; - } - static void classInit(int samplingFreq) { - + static void classInit(int sample_rate) { } - virtual void instanceConstants(int samplingFreq) { - fSamplingFreq = samplingFreq; - + virtual void instanceConstants(int sample_rate) { + fSampleRate = sample_rate; } virtual void instanceResetUserInterface() { - } virtual void instanceClear() { - } - virtual void init(int samplingFreq) { - classInit(samplingFreq); - instanceInit(samplingFreq); + virtual void init(int sample_rate) { + classInit(sample_rate); + instanceInit(sample_rate); } - - virtual void instanceInit(int samplingFreq) { - instanceConstants(samplingFreq); + virtual void instanceInit(int sample_rate) { + instanceConstants(sample_rate); instanceResetUserInterface(); instanceClear(); } @@ -597,14 +641,12 @@ class softclip : public dsp { } virtual int getSampleRate() { - return fSamplingFreq; - + return fSampleRate; } virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("dyn_softclip"); ui_interface->closeBox(); - } virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { @@ -614,9 +656,7 @@ class softclip : public dsp { float fTemp0 = (std::fabs((2.0f * (std::max(-0.25f, std::min(0.25f, (0.158800006f * float(input0[i])))) + -0.25f))) + -0.5f); float fTemp1 = softclip_faustpower2_f(fTemp0); output0[i] = FAUSTFLOAT((fTemp0 * ((fTemp1 * ((2.26548004f * fTemp1) + -5.13274002f)) + 3.14159012f))); - } - } }; diff --git a/ceammc/ext/src/env/env_adsr.h b/ceammc/ext/src/env/env_adsr.h index 69178a39cf..9a077922b6 100644 --- a/ceammc/ext/src/env/env_adsr.h +++ b/ceammc/ext/src/env/env_adsr.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "env_adsr" -Code generated with Faust 2.15.10 (https://faust.grame.fr) -Compilation options: cpp, -scal -ftz 0 +Code generated with Faust 2.22.1 (https://faust.grame.fr) +Compilation options: -lang cpp -scal -ftz 0 ------------------------------------------------------------ */ #ifndef __env_adsr_H__ @@ -14,6 +14,7 @@ Compilation options: cpp, -scal -ftz 0 #include #include +/************************** BEGIN dsp.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -96,23 +97,23 @@ class dsp { * - static class 'classInit': static tables initialization * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void init(int samplingRate) = 0; + virtual void init(int sample_rate) = 0; /** * Init instance state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceInit(int samplingRate) = 0; + virtual void instanceInit(int sample_rate) = 0; /** * Init instance constant state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceConstants(int samplingRate) = 0; + virtual void instanceConstants(int sample_rate) = 0; /* Init default control parameters values */ virtual void instanceResetUserInterface() = 0; @@ -149,8 +150,8 @@ class dsp { * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the number of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) * */ virtual void compute(double /*date_usec*/, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -169,16 +170,16 @@ class decorator_dsp : public dsp { public: - decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + decorator_dsp(dsp* dsp = nullptr):fDSP(dsp) {} virtual ~decorator_dsp() { delete fDSP; } virtual int getNumInputs() { return fDSP->getNumInputs(); } virtual int getNumOutputs() { return fDSP->getNumOutputs(); } virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } virtual int getSampleRate() { return fDSP->getSampleRate(); } - virtual void init(int samplingRate) { fDSP->init(samplingRate); } - virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } - virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void init(int sample_rate) { fDSP->init(sample_rate); } + virtual void instanceInit(int sample_rate) { fDSP->instanceInit(sample_rate); } + virtual void instanceConstants(int sample_rate) { fDSP->instanceConstants(sample_rate); } virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } @@ -233,6 +234,8 @@ class dsp_factory { #endif #endif +/************************** END dsp.h **************************/ +/************************** BEGIN UI.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -272,45 +275,54 @@ class dsp_factory { struct Soundfile; -class UI +template +class UIReal { - + public: - - UI() {} - - virtual ~UI() {} - + + UIReal() {} + virtual ~UIReal() {} + // -- widget's layouts - + virtual void openTabBox(const char* label) = 0; virtual void openHorizontalBox(const char* label) = 0; virtual void openVerticalBox(const char* label) = 0; virtual void closeBox() = 0; - + // -- active widgets - - virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - + + virtual void addButton(const char* label, REAL* zone) = 0; + virtual void addCheckButton(const char* label, REAL* zone) = 0; + virtual void addVerticalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addHorizontalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addNumEntry(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + // -- passive widgets - - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - + + virtual void addHorizontalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + virtual void addVerticalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + // -- soundfiles - + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; - + // -- metadata declarations + + virtual void declare(REAL* zone, const char* key, const char* val) {} +}; + +struct UI : public UIReal +{ - virtual void declare(FAUSTFLOAT*, const char*, const char*) {} + UI() {} + virtual ~UI() {} }; #endif +/************************** END UI.h **************************/ +/************************** BEGIN meta.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -339,11 +351,14 @@ class UI struct Meta { - virtual void declare(const char* key, const char* value) = 0; virtual ~Meta() {}; + virtual void declare(const char* key, const char* value) = 0; + }; #endif +/************************** END meta.h **************************/ +/************************** BEGIN misc.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -366,7 +381,7 @@ struct Meta that work under terms of your choice, so long as this FAUST architecture section is not modified. ************************************************************************/ - + #ifndef __misc__ #define __misc__ @@ -374,6 +389,8 @@ struct Meta #include #include #include +#include +#include using std::max; @@ -395,27 +412,65 @@ static int int2pow2(int x) { int r = 0; while ((1<declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.0"); m->declare("ceammc.lib/name", "Ceammc PureData misc utils"); m->declare("ceammc.lib/version", "0.1.1"); m->declare("ceammc_ui.lib/name", "CEAMMC faust default UI elements"); m->declare("ceammc_ui.lib/version", "0.1.1"); + m->declare("envelopes.lib/adsr:author", "Yann Orlarey"); m->declare("envelopes.lib/author", "GRAME"); m->declare("envelopes.lib/copyright", "GRAME"); m->declare("envelopes.lib/license", "LGPL with exception"); m->declare("envelopes.lib/name", "Faust Envelope Library"); m->declare("envelopes.lib/version", "0.0"); - m->declare("filename", "env_adsr"); + m->declare("filename", "env_adsr.dsp"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); @@ -502,15 +556,13 @@ class env_adsr : public dsp { virtual int getNumInputs() { return 1; - } virtual int getNumOutputs() { return 1; - } virtual int getInputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -519,14 +571,12 @@ class env_adsr : public dsp { rate = -1; break; } - } return rate; - } virtual int getOutputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -535,71 +585,56 @@ class env_adsr : public dsp { rate = -1; break; } - } return rate; - } - static void classInit(int samplingFreq) { - + static void classInit(int sample_rate) { } - virtual void instanceConstants(int samplingFreq) { - fSamplingFreq = samplingFreq; - fConst0 = std::min(192000.0f, std::max(1.0f, float(fSamplingFreq))); - fConst1 = (1.0f / fConst0); - + virtual void instanceConstants(int sample_rate) { + fSampleRate = sample_rate; + fConst0 = std::min(192000.0f, std::max(1.0f, float(fSampleRate))); } virtual void instanceResetUserInterface() { fCheckbox0 = FAUSTFLOAT(0.0f); - fHslider0 = FAUSTFLOAT(300.0f); - fHslider1 = FAUSTFLOAT(10.0f); + fHslider0 = FAUSTFLOAT(10.0f); + fHslider1 = FAUSTFLOAT(50.0f); fHslider2 = FAUSTFLOAT(10.0f); - fHslider3 = FAUSTFLOAT(50.0f); - + fHslider3 = FAUSTFLOAT(300.0f); } virtual void instanceClear() { for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { - fRec1[l0] = 0.0f; - + fVec0[l0] = 0.0f; } for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { fRec0[l1] = 0.0f; - } for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { - fRec4[l2] = 0.0f; - + fRec1[l2] = 0.0f; } for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { - fRec5[l3] = 0.0f; - + fRec2[l3] = 0.0f; } for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { fRec3[l4] = 0.0f; - } for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { - fRec6[l5] = 0.0f; - + iRec4[l5] = 0; } for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { - fRec2[l6] = 0.0f; - + fRec5[l6] = 0.0f; } - } - virtual void init(int samplingFreq) { - classInit(samplingFreq); - instanceInit(samplingFreq); + virtual void init(int sample_rate) { + classInit(sample_rate); + instanceInit(sample_rate); } - - virtual void instanceInit(int samplingFreq) { - instanceConstants(samplingFreq); + virtual void instanceInit(int sample_rate) { + instanceConstants(sample_rate); instanceResetUserInterface(); instanceClear(); } @@ -609,66 +644,54 @@ class env_adsr : public dsp { } virtual int getSampleRate() { - return fSamplingFreq; - + return fSampleRate; } virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("env_adsr"); - ui_interface->declare(&fHslider1, "style", "knob"); - ui_interface->declare(&fHslider1, "unit", "ms"); - ui_interface->addHorizontalSlider("attack", &fHslider1, 10.0f, 0.0f, 100000.0f, 1.0f); + ui_interface->declare(&fHslider0, "style", "knob"); + ui_interface->declare(&fHslider0, "unit", "ms"); + ui_interface->addHorizontalSlider("attack", &fHslider0, 10.0f, 0.0f, 100000.0f, 1.0f); ui_interface->declare(&fHslider2, "style", "knob"); ui_interface->declare(&fHslider2, "unit", "ms"); ui_interface->addHorizontalSlider("decay", &fHslider2, 10.0f, 0.0f, 100000.0f, 1.0f); ui_interface->addCheckButton("gate", &fCheckbox0); - ui_interface->declare(&fHslider0, "style", "knob"); - ui_interface->declare(&fHslider0, "unit", "ms"); - ui_interface->addHorizontalSlider("release", &fHslider0, 300.0f, 0.0f, 100000.0f, 1.0f); ui_interface->declare(&fHslider3, "style", "knob"); - ui_interface->declare(&fHslider3, "unit", "percent"); - ui_interface->addHorizontalSlider("sustain", &fHslider3, 50.0f, 0.0f, 100.0f, 0.00100000005f); + ui_interface->declare(&fHslider3, "unit", "ms"); + ui_interface->addHorizontalSlider("release", &fHslider3, 300.0f, 0.0f, 100000.0f, 1.0f); + ui_interface->declare(&fHslider1, "style", "knob"); + ui_interface->declare(&fHslider1, "unit", "percent"); + ui_interface->addHorizontalSlider("sustain", &fHslider1, 50.0f, 0.0f, 100.0f, 0.00100000005f); ui_interface->closeBox(); - } virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { FAUSTFLOAT* input0 = inputs[0]; FAUSTFLOAT* output0 = outputs[0]; float fSlow0 = float(fCheckbox0); - int iSlow1 = (fSlow0 > 0.0f); - int iSlow2 = (iSlow1 > 0); - float fSlow3 = (9.99999997e-07f * float(fHslider0)); - float fSlow4 = float(iSlow1); - int iSlow5 = ((fSlow0 == 0.0f) > 0); - float fSlow6 = (9.99999997e-07f * float(fHslider1)); - float fSlow7 = (9.99999997e-07f * float(fHslider2)); - float fSlow8 = (9.99999975e-06f * float(fHslider3)); + float fSlow1 = (9.99999997e-07f * float(fHslider0)); + float fSlow2 = (9.99999975e-06f * float(fHslider1)); + float fSlow3 = (9.99999997e-07f * float(fHslider2)); + int iSlow4 = (fSlow0 == 0.0f); + float fSlow5 = (9.99999997e-07f * float(fHslider3)); for (int i = 0; (i < count); i = (i + 1)) { - fRec1[0] = (fSlow3 + (0.999000013f * fRec1[1])); - float fTemp0 = std::max(0.00100000005f, (fConst0 * fRec1[0])); - fRec0[0] = (iSlow2?0.0f:std::min(fTemp0, (fRec0[1] + 1.0f))); - fRec4[0] = (fSlow6 + (0.999000013f * fRec4[1])); - fRec5[0] = (fSlow7 + (0.999000013f * fRec5[1])); - float fTemp1 = (fRec4[0] + fRec5[0]); - float fTemp2 = (fConst0 * fTemp1); - fRec3[0] = (iSlow5?0.0f:std::min(fTemp2, (fRec3[1] + 1.0f))); - float fTemp3 = (fConst0 * fRec4[0]); - int iTemp4 = (fRec3[0] < fTemp3); - fRec6[0] = (fSlow8 + (0.999000013f * fRec6[1])); - float fTemp5 = (fSlow0 * fRec6[0]); - fRec2[0] = (iSlow1?(fSlow4 * (iTemp4?((fRec3[0] < 0.0f)?0.0f:(iTemp4?(fConst1 * (fRec3[0] / fRec4[0])):1.0f)):((fRec3[0] < fTemp2)?((((fRec3[0] - fTemp3) * (fTemp5 + -1.0f)) / (0.0f - (fConst0 * (fRec4[0] - fTemp1)))) + 1.0f):fTemp5))):fRec2[1]); - output0[i] = FAUSTFLOAT((float(input0[i]) * ((fRec0[0] < 0.0f)?fRec2[0]:((fRec0[0] < fTemp0)?(fRec2[0] + ((0.0f - (fRec0[0] * fRec2[0])) / fTemp0)):0.0f)))); - fRec1[1] = fRec1[0]; + fVec0[0] = fSlow0; + fRec0[0] = (fSlow0 + (fRec0[1] * float((fVec0[1] >= fSlow0)))); + fRec1[0] = (fSlow1 + (0.999000013f * fRec1[1])); + float fTemp0 = std::max(1.0f, (fConst0 * fRec1[0])); + fRec2[0] = (fSlow2 + (0.999000013f * fRec2[1])); + fRec3[0] = (fSlow3 + (0.999000013f * fRec3[1])); + iRec4[0] = (iSlow4 * (iRec4[1] + 1)); + fRec5[0] = (fSlow5 + (0.999000013f * fRec5[1])); + output0[i] = FAUSTFLOAT((float(input0[i]) * std::max(0.0f, (std::min((fRec0[0] / fTemp0), std::max(((((1.0f - fRec2[0]) * (fTemp0 - fRec0[0])) / std::max(1.0f, (fConst0 * fRec3[0]))) + 1.0f), fRec2[0])) - ((fRec2[0] * float(iRec4[0])) / std::max(1.0f, (fConst0 * fRec5[0]))))))); + fVec0[1] = fVec0[0]; fRec0[1] = fRec0[0]; - fRec4[1] = fRec4[0]; - fRec5[1] = fRec5[0]; - fRec3[1] = fRec3[0]; - fRec6[1] = fRec6[0]; + fRec1[1] = fRec1[0]; fRec2[1] = fRec2[0]; - + fRec3[1] = fRec3[0]; + iRec4[1] = iRec4[0]; + fRec5[1] = fRec5[0]; } - } }; diff --git a/ceammc/ext/src/env/env_ar.cpp b/ceammc/ext/src/env/env_ar.cpp index 5359e27646..620ec3f037 100644 --- a/ceammc/ext/src/env/env_ar.cpp +++ b/ceammc/ext/src/env/env_ar.cpp @@ -24,7 +24,11 @@ class EnvAr : public faust_env_ar_tilde { { bindPositionalArgsToProps({ gensym("@attack"), gensym("@release") }); createProperty(new CombinedProperty("@ar", { property(gensym("@attack")), property(gensym("@release")) })); - createCbProperty("@length", &EnvAr::propLength); + { + Property* p = createCbProperty("@length", &EnvAr::propLength); + p->info().setType(PropertyInfoType::FLOAT); + p->info().setUnits(PropertyInfoUnits::MSEC); + } createOutlet(); } @@ -78,7 +82,7 @@ class EnvAr : public faust_env_ar_tilde { unsetClocks(); } - void m_click(t_symbol*, const AtomList& l) + void onClick(t_floatarg, t_floatarg, t_floatarg, t_floatarg, t_floatarg) override { onBang(); } @@ -139,5 +143,5 @@ void setup_env_ar_tilde() obj.processData(); obj.addMethod("play", &EnvAr::m_play); obj.addMethod("reset", &EnvAr::m_reset); - obj.addClick(&EnvAr::m_click); + obj.useClick(); } diff --git a/ceammc/ext/src/env/env_ar.h b/ceammc/ext/src/env/env_ar.h index b67160ece6..043a2a0cd0 100644 --- a/ceammc/ext/src/env/env_ar.h +++ b/ceammc/ext/src/env/env_ar.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "env_ar" -Code generated with Faust 2.15.10 (https://faust.grame.fr) -Compilation options: cpp, -scal -ftz 0 +Code generated with Faust 2.22.1 (https://faust.grame.fr) +Compilation options: -lang cpp -scal -ftz 0 ------------------------------------------------------------ */ #ifndef __env_ar_H__ @@ -14,6 +14,7 @@ Compilation options: cpp, -scal -ftz 0 #include #include +/************************** BEGIN dsp.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -96,23 +97,23 @@ class dsp { * - static class 'classInit': static tables initialization * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void init(int samplingRate) = 0; + virtual void init(int sample_rate) = 0; /** * Init instance state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceInit(int samplingRate) = 0; + virtual void instanceInit(int sample_rate) = 0; /** * Init instance constant state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceConstants(int samplingRate) = 0; + virtual void instanceConstants(int sample_rate) = 0; /* Init default control parameters values */ virtual void instanceResetUserInterface() = 0; @@ -149,8 +150,8 @@ class dsp { * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the number of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) * */ virtual void compute(double /*date_usec*/, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -169,16 +170,16 @@ class decorator_dsp : public dsp { public: - decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + decorator_dsp(dsp* dsp = nullptr):fDSP(dsp) {} virtual ~decorator_dsp() { delete fDSP; } virtual int getNumInputs() { return fDSP->getNumInputs(); } virtual int getNumOutputs() { return fDSP->getNumOutputs(); } virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } virtual int getSampleRate() { return fDSP->getSampleRate(); } - virtual void init(int samplingRate) { fDSP->init(samplingRate); } - virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } - virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void init(int sample_rate) { fDSP->init(sample_rate); } + virtual void instanceInit(int sample_rate) { fDSP->instanceInit(sample_rate); } + virtual void instanceConstants(int sample_rate) { fDSP->instanceConstants(sample_rate); } virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } @@ -233,6 +234,8 @@ class dsp_factory { #endif #endif +/************************** END dsp.h **************************/ +/************************** BEGIN UI.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -272,45 +275,54 @@ class dsp_factory { struct Soundfile; -class UI +template +class UIReal { - + public: - - UI() {} - - virtual ~UI() {} - + + UIReal() {} + virtual ~UIReal() {} + // -- widget's layouts - + virtual void openTabBox(const char* label) = 0; virtual void openHorizontalBox(const char* label) = 0; virtual void openVerticalBox(const char* label) = 0; virtual void closeBox() = 0; - + // -- active widgets - - virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - + + virtual void addButton(const char* label, REAL* zone) = 0; + virtual void addCheckButton(const char* label, REAL* zone) = 0; + virtual void addVerticalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addHorizontalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addNumEntry(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + // -- passive widgets - - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - + + virtual void addHorizontalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + virtual void addVerticalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + // -- soundfiles - + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; - + // -- metadata declarations + + virtual void declare(REAL* zone, const char* key, const char* val) {} +}; - virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +struct UI : public UIReal +{ + + UI() {} + virtual ~UI() {} }; #endif +/************************** END UI.h **************************/ +/************************** BEGIN meta.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -339,11 +351,14 @@ class UI struct Meta { - virtual void declare(const char* key, const char* value) = 0; virtual ~Meta() {}; + virtual void declare(const char* key, const char* value) = 0; + }; #endif +/************************** END meta.h **************************/ +/************************** BEGIN misc.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -366,7 +381,7 @@ struct Meta that work under terms of your choice, so long as this FAUST architecture section is not modified. ************************************************************************/ - + #ifndef __misc__ #define __misc__ @@ -374,6 +389,8 @@ struct Meta #include #include #include +#include +#include using std::max; @@ -395,27 +412,65 @@ static int int2pow2(int x) { int r = 0; while ((1<declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.0"); m->declare("ceammc.lib/name", "Ceammc PureData misc utils"); m->declare("ceammc.lib/version", "0.1.1"); m->declare("ceammc_ui.lib/name", "CEAMMC faust default UI elements"); m->declare("ceammc_ui.lib/version", "0.1.1"); + m->declare("envelopes.lib/ar:author", "Yann Orlarey, Stéphane Letz"); m->declare("envelopes.lib/author", "GRAME"); m->declare("envelopes.lib/copyright", "GRAME"); m->declare("envelopes.lib/license", "LGPL with exception"); m->declare("envelopes.lib/name", "Faust Envelope Library"); m->declare("envelopes.lib/version", "0.0"); - m->declare("filename", "env_ar"); + m->declare("filename", "env_ar.dsp"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); @@ -498,15 +551,13 @@ class env_ar : public dsp { virtual int getNumInputs() { return 1; - } virtual int getNumOutputs() { return 1; - } virtual int getInputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -515,14 +566,12 @@ class env_ar : public dsp { rate = -1; break; } - } return rate; - } virtual int getOutputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -531,61 +580,45 @@ class env_ar : public dsp { rate = -1; break; } - } return rate; - } - static void classInit(int samplingFreq) { - + static void classInit(int sample_rate) { } - virtual void instanceConstants(int samplingFreq) { - fSamplingFreq = samplingFreq; - fConst0 = std::min(192000.0f, std::max(1.0f, float(fSamplingFreq))); - fConst1 = (1.0f / fConst0); - + virtual void instanceConstants(int sample_rate) { + fSampleRate = sample_rate; + fConst0 = std::min(192000.0f, std::max(1.0f, float(fSampleRate))); } virtual void instanceResetUserInterface() { fCheckbox0 = FAUSTFLOAT(0.0f); fHslider0 = FAUSTFLOAT(10.0f); fHslider1 = FAUSTFLOAT(300.0f); - } virtual void instanceClear() { for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { fVec0[l0] = 0.0f; - } for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { - fRec1[l1] = 0.0f; - + iRec0[l1] = 0; } for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { - fRec2[l2] = 0.0f; - + fRec1[l2] = 0.0f; } for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { - fVec1[l3] = 0.0f; - + fRec2[l3] = 0.0f; } - for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { - fRec0[l4] = 0.0f; - - } - } - virtual void init(int samplingFreq) { - classInit(samplingFreq); - instanceInit(samplingFreq); + virtual void init(int sample_rate) { + classInit(sample_rate); + instanceInit(sample_rate); } - - virtual void instanceInit(int samplingFreq) { - instanceConstants(samplingFreq); + virtual void instanceInit(int sample_rate) { + instanceConstants(sample_rate); instanceResetUserInterface(); instanceClear(); } @@ -595,8 +628,7 @@ class env_ar : public dsp { } virtual int getSampleRate() { - return fSamplingFreq; - + return fSampleRate; } virtual void buildUserInterface(UI* ui_interface) { @@ -609,7 +641,6 @@ class env_ar : public dsp { ui_interface->declare(&fHslider1, "unit", "ms"); ui_interface->addHorizontalSlider("release", &fHslider1, 300.0f, 0.0f, 100000.0f, 1.0f); ui_interface->closeBox(); - } virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { @@ -620,23 +651,17 @@ class env_ar : public dsp { float fSlow2 = (9.99999997e-07f * float(fHslider1)); for (int i = 0; (i < count); i = (i + 1)) { fVec0[0] = fSlow0; + iRec0[0] = (((iRec0[1] + (iRec0[1] > 0)) * (fSlow0 <= fVec0[1])) + (fSlow0 > fVec0[1])); + float fTemp0 = float(iRec0[0]); fRec1[0] = (fSlow1 + (0.999000013f * fRec1[1])); + float fTemp1 = std::max(1.0f, (fConst0 * fRec1[0])); fRec2[0] = (fSlow2 + (0.999000013f * fRec2[1])); - float fTemp0 = (fRec1[0] + fRec2[0]); - fVec1[0] = fTemp0; - float fTemp1 = (fConst0 * fTemp0); - fRec0[0] = ((((fSlow0 - fVec0[1]) > 0.0f) > 0)?0.0f:std::min(fTemp1, (fRec0[1] + (1.0f - (fConst0 * (fVec1[1] - fTemp0)))))); - float fTemp2 = (fConst0 * fRec1[0]); - int iTemp3 = (fRec0[0] < fTemp2); - output0[i] = FAUSTFLOAT((float(input0[i]) * (iTemp3?((fRec0[0] < 0.0f)?0.0f:(iTemp3?(fConst1 * (fRec0[0] / fRec1[0])):1.0f)):((fRec0[0] < fTemp1)?(((0.0f - (fRec0[0] - fTemp2)) / (0.0f - (fConst0 * (fRec1[0] - fTemp0)))) + 1.0f):0.0f)))); + output0[i] = FAUSTFLOAT((float(input0[i]) * std::max(0.0f, std::min((fTemp0 / fTemp1), (((fTemp1 - fTemp0) / std::max(1.0f, (fConst0 * fRec2[0]))) + 1.0f))))); fVec0[1] = fVec0[0]; + iRec0[1] = iRec0[0]; fRec1[1] = fRec1[0]; fRec2[1] = fRec2[0]; - fVec1[1] = fVec1[0]; - fRec0[1] = fRec0[0]; - } - } }; diff --git a/ceammc/ext/src/env/env_asr.h b/ceammc/ext/src/env/env_asr.h index 36e0128700..5d8b95c9ba 100644 --- a/ceammc/ext/src/env/env_asr.h +++ b/ceammc/ext/src/env/env_asr.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "env_asr" -Code generated with Faust 2.15.10 (https://faust.grame.fr) -Compilation options: cpp, -scal -ftz 0 +Code generated with Faust 2.22.1 (https://faust.grame.fr) +Compilation options: -lang cpp -scal -ftz 0 ------------------------------------------------------------ */ #ifndef __env_asr_H__ @@ -14,6 +14,7 @@ Compilation options: cpp, -scal -ftz 0 #include #include +/************************** BEGIN dsp.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -96,23 +97,23 @@ class dsp { * - static class 'classInit': static tables initialization * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void init(int samplingRate) = 0; + virtual void init(int sample_rate) = 0; /** * Init instance state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceInit(int samplingRate) = 0; + virtual void instanceInit(int sample_rate) = 0; /** * Init instance constant state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceConstants(int samplingRate) = 0; + virtual void instanceConstants(int sample_rate) = 0; /* Init default control parameters values */ virtual void instanceResetUserInterface() = 0; @@ -149,8 +150,8 @@ class dsp { * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the number of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) * */ virtual void compute(double /*date_usec*/, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -169,16 +170,16 @@ class decorator_dsp : public dsp { public: - decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + decorator_dsp(dsp* dsp = nullptr):fDSP(dsp) {} virtual ~decorator_dsp() { delete fDSP; } virtual int getNumInputs() { return fDSP->getNumInputs(); } virtual int getNumOutputs() { return fDSP->getNumOutputs(); } virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } virtual int getSampleRate() { return fDSP->getSampleRate(); } - virtual void init(int samplingRate) { fDSP->init(samplingRate); } - virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } - virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void init(int sample_rate) { fDSP->init(sample_rate); } + virtual void instanceInit(int sample_rate) { fDSP->instanceInit(sample_rate); } + virtual void instanceConstants(int sample_rate) { fDSP->instanceConstants(sample_rate); } virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } @@ -233,6 +234,8 @@ class dsp_factory { #endif #endif +/************************** END dsp.h **************************/ +/************************** BEGIN UI.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -272,45 +275,54 @@ class dsp_factory { struct Soundfile; -class UI +template +class UIReal { - + public: - - UI() {} - - virtual ~UI() {} - + + UIReal() {} + virtual ~UIReal() {} + // -- widget's layouts - + virtual void openTabBox(const char* label) = 0; virtual void openHorizontalBox(const char* label) = 0; virtual void openVerticalBox(const char* label) = 0; virtual void closeBox() = 0; - + // -- active widgets - - virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - + + virtual void addButton(const char* label, REAL* zone) = 0; + virtual void addCheckButton(const char* label, REAL* zone) = 0; + virtual void addVerticalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addHorizontalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addNumEntry(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + // -- passive widgets - - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - + + virtual void addHorizontalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + virtual void addVerticalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + // -- soundfiles - + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; - + // -- metadata declarations + + virtual void declare(REAL* zone, const char* key, const char* val) {} +}; + +struct UI : public UIReal +{ - virtual void declare(FAUSTFLOAT*, const char*, const char*) {} + UI() {} + virtual ~UI() {} }; #endif +/************************** END UI.h **************************/ +/************************** BEGIN meta.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -339,11 +351,14 @@ class UI struct Meta { - virtual void declare(const char* key, const char* value) = 0; virtual ~Meta() {}; + virtual void declare(const char* key, const char* value) = 0; + }; #endif +/************************** END meta.h **************************/ +/************************** BEGIN misc.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -366,7 +381,7 @@ struct Meta that work under terms of your choice, so long as this FAUST architecture section is not modified. ************************************************************************/ - + #ifndef __misc__ #define __misc__ @@ -374,6 +389,8 @@ struct Meta #include #include #include +#include +#include using std::max; @@ -395,27 +412,65 @@ static int int2pow2(int x) { int r = 0; while ((1<declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.0"); m->declare("ceammc.lib/name", "Ceammc PureData misc utils"); m->declare("ceammc.lib/version", "0.1.1"); m->declare("ceammc_ui.lib/name", "CEAMMC faust default UI elements"); m->declare("ceammc_ui.lib/version", "0.1.1"); + m->declare("envelopes.lib/asr:author", "Yann Orlarey, Stéphane Letz"); m->declare("envelopes.lib/author", "GRAME"); m->declare("envelopes.lib/copyright", "GRAME"); m->declare("envelopes.lib/license", "LGPL with exception"); m->declare("envelopes.lib/name", "Faust Envelope Library"); m->declare("envelopes.lib/version", "0.0"); - m->declare("filename", "env_asr"); + m->declare("filename", "env_asr.dsp"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); @@ -500,15 +554,13 @@ class env_asr : public dsp { virtual int getNumInputs() { return 1; - } virtual int getNumOutputs() { return 1; - } virtual int getInputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -517,14 +569,12 @@ class env_asr : public dsp { rate = -1; break; } - } return rate; - } virtual int getOutputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -533,66 +583,52 @@ class env_asr : public dsp { rate = -1; break; } - } return rate; - } - static void classInit(int samplingFreq) { - + static void classInit(int sample_rate) { } - virtual void instanceConstants(int samplingFreq) { - fSamplingFreq = samplingFreq; - fConst0 = std::min(192000.0f, std::max(1.0f, float(fSamplingFreq))); - fConst1 = (1.0f / fConst0); - + virtual void instanceConstants(int sample_rate) { + fSampleRate = sample_rate; + fConst0 = std::min(192000.0f, std::max(1.0f, float(fSampleRate))); } virtual void instanceResetUserInterface() { fCheckbox0 = FAUSTFLOAT(0.0f); - fHslider0 = FAUSTFLOAT(300.0f); + fHslider0 = FAUSTFLOAT(100.0f); fHslider1 = FAUSTFLOAT(10.0f); - fHslider2 = FAUSTFLOAT(100.0f); - + fHslider2 = FAUSTFLOAT(300.0f); } virtual void instanceClear() { for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { - fRec1[l0] = 0.0f; - + fVec0[l0] = 0.0f; } for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { fRec0[l1] = 0.0f; - } for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { - fRec4[l2] = 0.0f; - + fRec1[l2] = 0.0f; } for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { - fRec3[l3] = 0.0f; - + fRec2[l3] = 0.0f; } for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { - fRec5[l4] = 0.0f; - + iRec3[l4] = 0; } for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { - fRec2[l5] = 0.0f; - + fRec4[l5] = 0.0f; } - } - virtual void init(int samplingFreq) { - classInit(samplingFreq); - instanceInit(samplingFreq); + virtual void init(int sample_rate) { + classInit(sample_rate); + instanceInit(sample_rate); } - - virtual void instanceInit(int samplingFreq) { - instanceConstants(samplingFreq); + virtual void instanceInit(int sample_rate) { + instanceConstants(sample_rate); instanceResetUserInterface(); instanceClear(); } @@ -602,8 +638,7 @@ class env_asr : public dsp { } virtual int getSampleRate() { - return fSamplingFreq; - + return fSampleRate; } virtual void buildUserInterface(UI* ui_interface) { @@ -612,47 +647,38 @@ class env_asr : public dsp { ui_interface->declare(&fHslider1, "unit", "ms"); ui_interface->addHorizontalSlider("attack", &fHslider1, 10.0f, 0.0f, 100000.0f, 1.0f); ui_interface->addCheckButton("gate", &fCheckbox0); - ui_interface->declare(&fHslider0, "style", "knob"); - ui_interface->declare(&fHslider0, "unit", "ms"); - ui_interface->addHorizontalSlider("release", &fHslider0, 300.0f, 0.0f, 100000.0f, 1.0f); ui_interface->declare(&fHslider2, "style", "knob"); - ui_interface->declare(&fHslider2, "unit", "percent"); - ui_interface->addHorizontalSlider("sustain", &fHslider2, 100.0f, 0.0f, 100.0f, 0.00100000005f); + ui_interface->declare(&fHslider2, "unit", "ms"); + ui_interface->addHorizontalSlider("release", &fHslider2, 300.0f, 0.0f, 100000.0f, 1.0f); + ui_interface->declare(&fHslider0, "style", "knob"); + ui_interface->declare(&fHslider0, "unit", "percent"); + ui_interface->addHorizontalSlider("sustain", &fHslider0, 100.0f, 0.0f, 100.0f, 0.00100000005f); ui_interface->closeBox(); - } virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { FAUSTFLOAT* input0 = inputs[0]; FAUSTFLOAT* output0 = outputs[0]; float fSlow0 = float(fCheckbox0); - int iSlow1 = (fSlow0 > 0.0f); - int iSlow2 = (iSlow1 > 0); - float fSlow3 = (9.99999997e-07f * float(fHslider0)); - float fSlow4 = float(iSlow1); - int iSlow5 = ((fSlow0 == 0.0f) > 0); - float fSlow6 = (9.99999997e-07f * float(fHslider1)); - float fSlow7 = (9.99999975e-06f * float(fHslider2)); - float fSlow8 = (fConst1 * fSlow0); + float fSlow1 = (9.99999975e-06f * float(fHslider0)); + float fSlow2 = (9.99999997e-07f * float(fHslider1)); + int iSlow3 = (fSlow0 == 0.0f); + float fSlow4 = (9.99999997e-07f * float(fHslider2)); for (int i = 0; (i < count); i = (i + 1)) { - fRec1[0] = (fSlow3 + (0.999000013f * fRec1[1])); - float fTemp0 = (fConst0 * fRec1[0]); - fRec0[0] = (iSlow2?0.0f:std::min(fTemp0, (fRec0[1] + 1.0f))); - fRec4[0] = (fSlow6 + (0.999000013f * fRec4[1])); - float fTemp1 = (fConst0 * fRec4[0]); - fRec3[0] = (iSlow5?0.0f:std::min(fTemp1, (fRec3[1] + 1.0f))); - fRec5[0] = (fSlow7 + (0.999000013f * fRec5[1])); - fRec2[0] = (iSlow1?(fSlow4 * ((fRec3[0] < 0.0f)?0.0f:((fRec3[0] < fTemp1)?(fSlow8 * ((fRec3[0] * fRec5[0]) / fRec4[0])):(fSlow0 * fRec5[0])))):fRec2[1]); - output0[i] = FAUSTFLOAT((float(input0[i]) * ((fRec0[0] < 0.0f)?fRec2[0]:((fRec0[0] < fTemp0)?(fRec2[0] + (fConst1 * ((0.0f - (fRec0[0] * fRec2[0])) / fRec1[0]))):0.0f)))); - fRec1[1] = fRec1[0]; + fVec0[0] = fSlow0; + fRec0[0] = (fSlow0 + (fRec0[1] * float((fVec0[1] >= fSlow0)))); + fRec1[0] = (fSlow1 + (0.999000013f * fRec1[1])); + fRec2[0] = (fSlow2 + (0.999000013f * fRec2[1])); + iRec3[0] = (iSlow3 * (iRec3[1] + 1)); + fRec4[0] = (fSlow4 + (0.999000013f * fRec4[1])); + output0[i] = FAUSTFLOAT((float(input0[i]) * std::max(0.0f, (std::min(((fRec0[0] * fRec1[0]) / std::max(1.0f, (fConst0 * fRec2[0]))), fRec1[0]) - ((fRec1[0] * float(iRec3[0])) / std::max(1.0f, (fConst0 * fRec4[0]))))))); + fVec0[1] = fVec0[0]; fRec0[1] = fRec0[0]; - fRec4[1] = fRec4[0]; - fRec3[1] = fRec3[0]; - fRec5[1] = fRec5[0]; + fRec1[1] = fRec1[0]; fRec2[1] = fRec2[0]; - + iRec3[1] = iRec3[0]; + fRec4[1] = fRec4[0]; } - } }; diff --git a/ceammc/ext/src/env/env_env.cpp b/ceammc/ext/src/env/env_env.cpp index e4e61d534d..4486691c98 100644 --- a/ceammc/ext/src/env/env_env.cpp +++ b/ceammc/ext/src/env/env_env.cpp @@ -29,8 +29,18 @@ Envelope::Envelope(const PdArgs& args) else if (method != 0) OBJ_ERR << "unknown arguments: " << positionalArguments(); - createCbProperty("@npoints", &Envelope::p_npoints); - createCbProperty("@length", &Envelope::p_length); + { + Property* p = createCbProperty("@npoints", &Envelope::p_npoints); + p->info().setType(PropertyInfoType::INTEGER); + p->info().setMin(0); + } + + { + Property* p = createCbProperty("@length", &Envelope::p_length); + p->info().setType(PropertyInfoType::FLOAT); + p->info().setUnits(PropertyInfoUnits::MSEC); + } + createCbProperty("@points", &Envelope::p_points); createCbProperty("@values", &Envelope::p_values); createCbProperty("@stops", &Envelope::p_stops); diff --git a/ceammc/ext/src/env/env_follow.h b/ceammc/ext/src/env/env_follow.h index e643b89893..afea76919b 100644 --- a/ceammc/ext/src/env/env_follow.h +++ b/ceammc/ext/src/env/env_follow.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "env_follow" -Code generated with Faust 2.14.4 (https://faust.grame.fr) -Compilation options: cpp, -scal -ftz 0 +Code generated with Faust 2.22.1 (https://faust.grame.fr) +Compilation options: -lang cpp -scal -ftz 0 ------------------------------------------------------------ */ #ifndef __env_follow_H__ @@ -14,6 +14,7 @@ Compilation options: cpp, -scal -ftz 0 #include #include +/************************** BEGIN dsp.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -96,23 +97,23 @@ class dsp { * - static class 'classInit': static tables initialization * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void init(int samplingRate) = 0; + virtual void init(int sample_rate) = 0; /** * Init instance state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceInit(int samplingRate) = 0; + virtual void instanceInit(int sample_rate) = 0; /** * Init instance constant state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceConstants(int samplingRate) = 0; + virtual void instanceConstants(int sample_rate) = 0; /* Init default control parameters values */ virtual void instanceResetUserInterface() = 0; @@ -149,8 +150,8 @@ class dsp { * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the number of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) * */ virtual void compute(double /*date_usec*/, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -169,16 +170,16 @@ class decorator_dsp : public dsp { public: - decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + decorator_dsp(dsp* dsp = nullptr):fDSP(dsp) {} virtual ~decorator_dsp() { delete fDSP; } virtual int getNumInputs() { return fDSP->getNumInputs(); } virtual int getNumOutputs() { return fDSP->getNumOutputs(); } virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } virtual int getSampleRate() { return fDSP->getSampleRate(); } - virtual void init(int samplingRate) { fDSP->init(samplingRate); } - virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } - virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void init(int sample_rate) { fDSP->init(sample_rate); } + virtual void instanceInit(int sample_rate) { fDSP->instanceInit(sample_rate); } + virtual void instanceConstants(int sample_rate) { fDSP->instanceConstants(sample_rate); } virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } @@ -233,6 +234,8 @@ class dsp_factory { #endif #endif +/************************** END dsp.h **************************/ +/************************** BEGIN UI.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -272,45 +275,54 @@ class dsp_factory { struct Soundfile; -class UI +template +class UIReal { - + public: - - UI() {} - - virtual ~UI() {} - + + UIReal() {} + virtual ~UIReal() {} + // -- widget's layouts - + virtual void openTabBox(const char* label) = 0; virtual void openHorizontalBox(const char* label) = 0; virtual void openVerticalBox(const char* label) = 0; virtual void closeBox() = 0; - + // -- active widgets - - virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - + + virtual void addButton(const char* label, REAL* zone) = 0; + virtual void addCheckButton(const char* label, REAL* zone) = 0; + virtual void addVerticalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addHorizontalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addNumEntry(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + // -- passive widgets - - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - + + virtual void addHorizontalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + virtual void addVerticalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + // -- soundfiles - + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; - + // -- metadata declarations + + virtual void declare(REAL* zone, const char* key, const char* val) {} +}; + +struct UI : public UIReal +{ - virtual void declare(FAUSTFLOAT*, const char*, const char*) {} + UI() {} + virtual ~UI() {} }; #endif +/************************** END UI.h **************************/ +/************************** BEGIN meta.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -339,11 +351,14 @@ class UI struct Meta { - virtual void declare(const char* key, const char* value) = 0; virtual ~Meta() {}; + virtual void declare(const char* key, const char* value) = 0; + }; #endif +/************************** END meta.h **************************/ +/************************** BEGIN misc.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -366,7 +381,7 @@ struct Meta that work under terms of your choice, so long as this FAUST architecture section is not modified. ************************************************************************/ - + #ifndef __misc__ #define __misc__ @@ -374,6 +389,8 @@ struct Meta #include #include #include +#include +#include using std::max; @@ -395,27 +412,65 @@ static int int2pow2(int x) { int r = 0; while ((1<declare("analyzers.lib/name", "Faust Analyzer Library"); m->declare("analyzers.lib/version", "0.0"); m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.0"); + m->declare("basics.lib/version", "0.1"); m->declare("ceammc.lib/name", "Ceammc PureData misc utils"); m->declare("ceammc.lib/version", "0.1.1"); - m->declare("filename", "env_follow"); + m->declare("filename", "env_follow.dsp"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); @@ -488,15 +544,13 @@ class env_follow : public dsp { virtual int getNumInputs() { return 1; - } virtual int getNumOutputs() { return 1; - } virtual int getInputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -505,14 +559,12 @@ class env_follow : public dsp { rate = -1; break; } - } return rate; - } virtual int getOutputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -521,46 +573,38 @@ class env_follow : public dsp { rate = -1; break; } - } return rate; - } - static void classInit(int samplingFreq) { - + static void classInit(int sample_rate) { } - virtual void instanceConstants(int samplingFreq) { - fSamplingFreq = samplingFreq; - fConst0 = (1000.0f / std::min(192000.0f, std::max(1.0f, float(fSamplingFreq)))); - + virtual void instanceConstants(int sample_rate) { + fSampleRate = sample_rate; + fConst0 = (1.0f / std::min(192000.0f, std::max(1.0f, float(fSampleRate)))); } virtual void instanceResetUserInterface() { fHslider0 = FAUSTFLOAT(200.0f); fHslider1 = FAUSTFLOAT(200.0f); - } virtual void instanceClear() { for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { fRec1[l0] = 0.0f; - } for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { fRec0[l1] = 0.0f; - } - } - virtual void init(int samplingFreq) { - classInit(samplingFreq); - instanceInit(samplingFreq); + virtual void init(int sample_rate) { + classInit(sample_rate); + instanceInit(sample_rate); } - virtual void instanceInit(int samplingFreq) { - instanceConstants(samplingFreq); + virtual void instanceInit(int sample_rate) { + instanceConstants(sample_rate); instanceResetUserInterface(); instanceClear(); } @@ -568,9 +612,9 @@ class env_follow : public dsp { virtual env_follow* clone() { return new env_follow(); } + virtual int getSampleRate() { - return fSamplingFreq; - + return fSampleRate; } virtual void buildUserInterface(UI* ui_interface) { @@ -578,28 +622,28 @@ class env_follow : public dsp { ui_interface->addHorizontalSlider("attack", &fHslider0, 200.0f, 1.0f, 1000.0f, 0.100000001f); ui_interface->addHorizontalSlider("release", &fHslider1, 200.0f, 1.0f, 1000.0f, 0.100000001f); ui_interface->closeBox(); - } virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { FAUSTFLOAT* input0 = inputs[0]; FAUSTFLOAT* output0 = outputs[0]; - float fSlow0 = std::exp((0.0f - (fConst0 / float(fHslider0)))); - float fSlow1 = std::exp((0.0f - (fConst0 / float(fHslider1)))); + float fSlow0 = (0.00100000005f * float(fHslider0)); + int iSlow1 = (std::fabs(fSlow0) < 1.19999996e-07f); + float fSlow2 = (iSlow1 ? 0.0f : std::exp((0.0f - (fConst0 / (iSlow1 ? 1.0f : fSlow0))))); + float fSlow3 = (0.00100000005f * float(fHslider1)); + int iSlow4 = (std::fabs(fSlow3) < 1.19999996e-07f); + float fSlow5 = (iSlow4 ? 0.0f : std::exp((0.0f - (fConst0 / (iSlow4 ? 1.0f : fSlow3))))); for (int i = 0; (i < count); i = (i + 1)) { float fTemp0 = std::fabs(float(input0[i])); - float fTemp1 = ((fRec0[1] > fTemp0)?fSlow1:fSlow0); + float fTemp1 = ((fRec0[1] > fTemp0) ? fSlow5 : fSlow2); fRec1[0] = ((fRec1[1] * fTemp1) + (fTemp0 * (1.0f - fTemp1))); fRec0[0] = fRec1[0]; output0[i] = FAUSTFLOAT(fRec0[0]); fRec1[1] = fRec1[0]; fRec0[1] = fRec0[0]; - } - } - }; // clang-format on #endif diff --git a/ceammc/ext/src/env/env_smooth.h b/ceammc/ext/src/env/env_smooth.h index fb94232cc3..68a3944937 100644 --- a/ceammc/ext/src/env/env_smooth.h +++ b/ceammc/ext/src/env/env_smooth.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "env_smooth" -Code generated with Faust 2.8.5 (https://faust.grame.fr) -Compilation options: cpp, -scal -ftz 0 +Code generated with Faust 2.22.1 (https://faust.grame.fr) +Compilation options: -lang cpp -scal -ftz 0 ------------------------------------------------------------ */ #ifndef __env_smooth_H__ @@ -14,6 +14,7 @@ Compilation options: cpp, -scal -ftz 0 #include #include +/************************** BEGIN dsp.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -96,23 +97,23 @@ class dsp { * - static class 'classInit': static tables initialization * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void init(int samplingRate) = 0; + virtual void init(int sample_rate) = 0; /** * Init instance state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceInit(int samplingRate) = 0; + virtual void instanceInit(int sample_rate) = 0; /** * Init instance constant state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceConstants(int samplingRate) = 0; + virtual void instanceConstants(int sample_rate) = 0; /* Init default control parameters values */ virtual void instanceResetUserInterface() = 0; @@ -149,8 +150,8 @@ class dsp { * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the number of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) * */ virtual void compute(double /*date_usec*/, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -169,16 +170,16 @@ class decorator_dsp : public dsp { public: - decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + decorator_dsp(dsp* dsp = nullptr):fDSP(dsp) {} virtual ~decorator_dsp() { delete fDSP; } virtual int getNumInputs() { return fDSP->getNumInputs(); } virtual int getNumOutputs() { return fDSP->getNumOutputs(); } virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } virtual int getSampleRate() { return fDSP->getSampleRate(); } - virtual void init(int samplingRate) { fDSP->init(samplingRate); } - virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } - virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void init(int sample_rate) { fDSP->init(sample_rate); } + virtual void instanceInit(int sample_rate) { fDSP->instanceInit(sample_rate); } + virtual void instanceConstants(int sample_rate) { fDSP->instanceConstants(sample_rate); } virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } @@ -233,6 +234,8 @@ class dsp_factory { #endif #endif +/************************** END dsp.h **************************/ +/************************** BEGIN UI.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -272,45 +275,54 @@ class dsp_factory { struct Soundfile; -class UI +template +class UIReal { - + public: - - UI() {} - - virtual ~UI() {} - + + UIReal() {} + virtual ~UIReal() {} + // -- widget's layouts - + virtual void openTabBox(const char* label) = 0; virtual void openHorizontalBox(const char* label) = 0; virtual void openVerticalBox(const char* label) = 0; virtual void closeBox() = 0; - + // -- active widgets - - virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - + + virtual void addButton(const char* label, REAL* zone) = 0; + virtual void addCheckButton(const char* label, REAL* zone) = 0; + virtual void addVerticalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addHorizontalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addNumEntry(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + // -- passive widgets - - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - + + virtual void addHorizontalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + virtual void addVerticalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + // -- soundfiles - + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; - + // -- metadata declarations + + virtual void declare(REAL* zone, const char* key, const char* val) {} +}; + +struct UI : public UIReal +{ - virtual void declare(FAUSTFLOAT*, const char*, const char*) {} + UI() {} + virtual ~UI() {} }; #endif +/************************** END UI.h **************************/ +/************************** BEGIN meta.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -339,11 +351,14 @@ class UI struct Meta { - virtual void declare(const char* key, const char* value) = 0; virtual ~Meta() {}; + virtual void declare(const char* key, const char* value) = 0; + }; #endif +/************************** END meta.h **************************/ +/************************** BEGIN misc.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -366,15 +381,16 @@ struct Meta that work under terms of your choice, so long as this FAUST architecture section is not modified. ************************************************************************/ - + #ifndef __misc__ #define __misc__ #include #include -#include -#include #include +#include +#include +#include using std::max; @@ -382,41 +398,79 @@ using std::min; struct XXXX_Meta : std::map { - void declare(const char* key, const char* value) { (*this)[key]=value; } + void declare(const char* key, const char* value) { (*this)[key] = value; } }; struct MY_Meta : Meta, std::map { - void declare(const char* key, const char* value) { (*this)[key]=value; } + void declare(const char* key, const char* value) { (*this)[key] = value; } }; -inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } +static int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +static int int2pow2(int x) { int r = 0; while ((1<declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.0"); + m->declare("basics.lib/version", "0.1"); m->declare("ceammc.lib/name", "Ceammc PureData misc utils"); m->declare("ceammc.lib/version", "0.1.1"); m->declare("ceammc_ui.lib/name", "CEAMMC faust default UI elements"); @@ -480,7 +535,7 @@ class env_smooth : public dsp { m->declare("envelopes.lib/license", "LGPL with exception"); m->declare("envelopes.lib/name", "Faust Envelope Library"); m->declare("envelopes.lib/version", "0.0"); - m->declare("filename", "env_smooth"); + m->declare("filename", "env_smooth.dsp"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); @@ -493,15 +548,13 @@ class env_smooth : public dsp { virtual int getNumInputs() { return 1; - } virtual int getNumOutputs() { return 1; - } virtual int getInputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -510,14 +563,12 @@ class env_smooth : public dsp { rate = -1; break; } - } return rate; - } virtual int getOutputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -526,42 +577,35 @@ class env_smooth : public dsp { rate = -1; break; } - } return rate; - } - static void classInit(int samplingFreq) { - + static void classInit(int sample_rate) { } - virtual void instanceConstants(int samplingFreq) { - fSamplingFreq = samplingFreq; - fConst0 = (6910.0f / std::min(192000.0f, std::max(1.0f, float(fSamplingFreq)))); - + virtual void instanceConstants(int sample_rate) { + fSampleRate = sample_rate; + fConst0 = (1.0f / std::min(192000.0f, std::max(1.0f, float(fSampleRate)))); } virtual void instanceResetUserInterface() { fHslider0 = FAUSTFLOAT(100.0f); fCheckbox0 = FAUSTFLOAT(0.0f); - } virtual void instanceClear() { for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { fRec0[l0] = 0.0f; - } - } - virtual void init(int samplingFreq) { - classInit(samplingFreq); - instanceInit(samplingFreq); + virtual void init(int sample_rate) { + classInit(sample_rate); + instanceInit(sample_rate); } - virtual void instanceInit(int samplingFreq) { - instanceConstants(samplingFreq); + virtual void instanceInit(int sample_rate) { + instanceConstants(sample_rate); instanceResetUserInterface(); instanceClear(); } @@ -569,9 +613,9 @@ class env_smooth : public dsp { virtual env_smooth* clone() { return new env_smooth(); } + virtual int getSampleRate() { - return fSamplingFreq; - + return fSampleRate; } virtual void buildUserInterface(UI* ui_interface) { @@ -579,24 +623,22 @@ class env_smooth : public dsp { ui_interface->addHorizontalSlider("duration", &fHslider0, 100.0f, 0.0f, 100000.0f, 1.0f); ui_interface->addCheckButton("gate", &fCheckbox0); ui_interface->closeBox(); - } virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { FAUSTFLOAT* input0 = inputs[0]; FAUSTFLOAT* output0 = outputs[0]; - float fSlow0 = std::exp((0.0f - (fConst0 / float(fHslider0)))); - float fSlow1 = ((1.0f - fSlow0) * float(fCheckbox0)); + float fSlow0 = (0.000144717807f * float(fHslider0)); + int iSlow1 = (std::fabs(fSlow0) < 1.19999996e-07f); + float fSlow2 = (iSlow1 ? 0.0f : std::exp((0.0f - (fConst0 / (iSlow1 ? 1.0f : fSlow0))))); + float fSlow3 = (float(fCheckbox0) * (1.0f - fSlow2)); for (int i = 0; (i < count); i = (i + 1)) { - fRec0[0] = (fSlow1 + (fSlow0 * fRec0[1])); + fRec0[0] = ((fRec0[1] * fSlow2) + fSlow3); output0[i] = FAUSTFLOAT((float(input0[i]) * fRec0[0])); fRec0[1] = fRec0[0]; - } - } - }; // clang-format on #endif diff --git a/ceammc/ext/src/env/env_tshift.cpp b/ceammc/ext/src/env/env_tshift.cpp index 7275975236..83278c385d 100644 --- a/ceammc/ext/src/env/env_tshift.cpp +++ b/ceammc/ext/src/env/env_tshift.cpp @@ -8,6 +8,7 @@ EnvTimeShift::EnvTimeShift(const PdArgs& args) shift_ = new FloatProperty("@shift", positionalFloatArgument(0, 0)); createProperty(shift_); + shift_->info().setUnits(PropertyInfoUnits::MSEC); createOutlet(); } diff --git a/ceammc/ext/src/flow/CMakeLists.txt b/ceammc/ext/src/flow/CMakeLists.txt index 7fb3015a79..dd520a517b 100644 --- a/ceammc/ext/src/flow/CMakeLists.txt +++ b/ceammc/ext/src/flow/CMakeLists.txt @@ -20,9 +20,10 @@ ceammc_flow_extension(less) ceammc_flow_extension(less_eq) ceammc_flow_extension(match) ceammc_flow_extension(multiplex) -ceammc_flow_extension(multiplex_tilde) ceammc_flow_extension(multiplex2_tilde) +ceammc_flow_extension(multiplex_tilde) ceammc_flow_extension(once) +ceammc_flow_extension(pack) ceammc_flow_extension(pass) ceammc_flow_extension(pass_if) ceammc_flow_extension(reject) @@ -31,6 +32,7 @@ ceammc_flow_extension(route) ceammc_flow_extension(speedlim) ceammc_flow_extension(split) ceammc_flow_extension(sync) +ceammc_flow_extension(sync_pack) ceammc_flow_extension(tee_tilde) add_library(ceammc_flow STATIC mod_flow.h mod_flow.cpp ${FLOW_SOURCES}) diff --git a/ceammc/ext/src/flow/flow_demultiplex.cpp b/ceammc/ext/src/flow/flow_demultiplex.cpp index 18a370aefc..3a976f6173 100644 --- a/ceammc/ext/src/flow/flow_demultiplex.cpp +++ b/ceammc/ext/src/flow/flow_demultiplex.cpp @@ -79,8 +79,9 @@ void FlowDemultiplex::onInlet(size_t n, const AtomList& l) bool FlowDemultiplex::processAnyProps(t_symbol* sel, const AtomList& lst) { static t_symbol* SYM_INDEX_GET = gensym("@index?"); + static t_symbol* SYM_INDEX_SET = gensym("@index"); - if (!no_props_->value() && sel == SYM_INDEX_GET) + if (!no_props_->value() && (sel == SYM_INDEX_GET || sel == SYM_INDEX_SET)) return BaseObject::processAnyProps(sel, lst); return false; diff --git a/ceammc/ext/src/flow/flow_group.cpp b/ceammc/ext/src/flow/flow_group.cpp index 02e8609a1e..75fff1bfe7 100644 --- a/ceammc/ext/src/flow/flow_group.cpp +++ b/ceammc/ext/src/flow/flow_group.cpp @@ -22,7 +22,10 @@ FlowGroup::FlowGroup(const PdArgs& a) group_size_ = new IntProperty("@by", positionalFloatArgument(0, 1)); createProperty(group_size_); - createCbProperty("@free", &FlowGroup::propFree); + + createCbProperty("@free", &FlowGroup::propFree) + ->info() + .setType(PropertyInfoType::INTEGER); } void FlowGroup::onFloat(float v) diff --git a/ceammc/ext/src/flow/flow_pack.cpp b/ceammc/ext/src/flow/flow_pack.cpp new file mode 100644 index 0000000000..e846516a05 --- /dev/null +++ b/ceammc/ext/src/flow/flow_pack.cpp @@ -0,0 +1,124 @@ +/***************************************************************************** + * Copyright 2019 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#include "flow_pack.h" +#include "ceammc_convert.h" +#include "ceammc_factory.h" + +#include + +static const size_t MIN_INLETS = 1; +static const size_t MAX_INLETS = 256; +static const size_t DEF_INLETS = 1; + +FlowPack::FlowPack(const PdArgs& args) + : BaseObject(args) + , n_(DEF_INLETS) +{ + n_ = static_cast(clip(positionalFloatArgument(0, MIN_INLETS))); + + // (in/out)lets + for (size_t i = 1; i < n_; i++) + createInlet(); + + createOutlet(); + + // fill all with zeroes + msg_.fill(Atom(0.f), n_); + + // fill default values from positiona arguments (starting from index 1) + if (!args.args.empty()) { + const size_t N = std::min(msg_.size(), args.args.size() - 1); + for (size_t i = 0; i < N; i++) + msg_[i] = args.args[i + 1]; + } +} + +void FlowPack::parseProperties() +{ +} + +void FlowPack::onBang() +{ + output(0); +} + +void FlowPack::onFloat(t_float f) +{ + msg_[0] = Atom(f); + output(0); +} + +void FlowPack::onSymbol(t_symbol* s) +{ + msg_[0] = Atom(s); + output(0); +} + +void FlowPack::onInlet(size_t idx, const AtomList& l) +{ + if (!l.empty()) { + if (idx >= msg_.size()) { + OBJ_ERR << "invalid inlet index: " << idx; + return; + } + + const size_t N = std::min(idx + l.size(), msg_.size()); + for (size_t i = idx; i < N; i++) + msg_[i] = l[i - idx]; + } + + output(idx); +} + +void FlowPack::onList(const AtomList& l) +{ + if (l.size() > msg_.size()) + OBJ_ERR << "too many values in list: " << l.size() << ". Using only first " << msg_.size(); + + const size_t N = std::min(l.size(), msg_.size()); + for (size_t i = 0; i < N; i++) + msg_[i] = l[i]; + + output(0); +} + +void FlowPack::onAny(t_symbol* s, const AtomList& l) +{ + if ((l.size() + 1) > msg_.size()) + OBJ_ERR << "too many atoms in message: " << (l.size() + 1); + + const size_t N = std::min(l.size() + 1, msg_.size()); + + msg_[0] = s; + for (size_t i = 1; i < N; i++) + msg_[i] = l[i - 1]; + + anyTo(0, msg_); +} + +bool FlowPack::processAnyProps(t_symbol* s, const AtomList& l) +{ + return false; +} + +void FlowPack::output(size_t inlet_idx) +{ + if (inlet_idx == 0) + listTo(0, msg_); +} + +void setup_flow_pack() +{ + ObjectFactory obj("flow.pack"); +} diff --git a/ceammc/ext/src/flow/flow_pack.h b/ceammc/ext/src/flow/flow_pack.h new file mode 100644 index 0000000000..6eb5efc871 --- /dev/null +++ b/ceammc/ext/src/flow/flow_pack.h @@ -0,0 +1,45 @@ +/***************************************************************************** + * Copyright 2019 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#ifndef FLOW_PACK_H +#define FLOW_PACK_H + +#include "ceammc_object.h" + +using namespace ceammc; + +class FlowPack : public BaseObject { +private: + size_t n_; + +protected: + AtomList msg_; + +public: + FlowPack(const PdArgs& args); + void parseProperties() final; + + void onBang() final; + void onFloat(t_float f) final; + void onSymbol(t_symbol* s) final; + void onInlet(size_t idx, const AtomList& l) final; + void onList(const AtomList& l) final; + void onAny(t_symbol* s, const AtomList& l) final; + bool processAnyProps(t_symbol* s, const AtomList& l) final; + + virtual void output(size_t inlet_idx); +}; + +void setup_flow_pack(); + +#endif // FLOW_PACK_H diff --git a/ceammc/ext/src/flow/flow_sync_pack.cpp b/ceammc/ext/src/flow/flow_sync_pack.cpp new file mode 100644 index 0000000000..f058cfc004 --- /dev/null +++ b/ceammc/ext/src/flow/flow_sync_pack.cpp @@ -0,0 +1,31 @@ +/***************************************************************************** + * Copyright 2020 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#include "flow_sync_pack.h" +#include "ceammc_factory.h" + +FlowSyncPack::FlowSyncPack(const PdArgs& args) + : FlowPack(args) +{ +} + +void FlowSyncPack::output(size_t inlet_idx) +{ + listTo(0, msg_); +} + +void setup_flow_sync_pack() +{ + ObjectFactory obj("flow.sync_pack"); + obj.addAlias("flow.pack'"); +} diff --git a/ceammc/ext/src/flow/flow_sync_pack.h b/ceammc/ext/src/flow/flow_sync_pack.h new file mode 100644 index 0000000000..93762f6ea8 --- /dev/null +++ b/ceammc/ext/src/flow/flow_sync_pack.h @@ -0,0 +1,27 @@ +/***************************************************************************** + * Copyright 2020 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#ifndef FLOWSYNCPACK_H +#define FLOWSYNCPACK_H + +#include "flow_pack.h" + +class FlowSyncPack : public FlowPack { +public: + FlowSyncPack(const PdArgs& args); + void output(size_t inlet_idx) final; +}; + +void setup_flow_sync_pack(); + +#endif // FLOWSYNCPACK_H diff --git a/ceammc/ext/src/flow/mod_flow.cpp b/ceammc/ext/src/flow/mod_flow.cpp index f2b3422736..2d84dd674a 100644 --- a/ceammc/ext/src/flow/mod_flow.cpp +++ b/ceammc/ext/src/flow/mod_flow.cpp @@ -15,6 +15,7 @@ #include "flow_multiplex2_tilde.h" #include "flow_multiplex_tilde.h" #include "flow_once.h" +#include "flow_pack.h" #include "flow_pass.h" #include "flow_pass_if.h" #include "flow_reject.h" @@ -23,6 +24,7 @@ #include "flow_speedlim.h" #include "flow_split.h" #include "flow_sync.h" +#include "flow_sync_pack.h" #include "flow_tee_tilde.h" void setup_flow_match(); @@ -42,8 +44,8 @@ void ceammc_flow_setup() setup_flow_append(); setup_flow_count(); setup_flow_demultiplex(); - setup_flow_demultiplex_tilde(); setup_flow_demultiplex2_tilde(); + setup_flow_demultiplex_tilde(); setup_flow_gate(); setup_flow_interval(); setup_flow_less(); @@ -53,6 +55,8 @@ void ceammc_flow_setup() setup_flow_multiplex2_tilde(); setup_flow_multiplex_tilde(); setup_flow_once(); + setup_flow_pack(); setup_flow_route(); setup_flow_speedlim(); + setup_flow_sync_pack(); } diff --git a/ceammc/ext/src/flt/flt_biquad.h b/ceammc/ext/src/flt/flt_biquad.h index cd1b21ab4a..53fbad97e2 100644 --- a/ceammc/ext/src/flt/flt_biquad.h +++ b/ceammc/ext/src/flt/flt_biquad.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "flt_biquad" -Code generated with Faust 2.15.10 (https://faust.grame.fr) -Compilation options: cpp, -scal -ftz 0 +Code generated with Faust 2.22.1 (https://faust.grame.fr) +Compilation options: -lang cpp -scal -ftz 0 ------------------------------------------------------------ */ #ifndef __biquad_H__ @@ -39,6 +39,7 @@ Compilation options: cpp, -scal -ftz 0 #include #include +/************************** BEGIN dsp.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -121,23 +122,23 @@ class dsp { * - static class 'classInit': static tables initialization * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void init(int samplingRate) = 0; + virtual void init(int sample_rate) = 0; /** * Init instance state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceInit(int samplingRate) = 0; + virtual void instanceInit(int sample_rate) = 0; /** * Init instance constant state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceConstants(int samplingRate) = 0; + virtual void instanceConstants(int sample_rate) = 0; /* Init default control parameters values */ virtual void instanceResetUserInterface() = 0; @@ -174,8 +175,8 @@ class dsp { * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the number of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) * */ virtual void compute(double /*date_usec*/, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -194,16 +195,16 @@ class decorator_dsp : public dsp { public: - decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + decorator_dsp(dsp* dsp = nullptr):fDSP(dsp) {} virtual ~decorator_dsp() { delete fDSP; } virtual int getNumInputs() { return fDSP->getNumInputs(); } virtual int getNumOutputs() { return fDSP->getNumOutputs(); } virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } virtual int getSampleRate() { return fDSP->getSampleRate(); } - virtual void init(int samplingRate) { fDSP->init(samplingRate); } - virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } - virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void init(int sample_rate) { fDSP->init(sample_rate); } + virtual void instanceInit(int sample_rate) { fDSP->instanceInit(sample_rate); } + virtual void instanceConstants(int sample_rate) { fDSP->instanceConstants(sample_rate); } virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } @@ -258,6 +259,8 @@ class dsp_factory { #endif #endif +/************************** END dsp.h **************************/ +/************************** BEGIN UI.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -297,45 +300,54 @@ class dsp_factory { struct Soundfile; -class UI +template +class UIReal { - + public: - - UI() {} - - virtual ~UI() {} - + + UIReal() {} + virtual ~UIReal() {} + // -- widget's layouts - + virtual void openTabBox(const char* label) = 0; virtual void openHorizontalBox(const char* label) = 0; virtual void openVerticalBox(const char* label) = 0; virtual void closeBox() = 0; - + // -- active widgets - - virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - + + virtual void addButton(const char* label, REAL* zone) = 0; + virtual void addCheckButton(const char* label, REAL* zone) = 0; + virtual void addVerticalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addHorizontalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addNumEntry(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + // -- passive widgets - - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - + + virtual void addHorizontalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + virtual void addVerticalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + // -- soundfiles - + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; - + // -- metadata declarations + + virtual void declare(REAL* zone, const char* key, const char* val) {} +}; - virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +struct UI : public UIReal +{ + + UI() {} + virtual ~UI() {} }; #endif +/************************** END UI.h **************************/ +/************************** BEGIN meta.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -364,11 +376,14 @@ class UI struct Meta { - virtual void declare(const char* key, const char* value) = 0; virtual ~Meta() {}; + virtual void declare(const char* key, const char* value) = 0; + }; #endif +/************************** END meta.h **************************/ +/************************** BEGIN misc.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -391,7 +406,7 @@ struct Meta that work under terms of your choice, so long as this FAUST architecture section is not modified. ************************************************************************/ - + #ifndef __misc__ #define __misc__ @@ -399,6 +414,8 @@ struct Meta #include #include #include +#include +#include using std::max; @@ -420,27 +437,65 @@ static int int2pow2(int x) { int r = 0; while ((1<declare("filename", "flt_biquad"); + m->declare("filename", "flt_biquad.dsp"); + m->declare("filters.lib/lowpass0_highpass1", "Copyright (C) 2003-2019 by Julius O. Smith III "); m->declare("filters.lib/name", "Faust Filters Library"); - m->declare("filters.lib/version", "0.0"); + m->declare("filters.lib/tf21:author", "Julius O. Smith III"); + m->declare("filters.lib/tf21:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/tf21:license", "MIT-style STK-4.3 license"); m->declare("name", "flt_biquad"); } virtual int getNumInputs() { return 6; - } virtual int getNumOutputs() { return 1; - } virtual int getInputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -562,14 +619,12 @@ class biquad : public dsp { rate = -1; break; } - } return rate; - } virtual int getOutputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -578,44 +633,35 @@ class biquad : public dsp { rate = -1; break; } - } return rate; - } - static void classInit(int samplingFreq) { - + static void classInit(int sample_rate) { } - virtual void instanceConstants(int samplingFreq) { - fSamplingFreq = samplingFreq; - + virtual void instanceConstants(int sample_rate) { + fSampleRate = sample_rate; } virtual void instanceResetUserInterface() { - } virtual void instanceClear() { for (int l0 = 0; (l0 < 3); l0 = (l0 + 1)) { fVec0[l0] = 0.0f; - } for (int l1 = 0; (l1 < 3); l1 = (l1 + 1)) { fRec0[l1] = 0.0f; - } - } - virtual void init(int samplingFreq) { - classInit(samplingFreq); - instanceInit(samplingFreq); + virtual void init(int sample_rate) { + classInit(sample_rate); + instanceInit(sample_rate); } - - virtual void instanceInit(int samplingFreq) { - instanceConstants(samplingFreq); + virtual void instanceInit(int sample_rate) { + instanceConstants(sample_rate); instanceResetUserInterface(); instanceClear(); } @@ -625,14 +671,12 @@ class biquad : public dsp { } virtual int getSampleRate() { - return fSamplingFreq; - + return fSampleRate; } virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("flt_biquad"); ui_interface->closeBox(); - } virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { @@ -646,15 +690,13 @@ class biquad : public dsp { for (int i = 0; (i < count); i = (i + 1)) { float fTemp0 = float(input0[i]); fVec0[0] = fTemp0; - fRec0[0] = ((((fVec0[2] * float(input3[i])) + (fVec0[1] * float(input2[i]))) + (fTemp0 * float(input1[i]))) - ((fRec0[1] * float(input4[i])) + (fRec0[2] * float(input5[i])))); + fRec0[0] = (((float(input2[i]) * fVec0[1]) + ((fTemp0 * float(input1[i])) + (float(input3[i]) * fVec0[2]))) - ((float(input4[i]) * fRec0[1]) + (float(input5[i]) * fRec0[2]))); output0[i] = FAUSTFLOAT(fRec0[0]); fVec0[2] = fVec0[1]; fVec0[1] = fVec0[0]; fRec0[2] = fRec0[1]; fRec0[1] = fRec0[0]; - } - } }; diff --git a/ceammc/ext/src/flt/flt_bpf12.h b/ceammc/ext/src/flt/flt_bpf12.h index a1891f04ef..19cea57c69 100644 --- a/ceammc/ext/src/flt/flt_bpf12.h +++ b/ceammc/ext/src/flt/flt_bpf12.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "flt.bpf12" -Code generated with Faust 2.15.10 (https://faust.grame.fr) -Compilation options: cpp, -scal -ftz 0 +Code generated with Faust 2.22.1 (https://faust.grame.fr) +Compilation options: -lang cpp -scal -ftz 0 ------------------------------------------------------------ */ #ifndef __flt_bpf12_H__ @@ -14,6 +14,7 @@ Compilation options: cpp, -scal -ftz 0 #include #include +/************************** BEGIN dsp.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -96,23 +97,23 @@ class dsp { * - static class 'classInit': static tables initialization * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void init(int samplingRate) = 0; + virtual void init(int sample_rate) = 0; /** * Init instance state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceInit(int samplingRate) = 0; + virtual void instanceInit(int sample_rate) = 0; /** * Init instance constant state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceConstants(int samplingRate) = 0; + virtual void instanceConstants(int sample_rate) = 0; /* Init default control parameters values */ virtual void instanceResetUserInterface() = 0; @@ -149,8 +150,8 @@ class dsp { * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the number of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) * */ virtual void compute(double /*date_usec*/, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -169,16 +170,16 @@ class decorator_dsp : public dsp { public: - decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + decorator_dsp(dsp* dsp = nullptr):fDSP(dsp) {} virtual ~decorator_dsp() { delete fDSP; } virtual int getNumInputs() { return fDSP->getNumInputs(); } virtual int getNumOutputs() { return fDSP->getNumOutputs(); } virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } virtual int getSampleRate() { return fDSP->getSampleRate(); } - virtual void init(int samplingRate) { fDSP->init(samplingRate); } - virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } - virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void init(int sample_rate) { fDSP->init(sample_rate); } + virtual void instanceInit(int sample_rate) { fDSP->instanceInit(sample_rate); } + virtual void instanceConstants(int sample_rate) { fDSP->instanceConstants(sample_rate); } virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } @@ -233,6 +234,8 @@ class dsp_factory { #endif #endif +/************************** END dsp.h **************************/ +/************************** BEGIN UI.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -272,45 +275,54 @@ class dsp_factory { struct Soundfile; -class UI +template +class UIReal { - + public: - - UI() {} - - virtual ~UI() {} - + + UIReal() {} + virtual ~UIReal() {} + // -- widget's layouts - + virtual void openTabBox(const char* label) = 0; virtual void openHorizontalBox(const char* label) = 0; virtual void openVerticalBox(const char* label) = 0; virtual void closeBox() = 0; - + // -- active widgets - - virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - + + virtual void addButton(const char* label, REAL* zone) = 0; + virtual void addCheckButton(const char* label, REAL* zone) = 0; + virtual void addVerticalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addHorizontalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addNumEntry(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + // -- passive widgets - - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - + + virtual void addHorizontalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + virtual void addVerticalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + // -- soundfiles - + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; - + // -- metadata declarations + + virtual void declare(REAL* zone, const char* key, const char* val) {} +}; - virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +struct UI : public UIReal +{ + + UI() {} + virtual ~UI() {} }; #endif +/************************** END UI.h **************************/ +/************************** BEGIN meta.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -339,11 +351,14 @@ class UI struct Meta { - virtual void declare(const char* key, const char* value) = 0; virtual ~Meta() {}; + virtual void declare(const char* key, const char* value) = 0; + }; #endif +/************************** END meta.h **************************/ +/************************** BEGIN misc.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -366,7 +381,7 @@ struct Meta that work under terms of your choice, so long as this FAUST architecture section is not modified. ************************************************************************/ - + #ifndef __misc__ #define __misc__ @@ -374,6 +389,8 @@ struct Meta #include #include #include +#include +#include using std::max; @@ -395,27 +412,65 @@ static int int2pow2(int x) { int r = 0; while ((1<declare("ceammc_ui.lib/name", "CEAMMC faust default UI elements"); m->declare("ceammc_ui.lib/version", "0.1.1"); - m->declare("filename", "flt_bpf12"); + m->declare("filename", "flt_bpf12.dsp"); + m->declare("filters.lib/bandpass0_bandstop1:author", "Julius O. Smith III"); + m->declare("filters.lib/bandpass0_bandstop1:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/bandpass0_bandstop1:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/bandpass:author", "Julius O. Smith III"); + m->declare("filters.lib/bandpass:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/bandpass:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/fir:author", "Julius O. Smith III"); + m->declare("filters.lib/fir:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/fir:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/iir:author", "Julius O. Smith III"); + m->declare("filters.lib/iir:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/iir:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/lowpass0_highpass1", "Copyright (C) 2003-2019 by Julius O. Smith III "); m->declare("filters.lib/name", "Faust Filters Library"); - m->declare("filters.lib/version", "0.0"); + m->declare("filters.lib/tf1sb:author", "Julius O. Smith III"); + m->declare("filters.lib/tf1sb:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/tf1sb:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/tf2:author", "Julius O. Smith III"); + m->declare("filters.lib/tf2:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/tf2:license", "MIT-style STK-4.3 license"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); @@ -499,15 +572,13 @@ class flt_bpf12 : public dsp { virtual int getNumInputs() { return 1; - } virtual int getNumOutputs() { return 1; - } virtual int getInputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -516,14 +587,12 @@ class flt_bpf12 : public dsp { rate = -1; break; } - } return rate; - } virtual int getOutputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -532,19 +601,16 @@ class flt_bpf12 : public dsp { rate = -1; break; } - } return rate; - } - static void classInit(int samplingFreq) { - + static void classInit(int sample_rate) { } - virtual void instanceConstants(int samplingFreq) { - fSamplingFreq = samplingFreq; - fConst0 = std::min(192000.0f, std::max(1.0f, float(fSamplingFreq))); + virtual void instanceConstants(int sample_rate) { + fSampleRate = sample_rate; + fConst0 = std::min(192000.0f, std::max(1.0f, float(fSampleRate))); fConst1 = (2.0f / fConst0); fConst2 = flt_bpf12_faustpower2_f((1.0f / fConst0)); fConst3 = (2.0f * fConst2); @@ -553,38 +619,31 @@ class flt_bpf12 : public dsp { fConst6 = (0.5f * fConst0); fConst7 = (2.0f * fConst0); fConst8 = (0.5f / fConst0); - } virtual void instanceResetUserInterface() { fVslider0 = FAUSTFLOAT(1000.0f); fVslider1 = FAUSTFLOAT(2.0f); - } virtual void instanceClear() { for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { fRec1[l0] = 0.0f; - } for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { fRec2[l1] = 0.0f; - } for (int l2 = 0; (l2 < 3); l2 = (l2 + 1)) { fRec0[l2] = 0.0f; - } - } - virtual void init(int samplingFreq) { - classInit(samplingFreq); - instanceInit(samplingFreq); + virtual void init(int sample_rate) { + classInit(sample_rate); + instanceInit(sample_rate); } - - virtual void instanceInit(int samplingFreq) { - instanceConstants(samplingFreq); + virtual void instanceInit(int sample_rate) { + instanceConstants(sample_rate); instanceResetUserInterface(); instanceClear(); } @@ -594,8 +653,7 @@ class flt_bpf12 : public dsp { } virtual int getSampleRate() { - return fSamplingFreq; - + return fSampleRate; } virtual void buildUserInterface(UI* ui_interface) { @@ -604,7 +662,6 @@ class flt_bpf12 : public dsp { ui_interface->addVerticalSlider("freq", &fVslider0, 1000.0f, 20.0f, 20000.0f, 0.100000001f); ui_interface->addVerticalSlider("q", &fVslider1, 2.0f, 0.00999999978f, 100.0f, 0.100000001f); ui_interface->closeBox(); - } virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { @@ -628,9 +685,7 @@ class flt_bpf12 : public dsp { fRec2[1] = fRec2[0]; fRec0[2] = fRec0[1]; fRec0[1] = fRec0[0]; - } - } }; diff --git a/ceammc/ext/src/flt/flt_bpf24.h b/ceammc/ext/src/flt/flt_bpf24.h index 490eab9c73..ed0359eaf2 100644 --- a/ceammc/ext/src/flt/flt_bpf24.h +++ b/ceammc/ext/src/flt/flt_bpf24.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "flt.bpf24" -Code generated with Faust 2.15.10 (https://faust.grame.fr) -Compilation options: cpp, -scal -ftz 0 +Code generated with Faust 2.22.1 (https://faust.grame.fr) +Compilation options: -lang cpp -scal -ftz 0 ------------------------------------------------------------ */ #ifndef __flt_bpf24_H__ @@ -14,6 +14,7 @@ Compilation options: cpp, -scal -ftz 0 #include #include +/************************** BEGIN dsp.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -96,23 +97,23 @@ class dsp { * - static class 'classInit': static tables initialization * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void init(int samplingRate) = 0; + virtual void init(int sample_rate) = 0; /** * Init instance state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceInit(int samplingRate) = 0; + virtual void instanceInit(int sample_rate) = 0; /** * Init instance constant state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceConstants(int samplingRate) = 0; + virtual void instanceConstants(int sample_rate) = 0; /* Init default control parameters values */ virtual void instanceResetUserInterface() = 0; @@ -149,8 +150,8 @@ class dsp { * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the number of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) * */ virtual void compute(double /*date_usec*/, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -169,16 +170,16 @@ class decorator_dsp : public dsp { public: - decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + decorator_dsp(dsp* dsp = nullptr):fDSP(dsp) {} virtual ~decorator_dsp() { delete fDSP; } virtual int getNumInputs() { return fDSP->getNumInputs(); } virtual int getNumOutputs() { return fDSP->getNumOutputs(); } virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } virtual int getSampleRate() { return fDSP->getSampleRate(); } - virtual void init(int samplingRate) { fDSP->init(samplingRate); } - virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } - virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void init(int sample_rate) { fDSP->init(sample_rate); } + virtual void instanceInit(int sample_rate) { fDSP->instanceInit(sample_rate); } + virtual void instanceConstants(int sample_rate) { fDSP->instanceConstants(sample_rate); } virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } @@ -233,6 +234,8 @@ class dsp_factory { #endif #endif +/************************** END dsp.h **************************/ +/************************** BEGIN UI.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -272,45 +275,54 @@ class dsp_factory { struct Soundfile; -class UI +template +class UIReal { - + public: - - UI() {} - - virtual ~UI() {} - + + UIReal() {} + virtual ~UIReal() {} + // -- widget's layouts - + virtual void openTabBox(const char* label) = 0; virtual void openHorizontalBox(const char* label) = 0; virtual void openVerticalBox(const char* label) = 0; virtual void closeBox() = 0; - + // -- active widgets - - virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - + + virtual void addButton(const char* label, REAL* zone) = 0; + virtual void addCheckButton(const char* label, REAL* zone) = 0; + virtual void addVerticalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addHorizontalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addNumEntry(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + // -- passive widgets - - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - + + virtual void addHorizontalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + virtual void addVerticalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + // -- soundfiles - + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; - + // -- metadata declarations + + virtual void declare(REAL* zone, const char* key, const char* val) {} +}; + +struct UI : public UIReal +{ - virtual void declare(FAUSTFLOAT*, const char*, const char*) {} + UI() {} + virtual ~UI() {} }; #endif +/************************** END UI.h **************************/ +/************************** BEGIN meta.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -339,11 +351,14 @@ class UI struct Meta { - virtual void declare(const char* key, const char* value) = 0; virtual ~Meta() {}; + virtual void declare(const char* key, const char* value) = 0; + }; #endif +/************************** END meta.h **************************/ +/************************** BEGIN misc.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -366,7 +381,7 @@ struct Meta that work under terms of your choice, so long as this FAUST architecture section is not modified. ************************************************************************/ - + #ifndef __misc__ #define __misc__ @@ -374,6 +389,8 @@ struct Meta #include #include #include +#include +#include using std::max; @@ -395,27 +412,65 @@ static int int2pow2(int x) { int r = 0; while ((1<declare("ceammc_ui.lib/name", "CEAMMC faust default UI elements"); m->declare("ceammc_ui.lib/version", "0.1.1"); - m->declare("filename", "flt_bpf24"); + m->declare("filename", "flt_bpf24.dsp"); + m->declare("filters.lib/bandpass0_bandstop1:author", "Julius O. Smith III"); + m->declare("filters.lib/bandpass0_bandstop1:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/bandpass0_bandstop1:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/bandpass:author", "Julius O. Smith III"); + m->declare("filters.lib/bandpass:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/bandpass:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/fir:author", "Julius O. Smith III"); + m->declare("filters.lib/fir:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/fir:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/iir:author", "Julius O. Smith III"); + m->declare("filters.lib/iir:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/iir:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/lowpass0_highpass1", "Copyright (C) 2003-2019 by Julius O. Smith III "); m->declare("filters.lib/name", "Faust Filters Library"); - m->declare("filters.lib/version", "0.0"); + m->declare("filters.lib/tf2sb:author", "Julius O. Smith III"); + m->declare("filters.lib/tf2sb:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/tf2sb:license", "MIT-style STK-4.3 license"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); @@ -511,15 +579,13 @@ class flt_bpf24 : public dsp { virtual int getNumInputs() { return 1; - } virtual int getNumOutputs() { return 1; - } virtual int getInputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -528,14 +594,12 @@ class flt_bpf24 : public dsp { rate = -1; break; } - } return rate; - } virtual int getOutputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -544,19 +608,16 @@ class flt_bpf24 : public dsp { rate = -1; break; } - } return rate; - } - static void classInit(int samplingFreq) { - + static void classInit(int sample_rate) { } - virtual void instanceConstants(int samplingFreq) { - fSamplingFreq = samplingFreq; - fConst0 = std::min(192000.0f, std::max(1.0f, float(fSamplingFreq))); + virtual void instanceConstants(int sample_rate) { + fSampleRate = sample_rate; + fConst0 = std::min(192000.0f, std::max(1.0f, float(fSampleRate))); fConst1 = (1.0f / fConst0); fConst2 = flt_bpf24_faustpower2_f(fConst1); fConst3 = flt_bpf24_faustpower3_f(fConst1); @@ -569,38 +630,31 @@ class flt_bpf24 : public dsp { fConst10 = (22.6274166f / fConst0); fConst11 = (6.0f * fConst2); fConst12 = (11.3137083f / fConst0); - } virtual void instanceResetUserInterface() { fVslider0 = FAUSTFLOAT(1000.0f); fVslider1 = FAUSTFLOAT(2.0f); - } virtual void instanceClear() { for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { fRec1[l0] = 0.0f; - } for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { fRec2[l1] = 0.0f; - } for (int l2 = 0; (l2 < 5); l2 = (l2 + 1)) { fRec0[l2] = 0.0f; - } - } - virtual void init(int samplingFreq) { - classInit(samplingFreq); - instanceInit(samplingFreq); + virtual void init(int sample_rate) { + classInit(sample_rate); + instanceInit(sample_rate); } - - virtual void instanceInit(int samplingFreq) { - instanceConstants(samplingFreq); + virtual void instanceInit(int sample_rate) { + instanceConstants(sample_rate); instanceResetUserInterface(); instanceClear(); } @@ -610,8 +664,7 @@ class flt_bpf24 : public dsp { } virtual int getSampleRate() { - return fSamplingFreq; - + return fSampleRate; } virtual void buildUserInterface(UI* ui_interface) { @@ -620,7 +673,6 @@ class flt_bpf24 : public dsp { ui_interface->addVerticalSlider("freq", &fVslider0, 1000.0f, 20.0f, 20000.0f, 0.100000001f); ui_interface->addVerticalSlider("q", &fVslider1, 2.0f, 0.00999999978f, 100.0f, 0.100000001f); ui_interface->closeBox(); - } virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { @@ -641,22 +693,19 @@ class flt_bpf24 : public dsp { float fTemp7 = (fConst10 * fTemp4); float fTemp8 = flt_bpf24_faustpower2_f(fTemp4); float fTemp9 = (8.0f * fTemp8); - float fTemp10 = ((8.0f * fTemp3) + (4.0f * fTemp8)); + float fTemp10 = ((4.0f * fTemp8) + (8.0f * fTemp3)); float fTemp11 = (fConst1 * fTemp3); float fTemp12 = (2.82842708f * fTemp4); float fTemp13 = (fConst12 * fTemp4); float fTemp14 = (((fConst2 * (fTemp10 + (fConst1 * (fTemp3 * (fTemp11 + fTemp12))))) + fTemp13) + 16.0f); - fRec0[0] = (float(input0[i]) - (((((fRec0[1] * ((fConst3 * (fTemp3 * (fTemp5 + fTemp6))) + (-64.0f - fTemp7))) + (fRec0[2] * ((fConst2 * ((0.0f - (fTemp9 + (16.0f * fTemp3))) + (fConst11 * flt_bpf24_faustpower4_f(fTemp2)))) + 96.0f))) + (((fTemp7 + (fConst3 * (fTemp3 * (fTemp6 - fTemp5)))) + -64.0f) * fRec0[3])) + (fRec0[4] * ((fConst2 * (fTemp10 + (fConst1 * (fTemp3 * (fTemp11 - fTemp12))))) + (16.0f - fTemp13)))) / fTemp14)); + fRec0[0] = (float(input0[i]) - (((((fRec0[1] * ((fConst3 * (fTemp3 * (fTemp5 + fTemp6))) + (-64.0f - fTemp7))) + (fRec0[2] * ((fConst2 * ((0.0f - (fTemp9 + (16.0f * fTemp3))) + (fConst11 * flt_bpf24_faustpower4_f(fTemp2)))) + 96.0f))) + (fRec0[3] * ((fTemp7 + (fConst3 * (fTemp3 * (fTemp6 - fTemp5)))) + -64.0f))) + (fRec0[4] * ((fConst2 * (fTemp10 + (fConst1 * (fTemp3 * (fTemp11 - fTemp12))))) + (16.0f - fTemp13)))) / fTemp14)); output0[i] = FAUSTFLOAT((fConst2 * ((((fRec0[2] * (0.0f - fTemp9)) + (4.0f * (fRec0[0] * fTemp8))) + (4.0f * (fTemp8 * fRec0[4]))) / fTemp14))); fRec1[1] = fRec1[0]; fRec2[1] = fRec2[0]; for (int j0 = 4; (j0 > 0); j0 = (j0 - 1)) { fRec0[j0] = fRec0[(j0 - 1)]; - } - } - } }; diff --git a/ceammc/ext/src/flt/flt_c_bpf.h b/ceammc/ext/src/flt/flt_c_bpf.h index c0441490a9..6a9663b3aa 100644 --- a/ceammc/ext/src/flt/flt_c_bpf.h +++ b/ceammc/ext/src/flt/flt_c_bpf.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "flt_c_bpf" -Code generated with Faust 2.15.10 (https://faust.grame.fr) -Compilation options: cpp, -scal -ftz 0 +Code generated with Faust 2.22.1 (https://faust.grame.fr) +Compilation options: -lang cpp -scal -ftz 0 ------------------------------------------------------------ */ #ifndef __flt_c_bpf_H__ @@ -14,6 +14,7 @@ Compilation options: cpp, -scal -ftz 0 #include #include +/************************** BEGIN dsp.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -96,23 +97,23 @@ class dsp { * - static class 'classInit': static tables initialization * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void init(int samplingRate) = 0; + virtual void init(int sample_rate) = 0; /** * Init instance state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceInit(int samplingRate) = 0; + virtual void instanceInit(int sample_rate) = 0; /** * Init instance constant state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceConstants(int samplingRate) = 0; + virtual void instanceConstants(int sample_rate) = 0; /* Init default control parameters values */ virtual void instanceResetUserInterface() = 0; @@ -149,8 +150,8 @@ class dsp { * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the number of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) * */ virtual void compute(double /*date_usec*/, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -169,16 +170,16 @@ class decorator_dsp : public dsp { public: - decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + decorator_dsp(dsp* dsp = nullptr):fDSP(dsp) {} virtual ~decorator_dsp() { delete fDSP; } virtual int getNumInputs() { return fDSP->getNumInputs(); } virtual int getNumOutputs() { return fDSP->getNumOutputs(); } virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } virtual int getSampleRate() { return fDSP->getSampleRate(); } - virtual void init(int samplingRate) { fDSP->init(samplingRate); } - virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } - virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void init(int sample_rate) { fDSP->init(sample_rate); } + virtual void instanceInit(int sample_rate) { fDSP->instanceInit(sample_rate); } + virtual void instanceConstants(int sample_rate) { fDSP->instanceConstants(sample_rate); } virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } @@ -233,6 +234,8 @@ class dsp_factory { #endif #endif +/************************** END dsp.h **************************/ +/************************** BEGIN UI.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -272,45 +275,54 @@ class dsp_factory { struct Soundfile; -class UI +template +class UIReal { - + public: - - UI() {} - - virtual ~UI() {} - + + UIReal() {} + virtual ~UIReal() {} + // -- widget's layouts - + virtual void openTabBox(const char* label) = 0; virtual void openHorizontalBox(const char* label) = 0; virtual void openVerticalBox(const char* label) = 0; virtual void closeBox() = 0; - + // -- active widgets - - virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - + + virtual void addButton(const char* label, REAL* zone) = 0; + virtual void addCheckButton(const char* label, REAL* zone) = 0; + virtual void addVerticalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addHorizontalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addNumEntry(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + // -- passive widgets - - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - + + virtual void addHorizontalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + virtual void addVerticalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + // -- soundfiles - + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; - + // -- metadata declarations + + virtual void declare(REAL* zone, const char* key, const char* val) {} +}; - virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +struct UI : public UIReal +{ + + UI() {} + virtual ~UI() {} }; #endif +/************************** END UI.h **************************/ +/************************** BEGIN meta.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -339,11 +351,14 @@ class UI struct Meta { - virtual void declare(const char* key, const char* value) = 0; virtual ~Meta() {}; + virtual void declare(const char* key, const char* value) = 0; + }; #endif +/************************** END meta.h **************************/ +/************************** BEGIN misc.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -366,7 +381,7 @@ struct Meta that work under terms of your choice, so long as this FAUST architecture section is not modified. ************************************************************************/ - + #ifndef __misc__ #define __misc__ @@ -374,6 +389,8 @@ struct Meta #include #include #include +#include +#include using std::max; @@ -395,27 +412,65 @@ static int int2pow2(int x) { int r = 0; while ((1<declare("ceammc_ui.lib/name", "CEAMMC faust default UI elements"); m->declare("ceammc_ui.lib/version", "0.1.1"); - m->declare("filename", "flt_c_bpf"); + m->declare("filename", "flt_c_bpf.dsp"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); @@ -490,15 +546,13 @@ class flt_c_bpf : public dsp { virtual int getNumInputs() { return 1; - } virtual int getNumOutputs() { return 5; - } virtual int getInputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 0; break; @@ -507,14 +561,12 @@ class flt_c_bpf : public dsp { rate = -1; break; } - } return rate; - } virtual int getOutputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -539,47 +591,38 @@ class flt_c_bpf : public dsp { rate = -1; break; } - } return rate; - } - static void classInit(int samplingFreq) { - + static void classInit(int sample_rate) { } - virtual void instanceConstants(int samplingFreq) { - fSamplingFreq = samplingFreq; - fConst0 = (6.28318548f / std::min(192000.0f, std::max(1.0f, float(fSamplingFreq)))); - + virtual void instanceConstants(int sample_rate) { + fSampleRate = sample_rate; + fConst0 = (6.28318548f / std::min(192000.0f, std::max(1.0f, float(fSampleRate)))); } virtual void instanceResetUserInterface() { fVslider0 = FAUSTFLOAT(1000.0f); fVslider1 = FAUSTFLOAT(0.10000000000000001f); - } virtual void instanceClear() { for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { fRec0[l0] = 0.0f; - } for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { fRec1[l1] = 0.0f; - } - } - virtual void init(int samplingFreq) { - classInit(samplingFreq); - instanceInit(samplingFreq); + virtual void init(int sample_rate) { + classInit(sample_rate); + instanceInit(sample_rate); } - - virtual void instanceInit(int samplingFreq) { - instanceConstants(samplingFreq); + virtual void instanceInit(int sample_rate) { + instanceConstants(sample_rate); instanceResetUserInterface(); instanceClear(); } @@ -589,8 +632,7 @@ class flt_c_bpf : public dsp { } virtual int getSampleRate() { - return fSamplingFreq; - + return fSampleRate; } virtual void buildUserInterface(UI* ui_interface) { @@ -599,7 +641,6 @@ class flt_c_bpf : public dsp { ui_interface->addVerticalSlider("freq", &fVslider0, 1000.0f, 20.0f, 20000.0f, 0.100000001f); ui_interface->addVerticalSlider("q", &fVslider1, 0.100000001f, 0.00999999978f, 100.0f, 0.100000001f); ui_interface->closeBox(); - } virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { @@ -627,9 +668,7 @@ class flt_c_bpf : public dsp { output4[i] = FAUSTFLOAT(((1.0f - fTemp3) / fTemp4)); fRec0[1] = fRec0[0]; fRec1[1] = fRec1[0]; - } - } }; diff --git a/ceammc/ext/src/flt/flt_c_highshelf.h b/ceammc/ext/src/flt/flt_c_highshelf.h index 0615696677..5132f80dd6 100644 --- a/ceammc/ext/src/flt/flt_c_highshelf.h +++ b/ceammc/ext/src/flt/flt_c_highshelf.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "flt_c_highshelf" -Code generated with Faust 2.15.10 (https://faust.grame.fr) -Compilation options: cpp, -scal -ftz 0 +Code generated with Faust 2.22.1 (https://faust.grame.fr) +Compilation options: -lang cpp -scal -ftz 0 ------------------------------------------------------------ */ #ifndef __flt_c_highshelf_H__ @@ -14,6 +14,7 @@ Compilation options: cpp, -scal -ftz 0 #include #include +/************************** BEGIN dsp.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -96,23 +97,23 @@ class dsp { * - static class 'classInit': static tables initialization * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void init(int samplingRate) = 0; + virtual void init(int sample_rate) = 0; /** * Init instance state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceInit(int samplingRate) = 0; + virtual void instanceInit(int sample_rate) = 0; /** * Init instance constant state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceConstants(int samplingRate) = 0; + virtual void instanceConstants(int sample_rate) = 0; /* Init default control parameters values */ virtual void instanceResetUserInterface() = 0; @@ -149,8 +150,8 @@ class dsp { * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the number of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) * */ virtual void compute(double /*date_usec*/, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -169,16 +170,16 @@ class decorator_dsp : public dsp { public: - decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + decorator_dsp(dsp* dsp = nullptr):fDSP(dsp) {} virtual ~decorator_dsp() { delete fDSP; } virtual int getNumInputs() { return fDSP->getNumInputs(); } virtual int getNumOutputs() { return fDSP->getNumOutputs(); } virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } virtual int getSampleRate() { return fDSP->getSampleRate(); } - virtual void init(int samplingRate) { fDSP->init(samplingRate); } - virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } - virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void init(int sample_rate) { fDSP->init(sample_rate); } + virtual void instanceInit(int sample_rate) { fDSP->instanceInit(sample_rate); } + virtual void instanceConstants(int sample_rate) { fDSP->instanceConstants(sample_rate); } virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } @@ -233,6 +234,8 @@ class dsp_factory { #endif #endif +/************************** END dsp.h **************************/ +/************************** BEGIN UI.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -272,45 +275,54 @@ class dsp_factory { struct Soundfile; -class UI +template +class UIReal { - + public: - - UI() {} - - virtual ~UI() {} - + + UIReal() {} + virtual ~UIReal() {} + // -- widget's layouts - + virtual void openTabBox(const char* label) = 0; virtual void openHorizontalBox(const char* label) = 0; virtual void openVerticalBox(const char* label) = 0; virtual void closeBox() = 0; - + // -- active widgets - - virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - + + virtual void addButton(const char* label, REAL* zone) = 0; + virtual void addCheckButton(const char* label, REAL* zone) = 0; + virtual void addVerticalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addHorizontalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addNumEntry(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + // -- passive widgets - - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - + + virtual void addHorizontalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + virtual void addVerticalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + // -- soundfiles - + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; - + // -- metadata declarations + + virtual void declare(REAL* zone, const char* key, const char* val) {} +}; - virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +struct UI : public UIReal +{ + + UI() {} + virtual ~UI() {} }; #endif +/************************** END UI.h **************************/ +/************************** BEGIN meta.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -339,11 +351,14 @@ class UI struct Meta { - virtual void declare(const char* key, const char* value) = 0; virtual ~Meta() {}; + virtual void declare(const char* key, const char* value) = 0; + }; #endif +/************************** END meta.h **************************/ +/************************** BEGIN misc.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -366,7 +381,7 @@ struct Meta that work under terms of your choice, so long as this FAUST architecture section is not modified. ************************************************************************/ - + #ifndef __misc__ #define __misc__ @@ -374,6 +389,8 @@ struct Meta #include #include #include +#include +#include using std::max; @@ -395,27 +412,65 @@ static int int2pow2(int x) { int r = 0; while ((1<declare("ceammc_ui.lib/name", "CEAMMC faust default UI elements"); m->declare("ceammc_ui.lib/version", "0.1.1"); - m->declare("filename", "flt_c_highshelf"); + m->declare("filename", "flt_c_highshelf.dsp"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); @@ -492,15 +548,13 @@ class flt_c_highshelf : public dsp { virtual int getNumInputs() { return 1; - } virtual int getNumOutputs() { return 5; - } virtual int getInputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 0; break; @@ -509,14 +563,12 @@ class flt_c_highshelf : public dsp { rate = -1; break; } - } return rate; - } virtual int getOutputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -541,52 +593,42 @@ class flt_c_highshelf : public dsp { rate = -1; break; } - } return rate; - } - static void classInit(int samplingFreq) { - + static void classInit(int sample_rate) { } - virtual void instanceConstants(int samplingFreq) { - fSamplingFreq = samplingFreq; - fConst0 = (6.28318548f / std::min(192000.0f, std::max(1.0f, float(fSamplingFreq)))); - + virtual void instanceConstants(int sample_rate) { + fSampleRate = sample_rate; + fConst0 = (6.28318548f / std::min(192000.0f, std::max(1.0f, float(fSampleRate)))); } virtual void instanceResetUserInterface() { fVslider0 = FAUSTFLOAT(0.0f); fVslider1 = FAUSTFLOAT(10000.0f); fHslider0 = FAUSTFLOAT(1.0f); - } virtual void instanceClear() { for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { fRec0[l0] = 0.0f; - } for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { fRec1[l1] = 0.0f; - } for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { fRec2[l2] = 0.0f; - } - } - virtual void init(int samplingFreq) { - classInit(samplingFreq); - instanceInit(samplingFreq); + virtual void init(int sample_rate) { + classInit(sample_rate); + instanceInit(sample_rate); } - - virtual void instanceInit(int samplingFreq) { - instanceConstants(samplingFreq); + virtual void instanceInit(int sample_rate) { + instanceConstants(sample_rate); instanceResetUserInterface(); instanceClear(); } @@ -596,8 +638,7 @@ class flt_c_highshelf : public dsp { } virtual int getSampleRate() { - return fSamplingFreq; - + return fSampleRate; } virtual void buildUserInterface(UI* ui_interface) { @@ -608,7 +649,6 @@ class flt_c_highshelf : public dsp { ui_interface->addVerticalSlider("gain", &fVslider0, 0.0f, -15.0f, 15.0f, 0.100000001f); ui_interface->addHorizontalSlider("q", &fHslider0, 1.0f, 0.5f, 2.0f, 0.100000001f); ui_interface->closeBox(); - } virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { @@ -641,9 +681,7 @@ class flt_c_highshelf : public dsp { fRec0[1] = fRec0[0]; fRec1[1] = fRec1[0]; fRec2[1] = fRec2[0]; - } - } }; diff --git a/ceammc/ext/src/flt/flt_c_hpf.h b/ceammc/ext/src/flt/flt_c_hpf.h index 7c4cdd8f01..a67c456de2 100644 --- a/ceammc/ext/src/flt/flt_c_hpf.h +++ b/ceammc/ext/src/flt/flt_c_hpf.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "flt_c_hpf" -Code generated with Faust 2.15.10 (https://faust.grame.fr) -Compilation options: cpp, -scal -ftz 0 +Code generated with Faust 2.22.1 (https://faust.grame.fr) +Compilation options: -lang cpp -scal -ftz 0 ------------------------------------------------------------ */ #ifndef __flt_c_hpf_H__ @@ -14,6 +14,7 @@ Compilation options: cpp, -scal -ftz 0 #include #include +/************************** BEGIN dsp.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -96,23 +97,23 @@ class dsp { * - static class 'classInit': static tables initialization * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void init(int samplingRate) = 0; + virtual void init(int sample_rate) = 0; /** * Init instance state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceInit(int samplingRate) = 0; + virtual void instanceInit(int sample_rate) = 0; /** * Init instance constant state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceConstants(int samplingRate) = 0; + virtual void instanceConstants(int sample_rate) = 0; /* Init default control parameters values */ virtual void instanceResetUserInterface() = 0; @@ -149,8 +150,8 @@ class dsp { * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the number of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) * */ virtual void compute(double /*date_usec*/, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -169,16 +170,16 @@ class decorator_dsp : public dsp { public: - decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + decorator_dsp(dsp* dsp = nullptr):fDSP(dsp) {} virtual ~decorator_dsp() { delete fDSP; } virtual int getNumInputs() { return fDSP->getNumInputs(); } virtual int getNumOutputs() { return fDSP->getNumOutputs(); } virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } virtual int getSampleRate() { return fDSP->getSampleRate(); } - virtual void init(int samplingRate) { fDSP->init(samplingRate); } - virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } - virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void init(int sample_rate) { fDSP->init(sample_rate); } + virtual void instanceInit(int sample_rate) { fDSP->instanceInit(sample_rate); } + virtual void instanceConstants(int sample_rate) { fDSP->instanceConstants(sample_rate); } virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } @@ -233,6 +234,8 @@ class dsp_factory { #endif #endif +/************************** END dsp.h **************************/ +/************************** BEGIN UI.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -272,45 +275,54 @@ class dsp_factory { struct Soundfile; -class UI +template +class UIReal { - + public: - - UI() {} - - virtual ~UI() {} - + + UIReal() {} + virtual ~UIReal() {} + // -- widget's layouts - + virtual void openTabBox(const char* label) = 0; virtual void openHorizontalBox(const char* label) = 0; virtual void openVerticalBox(const char* label) = 0; virtual void closeBox() = 0; - + // -- active widgets - - virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - + + virtual void addButton(const char* label, REAL* zone) = 0; + virtual void addCheckButton(const char* label, REAL* zone) = 0; + virtual void addVerticalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addHorizontalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addNumEntry(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + // -- passive widgets - - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - + + virtual void addHorizontalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + virtual void addVerticalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + // -- soundfiles - + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; - + // -- metadata declarations + + virtual void declare(REAL* zone, const char* key, const char* val) {} +}; - virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +struct UI : public UIReal +{ + + UI() {} + virtual ~UI() {} }; #endif +/************************** END UI.h **************************/ +/************************** BEGIN meta.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -339,11 +351,14 @@ class UI struct Meta { - virtual void declare(const char* key, const char* value) = 0; virtual ~Meta() {}; + virtual void declare(const char* key, const char* value) = 0; + }; #endif +/************************** END meta.h **************************/ +/************************** BEGIN misc.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -366,7 +381,7 @@ struct Meta that work under terms of your choice, so long as this FAUST architecture section is not modified. ************************************************************************/ - + #ifndef __misc__ #define __misc__ @@ -374,6 +389,8 @@ struct Meta #include #include #include +#include +#include using std::max; @@ -395,27 +412,65 @@ static int int2pow2(int x) { int r = 0; while ((1<declare("ceammc_ui.lib/name", "CEAMMC faust default UI elements"); m->declare("ceammc_ui.lib/version", "0.1.1"); - m->declare("filename", "flt_c_hpf"); + m->declare("filename", "flt_c_hpf.dsp"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); @@ -490,15 +546,13 @@ class flt_c_hpf : public dsp { virtual int getNumInputs() { return 1; - } virtual int getNumOutputs() { return 5; - } virtual int getInputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 0; break; @@ -507,14 +561,12 @@ class flt_c_hpf : public dsp { rate = -1; break; } - } return rate; - } virtual int getOutputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -539,47 +591,38 @@ class flt_c_hpf : public dsp { rate = -1; break; } - } return rate; - } - static void classInit(int samplingFreq) { - + static void classInit(int sample_rate) { } - virtual void instanceConstants(int samplingFreq) { - fSamplingFreq = samplingFreq; - fConst0 = (6.28318548f / std::min(192000.0f, std::max(1.0f, float(fSamplingFreq)))); - + virtual void instanceConstants(int sample_rate) { + fSampleRate = sample_rate; + fConst0 = (6.28318548f / std::min(192000.0f, std::max(1.0f, float(fSampleRate)))); } virtual void instanceResetUserInterface() { fVslider0 = FAUSTFLOAT(1000.0f); fVslider1 = FAUSTFLOAT(1.0f); - } virtual void instanceClear() { for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { fRec0[l0] = 0.0f; - } for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { fRec1[l1] = 0.0f; - } - } - virtual void init(int samplingFreq) { - classInit(samplingFreq); - instanceInit(samplingFreq); + virtual void init(int sample_rate) { + classInit(sample_rate); + instanceInit(sample_rate); } - - virtual void instanceInit(int samplingFreq) { - instanceConstants(samplingFreq); + virtual void instanceInit(int sample_rate) { + instanceConstants(sample_rate); instanceResetUserInterface(); instanceClear(); } @@ -589,8 +632,7 @@ class flt_c_hpf : public dsp { } virtual int getSampleRate() { - return fSamplingFreq; - + return fSampleRate; } virtual void buildUserInterface(UI* ui_interface) { @@ -599,7 +641,6 @@ class flt_c_hpf : public dsp { ui_interface->addVerticalSlider("freq", &fVslider0, 1000.0f, 20.0f, 20000.0f, 0.100000001f); ui_interface->addVerticalSlider("q", &fVslider1, 1.0f, 0.00999999978f, 100.0f, 0.100000001f); ui_interface->closeBox(); - } virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { @@ -626,9 +667,7 @@ class flt_c_hpf : public dsp { output4[i] = FAUSTFLOAT(((1.0f - fTemp2) / fTemp3)); fRec0[1] = fRec0[0]; fRec1[1] = fRec1[0]; - } - } }; diff --git a/ceammc/ext/src/flt/flt_c_lowshelf.h b/ceammc/ext/src/flt/flt_c_lowshelf.h index 6ff8489c08..8b12df777b 100644 --- a/ceammc/ext/src/flt/flt_c_lowshelf.h +++ b/ceammc/ext/src/flt/flt_c_lowshelf.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "flt_c_lowshelf" -Code generated with Faust 2.15.10 (https://faust.grame.fr) -Compilation options: cpp, -scal -ftz 0 +Code generated with Faust 2.22.1 (https://faust.grame.fr) +Compilation options: -lang cpp -scal -ftz 0 ------------------------------------------------------------ */ #ifndef __flt_c_lowshelf_H__ @@ -14,6 +14,7 @@ Compilation options: cpp, -scal -ftz 0 #include #include +/************************** BEGIN dsp.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -96,23 +97,23 @@ class dsp { * - static class 'classInit': static tables initialization * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void init(int samplingRate) = 0; + virtual void init(int sample_rate) = 0; /** * Init instance state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceInit(int samplingRate) = 0; + virtual void instanceInit(int sample_rate) = 0; /** * Init instance constant state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceConstants(int samplingRate) = 0; + virtual void instanceConstants(int sample_rate) = 0; /* Init default control parameters values */ virtual void instanceResetUserInterface() = 0; @@ -149,8 +150,8 @@ class dsp { * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the number of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) * */ virtual void compute(double /*date_usec*/, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -169,16 +170,16 @@ class decorator_dsp : public dsp { public: - decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + decorator_dsp(dsp* dsp = nullptr):fDSP(dsp) {} virtual ~decorator_dsp() { delete fDSP; } virtual int getNumInputs() { return fDSP->getNumInputs(); } virtual int getNumOutputs() { return fDSP->getNumOutputs(); } virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } virtual int getSampleRate() { return fDSP->getSampleRate(); } - virtual void init(int samplingRate) { fDSP->init(samplingRate); } - virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } - virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void init(int sample_rate) { fDSP->init(sample_rate); } + virtual void instanceInit(int sample_rate) { fDSP->instanceInit(sample_rate); } + virtual void instanceConstants(int sample_rate) { fDSP->instanceConstants(sample_rate); } virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } @@ -233,6 +234,8 @@ class dsp_factory { #endif #endif +/************************** END dsp.h **************************/ +/************************** BEGIN UI.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -272,45 +275,54 @@ class dsp_factory { struct Soundfile; -class UI +template +class UIReal { - + public: - - UI() {} - - virtual ~UI() {} - + + UIReal() {} + virtual ~UIReal() {} + // -- widget's layouts - + virtual void openTabBox(const char* label) = 0; virtual void openHorizontalBox(const char* label) = 0; virtual void openVerticalBox(const char* label) = 0; virtual void closeBox() = 0; - + // -- active widgets - - virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - + + virtual void addButton(const char* label, REAL* zone) = 0; + virtual void addCheckButton(const char* label, REAL* zone) = 0; + virtual void addVerticalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addHorizontalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addNumEntry(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + // -- passive widgets - - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - + + virtual void addHorizontalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + virtual void addVerticalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + // -- soundfiles - + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; - + // -- metadata declarations + + virtual void declare(REAL* zone, const char* key, const char* val) {} +}; - virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +struct UI : public UIReal +{ + + UI() {} + virtual ~UI() {} }; #endif +/************************** END UI.h **************************/ +/************************** BEGIN meta.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -339,11 +351,14 @@ class UI struct Meta { - virtual void declare(const char* key, const char* value) = 0; virtual ~Meta() {}; + virtual void declare(const char* key, const char* value) = 0; + }; #endif +/************************** END meta.h **************************/ +/************************** BEGIN misc.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -366,7 +381,7 @@ struct Meta that work under terms of your choice, so long as this FAUST architecture section is not modified. ************************************************************************/ - + #ifndef __misc__ #define __misc__ @@ -374,6 +389,8 @@ struct Meta #include #include #include +#include +#include using std::max; @@ -395,27 +412,65 @@ static int int2pow2(int x) { int r = 0; while ((1<declare("ceammc_ui.lib/name", "CEAMMC faust default UI elements"); m->declare("ceammc_ui.lib/version", "0.1.1"); - m->declare("filename", "flt_c_lowshelf"); + m->declare("filename", "flt_c_lowshelf.dsp"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); @@ -492,15 +548,13 @@ class flt_c_lowshelf : public dsp { virtual int getNumInputs() { return 1; - } virtual int getNumOutputs() { return 5; - } virtual int getInputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 0; break; @@ -509,14 +563,12 @@ class flt_c_lowshelf : public dsp { rate = -1; break; } - } return rate; - } virtual int getOutputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -541,52 +593,42 @@ class flt_c_lowshelf : public dsp { rate = -1; break; } - } return rate; - } - static void classInit(int samplingFreq) { - + static void classInit(int sample_rate) { } - virtual void instanceConstants(int samplingFreq) { - fSamplingFreq = samplingFreq; - fConst0 = (6.28318548f / std::min(192000.0f, std::max(1.0f, float(fSamplingFreq)))); - + virtual void instanceConstants(int sample_rate) { + fSampleRate = sample_rate; + fConst0 = (6.28318548f / std::min(192000.0f, std::max(1.0f, float(fSampleRate)))); } virtual void instanceResetUserInterface() { fVslider0 = FAUSTFLOAT(0.0f); fVslider1 = FAUSTFLOAT(1000.0f); fHslider0 = FAUSTFLOAT(1.0f); - } virtual void instanceClear() { for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { fRec0[l0] = 0.0f; - } for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { fRec1[l1] = 0.0f; - } for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { fRec2[l2] = 0.0f; - } - } - virtual void init(int samplingFreq) { - classInit(samplingFreq); - instanceInit(samplingFreq); + virtual void init(int sample_rate) { + classInit(sample_rate); + instanceInit(sample_rate); } - - virtual void instanceInit(int samplingFreq) { - instanceConstants(samplingFreq); + virtual void instanceInit(int sample_rate) { + instanceConstants(sample_rate); instanceResetUserInterface(); instanceClear(); } @@ -596,8 +638,7 @@ class flt_c_lowshelf : public dsp { } virtual int getSampleRate() { - return fSamplingFreq; - + return fSampleRate; } virtual void buildUserInterface(UI* ui_interface) { @@ -608,7 +649,6 @@ class flt_c_lowshelf : public dsp { ui_interface->addVerticalSlider("gain", &fVslider0, 0.0f, -15.0f, 15.0f, 0.100000001f); ui_interface->addHorizontalSlider("q", &fHslider0, 1.0f, 0.5f, 2.0f, 0.100000001f); ui_interface->closeBox(); - } virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { @@ -641,9 +681,7 @@ class flt_c_lowshelf : public dsp { fRec0[1] = fRec0[0]; fRec1[1] = fRec1[0]; fRec2[1] = fRec2[0]; - } - } }; diff --git a/ceammc/ext/src/flt/flt_c_lpf.h b/ceammc/ext/src/flt/flt_c_lpf.h index bc703f41a2..ca2892c0d9 100644 --- a/ceammc/ext/src/flt/flt_c_lpf.h +++ b/ceammc/ext/src/flt/flt_c_lpf.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "flt_c_lpf" -Code generated with Faust 2.15.10 (https://faust.grame.fr) -Compilation options: cpp, -scal -ftz 0 +Code generated with Faust 2.22.1 (https://faust.grame.fr) +Compilation options: -lang cpp -scal -ftz 0 ------------------------------------------------------------ */ #ifndef __flt_c_lpf_H__ @@ -14,6 +14,7 @@ Compilation options: cpp, -scal -ftz 0 #include #include +/************************** BEGIN dsp.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -96,23 +97,23 @@ class dsp { * - static class 'classInit': static tables initialization * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void init(int samplingRate) = 0; + virtual void init(int sample_rate) = 0; /** * Init instance state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceInit(int samplingRate) = 0; + virtual void instanceInit(int sample_rate) = 0; /** * Init instance constant state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceConstants(int samplingRate) = 0; + virtual void instanceConstants(int sample_rate) = 0; /* Init default control parameters values */ virtual void instanceResetUserInterface() = 0; @@ -149,8 +150,8 @@ class dsp { * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the number of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) * */ virtual void compute(double /*date_usec*/, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -169,16 +170,16 @@ class decorator_dsp : public dsp { public: - decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + decorator_dsp(dsp* dsp = nullptr):fDSP(dsp) {} virtual ~decorator_dsp() { delete fDSP; } virtual int getNumInputs() { return fDSP->getNumInputs(); } virtual int getNumOutputs() { return fDSP->getNumOutputs(); } virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } virtual int getSampleRate() { return fDSP->getSampleRate(); } - virtual void init(int samplingRate) { fDSP->init(samplingRate); } - virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } - virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void init(int sample_rate) { fDSP->init(sample_rate); } + virtual void instanceInit(int sample_rate) { fDSP->instanceInit(sample_rate); } + virtual void instanceConstants(int sample_rate) { fDSP->instanceConstants(sample_rate); } virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } @@ -233,6 +234,8 @@ class dsp_factory { #endif #endif +/************************** END dsp.h **************************/ +/************************** BEGIN UI.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -272,45 +275,54 @@ class dsp_factory { struct Soundfile; -class UI +template +class UIReal { - + public: - - UI() {} - - virtual ~UI() {} - + + UIReal() {} + virtual ~UIReal() {} + // -- widget's layouts - + virtual void openTabBox(const char* label) = 0; virtual void openHorizontalBox(const char* label) = 0; virtual void openVerticalBox(const char* label) = 0; virtual void closeBox() = 0; - + // -- active widgets - - virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - + + virtual void addButton(const char* label, REAL* zone) = 0; + virtual void addCheckButton(const char* label, REAL* zone) = 0; + virtual void addVerticalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addHorizontalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addNumEntry(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + // -- passive widgets - - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - + + virtual void addHorizontalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + virtual void addVerticalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + // -- soundfiles - + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; - + // -- metadata declarations + + virtual void declare(REAL* zone, const char* key, const char* val) {} +}; - virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +struct UI : public UIReal +{ + + UI() {} + virtual ~UI() {} }; #endif +/************************** END UI.h **************************/ +/************************** BEGIN meta.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -339,11 +351,14 @@ class UI struct Meta { - virtual void declare(const char* key, const char* value) = 0; virtual ~Meta() {}; + virtual void declare(const char* key, const char* value) = 0; + }; #endif +/************************** END meta.h **************************/ +/************************** BEGIN misc.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -366,7 +381,7 @@ struct Meta that work under terms of your choice, so long as this FAUST architecture section is not modified. ************************************************************************/ - + #ifndef __misc__ #define __misc__ @@ -374,6 +389,8 @@ struct Meta #include #include #include +#include +#include using std::max; @@ -395,27 +412,65 @@ static int int2pow2(int x) { int r = 0; while ((1<declare("ceammc_ui.lib/name", "CEAMMC faust default UI elements"); m->declare("ceammc_ui.lib/version", "0.1.1"); - m->declare("filename", "flt_c_lpf"); + m->declare("filename", "flt_c_lpf.dsp"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); @@ -490,15 +546,13 @@ class flt_c_lpf : public dsp { virtual int getNumInputs() { return 1; - } virtual int getNumOutputs() { return 5; - } virtual int getInputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 0; break; @@ -507,14 +561,12 @@ class flt_c_lpf : public dsp { rate = -1; break; } - } return rate; - } virtual int getOutputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -539,47 +591,38 @@ class flt_c_lpf : public dsp { rate = -1; break; } - } return rate; - } - static void classInit(int samplingFreq) { - + static void classInit(int sample_rate) { } - virtual void instanceConstants(int samplingFreq) { - fSamplingFreq = samplingFreq; - fConst0 = (6.28318548f / std::min(192000.0f, std::max(1.0f, float(fSamplingFreq)))); - + virtual void instanceConstants(int sample_rate) { + fSampleRate = sample_rate; + fConst0 = (6.28318548f / std::min(192000.0f, std::max(1.0f, float(fSampleRate)))); } virtual void instanceResetUserInterface() { fVslider0 = FAUSTFLOAT(1000.0f); fVslider1 = FAUSTFLOAT(1.0f); - } virtual void instanceClear() { for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { fRec0[l0] = 0.0f; - } for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { fRec1[l1] = 0.0f; - } - } - virtual void init(int samplingFreq) { - classInit(samplingFreq); - instanceInit(samplingFreq); + virtual void init(int sample_rate) { + classInit(sample_rate); + instanceInit(sample_rate); } - - virtual void instanceInit(int samplingFreq) { - instanceConstants(samplingFreq); + virtual void instanceInit(int sample_rate) { + instanceConstants(sample_rate); instanceResetUserInterface(); instanceClear(); } @@ -589,8 +632,7 @@ class flt_c_lpf : public dsp { } virtual int getSampleRate() { - return fSamplingFreq; - + return fSampleRate; } virtual void buildUserInterface(UI* ui_interface) { @@ -599,7 +641,6 @@ class flt_c_lpf : public dsp { ui_interface->addVerticalSlider("freq", &fVslider0, 1000.0f, 20.0f, 20000.0f, 0.100000001f); ui_interface->addVerticalSlider("q", &fVslider1, 1.0f, 0.00999999978f, 100.0f, 0.100000001f); ui_interface->closeBox(); - } virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { @@ -627,9 +668,7 @@ class flt_c_lpf : public dsp { output4[i] = FAUSTFLOAT(((1.0f - fTemp2) / fTemp3)); fRec0[1] = fRec0[0]; fRec1[1] = fRec1[0]; - } - } }; diff --git a/ceammc/ext/src/flt/flt_c_notch.h b/ceammc/ext/src/flt/flt_c_notch.h index 364c753521..f2b44f1e96 100644 --- a/ceammc/ext/src/flt/flt_c_notch.h +++ b/ceammc/ext/src/flt/flt_c_notch.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "flt_c_notch" -Code generated with Faust 2.15.10 (https://faust.grame.fr) -Compilation options: cpp, -scal -ftz 0 +Code generated with Faust 2.22.1 (https://faust.grame.fr) +Compilation options: -lang cpp -scal -ftz 0 ------------------------------------------------------------ */ #ifndef __flt_c_notch_H__ @@ -14,6 +14,7 @@ Compilation options: cpp, -scal -ftz 0 #include #include +/************************** BEGIN dsp.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -96,23 +97,23 @@ class dsp { * - static class 'classInit': static tables initialization * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void init(int samplingRate) = 0; + virtual void init(int sample_rate) = 0; /** * Init instance state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceInit(int samplingRate) = 0; + virtual void instanceInit(int sample_rate) = 0; /** * Init instance constant state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceConstants(int samplingRate) = 0; + virtual void instanceConstants(int sample_rate) = 0; /* Init default control parameters values */ virtual void instanceResetUserInterface() = 0; @@ -149,8 +150,8 @@ class dsp { * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the number of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) * */ virtual void compute(double /*date_usec*/, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -169,16 +170,16 @@ class decorator_dsp : public dsp { public: - decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + decorator_dsp(dsp* dsp = nullptr):fDSP(dsp) {} virtual ~decorator_dsp() { delete fDSP; } virtual int getNumInputs() { return fDSP->getNumInputs(); } virtual int getNumOutputs() { return fDSP->getNumOutputs(); } virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } virtual int getSampleRate() { return fDSP->getSampleRate(); } - virtual void init(int samplingRate) { fDSP->init(samplingRate); } - virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } - virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void init(int sample_rate) { fDSP->init(sample_rate); } + virtual void instanceInit(int sample_rate) { fDSP->instanceInit(sample_rate); } + virtual void instanceConstants(int sample_rate) { fDSP->instanceConstants(sample_rate); } virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } @@ -233,6 +234,8 @@ class dsp_factory { #endif #endif +/************************** END dsp.h **************************/ +/************************** BEGIN UI.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -272,45 +275,54 @@ class dsp_factory { struct Soundfile; -class UI +template +class UIReal { - + public: - - UI() {} - - virtual ~UI() {} - + + UIReal() {} + virtual ~UIReal() {} + // -- widget's layouts - + virtual void openTabBox(const char* label) = 0; virtual void openHorizontalBox(const char* label) = 0; virtual void openVerticalBox(const char* label) = 0; virtual void closeBox() = 0; - + // -- active widgets - - virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - + + virtual void addButton(const char* label, REAL* zone) = 0; + virtual void addCheckButton(const char* label, REAL* zone) = 0; + virtual void addVerticalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addHorizontalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addNumEntry(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + // -- passive widgets - - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - + + virtual void addHorizontalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + virtual void addVerticalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + // -- soundfiles - + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; - + // -- metadata declarations + + virtual void declare(REAL* zone, const char* key, const char* val) {} +}; - virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +struct UI : public UIReal +{ + + UI() {} + virtual ~UI() {} }; #endif +/************************** END UI.h **************************/ +/************************** BEGIN meta.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -339,11 +351,14 @@ class UI struct Meta { - virtual void declare(const char* key, const char* value) = 0; virtual ~Meta() {}; + virtual void declare(const char* key, const char* value) = 0; + }; #endif +/************************** END meta.h **************************/ +/************************** BEGIN misc.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -366,7 +381,7 @@ struct Meta that work under terms of your choice, so long as this FAUST architecture section is not modified. ************************************************************************/ - + #ifndef __misc__ #define __misc__ @@ -374,6 +389,8 @@ struct Meta #include #include #include +#include +#include using std::max; @@ -395,27 +412,65 @@ static int int2pow2(int x) { int r = 0; while ((1<declare("ceammc_ui.lib/name", "CEAMMC faust default UI elements"); m->declare("ceammc_ui.lib/version", "0.1.1"); - m->declare("filename", "flt_c_notch"); + m->declare("filename", "flt_c_notch.dsp"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); @@ -490,15 +546,13 @@ class flt_c_notch : public dsp { virtual int getNumInputs() { return 1; - } virtual int getNumOutputs() { return 5; - } virtual int getInputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 0; break; @@ -507,14 +561,12 @@ class flt_c_notch : public dsp { rate = -1; break; } - } return rate; - } virtual int getOutputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -539,47 +591,38 @@ class flt_c_notch : public dsp { rate = -1; break; } - } return rate; - } - static void classInit(int samplingFreq) { - + static void classInit(int sample_rate) { } - virtual void instanceConstants(int samplingFreq) { - fSamplingFreq = samplingFreq; - fConst0 = (6.28318548f / std::min(192000.0f, std::max(1.0f, float(fSamplingFreq)))); - + virtual void instanceConstants(int sample_rate) { + fSampleRate = sample_rate; + fConst0 = (6.28318548f / std::min(192000.0f, std::max(1.0f, float(fSampleRate)))); } virtual void instanceResetUserInterface() { fVslider0 = FAUSTFLOAT(1000.0f); fVslider1 = FAUSTFLOAT(1.0f); - } virtual void instanceClear() { for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { fRec0[l0] = 0.0f; - } for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { fRec1[l1] = 0.0f; - } - } - virtual void init(int samplingFreq) { - classInit(samplingFreq); - instanceInit(samplingFreq); + virtual void init(int sample_rate) { + classInit(sample_rate); + instanceInit(sample_rate); } - - virtual void instanceInit(int samplingFreq) { - instanceConstants(samplingFreq); + virtual void instanceInit(int sample_rate) { + instanceConstants(sample_rate); instanceResetUserInterface(); instanceClear(); } @@ -589,8 +632,7 @@ class flt_c_notch : public dsp { } virtual int getSampleRate() { - return fSamplingFreq; - + return fSampleRate; } virtual void buildUserInterface(UI* ui_interface) { @@ -599,7 +641,6 @@ class flt_c_notch : public dsp { ui_interface->addVerticalSlider("freq", &fVslider0, 1000.0f, 20.0f, 20000.0f, 0.100000001f); ui_interface->addVerticalSlider("q", &fVslider1, 1.0f, 0.00999999978f, 100.0f, 0.100000001f); ui_interface->closeBox(); - } virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { @@ -626,9 +667,7 @@ class flt_c_notch : public dsp { output4[i] = FAUSTFLOAT(((1.0f - fTemp1) / fTemp2)); fRec0[1] = fRec0[0]; fRec1[1] = fRec1[0]; - } - } }; diff --git a/ceammc/ext/src/flt/flt_c_peak.h b/ceammc/ext/src/flt/flt_c_peak.h index e7d1b780c6..17afe5a70e 100644 --- a/ceammc/ext/src/flt/flt_c_peak.h +++ b/ceammc/ext/src/flt/flt_c_peak.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "flt_c_peak" -Code generated with Faust 2.15.10 (https://faust.grame.fr) -Compilation options: cpp, -scal -ftz 0 +Code generated with Faust 2.22.1 (https://faust.grame.fr) +Compilation options: -lang cpp -scal -ftz 0 ------------------------------------------------------------ */ #ifndef __flt_c_peak_H__ @@ -14,6 +14,7 @@ Compilation options: cpp, -scal -ftz 0 #include #include +/************************** BEGIN dsp.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -96,23 +97,23 @@ class dsp { * - static class 'classInit': static tables initialization * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void init(int samplingRate) = 0; + virtual void init(int sample_rate) = 0; /** * Init instance state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceInit(int samplingRate) = 0; + virtual void instanceInit(int sample_rate) = 0; /** * Init instance constant state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceConstants(int samplingRate) = 0; + virtual void instanceConstants(int sample_rate) = 0; /* Init default control parameters values */ virtual void instanceResetUserInterface() = 0; @@ -149,8 +150,8 @@ class dsp { * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the number of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) * */ virtual void compute(double /*date_usec*/, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -169,16 +170,16 @@ class decorator_dsp : public dsp { public: - decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + decorator_dsp(dsp* dsp = nullptr):fDSP(dsp) {} virtual ~decorator_dsp() { delete fDSP; } virtual int getNumInputs() { return fDSP->getNumInputs(); } virtual int getNumOutputs() { return fDSP->getNumOutputs(); } virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } virtual int getSampleRate() { return fDSP->getSampleRate(); } - virtual void init(int samplingRate) { fDSP->init(samplingRate); } - virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } - virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void init(int sample_rate) { fDSP->init(sample_rate); } + virtual void instanceInit(int sample_rate) { fDSP->instanceInit(sample_rate); } + virtual void instanceConstants(int sample_rate) { fDSP->instanceConstants(sample_rate); } virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } @@ -233,6 +234,8 @@ class dsp_factory { #endif #endif +/************************** END dsp.h **************************/ +/************************** BEGIN UI.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -272,45 +275,54 @@ class dsp_factory { struct Soundfile; -class UI +template +class UIReal { - + public: - - UI() {} - - virtual ~UI() {} - + + UIReal() {} + virtual ~UIReal() {} + // -- widget's layouts - + virtual void openTabBox(const char* label) = 0; virtual void openHorizontalBox(const char* label) = 0; virtual void openVerticalBox(const char* label) = 0; virtual void closeBox() = 0; - + // -- active widgets - - virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - + + virtual void addButton(const char* label, REAL* zone) = 0; + virtual void addCheckButton(const char* label, REAL* zone) = 0; + virtual void addVerticalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addHorizontalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addNumEntry(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + // -- passive widgets - - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - + + virtual void addHorizontalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + virtual void addVerticalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + // -- soundfiles - + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; - + // -- metadata declarations + + virtual void declare(REAL* zone, const char* key, const char* val) {} +}; - virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +struct UI : public UIReal +{ + + UI() {} + virtual ~UI() {} }; #endif +/************************** END UI.h **************************/ +/************************** BEGIN meta.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -339,11 +351,14 @@ class UI struct Meta { - virtual void declare(const char* key, const char* value) = 0; virtual ~Meta() {}; + virtual void declare(const char* key, const char* value) = 0; + }; #endif +/************************** END meta.h **************************/ +/************************** BEGIN misc.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -366,7 +381,7 @@ struct Meta that work under terms of your choice, so long as this FAUST architecture section is not modified. ************************************************************************/ - + #ifndef __misc__ #define __misc__ @@ -374,6 +389,8 @@ struct Meta #include #include #include +#include +#include using std::max; @@ -395,27 +412,65 @@ static int int2pow2(int x) { int r = 0; while ((1<declare("ceammc_ui.lib/name", "CEAMMC faust default UI elements"); m->declare("ceammc_ui.lib/version", "0.1.1"); - m->declare("filename", "flt_c_peak"); + m->declare("filename", "flt_c_peak.dsp"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); @@ -492,15 +548,13 @@ class flt_c_peak : public dsp { virtual int getNumInputs() { return 1; - } virtual int getNumOutputs() { return 5; - } virtual int getInputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 0; break; @@ -509,14 +563,12 @@ class flt_c_peak : public dsp { rate = -1; break; } - } return rate; - } virtual int getOutputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -541,52 +593,42 @@ class flt_c_peak : public dsp { rate = -1; break; } - } return rate; - } - static void classInit(int samplingFreq) { - + static void classInit(int sample_rate) { } - virtual void instanceConstants(int samplingFreq) { - fSamplingFreq = samplingFreq; - fConst0 = (6.28318548f / std::min(192000.0f, std::max(1.0f, float(fSamplingFreq)))); - + virtual void instanceConstants(int sample_rate) { + fSampleRate = sample_rate; + fConst0 = (6.28318548f / std::min(192000.0f, std::max(1.0f, float(fSampleRate)))); } virtual void instanceResetUserInterface() { fVslider0 = FAUSTFLOAT(1000.0f); fVslider1 = FAUSTFLOAT(0.0f); fVslider2 = FAUSTFLOAT(1.0f); - } virtual void instanceClear() { for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { fRec0[l0] = 0.0f; - } for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { fRec1[l1] = 0.0f; - } for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { fRec2[l2] = 0.0f; - } - } - virtual void init(int samplingFreq) { - classInit(samplingFreq); - instanceInit(samplingFreq); + virtual void init(int sample_rate) { + classInit(sample_rate); + instanceInit(sample_rate); } - - virtual void instanceInit(int samplingFreq) { - instanceConstants(samplingFreq); + virtual void instanceInit(int sample_rate) { + instanceConstants(sample_rate); instanceResetUserInterface(); instanceClear(); } @@ -596,8 +638,7 @@ class flt_c_peak : public dsp { } virtual int getSampleRate() { - return fSamplingFreq; - + return fSampleRate; } virtual void buildUserInterface(UI* ui_interface) { @@ -608,7 +649,6 @@ class flt_c_peak : public dsp { ui_interface->addVerticalSlider("gain", &fVslider1, 0.0f, -15.0f, 15.0f, 0.100000001f); ui_interface->addVerticalSlider("q", &fVslider2, 1.0f, 0.00999999978f, 100.0f, 0.100000001f); ui_interface->closeBox(); - } virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { @@ -641,9 +681,7 @@ class flt_c_peak : public dsp { fRec0[1] = fRec0[0]; fRec1[1] = fRec1[0]; fRec2[1] = fRec2[0]; - } - } }; diff --git a/ceammc/ext/src/flt/flt_dcblock.h b/ceammc/ext/src/flt/flt_dcblock.h index ad5dc5ca04..f18b71fbd3 100644 --- a/ceammc/ext/src/flt/flt_dcblock.h +++ b/ceammc/ext/src/flt/flt_dcblock.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "flt_dcblock" -Code generated with Faust 2.15.10 (https://faust.grame.fr) -Compilation options: cpp, -scal -ftz 0 +Code generated with Faust 2.22.1 (https://faust.grame.fr) +Compilation options: -lang cpp -scal -ftz 0 ------------------------------------------------------------ */ #ifndef __dcblock_H__ @@ -39,6 +39,7 @@ Compilation options: cpp, -scal -ftz 0 #include #include +/************************** BEGIN dsp.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -121,23 +122,23 @@ class dsp { * - static class 'classInit': static tables initialization * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void init(int samplingRate) = 0; + virtual void init(int sample_rate) = 0; /** * Init instance state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceInit(int samplingRate) = 0; + virtual void instanceInit(int sample_rate) = 0; /** * Init instance constant state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceConstants(int samplingRate) = 0; + virtual void instanceConstants(int sample_rate) = 0; /* Init default control parameters values */ virtual void instanceResetUserInterface() = 0; @@ -174,8 +175,8 @@ class dsp { * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the number of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) * */ virtual void compute(double /*date_usec*/, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -194,16 +195,16 @@ class decorator_dsp : public dsp { public: - decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + decorator_dsp(dsp* dsp = nullptr):fDSP(dsp) {} virtual ~decorator_dsp() { delete fDSP; } virtual int getNumInputs() { return fDSP->getNumInputs(); } virtual int getNumOutputs() { return fDSP->getNumOutputs(); } virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } virtual int getSampleRate() { return fDSP->getSampleRate(); } - virtual void init(int samplingRate) { fDSP->init(samplingRate); } - virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } - virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void init(int sample_rate) { fDSP->init(sample_rate); } + virtual void instanceInit(int sample_rate) { fDSP->instanceInit(sample_rate); } + virtual void instanceConstants(int sample_rate) { fDSP->instanceConstants(sample_rate); } virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } @@ -258,6 +259,8 @@ class dsp_factory { #endif #endif +/************************** END dsp.h **************************/ +/************************** BEGIN UI.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -297,45 +300,54 @@ class dsp_factory { struct Soundfile; -class UI +template +class UIReal { - + public: - - UI() {} - - virtual ~UI() {} - + + UIReal() {} + virtual ~UIReal() {} + // -- widget's layouts - + virtual void openTabBox(const char* label) = 0; virtual void openHorizontalBox(const char* label) = 0; virtual void openVerticalBox(const char* label) = 0; virtual void closeBox() = 0; - + // -- active widgets - - virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - + + virtual void addButton(const char* label, REAL* zone) = 0; + virtual void addCheckButton(const char* label, REAL* zone) = 0; + virtual void addVerticalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addHorizontalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addNumEntry(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + // -- passive widgets - - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - + + virtual void addHorizontalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + virtual void addVerticalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + // -- soundfiles - + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; - + // -- metadata declarations + + virtual void declare(REAL* zone, const char* key, const char* val) {} +}; - virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +struct UI : public UIReal +{ + + UI() {} + virtual ~UI() {} }; #endif +/************************** END UI.h **************************/ +/************************** BEGIN meta.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -364,11 +376,14 @@ class UI struct Meta { - virtual void declare(const char* key, const char* value) = 0; virtual ~Meta() {}; + virtual void declare(const char* key, const char* value) = 0; + }; #endif +/************************** END meta.h **************************/ +/************************** BEGIN misc.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -391,7 +406,7 @@ struct Meta that work under terms of your choice, so long as this FAUST architecture section is not modified. ************************************************************************/ - + #ifndef __misc__ #define __misc__ @@ -399,6 +414,8 @@ struct Meta #include #include #include +#include +#include using std::max; @@ -420,27 +437,65 @@ static int int2pow2(int x) { int r = 0; while ((1<declare("filename", "flt_dcblock"); + m->declare("filename", "flt_dcblock.dsp"); + m->declare("filters.lib/dcblocker:author", "Julius O. Smith III"); + m->declare("filters.lib/dcblocker:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/dcblocker:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/lowpass0_highpass1", "Copyright (C) 2003-2019 by Julius O. Smith III "); m->declare("filters.lib/name", "Faust Filters Library"); - m->declare("filters.lib/version", "0.0"); + m->declare("filters.lib/pole:author", "Julius O. Smith III"); + m->declare("filters.lib/pole:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/pole:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/zero:author", "Julius O. Smith III"); + m->declare("filters.lib/zero:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/zero:license", "MIT-style STK-4.3 license"); m->declare("name", "flt_dcblock"); } virtual int getNumInputs() { return 1; - } virtual int getNumOutputs() { return 1; - } virtual int getInputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -542,14 +605,12 @@ class dcblock : public dsp { rate = -1; break; } - } return rate; - } virtual int getOutputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -558,44 +619,35 @@ class dcblock : public dsp { rate = -1; break; } - } return rate; - } - static void classInit(int samplingFreq) { - + static void classInit(int sample_rate) { } - virtual void instanceConstants(int samplingFreq) { - fSamplingFreq = samplingFreq; - + virtual void instanceConstants(int sample_rate) { + fSampleRate = sample_rate; } virtual void instanceResetUserInterface() { - } virtual void instanceClear() { for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { fVec0[l0] = 0.0f; - } for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { fRec0[l1] = 0.0f; - } - } - virtual void init(int samplingFreq) { - classInit(samplingFreq); - instanceInit(samplingFreq); + virtual void init(int sample_rate) { + classInit(sample_rate); + instanceInit(sample_rate); } - - virtual void instanceInit(int samplingFreq) { - instanceConstants(samplingFreq); + virtual void instanceInit(int sample_rate) { + instanceConstants(sample_rate); instanceResetUserInterface(); instanceClear(); } @@ -605,14 +657,12 @@ class dcblock : public dsp { } virtual int getSampleRate() { - return fSamplingFreq; - + return fSampleRate; } virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("flt_dcblock"); ui_interface->closeBox(); - } virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { @@ -625,9 +675,7 @@ class dcblock : public dsp { output0[i] = FAUSTFLOAT(fRec0[0]); fVec0[1] = fVec0[0]; fRec0[1] = fRec0[0]; - } - } }; diff --git a/ceammc/ext/src/flt/flt_dcblock2.h b/ceammc/ext/src/flt/flt_dcblock2.h index 4623f1a4f4..8d02508d80 100644 --- a/ceammc/ext/src/flt/flt_dcblock2.h +++ b/ceammc/ext/src/flt/flt_dcblock2.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "flt_dcblock2" -Code generated with Faust 2.15.10 (https://faust.grame.fr) -Compilation options: cpp, -scal -ftz 0 +Code generated with Faust 2.22.1 (https://faust.grame.fr) +Compilation options: -lang cpp -scal -ftz 0 ------------------------------------------------------------ */ #ifndef __dcblock2_H__ @@ -39,6 +39,7 @@ Compilation options: cpp, -scal -ftz 0 #include #include +/************************** BEGIN dsp.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -121,23 +122,23 @@ class dsp { * - static class 'classInit': static tables initialization * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void init(int samplingRate) = 0; + virtual void init(int sample_rate) = 0; /** * Init instance state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceInit(int samplingRate) = 0; + virtual void instanceInit(int sample_rate) = 0; /** * Init instance constant state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceConstants(int samplingRate) = 0; + virtual void instanceConstants(int sample_rate) = 0; /* Init default control parameters values */ virtual void instanceResetUserInterface() = 0; @@ -174,8 +175,8 @@ class dsp { * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the number of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) * */ virtual void compute(double /*date_usec*/, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -194,16 +195,16 @@ class decorator_dsp : public dsp { public: - decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + decorator_dsp(dsp* dsp = nullptr):fDSP(dsp) {} virtual ~decorator_dsp() { delete fDSP; } virtual int getNumInputs() { return fDSP->getNumInputs(); } virtual int getNumOutputs() { return fDSP->getNumOutputs(); } virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } virtual int getSampleRate() { return fDSP->getSampleRate(); } - virtual void init(int samplingRate) { fDSP->init(samplingRate); } - virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } - virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void init(int sample_rate) { fDSP->init(sample_rate); } + virtual void instanceInit(int sample_rate) { fDSP->instanceInit(sample_rate); } + virtual void instanceConstants(int sample_rate) { fDSP->instanceConstants(sample_rate); } virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } @@ -258,6 +259,8 @@ class dsp_factory { #endif #endif +/************************** END dsp.h **************************/ +/************************** BEGIN UI.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -297,45 +300,54 @@ class dsp_factory { struct Soundfile; -class UI +template +class UIReal { - + public: - - UI() {} - - virtual ~UI() {} - + + UIReal() {} + virtual ~UIReal() {} + // -- widget's layouts - + virtual void openTabBox(const char* label) = 0; virtual void openHorizontalBox(const char* label) = 0; virtual void openVerticalBox(const char* label) = 0; virtual void closeBox() = 0; - + // -- active widgets - - virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - + + virtual void addButton(const char* label, REAL* zone) = 0; + virtual void addCheckButton(const char* label, REAL* zone) = 0; + virtual void addVerticalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addHorizontalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addNumEntry(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + // -- passive widgets - - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - + + virtual void addHorizontalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + virtual void addVerticalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + // -- soundfiles - + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; - + // -- metadata declarations + + virtual void declare(REAL* zone, const char* key, const char* val) {} +}; - virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +struct UI : public UIReal +{ + + UI() {} + virtual ~UI() {} }; #endif +/************************** END UI.h **************************/ +/************************** BEGIN meta.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -364,11 +376,14 @@ class UI struct Meta { - virtual void declare(const char* key, const char* value) = 0; virtual ~Meta() {}; + virtual void declare(const char* key, const char* value) = 0; + }; #endif +/************************** END meta.h **************************/ +/************************** BEGIN misc.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -391,7 +406,7 @@ struct Meta that work under terms of your choice, so long as this FAUST architecture section is not modified. ************************************************************************/ - + #ifndef __misc__ #define __misc__ @@ -399,6 +414,8 @@ struct Meta #include #include #include +#include +#include using std::max; @@ -420,27 +437,65 @@ static int int2pow2(int x) { int r = 0; while ((1<declare("ceammc.lib/name", "Ceammc PureData misc utils"); m->declare("ceammc.lib/version", "0.1.1"); - m->declare("filename", "flt_dcblock2"); + m->declare("filename", "flt_dcblock2.dsp"); + m->declare("filters.lib/dcblocker:author", "Julius O. Smith III"); + m->declare("filters.lib/dcblocker:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/dcblocker:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/lowpass0_highpass1", "Copyright (C) 2003-2019 by Julius O. Smith III "); m->declare("filters.lib/name", "Faust Filters Library"); - m->declare("filters.lib/version", "0.0"); + m->declare("filters.lib/pole:author", "Julius O. Smith III"); + m->declare("filters.lib/pole:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/pole:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/zero:author", "Julius O. Smith III"); + m->declare("filters.lib/zero:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/zero:license", "MIT-style STK-4.3 license"); m->declare("name", "flt_dcblock2"); } virtual int getNumInputs() { return 2; - } virtual int getNumOutputs() { return 2; - } virtual int getInputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -550,14 +613,12 @@ class dcblock2 : public dsp { rate = -1; break; } - } return rate; - } virtual int getOutputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -570,52 +631,41 @@ class dcblock2 : public dsp { rate = -1; break; } - } return rate; - } - static void classInit(int samplingFreq) { - + static void classInit(int sample_rate) { } - virtual void instanceConstants(int samplingFreq) { - fSamplingFreq = samplingFreq; - + virtual void instanceConstants(int sample_rate) { + fSampleRate = sample_rate; } virtual void instanceResetUserInterface() { - } virtual void instanceClear() { for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { fVec0[l0] = 0.0f; - } for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { fRec0[l1] = 0.0f; - } for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { fVec1[l2] = 0.0f; - } for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { fRec1[l3] = 0.0f; - } - } - virtual void init(int samplingFreq) { - classInit(samplingFreq); - instanceInit(samplingFreq); + virtual void init(int sample_rate) { + classInit(sample_rate); + instanceInit(sample_rate); } - - virtual void instanceInit(int samplingFreq) { - instanceConstants(samplingFreq); + virtual void instanceInit(int sample_rate) { + instanceConstants(sample_rate); instanceResetUserInterface(); instanceClear(); } @@ -625,14 +675,12 @@ class dcblock2 : public dsp { } virtual int getSampleRate() { - return fSamplingFreq; - + return fSampleRate; } virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("flt_dcblock2"); ui_interface->closeBox(); - } virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { @@ -653,9 +701,7 @@ class dcblock2 : public dsp { fRec0[1] = fRec0[0]; fVec1[1] = fVec1[0]; fRec1[1] = fRec1[0]; - } - } }; diff --git a/ceammc/ext/src/flt/flt_eq10.h b/ceammc/ext/src/flt/flt_eq10.h index 3fe3ae656d..51a9b846c5 100644 --- a/ceammc/ext/src/flt/flt_eq10.h +++ b/ceammc/ext/src/flt/flt_eq10.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "flt.eq10" -Code generated with Faust 2.15.10 (https://faust.grame.fr) -Compilation options: cpp, -scal -ftz 0 +Code generated with Faust 2.22.1 (https://faust.grame.fr) +Compilation options: -lang cpp -scal -ftz 0 ------------------------------------------------------------ */ #ifndef __flt_eq10_H__ @@ -14,6 +14,7 @@ Compilation options: cpp, -scal -ftz 0 #include #include +/************************** BEGIN dsp.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -96,23 +97,23 @@ class dsp { * - static class 'classInit': static tables initialization * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void init(int samplingRate) = 0; + virtual void init(int sample_rate) = 0; /** * Init instance state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceInit(int samplingRate) = 0; + virtual void instanceInit(int sample_rate) = 0; /** * Init instance constant state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceConstants(int samplingRate) = 0; + virtual void instanceConstants(int sample_rate) = 0; /* Init default control parameters values */ virtual void instanceResetUserInterface() = 0; @@ -149,8 +150,8 @@ class dsp { * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the number of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) * */ virtual void compute(double /*date_usec*/, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -169,16 +170,16 @@ class decorator_dsp : public dsp { public: - decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + decorator_dsp(dsp* dsp = nullptr):fDSP(dsp) {} virtual ~decorator_dsp() { delete fDSP; } virtual int getNumInputs() { return fDSP->getNumInputs(); } virtual int getNumOutputs() { return fDSP->getNumOutputs(); } virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } virtual int getSampleRate() { return fDSP->getSampleRate(); } - virtual void init(int samplingRate) { fDSP->init(samplingRate); } - virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } - virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void init(int sample_rate) { fDSP->init(sample_rate); } + virtual void instanceInit(int sample_rate) { fDSP->instanceInit(sample_rate); } + virtual void instanceConstants(int sample_rate) { fDSP->instanceConstants(sample_rate); } virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } @@ -233,6 +234,8 @@ class dsp_factory { #endif #endif +/************************** END dsp.h **************************/ +/************************** BEGIN UI.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -272,45 +275,54 @@ class dsp_factory { struct Soundfile; -class UI +template +class UIReal { - + public: - - UI() {} - - virtual ~UI() {} - + + UIReal() {} + virtual ~UIReal() {} + // -- widget's layouts - + virtual void openTabBox(const char* label) = 0; virtual void openHorizontalBox(const char* label) = 0; virtual void openVerticalBox(const char* label) = 0; virtual void closeBox() = 0; - + // -- active widgets - - virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - + + virtual void addButton(const char* label, REAL* zone) = 0; + virtual void addCheckButton(const char* label, REAL* zone) = 0; + virtual void addVerticalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addHorizontalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addNumEntry(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + // -- passive widgets - - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - + + virtual void addHorizontalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + virtual void addVerticalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + // -- soundfiles - + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; - + // -- metadata declarations + + virtual void declare(REAL* zone, const char* key, const char* val) {} +}; - virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +struct UI : public UIReal +{ + + UI() {} + virtual ~UI() {} }; #endif +/************************** END UI.h **************************/ +/************************** BEGIN meta.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -339,11 +351,14 @@ class UI struct Meta { - virtual void declare(const char* key, const char* value) = 0; virtual ~Meta() {}; + virtual void declare(const char* key, const char* value) = 0; + }; #endif +/************************** END meta.h **************************/ +/************************** BEGIN misc.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -366,7 +381,7 @@ struct Meta that work under terms of your choice, so long as this FAUST architecture section is not modified. ************************************************************************/ - + #ifndef __misc__ #define __misc__ @@ -374,6 +389,8 @@ struct Meta #include #include #include +#include +#include using std::max; @@ -395,27 +412,65 @@ static int int2pow2(int x) { int r = 0; while ((1<declare("analyzers.lib/name", "Faust Analyzer Library"); m->declare("analyzers.lib/version", "0.0"); m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.0"); - m->declare("filename", "flt_eq10"); + m->declare("basics.lib/version", "0.1"); + m->declare("filename", "flt_eq10.dsp"); + m->declare("filters.lib/fir:author", "Julius O. Smith III"); + m->declare("filters.lib/fir:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/fir:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/highpass:author", "Julius O. Smith III"); + m->declare("filters.lib/highpass:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/highpass_plus_lowpass:author", "Julius O. Smith III"); + m->declare("filters.lib/highpass_plus_lowpass:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/highpass_plus_lowpass:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/iir:author", "Julius O. Smith III"); + m->declare("filters.lib/iir:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/iir:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/lowpass0_highpass1", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/lowpass0_highpass1:author", "Julius O. Smith III"); + m->declare("filters.lib/lowpass:author", "Julius O. Smith III"); + m->declare("filters.lib/lowpass:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/lowpass:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/mth_octave_filterbank5:author", "Julius O. Smith III"); + m->declare("filters.lib/mth_octave_filterbank5:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/mth_octave_filterbank5:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/mth_octave_filterbank:author", "Julius O. Smith III"); + m->declare("filters.lib/mth_octave_filterbank:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/mth_octave_filterbank:license", "MIT-style STK-4.3 license"); m->declare("filters.lib/name", "Faust Filters Library"); - m->declare("filters.lib/version", "0.0"); + m->declare("filters.lib/tf1:author", "Julius O. Smith III"); + m->declare("filters.lib/tf1:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/tf1:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/tf1s:author", "Julius O. Smith III"); + m->declare("filters.lib/tf1s:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/tf1s:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/tf2:author", "Julius O. Smith III"); + m->declare("filters.lib/tf2:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/tf2:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/tf2s:author", "Julius O. Smith III"); + m->declare("filters.lib/tf2s:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/tf2s:license", "MIT-style STK-4.3 license"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); @@ -765,15 +853,13 @@ class flt_eq10 : public dsp { virtual int getNumInputs() { return 1; - } virtual int getNumOutputs() { return 1; - } virtual int getInputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -782,14 +868,12 @@ class flt_eq10 : public dsp { rate = -1; break; } - } return rate; - } virtual int getOutputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -798,26 +882,23 @@ class flt_eq10 : public dsp { rate = -1; break; } - } return rate; - } - static void classInit(int samplingFreq) { - + static void classInit(int sample_rate) { } - virtual void instanceConstants(int samplingFreq) { - fSamplingFreq = samplingFreq; - fConst0 = std::min(192000.0f, std::max(1.0f, float(fSamplingFreq))); - fConst1 = std::tan((12566.3711f / fConst0)); + virtual void instanceConstants(int sample_rate) { + fSampleRate = sample_rate; + fConst0 = std::min(192000.0f, std::max(1.0f, float(fSampleRate))); + fConst1 = std::tan((392.699097f / fConst0)); fConst2 = (1.0f / fConst1); fConst3 = (1.0f / (((fConst2 + 0.618034005f) / fConst1) + 1.0f)); fConst4 = flt_eq10_faustpower2_f(fConst1); fConst5 = (1.0f / fConst4); fConst6 = (1.0f / (((fConst2 + 1.61803401f) / fConst1) + 1.0f)); - fConst7 = std::tan((25132.7422f / fConst0)); + fConst7 = std::tan((785.398193f / fConst0)); fConst8 = (1.0f / fConst7); fConst9 = (1.0f / (((fConst8 + 0.618034005f) / fConst7) + 1.0f)); fConst10 = (fConst2 + 1.0f); @@ -825,151 +906,150 @@ class flt_eq10 : public dsp { fConst12 = (1.0f / (((fConst8 + 1.61803401f) / fConst7) + 1.0f)); fConst13 = (fConst8 + 1.0f); fConst14 = (1.0f / fConst13); - fConst15 = std::tan((50265.4844f / fConst0)); - fConst16 = (1.0f / fConst15); - fConst17 = (1.0f / (((fConst16 + 0.618034005f) / fConst15) + 1.0f)); - fConst18 = (1.0f / (((fConst16 + 1.61803401f) / fConst15) + 1.0f)); - fConst19 = (fConst16 + 1.0f); - fConst20 = (1.0f / fConst19); - fConst21 = (1.0f - fConst16); - fConst22 = (((fConst16 + -1.61803401f) / fConst15) + 1.0f); - fConst23 = flt_eq10_faustpower2_f(fConst15); + fConst15 = (1.0f - fConst8); + fConst16 = std::tan((1570.79639f / fConst0)); + fConst17 = (1.0f / fConst16); + fConst18 = (1.0f / (((fConst17 + 0.618034005f) / fConst16) + 1.0f)); + fConst19 = (1.0f / (((fConst17 + 1.61803401f) / fConst16) + 1.0f)); + fConst20 = (fConst17 + 1.0f); + fConst21 = (1.0f / fConst20); + fConst22 = (1.0f - fConst17); + fConst23 = std::tan((3141.59277f / fConst0)); fConst24 = (1.0f / fConst23); - fConst25 = (2.0f * (1.0f - fConst24)); - fConst26 = (((fConst16 + -0.618034005f) / fConst15) + 1.0f); - fConst27 = (1.0f - fConst8); - fConst28 = (((fConst8 + -1.61803401f) / fConst7) + 1.0f); - fConst29 = flt_eq10_faustpower2_f(fConst7); - fConst30 = (1.0f / fConst29); - fConst31 = (2.0f * (1.0f - fConst30)); - fConst32 = (((fConst8 + -0.618034005f) / fConst7) + 1.0f); - fConst33 = (0.0f - fConst11); - fConst34 = (1.0f - fConst2); - fConst35 = (fConst34 / fConst10); - fConst36 = (((fConst2 + -1.61803401f) / fConst1) + 1.0f); - fConst37 = (2.0f * (1.0f - fConst5)); - fConst38 = (0.0f - (2.0f / fConst4)); - fConst39 = (((fConst2 + -0.618034005f) / fConst1) + 1.0f); - fConst40 = std::tan((196.349548f / fConst0)); - fConst41 = (1.0f / fConst40); - fConst42 = (1.0f / (((fConst41 + 1.61803401f) / fConst40) + 1.0f)); - fConst43 = flt_eq10_faustpower2_f(fConst40); - fConst44 = (1.0f / fConst43); - fConst45 = (2.0f * (1.0f - fConst44)); - fConst46 = (((fConst41 + -1.61803401f) / fConst40) + 1.0f); - fConst47 = std::tan((392.699097f / fConst0)); - fConst48 = (1.0f / fConst47); - fConst49 = (1.0f / (((fConst48 + 1.61803401f) / fConst47) + 1.0f)); - fConst50 = flt_eq10_faustpower2_f(fConst47); - fConst51 = (1.0f / fConst50); - fConst52 = (2.0f * (1.0f - fConst51)); - fConst53 = (((fConst48 + -1.61803401f) / fConst47) + 1.0f); - fConst54 = std::tan((785.398193f / fConst0)); - fConst55 = (1.0f / fConst54); - fConst56 = (1.0f / (((fConst55 + 1.61803401f) / fConst54) + 1.0f)); - fConst57 = flt_eq10_faustpower2_f(fConst54); - fConst58 = (1.0f / fConst57); - fConst59 = (2.0f * (1.0f - fConst58)); - fConst60 = (((fConst55 + -1.61803401f) / fConst54) + 1.0f); - fConst61 = std::tan((1570.79639f / fConst0)); - fConst62 = (1.0f / fConst61); - fConst63 = (1.0f / (((fConst62 + 1.61803401f) / fConst61) + 1.0f)); - fConst64 = flt_eq10_faustpower2_f(fConst61); + fConst25 = (1.0f / (((fConst24 + 0.618034005f) / fConst23) + 1.0f)); + fConst26 = (1.0f / (((fConst24 + 1.61803401f) / fConst23) + 1.0f)); + fConst27 = (fConst24 + 1.0f); + fConst28 = (1.0f / fConst27); + fConst29 = (1.0f - fConst24); + fConst30 = std::tan((6283.18555f / fConst0)); + fConst31 = (1.0f / fConst30); + fConst32 = (1.0f / (((fConst31 + 0.618034005f) / fConst30) + 1.0f)); + fConst33 = (1.0f / (((fConst31 + 1.61803401f) / fConst30) + 1.0f)); + fConst34 = (fConst31 + 1.0f); + fConst35 = (1.0f / fConst34); + fConst36 = (1.0f - fConst31); + fConst37 = std::tan((12566.3711f / fConst0)); + fConst38 = (1.0f / fConst37); + fConst39 = (1.0f / (((fConst38 + 0.618034005f) / fConst37) + 1.0f)); + fConst40 = (1.0f / (((fConst38 + 1.61803401f) / fConst37) + 1.0f)); + fConst41 = (fConst38 + 1.0f); + fConst42 = (1.0f / fConst41); + fConst43 = (1.0f - fConst38); + fConst44 = std::tan((25132.7422f / fConst0)); + fConst45 = (1.0f / fConst44); + fConst46 = (1.0f / (((fConst45 + 0.618034005f) / fConst44) + 1.0f)); + fConst47 = (1.0f / (((fConst45 + 1.61803401f) / fConst44) + 1.0f)); + fConst48 = (fConst45 + 1.0f); + fConst49 = (1.0f / fConst48); + fConst50 = (1.0f - fConst45); + fConst51 = std::tan((50265.4844f / fConst0)); + fConst52 = (1.0f / fConst51); + fConst53 = (1.0f / (((fConst52 + 0.618034005f) / fConst51) + 1.0f)); + fConst54 = (1.0f / (((fConst52 + 1.61803401f) / fConst51) + 1.0f)); + fConst55 = (fConst52 + 1.0f); + fConst56 = (1.0f / fConst55); + fConst57 = (1.0f - fConst52); + fConst58 = (((fConst52 + -1.61803401f) / fConst51) + 1.0f); + fConst59 = flt_eq10_faustpower2_f(fConst51); + fConst60 = (1.0f / fConst59); + fConst61 = (2.0f * (1.0f - fConst60)); + fConst62 = (((fConst52 + -0.618034005f) / fConst51) + 1.0f); + fConst63 = (((fConst45 + -1.61803401f) / fConst44) + 1.0f); + fConst64 = flt_eq10_faustpower2_f(fConst44); fConst65 = (1.0f / fConst64); fConst66 = (2.0f * (1.0f - fConst65)); - fConst67 = (((fConst62 + -1.61803401f) / fConst61) + 1.0f); - fConst68 = std::tan((3141.59277f / fConst0)); - fConst69 = (1.0f / fConst68); - fConst70 = (1.0f / (((fConst69 + 1.61803401f) / fConst68) + 1.0f)); - fConst71 = flt_eq10_faustpower2_f(fConst68); - fConst72 = (1.0f / fConst71); - fConst73 = (2.0f * (1.0f - fConst72)); - fConst74 = (((fConst69 + -1.61803401f) / fConst68) + 1.0f); - fConst75 = std::tan((6283.18555f / fConst0)); - fConst76 = (1.0f / fConst75); - fConst77 = (1.0f / (((fConst76 + 1.61803401f) / fConst75) + 1.0f)); - fConst78 = flt_eq10_faustpower2_f(fConst75); - fConst79 = (1.0f / fConst78); - fConst80 = (2.0f * (1.0f - fConst79)); - fConst81 = (((fConst76 + -1.61803401f) / fConst75) + 1.0f); - fConst82 = (1.0f / (fConst7 * fConst13)); - fConst83 = (0.0f - fConst82); - fConst84 = (fConst27 / fConst13); - fConst85 = (0.0f - (2.0f / fConst29)); - fConst86 = (1.0f / (((fConst2 + 1.61803401f) / fConst1) + 1.0f)); - fConst87 = (((fConst2 + -1.61803401f) / fConst1) + 1.0f); - fConst88 = (1.0f / (((fConst76 + 0.618034005f) / fConst75) + 1.0f)); - fConst89 = (1.0f / (((fConst76 + 1.61803401f) / fConst75) + 1.0f)); - fConst90 = (fConst76 + 1.0f); - fConst91 = (1.0f / (fConst75 * fConst90)); - fConst92 = (1.0f / fConst10); - fConst93 = (0.0f - fConst91); - fConst94 = (1.0f - fConst76); - fConst95 = (fConst94 / fConst90); - fConst96 = (((fConst76 + -1.61803401f) / fConst75) + 1.0f); - fConst97 = (0.0f - (2.0f / fConst78)); - fConst98 = (((fConst76 + -0.618034005f) / fConst75) + 1.0f); - fConst99 = (0.0f - (1.0f / (fConst15 * fConst19))); - fConst100 = (0.0f - (2.0f / fConst23)); - fConst101 = (1.0f / (((fConst8 + 1.61803401f) / fConst7) + 1.0f)); - fConst102 = (((fConst8 + -1.61803401f) / fConst7) + 1.0f); - fConst103 = (1.0f / (((fConst69 + 0.618034005f) / fConst68) + 1.0f)); - fConst104 = (1.0f / (((fConst69 + 1.61803401f) / fConst68) + 1.0f)); - fConst105 = (fConst69 + 1.0f); - fConst106 = (1.0f / (fConst68 * fConst105)); - fConst107 = (1.0f / fConst90); - fConst108 = (0.0f - fConst106); - fConst109 = (1.0f - fConst69); - fConst110 = (fConst109 / fConst105); - fConst111 = (((fConst69 + -1.61803401f) / fConst68) + 1.0f); - fConst112 = (0.0f - (2.0f / fConst71)); - fConst113 = (((fConst69 + -0.618034005f) / fConst68) + 1.0f); - fConst114 = (1.0f / (((fConst62 + 0.618034005f) / fConst61) + 1.0f)); - fConst115 = (1.0f / (((fConst62 + 1.61803401f) / fConst61) + 1.0f)); - fConst116 = (fConst62 + 1.0f); - fConst117 = (1.0f / (fConst61 * fConst116)); - fConst118 = (1.0f / fConst105); - fConst119 = (0.0f - fConst117); - fConst120 = (1.0f - fConst62); - fConst121 = (fConst120 / fConst116); - fConst122 = (((fConst62 + -1.61803401f) / fConst61) + 1.0f); - fConst123 = (0.0f - (2.0f / fConst64)); - fConst124 = (((fConst62 + -0.618034005f) / fConst61) + 1.0f); - fConst125 = (1.0f / (((fConst55 + 0.618034005f) / fConst54) + 1.0f)); - fConst126 = (1.0f / (((fConst55 + 1.61803401f) / fConst54) + 1.0f)); - fConst127 = (fConst55 + 1.0f); - fConst128 = (1.0f / (fConst54 * fConst127)); - fConst129 = (1.0f / fConst116); - fConst130 = (0.0f - fConst128); - fConst131 = (1.0f - fConst55); - fConst132 = (fConst131 / fConst127); - fConst133 = (((fConst55 + -1.61803401f) / fConst54) + 1.0f); - fConst134 = (0.0f - (2.0f / fConst57)); - fConst135 = (((fConst55 + -0.618034005f) / fConst54) + 1.0f); - fConst136 = (1.0f / (((fConst48 + 0.618034005f) / fConst47) + 1.0f)); - fConst137 = (1.0f / (((fConst48 + 1.61803401f) / fConst47) + 1.0f)); - fConst138 = (fConst48 + 1.0f); - fConst139 = (1.0f / (fConst47 * fConst138)); - fConst140 = (1.0f / fConst127); - fConst141 = (0.0f - fConst139); - fConst142 = (1.0f - fConst48); - fConst143 = (fConst142 / fConst138); - fConst144 = (((fConst48 + -1.61803401f) / fConst47) + 1.0f); - fConst145 = (0.0f - (2.0f / fConst50)); - fConst146 = (((fConst48 + -0.618034005f) / fConst47) + 1.0f); - fConst147 = (1.0f / (((fConst41 + 0.618034005f) / fConst40) + 1.0f)); - fConst148 = (1.0f / (((fConst41 + 1.61803401f) / fConst40) + 1.0f)); - fConst149 = (fConst41 + 1.0f); - fConst150 = (1.0f / (fConst40 * fConst149)); - fConst151 = (0.0f - fConst150); - fConst152 = (1.0f / fConst138); - fConst153 = (1.0f - fConst41); + fConst67 = (((fConst45 + -0.618034005f) / fConst44) + 1.0f); + fConst68 = (((fConst38 + -1.61803401f) / fConst37) + 1.0f); + fConst69 = flt_eq10_faustpower2_f(fConst37); + fConst70 = (1.0f / fConst69); + fConst71 = (2.0f * (1.0f - fConst70)); + fConst72 = (((fConst38 + -0.618034005f) / fConst37) + 1.0f); + fConst73 = (((fConst31 + -1.61803401f) / fConst30) + 1.0f); + fConst74 = flt_eq10_faustpower2_f(fConst30); + fConst75 = (1.0f / fConst74); + fConst76 = (2.0f * (1.0f - fConst75)); + fConst77 = (((fConst31 + -0.618034005f) / fConst30) + 1.0f); + fConst78 = (((fConst24 + -1.61803401f) / fConst23) + 1.0f); + fConst79 = flt_eq10_faustpower2_f(fConst23); + fConst80 = (1.0f / fConst79); + fConst81 = (2.0f * (1.0f - fConst80)); + fConst82 = (((fConst24 + -0.618034005f) / fConst23) + 1.0f); + fConst83 = (((fConst17 + -1.61803401f) / fConst16) + 1.0f); + fConst84 = flt_eq10_faustpower2_f(fConst16); + fConst85 = (1.0f / fConst84); + fConst86 = (2.0f * (1.0f - fConst85)); + fConst87 = (((fConst17 + -0.618034005f) / fConst16) + 1.0f); + fConst88 = (((fConst8 + -1.61803401f) / fConst7) + 1.0f); + fConst89 = flt_eq10_faustpower2_f(fConst7); + fConst90 = (1.0f / fConst89); + fConst91 = (2.0f * (1.0f - fConst90)); + fConst92 = (((fConst8 + -0.618034005f) / fConst7) + 1.0f); + fConst93 = (0.0f - fConst11); + fConst94 = (1.0f - fConst2); + fConst95 = (fConst94 / fConst10); + fConst96 = (((fConst2 + -1.61803401f) / fConst1) + 1.0f); + fConst97 = (2.0f * (1.0f - fConst5)); + fConst98 = (0.0f - (2.0f / fConst4)); + fConst99 = (((fConst2 + -0.618034005f) / fConst1) + 1.0f); + fConst100 = std::tan((196.349548f / fConst0)); + fConst101 = (1.0f / fConst100); + fConst102 = (1.0f / (((fConst101 + 1.61803401f) / fConst100) + 1.0f)); + fConst103 = (((fConst101 + -1.61803401f) / fConst100) + 1.0f); + fConst104 = flt_eq10_faustpower2_f(fConst100); + fConst105 = (1.0f / fConst104); + fConst106 = (2.0f * (1.0f - fConst105)); + fConst107 = (1.0f / (fConst7 * fConst13)); + fConst108 = (0.0f - fConst107); + fConst109 = (fConst15 / fConst13); + fConst110 = (0.0f - (2.0f / fConst89)); + fConst111 = (1.0f / (((fConst2 + 1.61803401f) / fConst1) + 1.0f)); + fConst112 = (((fConst2 + -1.61803401f) / fConst1) + 1.0f); + fConst113 = (1.0f / (fConst23 * fConst27)); + fConst114 = (0.0f - fConst113); + fConst115 = (fConst29 / fConst27); + fConst116 = (0.0f - (2.0f / fConst79)); + fConst117 = (1.0f / (((fConst8 + 1.61803401f) / fConst7) + 1.0f)); + fConst118 = (((fConst8 + -1.61803401f) / fConst7) + 1.0f); + fConst119 = (1.0f / (((fConst17 + 1.61803401f) / fConst16) + 1.0f)); + fConst120 = (((fConst17 + -1.61803401f) / fConst16) + 1.0f); + fConst121 = (1.0f / (fConst44 * fConst48)); + fConst122 = (0.0f - fConst121); + fConst123 = (fConst50 / fConst48); + fConst124 = (0.0f - (2.0f / fConst64)); + fConst125 = (1.0f / (((fConst24 + 1.61803401f) / fConst23) + 1.0f)); + fConst126 = (((fConst24 + -1.61803401f) / fConst23) + 1.0f); + fConst127 = (1.0f / (((fConst31 + 1.61803401f) / fConst30) + 1.0f)); + fConst128 = (((fConst31 + -1.61803401f) / fConst30) + 1.0f); + fConst129 = (1.0f / (((fConst38 + 1.61803401f) / fConst37) + 1.0f)); + fConst130 = (((fConst38 + -1.61803401f) / fConst37) + 1.0f); + fConst131 = (0.0f - (1.0f / (fConst51 * fConst55))); + fConst132 = (0.0f - (2.0f / fConst59)); + fConst133 = (1.0f / (((fConst45 + 1.61803401f) / fConst44) + 1.0f)); + fConst134 = (((fConst45 + -1.61803401f) / fConst44) + 1.0f); + fConst135 = (1.0f / (fConst37 * fConst41)); + fConst136 = (0.0f - fConst135); + fConst137 = (fConst43 / fConst41); + fConst138 = (0.0f - (2.0f / fConst69)); + fConst139 = (1.0f / (fConst30 * fConst34)); + fConst140 = (0.0f - fConst139); + fConst141 = (fConst36 / fConst34); + fConst142 = (0.0f - (2.0f / fConst74)); + fConst143 = (1.0f / (fConst16 * fConst20)); + fConst144 = (0.0f - fConst143); + fConst145 = (fConst22 / fConst20); + fConst146 = (0.0f - (2.0f / fConst84)); + fConst147 = (1.0f / (((fConst101 + 0.618034005f) / fConst100) + 1.0f)); + fConst148 = (1.0f / (((fConst101 + 1.61803401f) / fConst100) + 1.0f)); + fConst149 = (fConst101 + 1.0f); + fConst150 = (1.0f / (fConst100 * fConst149)); + fConst151 = (1.0f / fConst10); + fConst152 = (0.0f - fConst150); + fConst153 = (1.0f - fConst101); fConst154 = (fConst153 / fConst149); - fConst155 = (((fConst41 + -1.61803401f) / fConst40) + 1.0f); - fConst156 = (0.0f - (2.0f / fConst43)); - fConst157 = (((fConst41 + -0.618034005f) / fConst40) + 1.0f); + fConst155 = (((fConst101 + -1.61803401f) / fConst100) + 1.0f); + fConst156 = (0.0f - (2.0f / fConst104)); + fConst157 = (((fConst101 + -0.618034005f) / fConst100) + 1.0f); fConst158 = (1.0f / fConst149); - } virtual void instanceResetUserInterface() { @@ -983,456 +1063,344 @@ class flt_eq10 : public dsp { fVslider7 = FAUSTFLOAT(0.0f); fVslider8 = FAUSTFLOAT(0.0f); fVslider9 = FAUSTFLOAT(0.0f); - } virtual void instanceClear() { for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { fVec0[l0] = 0.0f; - } for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { - fRec14[l1] = 0.0f; - + fRec24[l1] = 0.0f; } for (int l2 = 0; (l2 < 3); l2 = (l2 + 1)) { - fRec13[l2] = 0.0f; - + fRec23[l2] = 0.0f; } for (int l3 = 0; (l3 < 3); l3 = (l3 + 1)) { - fRec12[l3] = 0.0f; - + fRec22[l3] = 0.0f; } for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { fVec1[l4] = 0.0f; - } for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { - fRec11[l5] = 0.0f; - + fRec21[l5] = 0.0f; } for (int l6 = 0; (l6 < 3); l6 = (l6 + 1)) { - fRec10[l6] = 0.0f; - + fRec20[l6] = 0.0f; } for (int l7 = 0; (l7 < 3); l7 = (l7 + 1)) { - fRec9[l7] = 0.0f; - + fRec19[l7] = 0.0f; } for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { fVec2[l8] = 0.0f; - } for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { - fRec8[l9] = 0.0f; - + fRec18[l9] = 0.0f; } for (int l10 = 0; (l10 < 3); l10 = (l10 + 1)) { - fRec7[l10] = 0.0f; - + fRec17[l10] = 0.0f; } for (int l11 = 0; (l11 < 3); l11 = (l11 + 1)) { - fRec6[l11] = 0.0f; - + fRec16[l11] = 0.0f; } - for (int l12 = 0; (l12 < 3); l12 = (l12 + 1)) { - fRec5[l12] = 0.0f; - + for (int l12 = 0; (l12 < 2); l12 = (l12 + 1)) { + fVec3[l12] = 0.0f; } - for (int l13 = 0; (l13 < 3); l13 = (l13 + 1)) { - fRec4[l13] = 0.0f; - + for (int l13 = 0; (l13 < 2); l13 = (l13 + 1)) { + fRec15[l13] = 0.0f; } for (int l14 = 0; (l14 < 3); l14 = (l14 + 1)) { - fRec3[l14] = 0.0f; - + fRec14[l14] = 0.0f; } for (int l15 = 0; (l15 < 3); l15 = (l15 + 1)) { - fRec2[l15] = 0.0f; - + fRec13[l15] = 0.0f; } - for (int l16 = 0; (l16 < 3); l16 = (l16 + 1)) { - fRec1[l16] = 0.0f; - + for (int l16 = 0; (l16 < 2); l16 = (l16 + 1)) { + fVec4[l16] = 0.0f; } - for (int l17 = 0; (l17 < 3); l17 = (l17 + 1)) { - fRec0[l17] = 0.0f; - + for (int l17 = 0; (l17 < 2); l17 = (l17 + 1)) { + fRec12[l17] = 0.0f; } - for (int l18 = 0; (l18 < 2); l18 = (l18 + 1)) { - fRec15[l18] = 0.0f; - + for (int l18 = 0; (l18 < 3); l18 = (l18 + 1)) { + fRec11[l18] = 0.0f; } - for (int l19 = 0; (l19 < 2); l19 = (l19 + 1)) { - fRec25[l19] = 0.0f; - + for (int l19 = 0; (l19 < 3); l19 = (l19 + 1)) { + fRec10[l19] = 0.0f; } - for (int l20 = 0; (l20 < 3); l20 = (l20 + 1)) { - fRec24[l20] = 0.0f; - + for (int l20 = 0; (l20 < 2); l20 = (l20 + 1)) { + fVec5[l20] = 0.0f; } - for (int l21 = 0; (l21 < 3); l21 = (l21 + 1)) { - fRec23[l21] = 0.0f; - + for (int l21 = 0; (l21 < 2); l21 = (l21 + 1)) { + fRec9[l21] = 0.0f; } for (int l22 = 0; (l22 < 3); l22 = (l22 + 1)) { - fRec22[l22] = 0.0f; - + fRec8[l22] = 0.0f; } for (int l23 = 0; (l23 < 3); l23 = (l23 + 1)) { - fRec21[l23] = 0.0f; - + fRec7[l23] = 0.0f; } - for (int l24 = 0; (l24 < 3); l24 = (l24 + 1)) { - fRec20[l24] = 0.0f; - + for (int l24 = 0; (l24 < 2); l24 = (l24 + 1)) { + fVec6[l24] = 0.0f; } - for (int l25 = 0; (l25 < 3); l25 = (l25 + 1)) { - fRec19[l25] = 0.0f; - + for (int l25 = 0; (l25 < 2); l25 = (l25 + 1)) { + fRec6[l25] = 0.0f; } for (int l26 = 0; (l26 < 3); l26 = (l26 + 1)) { - fRec18[l26] = 0.0f; - + fRec5[l26] = 0.0f; } for (int l27 = 0; (l27 < 3); l27 = (l27 + 1)) { - fRec17[l27] = 0.0f; - + fRec4[l27] = 0.0f; } - for (int l28 = 0; (l28 < 3); l28 = (l28 + 1)) { - fRec16[l28] = 0.0f; - + for (int l28 = 0; (l28 < 2); l28 = (l28 + 1)) { + fVec7[l28] = 0.0f; } for (int l29 = 0; (l29 < 2); l29 = (l29 + 1)) { - fRec26[l29] = 0.0f; - + fRec3[l29] = 0.0f; } - for (int l30 = 0; (l30 < 2); l30 = (l30 + 1)) { - fRec37[l30] = 0.0f; - + for (int l30 = 0; (l30 < 3); l30 = (l30 + 1)) { + fRec2[l30] = 0.0f; } for (int l31 = 0; (l31 < 3); l31 = (l31 + 1)) { - fRec36[l31] = 0.0f; - + fRec1[l31] = 0.0f; } for (int l32 = 0; (l32 < 3); l32 = (l32 + 1)) { - fRec35[l32] = 0.0f; - + fRec0[l32] = 0.0f; } for (int l33 = 0; (l33 < 2); l33 = (l33 + 1)) { - fVec3[l33] = 0.0f; - + fRec25[l33] = 0.0f; } for (int l34 = 0; (l34 < 2); l34 = (l34 + 1)) { - fRec34[l34] = 0.0f; - + fRec30[l34] = 0.0f; } for (int l35 = 0; (l35 < 3); l35 = (l35 + 1)) { - fRec33[l35] = 0.0f; - + fRec29[l35] = 0.0f; } for (int l36 = 0; (l36 < 3); l36 = (l36 + 1)) { - fRec32[l36] = 0.0f; - + fRec28[l36] = 0.0f; } for (int l37 = 0; (l37 < 3); l37 = (l37 + 1)) { - fRec31[l37] = 0.0f; - + fRec27[l37] = 0.0f; } for (int l38 = 0; (l38 < 3); l38 = (l38 + 1)) { - fRec30[l38] = 0.0f; - + fRec26[l38] = 0.0f; } - for (int l39 = 0; (l39 < 3); l39 = (l39 + 1)) { - fRec29[l39] = 0.0f; - + for (int l39 = 0; (l39 < 2); l39 = (l39 + 1)) { + fRec31[l39] = 0.0f; } - for (int l40 = 0; (l40 < 3); l40 = (l40 + 1)) { - fRec28[l40] = 0.0f; - + for (int l40 = 0; (l40 < 2); l40 = (l40 + 1)) { + fRec38[l40] = 0.0f; } for (int l41 = 0; (l41 < 3); l41 = (l41 + 1)) { - fRec27[l41] = 0.0f; - + fRec37[l41] = 0.0f; } - for (int l42 = 0; (l42 < 2); l42 = (l42 + 1)) { - fRec38[l42] = 0.0f; - + for (int l42 = 0; (l42 < 3); l42 = (l42 + 1)) { + fRec36[l42] = 0.0f; } - for (int l43 = 0; (l43 < 2); l43 = (l43 + 1)) { - fRec49[l43] = 0.0f; - + for (int l43 = 0; (l43 < 3); l43 = (l43 + 1)) { + fRec35[l43] = 0.0f; } for (int l44 = 0; (l44 < 3); l44 = (l44 + 1)) { - fRec48[l44] = 0.0f; - + fRec34[l44] = 0.0f; } for (int l45 = 0; (l45 < 3); l45 = (l45 + 1)) { - fRec47[l45] = 0.0f; - + fRec33[l45] = 0.0f; } for (int l46 = 0; (l46 < 3); l46 = (l46 + 1)) { - fRec46[l46] = 0.0f; - + fRec32[l46] = 0.0f; } - for (int l47 = 0; (l47 < 3); l47 = (l47 + 1)) { - fRec45[l47] = 0.0f; - + for (int l47 = 0; (l47 < 2); l47 = (l47 + 1)) { + fRec39[l47] = 0.0f; } - for (int l48 = 0; (l48 < 3); l48 = (l48 + 1)) { - fRec44[l48] = 0.0f; - + for (int l48 = 0; (l48 < 2); l48 = (l48 + 1)) { + fRec49[l48] = 0.0f; } for (int l49 = 0; (l49 < 3); l49 = (l49 + 1)) { - fRec43[l49] = 0.0f; - + fRec48[l49] = 0.0f; } for (int l50 = 0; (l50 < 3); l50 = (l50 + 1)) { - fRec42[l50] = 0.0f; - + fRec47[l50] = 0.0f; } for (int l51 = 0; (l51 < 3); l51 = (l51 + 1)) { - fRec41[l51] = 0.0f; - + fRec46[l51] = 0.0f; } for (int l52 = 0; (l52 < 3); l52 = (l52 + 1)) { - fRec40[l52] = 0.0f; - + fRec45[l52] = 0.0f; } for (int l53 = 0; (l53 < 3); l53 = (l53 + 1)) { - fRec39[l53] = 0.0f; - + fRec44[l53] = 0.0f; } - for (int l54 = 0; (l54 < 2); l54 = (l54 + 1)) { - fRec50[l54] = 0.0f; - + for (int l54 = 0; (l54 < 3); l54 = (l54 + 1)) { + fRec43[l54] = 0.0f; } - for (int l55 = 0; (l55 < 2); l55 = (l55 + 1)) { - fRec60[l55] = 0.0f; - + for (int l55 = 0; (l55 < 3); l55 = (l55 + 1)) { + fRec42[l55] = 0.0f; } for (int l56 = 0; (l56 < 3); l56 = (l56 + 1)) { - fRec59[l56] = 0.0f; - + fRec41[l56] = 0.0f; } for (int l57 = 0; (l57 < 3); l57 = (l57 + 1)) { - fRec58[l57] = 0.0f; - + fRec40[l57] = 0.0f; } for (int l58 = 0; (l58 < 2); l58 = (l58 + 1)) { - fVec4[l58] = 0.0f; - + fRec50[l58] = 0.0f; } for (int l59 = 0; (l59 < 2); l59 = (l59 + 1)) { - fRec57[l59] = 0.0f; - + fRec61[l59] = 0.0f; } for (int l60 = 0; (l60 < 3); l60 = (l60 + 1)) { - fRec56[l60] = 0.0f; - + fRec60[l60] = 0.0f; } for (int l61 = 0; (l61 < 3); l61 = (l61 + 1)) { - fRec55[l61] = 0.0f; - + fRec59[l61] = 0.0f; } for (int l62 = 0; (l62 < 3); l62 = (l62 + 1)) { - fRec54[l62] = 0.0f; - + fRec58[l62] = 0.0f; } for (int l63 = 0; (l63 < 3); l63 = (l63 + 1)) { - fRec53[l63] = 0.0f; - + fRec57[l63] = 0.0f; } for (int l64 = 0; (l64 < 3); l64 = (l64 + 1)) { - fRec52[l64] = 0.0f; - + fRec56[l64] = 0.0f; } for (int l65 = 0; (l65 < 3); l65 = (l65 + 1)) { - fRec51[l65] = 0.0f; - + fRec55[l65] = 0.0f; } - for (int l66 = 0; (l66 < 2); l66 = (l66 + 1)) { - fRec61[l66] = 0.0f; - + for (int l66 = 0; (l66 < 3); l66 = (l66 + 1)) { + fRec54[l66] = 0.0f; } - for (int l67 = 0; (l67 < 2); l67 = (l67 + 1)) { - fRec70[l67] = 0.0f; - + for (int l67 = 0; (l67 < 3); l67 = (l67 + 1)) { + fRec53[l67] = 0.0f; } for (int l68 = 0; (l68 < 3); l68 = (l68 + 1)) { - fRec69[l68] = 0.0f; - + fRec52[l68] = 0.0f; } for (int l69 = 0; (l69 < 3); l69 = (l69 + 1)) { - fRec68[l69] = 0.0f; - + fRec51[l69] = 0.0f; } for (int l70 = 0; (l70 < 2); l70 = (l70 + 1)) { - fVec5[l70] = 0.0f; - + fRec62[l70] = 0.0f; } for (int l71 = 0; (l71 < 2); l71 = (l71 + 1)) { - fRec67[l71] = 0.0f; - + fRec71[l71] = 0.0f; } for (int l72 = 0; (l72 < 3); l72 = (l72 + 1)) { - fRec66[l72] = 0.0f; - + fRec70[l72] = 0.0f; } for (int l73 = 0; (l73 < 3); l73 = (l73 + 1)) { - fRec65[l73] = 0.0f; - + fRec69[l73] = 0.0f; } for (int l74 = 0; (l74 < 3); l74 = (l74 + 1)) { - fRec64[l74] = 0.0f; - + fRec68[l74] = 0.0f; } for (int l75 = 0; (l75 < 3); l75 = (l75 + 1)) { - fRec63[l75] = 0.0f; - + fRec67[l75] = 0.0f; } for (int l76 = 0; (l76 < 3); l76 = (l76 + 1)) { - fRec62[l76] = 0.0f; - + fRec66[l76] = 0.0f; } - for (int l77 = 0; (l77 < 2); l77 = (l77 + 1)) { - fRec71[l77] = 0.0f; - + for (int l77 = 0; (l77 < 3); l77 = (l77 + 1)) { + fRec65[l77] = 0.0f; } - for (int l78 = 0; (l78 < 2); l78 = (l78 + 1)) { - fRec79[l78] = 0.0f; - + for (int l78 = 0; (l78 < 3); l78 = (l78 + 1)) { + fRec64[l78] = 0.0f; } for (int l79 = 0; (l79 < 3); l79 = (l79 + 1)) { - fRec78[l79] = 0.0f; - + fRec63[l79] = 0.0f; } - for (int l80 = 0; (l80 < 3); l80 = (l80 + 1)) { - fRec77[l80] = 0.0f; - + for (int l80 = 0; (l80 < 2); l80 = (l80 + 1)) { + fRec72[l80] = 0.0f; } for (int l81 = 0; (l81 < 2); l81 = (l81 + 1)) { - fVec6[l81] = 0.0f; - + fRec80[l81] = 0.0f; } - for (int l82 = 0; (l82 < 2); l82 = (l82 + 1)) { - fRec76[l82] = 0.0f; - + for (int l82 = 0; (l82 < 3); l82 = (l82 + 1)) { + fRec79[l82] = 0.0f; } for (int l83 = 0; (l83 < 3); l83 = (l83 + 1)) { - fRec75[l83] = 0.0f; - + fRec78[l83] = 0.0f; } for (int l84 = 0; (l84 < 3); l84 = (l84 + 1)) { - fRec74[l84] = 0.0f; - + fRec77[l84] = 0.0f; } for (int l85 = 0; (l85 < 3); l85 = (l85 + 1)) { - fRec73[l85] = 0.0f; - + fRec76[l85] = 0.0f; } for (int l86 = 0; (l86 < 3); l86 = (l86 + 1)) { - fRec72[l86] = 0.0f; - + fRec75[l86] = 0.0f; } - for (int l87 = 0; (l87 < 2); l87 = (l87 + 1)) { - fRec80[l87] = 0.0f; - + for (int l87 = 0; (l87 < 3); l87 = (l87 + 1)) { + fRec74[l87] = 0.0f; } - for (int l88 = 0; (l88 < 2); l88 = (l88 + 1)) { - fRec87[l88] = 0.0f; - + for (int l88 = 0; (l88 < 3); l88 = (l88 + 1)) { + fRec73[l88] = 0.0f; } - for (int l89 = 0; (l89 < 3); l89 = (l89 + 1)) { - fRec86[l89] = 0.0f; - + for (int l89 = 0; (l89 < 2); l89 = (l89 + 1)) { + fRec81[l89] = 0.0f; } - for (int l90 = 0; (l90 < 3); l90 = (l90 + 1)) { - fRec85[l90] = 0.0f; - + for (int l90 = 0; (l90 < 2); l90 = (l90 + 1)) { + fRec87[l90] = 0.0f; } - for (int l91 = 0; (l91 < 2); l91 = (l91 + 1)) { - fVec7[l91] = 0.0f; - + for (int l91 = 0; (l91 < 3); l91 = (l91 + 1)) { + fRec86[l91] = 0.0f; } - for (int l92 = 0; (l92 < 2); l92 = (l92 + 1)) { - fRec84[l92] = 0.0f; - + for (int l92 = 0; (l92 < 3); l92 = (l92 + 1)) { + fRec85[l92] = 0.0f; } for (int l93 = 0; (l93 < 3); l93 = (l93 + 1)) { - fRec83[l93] = 0.0f; - + fRec84[l93] = 0.0f; } for (int l94 = 0; (l94 < 3); l94 = (l94 + 1)) { - fRec82[l94] = 0.0f; - + fRec83[l94] = 0.0f; } for (int l95 = 0; (l95 < 3); l95 = (l95 + 1)) { - fRec81[l95] = 0.0f; - + fRec82[l95] = 0.0f; } for (int l96 = 0; (l96 < 2); l96 = (l96 + 1)) { fRec88[l96] = 0.0f; - } for (int l97 = 0; (l97 < 2); l97 = (l97 + 1)) { fRec94[l97] = 0.0f; - } for (int l98 = 0; (l98 < 3); l98 = (l98 + 1)) { fRec93[l98] = 0.0f; - } for (int l99 = 0; (l99 < 3); l99 = (l99 + 1)) { fRec92[l99] = 0.0f; - } for (int l100 = 0; (l100 < 2); l100 = (l100 + 1)) { fVec8[l100] = 0.0f; - } for (int l101 = 0; (l101 < 2); l101 = (l101 + 1)) { fRec91[l101] = 0.0f; - } for (int l102 = 0; (l102 < 3); l102 = (l102 + 1)) { fRec90[l102] = 0.0f; - } for (int l103 = 0; (l103 < 3); l103 = (l103 + 1)) { fRec89[l103] = 0.0f; - } for (int l104 = 0; (l104 < 2); l104 = (l104 + 1)) { fRec95[l104] = 0.0f; - } for (int l105 = 0; (l105 < 2); l105 = (l105 + 1)) { fRec98[l105] = 0.0f; - } for (int l106 = 0; (l106 < 3); l106 = (l106 + 1)) { fRec97[l106] = 0.0f; - } for (int l107 = 0; (l107 < 3); l107 = (l107 + 1)) { fRec96[l107] = 0.0f; - } for (int l108 = 0; (l108 < 2); l108 = (l108 + 1)) { fRec99[l108] = 0.0f; - } - } - virtual void init(int samplingFreq) { - classInit(samplingFreq); - instanceInit(samplingFreq); + virtual void init(int sample_rate) { + classInit(sample_rate); + instanceInit(sample_rate); } - - virtual void instanceInit(int samplingFreq) { - instanceConstants(samplingFreq); + virtual void instanceInit(int sample_rate) { + instanceConstants(sample_rate); instanceResetUserInterface(); instanceClear(); } @@ -1442,34 +1410,32 @@ class flt_eq10 : public dsp { } virtual int getSampleRate() { - return fSamplingFreq; - + return fSampleRate; } virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("flt.eq10"); - ui_interface->declare(&fVslider4, "unit", "db"); - ui_interface->addVerticalSlider("f1000", &fVslider4, 0.0f, -70.0f, 10.0f, 0.100000001f); - ui_interface->declare(&fVslider7, "unit", "db"); - ui_interface->addVerticalSlider("f125", &fVslider7, 0.0f, -70.0f, 10.0f, 0.100000001f); - ui_interface->declare(&fVslider3, "unit", "db"); - ui_interface->addVerticalSlider("f16000", &fVslider3, 0.0f, -70.0f, 10.0f, 0.100000001f); ui_interface->declare(&fVslider2, "unit", "db"); - ui_interface->addVerticalSlider("f2000", &fVslider2, 0.0f, -70.0f, 10.0f, 0.100000001f); + ui_interface->addVerticalSlider("f1000", &fVslider2, 0.0f, -70.0f, 10.0f, 0.100000001f); + ui_interface->declare(&fVslider0, "unit", "db"); + ui_interface->addVerticalSlider("f125", &fVslider0, 0.0f, -70.0f, 10.0f, 0.100000001f); + ui_interface->declare(&fVslider4, "unit", "db"); + ui_interface->addVerticalSlider("f16000", &fVslider4, 0.0f, -70.0f, 10.0f, 0.100000001f); ui_interface->declare(&fVslider6, "unit", "db"); - ui_interface->addVerticalSlider("f250", &fVslider6, 0.0f, -70.0f, 10.0f, 0.100000001f); + ui_interface->addVerticalSlider("f2000", &fVslider6, 0.0f, -70.0f, 10.0f, 0.100000001f); + ui_interface->declare(&fVslider1, "unit", "db"); + ui_interface->addVerticalSlider("f250", &fVslider1, 0.0f, -70.0f, 10.0f, 0.100000001f); ui_interface->declare(&fVslider9, "unit", "db"); ui_interface->addVerticalSlider("f31", &fVslider9, 0.0f, -70.0f, 10.0f, 0.100000001f); - ui_interface->declare(&fVslider0, "unit", "db"); - ui_interface->addVerticalSlider("f4000", &fVslider0, 0.0f, -70.0f, 10.0f, 0.100000001f); ui_interface->declare(&fVslider5, "unit", "db"); - ui_interface->addVerticalSlider("f500", &fVslider5, 0.0f, -70.0f, 10.0f, 0.100000001f); + ui_interface->addVerticalSlider("f4000", &fVslider5, 0.0f, -70.0f, 10.0f, 0.100000001f); + ui_interface->declare(&fVslider7, "unit", "db"); + ui_interface->addVerticalSlider("f500", &fVslider7, 0.0f, -70.0f, 10.0f, 0.100000001f); ui_interface->declare(&fVslider8, "unit", "db"); ui_interface->addVerticalSlider("f62", &fVslider8, 0.0f, -70.0f, 10.0f, 0.100000001f); - ui_interface->declare(&fVslider1, "unit", "db"); - ui_interface->addVerticalSlider("f8000", &fVslider1, 0.0f, -70.0f, 10.0f, 0.100000001f); + ui_interface->declare(&fVslider3, "unit", "db"); + ui_interface->addVerticalSlider("f8000", &fVslider3, 0.0f, -70.0f, 10.0f, 0.100000001f); ui_interface->closeBox(); - } virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { @@ -1488,182 +1454,202 @@ class flt_eq10 : public dsp { for (int i = 0; (i < count); i = (i + 1)) { float fTemp0 = float(input0[i]); fVec0[0] = fTemp0; - fRec14[0] = (0.0f - (fConst20 * ((fConst21 * fRec14[1]) - (fTemp0 + fVec0[1])))); - fRec13[0] = (fRec14[0] - (fConst18 * ((fConst22 * fRec13[2]) + (fConst25 * fRec13[1])))); - fRec12[0] = ((fConst18 * (fRec13[2] + (fRec13[0] + (2.0f * fRec13[1])))) - (fConst17 * ((fConst26 * fRec12[2]) + (fConst25 * fRec12[1])))); - float fTemp1 = ((fRec12[0] + (2.0f * fRec12[1])) + fRec12[2]); + fRec24[0] = (0.0f - (fConst56 * ((fConst57 * fRec24[1]) - (fTemp0 + fVec0[1])))); + fRec23[0] = (fRec24[0] - (fConst54 * ((fConst58 * fRec23[2]) + (fConst61 * fRec23[1])))); + fRec22[0] = ((fConst54 * (fRec23[2] + (fRec23[0] + (2.0f * fRec23[1])))) - (fConst53 * ((fConst62 * fRec22[2]) + (fConst61 * fRec22[1])))); + float fTemp1 = (fRec22[2] + (fRec22[0] + (2.0f * fRec22[1]))); fVec1[0] = fTemp1; - fRec11[0] = (fConst14 * ((fConst17 * (fTemp1 + fVec1[1])) - (fConst27 * fRec11[1]))); - fRec10[0] = (fRec11[0] - (fConst12 * ((fConst28 * fRec10[2]) + (fConst31 * fRec10[1])))); - fRec9[0] = ((fConst12 * (fRec10[2] + ((2.0f * fRec10[1]) + fRec10[0]))) - (fConst9 * ((fConst32 * fRec9[2]) + (fConst31 * fRec9[1])))); - float fTemp2 = (fRec9[2] + ((2.0f * fRec9[1]) + fRec9[0])); + fRec21[0] = (0.0f - (fConst49 * ((fConst50 * fRec21[1]) - (fConst53 * (fTemp1 + fVec1[1]))))); + fRec20[0] = (fRec21[0] - (fConst47 * ((fConst63 * fRec20[2]) + (fConst66 * fRec20[1])))); + fRec19[0] = ((fConst47 * (fRec20[2] + (fRec20[0] + (2.0f * fRec20[1])))) - (fConst46 * ((fConst67 * fRec19[2]) + (fConst66 * fRec19[1])))); + float fTemp2 = (fRec19[2] + (fRec19[0] + (2.0f * fRec19[1]))); fVec2[0] = fTemp2; - fRec8[0] = ((fConst9 * ((fConst11 * fTemp2) + (fConst33 * fVec2[1]))) - (fConst35 * fRec8[1])); - fRec7[0] = (fRec8[0] - (fConst6 * ((fConst36 * fRec7[2]) + (fConst37 * fRec7[1])))); - fRec6[0] = ((fConst6 * (((fConst5 * fRec7[0]) + (fConst38 * fRec7[1])) + (fConst5 * fRec7[2]))) - (fConst3 * ((fConst39 * fRec6[2]) + (fConst37 * fRec6[1])))); - float fTemp3 = (fConst45 * fRec5[1]); - fRec5[0] = ((fConst3 * (((fConst5 * fRec6[0]) + (fConst38 * fRec6[1])) + (fConst5 * fRec6[2]))) - (fConst42 * (fTemp3 + (fConst46 * fRec5[2])))); - float fTemp4 = (fConst52 * fRec4[1]); - fRec4[0] = ((fRec5[2] + (fConst42 * (fTemp3 + (fConst46 * fRec5[0])))) - (fConst49 * (fTemp4 + (fConst53 * fRec4[2])))); - float fTemp5 = (fConst59 * fRec3[1]); - fRec3[0] = ((fRec4[2] + (fConst49 * (fTemp4 + (fConst53 * fRec4[0])))) - (fConst56 * (fTemp5 + (fConst60 * fRec3[2])))); - float fTemp6 = (fConst66 * fRec2[1]); - fRec2[0] = ((fRec3[2] + (fConst56 * (fTemp5 + (fConst60 * fRec3[0])))) - (fConst63 * (fTemp6 + (fConst67 * fRec2[2])))); - float fTemp7 = (fConst73 * fRec1[1]); - fRec1[0] = ((fRec2[2] + (fConst63 * (fTemp6 + (fConst67 * fRec2[0])))) - (fConst70 * (fTemp7 + (fConst74 * fRec1[2])))); - float fTemp8 = (fConst80 * fRec0[1]); - fRec0[0] = ((fRec1[2] + (fConst70 * (fTemp7 + (fConst74 * fRec1[0])))) - (fConst77 * (fTemp8 + (fConst81 * fRec0[2])))); - fRec15[0] = (fSlow0 + (0.999000013f * fRec15[1])); - fRec25[0] = ((fConst17 * ((fConst82 * fTemp1) + (fConst83 * fVec1[1]))) - (fConst84 * fRec25[1])); - fRec24[0] = (fRec25[0] - (fConst12 * ((fConst28 * fRec24[2]) + (fConst31 * fRec24[1])))); - fRec23[0] = ((fConst12 * (((fConst30 * fRec24[0]) + (fConst85 * fRec24[1])) + (fConst30 * fRec24[2]))) - (fConst9 * ((fConst32 * fRec23[2]) + (fConst31 * fRec23[1])))); - float fTemp9 = (fConst45 * fRec22[1]); - fRec22[0] = ((fConst9 * (((fConst30 * fRec23[0]) + (fConst85 * fRec23[1])) + (fConst30 * fRec23[2]))) - (fConst42 * (fTemp9 + (fConst46 * fRec22[2])))); - float fTemp10 = (fConst52 * fRec21[1]); - fRec21[0] = ((fRec22[2] + (fConst42 * (fTemp9 + (fConst46 * fRec22[0])))) - (fConst49 * (fTemp10 + (fConst53 * fRec21[2])))); - float fTemp11 = (fConst59 * fRec20[1]); - fRec20[0] = ((fRec21[2] + (fConst49 * (fTemp10 + (fConst53 * fRec21[0])))) - (fConst56 * (fTemp11 + (fConst60 * fRec20[2])))); - float fTemp12 = (fConst66 * fRec19[1]); - fRec19[0] = ((fRec20[2] + (fConst56 * (fTemp11 + (fConst60 * fRec20[0])))) - (fConst63 * (fTemp12 + (fConst67 * fRec19[2])))); - float fTemp13 = (fConst73 * fRec18[1]); - fRec18[0] = ((fRec19[2] + (fConst63 * (fTemp12 + (fConst67 * fRec19[0])))) - (fConst70 * (fTemp13 + (fConst74 * fRec18[2])))); - float fTemp14 = (fConst80 * fRec17[1]); - fRec17[0] = ((fRec18[2] + (fConst70 * (fTemp13 + (fConst74 * fRec18[0])))) - (fConst77 * (fTemp14 + (fConst81 * fRec17[2])))); - float fTemp15 = (fConst37 * fRec16[1]); - fRec16[0] = ((fRec17[2] + (fConst77 * (fTemp14 + (fConst81 * fRec17[0])))) - (fConst86 * (fTemp15 + (fConst87 * fRec16[2])))); - fRec26[0] = (fSlow1 + (0.999000013f * fRec26[1])); - fRec37[0] = (0.0f - (fConst92 * ((fConst34 * fRec37[1]) - (fConst9 * (fTemp2 + fVec2[1]))))); - fRec36[0] = (fRec37[0] - (fConst6 * ((fConst37 * fRec36[1]) + (fConst36 * fRec36[2])))); - fRec35[0] = ((fConst6 * (fRec36[2] + (fRec36[0] + (2.0f * fRec36[1])))) - (fConst3 * ((fConst37 * fRec35[1]) + (fConst39 * fRec35[2])))); - float fTemp16 = (fRec35[2] + (fRec35[0] + (2.0f * fRec35[1]))); - fVec3[0] = fTemp16; - fRec34[0] = ((fConst3 * ((fConst91 * fTemp16) + (fConst93 * fVec3[1]))) - (fConst95 * fRec34[1])); - fRec33[0] = (fRec34[0] - (fConst89 * ((fConst96 * fRec33[2]) + (fConst80 * fRec33[1])))); - fRec32[0] = ((fConst89 * (((fConst79 * fRec33[0]) + (fConst97 * fRec33[1])) + (fConst79 * fRec33[2]))) - (fConst88 * ((fConst98 * fRec32[2]) + (fConst80 * fRec32[1])))); - float fTemp17 = (fConst45 * fRec31[1]); - fRec31[0] = ((fConst88 * (((fConst79 * fRec32[0]) + (fConst97 * fRec32[1])) + (fConst79 * fRec32[2]))) - (fConst42 * (fTemp17 + (fConst46 * fRec31[2])))); - float fTemp18 = (fConst52 * fRec30[1]); - fRec30[0] = ((fRec31[2] + (fConst42 * (fTemp17 + (fConst46 * fRec31[0])))) - (fConst49 * (fTemp18 + (fConst53 * fRec30[2])))); - float fTemp19 = (fConst59 * fRec29[1]); - fRec29[0] = ((fRec30[2] + (fConst49 * (fTemp18 + (fConst53 * fRec30[0])))) - (fConst56 * (fTemp19 + (fConst60 * fRec29[2])))); - float fTemp20 = (fConst66 * fRec28[1]); - fRec28[0] = ((fRec29[2] + (fConst56 * (fTemp19 + (fConst60 * fRec29[0])))) - (fConst63 * (fTemp20 + (fConst67 * fRec28[2])))); - float fTemp21 = (fConst73 * fRec27[1]); - fRec27[0] = ((fRec28[2] + (fConst63 * (fTemp20 + (fConst67 * fRec28[0])))) - (fConst70 * (fTemp21 + (fConst74 * fRec27[2])))); - fRec38[0] = (fSlow2 + (0.999000013f * fRec38[1])); - fRec49[0] = ((fConst99 * fVec0[1]) - (fConst20 * ((fConst21 * fRec49[1]) - (fConst16 * fTemp0)))); - fRec48[0] = (fRec49[0] - (fConst18 * ((fConst22 * fRec48[2]) + (fConst25 * fRec48[1])))); - fRec47[0] = ((fConst18 * (((fConst24 * fRec48[0]) + (fConst100 * fRec48[1])) + (fConst24 * fRec48[2]))) - (fConst17 * ((fConst26 * fRec47[2]) + (fConst25 * fRec47[1])))); - float fTemp22 = (fConst45 * fRec46[1]); - fRec46[0] = ((fConst17 * (((fConst24 * fRec47[0]) + (fConst100 * fRec47[1])) + (fConst24 * fRec47[2]))) - (fConst42 * ((fConst46 * fRec46[2]) + fTemp22))); - float fTemp23 = (fConst52 * fRec45[1]); - fRec45[0] = ((fRec46[2] + (fConst42 * (fTemp22 + (fConst46 * fRec46[0])))) - (fConst49 * ((fConst53 * fRec45[2]) + fTemp23))); - float fTemp24 = (fConst59 * fRec44[1]); - fRec44[0] = ((fRec45[2] + (fConst49 * (fTemp23 + (fConst53 * fRec45[0])))) - (fConst56 * ((fConst60 * fRec44[2]) + fTemp24))); - float fTemp25 = (fConst66 * fRec43[1]); - fRec43[0] = ((fRec44[2] + (fConst56 * (fTemp24 + (fConst60 * fRec44[0])))) - (fConst63 * ((fConst67 * fRec43[2]) + fTemp25))); - float fTemp26 = (fConst73 * fRec42[1]); - fRec42[0] = ((fRec43[2] + (fConst63 * (fTemp25 + (fConst67 * fRec43[0])))) - (fConst70 * ((fConst74 * fRec42[2]) + fTemp26))); - float fTemp27 = (fConst80 * fRec41[1]); - fRec41[0] = ((fRec42[2] + (fConst70 * (fTemp26 + (fConst74 * fRec42[0])))) - (fConst77 * ((fConst81 * fRec41[2]) + fTemp27))); - float fTemp28 = (fConst37 * fRec40[1]); - fRec40[0] = ((fRec41[2] + (fConst77 * (fTemp27 + (fConst81 * fRec41[0])))) - (fConst86 * ((fConst87 * fRec40[2]) + fTemp28))); - float fTemp29 = (fConst31 * fRec39[1]); - fRec39[0] = ((fRec40[2] + (fConst86 * (fTemp28 + (fConst87 * fRec40[0])))) - (fConst101 * ((fConst102 * fRec39[2]) + fTemp29))); + fRec18[0] = (0.0f - (fConst42 * ((fConst43 * fRec18[1]) - (fConst46 * (fTemp2 + fVec2[1]))))); + fRec17[0] = (fRec18[0] - (fConst40 * ((fConst68 * fRec17[2]) + (fConst71 * fRec17[1])))); + fRec16[0] = ((fConst40 * (fRec17[2] + (fRec17[0] + (2.0f * fRec17[1])))) - (fConst39 * ((fConst72 * fRec16[2]) + (fConst71 * fRec16[1])))); + float fTemp3 = (fRec16[2] + (fRec16[0] + (2.0f * fRec16[1]))); + fVec3[0] = fTemp3; + fRec15[0] = (0.0f - (fConst35 * ((fConst36 * fRec15[1]) - (fConst39 * (fTemp3 + fVec3[1]))))); + fRec14[0] = (fRec15[0] - (fConst33 * ((fConst73 * fRec14[2]) + (fConst76 * fRec14[1])))); + fRec13[0] = ((fConst33 * (fRec14[2] + (fRec14[0] + (2.0f * fRec14[1])))) - (fConst32 * ((fConst77 * fRec13[2]) + (fConst76 * fRec13[1])))); + float fTemp4 = (fRec13[2] + (fRec13[0] + (2.0f * fRec13[1]))); + fVec4[0] = fTemp4; + fRec12[0] = (0.0f - (fConst28 * ((fConst29 * fRec12[1]) - (fConst32 * (fTemp4 + fVec4[1]))))); + fRec11[0] = (fRec12[0] - (fConst26 * ((fConst78 * fRec11[2]) + (fConst81 * fRec11[1])))); + fRec10[0] = ((fConst26 * (fRec11[2] + (fRec11[0] + (2.0f * fRec11[1])))) - (fConst25 * ((fConst82 * fRec10[2]) + (fConst81 * fRec10[1])))); + float fTemp5 = (fRec10[2] + (fRec10[0] + (2.0f * fRec10[1]))); + fVec5[0] = fTemp5; + fRec9[0] = (0.0f - (fConst21 * ((fConst22 * fRec9[1]) - (fConst25 * (fTemp5 + fVec5[1]))))); + fRec8[0] = (fRec9[0] - (fConst19 * ((fConst83 * fRec8[2]) + (fConst86 * fRec8[1])))); + fRec7[0] = ((fConst19 * (fRec8[2] + (fRec8[0] + (2.0f * fRec8[1])))) - (fConst18 * ((fConst87 * fRec7[2]) + (fConst86 * fRec7[1])))); + float fTemp6 = (fRec7[2] + (fRec7[0] + (2.0f * fRec7[1]))); + fVec6[0] = fTemp6; + fRec6[0] = (0.0f - (fConst14 * ((fConst15 * fRec6[1]) - (fConst18 * (fTemp6 + fVec6[1]))))); + fRec5[0] = (fRec6[0] - (fConst12 * ((fConst88 * fRec5[2]) + (fConst91 * fRec5[1])))); + fRec4[0] = ((fConst12 * (fRec5[2] + (fRec5[0] + (2.0f * fRec5[1])))) - (fConst9 * ((fConst92 * fRec4[2]) + (fConst91 * fRec4[1])))); + float fTemp7 = (fRec4[2] + (fRec4[0] + (2.0f * fRec4[1]))); + fVec7[0] = fTemp7; + fRec3[0] = ((fConst9 * ((fConst11 * fTemp7) + (fConst93 * fVec7[1]))) - (fConst95 * fRec3[1])); + fRec2[0] = (fRec3[0] - (fConst6 * ((fConst96 * fRec2[2]) + (fConst97 * fRec2[1])))); + fRec1[0] = ((fConst6 * (((fConst5 * fRec2[0]) + (fConst98 * fRec2[1])) + (fConst5 * fRec2[2]))) - (fConst3 * ((fConst99 * fRec1[2]) + (fConst97 * fRec1[1])))); + float fTemp8 = (fConst106 * fRec0[1]); + fRec0[0] = ((fConst3 * (((fConst5 * fRec1[0]) + (fConst98 * fRec1[1])) + (fConst5 * fRec1[2]))) - (fConst102 * ((fConst103 * fRec0[2]) + fTemp8))); + fRec25[0] = (fSlow0 + (0.999000013f * fRec25[1])); + fRec30[0] = ((fConst18 * ((fConst107 * fTemp6) + (fConst108 * fVec6[1]))) - (fConst109 * fRec30[1])); + fRec29[0] = (fRec30[0] - (fConst12 * ((fConst88 * fRec29[2]) + (fConst91 * fRec29[1])))); + fRec28[0] = ((fConst12 * (((fConst90 * fRec29[0]) + (fConst110 * fRec29[1])) + (fConst90 * fRec29[2]))) - (fConst9 * ((fConst92 * fRec28[2]) + (fConst91 * fRec28[1])))); + float fTemp9 = (fConst106 * fRec27[1]); + fRec27[0] = ((fConst9 * (((fConst90 * fRec28[0]) + (fConst110 * fRec28[1])) + (fConst90 * fRec28[2]))) - (fConst102 * ((fConst103 * fRec27[2]) + fTemp9))); + float fTemp10 = (fConst97 * fRec26[1]); + fRec26[0] = ((fRec27[2] + (fConst102 * (fTemp9 + (fConst103 * fRec27[0])))) - (fConst111 * ((fConst112 * fRec26[2]) + fTemp10))); + fRec31[0] = (fSlow1 + (0.999000013f * fRec31[1])); + fRec38[0] = ((fConst32 * ((fConst113 * fTemp4) + (fConst114 * fVec4[1]))) - (fConst115 * fRec38[1])); + fRec37[0] = (fRec38[0] - (fConst26 * ((fConst78 * fRec37[2]) + (fConst81 * fRec37[1])))); + fRec36[0] = ((fConst26 * (((fConst80 * fRec37[0]) + (fConst116 * fRec37[1])) + (fConst80 * fRec37[2]))) - (fConst25 * ((fConst82 * fRec36[2]) + (fConst81 * fRec36[1])))); + float fTemp11 = (fConst106 * fRec35[1]); + fRec35[0] = ((fConst25 * (((fConst80 * fRec36[0]) + (fConst116 * fRec36[1])) + (fConst80 * fRec36[2]))) - (fConst102 * ((fConst103 * fRec35[2]) + fTemp11))); + float fTemp12 = (fConst97 * fRec34[1]); + fRec34[0] = ((fRec35[2] + (fConst102 * (fTemp11 + (fConst103 * fRec35[0])))) - (fConst111 * ((fConst112 * fRec34[2]) + fTemp12))); + float fTemp13 = (fConst91 * fRec33[1]); + fRec33[0] = ((fRec34[2] + (fConst111 * (fTemp12 + (fConst112 * fRec34[0])))) - (fConst117 * ((fConst118 * fRec33[2]) + fTemp13))); + float fTemp14 = (fConst86 * fRec32[1]); + fRec32[0] = ((fRec33[2] + (fConst117 * (fTemp13 + (fConst118 * fRec33[0])))) - (fConst119 * ((fConst120 * fRec32[2]) + fTemp14))); + fRec39[0] = (fSlow2 + (0.999000013f * fRec39[1])); + fRec49[0] = ((fConst53 * ((fConst121 * fTemp1) + (fConst122 * fVec1[1]))) - (fConst123 * fRec49[1])); + fRec48[0] = (fRec49[0] - (fConst47 * ((fConst63 * fRec48[2]) + (fConst66 * fRec48[1])))); + fRec47[0] = ((fConst47 * (((fConst65 * fRec48[0]) + (fConst124 * fRec48[1])) + (fConst65 * fRec48[2]))) - (fConst46 * ((fConst67 * fRec47[2]) + (fConst66 * fRec47[1])))); + float fTemp15 = (fConst106 * fRec46[1]); + fRec46[0] = ((fConst46 * (((fConst65 * fRec47[0]) + (fConst124 * fRec47[1])) + (fConst65 * fRec47[2]))) - (fConst102 * ((fConst103 * fRec46[2]) + fTemp15))); + float fTemp16 = (fConst97 * fRec45[1]); + fRec45[0] = ((fRec46[2] + (fConst102 * (fTemp15 + (fConst103 * fRec46[0])))) - (fConst111 * ((fConst112 * fRec45[2]) + fTemp16))); + float fTemp17 = (fConst91 * fRec44[1]); + fRec44[0] = ((fRec45[2] + (fConst111 * (fTemp16 + (fConst112 * fRec45[0])))) - (fConst117 * ((fConst118 * fRec44[2]) + fTemp17))); + float fTemp18 = (fConst86 * fRec43[1]); + fRec43[0] = ((fRec44[2] + (fConst117 * (fTemp17 + (fConst118 * fRec44[0])))) - (fConst119 * ((fConst120 * fRec43[2]) + fTemp18))); + float fTemp19 = (fConst81 * fRec42[1]); + fRec42[0] = ((fRec43[2] + (fConst119 * (fTemp18 + (fConst120 * fRec43[0])))) - (fConst125 * ((fConst126 * fRec42[2]) + fTemp19))); + float fTemp20 = (fConst76 * fRec41[1]); + fRec41[0] = ((fRec42[2] + (fConst125 * (fTemp19 + (fConst126 * fRec42[0])))) - (fConst127 * ((fConst128 * fRec41[2]) + fTemp20))); + float fTemp21 = (fConst71 * fRec40[1]); + fRec40[0] = ((fRec41[2] + (fConst127 * (fTemp20 + (fConst128 * fRec41[0])))) - (fConst129 * ((fConst130 * fRec40[2]) + fTemp21))); fRec50[0] = (fSlow3 + (0.999000013f * fRec50[1])); - fRec60[0] = (0.0f - (fConst107 * ((fConst94 * fRec60[1]) - (fConst3 * (fTemp16 + fVec3[1]))))); - fRec59[0] = (fRec60[0] - (fConst89 * ((fConst96 * fRec59[2]) + (fConst80 * fRec59[1])))); - fRec58[0] = ((fConst89 * (fRec59[2] + (fRec59[0] + (2.0f * fRec59[1])))) - (fConst88 * ((fConst80 * fRec58[1]) + (fConst98 * fRec58[2])))); - float fTemp30 = (fRec58[2] + (fRec58[0] + (2.0f * fRec58[1]))); - fVec4[0] = fTemp30; - fRec57[0] = ((fConst88 * ((fConst106 * fTemp30) + (fConst108 * fVec4[1]))) - (fConst110 * fRec57[1])); - fRec56[0] = (fRec57[0] - (fConst104 * ((fConst111 * fRec56[2]) + (fConst73 * fRec56[1])))); - fRec55[0] = ((fConst104 * (((fConst72 * fRec56[0]) + (fConst112 * fRec56[1])) + (fConst72 * fRec56[2]))) - (fConst103 * ((fConst113 * fRec55[2]) + (fConst73 * fRec55[1])))); - float fTemp31 = (fConst45 * fRec54[1]); - fRec54[0] = ((fConst103 * (((fConst72 * fRec55[0]) + (fConst112 * fRec55[1])) + (fConst72 * fRec55[2]))) - (fConst42 * ((fConst46 * fRec54[2]) + fTemp31))); - float fTemp32 = (fConst52 * fRec53[1]); - fRec53[0] = ((fRec54[2] + (fConst42 * (fTemp31 + (fConst46 * fRec54[0])))) - (fConst49 * ((fConst53 * fRec53[2]) + fTemp32))); - float fTemp33 = (fConst59 * fRec52[1]); - fRec52[0] = ((fRec53[2] + (fConst49 * (fTemp32 + (fConst53 * fRec53[0])))) - (fConst56 * ((fConst60 * fRec52[2]) + fTemp33))); - float fTemp34 = (fConst66 * fRec51[1]); - fRec51[0] = ((fRec52[2] + (fConst56 * (fTemp33 + (fConst60 * fRec52[0])))) - (fConst63 * ((fConst67 * fRec51[2]) + fTemp34))); - fRec61[0] = (fSlow4 + (0.999000013f * fRec61[1])); - fRec70[0] = (0.0f - (fConst118 * ((fConst109 * fRec70[1]) - (fConst88 * (fTemp30 + fVec4[1]))))); - fRec69[0] = (fRec70[0] - (fConst104 * ((fConst111 * fRec69[2]) + (fConst73 * fRec69[1])))); - fRec68[0] = ((fConst104 * (fRec69[2] + (fRec69[0] + (2.0f * fRec69[1])))) - (fConst103 * ((fConst113 * fRec68[2]) + (fConst73 * fRec68[1])))); - float fTemp35 = (fRec68[2] + (fRec68[0] + (2.0f * fRec68[1]))); - fVec5[0] = fTemp35; - fRec67[0] = ((fConst103 * ((fConst117 * fTemp35) + (fConst119 * fVec5[1]))) - (fConst121 * fRec67[1])); - fRec66[0] = (fRec67[0] - (fConst115 * ((fConst122 * fRec66[2]) + (fConst66 * fRec66[1])))); - fRec65[0] = ((fConst115 * (((fConst65 * fRec66[0]) + (fConst123 * fRec66[1])) + (fConst65 * fRec66[2]))) - (fConst114 * ((fConst124 * fRec65[2]) + (fConst66 * fRec65[1])))); - float fTemp36 = (fConst45 * fRec64[1]); - fRec64[0] = ((fConst114 * (((fConst65 * fRec65[0]) + (fConst123 * fRec65[1])) + (fConst65 * fRec65[2]))) - (fConst42 * ((fConst46 * fRec64[2]) + fTemp36))); - float fTemp37 = (fConst52 * fRec63[1]); - fRec63[0] = ((fRec64[2] + (fConst42 * (fTemp36 + (fConst46 * fRec64[0])))) - (fConst49 * ((fConst53 * fRec63[2]) + fTemp37))); - float fTemp38 = (fConst59 * fRec62[1]); - fRec62[0] = ((fRec63[2] + (fConst49 * (fTemp37 + (fConst53 * fRec63[0])))) - (fConst56 * ((fConst60 * fRec62[2]) + fTemp38))); - fRec71[0] = (fSlow5 + (0.999000013f * fRec71[1])); - fRec79[0] = (0.0f - (fConst129 * ((fConst120 * fRec79[1]) - (fConst103 * (fTemp35 + fVec5[1]))))); - fRec78[0] = (fRec79[0] - (fConst115 * ((fConst122 * fRec78[2]) + (fConst66 * fRec78[1])))); - fRec77[0] = ((fConst115 * (fRec78[2] + (fRec78[0] + (2.0f * fRec78[1])))) - (fConst114 * ((fConst124 * fRec77[2]) + (fConst66 * fRec77[1])))); - float fTemp39 = (fRec77[2] + (fRec77[0] + (2.0f * fRec77[1]))); - fVec6[0] = fTemp39; - fRec76[0] = ((fConst114 * ((fConst128 * fTemp39) + (fConst130 * fVec6[1]))) - (fConst132 * fRec76[1])); - fRec75[0] = (fRec76[0] - (fConst126 * ((fConst133 * fRec75[2]) + (fConst59 * fRec75[1])))); - fRec74[0] = ((fConst126 * (((fConst58 * fRec75[0]) + (fConst134 * fRec75[1])) + (fConst58 * fRec75[2]))) - (fConst125 * ((fConst135 * fRec74[2]) + (fConst59 * fRec74[1])))); - float fTemp40 = (fConst45 * fRec73[1]); - fRec73[0] = ((fConst125 * (((fConst58 * fRec74[0]) + (fConst134 * fRec74[1])) + (fConst58 * fRec74[2]))) - (fConst42 * ((fConst46 * fRec73[2]) + fTemp40))); - float fTemp41 = (fConst52 * fRec72[1]); - fRec72[0] = ((fRec73[2] + (fConst42 * (fTemp40 + (fConst46 * fRec73[0])))) - (fConst49 * ((fConst53 * fRec72[2]) + fTemp41))); - fRec80[0] = (fSlow6 + (0.999000013f * fRec80[1])); - fRec87[0] = (0.0f - (fConst140 * ((fConst131 * fRec87[1]) - (fConst114 * (fTemp39 + fVec6[1]))))); - fRec86[0] = (fRec87[0] - (fConst126 * ((fConst133 * fRec86[2]) + (fConst59 * fRec86[1])))); - fRec85[0] = ((fConst126 * (fRec86[2] + (fRec86[0] + (2.0f * fRec86[1])))) - (fConst125 * ((fConst135 * fRec85[2]) + (fConst59 * fRec85[1])))); - float fTemp42 = (fRec85[2] + (fRec85[0] + (2.0f * fRec85[1]))); - fVec7[0] = fTemp42; - fRec84[0] = ((fConst125 * ((fConst139 * fTemp42) + (fConst141 * fVec7[1]))) - (fConst143 * fRec84[1])); - fRec83[0] = (fRec84[0] - (fConst137 * ((fConst144 * fRec83[2]) + (fConst52 * fRec83[1])))); - fRec82[0] = ((fConst137 * (((fConst51 * fRec83[0]) + (fConst145 * fRec83[1])) + (fConst51 * fRec83[2]))) - (fConst136 * ((fConst146 * fRec82[2]) + (fConst52 * fRec82[1])))); - float fTemp43 = (fConst45 * fRec81[1]); - fRec81[0] = ((fConst136 * (((fConst51 * fRec82[0]) + (fConst145 * fRec82[1])) + (fConst51 * fRec82[2]))) - (fConst42 * ((fConst46 * fRec81[2]) + fTemp43))); + fRec61[0] = ((fConst131 * fVec0[1]) - (fConst56 * ((fConst57 * fRec61[1]) - (fConst52 * fTemp0)))); + fRec60[0] = (fRec61[0] - (fConst54 * ((fConst58 * fRec60[2]) + (fConst61 * fRec60[1])))); + fRec59[0] = ((fConst54 * (((fConst60 * fRec60[0]) + (fConst132 * fRec60[1])) + (fConst60 * fRec60[2]))) - (fConst53 * ((fConst62 * fRec59[2]) + (fConst61 * fRec59[1])))); + float fTemp22 = (fConst106 * fRec58[1]); + fRec58[0] = ((fConst53 * (((fConst60 * fRec59[0]) + (fConst132 * fRec59[1])) + (fConst60 * fRec59[2]))) - (fConst102 * ((fConst103 * fRec58[2]) + fTemp22))); + float fTemp23 = (fConst97 * fRec57[1]); + fRec57[0] = ((fRec58[2] + (fConst102 * (fTemp22 + (fConst103 * fRec58[0])))) - (fConst111 * ((fConst112 * fRec57[2]) + fTemp23))); + float fTemp24 = (fConst91 * fRec56[1]); + fRec56[0] = ((fRec57[2] + (fConst111 * (fTemp23 + (fConst112 * fRec57[0])))) - (fConst117 * ((fConst118 * fRec56[2]) + fTemp24))); + float fTemp25 = (fConst86 * fRec55[1]); + fRec55[0] = ((fRec56[2] + (fConst117 * (fTemp24 + (fConst118 * fRec56[0])))) - (fConst119 * ((fConst120 * fRec55[2]) + fTemp25))); + float fTemp26 = (fConst81 * fRec54[1]); + fRec54[0] = ((fRec55[2] + (fConst119 * (fTemp25 + (fConst120 * fRec55[0])))) - (fConst125 * ((fConst126 * fRec54[2]) + fTemp26))); + float fTemp27 = (fConst76 * fRec53[1]); + fRec53[0] = ((fRec54[2] + (fConst125 * (fTemp26 + (fConst126 * fRec54[0])))) - (fConst127 * ((fConst128 * fRec53[2]) + fTemp27))); + float fTemp28 = (fConst71 * fRec52[1]); + fRec52[0] = ((fRec53[2] + (fConst127 * (fTemp27 + (fConst128 * fRec53[0])))) - (fConst129 * ((fConst130 * fRec52[2]) + fTemp28))); + float fTemp29 = (fConst66 * fRec51[1]); + fRec51[0] = ((fRec52[2] + (fConst129 * (fTemp28 + (fConst130 * fRec52[0])))) - (fConst133 * ((fConst134 * fRec51[2]) + fTemp29))); + fRec62[0] = (fSlow4 + (0.999000013f * fRec62[1])); + fRec71[0] = ((fConst46 * ((fConst135 * fTemp2) + (fConst136 * fVec2[1]))) - (fConst137 * fRec71[1])); + fRec70[0] = (fRec71[0] - (fConst40 * ((fConst68 * fRec70[2]) + (fConst71 * fRec70[1])))); + fRec69[0] = ((fConst40 * (((fConst70 * fRec70[0]) + (fConst138 * fRec70[1])) + (fConst70 * fRec70[2]))) - (fConst39 * ((fConst72 * fRec69[2]) + (fConst71 * fRec69[1])))); + float fTemp30 = (fConst106 * fRec68[1]); + fRec68[0] = ((fConst39 * (((fConst70 * fRec69[0]) + (fConst138 * fRec69[1])) + (fConst70 * fRec69[2]))) - (fConst102 * ((fConst103 * fRec68[2]) + fTemp30))); + float fTemp31 = (fConst97 * fRec67[1]); + fRec67[0] = ((fRec68[2] + (fConst102 * (fTemp30 + (fConst103 * fRec68[0])))) - (fConst111 * ((fConst112 * fRec67[2]) + fTemp31))); + float fTemp32 = (fConst91 * fRec66[1]); + fRec66[0] = ((fRec67[2] + (fConst111 * (fTemp31 + (fConst112 * fRec67[0])))) - (fConst117 * ((fConst118 * fRec66[2]) + fTemp32))); + float fTemp33 = (fConst86 * fRec65[1]); + fRec65[0] = ((fRec66[2] + (fConst117 * (fTemp32 + (fConst118 * fRec66[0])))) - (fConst119 * ((fConst120 * fRec65[2]) + fTemp33))); + float fTemp34 = (fConst81 * fRec64[1]); + fRec64[0] = ((fRec65[2] + (fConst119 * (fTemp33 + (fConst120 * fRec65[0])))) - (fConst125 * ((fConst126 * fRec64[2]) + fTemp34))); + float fTemp35 = (fConst76 * fRec63[1]); + fRec63[0] = ((fRec64[2] + (fConst125 * (fTemp34 + (fConst126 * fRec64[0])))) - (fConst127 * ((fConst128 * fRec63[2]) + fTemp35))); + fRec72[0] = (fSlow5 + (0.999000013f * fRec72[1])); + fRec80[0] = ((fConst39 * ((fConst139 * fTemp3) + (fConst140 * fVec3[1]))) - (fConst141 * fRec80[1])); + fRec79[0] = (fRec80[0] - (fConst33 * ((fConst73 * fRec79[2]) + (fConst76 * fRec79[1])))); + fRec78[0] = ((fConst33 * (((fConst75 * fRec79[0]) + (fConst142 * fRec79[1])) + (fConst75 * fRec79[2]))) - (fConst32 * ((fConst77 * fRec78[2]) + (fConst76 * fRec78[1])))); + float fTemp36 = (fConst106 * fRec77[1]); + fRec77[0] = ((fConst32 * (((fConst75 * fRec78[0]) + (fConst142 * fRec78[1])) + (fConst75 * fRec78[2]))) - (fConst102 * ((fConst103 * fRec77[2]) + fTemp36))); + float fTemp37 = (fConst97 * fRec76[1]); + fRec76[0] = ((fRec77[2] + (fConst102 * (fTemp36 + (fConst103 * fRec77[0])))) - (fConst111 * ((fConst112 * fRec76[2]) + fTemp37))); + float fTemp38 = (fConst91 * fRec75[1]); + fRec75[0] = ((fRec76[2] + (fConst111 * (fTemp37 + (fConst112 * fRec76[0])))) - (fConst117 * ((fConst118 * fRec75[2]) + fTemp38))); + float fTemp39 = (fConst86 * fRec74[1]); + fRec74[0] = ((fRec75[2] + (fConst117 * (fTemp38 + (fConst118 * fRec75[0])))) - (fConst119 * ((fConst120 * fRec74[2]) + fTemp39))); + float fTemp40 = (fConst81 * fRec73[1]); + fRec73[0] = ((fRec74[2] + (fConst119 * (fTemp39 + (fConst120 * fRec74[0])))) - (fConst125 * ((fConst126 * fRec73[2]) + fTemp40))); + fRec81[0] = (fSlow6 + (0.999000013f * fRec81[1])); + fRec87[0] = ((fConst25 * ((fConst143 * fTemp5) + (fConst144 * fVec5[1]))) - (fConst145 * fRec87[1])); + fRec86[0] = (fRec87[0] - (fConst19 * ((fConst83 * fRec86[2]) + (fConst86 * fRec86[1])))); + fRec85[0] = ((fConst19 * (((fConst85 * fRec86[0]) + (fConst146 * fRec86[1])) + (fConst85 * fRec86[2]))) - (fConst18 * ((fConst87 * fRec85[2]) + (fConst86 * fRec85[1])))); + float fTemp41 = (fConst106 * fRec84[1]); + fRec84[0] = ((fConst18 * (((fConst85 * fRec85[0]) + (fConst146 * fRec85[1])) + (fConst85 * fRec85[2]))) - (fConst102 * ((fConst103 * fRec84[2]) + fTemp41))); + float fTemp42 = (fConst97 * fRec83[1]); + fRec83[0] = ((fRec84[2] + (fConst102 * (fTemp41 + (fConst103 * fRec84[0])))) - (fConst111 * ((fConst112 * fRec83[2]) + fTemp42))); + float fTemp43 = (fConst91 * fRec82[1]); + fRec82[0] = ((fRec83[2] + (fConst111 * (fTemp42 + (fConst112 * fRec83[0])))) - (fConst117 * ((fConst118 * fRec82[2]) + fTemp43))); fRec88[0] = (fSlow7 + (0.999000013f * fRec88[1])); - fRec94[0] = (0.0f - (fConst152 * ((fConst142 * fRec94[1]) - (fConst125 * (fTemp42 + fVec7[1]))))); - fRec93[0] = (fRec94[0] - (fConst137 * ((fConst144 * fRec93[2]) + (fConst52 * fRec93[1])))); - fRec92[0] = ((fConst137 * (fRec93[2] + (fRec93[0] + (2.0f * fRec93[1])))) - (fConst136 * ((fConst146 * fRec92[2]) + (fConst52 * fRec92[1])))); + fRec94[0] = (0.0f - (fConst151 * ((fConst94 * fRec94[1]) - (fConst9 * (fTemp7 + fVec7[1]))))); + fRec93[0] = (fRec94[0] - (fConst6 * ((fConst96 * fRec93[2]) + (fConst97 * fRec93[1])))); + fRec92[0] = ((fConst6 * (fRec93[2] + (fRec93[0] + (2.0f * fRec93[1])))) - (fConst3 * ((fConst99 * fRec92[2]) + (fConst97 * fRec92[1])))); float fTemp44 = (fRec92[2] + (fRec92[0] + (2.0f * fRec92[1]))); fVec8[0] = fTemp44; - fRec91[0] = ((fConst136 * ((fConst151 * fVec8[1]) + (fConst150 * fTemp44))) - (fConst154 * fRec91[1])); - fRec90[0] = (fRec91[0] - (fConst148 * ((fConst155 * fRec90[2]) + (fConst45 * fRec90[1])))); - fRec89[0] = ((fConst148 * (((fConst44 * fRec90[0]) + (fConst156 * fRec90[1])) + (fConst44 * fRec90[2]))) - (fConst147 * ((fConst157 * fRec89[2]) + (fConst45 * fRec89[1])))); + fRec91[0] = ((fConst3 * ((fConst150 * fTemp44) + (fConst152 * fVec8[1]))) - (fConst154 * fRec91[1])); + fRec90[0] = (fRec91[0] - (fConst148 * ((fConst155 * fRec90[2]) + (fConst106 * fRec90[1])))); + fRec89[0] = ((fConst148 * (((fConst105 * fRec90[0]) + (fConst156 * fRec90[1])) + (fConst105 * fRec90[2]))) - (fConst147 * ((fConst157 * fRec89[2]) + (fConst106 * fRec89[1])))); fRec95[0] = (fSlow8 + (0.999000013f * fRec95[1])); - fRec98[0] = (0.0f - (fConst158 * ((fConst153 * fRec98[1]) - (fConst136 * (fTemp44 + fVec8[1]))))); - fRec97[0] = (fRec98[0] - (fConst148 * ((fConst45 * fRec97[1]) + (fConst155 * fRec97[2])))); - fRec96[0] = ((fConst148 * (fRec97[2] + (fRec97[0] + (2.0f * fRec97[1])))) - (fConst147 * ((fConst157 * fRec96[2]) + (fConst45 * fRec96[1])))); + fRec98[0] = (0.0f - (fConst158 * ((fConst153 * fRec98[1]) - (fConst3 * (fTemp44 + fVec8[1]))))); + fRec97[0] = (fRec98[0] - (fConst148 * ((fConst155 * fRec97[2]) + (fConst106 * fRec97[1])))); + fRec96[0] = ((fConst148 * (fRec97[2] + (fRec97[0] + (2.0f * fRec97[1])))) - (fConst147 * ((fConst157 * fRec96[2]) + (fConst106 * fRec96[1])))); fRec99[0] = (fSlow9 + (0.999000013f * fRec99[1])); - output0[i] = FAUSTFLOAT(((((((((((fRec0[2] + (fConst77 * (fTemp8 + (fConst81 * fRec0[0])))) * std::pow(10.0f, (0.0500000007f * fRec15[0]))) + ((fRec16[2] + (fConst86 * (fTemp15 + (fConst87 * fRec16[0])))) * std::pow(10.0f, (0.0500000007f * fRec26[0])))) + ((fRec27[2] + (fConst70 * (fTemp21 + (fConst74 * fRec27[0])))) * std::pow(10.0f, (0.0500000007f * fRec38[0])))) + ((fRec39[2] + (fConst101 * (fTemp29 + (fConst102 * fRec39[0])))) * std::pow(10.0f, (0.0500000007f * fRec50[0])))) + ((fRec51[2] + (fConst63 * (fTemp34 + (fConst67 * fRec51[0])))) * std::pow(10.0f, (0.0500000007f * fRec61[0])))) + ((fRec62[2] + (fConst56 * (fTemp38 + (fConst60 * fRec62[0])))) * std::pow(10.0f, (0.0500000007f * fRec71[0])))) + ((fRec72[2] + (fConst49 * (fTemp41 + (fConst53 * fRec72[0])))) * std::pow(10.0f, (0.0500000007f * fRec80[0])))) + ((fRec81[2] + (fConst42 * (fTemp43 + (fConst46 * fRec81[0])))) * std::pow(10.0f, (0.0500000007f * fRec88[0])))) + (fConst147 * (((((fConst44 * fRec89[0]) + (fConst156 * fRec89[1])) + (fConst44 * fRec89[2])) * std::pow(10.0f, (0.0500000007f * fRec95[0]))) + ((fRec96[2] + (fRec96[0] + (2.0f * fRec96[1]))) * std::pow(10.0f, (0.0500000007f * fRec99[0]))))))); + output0[i] = FAUSTFLOAT((((fRec0[2] + (fConst102 * (fTemp8 + (fConst103 * fRec0[0])))) * std::pow(10.0f, (0.0500000007f * fRec25[0]))) + (((fRec26[2] + (fConst111 * (fTemp10 + (fConst112 * fRec26[0])))) * std::pow(10.0f, (0.0500000007f * fRec31[0]))) + (((fRec32[2] + (fConst119 * (fTemp14 + (fConst120 * fRec32[0])))) * std::pow(10.0f, (0.0500000007f * fRec39[0]))) + ((((fRec40[2] + (fConst129 * (fTemp21 + (fConst130 * fRec40[0])))) * std::pow(10.0f, (0.0500000007f * fRec50[0]))) + ((((fRec51[2] + (fConst133 * (fTemp29 + (fConst134 * fRec51[0])))) * std::pow(10.0f, (0.0500000007f * fRec62[0]))) + (((fRec63[2] + (fConst127 * (fTemp35 + (fConst128 * fRec63[0])))) * std::pow(10.0f, (0.0500000007f * fRec72[0]))) + ((fRec73[2] + (fConst125 * (fTemp40 + (fConst126 * fRec73[0])))) * std::pow(10.0f, (0.0500000007f * fRec81[0]))))) + ((fRec82[2] + (fConst117 * (fTemp43 + (fConst118 * fRec82[0])))) * std::pow(10.0f, (0.0500000007f * fRec88[0]))))) + (fConst147 * (((((fConst105 * fRec89[0]) + (fConst156 * fRec89[1])) + (fConst105 * fRec89[2])) * std::pow(10.0f, (0.0500000007f * fRec95[0]))) + ((fRec96[2] + (fRec96[0] + (2.0f * fRec96[1]))) * std::pow(10.0f, (0.0500000007f * fRec99[0])))))))))); fVec0[1] = fVec0[0]; + fRec24[1] = fRec24[0]; + fRec23[2] = fRec23[1]; + fRec23[1] = fRec23[0]; + fRec22[2] = fRec22[1]; + fRec22[1] = fRec22[0]; + fVec1[1] = fVec1[0]; + fRec21[1] = fRec21[0]; + fRec20[2] = fRec20[1]; + fRec20[1] = fRec20[0]; + fRec19[2] = fRec19[1]; + fRec19[1] = fRec19[0]; + fVec2[1] = fVec2[0]; + fRec18[1] = fRec18[0]; + fRec17[2] = fRec17[1]; + fRec17[1] = fRec17[0]; + fRec16[2] = fRec16[1]; + fRec16[1] = fRec16[0]; + fVec3[1] = fVec3[0]; + fRec15[1] = fRec15[0]; + fRec14[2] = fRec14[1]; fRec14[1] = fRec14[0]; fRec13[2] = fRec13[1]; fRec13[1] = fRec13[0]; - fRec12[2] = fRec12[1]; + fVec4[1] = fVec4[0]; fRec12[1] = fRec12[0]; - fVec1[1] = fVec1[0]; + fRec11[2] = fRec11[1]; fRec11[1] = fRec11[0]; fRec10[2] = fRec10[1]; fRec10[1] = fRec10[0]; - fRec9[2] = fRec9[1]; + fVec5[1] = fVec5[0]; fRec9[1] = fRec9[0]; - fVec2[1] = fVec2[0]; + fRec8[2] = fRec8[1]; fRec8[1] = fRec8[0]; fRec7[2] = fRec7[1]; fRec7[1] = fRec7[0]; - fRec6[2] = fRec6[1]; + fVec6[1] = fVec6[0]; fRec6[1] = fRec6[0]; fRec5[2] = fRec5[1]; fRec5[1] = fRec5[0]; fRec4[2] = fRec4[1]; fRec4[1] = fRec4[0]; - fRec3[2] = fRec3[1]; + fVec7[1] = fVec7[0]; fRec3[1] = fRec3[0]; fRec2[2] = fRec2[1]; fRec2[1] = fRec2[0]; @@ -1671,49 +1657,31 @@ class flt_eq10 : public dsp { fRec1[1] = fRec1[0]; fRec0[2] = fRec0[1]; fRec0[1] = fRec0[0]; - fRec15[1] = fRec15[0]; fRec25[1] = fRec25[0]; - fRec24[2] = fRec24[1]; - fRec24[1] = fRec24[0]; - fRec23[2] = fRec23[1]; - fRec23[1] = fRec23[0]; - fRec22[2] = fRec22[1]; - fRec22[1] = fRec22[0]; - fRec21[2] = fRec21[1]; - fRec21[1] = fRec21[0]; - fRec20[2] = fRec20[1]; - fRec20[1] = fRec20[0]; - fRec19[2] = fRec19[1]; - fRec19[1] = fRec19[0]; - fRec18[2] = fRec18[1]; - fRec18[1] = fRec18[0]; - fRec17[2] = fRec17[1]; - fRec17[1] = fRec17[0]; - fRec16[2] = fRec16[1]; - fRec16[1] = fRec16[0]; + fRec30[1] = fRec30[0]; + fRec29[2] = fRec29[1]; + fRec29[1] = fRec29[0]; + fRec28[2] = fRec28[1]; + fRec28[1] = fRec28[0]; + fRec27[2] = fRec27[1]; + fRec27[1] = fRec27[0]; + fRec26[2] = fRec26[1]; fRec26[1] = fRec26[0]; + fRec31[1] = fRec31[0]; + fRec38[1] = fRec38[0]; + fRec37[2] = fRec37[1]; fRec37[1] = fRec37[0]; fRec36[2] = fRec36[1]; fRec36[1] = fRec36[0]; fRec35[2] = fRec35[1]; fRec35[1] = fRec35[0]; - fVec3[1] = fVec3[0]; + fRec34[2] = fRec34[1]; fRec34[1] = fRec34[0]; fRec33[2] = fRec33[1]; fRec33[1] = fRec33[0]; fRec32[2] = fRec32[1]; fRec32[1] = fRec32[0]; - fRec31[2] = fRec31[1]; - fRec31[1] = fRec31[0]; - fRec30[2] = fRec30[1]; - fRec30[1] = fRec30[0]; - fRec29[2] = fRec29[1]; - fRec29[1] = fRec29[0]; - fRec28[2] = fRec28[1]; - fRec28[1] = fRec28[0]; - fRec27[2] = fRec27[1]; - fRec27[1] = fRec27[0]; - fRec38[1] = fRec38[0]; + fRec39[1] = fRec39[0]; fRec49[1] = fRec49[0]; fRec48[2] = fRec48[1]; fRec48[1] = fRec48[0]; @@ -1733,15 +1701,15 @@ class flt_eq10 : public dsp { fRec41[1] = fRec41[0]; fRec40[2] = fRec40[1]; fRec40[1] = fRec40[0]; - fRec39[2] = fRec39[1]; - fRec39[1] = fRec39[0]; fRec50[1] = fRec50[0]; + fRec61[1] = fRec61[0]; + fRec60[2] = fRec60[1]; fRec60[1] = fRec60[0]; fRec59[2] = fRec59[1]; fRec59[1] = fRec59[0]; fRec58[2] = fRec58[1]; fRec58[1] = fRec58[0]; - fVec4[1] = fVec4[0]; + fRec57[2] = fRec57[1]; fRec57[1] = fRec57[0]; fRec56[2] = fRec56[1]; fRec56[1] = fRec56[0]; @@ -1755,13 +1723,15 @@ class flt_eq10 : public dsp { fRec52[1] = fRec52[0]; fRec51[2] = fRec51[1]; fRec51[1] = fRec51[0]; - fRec61[1] = fRec61[0]; + fRec62[1] = fRec62[0]; + fRec71[1] = fRec71[0]; + fRec70[2] = fRec70[1]; fRec70[1] = fRec70[0]; fRec69[2] = fRec69[1]; fRec69[1] = fRec69[0]; fRec68[2] = fRec68[1]; fRec68[1] = fRec68[0]; - fVec5[1] = fVec5[0]; + fRec67[2] = fRec67[1]; fRec67[1] = fRec67[0]; fRec66[2] = fRec66[1]; fRec66[1] = fRec66[0]; @@ -1771,15 +1741,15 @@ class flt_eq10 : public dsp { fRec64[1] = fRec64[0]; fRec63[2] = fRec63[1]; fRec63[1] = fRec63[0]; - fRec62[2] = fRec62[1]; - fRec62[1] = fRec62[0]; - fRec71[1] = fRec71[0]; + fRec72[1] = fRec72[0]; + fRec80[1] = fRec80[0]; + fRec79[2] = fRec79[1]; fRec79[1] = fRec79[0]; fRec78[2] = fRec78[1]; fRec78[1] = fRec78[0]; fRec77[2] = fRec77[1]; fRec77[1] = fRec77[0]; - fVec6[1] = fVec6[0]; + fRec76[2] = fRec76[1]; fRec76[1] = fRec76[0]; fRec75[2] = fRec75[1]; fRec75[1] = fRec75[0]; @@ -1787,22 +1757,18 @@ class flt_eq10 : public dsp { fRec74[1] = fRec74[0]; fRec73[2] = fRec73[1]; fRec73[1] = fRec73[0]; - fRec72[2] = fRec72[1]; - fRec72[1] = fRec72[0]; - fRec80[1] = fRec80[0]; + fRec81[1] = fRec81[0]; fRec87[1] = fRec87[0]; fRec86[2] = fRec86[1]; fRec86[1] = fRec86[0]; fRec85[2] = fRec85[1]; fRec85[1] = fRec85[0]; - fVec7[1] = fVec7[0]; + fRec84[2] = fRec84[1]; fRec84[1] = fRec84[0]; fRec83[2] = fRec83[1]; fRec83[1] = fRec83[0]; fRec82[2] = fRec82[1]; fRec82[1] = fRec82[0]; - fRec81[2] = fRec81[1]; - fRec81[1] = fRec81[0]; fRec88[1] = fRec88[0]; fRec94[1] = fRec94[0]; fRec93[2] = fRec93[1]; @@ -1822,9 +1788,7 @@ class flt_eq10 : public dsp { fRec96[2] = fRec96[1]; fRec96[1] = fRec96[0]; fRec99[1] = fRec99[0]; - } - } }; diff --git a/ceammc/ext/src/flt/flt_eq_peak.h b/ceammc/ext/src/flt/flt_eq_peak.h index 2ed036d3d6..ca961c5aa6 100644 --- a/ceammc/ext/src/flt/flt_eq_peak.h +++ b/ceammc/ext/src/flt/flt_eq_peak.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "flt.eq_peak" -Code generated with Faust 2.15.10 (https://faust.grame.fr) -Compilation options: cpp, -scal -ftz 0 +Code generated with Faust 2.22.1 (https://faust.grame.fr) +Compilation options: -lang cpp -scal -ftz 0 ------------------------------------------------------------ */ #ifndef __flt_eq_peak_H__ @@ -14,6 +14,7 @@ Compilation options: cpp, -scal -ftz 0 #include #include +/************************** BEGIN dsp.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -96,23 +97,23 @@ class dsp { * - static class 'classInit': static tables initialization * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void init(int samplingRate) = 0; + virtual void init(int sample_rate) = 0; /** * Init instance state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceInit(int samplingRate) = 0; + virtual void instanceInit(int sample_rate) = 0; /** * Init instance constant state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceConstants(int samplingRate) = 0; + virtual void instanceConstants(int sample_rate) = 0; /* Init default control parameters values */ virtual void instanceResetUserInterface() = 0; @@ -149,8 +150,8 @@ class dsp { * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the number of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) * */ virtual void compute(double /*date_usec*/, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -169,16 +170,16 @@ class decorator_dsp : public dsp { public: - decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + decorator_dsp(dsp* dsp = nullptr):fDSP(dsp) {} virtual ~decorator_dsp() { delete fDSP; } virtual int getNumInputs() { return fDSP->getNumInputs(); } virtual int getNumOutputs() { return fDSP->getNumOutputs(); } virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } virtual int getSampleRate() { return fDSP->getSampleRate(); } - virtual void init(int samplingRate) { fDSP->init(samplingRate); } - virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } - virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void init(int sample_rate) { fDSP->init(sample_rate); } + virtual void instanceInit(int sample_rate) { fDSP->instanceInit(sample_rate); } + virtual void instanceConstants(int sample_rate) { fDSP->instanceConstants(sample_rate); } virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } @@ -233,6 +234,8 @@ class dsp_factory { #endif #endif +/************************** END dsp.h **************************/ +/************************** BEGIN UI.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -272,45 +275,54 @@ class dsp_factory { struct Soundfile; -class UI +template +class UIReal { - + public: - - UI() {} - - virtual ~UI() {} - + + UIReal() {} + virtual ~UIReal() {} + // -- widget's layouts - + virtual void openTabBox(const char* label) = 0; virtual void openHorizontalBox(const char* label) = 0; virtual void openVerticalBox(const char* label) = 0; virtual void closeBox() = 0; - + // -- active widgets - - virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - + + virtual void addButton(const char* label, REAL* zone) = 0; + virtual void addCheckButton(const char* label, REAL* zone) = 0; + virtual void addVerticalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addHorizontalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addNumEntry(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + // -- passive widgets - - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - + + virtual void addHorizontalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + virtual void addVerticalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + // -- soundfiles - + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; - + // -- metadata declarations + + virtual void declare(REAL* zone, const char* key, const char* val) {} +}; - virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +struct UI : public UIReal +{ + + UI() {} + virtual ~UI() {} }; #endif +/************************** END UI.h **************************/ +/************************** BEGIN meta.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -339,11 +351,14 @@ class UI struct Meta { - virtual void declare(const char* key, const char* value) = 0; virtual ~Meta() {}; + virtual void declare(const char* key, const char* value) = 0; + }; #endif +/************************** END meta.h **************************/ +/************************** BEGIN misc.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -366,7 +381,7 @@ struct Meta that work under terms of your choice, so long as this FAUST architecture section is not modified. ************************************************************************/ - + #ifndef __misc__ #define __misc__ @@ -374,6 +389,8 @@ struct Meta #include #include #include +#include +#include using std::max; @@ -395,27 +412,65 @@ static int int2pow2(int x) { int r = 0; while ((1<declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.0"); + m->declare("basics.lib/version", "0.1"); m->declare("ceammc_ui.lib/name", "CEAMMC faust default UI elements"); m->declare("ceammc_ui.lib/version", "0.1.1"); - m->declare("filename", "flt_eq_peak"); + m->declare("filename", "flt_eq_peak.dsp"); + m->declare("filters.lib/fir:author", "Julius O. Smith III"); + m->declare("filters.lib/fir:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/fir:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/iir:author", "Julius O. Smith III"); + m->declare("filters.lib/iir:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/iir:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/lowpass0_highpass1", "Copyright (C) 2003-2019 by Julius O. Smith III "); m->declare("filters.lib/name", "Faust Filters Library"); - m->declare("filters.lib/version", "0.0"); + m->declare("filters.lib/peak_eq:author", "Julius O. Smith III"); + m->declare("filters.lib/peak_eq:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/peak_eq:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/tf2:author", "Julius O. Smith III"); + m->declare("filters.lib/tf2:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/tf2:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/tf2s:author", "Julius O. Smith III"); + m->declare("filters.lib/tf2s:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/tf2s:license", "MIT-style STK-4.3 license"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); @@ -497,15 +567,13 @@ class flt_eq_peak : public dsp { virtual int getNumInputs() { return 1; - } virtual int getNumOutputs() { return 1; - } virtual int getInputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -514,14 +582,12 @@ class flt_eq_peak : public dsp { rate = -1; break; } - } return rate; - } virtual int getOutputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -530,58 +596,47 @@ class flt_eq_peak : public dsp { rate = -1; break; } - } return rate; - } - static void classInit(int samplingFreq) { - + static void classInit(int sample_rate) { } - virtual void instanceConstants(int samplingFreq) { - fSamplingFreq = samplingFreq; - fConst0 = std::min(192000.0f, std::max(1.0f, float(fSamplingFreq))); + virtual void instanceConstants(int sample_rate) { + fSampleRate = sample_rate; + fConst0 = std::min(192000.0f, std::max(1.0f, float(fSampleRate))); fConst1 = (3.14159274f / fConst0); fConst2 = (6.28318548f / fConst0); - } virtual void instanceResetUserInterface() { fVslider0 = FAUSTFLOAT(1000.0f); fVslider1 = FAUSTFLOAT(0.0f); fVslider2 = FAUSTFLOAT(100.0f); - } virtual void instanceClear() { for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { fRec1[l0] = 0.0f; - } for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { fRec2[l1] = 0.0f; - } for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { fRec3[l2] = 0.0f; - } for (int l3 = 0; (l3 < 3); l3 = (l3 + 1)) { fRec0[l3] = 0.0f; - } - } - virtual void init(int samplingFreq) { - classInit(samplingFreq); - instanceInit(samplingFreq); + virtual void init(int sample_rate) { + classInit(sample_rate); + instanceInit(sample_rate); } - - virtual void instanceInit(int samplingFreq) { - instanceConstants(samplingFreq); + virtual void instanceInit(int sample_rate) { + instanceConstants(sample_rate); instanceResetUserInterface(); instanceClear(); } @@ -591,8 +646,7 @@ class flt_eq_peak : public dsp { } virtual int getSampleRate() { - return fSamplingFreq; - + return fSampleRate; } virtual void buildUserInterface(UI* ui_interface) { @@ -604,7 +658,6 @@ class flt_eq_peak : public dsp { ui_interface->declare(&fVslider1, "unit", "db"); ui_interface->addVerticalSlider("gain", &fVslider1, 0.0f, -15.0f, 15.0f, 0.100000001f); ui_interface->closeBox(); - } virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { @@ -623,20 +676,18 @@ class flt_eq_peak : public dsp { float fTemp3 = std::sin((fConst2 * fRec1[0])); float fTemp4 = (fConst1 * ((fRec3[0] * std::pow(10.0f, (0.0500000007f * std::fabs(fRec2[0])))) / fTemp3)); float fTemp5 = (fConst1 * (fRec3[0] / fTemp3)); - float fTemp6 = (iTemp2?fTemp5:fTemp4); + float fTemp6 = (iTemp2 ? fTemp5 : fTemp4); float fTemp7 = (2.0f * (fRec0[1] * (1.0f - (1.0f / flt_eq_peak_faustpower2_f(fTemp0))))); float fTemp8 = (((fTemp1 + fTemp6) / fTemp0) + 1.0f); fRec0[0] = (float(input0[i]) - (((fRec0[2] * (((fTemp1 - fTemp6) / fTemp0) + 1.0f)) + fTemp7) / fTemp8)); - float fTemp9 = (iTemp2?fTemp4:fTemp5); + float fTemp9 = (iTemp2 ? fTemp4 : fTemp5); output0[i] = FAUSTFLOAT((((fTemp7 + (fRec0[0] * (((fTemp1 + fTemp9) / fTemp0) + 1.0f))) + (fRec0[2] * (((fTemp1 - fTemp9) / fTemp0) + 1.0f))) / fTemp8)); fRec1[1] = fRec1[0]; fRec2[1] = fRec2[0]; fRec3[1] = fRec3[0]; fRec0[2] = fRec0[1]; fRec0[1] = fRec0[0]; - } - } }; diff --git a/ceammc/ext/src/flt/flt_eq_peak_cq.h b/ceammc/ext/src/flt/flt_eq_peak_cq.h index 7acd2f55ad..43b12519bc 100644 --- a/ceammc/ext/src/flt/flt_eq_peak_cq.h +++ b/ceammc/ext/src/flt/flt_eq_peak_cq.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "flt.eq_peak_cq" -Code generated with Faust 2.15.0 (https://faust.grame.fr) -Compilation options: cpp, -scal -ftz 0 +Code generated with Faust 2.22.1 (https://faust.grame.fr) +Compilation options: -lang cpp -scal -ftz 0 ------------------------------------------------------------ */ #ifndef __flt_eq_peak_cq_H__ @@ -14,6 +14,7 @@ Compilation options: cpp, -scal -ftz 0 #include #include +/************************** BEGIN dsp.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -96,23 +97,23 @@ class dsp { * - static class 'classInit': static tables initialization * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void init(int samplingRate) = 0; + virtual void init(int sample_rate) = 0; /** * Init instance state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceInit(int samplingRate) = 0; + virtual void instanceInit(int sample_rate) = 0; /** * Init instance constant state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceConstants(int samplingRate) = 0; + virtual void instanceConstants(int sample_rate) = 0; /* Init default control parameters values */ virtual void instanceResetUserInterface() = 0; @@ -149,8 +150,8 @@ class dsp { * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the number of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) * */ virtual void compute(double /*date_usec*/, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -169,16 +170,16 @@ class decorator_dsp : public dsp { public: - decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + decorator_dsp(dsp* dsp = nullptr):fDSP(dsp) {} virtual ~decorator_dsp() { delete fDSP; } virtual int getNumInputs() { return fDSP->getNumInputs(); } virtual int getNumOutputs() { return fDSP->getNumOutputs(); } virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } virtual int getSampleRate() { return fDSP->getSampleRate(); } - virtual void init(int samplingRate) { fDSP->init(samplingRate); } - virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } - virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void init(int sample_rate) { fDSP->init(sample_rate); } + virtual void instanceInit(int sample_rate) { fDSP->instanceInit(sample_rate); } + virtual void instanceConstants(int sample_rate) { fDSP->instanceConstants(sample_rate); } virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } @@ -233,6 +234,8 @@ class dsp_factory { #endif #endif +/************************** END dsp.h **************************/ +/************************** BEGIN UI.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -272,45 +275,54 @@ class dsp_factory { struct Soundfile; -class UI +template +class UIReal { - + public: - - UI() {} - - virtual ~UI() {} - + + UIReal() {} + virtual ~UIReal() {} + // -- widget's layouts - + virtual void openTabBox(const char* label) = 0; virtual void openHorizontalBox(const char* label) = 0; virtual void openVerticalBox(const char* label) = 0; virtual void closeBox() = 0; - + // -- active widgets - - virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - + + virtual void addButton(const char* label, REAL* zone) = 0; + virtual void addCheckButton(const char* label, REAL* zone) = 0; + virtual void addVerticalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addHorizontalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addNumEntry(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + // -- passive widgets - - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - + + virtual void addHorizontalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + virtual void addVerticalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + // -- soundfiles - + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; - + // -- metadata declarations + + virtual void declare(REAL* zone, const char* key, const char* val) {} +}; - virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +struct UI : public UIReal +{ + + UI() {} + virtual ~UI() {} }; #endif +/************************** END UI.h **************************/ +/************************** BEGIN meta.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -339,11 +351,14 @@ class UI struct Meta { - virtual void declare(const char* key, const char* value) = 0; virtual ~Meta() {}; + virtual void declare(const char* key, const char* value) = 0; + }; #endif +/************************** END meta.h **************************/ +/************************** BEGIN misc.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -366,7 +381,7 @@ struct Meta that work under terms of your choice, so long as this FAUST architecture section is not modified. ************************************************************************/ - + #ifndef __misc__ #define __misc__ @@ -374,6 +389,8 @@ struct Meta #include #include #include +#include +#include using std::max; @@ -395,27 +412,65 @@ static int int2pow2(int x) { int r = 0; while ((1<declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.0"); + m->declare("basics.lib/version", "0.1"); m->declare("ceammc_ui.lib/name", "CEAMMC faust default UI elements"); m->declare("ceammc_ui.lib/version", "0.1.1"); - m->declare("filename", "flt_eq_peak_cq"); + m->declare("filename", "flt_eq_peak_cq.dsp"); + m->declare("filters.lib/fir:author", "Julius O. Smith III"); + m->declare("filters.lib/fir:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/fir:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/iir:author", "Julius O. Smith III"); + m->declare("filters.lib/iir:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/iir:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/lowpass0_highpass1", "Copyright (C) 2003-2019 by Julius O. Smith III "); m->declare("filters.lib/name", "Faust Filters Library"); - m->declare("filters.lib/version", "0.0"); + m->declare("filters.lib/peak_eq:author", "Julius O. Smith III"); + m->declare("filters.lib/peak_eq:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/peak_eq:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/peak_eq_cq:author", "Julius O. Smith III"); + m->declare("filters.lib/peak_eq_cq:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/peak_eq_cq:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/tf2:author", "Julius O. Smith III"); + m->declare("filters.lib/tf2:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/tf2:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/tf2s:author", "Julius O. Smith III"); + m->declare("filters.lib/tf2s:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/tf2s:license", "MIT-style STK-4.3 license"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); @@ -497,15 +570,13 @@ class flt_eq_peak_cq : public dsp { virtual int getNumInputs() { return 1; - } virtual int getNumOutputs() { return 1; - } virtual int getInputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -514,14 +585,12 @@ class flt_eq_peak_cq : public dsp { rate = -1; break; } - } return rate; - } virtual int getOutputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -530,57 +599,47 @@ class flt_eq_peak_cq : public dsp { rate = -1; break; } - } return rate; - } - static void classInit(int samplingFreq) { - + static void classInit(int sample_rate) { } - virtual void instanceConstants(int samplingFreq) { - fSamplingFreq = samplingFreq; - fConst0 = std::min(192000.0f, std::max(1.0f, float(fSamplingFreq))); + virtual void instanceConstants(int sample_rate) { + fSampleRate = sample_rate; + fConst0 = std::min(192000.0f, std::max(1.0f, float(fSampleRate))); fConst1 = (3.14159274f / fConst0); fConst2 = (6.28318548f / fConst0); - } virtual void instanceResetUserInterface() { fVslider0 = FAUSTFLOAT(1000.0f); fVslider1 = FAUSTFLOAT(0.0f); fVslider2 = FAUSTFLOAT(3.0f); - } virtual void instanceClear() { for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { fRec1[l0] = 0.0f; - } for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { fRec2[l1] = 0.0f; - } for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { fRec3[l2] = 0.0f; - } for (int l3 = 0; (l3 < 3); l3 = (l3 + 1)) { fRec0[l3] = 0.0f; - } - } - virtual void init(int samplingFreq) { - classInit(samplingFreq); - instanceInit(samplingFreq); + virtual void init(int sample_rate) { + classInit(sample_rate); + instanceInit(sample_rate); } - virtual void instanceInit(int samplingFreq) { - instanceConstants(samplingFreq); + virtual void instanceInit(int sample_rate) { + instanceConstants(sample_rate); instanceResetUserInterface(); instanceClear(); } @@ -588,9 +647,9 @@ class flt_eq_peak_cq : public dsp { virtual flt_eq_peak_cq* clone() { return new flt_eq_peak_cq(); } + virtual int getSampleRate() { - return fSamplingFreq; - + return fSampleRate; } virtual void buildUserInterface(UI* ui_interface) { @@ -601,7 +660,6 @@ class flt_eq_peak_cq : public dsp { ui_interface->addVerticalSlider("gain", &fVslider1, 0.0f, -15.0f, 15.0f, 0.100000001f); ui_interface->addVerticalSlider("q", &fVslider2, 3.0f, 0.100000001f, 100.0f, 0.100000001f); ui_interface->closeBox(); - } virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { @@ -620,23 +678,20 @@ class flt_eq_peak_cq : public dsp { float fTemp3 = (fRec3[0] * std::sin((fConst2 * fRec1[0]))); float fTemp4 = (fConst1 * ((fRec1[0] * std::pow(10.0f, (0.0500000007f * std::fabs(fRec2[0])))) / fTemp3)); float fTemp5 = (fConst1 * (fRec1[0] / fTemp3)); - float fTemp6 = (iTemp2?fTemp5:fTemp4); + float fTemp6 = (iTemp2 ? fTemp5 : fTemp4); float fTemp7 = (2.0f * (fRec0[1] * (1.0f - (1.0f / flt_eq_peak_cq_faustpower2_f(fTemp0))))); float fTemp8 = (((fTemp1 + fTemp6) / fTemp0) + 1.0f); fRec0[0] = (float(input0[i]) - (((fRec0[2] * (((fTemp1 - fTemp6) / fTemp0) + 1.0f)) + fTemp7) / fTemp8)); - float fTemp9 = (iTemp2?fTemp4:fTemp5); + float fTemp9 = (iTemp2 ? fTemp4 : fTemp5); output0[i] = FAUSTFLOAT((((fTemp7 + (fRec0[0] * (((fTemp1 + fTemp9) / fTemp0) + 1.0f))) + (fRec0[2] * (((fTemp1 - fTemp9) / fTemp0) + 1.0f))) / fTemp8)); fRec1[1] = fRec1[0]; fRec2[1] = fRec2[0]; fRec3[1] = fRec3[0]; fRec0[2] = fRec0[1]; fRec0[1] = fRec0[0]; - } - } - }; // clang-format on #endif diff --git a/ceammc/ext/src/flt/flt_highshelf.h b/ceammc/ext/src/flt/flt_highshelf.h index db76051079..f13e672682 100644 --- a/ceammc/ext/src/flt/flt_highshelf.h +++ b/ceammc/ext/src/flt/flt_highshelf.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "flt.highshelf" -Code generated with Faust 2.15.0 (https://faust.grame.fr) -Compilation options: cpp, -scal -ftz 0 +Code generated with Faust 2.22.1 (https://faust.grame.fr) +Compilation options: -lang cpp -scal -ftz 0 ------------------------------------------------------------ */ #ifndef __flt_highshelf_H__ @@ -14,6 +14,7 @@ Compilation options: cpp, -scal -ftz 0 #include #include +/************************** BEGIN dsp.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -96,23 +97,23 @@ class dsp { * - static class 'classInit': static tables initialization * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void init(int samplingRate) = 0; + virtual void init(int sample_rate) = 0; /** * Init instance state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceInit(int samplingRate) = 0; + virtual void instanceInit(int sample_rate) = 0; /** * Init instance constant state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceConstants(int samplingRate) = 0; + virtual void instanceConstants(int sample_rate) = 0; /* Init default control parameters values */ virtual void instanceResetUserInterface() = 0; @@ -149,8 +150,8 @@ class dsp { * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the number of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) * */ virtual void compute(double /*date_usec*/, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -169,16 +170,16 @@ class decorator_dsp : public dsp { public: - decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + decorator_dsp(dsp* dsp = nullptr):fDSP(dsp) {} virtual ~decorator_dsp() { delete fDSP; } virtual int getNumInputs() { return fDSP->getNumInputs(); } virtual int getNumOutputs() { return fDSP->getNumOutputs(); } virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } virtual int getSampleRate() { return fDSP->getSampleRate(); } - virtual void init(int samplingRate) { fDSP->init(samplingRate); } - virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } - virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void init(int sample_rate) { fDSP->init(sample_rate); } + virtual void instanceInit(int sample_rate) { fDSP->instanceInit(sample_rate); } + virtual void instanceConstants(int sample_rate) { fDSP->instanceConstants(sample_rate); } virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } @@ -233,6 +234,8 @@ class dsp_factory { #endif #endif +/************************** END dsp.h **************************/ +/************************** BEGIN UI.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -272,45 +275,54 @@ class dsp_factory { struct Soundfile; -class UI +template +class UIReal { - + public: - - UI() {} - - virtual ~UI() {} - + + UIReal() {} + virtual ~UIReal() {} + // -- widget's layouts - + virtual void openTabBox(const char* label) = 0; virtual void openHorizontalBox(const char* label) = 0; virtual void openVerticalBox(const char* label) = 0; virtual void closeBox() = 0; - + // -- active widgets - - virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - + + virtual void addButton(const char* label, REAL* zone) = 0; + virtual void addCheckButton(const char* label, REAL* zone) = 0; + virtual void addVerticalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addHorizontalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addNumEntry(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + // -- passive widgets - - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - + + virtual void addHorizontalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + virtual void addVerticalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + // -- soundfiles - + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; - + // -- metadata declarations + + virtual void declare(REAL* zone, const char* key, const char* val) {} +}; - virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +struct UI : public UIReal +{ + + UI() {} + virtual ~UI() {} }; #endif +/************************** END UI.h **************************/ +/************************** BEGIN meta.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -339,11 +351,14 @@ class UI struct Meta { - virtual void declare(const char* key, const char* value) = 0; virtual ~Meta() {}; + virtual void declare(const char* key, const char* value) = 0; + }; #endif +/************************** END meta.h **************************/ +/************************** BEGIN misc.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -366,7 +381,7 @@ struct Meta that work under terms of your choice, so long as this FAUST architecture section is not modified. ************************************************************************/ - + #ifndef __misc__ #define __misc__ @@ -374,6 +389,8 @@ struct Meta #include #include #include +#include +#include using std::max; @@ -395,27 +412,65 @@ static int int2pow2(int x) { int r = 0; while ((1<declare("ceammc_ui.lib/name", "CEAMMC faust default UI elements"); m->declare("ceammc_ui.lib/version", "0.1.1"); - m->declare("filename", "flt_highshelf"); + m->declare("filename", "flt_highshelf.dsp"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); @@ -490,15 +546,13 @@ class flt_highshelf : public dsp { virtual int getNumInputs() { return 1; - } virtual int getNumOutputs() { return 1; - } virtual int getInputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -507,14 +561,12 @@ class flt_highshelf : public dsp { rate = -1; break; } - } return rate; - } virtual int getOutputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -523,50 +575,41 @@ class flt_highshelf : public dsp { rate = -1; break; } - } return rate; - } - static void classInit(int samplingFreq) { - + static void classInit(int sample_rate) { } - virtual void instanceConstants(int samplingFreq) { - fSamplingFreq = samplingFreq; - fConst0 = (6.28318548f / std::min(192000.0f, std::max(1.0f, float(fSamplingFreq)))); - + virtual void instanceConstants(int sample_rate) { + fSampleRate = sample_rate; + fConst0 = (6.28318548f / std::min(192000.0f, std::max(1.0f, float(fSampleRate)))); } virtual void instanceResetUserInterface() { fVslider0 = FAUSTFLOAT(0.0f); fVslider1 = FAUSTFLOAT(10000.0f); - } virtual void instanceClear() { for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { fRec1[l0] = 0.0f; - } for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { fRec2[l1] = 0.0f; - } for (int l2 = 0; (l2 < 3); l2 = (l2 + 1)) { fRec0[l2] = 0.0f; - } - } - virtual void init(int samplingFreq) { - classInit(samplingFreq); - instanceInit(samplingFreq); + virtual void init(int sample_rate) { + classInit(sample_rate); + instanceInit(sample_rate); } - virtual void instanceInit(int samplingFreq) { - instanceConstants(samplingFreq); + virtual void instanceInit(int sample_rate) { + instanceConstants(sample_rate); instanceResetUserInterface(); instanceClear(); } @@ -574,9 +617,9 @@ class flt_highshelf : public dsp { virtual flt_highshelf* clone() { return new flt_highshelf(); } + virtual int getSampleRate() { - return fSamplingFreq; - + return fSampleRate; } virtual void buildUserInterface(UI* ui_interface) { @@ -586,7 +629,6 @@ class flt_highshelf : public dsp { ui_interface->declare(&fVslider0, "unit", "db"); ui_interface->addVerticalSlider("gain", &fVslider0, 0.0f, -15.0f, 15.0f, 0.100000001f); ui_interface->closeBox(); - } virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { @@ -611,12 +653,9 @@ class flt_highshelf : public dsp { fRec2[1] = fRec2[0]; fRec0[2] = fRec0[1]; fRec0[1] = fRec0[0]; - } - } - }; // clang-format on #endif diff --git a/ceammc/ext/src/flt/flt_hpf12.h b/ceammc/ext/src/flt/flt_hpf12.h index 5402cb1e78..a1bf225f92 100644 --- a/ceammc/ext/src/flt/flt_hpf12.h +++ b/ceammc/ext/src/flt/flt_hpf12.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "flt.hpf12" -Code generated with Faust 2.15.0 (https://faust.grame.fr) -Compilation options: cpp, -scal -ftz 0 +Code generated with Faust 2.22.1 (https://faust.grame.fr) +Compilation options: -lang cpp -scal -ftz 0 ------------------------------------------------------------ */ #ifndef __flt_hpf12_H__ @@ -14,6 +14,7 @@ Compilation options: cpp, -scal -ftz 0 #include #include +/************************** BEGIN dsp.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -96,23 +97,23 @@ class dsp { * - static class 'classInit': static tables initialization * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void init(int samplingRate) = 0; + virtual void init(int sample_rate) = 0; /** * Init instance state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceInit(int samplingRate) = 0; + virtual void instanceInit(int sample_rate) = 0; /** * Init instance constant state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceConstants(int samplingRate) = 0; + virtual void instanceConstants(int sample_rate) = 0; /* Init default control parameters values */ virtual void instanceResetUserInterface() = 0; @@ -149,8 +150,8 @@ class dsp { * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the number of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) * */ virtual void compute(double /*date_usec*/, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -169,16 +170,16 @@ class decorator_dsp : public dsp { public: - decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + decorator_dsp(dsp* dsp = nullptr):fDSP(dsp) {} virtual ~decorator_dsp() { delete fDSP; } virtual int getNumInputs() { return fDSP->getNumInputs(); } virtual int getNumOutputs() { return fDSP->getNumOutputs(); } virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } virtual int getSampleRate() { return fDSP->getSampleRate(); } - virtual void init(int samplingRate) { fDSP->init(samplingRate); } - virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } - virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void init(int sample_rate) { fDSP->init(sample_rate); } + virtual void instanceInit(int sample_rate) { fDSP->instanceInit(sample_rate); } + virtual void instanceConstants(int sample_rate) { fDSP->instanceConstants(sample_rate); } virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } @@ -233,6 +234,8 @@ class dsp_factory { #endif #endif +/************************** END dsp.h **************************/ +/************************** BEGIN UI.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -272,45 +275,54 @@ class dsp_factory { struct Soundfile; -class UI +template +class UIReal { - + public: - - UI() {} - - virtual ~UI() {} - + + UIReal() {} + virtual ~UIReal() {} + // -- widget's layouts - + virtual void openTabBox(const char* label) = 0; virtual void openHorizontalBox(const char* label) = 0; virtual void openVerticalBox(const char* label) = 0; virtual void closeBox() = 0; - + // -- active widgets - - virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - + + virtual void addButton(const char* label, REAL* zone) = 0; + virtual void addCheckButton(const char* label, REAL* zone) = 0; + virtual void addVerticalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addHorizontalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addNumEntry(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + // -- passive widgets - - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - + + virtual void addHorizontalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + virtual void addVerticalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + // -- soundfiles - + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; - + // -- metadata declarations + + virtual void declare(REAL* zone, const char* key, const char* val) {} +}; - virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +struct UI : public UIReal +{ + + UI() {} + virtual ~UI() {} }; #endif +/************************** END UI.h **************************/ +/************************** BEGIN meta.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -339,11 +351,14 @@ class UI struct Meta { - virtual void declare(const char* key, const char* value) = 0; virtual ~Meta() {}; + virtual void declare(const char* key, const char* value) = 0; + }; #endif +/************************** END meta.h **************************/ +/************************** BEGIN misc.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -366,7 +381,7 @@ struct Meta that work under terms of your choice, so long as this FAUST architecture section is not modified. ************************************************************************/ - + #ifndef __misc__ #define __misc__ @@ -374,6 +389,8 @@ struct Meta #include #include #include +#include +#include using std::max; @@ -395,27 +412,65 @@ static int int2pow2(int x) { int r = 0; while ((1<declare("ceammc_ui.lib/name", "CEAMMC faust default UI elements"); m->declare("ceammc_ui.lib/version", "0.1.1"); - m->declare("filename", "flt_hpf12"); + m->declare("filename", "flt_hpf12.dsp"); + m->declare("filters.lib/fir:author", "Julius O. Smith III"); + m->declare("filters.lib/fir:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/fir:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/highpass:author", "Julius O. Smith III"); + m->declare("filters.lib/highpass:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/iir:author", "Julius O. Smith III"); + m->declare("filters.lib/iir:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/iir:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/lowpass0_highpass1", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/lowpass0_highpass1:author", "Julius O. Smith III"); m->declare("filters.lib/name", "Faust Filters Library"); - m->declare("filters.lib/version", "0.0"); + m->declare("filters.lib/tf2:author", "Julius O. Smith III"); + m->declare("filters.lib/tf2:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/tf2:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/tf2s:author", "Julius O. Smith III"); + m->declare("filters.lib/tf2s:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/tf2s:license", "MIT-style STK-4.3 license"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); @@ -489,15 +559,13 @@ class flt_hpf12 : public dsp { virtual int getNumInputs() { return 1; - } virtual int getNumOutputs() { return 1; - } virtual int getInputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -506,14 +574,12 @@ class flt_hpf12 : public dsp { rate = -1; break; } - } return rate; - } virtual int getOutputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -522,45 +588,37 @@ class flt_hpf12 : public dsp { rate = -1; break; } - } return rate; - } - static void classInit(int samplingFreq) { - + static void classInit(int sample_rate) { } - virtual void instanceConstants(int samplingFreq) { - fSamplingFreq = samplingFreq; - fConst0 = (3.14159274f / std::min(192000.0f, std::max(1.0f, float(fSamplingFreq)))); - + virtual void instanceConstants(int sample_rate) { + fSampleRate = sample_rate; + fConst0 = (3.14159274f / std::min(192000.0f, std::max(1.0f, float(fSampleRate)))); } virtual void instanceResetUserInterface() { fVslider0 = FAUSTFLOAT(10000.0f); - } virtual void instanceClear() { for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { fRec1[l0] = 0.0f; - } for (int l1 = 0; (l1 < 3); l1 = (l1 + 1)) { fRec0[l1] = 0.0f; - } - } - virtual void init(int samplingFreq) { - classInit(samplingFreq); - instanceInit(samplingFreq); + virtual void init(int sample_rate) { + classInit(sample_rate); + instanceInit(sample_rate); } - virtual void instanceInit(int samplingFreq) { - instanceConstants(samplingFreq); + virtual void instanceInit(int sample_rate) { + instanceConstants(sample_rate); instanceResetUserInterface(); instanceClear(); } @@ -568,9 +626,9 @@ class flt_hpf12 : public dsp { virtual flt_hpf12* clone() { return new flt_hpf12(); } + virtual int getSampleRate() { - return fSamplingFreq; - + return fSampleRate; } virtual void buildUserInterface(UI* ui_interface) { @@ -578,7 +636,6 @@ class flt_hpf12 : public dsp { ui_interface->declare(&fVslider0, "unit", "Hz"); ui_interface->addVerticalSlider("freq", &fVslider0, 10000.0f, 20.0f, 20000.0f, 0.100000001f); ui_interface->closeBox(); - } virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { @@ -596,12 +653,9 @@ class flt_hpf12 : public dsp { fRec1[1] = fRec1[0]; fRec0[2] = fRec0[1]; fRec0[1] = fRec0[0]; - } - } - }; // clang-format on #endif diff --git a/ceammc/ext/src/flt/flt_hpf24.h b/ceammc/ext/src/flt/flt_hpf24.h index a063942b20..887d6e0085 100644 --- a/ceammc/ext/src/flt/flt_hpf24.h +++ b/ceammc/ext/src/flt/flt_hpf24.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "flt.hpf24" -Code generated with Faust 2.15.0 (https://faust.grame.fr) -Compilation options: cpp, -scal -ftz 0 +Code generated with Faust 2.22.1 (https://faust.grame.fr) +Compilation options: -lang cpp -scal -ftz 0 ------------------------------------------------------------ */ #ifndef __flt_hpf24_H__ @@ -14,6 +14,7 @@ Compilation options: cpp, -scal -ftz 0 #include #include +/************************** BEGIN dsp.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -96,23 +97,23 @@ class dsp { * - static class 'classInit': static tables initialization * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void init(int samplingRate) = 0; + virtual void init(int sample_rate) = 0; /** * Init instance state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceInit(int samplingRate) = 0; + virtual void instanceInit(int sample_rate) = 0; /** * Init instance constant state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceConstants(int samplingRate) = 0; + virtual void instanceConstants(int sample_rate) = 0; /* Init default control parameters values */ virtual void instanceResetUserInterface() = 0; @@ -149,8 +150,8 @@ class dsp { * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the number of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) * */ virtual void compute(double /*date_usec*/, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -169,16 +170,16 @@ class decorator_dsp : public dsp { public: - decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + decorator_dsp(dsp* dsp = nullptr):fDSP(dsp) {} virtual ~decorator_dsp() { delete fDSP; } virtual int getNumInputs() { return fDSP->getNumInputs(); } virtual int getNumOutputs() { return fDSP->getNumOutputs(); } virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } virtual int getSampleRate() { return fDSP->getSampleRate(); } - virtual void init(int samplingRate) { fDSP->init(samplingRate); } - virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } - virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void init(int sample_rate) { fDSP->init(sample_rate); } + virtual void instanceInit(int sample_rate) { fDSP->instanceInit(sample_rate); } + virtual void instanceConstants(int sample_rate) { fDSP->instanceConstants(sample_rate); } virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } @@ -233,6 +234,8 @@ class dsp_factory { #endif #endif +/************************** END dsp.h **************************/ +/************************** BEGIN UI.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -272,45 +275,54 @@ class dsp_factory { struct Soundfile; -class UI +template +class UIReal { - + public: - - UI() {} - - virtual ~UI() {} - + + UIReal() {} + virtual ~UIReal() {} + // -- widget's layouts - + virtual void openTabBox(const char* label) = 0; virtual void openHorizontalBox(const char* label) = 0; virtual void openVerticalBox(const char* label) = 0; virtual void closeBox() = 0; - + // -- active widgets - - virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - + + virtual void addButton(const char* label, REAL* zone) = 0; + virtual void addCheckButton(const char* label, REAL* zone) = 0; + virtual void addVerticalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addHorizontalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addNumEntry(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + // -- passive widgets - - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - + + virtual void addHorizontalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + virtual void addVerticalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + // -- soundfiles - + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; - + // -- metadata declarations + + virtual void declare(REAL* zone, const char* key, const char* val) {} +}; - virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +struct UI : public UIReal +{ + + UI() {} + virtual ~UI() {} }; #endif +/************************** END UI.h **************************/ +/************************** BEGIN meta.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -339,11 +351,14 @@ class UI struct Meta { - virtual void declare(const char* key, const char* value) = 0; virtual ~Meta() {}; + virtual void declare(const char* key, const char* value) = 0; + }; #endif +/************************** END meta.h **************************/ +/************************** BEGIN misc.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -366,7 +381,7 @@ struct Meta that work under terms of your choice, so long as this FAUST architecture section is not modified. ************************************************************************/ - + #ifndef __misc__ #define __misc__ @@ -374,6 +389,8 @@ struct Meta #include #include #include +#include +#include using std::max; @@ -395,27 +412,65 @@ static int int2pow2(int x) { int r = 0; while ((1<declare("ceammc_ui.lib/name", "CEAMMC faust default UI elements"); m->declare("ceammc_ui.lib/version", "0.1.1"); - m->declare("filename", "flt_hpf24"); + m->declare("filename", "flt_hpf24.dsp"); + m->declare("filters.lib/fir:author", "Julius O. Smith III"); + m->declare("filters.lib/fir:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/fir:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/highpass:author", "Julius O. Smith III"); + m->declare("filters.lib/highpass:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/iir:author", "Julius O. Smith III"); + m->declare("filters.lib/iir:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/iir:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/lowpass0_highpass1", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/lowpass0_highpass1:author", "Julius O. Smith III"); m->declare("filters.lib/name", "Faust Filters Library"); - m->declare("filters.lib/version", "0.0"); + m->declare("filters.lib/tf2:author", "Julius O. Smith III"); + m->declare("filters.lib/tf2:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/tf2:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/tf2s:author", "Julius O. Smith III"); + m->declare("filters.lib/tf2s:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/tf2s:license", "MIT-style STK-4.3 license"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); @@ -490,15 +560,13 @@ class flt_hpf24 : public dsp { virtual int getNumInputs() { return 1; - } virtual int getNumOutputs() { return 1; - } virtual int getInputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -507,14 +575,12 @@ class flt_hpf24 : public dsp { rate = -1; break; } - } return rate; - } virtual int getOutputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -523,49 +589,40 @@ class flt_hpf24 : public dsp { rate = -1; break; } - } return rate; - } - static void classInit(int samplingFreq) { - + static void classInit(int sample_rate) { } - virtual void instanceConstants(int samplingFreq) { - fSamplingFreq = samplingFreq; - fConst0 = (3.14159274f / std::min(192000.0f, std::max(1.0f, float(fSamplingFreq)))); - + virtual void instanceConstants(int sample_rate) { + fSampleRate = sample_rate; + fConst0 = (3.14159274f / std::min(192000.0f, std::max(1.0f, float(fSampleRate)))); } virtual void instanceResetUserInterface() { fVslider0 = FAUSTFLOAT(10000.0f); - } virtual void instanceClear() { for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { fRec0[l0] = 0.0f; - } for (int l1 = 0; (l1 < 3); l1 = (l1 + 1)) { fRec2[l1] = 0.0f; - } for (int l2 = 0; (l2 < 3); l2 = (l2 + 1)) { fRec1[l2] = 0.0f; - } - } - virtual void init(int samplingFreq) { - classInit(samplingFreq); - instanceInit(samplingFreq); + virtual void init(int sample_rate) { + classInit(sample_rate); + instanceInit(sample_rate); } - virtual void instanceInit(int samplingFreq) { - instanceConstants(samplingFreq); + virtual void instanceInit(int sample_rate) { + instanceConstants(sample_rate); instanceResetUserInterface(); instanceClear(); } @@ -573,9 +630,9 @@ class flt_hpf24 : public dsp { virtual flt_hpf24* clone() { return new flt_hpf24(); } + virtual int getSampleRate() { - return fSamplingFreq; - + return fSampleRate; } virtual void buildUserInterface(UI* ui_interface) { @@ -583,7 +640,6 @@ class flt_hpf24 : public dsp { ui_interface->declare(&fVslider0, "unit", "Hz"); ui_interface->addVerticalSlider("freq", &fVslider0, 10000.0f, 20.0f, 20000.0f, 0.100000001f); ui_interface->closeBox(); - } virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { @@ -607,12 +663,9 @@ class flt_hpf24 : public dsp { fRec2[1] = fRec2[0]; fRec1[2] = fRec1[1]; fRec1[1] = fRec1[0]; - } - } - }; // clang-format on #endif diff --git a/ceammc/ext/src/flt/flt_lowshelf.h b/ceammc/ext/src/flt/flt_lowshelf.h index c340414a8d..65c90dbc4a 100644 --- a/ceammc/ext/src/flt/flt_lowshelf.h +++ b/ceammc/ext/src/flt/flt_lowshelf.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "flt.lowshelf" -Code generated with Faust 2.15.0 (https://faust.grame.fr) -Compilation options: cpp, -scal -ftz 0 +Code generated with Faust 2.22.1 (https://faust.grame.fr) +Compilation options: -lang cpp -scal -ftz 0 ------------------------------------------------------------ */ #ifndef __flt_lowshelf_H__ @@ -14,6 +14,7 @@ Compilation options: cpp, -scal -ftz 0 #include #include +/************************** BEGIN dsp.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -96,23 +97,23 @@ class dsp { * - static class 'classInit': static tables initialization * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void init(int samplingRate) = 0; + virtual void init(int sample_rate) = 0; /** * Init instance state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceInit(int samplingRate) = 0; + virtual void instanceInit(int sample_rate) = 0; /** * Init instance constant state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceConstants(int samplingRate) = 0; + virtual void instanceConstants(int sample_rate) = 0; /* Init default control parameters values */ virtual void instanceResetUserInterface() = 0; @@ -149,8 +150,8 @@ class dsp { * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the number of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) * */ virtual void compute(double /*date_usec*/, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -169,16 +170,16 @@ class decorator_dsp : public dsp { public: - decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + decorator_dsp(dsp* dsp = nullptr):fDSP(dsp) {} virtual ~decorator_dsp() { delete fDSP; } virtual int getNumInputs() { return fDSP->getNumInputs(); } virtual int getNumOutputs() { return fDSP->getNumOutputs(); } virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } virtual int getSampleRate() { return fDSP->getSampleRate(); } - virtual void init(int samplingRate) { fDSP->init(samplingRate); } - virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } - virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void init(int sample_rate) { fDSP->init(sample_rate); } + virtual void instanceInit(int sample_rate) { fDSP->instanceInit(sample_rate); } + virtual void instanceConstants(int sample_rate) { fDSP->instanceConstants(sample_rate); } virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } @@ -233,6 +234,8 @@ class dsp_factory { #endif #endif +/************************** END dsp.h **************************/ +/************************** BEGIN UI.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -272,45 +275,54 @@ class dsp_factory { struct Soundfile; -class UI +template +class UIReal { - + public: - - UI() {} - - virtual ~UI() {} - + + UIReal() {} + virtual ~UIReal() {} + // -- widget's layouts - + virtual void openTabBox(const char* label) = 0; virtual void openHorizontalBox(const char* label) = 0; virtual void openVerticalBox(const char* label) = 0; virtual void closeBox() = 0; - + // -- active widgets - - virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - + + virtual void addButton(const char* label, REAL* zone) = 0; + virtual void addCheckButton(const char* label, REAL* zone) = 0; + virtual void addVerticalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addHorizontalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addNumEntry(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + // -- passive widgets - - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - + + virtual void addHorizontalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + virtual void addVerticalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + // -- soundfiles - + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; - + // -- metadata declarations + + virtual void declare(REAL* zone, const char* key, const char* val) {} +}; - virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +struct UI : public UIReal +{ + + UI() {} + virtual ~UI() {} }; #endif +/************************** END UI.h **************************/ +/************************** BEGIN meta.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -339,11 +351,14 @@ class UI struct Meta { - virtual void declare(const char* key, const char* value) = 0; virtual ~Meta() {}; + virtual void declare(const char* key, const char* value) = 0; + }; #endif +/************************** END meta.h **************************/ +/************************** BEGIN misc.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -366,7 +381,7 @@ struct Meta that work under terms of your choice, so long as this FAUST architecture section is not modified. ************************************************************************/ - + #ifndef __misc__ #define __misc__ @@ -374,6 +389,8 @@ struct Meta #include #include #include +#include +#include using std::max; @@ -395,27 +412,65 @@ static int int2pow2(int x) { int r = 0; while ((1<declare("ceammc_ui.lib/name", "CEAMMC faust default UI elements"); m->declare("ceammc_ui.lib/version", "0.1.1"); - m->declare("filename", "flt_lowshelf"); + m->declare("filename", "flt_lowshelf.dsp"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); @@ -490,15 +546,13 @@ class flt_lowshelf : public dsp { virtual int getNumInputs() { return 1; - } virtual int getNumOutputs() { return 1; - } virtual int getInputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -507,14 +561,12 @@ class flt_lowshelf : public dsp { rate = -1; break; } - } return rate; - } virtual int getOutputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -523,50 +575,41 @@ class flt_lowshelf : public dsp { rate = -1; break; } - } return rate; - } - static void classInit(int samplingFreq) { - + static void classInit(int sample_rate) { } - virtual void instanceConstants(int samplingFreq) { - fSamplingFreq = samplingFreq; - fConst0 = (6.28318548f / std::min(192000.0f, std::max(1.0f, float(fSamplingFreq)))); - + virtual void instanceConstants(int sample_rate) { + fSampleRate = sample_rate; + fConst0 = (6.28318548f / std::min(192000.0f, std::max(1.0f, float(fSampleRate)))); } virtual void instanceResetUserInterface() { fVslider0 = FAUSTFLOAT(0.0f); fVslider1 = FAUSTFLOAT(1000.0f); - } virtual void instanceClear() { for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { fRec0[l0] = 0.0f; - } for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { fRec2[l1] = 0.0f; - } for (int l2 = 0; (l2 < 3); l2 = (l2 + 1)) { fRec1[l2] = 0.0f; - } - } - virtual void init(int samplingFreq) { - classInit(samplingFreq); - instanceInit(samplingFreq); + virtual void init(int sample_rate) { + classInit(sample_rate); + instanceInit(sample_rate); } - virtual void instanceInit(int samplingFreq) { - instanceConstants(samplingFreq); + virtual void instanceInit(int sample_rate) { + instanceConstants(sample_rate); instanceResetUserInterface(); instanceClear(); } @@ -574,9 +617,9 @@ class flt_lowshelf : public dsp { virtual flt_lowshelf* clone() { return new flt_lowshelf(); } + virtual int getSampleRate() { - return fSamplingFreq; - + return fSampleRate; } virtual void buildUserInterface(UI* ui_interface) { @@ -586,7 +629,6 @@ class flt_lowshelf : public dsp { ui_interface->declare(&fVslider0, "unit", "db"); ui_interface->addVerticalSlider("gain", &fVslider0, 0.0f, -15.0f, 15.0f, 0.100000001f); ui_interface->closeBox(); - } virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { @@ -611,12 +653,9 @@ class flt_lowshelf : public dsp { fRec2[1] = fRec2[0]; fRec1[2] = fRec1[1]; fRec1[1] = fRec1[0]; - } - } - }; // clang-format on #endif diff --git a/ceammc/ext/src/flt/flt_lpf12.h b/ceammc/ext/src/flt/flt_lpf12.h index 3dcafdd171..1f250d0dd5 100644 --- a/ceammc/ext/src/flt/flt_lpf12.h +++ b/ceammc/ext/src/flt/flt_lpf12.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "flt.lpf12" -Code generated with Faust 2.15.0 (https://faust.grame.fr) -Compilation options: cpp, -scal -ftz 0 +Code generated with Faust 2.22.1 (https://faust.grame.fr) +Compilation options: -lang cpp -scal -ftz 0 ------------------------------------------------------------ */ #ifndef __flt_lpf12_H__ @@ -14,6 +14,7 @@ Compilation options: cpp, -scal -ftz 0 #include #include +/************************** BEGIN dsp.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -96,23 +97,23 @@ class dsp { * - static class 'classInit': static tables initialization * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void init(int samplingRate) = 0; + virtual void init(int sample_rate) = 0; /** * Init instance state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceInit(int samplingRate) = 0; + virtual void instanceInit(int sample_rate) = 0; /** * Init instance constant state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceConstants(int samplingRate) = 0; + virtual void instanceConstants(int sample_rate) = 0; /* Init default control parameters values */ virtual void instanceResetUserInterface() = 0; @@ -149,8 +150,8 @@ class dsp { * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the number of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) * */ virtual void compute(double /*date_usec*/, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -169,16 +170,16 @@ class decorator_dsp : public dsp { public: - decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + decorator_dsp(dsp* dsp = nullptr):fDSP(dsp) {} virtual ~decorator_dsp() { delete fDSP; } virtual int getNumInputs() { return fDSP->getNumInputs(); } virtual int getNumOutputs() { return fDSP->getNumOutputs(); } virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } virtual int getSampleRate() { return fDSP->getSampleRate(); } - virtual void init(int samplingRate) { fDSP->init(samplingRate); } - virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } - virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void init(int sample_rate) { fDSP->init(sample_rate); } + virtual void instanceInit(int sample_rate) { fDSP->instanceInit(sample_rate); } + virtual void instanceConstants(int sample_rate) { fDSP->instanceConstants(sample_rate); } virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } @@ -233,6 +234,8 @@ class dsp_factory { #endif #endif +/************************** END dsp.h **************************/ +/************************** BEGIN UI.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -272,45 +275,54 @@ class dsp_factory { struct Soundfile; -class UI +template +class UIReal { - + public: - - UI() {} - - virtual ~UI() {} - + + UIReal() {} + virtual ~UIReal() {} + // -- widget's layouts - + virtual void openTabBox(const char* label) = 0; virtual void openHorizontalBox(const char* label) = 0; virtual void openVerticalBox(const char* label) = 0; virtual void closeBox() = 0; - + // -- active widgets - - virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - + + virtual void addButton(const char* label, REAL* zone) = 0; + virtual void addCheckButton(const char* label, REAL* zone) = 0; + virtual void addVerticalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addHorizontalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addNumEntry(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + // -- passive widgets - - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - + + virtual void addHorizontalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + virtual void addVerticalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + // -- soundfiles - + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; - + // -- metadata declarations + + virtual void declare(REAL* zone, const char* key, const char* val) {} +}; - virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +struct UI : public UIReal +{ + + UI() {} + virtual ~UI() {} }; #endif +/************************** END UI.h **************************/ +/************************** BEGIN meta.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -339,11 +351,14 @@ class UI struct Meta { - virtual void declare(const char* key, const char* value) = 0; virtual ~Meta() {}; + virtual void declare(const char* key, const char* value) = 0; + }; #endif +/************************** END meta.h **************************/ +/************************** BEGIN misc.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -366,7 +381,7 @@ struct Meta that work under terms of your choice, so long as this FAUST architecture section is not modified. ************************************************************************/ - + #ifndef __misc__ #define __misc__ @@ -374,6 +389,8 @@ struct Meta #include #include #include +#include +#include using std::max; @@ -395,27 +412,65 @@ static int int2pow2(int x) { int r = 0; while ((1<declare("ceammc_ui.lib/name", "CEAMMC faust default UI elements"); m->declare("ceammc_ui.lib/version", "0.1.1"); - m->declare("filename", "flt_lpf12"); + m->declare("filename", "flt_lpf12.dsp"); + m->declare("filters.lib/fir:author", "Julius O. Smith III"); + m->declare("filters.lib/fir:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/fir:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/iir:author", "Julius O. Smith III"); + m->declare("filters.lib/iir:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/iir:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/lowpass0_highpass1", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/lowpass0_highpass1:author", "Julius O. Smith III"); + m->declare("filters.lib/lowpass:author", "Julius O. Smith III"); + m->declare("filters.lib/lowpass:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/lowpass:license", "MIT-style STK-4.3 license"); m->declare("filters.lib/name", "Faust Filters Library"); - m->declare("filters.lib/version", "0.0"); + m->declare("filters.lib/tf2:author", "Julius O. Smith III"); + m->declare("filters.lib/tf2:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/tf2:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/tf2s:author", "Julius O. Smith III"); + m->declare("filters.lib/tf2s:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/tf2s:license", "MIT-style STK-4.3 license"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); @@ -489,15 +560,13 @@ class flt_lpf12 : public dsp { virtual int getNumInputs() { return 1; - } virtual int getNumOutputs() { return 1; - } virtual int getInputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -506,14 +575,12 @@ class flt_lpf12 : public dsp { rate = -1; break; } - } return rate; - } virtual int getOutputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -522,45 +589,37 @@ class flt_lpf12 : public dsp { rate = -1; break; } - } return rate; - } - static void classInit(int samplingFreq) { - + static void classInit(int sample_rate) { } - virtual void instanceConstants(int samplingFreq) { - fSamplingFreq = samplingFreq; - fConst0 = (3.14159274f / std::min(192000.0f, std::max(1.0f, float(fSamplingFreq)))); - + virtual void instanceConstants(int sample_rate) { + fSampleRate = sample_rate; + fConst0 = (3.14159274f / std::min(192000.0f, std::max(1.0f, float(fSampleRate)))); } virtual void instanceResetUserInterface() { fVslider0 = FAUSTFLOAT(1000.0f); - } virtual void instanceClear() { for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { fRec1[l0] = 0.0f; - } for (int l1 = 0; (l1 < 3); l1 = (l1 + 1)) { fRec0[l1] = 0.0f; - } - } - virtual void init(int samplingFreq) { - classInit(samplingFreq); - instanceInit(samplingFreq); + virtual void init(int sample_rate) { + classInit(sample_rate); + instanceInit(sample_rate); } - virtual void instanceInit(int samplingFreq) { - instanceConstants(samplingFreq); + virtual void instanceInit(int sample_rate) { + instanceConstants(sample_rate); instanceResetUserInterface(); instanceClear(); } @@ -568,9 +627,9 @@ class flt_lpf12 : public dsp { virtual flt_lpf12* clone() { return new flt_lpf12(); } + virtual int getSampleRate() { - return fSamplingFreq; - + return fSampleRate; } virtual void buildUserInterface(UI* ui_interface) { @@ -578,7 +637,6 @@ class flt_lpf12 : public dsp { ui_interface->declare(&fVslider0, "unit", "Hz"); ui_interface->addVerticalSlider("freq", &fVslider0, 1000.0f, 20.0f, 20000.0f, 0.100000001f); ui_interface->closeBox(); - } virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { @@ -595,12 +653,9 @@ class flt_lpf12 : public dsp { fRec1[1] = fRec1[0]; fRec0[2] = fRec0[1]; fRec0[1] = fRec0[0]; - } - } - }; // clang-format on #endif diff --git a/ceammc/ext/src/flt/flt_lpf24.h b/ceammc/ext/src/flt/flt_lpf24.h index 62e97f26ed..1e7320664a 100644 --- a/ceammc/ext/src/flt/flt_lpf24.h +++ b/ceammc/ext/src/flt/flt_lpf24.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "flt.lpf24" -Code generated with Faust 2.15.0 (https://faust.grame.fr) -Compilation options: cpp, -scal -ftz 0 +Code generated with Faust 2.22.1 (https://faust.grame.fr) +Compilation options: -lang cpp -scal -ftz 0 ------------------------------------------------------------ */ #ifndef __flt_lpf24_H__ @@ -14,6 +14,7 @@ Compilation options: cpp, -scal -ftz 0 #include #include +/************************** BEGIN dsp.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -96,23 +97,23 @@ class dsp { * - static class 'classInit': static tables initialization * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void init(int samplingRate) = 0; + virtual void init(int sample_rate) = 0; /** * Init instance state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceInit(int samplingRate) = 0; + virtual void instanceInit(int sample_rate) = 0; /** * Init instance constant state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceConstants(int samplingRate) = 0; + virtual void instanceConstants(int sample_rate) = 0; /* Init default control parameters values */ virtual void instanceResetUserInterface() = 0; @@ -149,8 +150,8 @@ class dsp { * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the number of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) * */ virtual void compute(double /*date_usec*/, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -169,16 +170,16 @@ class decorator_dsp : public dsp { public: - decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + decorator_dsp(dsp* dsp = nullptr):fDSP(dsp) {} virtual ~decorator_dsp() { delete fDSP; } virtual int getNumInputs() { return fDSP->getNumInputs(); } virtual int getNumOutputs() { return fDSP->getNumOutputs(); } virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } virtual int getSampleRate() { return fDSP->getSampleRate(); } - virtual void init(int samplingRate) { fDSP->init(samplingRate); } - virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } - virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void init(int sample_rate) { fDSP->init(sample_rate); } + virtual void instanceInit(int sample_rate) { fDSP->instanceInit(sample_rate); } + virtual void instanceConstants(int sample_rate) { fDSP->instanceConstants(sample_rate); } virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } @@ -233,6 +234,8 @@ class dsp_factory { #endif #endif +/************************** END dsp.h **************************/ +/************************** BEGIN UI.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -272,45 +275,54 @@ class dsp_factory { struct Soundfile; -class UI +template +class UIReal { - + public: - - UI() {} - - virtual ~UI() {} - + + UIReal() {} + virtual ~UIReal() {} + // -- widget's layouts - + virtual void openTabBox(const char* label) = 0; virtual void openHorizontalBox(const char* label) = 0; virtual void openVerticalBox(const char* label) = 0; virtual void closeBox() = 0; - + // -- active widgets - - virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - + + virtual void addButton(const char* label, REAL* zone) = 0; + virtual void addCheckButton(const char* label, REAL* zone) = 0; + virtual void addVerticalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addHorizontalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addNumEntry(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + // -- passive widgets - - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - + + virtual void addHorizontalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + virtual void addVerticalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + // -- soundfiles - + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; - + // -- metadata declarations + + virtual void declare(REAL* zone, const char* key, const char* val) {} +}; - virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +struct UI : public UIReal +{ + + UI() {} + virtual ~UI() {} }; #endif +/************************** END UI.h **************************/ +/************************** BEGIN meta.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -339,11 +351,14 @@ class UI struct Meta { - virtual void declare(const char* key, const char* value) = 0; virtual ~Meta() {}; + virtual void declare(const char* key, const char* value) = 0; + }; #endif +/************************** END meta.h **************************/ +/************************** BEGIN misc.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -366,7 +381,7 @@ struct Meta that work under terms of your choice, so long as this FAUST architecture section is not modified. ************************************************************************/ - + #ifndef __misc__ #define __misc__ @@ -374,6 +389,8 @@ struct Meta #include #include #include +#include +#include using std::max; @@ -395,27 +412,65 @@ static int int2pow2(int x) { int r = 0; while ((1<declare("ceammc_ui.lib/name", "CEAMMC faust default UI elements"); m->declare("ceammc_ui.lib/version", "0.1.1"); - m->declare("filename", "flt_lpf24"); + m->declare("filename", "flt_lpf24.dsp"); + m->declare("filters.lib/fir:author", "Julius O. Smith III"); + m->declare("filters.lib/fir:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/fir:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/iir:author", "Julius O. Smith III"); + m->declare("filters.lib/iir:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/iir:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/lowpass0_highpass1", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/lowpass0_highpass1:author", "Julius O. Smith III"); + m->declare("filters.lib/lowpass:author", "Julius O. Smith III"); + m->declare("filters.lib/lowpass:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/lowpass:license", "MIT-style STK-4.3 license"); m->declare("filters.lib/name", "Faust Filters Library"); - m->declare("filters.lib/version", "0.0"); + m->declare("filters.lib/tf2:author", "Julius O. Smith III"); + m->declare("filters.lib/tf2:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/tf2:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/tf2s:author", "Julius O. Smith III"); + m->declare("filters.lib/tf2s:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/tf2s:license", "MIT-style STK-4.3 license"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); @@ -490,15 +561,13 @@ class flt_lpf24 : public dsp { virtual int getNumInputs() { return 1; - } virtual int getNumOutputs() { return 1; - } virtual int getInputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -507,14 +576,12 @@ class flt_lpf24 : public dsp { rate = -1; break; } - } return rate; - } virtual int getOutputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -523,49 +590,40 @@ class flt_lpf24 : public dsp { rate = -1; break; } - } return rate; - } - static void classInit(int samplingFreq) { - + static void classInit(int sample_rate) { } - virtual void instanceConstants(int samplingFreq) { - fSamplingFreq = samplingFreq; - fConst0 = (3.14159274f / std::min(192000.0f, std::max(1.0f, float(fSamplingFreq)))); - + virtual void instanceConstants(int sample_rate) { + fSampleRate = sample_rate; + fConst0 = (3.14159274f / std::min(192000.0f, std::max(1.0f, float(fSampleRate)))); } virtual void instanceResetUserInterface() { fVslider0 = FAUSTFLOAT(1000.0f); - } virtual void instanceClear() { for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { fRec2[l0] = 0.0f; - } for (int l1 = 0; (l1 < 3); l1 = (l1 + 1)) { fRec1[l1] = 0.0f; - } for (int l2 = 0; (l2 < 3); l2 = (l2 + 1)) { fRec0[l2] = 0.0f; - } - } - virtual void init(int samplingFreq) { - classInit(samplingFreq); - instanceInit(samplingFreq); + virtual void init(int sample_rate) { + classInit(sample_rate); + instanceInit(sample_rate); } - virtual void instanceInit(int samplingFreq) { - instanceConstants(samplingFreq); + virtual void instanceInit(int sample_rate) { + instanceConstants(sample_rate); instanceResetUserInterface(); instanceClear(); } @@ -573,9 +631,9 @@ class flt_lpf24 : public dsp { virtual flt_lpf24* clone() { return new flt_lpf24(); } + virtual int getSampleRate() { - return fSamplingFreq; - + return fSampleRate; } virtual void buildUserInterface(UI* ui_interface) { @@ -583,7 +641,6 @@ class flt_lpf24 : public dsp { ui_interface->declare(&fVslider0, "unit", "Hz"); ui_interface->addVerticalSlider("freq", &fVslider0, 1000.0f, 20.0f, 20000.0f, 0.100000001f); ui_interface->closeBox(); - } virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { @@ -605,12 +662,9 @@ class flt_lpf24 : public dsp { fRec1[1] = fRec1[0]; fRec0[2] = fRec0[1]; fRec0[1] = fRec0[0]; - } - } - }; // clang-format on #endif diff --git a/ceammc/ext/src/flt/flt_moog_vcf.h b/ceammc/ext/src/flt/flt_moog_vcf.h index ad8d6a9ef3..d08209180d 100644 --- a/ceammc/ext/src/flt/flt_moog_vcf.h +++ b/ceammc/ext/src/flt/flt_moog_vcf.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "flt.moog_vcf" -Code generated with Faust 2.15.0 (https://faust.grame.fr) -Compilation options: cpp, -scal -ftz 0 +Code generated with Faust 2.22.1 (https://faust.grame.fr) +Compilation options: -lang cpp -scal -ftz 0 ------------------------------------------------------------ */ #ifndef __flt_moog_vcf_H__ @@ -14,6 +14,7 @@ Compilation options: cpp, -scal -ftz 0 #include #include +/************************** BEGIN dsp.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -96,23 +97,23 @@ class dsp { * - static class 'classInit': static tables initialization * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void init(int samplingRate) = 0; + virtual void init(int sample_rate) = 0; /** * Init instance state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceInit(int samplingRate) = 0; + virtual void instanceInit(int sample_rate) = 0; /** * Init instance constant state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceConstants(int samplingRate) = 0; + virtual void instanceConstants(int sample_rate) = 0; /* Init default control parameters values */ virtual void instanceResetUserInterface() = 0; @@ -149,8 +150,8 @@ class dsp { * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the number of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) * */ virtual void compute(double /*date_usec*/, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -169,16 +170,16 @@ class decorator_dsp : public dsp { public: - decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + decorator_dsp(dsp* dsp = nullptr):fDSP(dsp) {} virtual ~decorator_dsp() { delete fDSP; } virtual int getNumInputs() { return fDSP->getNumInputs(); } virtual int getNumOutputs() { return fDSP->getNumOutputs(); } virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } virtual int getSampleRate() { return fDSP->getSampleRate(); } - virtual void init(int samplingRate) { fDSP->init(samplingRate); } - virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } - virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void init(int sample_rate) { fDSP->init(sample_rate); } + virtual void instanceInit(int sample_rate) { fDSP->instanceInit(sample_rate); } + virtual void instanceConstants(int sample_rate) { fDSP->instanceConstants(sample_rate); } virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } @@ -233,6 +234,8 @@ class dsp_factory { #endif #endif +/************************** END dsp.h **************************/ +/************************** BEGIN UI.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -272,45 +275,54 @@ class dsp_factory { struct Soundfile; -class UI +template +class UIReal { - + public: - - UI() {} - - virtual ~UI() {} - + + UIReal() {} + virtual ~UIReal() {} + // -- widget's layouts - + virtual void openTabBox(const char* label) = 0; virtual void openHorizontalBox(const char* label) = 0; virtual void openVerticalBox(const char* label) = 0; virtual void closeBox() = 0; - + // -- active widgets - - virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - + + virtual void addButton(const char* label, REAL* zone) = 0; + virtual void addCheckButton(const char* label, REAL* zone) = 0; + virtual void addVerticalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addHorizontalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addNumEntry(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + // -- passive widgets - - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - + + virtual void addHorizontalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + virtual void addVerticalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + // -- soundfiles - + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; - + // -- metadata declarations + + virtual void declare(REAL* zone, const char* key, const char* val) {} +}; + +struct UI : public UIReal +{ - virtual void declare(FAUSTFLOAT*, const char*, const char*) {} + UI() {} + virtual ~UI() {} }; #endif +/************************** END UI.h **************************/ +/************************** BEGIN meta.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -339,11 +351,14 @@ class UI struct Meta { - virtual void declare(const char* key, const char* value) = 0; virtual ~Meta() {}; + virtual void declare(const char* key, const char* value) = 0; + }; #endif +/************************** END meta.h **************************/ +/************************** BEGIN misc.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -366,7 +381,7 @@ struct Meta that work under terms of your choice, so long as this FAUST architecture section is not modified. ************************************************************************/ - + #ifndef __misc__ #define __misc__ @@ -374,6 +389,8 @@ struct Meta #include #include #include +#include +#include using std::max; @@ -395,27 +412,65 @@ static int int2pow2(int x) { int r = 0; while ((1<declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.0"); - m->declare("filename", "flt_moog_vcf"); + m->declare("basics.lib/version", "0.1"); + m->declare("filename", "flt_moog_vcf.dsp"); + m->declare("filters.lib/allpassnnlt:author", "Julius O. Smith III"); + m->declare("filters.lib/allpassnnlt:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/allpassnnlt:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/lowpass0_highpass1", "Copyright (C) 2003-2019 by Julius O. Smith III "); m->declare("filters.lib/name", "Faust Filters Library"); - m->declare("filters.lib/version", "0.0"); + m->declare("filters.lib/tf2np:author", "Julius O. Smith III"); + m->declare("filters.lib/tf2np:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/tf2np:license", "MIT-style STK-4.3 license"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); @@ -488,21 +549,22 @@ class flt_moog_vcf : public dsp { m->declare("name", "flt.moog_vcf"); m->declare("signals.lib/name", "Faust Signal Routing Library"); m->declare("signals.lib/version", "0.0"); + m->declare("vaeffects.lib/moog_vcf_2bn:author", "Julius O. Smith III"); + m->declare("vaeffects.lib/moog_vcf_2bn:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("vaeffects.lib/moog_vcf_2bn:license", "MIT-style STK-4.3 license"); m->declare("vaeffects.lib/name", "Faust Virtual Analog Filter Effect Library"); m->declare("vaeffects.lib/version", "0.0"); } virtual int getNumInputs() { return 2; - } virtual int getNumOutputs() { return 1; - } virtual int getInputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -515,14 +577,12 @@ class flt_moog_vcf : public dsp { rate = -1; break; } - } return rate; - } virtual int getOutputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -531,57 +591,46 @@ class flt_moog_vcf : public dsp { rate = -1; break; } - } return rate; - } - static void classInit(int samplingFreq) { - + static void classInit(int sample_rate) { } - virtual void instanceConstants(int samplingFreq) { - fSamplingFreq = samplingFreq; - fConst0 = (3.14159274f / std::min(192000.0f, std::max(1.0f, float(fSamplingFreq)))); - + virtual void instanceConstants(int sample_rate) { + fSampleRate = sample_rate; + fConst0 = (3.14159274f / std::min(192000.0f, std::max(1.0f, float(fSampleRate)))); } virtual void instanceResetUserInterface() { fVslider0 = FAUSTFLOAT(0.40000000000000002f); - } virtual void instanceClear() { for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { - fRec2[l0] = 0.0f; - + fRec0[l0] = 0.0f; } for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { - fRec5[l1] = 0.0f; - + fRec3[l1] = 0.0f; } for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { - fRec3[l2] = 0.0f; - + fRec1[l2] = 0.0f; } for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { fRec6[l3] = 0.0f; - } for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { - fRec0[l4] = 0.0f; - + fRec4[l4] = 0.0f; } - } - virtual void init(int samplingFreq) { - classInit(samplingFreq); - instanceInit(samplingFreq); + virtual void init(int sample_rate) { + classInit(sample_rate); + instanceInit(sample_rate); } - virtual void instanceInit(int samplingFreq) { - instanceConstants(samplingFreq); + virtual void instanceInit(int sample_rate) { + instanceConstants(sample_rate); instanceResetUserInterface(); instanceClear(); } @@ -589,16 +638,15 @@ class flt_moog_vcf : public dsp { virtual flt_moog_vcf* clone() { return new flt_moog_vcf(); } + virtual int getSampleRate() { - return fSamplingFreq; - + return fSampleRate; } virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("flt.moog_vcf"); ui_interface->addVerticalSlider("res", &fVslider0, 0.400000006f, 0.0f, 1.0f, 0.00100000005f); ui_interface->closeBox(); - } virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { @@ -608,9 +656,9 @@ class flt_moog_vcf : public dsp { float fSlow0 = (0.00100000005f * float(fVslider0)); for (int i = 0; (i < count); i = (i + 1)) { float fTemp0 = float(input0[i]); - fRec2[0] = (fSlow0 + (0.999000013f * fRec2[1])); - float fTemp1 = flt_moog_vcf_faustpower2_f((1.41419947f * fRec2[0])); - float fTemp2 = (1.99997997f * fRec2[0]); + fRec0[0] = (fSlow0 + (0.999000013f * fRec0[1])); + float fTemp1 = flt_moog_vcf_faustpower2_f((1.41419947f * fRec0[0])); + float fTemp2 = (1.99997997f * fRec0[0]); float fTemp3 = (fTemp1 + fTemp2); float fTemp4 = (fTemp2 + 2.0f); float fTemp5 = std::tan((fConst0 * std::max(float(input1[i]), 20.0f))); @@ -620,47 +668,43 @@ class flt_moog_vcf : public dsp { float fTemp9 = std::max(-0.999899983f, std::min(0.999899983f, fTemp8)); float fTemp10 = (1.0f - flt_moog_vcf_faustpower2_f(fTemp9)); float fTemp11 = std::sqrt(std::max(0.0f, fTemp10)); - float fTemp12 = ((fTemp0 * fTemp11) - (fTemp9 * fRec3[1])); + float fTemp12 = ((fTemp0 * fTemp11) - (fTemp9 * fRec1[1])); float fTemp13 = (1.0f / flt_moog_vcf_faustpower2_f(fTemp5)); float fTemp14 = (fTemp3 + (1.0f - fTemp13)); float fTemp15 = std::max(-0.999899983f, std::min(0.999899983f, (2.0f * (fTemp14 / (fTemp7 * (fTemp8 + 1.0f)))))); float fTemp16 = (1.0f - flt_moog_vcf_faustpower2_f(fTemp15)); float fTemp17 = std::sqrt(std::max(0.0f, fTemp16)); - fRec5[0] = ((fTemp12 * fTemp17) - (fTemp15 * fRec5[1])); - fRec3[0] = ((fTemp12 * fTemp15) + (fRec5[1] * fTemp17)); - float fRec4 = fRec5[0]; + fRec3[0] = ((fTemp12 * fTemp17) - (fTemp15 * fRec3[1])); + fRec1[0] = ((fTemp12 * fTemp15) + (fRec3[1] * fTemp17)); + float fRec2 = fRec3[0]; float fTemp18 = (1.0f - (fTemp14 / fTemp7)); float fTemp19 = std::sqrt(fTemp10); - float fTemp20 = ((((fTemp0 * fTemp9) + (fRec3[1] * fTemp11)) + (2.0f * ((fRec3[0] * fTemp18) / fTemp19))) + ((fRec4 * ((1.0f - fTemp8) - (2.0f * (fTemp15 * fTemp18)))) / (fTemp19 * std::sqrt(fTemp16)))); + float fTemp20 = ((((fTemp0 * fTemp9) + (fRec1[1] * fTemp11)) + (2.0f * ((fRec1[0] * fTemp18) / fTemp19))) + ((fRec2 * ((1.0f - fTemp8) - (2.0f * (fTemp15 * fTemp18)))) / (fTemp19 * std::sqrt(fTemp16)))); float fTemp21 = (2.0f - fTemp2); - float fTemp22 = (1.0f - fTemp2); - float fTemp23 = ((fTemp1 + ((fTemp6 + fTemp21) / fTemp5)) + fTemp22); - float fTemp24 = (((fTemp1 + ((fTemp6 - fTemp21) / fTemp5)) + fTemp22) / fTemp23); - float fTemp25 = std::max(-0.999899983f, std::min(0.999899983f, fTemp24)); - float fTemp26 = (1.0f - flt_moog_vcf_faustpower2_f(fTemp25)); - float fTemp27 = std::sqrt(std::max(0.0f, fTemp26)); - float fTemp28 = (((fTemp20 * fTemp27) / fTemp7) - (fTemp25 * fRec0[1])); - float fTemp29 = (fTemp1 + (1.0f - (fTemp2 + fTemp13))); - float fTemp30 = std::max(-0.999899983f, std::min(0.999899983f, (2.0f * (fTemp29 / (fTemp23 * (fTemp24 + 1.0f)))))); - float fTemp31 = (1.0f - flt_moog_vcf_faustpower2_f(fTemp30)); - float fTemp32 = std::sqrt(std::max(0.0f, fTemp31)); - fRec6[0] = ((fTemp28 * fTemp32) - (fTemp30 * fRec6[1])); - fRec0[0] = ((fTemp28 * fTemp30) + (fRec6[1] * fTemp32)); - float fRec1 = fRec6[0]; - float fTemp33 = (1.0f - (fTemp29 / fTemp23)); - float fTemp34 = std::sqrt(fTemp26); - output0[i] = FAUSTFLOAT(((((fRec1 * ((1.0f - fTemp24) - (2.0f * (fTemp30 * fTemp33)))) / (fTemp34 * std::sqrt(fTemp31))) + ((((fTemp20 * fTemp25) / fTemp7) + (fRec0[1] * fTemp27)) + (2.0f * ((fRec0[0] * fTemp33) / fTemp34)))) / fTemp23)); - fRec2[1] = fRec2[0]; - fRec5[1] = fRec5[0]; + float fTemp22 = ((fTemp1 + ((fTemp6 + fTemp21) / fTemp5)) + (1.0f - fTemp2)); + float fTemp23 = ((fTemp1 + (1.0f - (fTemp2 + ((fTemp21 - fTemp6) / fTemp5)))) / fTemp22); + float fTemp24 = std::max(-0.999899983f, std::min(0.999899983f, fTemp23)); + float fTemp25 = (1.0f - flt_moog_vcf_faustpower2_f(fTemp24)); + float fTemp26 = std::sqrt(std::max(0.0f, fTemp25)); + float fTemp27 = (((fTemp20 * fTemp26) / fTemp7) - (fTemp24 * fRec4[1])); + float fTemp28 = (fTemp1 + (1.0f - (fTemp2 + fTemp13))); + float fTemp29 = std::max(-0.999899983f, std::min(0.999899983f, (2.0f * (fTemp28 / (fTemp22 * (fTemp23 + 1.0f)))))); + float fTemp30 = (1.0f - flt_moog_vcf_faustpower2_f(fTemp29)); + float fTemp31 = std::sqrt(std::max(0.0f, fTemp30)); + fRec6[0] = ((fTemp27 * fTemp31) - (fTemp29 * fRec6[1])); + fRec4[0] = ((fTemp27 * fTemp29) + (fRec6[1] * fTemp31)); + float fRec5 = fRec6[0]; + float fTemp32 = (1.0f - (fTemp28 / fTemp22)); + float fTemp33 = std::sqrt(fTemp25); + output0[i] = FAUSTFLOAT(((((((fTemp20 * fTemp24) / fTemp7) + (fRec4[1] * fTemp26)) + (2.0f * ((fRec4[0] * fTemp32) / fTemp33))) + ((fRec5 * ((1.0f - fTemp23) - (2.0f * (fTemp29 * fTemp32)))) / (fTemp33 * std::sqrt(fTemp30)))) / fTemp22)); + fRec0[1] = fRec0[0]; fRec3[1] = fRec3[0]; + fRec1[1] = fRec1[0]; fRec6[1] = fRec6[0]; - fRec0[1] = fRec0[0]; - + fRec4[1] = fRec4[0]; } - } - }; // clang-format on #endif diff --git a/ceammc/ext/src/flt/flt_notch.h b/ceammc/ext/src/flt/flt_notch.h index ed5f0c3fdb..82e975f14c 100644 --- a/ceammc/ext/src/flt/flt_notch.h +++ b/ceammc/ext/src/flt/flt_notch.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "flt.notch" -Code generated with Faust 2.15.0 (https://faust.grame.fr) -Compilation options: cpp, -scal -ftz 0 +Code generated with Faust 2.22.1 (https://faust.grame.fr) +Compilation options: -lang cpp -scal -ftz 0 ------------------------------------------------------------ */ #ifndef __flt_notch_H__ @@ -14,6 +14,7 @@ Compilation options: cpp, -scal -ftz 0 #include #include +/************************** BEGIN dsp.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -96,23 +97,23 @@ class dsp { * - static class 'classInit': static tables initialization * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void init(int samplingRate) = 0; + virtual void init(int sample_rate) = 0; /** * Init instance state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceInit(int samplingRate) = 0; + virtual void instanceInit(int sample_rate) = 0; /** * Init instance constant state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceConstants(int samplingRate) = 0; + virtual void instanceConstants(int sample_rate) = 0; /* Init default control parameters values */ virtual void instanceResetUserInterface() = 0; @@ -149,8 +150,8 @@ class dsp { * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the number of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) * */ virtual void compute(double /*date_usec*/, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -169,16 +170,16 @@ class decorator_dsp : public dsp { public: - decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + decorator_dsp(dsp* dsp = nullptr):fDSP(dsp) {} virtual ~decorator_dsp() { delete fDSP; } virtual int getNumInputs() { return fDSP->getNumInputs(); } virtual int getNumOutputs() { return fDSP->getNumOutputs(); } virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } virtual int getSampleRate() { return fDSP->getSampleRate(); } - virtual void init(int samplingRate) { fDSP->init(samplingRate); } - virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } - virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void init(int sample_rate) { fDSP->init(sample_rate); } + virtual void instanceInit(int sample_rate) { fDSP->instanceInit(sample_rate); } + virtual void instanceConstants(int sample_rate) { fDSP->instanceConstants(sample_rate); } virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } @@ -233,6 +234,8 @@ class dsp_factory { #endif #endif +/************************** END dsp.h **************************/ +/************************** BEGIN UI.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -272,45 +275,54 @@ class dsp_factory { struct Soundfile; -class UI +template +class UIReal { - + public: - - UI() {} - - virtual ~UI() {} - + + UIReal() {} + virtual ~UIReal() {} + // -- widget's layouts - + virtual void openTabBox(const char* label) = 0; virtual void openHorizontalBox(const char* label) = 0; virtual void openVerticalBox(const char* label) = 0; virtual void closeBox() = 0; - + // -- active widgets - - virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - + + virtual void addButton(const char* label, REAL* zone) = 0; + virtual void addCheckButton(const char* label, REAL* zone) = 0; + virtual void addVerticalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addHorizontalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addNumEntry(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + // -- passive widgets - - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - + + virtual void addHorizontalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + virtual void addVerticalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + // -- soundfiles - + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; - + // -- metadata declarations + + virtual void declare(REAL* zone, const char* key, const char* val) {} +}; - virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +struct UI : public UIReal +{ + + UI() {} + virtual ~UI() {} }; #endif +/************************** END UI.h **************************/ +/************************** BEGIN meta.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -339,11 +351,14 @@ class UI struct Meta { - virtual void declare(const char* key, const char* value) = 0; virtual ~Meta() {}; + virtual void declare(const char* key, const char* value) = 0; + }; #endif +/************************** END meta.h **************************/ +/************************** BEGIN misc.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -366,7 +381,7 @@ struct Meta that work under terms of your choice, so long as this FAUST architecture section is not modified. ************************************************************************/ - + #ifndef __misc__ #define __misc__ @@ -374,6 +389,8 @@ struct Meta #include #include #include +#include +#include using std::max; @@ -395,27 +412,65 @@ static int int2pow2(int x) { int r = 0; while ((1<declare("filename", "flt_notch"); + m->declare("filename", "flt_notch.dsp"); m->declare("filter.lib/author", "Julius O. Smith (jos at ccrma.stanford.edu)"); m->declare("filter.lib/copyright", "Julius O. Smith III"); m->declare("filter.lib/deprecated", "This library is deprecated and is not maintained anymore. It will be removed in August 2017."); @@ -503,15 +558,13 @@ class flt_notch : public dsp { virtual int getNumInputs() { return 1; - } virtual int getNumOutputs() { return 1; - } virtual int getInputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -520,14 +573,12 @@ class flt_notch : public dsp { rate = -1; break; } - } return rate; - } virtual int getOutputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -536,52 +587,43 @@ class flt_notch : public dsp { rate = -1; break; } - } return rate; - } - static void classInit(int samplingFreq) { - + static void classInit(int sample_rate) { } - virtual void instanceConstants(int samplingFreq) { - fSamplingFreq = samplingFreq; - fConst0 = std::min(192000.0f, std::max(1.0f, float(fSamplingFreq))); + virtual void instanceConstants(int sample_rate) { + fSampleRate = sample_rate; + fConst0 = std::min(192000.0f, std::max(1.0f, float(fSampleRate))); fConst1 = (1.57079637f / fConst0); fConst2 = (6.28318548f / fConst0); - } virtual void instanceResetUserInterface() { fVslider0 = FAUSTFLOAT(50.0f); fVslider1 = FAUSTFLOAT(1000.0f); - } virtual void instanceClear() { for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { fRec1[l0] = 0.0f; - } for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { fRec2[l1] = 0.0f; - } for (int l2 = 0; (l2 < 3); l2 = (l2 + 1)) { fRec0[l2] = 0.0f; - } - } - virtual void init(int samplingFreq) { - classInit(samplingFreq); - instanceInit(samplingFreq); + virtual void init(int sample_rate) { + classInit(sample_rate); + instanceInit(sample_rate); } - virtual void instanceInit(int samplingFreq) { - instanceConstants(samplingFreq); + virtual void instanceInit(int sample_rate) { + instanceConstants(sample_rate); instanceResetUserInterface(); instanceClear(); } @@ -589,9 +631,9 @@ class flt_notch : public dsp { virtual flt_notch* clone() { return new flt_notch(); } + virtual int getSampleRate() { - return fSamplingFreq; - + return fSampleRate; } virtual void buildUserInterface(UI* ui_interface) { @@ -601,7 +643,6 @@ class flt_notch : public dsp { ui_interface->declare(&fVslider0, "unit", "Hz"); ui_interface->addVerticalSlider("width", &fVslider0, 50.0f, 1.0f, 10000.0f, 0.100000001f); ui_interface->closeBox(); - } virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { @@ -623,12 +664,9 @@ class flt_notch : public dsp { fRec2[1] = fRec2[0]; fRec0[2] = fRec0[1]; fRec0[1] = fRec0[0]; - } - } - }; // clang-format on #endif diff --git a/ceammc/ext/src/flt/flt_resonbp.h b/ceammc/ext/src/flt/flt_resonbp.h index 20137d5fc0..1ef1f50c86 100644 --- a/ceammc/ext/src/flt/flt_resonbp.h +++ b/ceammc/ext/src/flt/flt_resonbp.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "flt.resonbp" -Code generated with Faust 2.15.0 (https://faust.grame.fr) -Compilation options: cpp, -scal -ftz 0 +Code generated with Faust 2.22.1 (https://faust.grame.fr) +Compilation options: -lang cpp -scal -ftz 0 ------------------------------------------------------------ */ #ifndef __flt_resonbp_H__ @@ -14,6 +14,7 @@ Compilation options: cpp, -scal -ftz 0 #include #include +/************************** BEGIN dsp.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -96,23 +97,23 @@ class dsp { * - static class 'classInit': static tables initialization * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void init(int samplingRate) = 0; + virtual void init(int sample_rate) = 0; /** * Init instance state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceInit(int samplingRate) = 0; + virtual void instanceInit(int sample_rate) = 0; /** * Init instance constant state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceConstants(int samplingRate) = 0; + virtual void instanceConstants(int sample_rate) = 0; /* Init default control parameters values */ virtual void instanceResetUserInterface() = 0; @@ -149,8 +150,8 @@ class dsp { * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the number of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) * */ virtual void compute(double /*date_usec*/, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -169,16 +170,16 @@ class decorator_dsp : public dsp { public: - decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + decorator_dsp(dsp* dsp = nullptr):fDSP(dsp) {} virtual ~decorator_dsp() { delete fDSP; } virtual int getNumInputs() { return fDSP->getNumInputs(); } virtual int getNumOutputs() { return fDSP->getNumOutputs(); } virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } virtual int getSampleRate() { return fDSP->getSampleRate(); } - virtual void init(int samplingRate) { fDSP->init(samplingRate); } - virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } - virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void init(int sample_rate) { fDSP->init(sample_rate); } + virtual void instanceInit(int sample_rate) { fDSP->instanceInit(sample_rate); } + virtual void instanceConstants(int sample_rate) { fDSP->instanceConstants(sample_rate); } virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } @@ -233,6 +234,8 @@ class dsp_factory { #endif #endif +/************************** END dsp.h **************************/ +/************************** BEGIN UI.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -272,45 +275,54 @@ class dsp_factory { struct Soundfile; -class UI +template +class UIReal { - + public: - - UI() {} - - virtual ~UI() {} - + + UIReal() {} + virtual ~UIReal() {} + // -- widget's layouts - + virtual void openTabBox(const char* label) = 0; virtual void openHorizontalBox(const char* label) = 0; virtual void openVerticalBox(const char* label) = 0; virtual void closeBox() = 0; - + // -- active widgets - - virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - + + virtual void addButton(const char* label, REAL* zone) = 0; + virtual void addCheckButton(const char* label, REAL* zone) = 0; + virtual void addVerticalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addHorizontalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addNumEntry(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + // -- passive widgets - - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - + + virtual void addHorizontalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + virtual void addVerticalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + // -- soundfiles - + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; - + // -- metadata declarations + + virtual void declare(REAL* zone, const char* key, const char* val) {} +}; - virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +struct UI : public UIReal +{ + + UI() {} + virtual ~UI() {} }; #endif +/************************** END UI.h **************************/ +/************************** BEGIN meta.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -339,11 +351,14 @@ class UI struct Meta { - virtual void declare(const char* key, const char* value) = 0; virtual ~Meta() {}; + virtual void declare(const char* key, const char* value) = 0; + }; #endif +/************************** END meta.h **************************/ +/************************** BEGIN misc.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -366,7 +381,7 @@ struct Meta that work under terms of your choice, so long as this FAUST architecture section is not modified. ************************************************************************/ - + #ifndef __misc__ #define __misc__ @@ -374,6 +389,8 @@ struct Meta #include #include #include +#include +#include using std::max; @@ -395,27 +412,65 @@ static int int2pow2(int x) { int r = 0; while ((1<declare("filename", "flt_resonbp"); + m->declare("filename", "flt_resonbp.dsp"); + m->declare("filters.lib/fir:author", "Julius O. Smith III"); + m->declare("filters.lib/fir:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/fir:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/iir:author", "Julius O. Smith III"); + m->declare("filters.lib/iir:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/iir:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/lowpass0_highpass1", "Copyright (C) 2003-2019 by Julius O. Smith III "); m->declare("filters.lib/name", "Faust Filters Library"); - m->declare("filters.lib/version", "0.0"); + m->declare("filters.lib/resonbp:author", "Julius O. Smith III"); + m->declare("filters.lib/resonbp:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/resonbp:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/tf2:author", "Julius O. Smith III"); + m->declare("filters.lib/tf2:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/tf2:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/tf2s:author", "Julius O. Smith III"); + m->declare("filters.lib/tf2s:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/tf2s:license", "MIT-style STK-4.3 license"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); @@ -489,15 +559,13 @@ class flt_resonbp : public dsp { virtual int getNumInputs() { return 1; - } virtual int getNumOutputs() { return 1; - } virtual int getInputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -506,14 +574,12 @@ class flt_resonbp : public dsp { rate = -1; break; } - } return rate; - } virtual int getOutputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -522,50 +588,41 @@ class flt_resonbp : public dsp { rate = -1; break; } - } return rate; - } - static void classInit(int samplingFreq) { - + static void classInit(int sample_rate) { } - virtual void instanceConstants(int samplingFreq) { - fSamplingFreq = samplingFreq; - fConst0 = (3.14159274f / std::min(192000.0f, std::max(1.0f, float(fSamplingFreq)))); - + virtual void instanceConstants(int sample_rate) { + fSampleRate = sample_rate; + fConst0 = (3.14159274f / std::min(192000.0f, std::max(1.0f, float(fSampleRate)))); } virtual void instanceResetUserInterface() { fVslider0 = FAUSTFLOAT(1000.0f); fVslider1 = FAUSTFLOAT(80.0f); - } virtual void instanceClear() { for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { fRec1[l0] = 0.0f; - } for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { fRec2[l1] = 0.0f; - } for (int l2 = 0; (l2 < 3); l2 = (l2 + 1)) { fRec0[l2] = 0.0f; - } - } - virtual void init(int samplingFreq) { - classInit(samplingFreq); - instanceInit(samplingFreq); + virtual void init(int sample_rate) { + classInit(sample_rate); + instanceInit(sample_rate); } - virtual void instanceInit(int samplingFreq) { - instanceConstants(samplingFreq); + virtual void instanceInit(int sample_rate) { + instanceConstants(sample_rate); instanceResetUserInterface(); instanceClear(); } @@ -573,9 +630,9 @@ class flt_resonbp : public dsp { virtual flt_resonbp* clone() { return new flt_resonbp(); } + virtual int getSampleRate() { - return fSamplingFreq; - + return fSampleRate; } virtual void buildUserInterface(UI* ui_interface) { @@ -584,7 +641,6 @@ class flt_resonbp : public dsp { ui_interface->addVerticalSlider("freq", &fVslider0, 1000.0f, 20.0f, 20000.0f, 0.100000001f); ui_interface->addVerticalSlider("q", &fVslider1, 80.0f, 0.100000001f, 300.0f, 0.100000001f); ui_interface->closeBox(); - } virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { @@ -606,12 +662,9 @@ class flt_resonbp : public dsp { fRec2[1] = fRec2[0]; fRec0[2] = fRec0[1]; fRec0[1] = fRec0[0]; - } - } - }; // clang-format on #endif diff --git a/ceammc/ext/src/fx/fx_bitdown.h b/ceammc/ext/src/fx/fx_bitdown.h index 8f81456ccf..14326eee9b 100644 --- a/ceammc/ext/src/fx/fx_bitdown.h +++ b/ceammc/ext/src/fx/fx_bitdown.h @@ -3,8 +3,8 @@ author: "Viacheslav Lotsmanov (unclechu)" copyright: "(c) Viacheslav Lotsmanov, 2015" license: "BSD" name: "fx.bitdown" -Code generated with Faust 2.8.5 (https://faust.grame.fr) -Compilation options: cpp, -scal -ftz 0 +Code generated with Faust 2.22.1 (https://faust.grame.fr) +Compilation options: -lang cpp -scal -ftz 0 ------------------------------------------------------------ */ #ifndef __fx_bitdown_H__ @@ -17,6 +17,7 @@ Compilation options: cpp, -scal -ftz 0 #include #include +/************************** BEGIN dsp.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -99,23 +100,23 @@ class dsp { * - static class 'classInit': static tables initialization * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void init(int samplingRate) = 0; + virtual void init(int sample_rate) = 0; /** * Init instance state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceInit(int samplingRate) = 0; + virtual void instanceInit(int sample_rate) = 0; /** * Init instance constant state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceConstants(int samplingRate) = 0; + virtual void instanceConstants(int sample_rate) = 0; /* Init default control parameters values */ virtual void instanceResetUserInterface() = 0; @@ -152,8 +153,8 @@ class dsp { * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the number of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) * */ virtual void compute(double /*date_usec*/, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -172,16 +173,16 @@ class decorator_dsp : public dsp { public: - decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + decorator_dsp(dsp* dsp = nullptr):fDSP(dsp) {} virtual ~decorator_dsp() { delete fDSP; } virtual int getNumInputs() { return fDSP->getNumInputs(); } virtual int getNumOutputs() { return fDSP->getNumOutputs(); } virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } virtual int getSampleRate() { return fDSP->getSampleRate(); } - virtual void init(int samplingRate) { fDSP->init(samplingRate); } - virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } - virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void init(int sample_rate) { fDSP->init(sample_rate); } + virtual void instanceInit(int sample_rate) { fDSP->instanceInit(sample_rate); } + virtual void instanceConstants(int sample_rate) { fDSP->instanceConstants(sample_rate); } virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } @@ -236,6 +237,8 @@ class dsp_factory { #endif #endif +/************************** END dsp.h **************************/ +/************************** BEGIN UI.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -275,45 +278,54 @@ class dsp_factory { struct Soundfile; -class UI +template +class UIReal { - + public: - - UI() {} - - virtual ~UI() {} - + + UIReal() {} + virtual ~UIReal() {} + // -- widget's layouts - + virtual void openTabBox(const char* label) = 0; virtual void openHorizontalBox(const char* label) = 0; virtual void openVerticalBox(const char* label) = 0; virtual void closeBox() = 0; - + // -- active widgets - - virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - + + virtual void addButton(const char* label, REAL* zone) = 0; + virtual void addCheckButton(const char* label, REAL* zone) = 0; + virtual void addVerticalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addHorizontalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addNumEntry(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + // -- passive widgets - - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - + + virtual void addHorizontalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + virtual void addVerticalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + // -- soundfiles - + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; - + // -- metadata declarations + + virtual void declare(REAL* zone, const char* key, const char* val) {} +}; - virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +struct UI : public UIReal +{ + + UI() {} + virtual ~UI() {} }; #endif +/************************** END UI.h **************************/ +/************************** BEGIN meta.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -342,11 +354,14 @@ class UI struct Meta { - virtual void declare(const char* key, const char* value) = 0; virtual ~Meta() {}; + virtual void declare(const char* key, const char* value) = 0; + }; #endif +/************************** END meta.h **************************/ +/************************** BEGIN misc.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -369,15 +384,16 @@ struct Meta that work under terms of your choice, so long as this FAUST architecture section is not modified. ************************************************************************/ - + #ifndef __misc__ #define __misc__ #include #include -#include -#include #include +#include +#include +#include using std::max; @@ -385,41 +401,79 @@ using std::min; struct XXXX_Meta : std::map { - void declare(const char* key, const char* value) { (*this)[key]=value; } + void declare(const char* key, const char* value) { (*this)[key] = value; } }; struct MY_Meta : Meta, std::map { - void declare(const char* key, const char* value) { (*this)[key]=value; } + void declare(const char* key, const char* value) { (*this)[key] = value; } }; -inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } +static int lsr(int x, int n) { return int(((unsigned int)x) >> n); } -inline int int2pow2(int x) { int r = 0; while ((1<declare("author", "Viacheslav Lotsmanov (unclechu)"); m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.0"); + m->declare("basics.lib/version", "0.1"); m->declare("category", "Distortion"); m->declare("ceammc_ui.lib/name", "CEAMMC faust default UI elements"); m->declare("ceammc_ui.lib/version", "0.1.1"); m->declare("copyright", "(c) Viacheslav Lotsmanov, 2015"); - m->declare("filename", "fx_bitdown"); + m->declare("filename", "fx_bitdown.dsp"); m->declare("license", "BSD"); m->declare("name", "fx.bitdown"); } virtual int getNumInputs() { return 1; - } virtual int getNumOutputs() { return 1; - } virtual int getInputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -503,14 +556,12 @@ class fx_bitdown : public dsp { rate = -1; break; } - } return rate; - } virtual int getOutputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -519,46 +570,38 @@ class fx_bitdown : public dsp { rate = -1; break; } - } return rate; - } - static void classInit(int samplingFreq) { - + static void classInit(int sample_rate) { } - virtual void instanceConstants(int samplingFreq) { - fSamplingFreq = samplingFreq; - + virtual void instanceConstants(int sample_rate) { + fSampleRate = sample_rate; } virtual void instanceResetUserInterface() { fCheckbox0 = FAUSTFLOAT(0.0f); fVslider0 = FAUSTFLOAT(1.0f); fVslider1 = FAUSTFLOAT(16.0f); - } virtual void instanceClear() { for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { iRec1[l0] = 0; - } for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { fRec0[l1] = 0.0f; - } - } - virtual void init(int samplingFreq) { - classInit(samplingFreq); - instanceInit(samplingFreq); + virtual void init(int sample_rate) { + classInit(sample_rate); + instanceInit(sample_rate); } - virtual void instanceInit(int samplingFreq) { - instanceConstants(samplingFreq); + virtual void instanceInit(int sample_rate) { + instanceConstants(sample_rate); instanceResetUserInterface(); instanceClear(); } @@ -566,9 +609,9 @@ class fx_bitdown : public dsp { virtual fx_bitdown* clone() { return new fx_bitdown(); } + virtual int getSampleRate() { - return fSamplingFreq; - + return fSampleRate; } virtual void buildUserInterface(UI* ui_interface) { @@ -577,7 +620,6 @@ class fx_bitdown : public dsp { ui_interface->addCheckButton("bypass", &fCheckbox0); ui_interface->addVerticalSlider("downsamp", &fVslider0, 1.0f, 1.0f, 200.0f, 1.0f); ui_interface->closeBox(); - } virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { @@ -591,19 +633,16 @@ class fx_bitdown : public dsp { int iSlow5 = (iSlow1 + -1); for (int i = 0; (i < count); i = (i + 1)) { float fTemp0 = float(input0[i]); - float fTemp1 = (fSlow4 * std::floor((fSlow3 * (iSlow0?0.0f:fTemp0)))); - float fTemp2 = ((fTemp1 > 1.0f)?1.0f:((fTemp1 < -1.0f)?-1.0f:fTemp1)); - iRec1[0] = ((iRec1[1] < iSlow5)?(iRec1[1] + 1):0); - fRec0[0] = ((iRec1[0] == 0)?fTemp2:fRec0[1]); - output0[i] = FAUSTFLOAT((iSlow0?fTemp0:(iSlow2?fRec0[0]:fTemp2))); + float fTemp1 = (fSlow4 * std::floor((fSlow3 * (iSlow0 ? 0.0f : fTemp0)))); + float fTemp2 = ((fTemp1 > 1.0f) ? 1.0f : ((fTemp1 < -1.0f) ? -1.0f : fTemp1)); + iRec1[0] = ((iRec1[1] < iSlow5) ? (iRec1[1] + 1) : 0); + fRec0[0] = ((iRec1[0] == 0) ? fTemp2 : fRec0[1]); + output0[i] = FAUSTFLOAT((iSlow0 ? fTemp0 : (iSlow2 ? fRec0[0] : fTemp2))); iRec1[1] = iRec1[0]; fRec0[1] = fRec0[0]; - } - } - }; // clang-format on #endif diff --git a/ceammc/ext/src/fx/fx_chorus.h b/ceammc/ext/src/fx/fx_chorus.h index 3d42bcad67..5f493538ea 100644 --- a/ceammc/ext/src/fx/fx_chorus.h +++ b/ceammc/ext/src/fx/fx_chorus.h @@ -2,8 +2,8 @@ author: "Albert Graef" name: "fx.chorus" version: "1.0" -Code generated with Faust 2.8.5 (https://faust.grame.fr) -Compilation options: cpp, -scal -ftz 0 +Code generated with Faust 2.22.1 (https://faust.grame.fr) +Compilation options: -lang cpp -scal -ftz 0 ------------------------------------------------------------ */ #ifndef __fx_chorus_H__ @@ -16,6 +16,7 @@ Compilation options: cpp, -scal -ftz 0 #include #include +/************************** BEGIN dsp.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -98,23 +99,23 @@ class dsp { * - static class 'classInit': static tables initialization * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void init(int samplingRate) = 0; + virtual void init(int sample_rate) = 0; /** * Init instance state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceInit(int samplingRate) = 0; + virtual void instanceInit(int sample_rate) = 0; /** * Init instance constant state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceConstants(int samplingRate) = 0; + virtual void instanceConstants(int sample_rate) = 0; /* Init default control parameters values */ virtual void instanceResetUserInterface() = 0; @@ -151,8 +152,8 @@ class dsp { * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the number of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) * */ virtual void compute(double /*date_usec*/, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -171,16 +172,16 @@ class decorator_dsp : public dsp { public: - decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + decorator_dsp(dsp* dsp = nullptr):fDSP(dsp) {} virtual ~decorator_dsp() { delete fDSP; } virtual int getNumInputs() { return fDSP->getNumInputs(); } virtual int getNumOutputs() { return fDSP->getNumOutputs(); } virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } virtual int getSampleRate() { return fDSP->getSampleRate(); } - virtual void init(int samplingRate) { fDSP->init(samplingRate); } - virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } - virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void init(int sample_rate) { fDSP->init(sample_rate); } + virtual void instanceInit(int sample_rate) { fDSP->instanceInit(sample_rate); } + virtual void instanceConstants(int sample_rate) { fDSP->instanceConstants(sample_rate); } virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } @@ -235,6 +236,8 @@ class dsp_factory { #endif #endif +/************************** END dsp.h **************************/ +/************************** BEGIN UI.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -274,45 +277,54 @@ class dsp_factory { struct Soundfile; -class UI +template +class UIReal { - + public: - - UI() {} - - virtual ~UI() {} - + + UIReal() {} + virtual ~UIReal() {} + // -- widget's layouts - + virtual void openTabBox(const char* label) = 0; virtual void openHorizontalBox(const char* label) = 0; virtual void openVerticalBox(const char* label) = 0; virtual void closeBox() = 0; - + // -- active widgets - - virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - + + virtual void addButton(const char* label, REAL* zone) = 0; + virtual void addCheckButton(const char* label, REAL* zone) = 0; + virtual void addVerticalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addHorizontalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addNumEntry(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + // -- passive widgets - - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - + + virtual void addHorizontalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + virtual void addVerticalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + // -- soundfiles - + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; - + // -- metadata declarations + + virtual void declare(REAL* zone, const char* key, const char* val) {} +}; + +struct UI : public UIReal +{ - virtual void declare(FAUSTFLOAT*, const char*, const char*) {} + UI() {} + virtual ~UI() {} }; #endif +/************************** END UI.h **************************/ +/************************** BEGIN meta.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -341,11 +353,14 @@ class UI struct Meta { - virtual void declare(const char* key, const char* value) = 0; virtual ~Meta() {}; + virtual void declare(const char* key, const char* value) = 0; + }; #endif +/************************** END meta.h **************************/ +/************************** BEGIN misc.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -368,15 +383,16 @@ struct Meta that work under terms of your choice, so long as this FAUST architecture section is not modified. ************************************************************************/ - + #ifndef __misc__ #define __misc__ #include #include -#include -#include #include +#include +#include +#include using std::max; @@ -384,41 +400,79 @@ using std::min; struct XXXX_Meta : std::map { - void declare(const char* key, const char* value) { (*this)[key]=value; } + void declare(const char* key, const char* value) { (*this)[key] = value; } }; struct MY_Meta : Meta, std::map { - void declare(const char* key, const char* value) { (*this)[key]=value; } + void declare(const char* key, const char* value) { (*this)[key] = value; } }; -inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } +static int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +static int int2pow2(int x) { int r = 0; while ((1< #include - class fx_chorusSIG0 { private: @@ -460,27 +513,23 @@ class fx_chorusSIG0 { int getNumInputsfx_chorusSIG0() { return 0; - } int getNumOutputsfx_chorusSIG0() { return 1; - } int getInputRatefx_chorusSIG0(int channel) { int rate; - switch (channel) { + switch ((channel)) { default: { rate = -1; break; } - } return rate; - } int getOutputRatefx_chorusSIG0(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 0; break; @@ -489,39 +538,35 @@ class fx_chorusSIG0 { rate = -1; break; } - } return rate; - } - void instanceInitfx_chorusSIG0(int samplingFreq) { + void instanceInitfx_chorusSIG0(int sample_rate) { for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { iRec5[l6] = 0; - } - } - void fillfx_chorusSIG0(int count, float* output) { + void fillfx_chorusSIG0(int count, float* table) { for (int i = 0; (i < count); i = (i + 1)) { iRec5[0] = (iRec5[1] + 1); - output[i] = std::sin((9.58738019e-05f * float((iRec5[0] + -1)))); + table[i] = std::sin((9.58738019e-05f * float((iRec5[0] + -1)))); iRec5[1] = iRec5[0]; - } - } + }; -fx_chorusSIG0* newfx_chorusSIG0() { return (fx_chorusSIG0*)new fx_chorusSIG0(); } -void deletefx_chorusSIG0(fx_chorusSIG0* dsp) { delete dsp; } +static fx_chorusSIG0* newfx_chorusSIG0() { return (fx_chorusSIG0*)new fx_chorusSIG0(); } +static void deletefx_chorusSIG0(fx_chorusSIG0* dsp) { delete dsp; } static float ftbl0fx_chorusSIG0[65536]; #ifndef FAUSTCLASS #define FAUSTCLASS fx_chorus #endif + #ifdef __APPLE__ #define exp10f __exp10f #define exp10 __exp10 @@ -536,7 +581,7 @@ class fx_chorus : public dsp { float fVec0[131072]; FAUSTFLOAT fHslider0; float fRec0[2]; - int fSamplingFreq; + int fSampleRate; float fConst0; float fConst1; FAUSTFLOAT fHslider1; @@ -553,14 +598,14 @@ class fx_chorus : public dsp { void metadata(Meta* m) { m->declare("author", "Albert Graef"); m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.0"); + m->declare("basics.lib/version", "0.1"); m->declare("ceammc.lib/name", "Ceammc PureData misc utils"); m->declare("ceammc.lib/version", "0.1.1"); m->declare("ceammc_ui.lib/name", "CEAMMC faust default UI elements"); m->declare("ceammc_ui.lib/version", "0.1.1"); m->declare("delays.lib/name", "Faust Delay Library"); - m->declare("delays.lib/version", "0.0"); - m->declare("filename", "fx_chorus"); + m->declare("delays.lib/version", "0.1"); + m->declare("filename", "fx_chorus.dsp"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); @@ -574,15 +619,13 @@ class fx_chorus : public dsp { virtual int getNumInputs() { return 1; - } virtual int getNumOutputs() { return 1; - } virtual int getInputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -591,14 +634,12 @@ class fx_chorus : public dsp { rate = -1; break; } - } return rate; - } virtual int getOutputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -607,26 +648,22 @@ class fx_chorus : public dsp { rate = -1; break; } - } return rate; - } - static void classInit(int samplingFreq) { + static void classInit(int sample_rate) { fx_chorusSIG0* sig0 = newfx_chorusSIG0(); - sig0->instanceInitfx_chorusSIG0(samplingFreq); + sig0->instanceInitfx_chorusSIG0(sample_rate); sig0->fillfx_chorusSIG0(65536, ftbl0fx_chorusSIG0); deletefx_chorusSIG0(sig0); - } - virtual void instanceConstants(int samplingFreq) { - fSamplingFreq = samplingFreq; - fConst0 = std::min(192000.0f, std::max(1.0f, float(fSamplingFreq))); + virtual void instanceConstants(int sample_rate) { + fSampleRate = sample_rate; + fConst0 = std::min(192000.0f, std::max(1.0f, float(fSampleRate))); fConst1 = (0.5f * fConst0); fConst2 = (1.0f / fConst0); - } virtual void instanceResetUserInterface() { @@ -635,44 +672,36 @@ class fx_chorus : public dsp { fHslider1 = FAUSTFLOAT(25.0f); fHslider2 = FAUSTFLOAT(0.02f); fHslider3 = FAUSTFLOAT(3.0f); - } virtual void instanceClear() { IOTA = 0; for (int l0 = 0; (l0 < 131072); l0 = (l0 + 1)) { fVec0[l0] = 0.0f; - } for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { fRec0[l1] = 0.0f; - } for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { fRec1[l2] = 0.0f; - } for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { fRec2[l3] = 0.0f; - } for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { fRec4[l4] = 0.0f; - } for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { fRec3[l5] = 0.0f; - } - } - virtual void init(int samplingFreq) { - classInit(samplingFreq); - instanceInit(samplingFreq); + virtual void init(int sample_rate) { + classInit(sample_rate); + instanceInit(sample_rate); } - virtual void instanceInit(int samplingFreq) { - instanceConstants(samplingFreq); + virtual void instanceInit(int sample_rate) { + instanceConstants(sample_rate); instanceResetUserInterface(); instanceClear(); } @@ -680,9 +709,9 @@ class fx_chorus : public dsp { virtual fx_chorus* clone() { return new fx_chorus(); } + virtual int getSampleRate() { - return fSamplingFreq; - + return fSampleRate; } virtual void buildUserInterface(UI* ui_interface) { @@ -697,7 +726,6 @@ class fx_chorus : public dsp { ui_interface->declare(&fHslider3, "unit", "Hz"); ui_interface->addHorizontalSlider("freq", &fHslider3, 3.0f, 0.0f, 10.0f, 0.00999999978f); ui_interface->closeBox(); - } virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { @@ -710,7 +738,7 @@ class fx_chorus : public dsp { float fSlow4 = (0.00100000005f * float(fHslider3)); for (int i = 0; (i < count); i = (i + 1)) { float fTemp0 = float(input0[i]); - float fTemp1 = (iSlow0?0.0f:fTemp0); + float fTemp1 = (iSlow0 ? 0.0f : fTemp0); fVec0[(IOTA & 131071)] = fTemp1; fRec0[0] = (fSlow1 + (0.999000013f * fRec0[1])); fRec1[0] = (fSlow2 + (0.999000013f * fRec1[1])); @@ -724,19 +752,16 @@ class fx_chorus : public dsp { float fTemp6 = (fConst1 * (fRec1[0] * ((fRec2[0] * (((fTemp4 + (1.0f - fTemp3)) * ftbl0fx_chorusSIG0[(iTemp5 & 65535)]) + ((fTemp3 - fTemp4) * ftbl0fx_chorusSIG0[((iTemp5 + 1) & 65535)]))) + 1.0f))); int iTemp7 = int(fTemp6); float fTemp8 = std::floor(fTemp6); - output0[i] = FAUSTFLOAT((iSlow0?fTemp0:((fTemp1 * (1.0f - fRec0[0])) + (fRec0[0] * ((fVec0[((IOTA - std::min(65537, std::max(0, iTemp7))) & 131071)] * (fTemp8 + (1.0f - fTemp6))) + ((fTemp6 - fTemp8) * fVec0[((IOTA - std::min(65537, std::max(0, (iTemp7 + 1)))) & 131071)])))))); + output0[i] = FAUSTFLOAT((iSlow0 ? fTemp0 : ((fTemp1 * (1.0f - fRec0[0])) + (fRec0[0] * ((fVec0[((IOTA - std::min(65537, std::max(0, iTemp7))) & 131071)] * (fTemp8 + (1.0f - fTemp6))) + ((fTemp6 - fTemp8) * fVec0[((IOTA - std::min(65537, std::max(0, (iTemp7 + 1)))) & 131071)])))))); IOTA = (IOTA + 1); fRec0[1] = fRec0[0]; fRec1[1] = fRec1[0]; fRec2[1] = fRec2[0]; fRec4[1] = fRec4[0]; fRec3[1] = fRec3[0]; - } - } - }; // clang-format on #endif diff --git a/ceammc/ext/src/fx/fx_distortion.h b/ceammc/ext/src/fx/fx_distortion.h index 9e1c945c3c..56f745cbd8 100644 --- a/ceammc/ext/src/fx/fx_distortion.h +++ b/ceammc/ext/src/fx/fx_distortion.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "fx.distortion" -Code generated with Faust 2.8.5 (https://faust.grame.fr) -Compilation options: cpp, -scal -ftz 0 +Code generated with Faust 2.22.1 (https://faust.grame.fr) +Compilation options: -lang cpp -scal -ftz 0 ------------------------------------------------------------ */ #ifndef __fx_distortion_H__ @@ -14,6 +14,7 @@ Compilation options: cpp, -scal -ftz 0 #include #include +/************************** BEGIN dsp.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -96,23 +97,23 @@ class dsp { * - static class 'classInit': static tables initialization * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void init(int samplingRate) = 0; + virtual void init(int sample_rate) = 0; /** * Init instance state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceInit(int samplingRate) = 0; + virtual void instanceInit(int sample_rate) = 0; /** * Init instance constant state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceConstants(int samplingRate) = 0; + virtual void instanceConstants(int sample_rate) = 0; /* Init default control parameters values */ virtual void instanceResetUserInterface() = 0; @@ -149,8 +150,8 @@ class dsp { * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the number of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) * */ virtual void compute(double /*date_usec*/, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -169,16 +170,16 @@ class decorator_dsp : public dsp { public: - decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + decorator_dsp(dsp* dsp = nullptr):fDSP(dsp) {} virtual ~decorator_dsp() { delete fDSP; } virtual int getNumInputs() { return fDSP->getNumInputs(); } virtual int getNumOutputs() { return fDSP->getNumOutputs(); } virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } virtual int getSampleRate() { return fDSP->getSampleRate(); } - virtual void init(int samplingRate) { fDSP->init(samplingRate); } - virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } - virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void init(int sample_rate) { fDSP->init(sample_rate); } + virtual void instanceInit(int sample_rate) { fDSP->instanceInit(sample_rate); } + virtual void instanceConstants(int sample_rate) { fDSP->instanceConstants(sample_rate); } virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } @@ -233,6 +234,8 @@ class dsp_factory { #endif #endif +/************************** END dsp.h **************************/ +/************************** BEGIN UI.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -272,45 +275,54 @@ class dsp_factory { struct Soundfile; -class UI +template +class UIReal { - + public: - - UI() {} - - virtual ~UI() {} - + + UIReal() {} + virtual ~UIReal() {} + // -- widget's layouts - + virtual void openTabBox(const char* label) = 0; virtual void openHorizontalBox(const char* label) = 0; virtual void openVerticalBox(const char* label) = 0; virtual void closeBox() = 0; - + // -- active widgets - - virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - + + virtual void addButton(const char* label, REAL* zone) = 0; + virtual void addCheckButton(const char* label, REAL* zone) = 0; + virtual void addVerticalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addHorizontalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addNumEntry(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + // -- passive widgets - - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - + + virtual void addHorizontalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + virtual void addVerticalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + // -- soundfiles - + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; - + // -- metadata declarations + + virtual void declare(REAL* zone, const char* key, const char* val) {} +}; + +struct UI : public UIReal +{ - virtual void declare(FAUSTFLOAT*, const char*, const char*) {} + UI() {} + virtual ~UI() {} }; #endif +/************************** END UI.h **************************/ +/************************** BEGIN meta.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -339,11 +351,14 @@ class UI struct Meta { - virtual void declare(const char* key, const char* value) = 0; virtual ~Meta() {}; + virtual void declare(const char* key, const char* value) = 0; + }; #endif +/************************** END meta.h **************************/ +/************************** BEGIN misc.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -366,15 +381,16 @@ struct Meta that work under terms of your choice, so long as this FAUST architecture section is not modified. ************************************************************************/ - + #ifndef __misc__ #define __misc__ #include #include -#include -#include #include +#include +#include +#include using std::max; @@ -382,41 +398,79 @@ using std::min; struct XXXX_Meta : std::map { - void declare(const char* key, const char* value) { (*this)[key]=value; } + void declare(const char* key, const char* value) { (*this)[key] = value; } }; struct MY_Meta : Meta, std::map { - void declare(const char* key, const char* value) { (*this)[key]=value; } + void declare(const char* key, const char* value) { (*this)[key] = value; } }; -inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } +static int lsr(int x, int n) { return int(((unsigned int)x) >> n); } -inline int int2pow2(int x) { int r = 0; while ((1<declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.0"); + m->declare("basics.lib/version", "0.1"); m->declare("ceammc.lib/name", "Ceammc PureData misc utils"); m->declare("ceammc.lib/version", "0.1.1"); m->declare("ceammc_ui.lib/name", "CEAMMC faust default UI elements"); m->declare("ceammc_ui.lib/version", "0.1.1"); - m->declare("filename", "fx_distortion"); + m->declare("filename", "fx_distortion.dsp"); + m->declare("filters.lib/dcblocker:author", "Julius O. Smith III"); + m->declare("filters.lib/dcblocker:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/dcblocker:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/lowpass0_highpass1", "Copyright (C) 2003-2019 by Julius O. Smith III "); m->declare("filters.lib/name", "Faust Filters Library"); - m->declare("filters.lib/version", "0.0"); + m->declare("filters.lib/pole:author", "Julius O. Smith III"); + m->declare("filters.lib/pole:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/pole:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/zero:author", "Julius O. Smith III"); + m->declare("filters.lib/zero:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/zero:license", "MIT-style STK-4.3 license"); m->declare("misceffects.lib/name", "Faust Math Library"); m->declare("misceffects.lib/version", "2.0"); m->declare("name", "fx.distortion"); @@ -495,15 +558,13 @@ class fx_distortion : public dsp { virtual int getNumInputs() { return 1; - } virtual int getNumOutputs() { return 1; - } virtual int getInputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -512,14 +573,12 @@ class fx_distortion : public dsp { rate = -1; break; } - } return rate; - } virtual int getOutputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -528,19 +587,15 @@ class fx_distortion : public dsp { rate = -1; break; } - } return rate; - } - static void classInit(int samplingFreq) { - + static void classInit(int sample_rate) { } - virtual void instanceConstants(int samplingFreq) { - fSamplingFreq = samplingFreq; - + virtual void instanceConstants(int sample_rate) { + fSampleRate = sample_rate; } virtual void instanceResetUserInterface() { @@ -548,39 +603,32 @@ class fx_distortion : public dsp { fHslider0 = FAUSTFLOAT(1.0f); fVslider0 = FAUSTFLOAT(0.0f); fVslider1 = FAUSTFLOAT(0.5f); - } virtual void instanceClear() { for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { fRec0[l0] = 0.0f; - } for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { fRec2[l1] = 0.0f; - } for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { fRec3[l2] = 0.0f; - } for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { fVec0[l3] = 0.0f; - } for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { fRec1[l4] = 0.0f; - } - } - virtual void init(int samplingFreq) { - classInit(samplingFreq); - instanceInit(samplingFreq); + virtual void init(int sample_rate) { + classInit(sample_rate); + instanceInit(sample_rate); } - virtual void instanceInit(int samplingFreq) { - instanceConstants(samplingFreq); + virtual void instanceInit(int sample_rate) { + instanceConstants(sample_rate); instanceResetUserInterface(); instanceClear(); } @@ -588,9 +636,9 @@ class fx_distortion : public dsp { virtual fx_distortion* clone() { return new fx_distortion(); } + virtual int getSampleRate() { - return fSamplingFreq; - + return fSampleRate; } virtual void buildUserInterface(UI* ui_interface) { @@ -601,7 +649,6 @@ class fx_distortion : public dsp { ui_interface->addHorizontalSlider("drywet", &fHslider0, 1.0f, 0.0f, 1.0f, 0.00999999978f); ui_interface->addVerticalSlider("offset", &fVslider0, 0.0f, 0.0f, 0.5f, 0.00100000005f); ui_interface->closeBox(); - } virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { @@ -612,27 +659,24 @@ class fx_distortion : public dsp { float fSlow2 = (0.00100000005f * float(fVslider0)); float fSlow3 = (0.00100000005f * float(fVslider1)); for (int i = 0; (i < count); i = (i + 1)) { + float fTemp0 = float(input0[i]); + float fTemp1 = (iSlow0 ? 0.0f : fTemp0); fRec0[0] = (fSlow1 + (0.999000013f * fRec0[1])); fRec2[0] = (fSlow2 + (0.999000013f * fRec2[1])); fRec3[0] = (fSlow3 + (0.999000013f * fRec3[1])); - float fTemp0 = float(input0[i]); - float fTemp1 = (iSlow0?0.0f:fTemp0); - float fTemp2 = std::max(-1.0f, std::min(1.0f, (fRec2[0] + (std::pow(10.0f, (2.0f * fRec3[0])) * fTemp1)))); + float fTemp2 = std::max(-1.0f, std::min(1.0f, (fRec2[0] + (fTemp1 * std::pow(10.0f, (2.0f * fRec3[0])))))); float fTemp3 = (fTemp2 * (1.0f - (0.333333343f * fx_distortion_faustpower2_f(fTemp2)))); fVec0[0] = fTemp3; fRec1[0] = (((0.995000005f * fRec1[1]) + fTemp3) - fVec0[1]); - output0[i] = FAUSTFLOAT((iSlow0?fTemp0:((fRec0[0] * fRec1[0]) + ((1.0f - fRec0[0]) * fTemp1)))); + output0[i] = FAUSTFLOAT((iSlow0 ? fTemp0 : ((fTemp1 * (1.0f - fRec0[0])) + (fRec0[0] * fRec1[0])))); fRec0[1] = fRec0[0]; fRec2[1] = fRec2[0]; fRec3[1] = fRec3[0]; fVec0[1] = fVec0[0]; fRec1[1] = fRec1[0]; - } - } - }; // clang-format on #endif diff --git a/ceammc/ext/src/fx/fx_distortion1.h b/ceammc/ext/src/fx/fx_distortion1.h index 0f70dee9e4..0bfd254906 100644 --- a/ceammc/ext/src/fx/fx_distortion1.h +++ b/ceammc/ext/src/fx/fx_distortion1.h @@ -4,8 +4,8 @@ copyright: "(c)brummer 2008" license: "BSD" name: "fx.distortion1" version: "0.01" -Code generated with Faust 2.17.3 (https://faust.grame.fr) -Compilation options: cpp, -scal -ftz 0 +Code generated with Faust 2.22.1 (https://faust.grame.fr) +Compilation options: -lang cpp -scal -ftz 0 ------------------------------------------------------------ */ #ifndef __fx_distortion1_H__ @@ -18,6 +18,7 @@ Compilation options: cpp, -scal -ftz 0 #include #include +/************************** BEGIN dsp.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -173,7 +174,7 @@ class decorator_dsp : public dsp { public: - decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + decorator_dsp(dsp* dsp = nullptr):fDSP(dsp) {} virtual ~decorator_dsp() { delete fDSP; } virtual int getNumInputs() { return fDSP->getNumInputs(); } @@ -237,6 +238,8 @@ class dsp_factory { #endif #endif +/************************** END dsp.h **************************/ +/************************** BEGIN UI.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -314,16 +317,16 @@ class UIReal virtual void declare(REAL* zone, const char* key, const char* val) {} }; -class UI : public UIReal +struct UI : public UIReal { - public: - UI() {} virtual ~UI() {} }; #endif +/************************** END UI.h **************************/ +/************************** BEGIN meta.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -358,6 +361,8 @@ struct Meta }; #endif +/************************** END meta.h **************************/ +/************************** BEGIN misc.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -380,7 +385,7 @@ struct Meta that work under terms of your choice, so long as this FAUST architecture section is not modified. ************************************************************************/ - + #ifndef __misc__ #define __misc__ @@ -388,6 +393,8 @@ struct Meta #include #include #include +#include +#include using std::max; @@ -409,27 +416,65 @@ static int int2pow2(int x) { int r = 0; while ((1<declare("HighShelf.dsp/id", "HighShelf"); m->declare("author", "brummer"); m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.0"); + m->declare("basics.lib/version", "0.1"); m->declare("copyright", "(c)brummer 2008"); m->declare("delays.lib/name", "Faust Delay Library"); m->declare("delays.lib/version", "0.1"); - m->declare("filename", "fx_distortion1"); + m->declare("filename", "fx_distortion1.dsp"); + m->declare("filters.lib/dcblockerat:author", "Julius O. Smith III"); + m->declare("filters.lib/dcblockerat:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/dcblockerat:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/fir:author", "Julius O. Smith III"); + m->declare("filters.lib/fir:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/fir:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/highpass:author", "Julius O. Smith III"); + m->declare("filters.lib/highpass:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/iir:author", "Julius O. Smith III"); + m->declare("filters.lib/iir:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/iir:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/lowpass0_highpass1", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/lowpass0_highpass1:author", "Julius O. Smith III"); + m->declare("filters.lib/lowpass:author", "Julius O. Smith III"); + m->declare("filters.lib/lowpass:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/lowpass:license", "MIT-style STK-4.3 license"); m->declare("filters.lib/name", "Faust Filters Library"); - m->declare("filters.lib/version", "0.0"); + m->declare("filters.lib/pole:author", "Julius O. Smith III"); + m->declare("filters.lib/pole:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/pole:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/tf1:author", "Julius O. Smith III"); + m->declare("filters.lib/tf1:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/tf1:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/tf1s:author", "Julius O. Smith III"); + m->declare("filters.lib/tf1s:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/tf1s:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/tf2:author", "Julius O. Smith III"); + m->declare("filters.lib/tf2:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/tf2:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/tf2s:author", "Julius O. Smith III"); + m->declare("filters.lib/tf2s:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/tf2s:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/zero:author", "Julius O. Smith III"); + m->declare("filters.lib/zero:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/zero:license", "MIT-style STK-4.3 license"); m->declare("license", "BSD"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); @@ -589,15 +667,13 @@ class fx_distortion1 : public dsp { virtual int getNumInputs() { return 1; - } virtual int getNumOutputs() { return 1; - } virtual int getInputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -606,14 +682,12 @@ class fx_distortion1 : public dsp { rate = -1; break; } - } return rate; - } virtual int getOutputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -622,14 +696,11 @@ class fx_distortion1 : public dsp { rate = -1; break; } - } return rate; - } static void classInit(int sample_rate) { - } virtual void instanceConstants(int sample_rate) { @@ -648,7 +719,6 @@ class fx_distortion1 : public dsp { fConst11 = (2.0f * (-0.683772206f - fConst8)); fConst12 = (0.316227764f * (fConst5 + (1.31622779f - fConst4))); fConst13 = (0.316227764f * (1.31622779f - fConst6)); - } virtual void instanceResetUserInterface() { @@ -675,175 +745,132 @@ class fx_distortion1 : public dsp { fEntry4 = FAUSTFLOAT(250.0f); fVslider13 = FAUSTFLOAT(10.0f); fVslider14 = FAUSTFLOAT(1.0f); - } virtual void instanceClear() { for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { iVec0[l0] = 0; - } for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { fRec4[l1] = 0.0f; - } for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { fRec6[l2] = 0.0f; - } for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { fRec7[l3] = 0.0f; - } for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { fVec1[l4] = 0.0f; - } for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { fRec17[l5] = 0.0f; - } for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { fVec2[l6] = 0.0f; - } for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) { fRec16[l7] = 0.0f; - } for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { fRec15[l8] = 0.0f; - } for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { fVec3[l9] = 0.0f; - } for (int l10 = 0; (l10 < 2); l10 = (l10 + 1)) { fRec14[l10] = 0.0f; - } for (int l11 = 0; (l11 < 2); l11 = (l11 + 1)) { fVec4[l11] = 0.0f; - } for (int l12 = 0; (l12 < 2); l12 = (l12 + 1)) { fRec13[l12] = 0.0f; - } for (int l13 = 0; (l13 < 3); l13 = (l13 + 1)) { fRec12[l13] = 0.0f; - } for (int l14 = 0; (l14 < 3); l14 = (l14 + 1)) { fRec11[l14] = 0.0f; - } for (int l15 = 0; (l15 < 3); l15 = (l15 + 1)) { fRec10[l15] = 0.0f; - } for (int l16 = 0; (l16 < 2); l16 = (l16 + 1)) { fVec5[l16] = 0.0f; - } for (int l17 = 0; (l17 < 2); l17 = (l17 + 1)) { fRec9[l17] = 0.0f; - } for (int l18 = 0; (l18 < 3); l18 = (l18 + 1)) { fRec8[l18] = 0.0f; - } for (int l19 = 0; (l19 < 2); l19 = (l19 + 1)) { fRec18[l19] = 0.0f; - } for (int l20 = 0; (l20 < 2); l20 = (l20 + 1)) { fRec22[l20] = 0.0f; - } for (int l21 = 0; (l21 < 3); l21 = (l21 + 1)) { fRec21[l21] = 0.0f; - } for (int l22 = 0; (l22 < 2); l22 = (l22 + 1)) { fVec6[l22] = 0.0f; - } for (int l23 = 0; (l23 < 2); l23 = (l23 + 1)) { fRec20[l23] = 0.0f; - } for (int l24 = 0; (l24 < 3); l24 = (l24 + 1)) { fRec19[l24] = 0.0f; - } for (int l25 = 0; (l25 < 2); l25 = (l25 + 1)) { fRec23[l25] = 0.0f; - } for (int l26 = 0; (l26 < 2); l26 = (l26 + 1)) { fRec27[l26] = 0.0f; - } for (int l27 = 0; (l27 < 3); l27 = (l27 + 1)) { fRec26[l27] = 0.0f; - } for (int l28 = 0; (l28 < 2); l28 = (l28 + 1)) { fVec7[l28] = 0.0f; - } for (int l29 = 0; (l29 < 2); l29 = (l29 + 1)) { fRec25[l29] = 0.0f; - } for (int l30 = 0; (l30 < 3); l30 = (l30 + 1)) { fRec24[l30] = 0.0f; - } for (int l31 = 0; (l31 < 2); l31 = (l31 + 1)) { fRec28[l31] = 0.0f; - } for (int l32 = 0; (l32 < 2); l32 = (l32 + 1)) { fRec30[l32] = 0.0f; - } for (int l33 = 0; (l33 < 3); l33 = (l33 + 1)) { fRec29[l33] = 0.0f; - } for (int l34 = 0; (l34 < 3); l34 = (l34 + 1)) { fRec5[l34] = 0.0f; - } for (int l35 = 0; (l35 < 2); l35 = (l35 + 1)) { fVec8[l35] = 0.0f; - } for (int l36 = 0; (l36 < 2); l36 = (l36 + 1)) { fRec3[l36] = 0.0f; - } for (int l37 = 0; (l37 < 2); l37 = (l37 + 1)) { fVec9[l37] = 0.0f; - } for (int l38 = 0; (l38 < 2); l38 = (l38 + 1)) { fRec2[l38] = 0.0f; - } for (int l39 = 0; (l39 < 3); l39 = (l39 + 1)) { fRec1[l39] = 0.0f; - } for (int l40 = 0; (l40 < 3); l40 = (l40 + 1)) { fRec0[l40] = 0.0f; - } - } virtual void init(int sample_rate) { @@ -862,7 +889,6 @@ class fx_distortion1 : public dsp { virtual int getSampleRate() { return fSampleRate; - } virtual void buildUserInterface(UI* ui_interface) { @@ -907,7 +933,6 @@ class fx_distortion1 : public dsp { ui_interface->addVerticalSlider("trigger", &fVslider7, 0.119999997f, 0.0f, 1.0f, 0.00999999978f); ui_interface->addVerticalSlider("vibrato", &fVslider8, 1.0f, 0.0f, 1.0f, 0.00999999978f); ui_interface->closeBox(); - } virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { @@ -929,7 +954,7 @@ class fx_distortion1 : public dsp { float fSlow13 = (((fSlow12 + 1.0f) / fSlow11) + 1.0f); float fSlow14 = (std::pow(10.0f, (2.0f * (float(fVslider5) * fSlow10))) / fSlow13); float fSlow15 = fx_distortion1_faustpower2_f(fSlow11); - float fSlow16 = (0.0f - (2.0f / fSlow15)); + float fSlow16 = (1.0f / fSlow15); float fSlow17 = (fSlow12 + 1.0f); float fSlow18 = (1.0f / (fSlow11 * fSlow17)); int iSlow19 = int(float(fCheckbox1)); @@ -956,8 +981,8 @@ class fx_distortion1 : public dsp { float fSlow40 = (fSlow39 / fSlow17); float fSlow41 = (1.0f / fSlow13); float fSlow42 = (((fSlow12 + -1.0f) / fSlow11) + 1.0f); - float fSlow43 = (1.0f / fSlow15); - float fSlow44 = (2.0f * (1.0f - fSlow43)); + float fSlow43 = (2.0f * (1.0f - fSlow16)); + float fSlow44 = (0.0f - (2.0f / fSlow15)); float fSlow45 = (0.00100000005f * std::pow(10.0f, (0.0500000007f * (float(fVslider9) + -10.0f)))); float fSlow46 = std::tan((fConst1 * float(fEntry3))); float fSlow47 = (1.0f / fSlow46); @@ -1019,11 +1044,11 @@ class fx_distortion1 : public dsp { float fTemp6 = (((fConst9 * fRec10[1]) + (fConst12 * fRec10[0])) + (fConst13 * fRec10[2])); fVec5[0] = fTemp6; fRec9[0] = ((fConst7 * ((fSlow18 * fTemp6) + (fSlow38 * fVec5[1]))) - (fSlow40 * fRec9[1])); - fRec8[0] = (fRec9[0] - (fSlow41 * ((fSlow42 * fRec8[2]) + (fSlow44 * fRec8[1])))); - float fTemp7 = std::max(-1.0f, std::min(1.0f, (fSlow9 + (fSlow14 * (((fSlow16 * fRec8[1]) + (fSlow43 * fRec8[0])) + (fSlow43 * fRec8[2])))))); + fRec8[0] = (fRec9[0] - (fSlow41 * ((fSlow42 * fRec8[2]) + (fSlow43 * fRec8[1])))); + float fTemp7 = std::max(-1.0f, std::min(1.0f, (fSlow9 + (fSlow14 * (((fSlow16 * fRec8[0]) + (fSlow44 * fRec8[1])) + (fSlow16 * fRec8[2])))))); fRec18[0] = (fSlow45 + (0.999000013f * fRec18[1])); fRec22[0] = (0.0f - (fSlow54 * ((fSlow39 * fRec22[1]) - (fConst7 * (fTemp6 + fVec5[1]))))); - fRec21[0] = (fRec22[0] - (fSlow41 * ((fSlow42 * fRec21[2]) + (fSlow44 * fRec21[1])))); + fRec21[0] = (fRec22[0] - (fSlow41 * ((fSlow42 * fRec21[2]) + (fSlow43 * fRec21[1])))); float fTemp8 = (fRec21[2] + (fRec21[0] + (2.0f * fRec21[1]))); float fTemp9 = (fSlow41 * fTemp8); fVec6[0] = fTemp9; @@ -1106,9 +1131,7 @@ class fx_distortion1 : public dsp { fRec1[1] = fRec1[0]; fRec0[2] = fRec0[1]; fRec0[1] = fRec0[0]; - } - } }; diff --git a/ceammc/ext/src/fx/fx_distortion2.h b/ceammc/ext/src/fx/fx_distortion2.h index a30ea33a6d..57d235914d 100644 --- a/ceammc/ext/src/fx/fx_distortion2.h +++ b/ceammc/ext/src/fx/fx_distortion2.h @@ -4,8 +4,8 @@ copyright: "(c)brummer 2008" license: "BSD" name: "fx.distortion2" version: "0.01" -Code generated with Faust 2.17.3 (https://faust.grame.fr) -Compilation options: cpp, -scal -ftz 0 +Code generated with Faust 2.22.1 (https://faust.grame.fr) +Compilation options: -lang cpp -scal -ftz 0 ------------------------------------------------------------ */ #ifndef __fx_distortion2_H__ @@ -18,6 +18,7 @@ Compilation options: cpp, -scal -ftz 0 #include #include +/************************** BEGIN dsp.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -173,7 +174,7 @@ class decorator_dsp : public dsp { public: - decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + decorator_dsp(dsp* dsp = nullptr):fDSP(dsp) {} virtual ~decorator_dsp() { delete fDSP; } virtual int getNumInputs() { return fDSP->getNumInputs(); } @@ -237,6 +238,8 @@ class dsp_factory { #endif #endif +/************************** END dsp.h **************************/ +/************************** BEGIN UI.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -314,16 +317,16 @@ class UIReal virtual void declare(REAL* zone, const char* key, const char* val) {} }; -class UI : public UIReal +struct UI : public UIReal { - public: - UI() {} virtual ~UI() {} }; #endif +/************************** END UI.h **************************/ +/************************** BEGIN meta.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -358,6 +361,8 @@ struct Meta }; #endif +/************************** END meta.h **************************/ +/************************** BEGIN misc.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -380,7 +385,7 @@ struct Meta that work under terms of your choice, so long as this FAUST architecture section is not modified. ************************************************************************/ - + #ifndef __misc__ #define __misc__ @@ -388,6 +393,8 @@ struct Meta #include #include #include +#include +#include using std::max; @@ -409,27 +416,65 @@ static int int2pow2(int x) { int r = 0; while ((1<declare("HighShelf.dsp/id", "HighShelf"); m->declare("author", "brummer"); m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.0"); + m->declare("basics.lib/version", "0.1"); m->declare("copyright", "(c)brummer 2008"); m->declare("delays.lib/name", "Faust Delay Library"); m->declare("delays.lib/version", "0.1"); - m->declare("filename", "fx_distortion2"); + m->declare("filename", "fx_distortion2.dsp"); + m->declare("filters.lib/dcblockerat:author", "Julius O. Smith III"); + m->declare("filters.lib/dcblockerat:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/dcblockerat:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/fir:author", "Julius O. Smith III"); + m->declare("filters.lib/fir:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/fir:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/highpass:author", "Julius O. Smith III"); + m->declare("filters.lib/highpass:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/iir:author", "Julius O. Smith III"); + m->declare("filters.lib/iir:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/iir:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/lowpass0_highpass1", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/lowpass0_highpass1:author", "Julius O. Smith III"); + m->declare("filters.lib/lowpass:author", "Julius O. Smith III"); + m->declare("filters.lib/lowpass:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/lowpass:license", "MIT-style STK-4.3 license"); m->declare("filters.lib/name", "Faust Filters Library"); - m->declare("filters.lib/version", "0.0"); + m->declare("filters.lib/pole:author", "Julius O. Smith III"); + m->declare("filters.lib/pole:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/pole:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/tf1:author", "Julius O. Smith III"); + m->declare("filters.lib/tf1:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/tf1:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/tf1s:author", "Julius O. Smith III"); + m->declare("filters.lib/tf1s:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/tf1s:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/tf2:author", "Julius O. Smith III"); + m->declare("filters.lib/tf2:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/tf2:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/tf2s:author", "Julius O. Smith III"); + m->declare("filters.lib/tf2s:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/tf2s:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/zero:author", "Julius O. Smith III"); + m->declare("filters.lib/zero:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/zero:license", "MIT-style STK-4.3 license"); m->declare("license", "BSD"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); @@ -561,15 +639,13 @@ class fx_distortion2 : public dsp { virtual int getNumInputs() { return 1; - } virtual int getNumOutputs() { return 1; - } virtual int getInputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -578,14 +654,12 @@ class fx_distortion2 : public dsp { rate = -1; break; } - } return rate; - } virtual int getOutputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -594,14 +668,11 @@ class fx_distortion2 : public dsp { rate = -1; break; } - } return rate; - } static void classInit(int sample_rate) { - } virtual void instanceConstants(int sample_rate) { @@ -620,7 +691,6 @@ class fx_distortion2 : public dsp { fConst11 = (2.0f * (-0.683772206f - fConst8)); fConst12 = (0.316227764f * (fConst5 + (1.31622779f - fConst4))); fConst13 = (0.316227764f * (1.31622779f - fConst6)); - } virtual void instanceResetUserInterface() { @@ -636,99 +706,75 @@ class fx_distortion2 : public dsp { fCheckbox2 = FAUSTFLOAT(0.0f); fVslider5 = FAUSTFLOAT(0.12f); fVslider6 = FAUSTFLOAT(1.0f); - } virtual void instanceClear() { for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { iVec0[l0] = 0; - } for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { fRec4[l1] = 0.0f; - } for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { fRec6[l2] = 0.0f; - } for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { fVec1[l3] = 0.0f; - } for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { fRec14[l4] = 0.0f; - } for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { fVec2[l5] = 0.0f; - } for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { fRec13[l6] = 0.0f; - } for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) { fRec12[l7] = 0.0f; - } for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { fVec3[l8] = 0.0f; - } for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { fRec11[l9] = 0.0f; - } for (int l10 = 0; (l10 < 2); l10 = (l10 + 1)) { fVec4[l10] = 0.0f; - } for (int l11 = 0; (l11 < 2); l11 = (l11 + 1)) { fRec10[l11] = 0.0f; - } for (int l12 = 0; (l12 < 3); l12 = (l12 + 1)) { fRec9[l12] = 0.0f; - } for (int l13 = 0; (l13 < 3); l13 = (l13 + 1)) { fRec8[l13] = 0.0f; - } for (int l14 = 0; (l14 < 3); l14 = (l14 + 1)) { fRec7[l14] = 0.0f; - } for (int l15 = 0; (l15 < 3); l15 = (l15 + 1)) { fRec5[l15] = 0.0f; - } for (int l16 = 0; (l16 < 2); l16 = (l16 + 1)) { fVec5[l16] = 0.0f; - } for (int l17 = 0; (l17 < 2); l17 = (l17 + 1)) { fRec3[l17] = 0.0f; - } for (int l18 = 0; (l18 < 2); l18 = (l18 + 1)) { fVec6[l18] = 0.0f; - } for (int l19 = 0; (l19 < 2); l19 = (l19 + 1)) { fRec2[l19] = 0.0f; - } for (int l20 = 0; (l20 < 3); l20 = (l20 + 1)) { fRec1[l20] = 0.0f; - } for (int l21 = 0; (l21 < 3); l21 = (l21 + 1)) { fRec0[l21] = 0.0f; - } - } virtual void init(int sample_rate) { @@ -747,7 +793,6 @@ class fx_distortion2 : public dsp { virtual int getSampleRate() { return fSampleRate; - } virtual void buildUserInterface(UI* ui_interface) { @@ -774,7 +819,6 @@ class fx_distortion2 : public dsp { ui_interface->addVerticalSlider("trigger", &fVslider5, 0.119999997f, 0.0f, 1.0f, 0.00999999978f); ui_interface->addVerticalSlider("vibrato", &fVslider6, 1.0f, 0.0f, 1.0f, 0.00999999978f); ui_interface->closeBox(); - } virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { @@ -797,12 +841,12 @@ class fx_distortion2 : public dsp { float fSlow14 = (0.0f - (1.0f / (fSlow11 * fSlow13))); float fSlow15 = (1.0f / std::tan((fConst1 * float(fEntry1)))); float fSlow16 = (1.0f / (fSlow15 + 1.0f)); - int iSlow17 = int(float(fCheckbox2)); - float fSlow18 = (1.0f - float(fVslider5)); - float fSlow19 = float(fVslider6); - int iSlow20 = int(std::min(4096.0f, std::max(0.0f, (fSlow19 + -1.0f)))); - int iSlow21 = int(std::min(4096.0f, std::max(0.0f, fSlow19))); - float fSlow22 = (1.0f - fSlow15); + float fSlow17 = (1.0f - fSlow15); + int iSlow18 = int(float(fCheckbox2)); + float fSlow19 = (1.0f - float(fVslider5)); + float fSlow20 = float(fVslider6); + int iSlow21 = int(std::min(4096.0f, std::max(0.0f, (fSlow20 + -1.0f)))); + int iSlow22 = int(std::min(4096.0f, std::max(0.0f, fSlow20))); float fSlow23 = (1.0f / fSlow13); float fSlow24 = (1.0f - fSlow12); float fSlow25 = (1.0f - fSlow5); @@ -814,14 +858,14 @@ class fx_distortion2 : public dsp { fRec4[0] = ((9.99999968e-21f * float((1 - iVec0[1]))) - fRec4[1]); fRec6[0] = (fSlow7 + (0.999000013f * fRec6[1])); float fTemp0 = float(input0[i]); - float fTemp1 = (fTemp0 + (fSlow18 * fRec14[1])); + float fTemp1 = (fTemp0 + (fSlow19 * fRec14[1])); fVec1[0] = fTemp1; - fRec14[0] = (0.5f * (fVec1[iSlow20] + fVec1[iSlow21])); - float fTemp2 = ((iSlow17 ? fRec14[0] : fTemp0) + fRec4[0]); + fRec14[0] = (0.5f * (fVec1[iSlow21] + fVec1[iSlow22])); + float fTemp2 = ((iSlow18 ? fRec14[0] : fTemp0) + fRec4[0]); float fTemp3 = (fRec4[0] + (iSlow10 ? 0.0f : fTemp2)); fVec2[0] = fTemp3; - fRec13[0] = (fSlow16 * ((fTemp3 + fVec2[1]) - (fSlow22 * fRec13[1]))); - fRec12[0] = ((fSlow14 * fRec13[1]) + (fSlow23 * ((fSlow12 * fRec13[0]) - (fSlow24 * fRec12[1])))); + fRec13[0] = (0.0f - (fSlow16 * ((fSlow17 * fRec13[1]) - (fTemp3 + fVec2[1])))); + fRec12[0] = ((fSlow14 * fRec13[1]) - (fSlow23 * ((fSlow24 * fRec12[1]) - (fSlow12 * fRec13[0])))); float fTemp4 = ((iSlow10 ? fTemp2 : fRec12[0]) + 9.99999968e-21f); float fTemp5 = (fRec4[0] + (iSlow0 ? 0.0f : fTemp4)); fVec3[0] = (fSlow6 * fTemp5); @@ -870,9 +914,7 @@ class fx_distortion2 : public dsp { fRec1[1] = fRec1[0]; fRec0[2] = fRec0[1]; fRec0[1] = fRec0[0]; - } - } }; diff --git a/ceammc/ext/src/fx/fx_distortion3.h b/ceammc/ext/src/fx/fx_distortion3.h index afdd05ae17..656f81a460 100644 --- a/ceammc/ext/src/fx/fx_distortion3.h +++ b/ceammc/ext/src/fx/fx_distortion3.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "fx.distortion3" -Code generated with Faust 2.17.3 (https://faust.grame.fr) -Compilation options: cpp, -scal -ftz 0 +Code generated with Faust 2.22.1 (https://faust.grame.fr) +Compilation options: -lang cpp -scal -ftz 0 ------------------------------------------------------------ */ #ifndef __fx_distortion3_H__ @@ -14,6 +14,7 @@ Compilation options: cpp, -scal -ftz 0 #include #include +/************************** BEGIN dsp.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -169,7 +170,7 @@ class decorator_dsp : public dsp { public: - decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + decorator_dsp(dsp* dsp = nullptr):fDSP(dsp) {} virtual ~decorator_dsp() { delete fDSP; } virtual int getNumInputs() { return fDSP->getNumInputs(); } @@ -233,6 +234,8 @@ class dsp_factory { #endif #endif +/************************** END dsp.h **************************/ +/************************** BEGIN UI.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -310,16 +313,16 @@ class UIReal virtual void declare(REAL* zone, const char* key, const char* val) {} }; -class UI : public UIReal +struct UI : public UIReal { - public: - UI() {} virtual ~UI() {} }; #endif +/************************** END UI.h **************************/ +/************************** BEGIN meta.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -354,6 +357,8 @@ struct Meta }; #endif +/************************** END meta.h **************************/ +/************************** BEGIN misc.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -376,7 +381,7 @@ struct Meta that work under terms of your choice, so long as this FAUST architecture section is not modified. ************************************************************************/ - + #ifndef __misc__ #define __misc__ @@ -384,6 +389,8 @@ struct Meta #include #include #include +#include +#include using std::max; @@ -405,27 +412,65 @@ static int int2pow2(int x) { int r = 0; while ((1<declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.0"); + m->declare("basics.lib/version", "0.1"); m->declare("category", "Distortion"); m->declare("ceammc.lib/name", "Ceammc PureData misc utils"); m->declare("ceammc.lib/version", "0.1.1"); m->declare("ceammc_ui.lib/name", "CEAMMC faust default UI elements"); m->declare("ceammc_ui.lib/version", "0.1.1"); m->declare("description", "A simple Wavesharper distortion"); - m->declare("filename", "fx_distortion3"); + m->declare("filename", "fx_distortion3.dsp"); + m->declare("filters.lib/fir:author", "Julius O. Smith III"); + m->declare("filters.lib/fir:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/fir:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/highpass:author", "Julius O. Smith III"); + m->declare("filters.lib/highpass:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/iir:author", "Julius O. Smith III"); + m->declare("filters.lib/iir:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/iir:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/lowpass0_highpass1", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/lowpass0_highpass1:author", "Julius O. Smith III"); + m->declare("filters.lib/lowpass:author", "Julius O. Smith III"); + m->declare("filters.lib/lowpass:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/lowpass:license", "MIT-style STK-4.3 license"); m->declare("filters.lib/name", "Faust Filters Library"); - m->declare("filters.lib/version", "0.0"); + m->declare("filters.lib/tf1:author", "Julius O. Smith III"); + m->declare("filters.lib/tf1:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/tf1:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/tf1s:author", "Julius O. Smith III"); + m->declare("filters.lib/tf1s:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/tf1s:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/tf2:author", "Julius O. Smith III"); + m->declare("filters.lib/tf2:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/tf2:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/tf2s:author", "Julius O. Smith III"); + m->declare("filters.lib/tf2s:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/tf2s:license", "MIT-style STK-4.3 license"); m->declare("id", "distortion3"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); @@ -521,15 +590,13 @@ class fx_distortion3 : public dsp { virtual int getNumInputs() { return 1; - } virtual int getNumOutputs() { return 1; - } virtual int getInputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -538,14 +605,12 @@ class fx_distortion3 : public dsp { rate = -1; break; } - } return rate; - } virtual int getOutputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -554,14 +619,11 @@ class fx_distortion3 : public dsp { rate = -1; break; } - } return rate; - } static void classInit(int sample_rate) { - } virtual void instanceConstants(int sample_rate) { @@ -571,7 +633,6 @@ class fx_distortion3 : public dsp { fConst2 = (1.0f / std::tan((20520.8828f / fConst0))); fConst3 = (1.0f / (fConst2 + 1.0f)); fConst4 = (1.0f - fConst2); - } virtual void instanceResetUserInterface() { @@ -581,43 +642,33 @@ class fx_distortion3 : public dsp { fVslider1 = FAUSTFLOAT(30.0f); fVslider2 = FAUSTFLOAT(0.0f); fVslider3 = FAUSTFLOAT(0.5f); - } virtual void instanceClear() { for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { fRec0[l0] = 0.0f; - } for (int l1 = 0; (l1 < 3); l1 = (l1 + 1)) { fRec4[l1] = 0.0f; - } for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { fVec0[l2] = 0.0f; - } for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { fRec3[l3] = 0.0f; - } for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { fRec5[l4] = 0.0f; - } for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { fRec6[l5] = 0.0f; - } for (int l6 = 0; (l6 < 4); l6 = (l6 + 1)) { fRec2[l6] = 0.0f; - } for (int l7 = 0; (l7 < 3); l7 = (l7 + 1)) { fRec1[l7] = 0.0f; - } - } virtual void init(int sample_rate) { @@ -636,7 +687,6 @@ class fx_distortion3 : public dsp { virtual int getSampleRate() { return fSampleRate; - } virtual void buildUserInterface(UI* ui_interface) { @@ -653,7 +703,6 @@ class fx_distortion3 : public dsp { ui_interface->declare(&fVslider0, "unit", "Hz"); ui_interface->addVerticalSlider("lp_freq", &fVslider0, 10000.0f, 1000.0f, 20000.0f, 1.08000004f); ui_interface->closeBox(); - } virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { @@ -701,13 +750,10 @@ class fx_distortion3 : public dsp { fRec6[1] = fRec6[0]; for (int j0 = 3; (j0 > 0); j0 = (j0 - 1)) { fRec2[j0] = fRec2[(j0 - 1)]; - } fRec1[2] = fRec1[1]; fRec1[1] = fRec1[0]; - } - } }; diff --git a/ceammc/ext/src/fx/fx_drive.h b/ceammc/ext/src/fx/fx_drive.h index a23840566a..2372695dc6 100644 --- a/ceammc/ext/src/fx/fx_drive.h +++ b/ceammc/ext/src/fx/fx_drive.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "fx.drive" -Code generated with Faust 2.8.5 (https://faust.grame.fr) -Compilation options: cpp, -scal -ftz 0 +Code generated with Faust 2.22.1 (https://faust.grame.fr) +Compilation options: -lang cpp -scal -ftz 0 ------------------------------------------------------------ */ #ifndef __fx_drive_H__ @@ -14,6 +14,7 @@ Compilation options: cpp, -scal -ftz 0 #include #include +/************************** BEGIN dsp.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -96,23 +97,23 @@ class dsp { * - static class 'classInit': static tables initialization * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void init(int samplingRate) = 0; + virtual void init(int sample_rate) = 0; /** * Init instance state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceInit(int samplingRate) = 0; + virtual void instanceInit(int sample_rate) = 0; /** * Init instance constant state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceConstants(int samplingRate) = 0; + virtual void instanceConstants(int sample_rate) = 0; /* Init default control parameters values */ virtual void instanceResetUserInterface() = 0; @@ -149,8 +150,8 @@ class dsp { * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the number of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) * */ virtual void compute(double /*date_usec*/, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -169,16 +170,16 @@ class decorator_dsp : public dsp { public: - decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + decorator_dsp(dsp* dsp = nullptr):fDSP(dsp) {} virtual ~decorator_dsp() { delete fDSP; } virtual int getNumInputs() { return fDSP->getNumInputs(); } virtual int getNumOutputs() { return fDSP->getNumOutputs(); } virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } virtual int getSampleRate() { return fDSP->getSampleRate(); } - virtual void init(int samplingRate) { fDSP->init(samplingRate); } - virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } - virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void init(int sample_rate) { fDSP->init(sample_rate); } + virtual void instanceInit(int sample_rate) { fDSP->instanceInit(sample_rate); } + virtual void instanceConstants(int sample_rate) { fDSP->instanceConstants(sample_rate); } virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } @@ -233,6 +234,8 @@ class dsp_factory { #endif #endif +/************************** END dsp.h **************************/ +/************************** BEGIN UI.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -272,45 +275,54 @@ class dsp_factory { struct Soundfile; -class UI +template +class UIReal { - + public: - - UI() {} - - virtual ~UI() {} - + + UIReal() {} + virtual ~UIReal() {} + // -- widget's layouts - + virtual void openTabBox(const char* label) = 0; virtual void openHorizontalBox(const char* label) = 0; virtual void openVerticalBox(const char* label) = 0; virtual void closeBox() = 0; - + // -- active widgets - - virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - + + virtual void addButton(const char* label, REAL* zone) = 0; + virtual void addCheckButton(const char* label, REAL* zone) = 0; + virtual void addVerticalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addHorizontalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addNumEntry(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + // -- passive widgets - - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - + + virtual void addHorizontalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + virtual void addVerticalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + // -- soundfiles - + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; - + // -- metadata declarations + + virtual void declare(REAL* zone, const char* key, const char* val) {} +}; - virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +struct UI : public UIReal +{ + + UI() {} + virtual ~UI() {} }; #endif +/************************** END UI.h **************************/ +/************************** BEGIN meta.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -339,11 +351,14 @@ class UI struct Meta { - virtual void declare(const char* key, const char* value) = 0; virtual ~Meta() {}; + virtual void declare(const char* key, const char* value) = 0; + }; #endif +/************************** END meta.h **************************/ +/************************** BEGIN misc.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -366,15 +381,16 @@ struct Meta that work under terms of your choice, so long as this FAUST architecture section is not modified. ************************************************************************/ - + #ifndef __misc__ #define __misc__ #include #include -#include -#include #include +#include +#include +#include using std::max; @@ -382,41 +398,79 @@ using std::min; struct XXXX_Meta : std::map { - void declare(const char* key, const char* value) { (*this)[key]=value; } + void declare(const char* key, const char* value) { (*this)[key] = value; } }; struct MY_Meta : Meta, std::map { - void declare(const char* key, const char* value) { (*this)[key]=value; } + void declare(const char* key, const char* value) { (*this)[key] = value; } }; -inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } +static int lsr(int x, int n) { return int(((unsigned int)x) >> n); } -inline int int2pow2(int x) { int r = 0; while ((1<declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.0"); + m->declare("basics.lib/version", "0.1"); m->declare("ceammc_ui.lib/name", "CEAMMC faust default UI elements"); m->declare("ceammc_ui.lib/version", "0.1.1"); - m->declare("filename", "fx_drive"); + m->declare("filename", "fx_drive.dsp"); m->declare("name", "fx.drive"); m->declare("signals.lib/name", "Faust Signal Routing Library"); m->declare("signals.lib/version", "0.0"); @@ -479,15 +534,13 @@ class fx_drive : public dsp { virtual int getNumInputs() { return 1; - } virtual int getNumOutputs() { return 1; - } virtual int getInputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -496,14 +549,12 @@ class fx_drive : public dsp { rate = -1; break; } - } return rate; - } virtual int getOutputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -512,41 +563,34 @@ class fx_drive : public dsp { rate = -1; break; } - } return rate; - } - static void classInit(int samplingFreq) { - + static void classInit(int sample_rate) { } - virtual void instanceConstants(int samplingFreq) { - fSamplingFreq = samplingFreq; - + virtual void instanceConstants(int sample_rate) { + fSampleRate = sample_rate; } virtual void instanceResetUserInterface() { fCheckbox0 = FAUSTFLOAT(0.0f); fVslider0 = FAUSTFLOAT(1.0f); - } virtual void instanceClear() { for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { fRec0[l0] = 0.0f; - } - } - virtual void init(int samplingFreq) { - classInit(samplingFreq); - instanceInit(samplingFreq); + virtual void init(int sample_rate) { + classInit(sample_rate); + instanceInit(sample_rate); } - virtual void instanceInit(int samplingFreq) { - instanceConstants(samplingFreq); + virtual void instanceInit(int sample_rate) { + instanceConstants(sample_rate); instanceResetUserInterface(); instanceClear(); } @@ -554,9 +598,9 @@ class fx_drive : public dsp { virtual fx_drive* clone() { return new fx_drive(); } + virtual int getSampleRate() { - return fSamplingFreq; - + return fSampleRate; } virtual void buildUserInterface(UI* ui_interface) { @@ -564,7 +608,6 @@ class fx_drive : public dsp { ui_interface->addCheckButton("bypass", &fCheckbox0); ui_interface->addVerticalSlider("drive", &fVslider0, 1.0f, 1.0f, 10.0f, 1.0f); ui_interface->closeBox(); - } virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { @@ -574,16 +617,13 @@ class fx_drive : public dsp { float fSlow1 = (0.00100000005f * float(fVslider0)); for (int i = 0; (i < count); i = (i + 1)) { float fTemp0 = float(input0[i]); - float fTemp1 = (iSlow0?0.0f:fTemp0); + float fTemp1 = (iSlow0 ? 0.0f : fTemp0); fRec0[0] = (fSlow1 + (0.999000013f * fRec0[1])); - output0[i] = FAUSTFLOAT((iSlow0?fTemp0:std::max(-0.699999988f, std::min(0.699999988f, (fTemp1 * ((0.0625f * (((4.0f * (1.0f - std::fabs(fTemp1))) + -1.0f) * fRec0[0])) + 1.0f)))))); + output0[i] = FAUSTFLOAT((iSlow0 ? fTemp0 : std::max(-0.699999988f, std::min(0.699999988f, (fTemp1 * ((0.0625f * (fRec0[0] * ((4.0f * (1.0f - std::fabs(fTemp1))) + -1.0f))) + 1.0f)))))); fRec0[1] = fRec0[0]; - } - } - }; // clang-format on #endif diff --git a/ceammc/ext/src/fx/fx_drone_box.h b/ceammc/ext/src/fx/fx_drone_box.h index e7c3ff6175..7670071556 100644 --- a/ceammc/ext/src/fx/fx_drone_box.h +++ b/ceammc/ext/src/fx/fx_drone_box.h @@ -3,8 +3,8 @@ author: "Oli Larkin (contact@olilarkin.co.uk)" copyright: "Oliver Larkin" name: "fx.drone_box" version: "0.1" -Code generated with Faust 2.15.0 (https://faust.grame.fr) -Compilation options: cpp, -scal -ftz 0 +Code generated with Faust 2.22.1 (https://faust.grame.fr) +Compilation options: -lang cpp -scal -ftz 0 ------------------------------------------------------------ */ #ifndef __fx_drone_box_H__ @@ -17,6 +17,7 @@ Compilation options: cpp, -scal -ftz 0 #include #include +/************************** BEGIN dsp.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -99,23 +100,23 @@ class dsp { * - static class 'classInit': static tables initialization * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void init(int samplingRate) = 0; + virtual void init(int sample_rate) = 0; /** * Init instance state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceInit(int samplingRate) = 0; + virtual void instanceInit(int sample_rate) = 0; /** * Init instance constant state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceConstants(int samplingRate) = 0; + virtual void instanceConstants(int sample_rate) = 0; /* Init default control parameters values */ virtual void instanceResetUserInterface() = 0; @@ -152,8 +153,8 @@ class dsp { * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the number of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) * */ virtual void compute(double /*date_usec*/, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -172,16 +173,16 @@ class decorator_dsp : public dsp { public: - decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + decorator_dsp(dsp* dsp = nullptr):fDSP(dsp) {} virtual ~decorator_dsp() { delete fDSP; } virtual int getNumInputs() { return fDSP->getNumInputs(); } virtual int getNumOutputs() { return fDSP->getNumOutputs(); } virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } virtual int getSampleRate() { return fDSP->getSampleRate(); } - virtual void init(int samplingRate) { fDSP->init(samplingRate); } - virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } - virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void init(int sample_rate) { fDSP->init(sample_rate); } + virtual void instanceInit(int sample_rate) { fDSP->instanceInit(sample_rate); } + virtual void instanceConstants(int sample_rate) { fDSP->instanceConstants(sample_rate); } virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } @@ -236,6 +237,8 @@ class dsp_factory { #endif #endif +/************************** END dsp.h **************************/ +/************************** BEGIN UI.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -275,45 +278,54 @@ class dsp_factory { struct Soundfile; -class UI +template +class UIReal { - + public: - - UI() {} - - virtual ~UI() {} - + + UIReal() {} + virtual ~UIReal() {} + // -- widget's layouts - + virtual void openTabBox(const char* label) = 0; virtual void openHorizontalBox(const char* label) = 0; virtual void openVerticalBox(const char* label) = 0; virtual void closeBox() = 0; - + // -- active widgets - - virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - + + virtual void addButton(const char* label, REAL* zone) = 0; + virtual void addCheckButton(const char* label, REAL* zone) = 0; + virtual void addVerticalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addHorizontalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addNumEntry(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + // -- passive widgets - - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - + + virtual void addHorizontalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + virtual void addVerticalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + // -- soundfiles - + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; - + // -- metadata declarations + + virtual void declare(REAL* zone, const char* key, const char* val) {} +}; - virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +struct UI : public UIReal +{ + + UI() {} + virtual ~UI() {} }; #endif +/************************** END UI.h **************************/ +/************************** BEGIN meta.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -342,11 +354,14 @@ class UI struct Meta { - virtual void declare(const char* key, const char* value) = 0; virtual ~Meta() {}; + virtual void declare(const char* key, const char* value) = 0; + }; #endif +/************************** END meta.h **************************/ +/************************** BEGIN misc.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -369,7 +384,7 @@ struct Meta that work under terms of your choice, so long as this FAUST architecture section is not modified. ************************************************************************/ - + #ifndef __misc__ #define __misc__ @@ -377,6 +392,8 @@ struct Meta #include #include #include +#include +#include using std::max; @@ -398,27 +415,65 @@ static int int2pow2(int x) { int r = 0; while ((1<declare("author", "Oli Larkin (contact@olilarkin.co.uk)"); m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.0"); + m->declare("basics.lib/version", "0.1"); m->declare("ceammc.lib/name", "Ceammc PureData misc utils"); m->declare("ceammc.lib/version", "0.1.1"); m->declare("ceammc_ui.lib/name", "CEAMMC faust default UI elements"); m->declare("ceammc_ui.lib/version", "0.1.1"); m->declare("copyright", "Oliver Larkin"); m->declare("delays.lib/name", "Faust Delay Library"); - m->declare("delays.lib/version", "0.0"); + m->declare("delays.lib/version", "0.1"); m->declare("description", "Mono Sympathetic Resonance Generator"); - m->declare("filename", "fx_drone_box"); + m->declare("filename", "fx_drone_box.dsp"); m->declare("licence", "GPL"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); @@ -517,15 +573,13 @@ class fx_drone_box : public dsp { virtual int getNumInputs() { return 1; - } virtual int getNumOutputs() { return 1; - } virtual int getInputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -534,14 +588,12 @@ class fx_drone_box : public dsp { rate = -1; break; } - } return rate; - } virtual int getOutputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -550,19 +602,16 @@ class fx_drone_box : public dsp { rate = -1; break; } - } return rate; - } - static void classInit(int samplingFreq) { - + static void classInit(int sample_rate) { } - virtual void instanceConstants(int samplingFreq) { - fSamplingFreq = samplingFreq; - fConst0 = std::min(192000.0f, std::max(1.0f, float(fSamplingFreq))); + virtual void instanceConstants(int sample_rate) { + fSampleRate = sample_rate; + fConst0 = std::min(192000.0f, std::max(1.0f, float(fSampleRate))); fConst1 = std::exp((0.0f - (200.0f / fConst0))); fConst2 = (1.0f - fConst1); fConst3 = (440.0f * fConst2); @@ -570,7 +619,6 @@ class fx_drone_box : public dsp { fConst5 = (0.666666687f * fConst0); fConst6 = (0.5f * fConst0); fConst7 = (0.333333343f * fConst0); - } virtual void instanceResetUserInterface() { @@ -578,64 +626,51 @@ class fx_drone_box : public dsp { fHslider0 = FAUSTFLOAT(0.5f); fHslider1 = FAUSTFLOAT(48.0f); fHslider2 = FAUSTFLOAT(4000.0f); - } virtual void instanceClear() { for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { fRec0[l0] = 0.0f; - } for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { fRec2[l1] = 0.0f; - } for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { fRec3[l2] = 0.0f; - } IOTA = 0; for (int l3 = 0; (l3 < 8192); l3 = (l3 + 1)) { fVec0[l3] = 0.0f; - } for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { fRec1[l4] = 0.0f; - } for (int l5 = 0; (l5 < 8192); l5 = (l5 + 1)) { fVec1[l5] = 0.0f; - } for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { fRec4[l6] = 0.0f; - } for (int l7 = 0; (l7 < 8192); l7 = (l7 + 1)) { fVec2[l7] = 0.0f; - } for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { fRec5[l8] = 0.0f; - } for (int l9 = 0; (l9 < 8192); l9 = (l9 + 1)) { fVec3[l9] = 0.0f; - } for (int l10 = 0; (l10 < 2); l10 = (l10 + 1)) { fRec6[l10] = 0.0f; - } - } - virtual void init(int samplingFreq) { - classInit(samplingFreq); - instanceInit(samplingFreq); + virtual void init(int sample_rate) { + classInit(sample_rate); + instanceInit(sample_rate); } - virtual void instanceInit(int samplingFreq) { - instanceConstants(samplingFreq); + virtual void instanceInit(int sample_rate) { + instanceConstants(sample_rate); instanceResetUserInterface(); instanceClear(); } @@ -643,9 +678,9 @@ class fx_drone_box : public dsp { virtual fx_drone_box* clone() { return new fx_drone_box(); } + virtual int getSampleRate() { - return fSamplingFreq; - + return fSampleRate; } virtual void buildUserInterface(UI* ui_interface) { @@ -658,7 +693,6 @@ class fx_drone_box : public dsp { ui_interface->declare(&fHslider1, "unit", "semitones"); ui_interface->addHorizontalSlider("pitch", &fHslider1, 48.0f, 36.0f, 60.0f, 0.00100000005f); ui_interface->closeBox(); - } virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { @@ -670,7 +704,7 @@ class fx_drone_box : public dsp { float fSlow3 = (fConst4 * float(fHslider2)); for (int i = 0; (i < count); i = (i + 1)) { float fTemp0 = float(input0[i]); - float fTemp1 = (iSlow0?0.0f:fTemp0); + float fTemp1 = (iSlow0 ? 0.0f : fTemp0); fRec0[0] = (fSlow1 + (0.999000013f * fRec0[1])); fRec2[0] = (fSlow2 + (fConst1 * fRec2[1])); fRec3[0] = (fSlow3 + (fConst1 * fRec3[1])); @@ -703,7 +737,7 @@ class fx_drone_box : public dsp { int iTemp21 = int(fTemp20); float fTemp22 = std::floor(fTemp20); fRec6[0] = ((fVec3[((IOTA - std::min(4097, std::max(0, iTemp21))) & 8191)] * (fTemp22 + (3.0f - fTemp19))) + ((fTemp19 + (-2.0f - fTemp22)) * fVec3[((IOTA - std::min(4097, std::max(0, (iTemp21 + 1)))) & 8191)])); - output0[i] = FAUSTFLOAT((iSlow0?fTemp0:((fTemp1 * (1.0f - fRec0[0])) + (0.25f * (fRec0[0] * (((fRec1[0] + fRec4[0]) + fRec5[0]) + fRec6[0])))))); + output0[i] = FAUSTFLOAT((iSlow0 ? fTemp0 : ((fTemp1 * (1.0f - fRec0[0])) + (0.25f * (fRec0[0] * (((fRec1[0] + fRec4[0]) + fRec5[0]) + fRec6[0])))))); fRec0[1] = fRec0[0]; fRec2[1] = fRec2[0]; fRec3[1] = fRec3[0]; @@ -712,12 +746,9 @@ class fx_drone_box : public dsp { fRec4[1] = fRec4[0]; fRec5[1] = fRec5[0]; fRec6[1] = fRec6[0]; - } - } - }; // clang-format on #endif diff --git a/ceammc/ext/src/fx/fx_echo.h b/ceammc/ext/src/fx/fx_echo.h index 4c2469b762..dd811525bf 100644 --- a/ceammc/ext/src/fx/fx_echo.h +++ b/ceammc/ext/src/fx/fx_echo.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "fx.echo" -Code generated with Faust 2.8.5 (https://faust.grame.fr) -Compilation options: cpp, -scal -ftz 0 +Code generated with Faust 2.22.1 (https://faust.grame.fr) +Compilation options: -lang cpp -scal -ftz 0 ------------------------------------------------------------ */ #ifndef __fx_echo_H__ @@ -14,6 +14,7 @@ Compilation options: cpp, -scal -ftz 0 #include #include +/************************** BEGIN dsp.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -96,23 +97,23 @@ class dsp { * - static class 'classInit': static tables initialization * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void init(int samplingRate) = 0; + virtual void init(int sample_rate) = 0; /** * Init instance state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceInit(int samplingRate) = 0; + virtual void instanceInit(int sample_rate) = 0; /** * Init instance constant state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceConstants(int samplingRate) = 0; + virtual void instanceConstants(int sample_rate) = 0; /* Init default control parameters values */ virtual void instanceResetUserInterface() = 0; @@ -149,8 +150,8 @@ class dsp { * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the number of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) * */ virtual void compute(double /*date_usec*/, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -169,16 +170,16 @@ class decorator_dsp : public dsp { public: - decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + decorator_dsp(dsp* dsp = nullptr):fDSP(dsp) {} virtual ~decorator_dsp() { delete fDSP; } virtual int getNumInputs() { return fDSP->getNumInputs(); } virtual int getNumOutputs() { return fDSP->getNumOutputs(); } virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } virtual int getSampleRate() { return fDSP->getSampleRate(); } - virtual void init(int samplingRate) { fDSP->init(samplingRate); } - virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } - virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void init(int sample_rate) { fDSP->init(sample_rate); } + virtual void instanceInit(int sample_rate) { fDSP->instanceInit(sample_rate); } + virtual void instanceConstants(int sample_rate) { fDSP->instanceConstants(sample_rate); } virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } @@ -233,6 +234,8 @@ class dsp_factory { #endif #endif +/************************** END dsp.h **************************/ +/************************** BEGIN UI.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -272,45 +275,54 @@ class dsp_factory { struct Soundfile; -class UI +template +class UIReal { - + public: - - UI() {} - - virtual ~UI() {} - + + UIReal() {} + virtual ~UIReal() {} + // -- widget's layouts - + virtual void openTabBox(const char* label) = 0; virtual void openHorizontalBox(const char* label) = 0; virtual void openVerticalBox(const char* label) = 0; virtual void closeBox() = 0; - + // -- active widgets - - virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - + + virtual void addButton(const char* label, REAL* zone) = 0; + virtual void addCheckButton(const char* label, REAL* zone) = 0; + virtual void addVerticalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addHorizontalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addNumEntry(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + // -- passive widgets - - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - + + virtual void addHorizontalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + virtual void addVerticalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + // -- soundfiles - + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; - + // -- metadata declarations + + virtual void declare(REAL* zone, const char* key, const char* val) {} +}; + +struct UI : public UIReal +{ - virtual void declare(FAUSTFLOAT*, const char*, const char*) {} + UI() {} + virtual ~UI() {} }; #endif +/************************** END UI.h **************************/ +/************************** BEGIN meta.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -339,11 +351,14 @@ class UI struct Meta { - virtual void declare(const char* key, const char* value) = 0; virtual ~Meta() {}; + virtual void declare(const char* key, const char* value) = 0; + }; #endif +/************************** END meta.h **************************/ +/************************** BEGIN misc.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -366,15 +381,16 @@ struct Meta that work under terms of your choice, so long as this FAUST architecture section is not modified. ************************************************************************/ - + #ifndef __misc__ #define __misc__ #include #include -#include -#include #include +#include +#include +#include using std::max; @@ -382,41 +398,79 @@ using std::min; struct XXXX_Meta : std::map { - void declare(const char* key, const char* value) { (*this)[key]=value; } + void declare(const char* key, const char* value) { (*this)[key] = value; } }; struct MY_Meta : Meta, std::map { - void declare(const char* key, const char* value) { (*this)[key]=value; } + void declare(const char* key, const char* value) { (*this)[key] = value; } }; -inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } +static int lsr(int x, int n) { return int(((unsigned int)x) >> n); } -inline int int2pow2(int x) { int r = 0; while ((1<declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.0"); + m->declare("basics.lib/version", "0.1"); m->declare("ceammc.lib/name", "Ceammc PureData misc utils"); m->declare("ceammc.lib/version", "0.1.1"); m->declare("ceammc_ui.lib/name", "CEAMMC faust default UI elements"); m->declare("ceammc_ui.lib/version", "0.1.1"); m->declare("delays.lib/name", "Faust Delay Library"); - m->declare("delays.lib/version", "0.0"); - m->declare("filename", "fx_echo"); + m->declare("delays.lib/version", "0.1"); + m->declare("filename", "fx_echo.dsp"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); @@ -504,15 +554,13 @@ class fx_echo : public dsp { virtual int getNumInputs() { return 1; - } virtual int getNumOutputs() { return 1; - } virtual int getInputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -521,14 +569,12 @@ class fx_echo : public dsp { rate = -1; break; } - } return rate; - } virtual int getOutputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -537,60 +583,46 @@ class fx_echo : public dsp { rate = -1; break; } - } return rate; - } - static void classInit(int samplingFreq) { - + static void classInit(int sample_rate) { } - virtual void instanceConstants(int samplingFreq) { - fSamplingFreq = samplingFreq; - fConst0 = std::min(192000.0f, std::max(1.0f, float(fSamplingFreq))); - fConst1 = (0.00100000005f * fConst0); - iConst2 = (int((10.0f * fConst0)) + -1); - iConst3 = ((iConst2 >> 1) | iConst2); - iConst4 = ((iConst3 >> 2) | iConst3); - iConst5 = ((iConst4 >> 4) | iConst4); - iConst6 = ((iConst5 >> 8) | iConst5); - iConst7 = std::max(1, (((iConst6 >> 16) | iConst6) + 1)); - + virtual void instanceConstants(int sample_rate) { + fSampleRate = sample_rate; + fConst0 = std::min(192000.0f, std::max(1.0f, float(fSampleRate))); + fConst1 = (10.0f * fConst0); + fConst2 = (0.00100000005f * fConst0); } virtual void instanceResetUserInterface() { fCheckbox0 = FAUSTFLOAT(0.0f); fHslider0 = FAUSTFLOAT(1.0f); - fHslider1 = FAUSTFLOAT(500.0f); - fHslider2 = FAUSTFLOAT(0.29999999999999999f); - + fHslider1 = FAUSTFLOAT(0.29999999999999999f); + fHslider2 = FAUSTFLOAT(500.0f); } virtual void instanceClear() { for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { fRec0[l0] = 0.0f; - } for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { fRec2[l1] = 0.0f; - } IOTA = 0; for (int l2 = 0; (l2 < 2097152); l2 = (l2 + 1)) { fRec1[l2] = 0.0f; - } - } - virtual void init(int samplingFreq) { - classInit(samplingFreq); - instanceInit(samplingFreq); + virtual void init(int sample_rate) { + classInit(sample_rate); + instanceInit(sample_rate); } - virtual void instanceInit(int samplingFreq) { - instanceConstants(samplingFreq); + virtual void instanceInit(int sample_rate) { + instanceConstants(sample_rate); instanceResetUserInterface(); instanceClear(); } @@ -598,21 +630,20 @@ class fx_echo : public dsp { virtual fx_echo* clone() { return new fx_echo(); } + virtual int getSampleRate() { - return fSamplingFreq; - + return fSampleRate; } virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("fx.echo"); ui_interface->addCheckButton("bypass", &fCheckbox0); - ui_interface->declare(&fHslider1, "unit", "ms"); - ui_interface->addHorizontalSlider("delay", &fHslider1, 500.0f, 10.0f, 10000.0f, 1.0f); + ui_interface->declare(&fHslider2, "unit", "ms"); + ui_interface->addHorizontalSlider("delay", &fHslider2, 500.0f, 10.0f, 10000.0f, 1.0f); ui_interface->declare(&fHslider0, "style", "knob"); ui_interface->addHorizontalSlider("drywet", &fHslider0, 1.0f, 0.0f, 1.0f, 0.00999999978f); - ui_interface->addHorizontalSlider("feedback", &fHslider2, 0.300000012f, 0.0f, 0.99000001f, 0.00100000005f); + ui_interface->addHorizontalSlider("feedback", &fHslider1, 0.300000012f, 0.0f, 0.99000001f, 0.00100000005f); ui_interface->closeBox(); - } virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { @@ -620,31 +651,21 @@ class fx_echo : public dsp { FAUSTFLOAT* output0 = outputs[0]; int iSlow0 = int(float(fCheckbox0)); float fSlow1 = (0.00100000005f * float(fHslider0)); - float fSlow2 = (fConst1 * std::min(10000.0f, std::max(10.0f, float(fHslider1)))); - float fSlow3 = (fSlow2 + 4.99999987e-06f); - float fSlow4 = std::floor(fSlow3); - float fSlow5 = (fSlow2 - fSlow4); - int iSlow6 = int(fSlow3); - int iSlow7 = (std::min(iConst7, std::max(0, (iSlow6 + 1))) + 1); - float fSlow8 = (fSlow4 + (1.0f - fSlow2)); - int iSlow9 = (std::min(iConst7, std::max(0, iSlow6)) + 1); - float fSlow10 = (0.00100000005f * float(fHslider2)); + float fSlow2 = (0.00100000005f * float(fHslider1)); + int iSlow3 = (int(std::min(fConst1, std::max(0.0f, (fConst2 * std::min(10000.0f, std::max(10.0f, float(fHslider2))))))) + 1); for (int i = 0; (i < count); i = (i + 1)) { float fTemp0 = float(input0[i]); - float fTemp1 = (iSlow0?0.0f:fTemp0); + float fTemp1 = (iSlow0 ? 0.0f : fTemp0); fRec0[0] = (fSlow1 + (0.999000013f * fRec0[1])); - fRec2[0] = (fSlow10 + (0.999000013f * fRec2[1])); - fRec1[(IOTA & 2097151)] = (fTemp1 + (((fSlow5 * fRec1[((IOTA - iSlow7) & 2097151)]) + (fSlow8 * fRec1[((IOTA - iSlow9) & 2097151)])) * fRec2[0])); - output0[i] = FAUSTFLOAT((iSlow0?fTemp0:((fTemp1 * (1.0f - fRec0[0])) + (fRec0[0] * fRec1[((IOTA - 0) & 2097151)])))); + fRec2[0] = (fSlow2 + (0.999000013f * fRec2[1])); + fRec1[(IOTA & 2097151)] = (fTemp1 + (fRec2[0] * fRec1[((IOTA - iSlow3) & 2097151)])); + output0[i] = FAUSTFLOAT((iSlow0 ? fTemp0 : ((fTemp1 * (1.0f - fRec0[0])) + (fRec0[0] * fRec1[((IOTA - 0) & 2097151)])))); fRec0[1] = fRec0[0]; fRec2[1] = fRec2[0]; IOTA = (IOTA + 1); - } - } - }; // clang-format on #endif diff --git a/ceammc/ext/src/fx/fx_flanger.h b/ceammc/ext/src/fx/fx_flanger.h index 6f169fc722..a69054ef2e 100644 --- a/ceammc/ext/src/fx/fx_flanger.h +++ b/ceammc/ext/src/fx/fx_flanger.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "fx.flanger" -Code generated with Faust 2.15.0 (https://faust.grame.fr) -Compilation options: cpp, -scal -ftz 0 +Code generated with Faust 2.22.1 (https://faust.grame.fr) +Compilation options: -lang cpp -scal -ftz 0 ------------------------------------------------------------ */ #ifndef __fx_flanger_H__ @@ -14,6 +14,7 @@ Compilation options: cpp, -scal -ftz 0 #include #include +/************************** BEGIN dsp.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -96,23 +97,23 @@ class dsp { * - static class 'classInit': static tables initialization * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void init(int samplingRate) = 0; + virtual void init(int sample_rate) = 0; /** * Init instance state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceInit(int samplingRate) = 0; + virtual void instanceInit(int sample_rate) = 0; /** * Init instance constant state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceConstants(int samplingRate) = 0; + virtual void instanceConstants(int sample_rate) = 0; /* Init default control parameters values */ virtual void instanceResetUserInterface() = 0; @@ -149,8 +150,8 @@ class dsp { * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the number of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) * */ virtual void compute(double /*date_usec*/, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -169,16 +170,16 @@ class decorator_dsp : public dsp { public: - decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + decorator_dsp(dsp* dsp = nullptr):fDSP(dsp) {} virtual ~decorator_dsp() { delete fDSP; } virtual int getNumInputs() { return fDSP->getNumInputs(); } virtual int getNumOutputs() { return fDSP->getNumOutputs(); } virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } virtual int getSampleRate() { return fDSP->getSampleRate(); } - virtual void init(int samplingRate) { fDSP->init(samplingRate); } - virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } - virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void init(int sample_rate) { fDSP->init(sample_rate); } + virtual void instanceInit(int sample_rate) { fDSP->instanceInit(sample_rate); } + virtual void instanceConstants(int sample_rate) { fDSP->instanceConstants(sample_rate); } virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } @@ -233,6 +234,8 @@ class dsp_factory { #endif #endif +/************************** END dsp.h **************************/ +/************************** BEGIN UI.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -272,45 +275,54 @@ class dsp_factory { struct Soundfile; -class UI +template +class UIReal { - + public: - - UI() {} - - virtual ~UI() {} - + + UIReal() {} + virtual ~UIReal() {} + // -- widget's layouts - + virtual void openTabBox(const char* label) = 0; virtual void openHorizontalBox(const char* label) = 0; virtual void openVerticalBox(const char* label) = 0; virtual void closeBox() = 0; - + // -- active widgets - - virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - + + virtual void addButton(const char* label, REAL* zone) = 0; + virtual void addCheckButton(const char* label, REAL* zone) = 0; + virtual void addVerticalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addHorizontalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addNumEntry(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + // -- passive widgets - - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - + + virtual void addHorizontalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + virtual void addVerticalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + // -- soundfiles - + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; - + // -- metadata declarations + + virtual void declare(REAL* zone, const char* key, const char* val) {} +}; + +struct UI : public UIReal +{ - virtual void declare(FAUSTFLOAT*, const char*, const char*) {} + UI() {} + virtual ~UI() {} }; #endif +/************************** END UI.h **************************/ +/************************** BEGIN meta.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -339,11 +351,14 @@ class UI struct Meta { - virtual void declare(const char* key, const char* value) = 0; virtual ~Meta() {}; + virtual void declare(const char* key, const char* value) = 0; + }; #endif +/************************** END meta.h **************************/ +/************************** BEGIN misc.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -366,7 +381,7 @@ struct Meta that work under terms of your choice, so long as this FAUST architecture section is not modified. ************************************************************************/ - + #ifndef __misc__ #define __misc__ @@ -374,6 +389,8 @@ struct Meta #include #include #include +#include +#include using std::max; @@ -395,27 +412,65 @@ static int int2pow2(int x) { int r = 0; while ((1<declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.0"); + m->declare("basics.lib/version", "0.1"); m->declare("ceammc.lib/name", "Ceammc PureData misc utils"); m->declare("ceammc.lib/version", "0.1.1"); m->declare("ceammc_ui.lib/name", "CEAMMC faust default UI elements"); m->declare("ceammc_ui.lib/version", "0.1.1"); m->declare("delays.lib/name", "Faust Delay Library"); - m->declare("delays.lib/version", "0.0"); - m->declare("filename", "fx_flanger"); + m->declare("delays.lib/version", "0.1"); + m->declare("filename", "fx_flanger.dsp"); + m->declare("filters.lib/lowpass0_highpass1", "Copyright (C) 2003-2019 by Julius O. Smith III "); m->declare("filters.lib/name", "Faust Filters Library"); - m->declare("filters.lib/version", "0.0"); + m->declare("filters.lib/nlf2:author", "Julius O. Smith III"); + m->declare("filters.lib/nlf2:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/nlf2:license", "MIT-style STK-4.3 license"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); @@ -510,15 +569,13 @@ class fx_flanger : public dsp { virtual int getNumInputs() { return 1; - } virtual int getNumOutputs() { return 1; - } virtual int getInputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -527,14 +584,12 @@ class fx_flanger : public dsp { rate = -1; break; } - } return rate; - } virtual int getOutputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -543,78 +598,64 @@ class fx_flanger : public dsp { rate = -1; break; } - } return rate; - } - static void classInit(int samplingFreq) { - + static void classInit(int sample_rate) { } - virtual void instanceConstants(int samplingFreq) { - fSamplingFreq = samplingFreq; - fConst0 = std::min(192000.0f, std::max(1.0f, float(fSamplingFreq))); + virtual void instanceConstants(int sample_rate) { + fSampleRate = sample_rate; + fConst0 = std::min(192000.0f, std::max(1.0f, float(fSampleRate))); fConst1 = (0.00100000005f * fConst0); fConst2 = (6.28318548f / fConst0); - } virtual void instanceResetUserInterface() { fCheckbox0 = FAUSTFLOAT(0.0f); fHslider0 = FAUSTFLOAT(1.0f); - fCheckbox1 = FAUSTFLOAT(0.0f); fHslider1 = FAUSTFLOAT(0.0f); fHslider2 = FAUSTFLOAT(1.0f); fHslider3 = FAUSTFLOAT(10.0f); fHslider4 = FAUSTFLOAT(0.5f); - + fCheckbox1 = FAUSTFLOAT(0.0f); } virtual void instanceClear() { for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { iVec0[l0] = 0; - } for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { fRec0[l1] = 0.0f; - } for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { fRec2[l2] = 0.0f; - } IOTA = 0; for (int l3 = 0; (l3 < 4096); l3 = (l3 + 1)) { fVec1[l3] = 0.0f; - } for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { fRec4[l4] = 0.0f; - } for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { fRec5[l5] = 0.0f; - } for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { fRec3[l6] = 0.0f; - } for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) { fRec1[l7] = 0.0f; - } - } - virtual void init(int samplingFreq) { - classInit(samplingFreq); - instanceInit(samplingFreq); + virtual void init(int sample_rate) { + classInit(sample_rate); + instanceInit(sample_rate); } - virtual void instanceInit(int samplingFreq) { - instanceConstants(samplingFreq); + virtual void instanceInit(int sample_rate) { + instanceConstants(sample_rate); instanceResetUserInterface(); instanceClear(); } @@ -622,9 +663,9 @@ class fx_flanger : public dsp { virtual fx_flanger* clone() { return new fx_flanger(); } + virtual int getSampleRate() { - return fSamplingFreq; - + return fSampleRate; } virtual void buildUserInterface(UI* ui_interface) { @@ -645,7 +686,6 @@ class fx_flanger : public dsp { ui_interface->declare(&fHslider4, "unit", "Hz"); ui_interface->addHorizontalSlider("speed", &fHslider4, 0.5f, 0.0f, 10.0f, 0.00999999978f); ui_interface->closeBox(); - } virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { @@ -653,28 +693,28 @@ class fx_flanger : public dsp { FAUSTFLOAT* output0 = outputs[0]; int iSlow0 = int(float(fCheckbox0)); float fSlow1 = (0.00100000005f * float(fHslider0)); - float fSlow2 = float((int(float(fCheckbox1))?-1:1)); - float fSlow3 = (0.00100000005f * float(fHslider1)); - float fSlow4 = (0.00100000005f * float(fHslider2)); - float fSlow5 = (0.000500000024f * float(fHslider3)); - float fSlow6 = (fConst2 * float(fHslider4)); - float fSlow7 = std::sin(fSlow6); - float fSlow8 = std::cos(fSlow6); + float fSlow2 = (0.00100000005f * float(fHslider1)); + float fSlow3 = (0.00100000005f * float(fHslider2)); + float fSlow4 = (0.000500000024f * float(fHslider3)); + float fSlow5 = (fConst2 * float(fHslider4)); + float fSlow6 = std::sin(fSlow5); + float fSlow7 = std::cos(fSlow5); + float fSlow8 = float((int(float(fCheckbox1)) ? -1 : 1)); for (int i = 0; (i < count); i = (i + 1)) { float fTemp0 = float(input0[i]); - float fTemp1 = (iSlow0?0.0f:fTemp0); + float fTemp1 = (iSlow0 ? 0.0f : fTemp0); iVec0[0] = 1; fRec0[0] = (fSlow1 + (0.999000013f * fRec0[1])); - fRec2[0] = (fSlow3 + (0.999000013f * fRec2[1])); - float fTemp2 = ((fRec1[1] * fRec2[0]) - fTemp1); + fRec2[0] = (fSlow2 + (0.999000013f * fRec2[1])); + float fTemp2 = ((fRec2[0] * fRec1[1]) - fTemp1); fVec1[(IOTA & 4095)] = fTemp2; - fRec4[0] = ((fSlow7 * fRec5[1]) + (fSlow8 * fRec4[1])); - fRec5[0] = ((float((1 - iVec0[1])) + (fSlow8 * fRec5[1])) - (fSlow7 * fRec4[1])); - fRec3[0] = ((0.999000013f * fRec3[1]) + (fConst1 * (fSlow4 + (fSlow5 * (fRec4[0] + 1.0f))))); + fRec4[0] = ((fSlow6 * fRec5[1]) + (fSlow7 * fRec4[1])); + fRec5[0] = ((float((1 - iVec0[1])) + (fSlow7 * fRec5[1])) - (fSlow6 * fRec4[1])); + fRec3[0] = ((0.999000013f * fRec3[1]) + (fConst1 * (fSlow3 + (fSlow4 * (fRec4[0] + 1.0f))))); int iTemp3 = int(fRec3[0]); float fTemp4 = std::floor(fRec3[0]); - fRec1[0] = ((fVec1[((IOTA - std::min(2049, std::max(0, iTemp3))) & 4095)] * (fTemp4 + (1.0f - fRec3[0]))) + (fVec1[((IOTA - std::min(2049, std::max(0, (iTemp3 + 1)))) & 4095)] * (fRec3[0] - fTemp4))); - output0[i] = FAUSTFLOAT((iSlow0?fTemp0:((fTemp1 * (1.0f - fRec0[0])) + (0.5f * ((fTemp1 + (fSlow2 * fRec1[0])) * fRec0[0]))))); + fRec1[0] = ((fVec1[((IOTA - std::min(2049, std::max(0, iTemp3))) & 4095)] * (fTemp4 + (1.0f - fRec3[0]))) + ((fRec3[0] - fTemp4) * fVec1[((IOTA - std::min(2049, std::max(0, (iTemp3 + 1)))) & 4095)])); + output0[i] = FAUSTFLOAT((iSlow0 ? fTemp0 : ((fTemp1 * (1.0f - fRec0[0])) + (0.5f * (fRec0[0] * (fTemp1 + (fRec1[0] * fSlow8))))))); iVec0[1] = iVec0[0]; fRec0[1] = fRec0[0]; fRec2[1] = fRec2[0]; @@ -683,12 +723,9 @@ class fx_flanger : public dsp { fRec5[1] = fRec5[0]; fRec3[1] = fRec3[0]; fRec1[1] = fRec1[0]; - } - } - }; // clang-format on #endif diff --git a/ceammc/ext/src/fx/fx_freeverb.h b/ceammc/ext/src/fx/fx_freeverb.h index 49177d5c95..c156ff386e 100644 --- a/ceammc/ext/src/fx/fx_freeverb.h +++ b/ceammc/ext/src/fx/fx_freeverb.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "fx.freeverb" -Code generated with Faust 2.15.0 (https://faust.grame.fr) -Compilation options: cpp, -scal -ftz 0 +Code generated with Faust 2.22.1 (https://faust.grame.fr) +Compilation options: -lang cpp -scal -ftz 0 ------------------------------------------------------------ */ #ifndef __fx_freeverb_H__ @@ -14,6 +14,7 @@ Compilation options: cpp, -scal -ftz 0 #include #include +/************************** BEGIN dsp.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -96,23 +97,23 @@ class dsp { * - static class 'classInit': static tables initialization * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void init(int samplingRate) = 0; + virtual void init(int sample_rate) = 0; /** * Init instance state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceInit(int samplingRate) = 0; + virtual void instanceInit(int sample_rate) = 0; /** * Init instance constant state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceConstants(int samplingRate) = 0; + virtual void instanceConstants(int sample_rate) = 0; /* Init default control parameters values */ virtual void instanceResetUserInterface() = 0; @@ -149,8 +150,8 @@ class dsp { * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the number of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) * */ virtual void compute(double /*date_usec*/, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -169,16 +170,16 @@ class decorator_dsp : public dsp { public: - decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + decorator_dsp(dsp* dsp = nullptr):fDSP(dsp) {} virtual ~decorator_dsp() { delete fDSP; } virtual int getNumInputs() { return fDSP->getNumInputs(); } virtual int getNumOutputs() { return fDSP->getNumOutputs(); } virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } virtual int getSampleRate() { return fDSP->getSampleRate(); } - virtual void init(int samplingRate) { fDSP->init(samplingRate); } - virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } - virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void init(int sample_rate) { fDSP->init(sample_rate); } + virtual void instanceInit(int sample_rate) { fDSP->instanceInit(sample_rate); } + virtual void instanceConstants(int sample_rate) { fDSP->instanceConstants(sample_rate); } virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } @@ -233,6 +234,8 @@ class dsp_factory { #endif #endif +/************************** END dsp.h **************************/ +/************************** BEGIN UI.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -272,45 +275,54 @@ class dsp_factory { struct Soundfile; -class UI +template +class UIReal { - + public: - - UI() {} - - virtual ~UI() {} - + + UIReal() {} + virtual ~UIReal() {} + // -- widget's layouts - + virtual void openTabBox(const char* label) = 0; virtual void openHorizontalBox(const char* label) = 0; virtual void openVerticalBox(const char* label) = 0; virtual void closeBox() = 0; - + // -- active widgets - - virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - + + virtual void addButton(const char* label, REAL* zone) = 0; + virtual void addCheckButton(const char* label, REAL* zone) = 0; + virtual void addVerticalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addHorizontalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addNumEntry(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + // -- passive widgets - - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - + + virtual void addHorizontalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + virtual void addVerticalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + // -- soundfiles - + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; - + // -- metadata declarations + + virtual void declare(REAL* zone, const char* key, const char* val) {} +}; - virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +struct UI : public UIReal +{ + + UI() {} + virtual ~UI() {} }; #endif +/************************** END UI.h **************************/ +/************************** BEGIN meta.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -339,11 +351,14 @@ class UI struct Meta { - virtual void declare(const char* key, const char* value) = 0; virtual ~Meta() {}; + virtual void declare(const char* key, const char* value) = 0; + }; #endif +/************************** END meta.h **************************/ +/************************** BEGIN misc.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -366,7 +381,7 @@ struct Meta that work under terms of your choice, so long as this FAUST architecture section is not modified. ************************************************************************/ - + #ifndef __misc__ #define __misc__ @@ -374,6 +389,8 @@ struct Meta #include #include #include +#include +#include using std::max; @@ -395,27 +412,65 @@ static int int2pow2(int x) { int r = 0; while ((1<declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.0"); + m->declare("basics.lib/version", "0.1"); m->declare("ceammc.lib/name", "Ceammc PureData misc utils"); m->declare("ceammc.lib/version", "0.1.1"); m->declare("ceammc_ui.lib/name", "CEAMMC faust default UI elements"); m->declare("ceammc_ui.lib/version", "0.1.1"); m->declare("delays.lib/name", "Faust Delay Library"); - m->declare("delays.lib/version", "0.0"); - m->declare("filename", "fx_freeverb"); + m->declare("delays.lib/version", "0.1"); + m->declare("filename", "fx_freeverb.dsp"); + m->declare("filters.lib/allpass_comb:author", "Julius O. Smith III"); + m->declare("filters.lib/allpass_comb:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/allpass_comb:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/lowpass0_highpass1", "Copyright (C) 2003-2019 by Julius O. Smith III "); m->declare("filters.lib/name", "Faust Filters Library"); - m->declare("filters.lib/version", "0.0"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); @@ -542,15 +601,13 @@ class fx_freeverb : public dsp { virtual int getNumInputs() { return 1; - } virtual int getNumOutputs() { return 1; - } virtual int getInputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -559,14 +616,12 @@ class fx_freeverb : public dsp { rate = -1; break; } - } return rate; - } virtual int getOutputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -575,19 +630,16 @@ class fx_freeverb : public dsp { rate = -1; break; } - } return rate; - } - static void classInit(int samplingFreq) { - + static void classInit(int sample_rate) { } - virtual void instanceConstants(int samplingFreq) { - fSamplingFreq = samplingFreq; - fConst0 = std::min(192000.0f, std::max(1.0f, float(fSamplingFreq))); + virtual void instanceConstants(int sample_rate) { + fSampleRate = sample_rate; + fConst0 = std::min(192000.0f, std::max(1.0f, float(fSampleRate))); iConst1 = int((0.0253061224f * fConst0)); iConst2 = int((0.0269387756f * fConst0)); iConst3 = int((0.0289569162f * fConst0)); @@ -600,7 +652,6 @@ class fx_freeverb : public dsp { iConst10 = std::min(1024, std::max(0, (int((0.00999999978f * fConst0)) + -1))); iConst11 = std::min(1024, std::max(0, (int((0.00773242628f * fConst0)) + -1))); iConst12 = std::min(1024, std::max(0, (int((0.00510204071f * fConst0)) + -1))); - } virtual void instanceResetUserInterface() { @@ -608,160 +659,123 @@ class fx_freeverb : public dsp { fHslider0 = FAUSTFLOAT(0.33000000000000002f); fHslider1 = FAUSTFLOAT(0.5f); fHslider2 = FAUSTFLOAT(0.5f); - } virtual void instanceClear() { for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { fRec0[l0] = 0.0f; - } for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { fRec11[l1] = 0.0f; - } for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { fRec10[l2] = 0.0f; - } for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { fRec12[l3] = 0.0f; - } IOTA = 0; for (int l4 = 0; (l4 < 8192); l4 = (l4 + 1)) { fVec0[l4] = 0.0f; - } for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { fRec9[l5] = 0.0f; - } for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { fRec14[l6] = 0.0f; - } for (int l7 = 0; (l7 < 8192); l7 = (l7 + 1)) { fVec1[l7] = 0.0f; - } for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { fRec13[l8] = 0.0f; - } for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { fRec16[l9] = 0.0f; - } for (int l10 = 0; (l10 < 8192); l10 = (l10 + 1)) { fVec2[l10] = 0.0f; - } for (int l11 = 0; (l11 < 2); l11 = (l11 + 1)) { fRec15[l11] = 0.0f; - } for (int l12 = 0; (l12 < 2); l12 = (l12 + 1)) { fRec18[l12] = 0.0f; - } for (int l13 = 0; (l13 < 8192); l13 = (l13 + 1)) { fVec3[l13] = 0.0f; - } for (int l14 = 0; (l14 < 2); l14 = (l14 + 1)) { fRec17[l14] = 0.0f; - } for (int l15 = 0; (l15 < 2); l15 = (l15 + 1)) { fRec20[l15] = 0.0f; - } for (int l16 = 0; (l16 < 8192); l16 = (l16 + 1)) { fVec4[l16] = 0.0f; - } for (int l17 = 0; (l17 < 2); l17 = (l17 + 1)) { fRec19[l17] = 0.0f; - } for (int l18 = 0; (l18 < 2); l18 = (l18 + 1)) { fRec22[l18] = 0.0f; - } for (int l19 = 0; (l19 < 8192); l19 = (l19 + 1)) { fVec5[l19] = 0.0f; - } for (int l20 = 0; (l20 < 2); l20 = (l20 + 1)) { fRec21[l20] = 0.0f; - } for (int l21 = 0; (l21 < 2); l21 = (l21 + 1)) { fRec24[l21] = 0.0f; - } for (int l22 = 0; (l22 < 8192); l22 = (l22 + 1)) { fVec6[l22] = 0.0f; - } for (int l23 = 0; (l23 < 2); l23 = (l23 + 1)) { fRec23[l23] = 0.0f; - } for (int l24 = 0; (l24 < 2); l24 = (l24 + 1)) { fRec26[l24] = 0.0f; - } for (int l25 = 0; (l25 < 8192); l25 = (l25 + 1)) { fVec7[l25] = 0.0f; - } for (int l26 = 0; (l26 < 2); l26 = (l26 + 1)) { fRec25[l26] = 0.0f; - } for (int l27 = 0; (l27 < 2048); l27 = (l27 + 1)) { fVec8[l27] = 0.0f; - } for (int l28 = 0; (l28 < 2); l28 = (l28 + 1)) { fRec7[l28] = 0.0f; - } for (int l29 = 0; (l29 < 2048); l29 = (l29 + 1)) { fVec9[l29] = 0.0f; - } for (int l30 = 0; (l30 < 2); l30 = (l30 + 1)) { fRec5[l30] = 0.0f; - } for (int l31 = 0; (l31 < 2048); l31 = (l31 + 1)) { fVec10[l31] = 0.0f; - } for (int l32 = 0; (l32 < 2); l32 = (l32 + 1)) { fRec3[l32] = 0.0f; - } for (int l33 = 0; (l33 < 1024); l33 = (l33 + 1)) { fVec11[l33] = 0.0f; - } for (int l34 = 0; (l34 < 2); l34 = (l34 + 1)) { fRec1[l34] = 0.0f; - } - } - virtual void init(int samplingFreq) { - classInit(samplingFreq); - instanceInit(samplingFreq); + virtual void init(int sample_rate) { + classInit(sample_rate); + instanceInit(sample_rate); } - virtual void instanceInit(int samplingFreq) { - instanceConstants(samplingFreq); + virtual void instanceInit(int sample_rate) { + instanceConstants(sample_rate); instanceResetUserInterface(); instanceClear(); } @@ -769,9 +783,9 @@ class fx_freeverb : public dsp { virtual fx_freeverb* clone() { return new fx_freeverb(); } + virtual int getSampleRate() { - return fSamplingFreq; - + return fSampleRate; } virtual void buildUserInterface(UI* ui_interface) { @@ -784,7 +798,6 @@ class fx_freeverb : public dsp { ui_interface->declare(&fHslider2, "stye", "knob"); ui_interface->addHorizontalSlider("room", &fHslider2, 0.5f, 0.0f, 1.0f, 0.00100000005f); ui_interface->closeBox(); - } virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { @@ -796,7 +809,7 @@ class fx_freeverb : public dsp { float fSlow3 = (0.00100000005f * float(fHslider2)); for (int i = 0; (i < count); i = (i + 1)) { float fTemp0 = float(input0[i]); - float fTemp1 = (iSlow0?0.0f:fTemp0); + float fTemp1 = (iSlow0 ? 0.0f : fTemp0); fRec0[0] = (fSlow1 + (0.999000013f * fRec0[1])); fRec11[0] = (fSlow2 + (0.999000013f * fRec11[1])); float fTemp2 = (1.0f - fRec11[0]); @@ -841,7 +854,7 @@ class fx_freeverb : public dsp { fVec11[(IOTA & 1023)] = fTemp6; fRec1[0] = fVec11[((IOTA - iConst12) & 1023)]; float fRec2 = (0.0f - (0.5f * fTemp6)); - output0[i] = FAUSTFLOAT((iSlow0?fTemp0:((fTemp1 * (1.0f - fRec0[0])) + (fRec0[0] * (fRec2 + fRec1[1]))))); + output0[i] = FAUSTFLOAT((iSlow0 ? fTemp0 : ((fTemp1 * (1.0f - fRec0[0])) + (fRec0[0] * (fRec2 + fRec1[1]))))); fRec0[1] = fRec0[0]; fRec11[1] = fRec11[0]; fRec10[1] = fRec10[0]; @@ -866,12 +879,9 @@ class fx_freeverb : public dsp { fRec5[1] = fRec5[0]; fRec3[1] = fRec3[0]; fRec1[1] = fRec1[0]; - } - } - }; // clang-format on #endif diff --git a/ceammc/ext/src/fx/fx_freeverb2.h b/ceammc/ext/src/fx/fx_freeverb2.h index 12ed493998..cf57fa0117 100644 --- a/ceammc/ext/src/fx/fx_freeverb2.h +++ b/ceammc/ext/src/fx/fx_freeverb2.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "fx.freeverb2" -Code generated with Faust 2.15.0 (https://faust.grame.fr) -Compilation options: cpp, -scal -ftz 0 +Code generated with Faust 2.22.1 (https://faust.grame.fr) +Compilation options: -lang cpp -scal -ftz 0 ------------------------------------------------------------ */ #ifndef __fx_freeverb2_H__ @@ -14,6 +14,7 @@ Compilation options: cpp, -scal -ftz 0 #include #include +/************************** BEGIN dsp.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -96,23 +97,23 @@ class dsp { * - static class 'classInit': static tables initialization * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void init(int samplingRate) = 0; + virtual void init(int sample_rate) = 0; /** * Init instance state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceInit(int samplingRate) = 0; + virtual void instanceInit(int sample_rate) = 0; /** * Init instance constant state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceConstants(int samplingRate) = 0; + virtual void instanceConstants(int sample_rate) = 0; /* Init default control parameters values */ virtual void instanceResetUserInterface() = 0; @@ -149,8 +150,8 @@ class dsp { * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the number of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) * */ virtual void compute(double /*date_usec*/, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -169,16 +170,16 @@ class decorator_dsp : public dsp { public: - decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + decorator_dsp(dsp* dsp = nullptr):fDSP(dsp) {} virtual ~decorator_dsp() { delete fDSP; } virtual int getNumInputs() { return fDSP->getNumInputs(); } virtual int getNumOutputs() { return fDSP->getNumOutputs(); } virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } virtual int getSampleRate() { return fDSP->getSampleRate(); } - virtual void init(int samplingRate) { fDSP->init(samplingRate); } - virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } - virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void init(int sample_rate) { fDSP->init(sample_rate); } + virtual void instanceInit(int sample_rate) { fDSP->instanceInit(sample_rate); } + virtual void instanceConstants(int sample_rate) { fDSP->instanceConstants(sample_rate); } virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } @@ -233,6 +234,8 @@ class dsp_factory { #endif #endif +/************************** END dsp.h **************************/ +/************************** BEGIN UI.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -272,45 +275,54 @@ class dsp_factory { struct Soundfile; -class UI +template +class UIReal { - + public: - - UI() {} - - virtual ~UI() {} - + + UIReal() {} + virtual ~UIReal() {} + // -- widget's layouts - + virtual void openTabBox(const char* label) = 0; virtual void openHorizontalBox(const char* label) = 0; virtual void openVerticalBox(const char* label) = 0; virtual void closeBox() = 0; - + // -- active widgets - - virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - + + virtual void addButton(const char* label, REAL* zone) = 0; + virtual void addCheckButton(const char* label, REAL* zone) = 0; + virtual void addVerticalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addHorizontalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addNumEntry(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + // -- passive widgets - - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - + + virtual void addHorizontalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + virtual void addVerticalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + // -- soundfiles - + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; - + // -- metadata declarations + + virtual void declare(REAL* zone, const char* key, const char* val) {} +}; - virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +struct UI : public UIReal +{ + + UI() {} + virtual ~UI() {} }; #endif +/************************** END UI.h **************************/ +/************************** BEGIN meta.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -339,11 +351,14 @@ class UI struct Meta { - virtual void declare(const char* key, const char* value) = 0; virtual ~Meta() {}; + virtual void declare(const char* key, const char* value) = 0; + }; #endif +/************************** END meta.h **************************/ +/************************** BEGIN misc.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -366,7 +381,7 @@ struct Meta that work under terms of your choice, so long as this FAUST architecture section is not modified. ************************************************************************/ - + #ifndef __misc__ #define __misc__ @@ -374,6 +389,8 @@ struct Meta #include #include #include +#include +#include using std::max; @@ -395,27 +412,65 @@ static int int2pow2(int x) { int r = 0; while ((1<declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.0"); + m->declare("basics.lib/version", "0.1"); m->declare("ceammc.lib/name", "Ceammc PureData misc utils"); m->declare("ceammc.lib/version", "0.1.1"); m->declare("ceammc_ui.lib/name", "CEAMMC faust default UI elements"); m->declare("ceammc_ui.lib/version", "0.1.1"); m->declare("delays.lib/name", "Faust Delay Library"); - m->declare("delays.lib/version", "0.0"); - m->declare("filename", "fx_freeverb2"); + m->declare("delays.lib/version", "0.1"); + m->declare("filename", "fx_freeverb2.dsp"); + m->declare("filters.lib/allpass_comb:author", "Julius O. Smith III"); + m->declare("filters.lib/allpass_comb:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/allpass_comb:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/lowpass0_highpass1", "Copyright (C) 2003-2019 by Julius O. Smith III "); m->declare("filters.lib/name", "Faust Filters Library"); - m->declare("filters.lib/version", "0.0"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); @@ -537,22 +596,20 @@ class fx_freeverb2 : public dsp { m->declare("reverbs.lib/name", "Faust Reverb Library"); m->declare("reverbs.lib/version", "0.0"); m->declare("routes.lib/name", "Faust Signal Routing Library"); - m->declare("routes.lib/version", "0.0"); + m->declare("routes.lib/version", "0.1"); m->declare("signals.lib/name", "Faust Signal Routing Library"); m->declare("signals.lib/version", "0.0"); } virtual int getNumInputs() { return 2; - } virtual int getNumOutputs() { return 2; - } virtual int getInputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -565,14 +622,12 @@ class fx_freeverb2 : public dsp { rate = -1; break; } - } return rate; - } virtual int getOutputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -585,19 +640,16 @@ class fx_freeverb2 : public dsp { rate = -1; break; } - } return rate; - } - static void classInit(int samplingFreq) { - + static void classInit(int sample_rate) { } - virtual void instanceConstants(int samplingFreq) { - fSamplingFreq = samplingFreq; - fConst0 = std::min(192000.0f, std::max(1.0f, float(fSamplingFreq))); + virtual void instanceConstants(int sample_rate) { + fSampleRate = sample_rate; + fConst0 = std::min(192000.0f, std::max(1.0f, float(fSampleRate))); iConst1 = int((0.0253061224f * fConst0)); iConst2 = int((0.0269387756f * fConst0)); iConst3 = int((0.0289569162f * fConst0)); @@ -610,7 +662,6 @@ class fx_freeverb2 : public dsp { iConst10 = std::min(1024, std::max(0, (int((0.00999999978f * fConst0)) + -1))); iConst11 = std::min(1024, std::max(0, (int((0.00773242628f * fConst0)) + -1))); iConst12 = std::min(1024, std::max(0, (int((0.00510204071f * fConst0)) + -1))); - } virtual void instanceResetUserInterface() { @@ -618,160 +669,123 @@ class fx_freeverb2 : public dsp { fHslider0 = FAUSTFLOAT(0.33000000000000002f); fHslider1 = FAUSTFLOAT(0.5f); fHslider2 = FAUSTFLOAT(0.5f); - } virtual void instanceClear() { for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { fRec0[l0] = 0.0f; - } for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { fRec11[l1] = 0.0f; - } for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { fRec10[l2] = 0.0f; - } for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { fRec12[l3] = 0.0f; - } IOTA = 0; for (int l4 = 0; (l4 < 8192); l4 = (l4 + 1)) { fVec0[l4] = 0.0f; - } for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { fRec9[l5] = 0.0f; - } for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { fRec14[l6] = 0.0f; - } for (int l7 = 0; (l7 < 8192); l7 = (l7 + 1)) { fVec1[l7] = 0.0f; - } for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { fRec13[l8] = 0.0f; - } for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { fRec16[l9] = 0.0f; - } for (int l10 = 0; (l10 < 8192); l10 = (l10 + 1)) { fVec2[l10] = 0.0f; - } for (int l11 = 0; (l11 < 2); l11 = (l11 + 1)) { fRec15[l11] = 0.0f; - } for (int l12 = 0; (l12 < 2); l12 = (l12 + 1)) { fRec18[l12] = 0.0f; - } for (int l13 = 0; (l13 < 8192); l13 = (l13 + 1)) { fVec3[l13] = 0.0f; - } for (int l14 = 0; (l14 < 2); l14 = (l14 + 1)) { fRec17[l14] = 0.0f; - } for (int l15 = 0; (l15 < 2); l15 = (l15 + 1)) { fRec20[l15] = 0.0f; - } for (int l16 = 0; (l16 < 8192); l16 = (l16 + 1)) { fVec4[l16] = 0.0f; - } for (int l17 = 0; (l17 < 2); l17 = (l17 + 1)) { fRec19[l17] = 0.0f; - } for (int l18 = 0; (l18 < 2); l18 = (l18 + 1)) { fRec22[l18] = 0.0f; - } for (int l19 = 0; (l19 < 8192); l19 = (l19 + 1)) { fVec5[l19] = 0.0f; - } for (int l20 = 0; (l20 < 2); l20 = (l20 + 1)) { fRec21[l20] = 0.0f; - } for (int l21 = 0; (l21 < 2); l21 = (l21 + 1)) { fRec24[l21] = 0.0f; - } for (int l22 = 0; (l22 < 8192); l22 = (l22 + 1)) { fVec6[l22] = 0.0f; - } for (int l23 = 0; (l23 < 2); l23 = (l23 + 1)) { fRec23[l23] = 0.0f; - } for (int l24 = 0; (l24 < 2); l24 = (l24 + 1)) { fRec26[l24] = 0.0f; - } for (int l25 = 0; (l25 < 8192); l25 = (l25 + 1)) { fVec7[l25] = 0.0f; - } for (int l26 = 0; (l26 < 2); l26 = (l26 + 1)) { fRec25[l26] = 0.0f; - } for (int l27 = 0; (l27 < 2048); l27 = (l27 + 1)) { fVec8[l27] = 0.0f; - } for (int l28 = 0; (l28 < 2); l28 = (l28 + 1)) { fRec7[l28] = 0.0f; - } for (int l29 = 0; (l29 < 2048); l29 = (l29 + 1)) { fVec9[l29] = 0.0f; - } for (int l30 = 0; (l30 < 2); l30 = (l30 + 1)) { fRec5[l30] = 0.0f; - } for (int l31 = 0; (l31 < 2048); l31 = (l31 + 1)) { fVec10[l31] = 0.0f; - } for (int l32 = 0; (l32 < 2); l32 = (l32 + 1)) { fRec3[l32] = 0.0f; - } for (int l33 = 0; (l33 < 1024); l33 = (l33 + 1)) { fVec11[l33] = 0.0f; - } for (int l34 = 0; (l34 < 2); l34 = (l34 + 1)) { fRec1[l34] = 0.0f; - } - } - virtual void init(int samplingFreq) { - classInit(samplingFreq); - instanceInit(samplingFreq); + virtual void init(int sample_rate) { + classInit(sample_rate); + instanceInit(sample_rate); } - virtual void instanceInit(int samplingFreq) { - instanceConstants(samplingFreq); + virtual void instanceInit(int sample_rate) { + instanceConstants(sample_rate); instanceResetUserInterface(); instanceClear(); } @@ -779,9 +793,9 @@ class fx_freeverb2 : public dsp { virtual fx_freeverb2* clone() { return new fx_freeverb2(); } + virtual int getSampleRate() { - return fSamplingFreq; - + return fSampleRate; } virtual void buildUserInterface(UI* ui_interface) { @@ -792,7 +806,6 @@ class fx_freeverb2 : public dsp { ui_interface->addHorizontalSlider("drywet", &fHslider0, 0.330000013f, 0.0f, 1.0f, 0.00999999978f); ui_interface->addHorizontalSlider("room", &fHslider2, 0.5f, 0.0f, 1.0f, 0.00100000005f); ui_interface->closeBox(); - } virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { @@ -806,11 +819,11 @@ class fx_freeverb2 : public dsp { float fSlow3 = (0.00100000005f * float(fHslider2)); for (int i = 0; (i < count); i = (i + 1)) { float fTemp0 = float(input0[i]); - float fTemp1 = (iSlow0?0.0f:fTemp0); + float fTemp1 = (iSlow0 ? 0.0f : fTemp0); fRec0[0] = (fSlow1 + (0.999000013f * fRec0[1])); float fTemp2 = (1.0f - fRec0[0]); float fTemp3 = float(input1[i]); - float fTemp4 = (iSlow0?0.0f:fTemp3); + float fTemp4 = (iSlow0 ? 0.0f : fTemp3); fRec11[0] = (fSlow2 + (0.999000013f * fRec11[1])); float fTemp5 = (1.0f - fRec11[0]); fRec10[0] = ((fRec11[0] * fRec10[1]) + (fTemp5 * fRec9[1])); @@ -856,8 +869,8 @@ class fx_freeverb2 : public dsp { fRec1[0] = fVec11[((IOTA - iConst12) & 1023)]; float fRec2 = (0.0f - (0.5f * fTemp10)); float fTemp11 = (fRec0[0] * (fRec2 + fRec1[1])); - output0[i] = FAUSTFLOAT((iSlow0?fTemp0:((fTemp1 * fTemp2) + fTemp11))); - output1[i] = FAUSTFLOAT((iSlow0?fTemp3:(fTemp11 + (fTemp2 * fTemp4)))); + output0[i] = FAUSTFLOAT((iSlow0 ? fTemp0 : ((fTemp1 * fTemp2) + fTemp11))); + output1[i] = FAUSTFLOAT((iSlow0 ? fTemp3 : (fTemp11 + (fTemp2 * fTemp4)))); fRec0[1] = fRec0[0]; fRec11[1] = fRec11[0]; fRec10[1] = fRec10[0]; @@ -882,12 +895,9 @@ class fx_freeverb2 : public dsp { fRec5[1] = fRec5[0]; fRec3[1] = fRec3[0]; fRec1[1] = fRec1[0]; - } - } - }; // clang-format on #endif diff --git a/ceammc/ext/src/fx/fx_freqshift.h b/ceammc/ext/src/fx/fx_freqshift.h index 5e28dfc437..462792e068 100644 --- a/ceammc/ext/src/fx/fx_freqshift.h +++ b/ceammc/ext/src/fx/fx_freqshift.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "frequency shifter" -Code generated with Faust 2.8.5 (https://faust.grame.fr) -Compilation options: cpp, -scal -ftz 0 +Code generated with Faust 2.22.1 (https://faust.grame.fr) +Compilation options: -lang cpp -scal -ftz 0 ------------------------------------------------------------ */ #ifndef __freqshift_H__ @@ -39,6 +39,7 @@ Compilation options: cpp, -scal -ftz 0 #include #include +/************************** BEGIN dsp.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -121,23 +122,23 @@ class dsp { * - static class 'classInit': static tables initialization * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void init(int samplingRate) = 0; + virtual void init(int sample_rate) = 0; /** * Init instance state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceInit(int samplingRate) = 0; + virtual void instanceInit(int sample_rate) = 0; /** * Init instance constant state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceConstants(int samplingRate) = 0; + virtual void instanceConstants(int sample_rate) = 0; /* Init default control parameters values */ virtual void instanceResetUserInterface() = 0; @@ -174,8 +175,8 @@ class dsp { * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the number of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) * */ virtual void compute(double /*date_usec*/, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -194,16 +195,16 @@ class decorator_dsp : public dsp { public: - decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + decorator_dsp(dsp* dsp = nullptr):fDSP(dsp) {} virtual ~decorator_dsp() { delete fDSP; } virtual int getNumInputs() { return fDSP->getNumInputs(); } virtual int getNumOutputs() { return fDSP->getNumOutputs(); } virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } virtual int getSampleRate() { return fDSP->getSampleRate(); } - virtual void init(int samplingRate) { fDSP->init(samplingRate); } - virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } - virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void init(int sample_rate) { fDSP->init(sample_rate); } + virtual void instanceInit(int sample_rate) { fDSP->instanceInit(sample_rate); } + virtual void instanceConstants(int sample_rate) { fDSP->instanceConstants(sample_rate); } virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } @@ -258,6 +259,8 @@ class dsp_factory { #endif #endif +/************************** END dsp.h **************************/ +/************************** BEGIN UI.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -297,45 +300,54 @@ class dsp_factory { struct Soundfile; -class UI +template +class UIReal { - + public: - - UI() {} - - virtual ~UI() {} - + + UIReal() {} + virtual ~UIReal() {} + // -- widget's layouts - + virtual void openTabBox(const char* label) = 0; virtual void openHorizontalBox(const char* label) = 0; virtual void openVerticalBox(const char* label) = 0; virtual void closeBox() = 0; - + // -- active widgets - - virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - + + virtual void addButton(const char* label, REAL* zone) = 0; + virtual void addCheckButton(const char* label, REAL* zone) = 0; + virtual void addVerticalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addHorizontalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addNumEntry(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + // -- passive widgets - - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - + + virtual void addHorizontalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + virtual void addVerticalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + // -- soundfiles - + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; - + // -- metadata declarations + + virtual void declare(REAL* zone, const char* key, const char* val) {} +}; + +struct UI : public UIReal +{ - virtual void declare(FAUSTFLOAT*, const char*, const char*) {} + UI() {} + virtual ~UI() {} }; #endif +/************************** END UI.h **************************/ +/************************** BEGIN meta.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -364,11 +376,14 @@ class UI struct Meta { - virtual void declare(const char* key, const char* value) = 0; virtual ~Meta() {}; + virtual void declare(const char* key, const char* value) = 0; + }; #endif +/************************** END meta.h **************************/ +/************************** BEGIN misc.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -391,15 +406,16 @@ struct Meta that work under terms of your choice, so long as this FAUST architecture section is not modified. ************************************************************************/ - + #ifndef __misc__ #define __misc__ #include #include -#include -#include #include +#include +#include +#include using std::max; @@ -407,41 +423,79 @@ using std::min; struct XXXX_Meta : std::map { - void declare(const char* key, const char* value) { (*this)[key]=value; } + void declare(const char* key, const char* value) { (*this)[key] = value; } }; struct MY_Meta : Meta, std::map { - void declare(const char* key, const char* value) { (*this)[key]=value; } + void declare(const char* key, const char* value) { (*this)[key] = value; } }; -inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } +static int lsr(int x, int n) { return int(((unsigned int)x) >> n); } -inline int int2pow2(int x) { int r = 0; while ((1<declare("filename", "fx_freqshift"); + m->declare("filename", "fx_freqshift.dsp"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); @@ -540,15 +595,13 @@ class freqshift : public dsp { virtual int getNumInputs() { return 2; - } virtual int getNumOutputs() { return 2; - } virtual int getInputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -561,14 +614,12 @@ class freqshift : public dsp { rate = -1; break; } - } return rate; - } virtual int getOutputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -581,77 +632,61 @@ class freqshift : public dsp { rate = -1; break; } - } return rate; - } - static void classInit(int samplingFreq) { - + static void classInit(int sample_rate) { } - virtual void instanceConstants(int samplingFreq) { - fSamplingFreq = samplingFreq; - fConst0 = std::min(192000.0f, std::max(1.0f, float(fSamplingFreq))); + virtual void instanceConstants(int sample_rate) { + fSampleRate = sample_rate; + fConst0 = std::min(192000.0f, std::max(1.0f, float(fSampleRate))); fConst1 = (6.28318548f / fConst0); - } virtual void instanceResetUserInterface() { - } virtual void instanceClear() { for (int l0 = 0; (l0 < 4); l0 = (l0 + 1)) { fVec0[l0] = 0.0f; - } for (int l1 = 0; (l1 < 3); l1 = (l1 + 1)) { fRec3[l1] = 0.0f; - } for (int l2 = 0; (l2 < 3); l2 = (l2 + 1)) { fRec2[l2] = 0.0f; - } for (int l3 = 0; (l3 < 3); l3 = (l3 + 1)) { fRec1[l3] = 0.0f; - } for (int l4 = 0; (l4 < 3); l4 = (l4 + 1)) { fRec0[l4] = 0.0f; - } for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { iRec4[l5] = 0; - } for (int l6 = 0; (l6 < 3); l6 = (l6 + 1)) { fRec8[l6] = 0.0f; - } for (int l7 = 0; (l7 < 3); l7 = (l7 + 1)) { fRec7[l7] = 0.0f; - } for (int l8 = 0; (l8 < 3); l8 = (l8 + 1)) { fRec6[l8] = 0.0f; - } for (int l9 = 0; (l9 < 3); l9 = (l9 + 1)) { fRec5[l9] = 0.0f; - } - } - virtual void init(int samplingFreq) { - classInit(samplingFreq); - instanceInit(samplingFreq); + virtual void init(int sample_rate) { + classInit(sample_rate); + instanceInit(sample_rate); } - virtual void instanceInit(int samplingFreq) { - instanceConstants(samplingFreq); + virtual void instanceInit(int sample_rate) { + instanceConstants(sample_rate); instanceResetUserInterface(); instanceClear(); } @@ -659,15 +694,14 @@ class freqshift : public dsp { virtual freqshift* clone() { return new freqshift(); } + virtual int getSampleRate() { - return fSamplingFreq; - + return fSampleRate; } virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("frequency shifter"); ui_interface->closeBox(); - } virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { @@ -679,23 +713,22 @@ class freqshift : public dsp { float fTemp0 = float(input0[i]); fVec0[0] = fTemp0; fRec3[0] = ((0.161758006f * (fTemp0 + fRec3[2])) - fVec0[2]); - fRec2[0] = ((0.733029008f * (fRec2[2] + fRec3[0])) - fRec3[2]); - fRec1[0] = ((0.945349991f * (fRec1[2] + fRec2[0])) - fRec2[2]); - fRec0[0] = ((0.990598023f * (fRec0[2] + fRec1[0])) - fRec1[2]); + fRec2[0] = ((0.733029008f * (fRec3[0] + fRec2[2])) - fRec3[2]); + fRec1[0] = ((0.945349991f * (fRec2[0] + fRec1[2])) - fRec2[2]); + fRec0[0] = ((0.990598023f * (fRec1[0] + fRec0[2])) - fRec1[2]); float fTemp1 = float(input1[i]); iRec4[0] = (iRec4[1] + 1); float fTemp2 = (fConst1 * (fTemp1 * std::fmod(float(iRec4[0]), (fConst0 / fTemp1)))); float fTemp3 = (fRec0[0] * std::sin(fTemp2)); fRec8[0] = ((0.479400992f * (fVec0[1] + fRec8[2])) - fVec0[3]); - fRec7[0] = ((0.876218021f * (fRec7[2] + fRec8[0])) - fRec8[2]); - fRec6[0] = ((0.976598978f * (fRec6[2] + fRec7[0])) - fRec7[2]); - fRec5[0] = ((0.997500002f * (fRec5[2] + fRec6[0])) - fRec6[2]); + fRec7[0] = ((0.876218021f * (fRec8[0] + fRec7[2])) - fRec8[2]); + fRec6[0] = ((0.976598978f * (fRec7[0] + fRec6[2])) - fRec7[2]); + fRec5[0] = ((0.997500002f * (fRec6[0] + fRec5[2])) - fRec6[2]); float fTemp4 = (fRec5[0] * std::cos(fTemp2)); output0[i] = FAUSTFLOAT((fTemp3 + fTemp4)); output1[i] = FAUSTFLOAT((fTemp3 - fTemp4)); for (int j0 = 3; (j0 > 0); j0 = (j0 - 1)) { fVec0[j0] = fVec0[(j0 - 1)]; - } fRec3[2] = fRec3[1]; fRec3[1] = fRec3[0]; @@ -714,12 +747,9 @@ class freqshift : public dsp { fRec6[1] = fRec6[0]; fRec5[2] = fRec5[1]; fRec5[1] = fRec5[0]; - } - } - }; // clang-format on #endif diff --git a/ceammc/ext/src/fx/fx_granulator.h b/ceammc/ext/src/fx/fx_granulator.h index 864c67b141..2db5409116 100644 --- a/ceammc/ext/src/fx/fx_granulator.h +++ b/ceammc/ext/src/fx/fx_granulator.h @@ -2,8 +2,8 @@ author: "Mayank Sanganeria" name: "fx.granulator" version: "1.0" -Code generated with Faust 2.8.5 (https://faust.grame.fr) -Compilation options: cpp, -scal -ftz 0 +Code generated with Faust 2.22.1 (https://faust.grame.fr) +Compilation options: -lang cpp -scal -ftz 0 ------------------------------------------------------------ */ #ifndef __fx_granulator_H__ @@ -16,6 +16,7 @@ Compilation options: cpp, -scal -ftz 0 #include #include +/************************** BEGIN dsp.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -98,23 +99,23 @@ class dsp { * - static class 'classInit': static tables initialization * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void init(int samplingRate) = 0; + virtual void init(int sample_rate) = 0; /** * Init instance state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceInit(int samplingRate) = 0; + virtual void instanceInit(int sample_rate) = 0; /** * Init instance constant state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceConstants(int samplingRate) = 0; + virtual void instanceConstants(int sample_rate) = 0; /* Init default control parameters values */ virtual void instanceResetUserInterface() = 0; @@ -151,8 +152,8 @@ class dsp { * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the number of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) * */ virtual void compute(double /*date_usec*/, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -171,16 +172,16 @@ class decorator_dsp : public dsp { public: - decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + decorator_dsp(dsp* dsp = nullptr):fDSP(dsp) {} virtual ~decorator_dsp() { delete fDSP; } virtual int getNumInputs() { return fDSP->getNumInputs(); } virtual int getNumOutputs() { return fDSP->getNumOutputs(); } virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } virtual int getSampleRate() { return fDSP->getSampleRate(); } - virtual void init(int samplingRate) { fDSP->init(samplingRate); } - virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } - virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void init(int sample_rate) { fDSP->init(sample_rate); } + virtual void instanceInit(int sample_rate) { fDSP->instanceInit(sample_rate); } + virtual void instanceConstants(int sample_rate) { fDSP->instanceConstants(sample_rate); } virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } @@ -235,6 +236,8 @@ class dsp_factory { #endif #endif +/************************** END dsp.h **************************/ +/************************** BEGIN UI.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -274,45 +277,54 @@ class dsp_factory { struct Soundfile; -class UI +template +class UIReal { - + public: - - UI() {} - - virtual ~UI() {} - + + UIReal() {} + virtual ~UIReal() {} + // -- widget's layouts - + virtual void openTabBox(const char* label) = 0; virtual void openHorizontalBox(const char* label) = 0; virtual void openVerticalBox(const char* label) = 0; virtual void closeBox() = 0; - + // -- active widgets - - virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - + + virtual void addButton(const char* label, REAL* zone) = 0; + virtual void addCheckButton(const char* label, REAL* zone) = 0; + virtual void addVerticalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addHorizontalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addNumEntry(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + // -- passive widgets - - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - + + virtual void addHorizontalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + virtual void addVerticalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + // -- soundfiles - + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; - + // -- metadata declarations + + virtual void declare(REAL* zone, const char* key, const char* val) {} +}; + +struct UI : public UIReal +{ - virtual void declare(FAUSTFLOAT*, const char*, const char*) {} + UI() {} + virtual ~UI() {} }; #endif +/************************** END UI.h **************************/ +/************************** BEGIN meta.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -341,11 +353,14 @@ class UI struct Meta { - virtual void declare(const char* key, const char* value) = 0; virtual ~Meta() {}; + virtual void declare(const char* key, const char* value) = 0; + }; #endif +/************************** END meta.h **************************/ +/************************** BEGIN misc.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -368,15 +383,16 @@ struct Meta that work under terms of your choice, so long as this FAUST architecture section is not modified. ************************************************************************/ - + #ifndef __misc__ #define __misc__ #include #include -#include -#include #include +#include +#include +#include using std::max; @@ -384,41 +400,79 @@ using std::min; struct XXXX_Meta : std::map { - void declare(const char* key, const char* value) { (*this)[key]=value; } + void declare(const char* key, const char* value) { (*this)[key] = value; } }; struct MY_Meta : Meta, std::map { - void declare(const char* key, const char* value) { (*this)[key]=value; } + void declare(const char* key, const char* value) { (*this)[key] = value; } }; -inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } +static int lsr(int x, int n) { return int(((unsigned int)x) >> n); } -inline int int2pow2(int x) { int r = 0; while ((1< #include - class fx_granulatorSIG0 { private: @@ -459,27 +512,23 @@ class fx_granulatorSIG0 { int getNumInputsfx_granulatorSIG0() { return 0; - } int getNumOutputsfx_granulatorSIG0() { return 1; - } int getInputRatefx_granulatorSIG0(int channel) { int rate; - switch (channel) { + switch ((channel)) { default: { rate = -1; break; } - } return rate; - } int getOutputRatefx_granulatorSIG0(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 0; break; @@ -488,28 +537,23 @@ class fx_granulatorSIG0 { rate = -1; break; } - } return rate; - } - void instanceInitfx_granulatorSIG0(int samplingFreq) { - + void instanceInitfx_granulatorSIG0(int sample_rate) { } - void fillfx_granulatorSIG0(int count, float* output) { + void fillfx_granulatorSIG0(int count, float* table) { for (int i = 0; (i < count); i = (i + 1)) { - output[i] = 0.0f; - + table[i] = 0.0f; } - } -}; -fx_granulatorSIG0* newfx_granulatorSIG0() { return (fx_granulatorSIG0*)new fx_granulatorSIG0(); } -void deletefx_granulatorSIG0(fx_granulatorSIG0* dsp) { delete dsp; } +}; +static fx_granulatorSIG0* newfx_granulatorSIG0() { return (fx_granulatorSIG0*)new fx_granulatorSIG0(); } +static void deletefx_granulatorSIG0(fx_granulatorSIG0* dsp) { delete dsp; } class fx_granulatorSIG1 { @@ -521,27 +565,23 @@ class fx_granulatorSIG1 { int getNumInputsfx_granulatorSIG1() { return 0; - } int getNumOutputsfx_granulatorSIG1() { return 1; - } int getInputRatefx_granulatorSIG1(int channel) { int rate; - switch (channel) { + switch ((channel)) { default: { rate = -1; break; } - } return rate; - } int getOutputRatefx_granulatorSIG1(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 0; break; @@ -550,39 +590,35 @@ class fx_granulatorSIG1 { rate = -1; break; } - } return rate; - } - void instanceInitfx_granulatorSIG1(int samplingFreq) { + void instanceInitfx_granulatorSIG1(int sample_rate) { for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { iRec70[l8] = 0; - } - } - void fillfx_granulatorSIG1(int count, float* output) { + void fillfx_granulatorSIG1(int count, float* table) { for (int i = 0; (i < count); i = (i + 1)) { iRec70[0] = (iRec70[1] + 1); - output[i] = (0.5f * (1.0f - std::cos((0.00614192104f * float((iRec70[0] + -1)))))); + table[i] = (0.5f * (1.0f - std::cos((0.00614192104f * float((iRec70[0] + -1)))))); iRec70[1] = iRec70[0]; - } - } + }; -fx_granulatorSIG1* newfx_granulatorSIG1() { return (fx_granulatorSIG1*)new fx_granulatorSIG1(); } -void deletefx_granulatorSIG1(fx_granulatorSIG1* dsp) { delete dsp; } +static fx_granulatorSIG1* newfx_granulatorSIG1() { return (fx_granulatorSIG1*)new fx_granulatorSIG1(); } +static void deletefx_granulatorSIG1(fx_granulatorSIG1* dsp) { delete dsp; } static float ftbl1fx_granulatorSIG1[1024]; #ifndef FAUSTCLASS #define FAUSTCLASS fx_granulator #endif + #ifdef __APPLE__ #define exp10f __exp10f #define exp10 __exp10 @@ -595,85 +631,85 @@ class fx_granulator : public dsp { FAUSTFLOAT fHslider0; float ftbl0[480000]; int iVec0[2]; - int fSamplingFreq; + int fSampleRate; float fConst0; FAUSTFLOAT fHslider1; float fRec1[2]; int iRec0[2]; FAUSTFLOAT fHslider2; - float fRec3[2]; - int iRec2[2]; + float fRec4[2]; + int iRec3[2]; + int iRec6[2]; int iRec5[2]; - int iRec4[2]; - int iRec69[2]; - int iRec71[2]; + int iRec2[2]; int iRec72[2]; - int iRec73[2]; + int iRec71[2]; int iRec74[2]; - int iRec75[2]; + int iRec73[2]; int iRec76[2]; - int iRec77[2]; + int iRec75[2]; int iRec78[2]; - int iRec79[2]; + int iRec77[2]; int iRec80[2]; - int iRec81[2]; + int iRec79[2]; int iRec82[2]; - int iRec83[2]; + int iRec81[2]; int iRec84[2]; - int iRec85[2]; + int iRec83[2]; int iRec86[2]; - int iRec87[2]; + int iRec85[2]; int iRec88[2]; - int iRec89[2]; + int iRec87[2]; int iRec90[2]; - int iRec91[2]; + int iRec89[2]; int iRec92[2]; - int iRec93[2]; + int iRec91[2]; int iRec94[2]; - int iRec95[2]; + int iRec93[2]; int iRec96[2]; - int iRec97[2]; + int iRec95[2]; int iRec98[2]; - int iRec99[2]; + int iRec97[2]; int iRec100[2]; - int iRec101[2]; + int iRec99[2]; int iRec102[2]; - int iRec103[2]; + int iRec101[2]; int iRec104[2]; - int iRec105[2]; + int iRec103[2]; int iRec106[2]; - int iRec107[2]; + int iRec105[2]; int iRec108[2]; - int iRec109[2]; + int iRec107[2]; int iRec110[2]; - int iRec111[2]; + int iRec109[2]; int iRec112[2]; - int iRec113[2]; + int iRec111[2]; int iRec114[2]; - int iRec115[2]; + int iRec113[2]; int iRec116[2]; - int iRec117[2]; + int iRec115[2]; int iRec118[2]; - int iRec119[2]; + int iRec117[2]; int iRec120[2]; - int iRec121[2]; + int iRec119[2]; int iRec122[2]; - int iRec123[2]; + int iRec121[2]; int iRec124[2]; - int iRec125[2]; + int iRec123[2]; int iRec126[2]; - int iRec127[2]; + int iRec125[2]; int iRec128[2]; - int iRec129[2]; + int iRec127[2]; int iRec130[2]; - int iRec131[2]; + int iRec129[2]; int iRec132[2]; + int iRec131[2]; int iRec134[2]; int iRec133[2]; - int iRec135[2]; int iRec136[2]; - int iRec137[2]; + int iRec135[2]; int iRec138[2]; + int iRec137[2]; int iRec140[2]; int iRec139[2]; int iRec142[2]; @@ -682,46 +718,46 @@ class fx_granulator : public dsp { int iRec143[2]; int iRec146[2]; int iRec145[2]; - int iRec147[2]; int iRec148[2]; + int iRec147[2]; int iRec150[2]; int iRec149[2]; int iRec152[2]; int iRec151[2]; int iRec154[2]; int iRec153[2]; - int iRec155[2]; int iRec156[2]; - int iRec157[2]; + int iRec155[2]; int iRec158[2]; - int iRec159[2]; + int iRec157[2]; int iRec160[2]; - int iRec161[2]; + int iRec159[2]; int iRec162[2]; - int iRec163[2]; + int iRec161[2]; int iRec164[2]; - int iRec165[2]; + int iRec163[2]; int iRec166[2]; - int iRec167[2]; + int iRec165[2]; int iRec168[2]; - int iRec169[2]; + int iRec167[2]; int iRec170[2]; - int iRec171[2]; + int iRec169[2]; int iRec172[2]; - int iRec173[2]; + int iRec171[2]; int iRec174[2]; - int iRec175[2]; + int iRec173[2]; int iRec176[2]; - int iRec177[2]; + int iRec175[2]; int iRec178[2]; - int iRec179[2]; + int iRec177[2]; int iRec180[2]; - int iRec181[2]; + int iRec179[2]; int iRec182[2]; - int iRec183[2]; + int iRec181[2]; int iRec184[2]; - int iRec185[2]; + int iRec183[2]; int iRec186[2]; + int iRec185[2]; int iRec188[2]; int iRec187[2]; int iRec190[2]; @@ -730,18 +766,18 @@ class fx_granulator : public dsp { int iRec191[2]; int iRec194[2]; int iRec193[2]; - int iRec195[2]; int iRec196[2]; + int iRec195[2]; public: void metadata(Meta* m) { m->declare("author", "Mayank Sanganeria"); m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.0"); + m->declare("basics.lib/version", "0.1"); m->declare("ceammc.lib/name", "Ceammc PureData misc utils"); m->declare("ceammc.lib/version", "0.1.1"); - m->declare("filename", "fx_granulator"); + m->declare("filename", "fx_granulator.dsp"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); @@ -755,15 +791,13 @@ class fx_granulator : public dsp { virtual int getNumInputs() { return 1; - } virtual int getNumOutputs() { return 2; - } virtual int getInputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -772,14 +806,12 @@ class fx_granulator : public dsp { rate = -1; break; } - } return rate; - } virtual int getOutputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -792,583 +824,443 @@ class fx_granulator : public dsp { rate = -1; break; } - } return rate; - } - static void classInit(int samplingFreq) { + static void classInit(int sample_rate) { fx_granulatorSIG1* sig1 = newfx_granulatorSIG1(); - sig1->instanceInitfx_granulatorSIG1(samplingFreq); + sig1->instanceInitfx_granulatorSIG1(sample_rate); sig1->fillfx_granulatorSIG1(1024, ftbl1fx_granulatorSIG1); deletefx_granulatorSIG1(sig1); - } - virtual void instanceConstants(int samplingFreq) { - fSamplingFreq = samplingFreq; + virtual void instanceConstants(int sample_rate) { + fSampleRate = sample_rate; fx_granulatorSIG0* sig0 = newfx_granulatorSIG0(); - sig0->instanceInitfx_granulatorSIG0(samplingFreq); + sig0->instanceInitfx_granulatorSIG0(sample_rate); sig0->fillfx_granulatorSIG0(480000, ftbl0); - fConst0 = std::min(192000.0f, std::max(1.0f, float(fSamplingFreq))); + fConst0 = std::min(192000.0f, std::max(1.0f, float(fSampleRate))); deletefx_granulatorSIG0(sig0); - } virtual void instanceResetUserInterface() { fHslider0 = FAUSTFLOAT(10.0f); fHslider1 = FAUSTFLOAT(10.0f); fHslider2 = FAUSTFLOAT(100.0f); - } virtual void instanceClear() { for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { iVec0[l0] = 0; - } for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { fRec1[l1] = 0.0f; - } for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { iRec0[l2] = 0; - } for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { - fRec3[l3] = 0.0f; - + fRec4[l3] = 0.0f; } for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { - iRec2[l4] = 0; - + iRec3[l4] = 0; } for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { - iRec5[l5] = 0; - + iRec6[l5] = 0; } for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { - iRec4[l6] = 0; - + iRec5[l6] = 0; } for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) { - iRec69[l7] = 0; - + iRec2[l7] = 0; } for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { - iRec71[l9] = 0; - + iRec72[l9] = 0; } for (int l10 = 0; (l10 < 2); l10 = (l10 + 1)) { - iRec72[l10] = 0; - + iRec71[l10] = 0; } for (int l11 = 0; (l11 < 2); l11 = (l11 + 1)) { - iRec73[l11] = 0; - + iRec74[l11] = 0; } for (int l12 = 0; (l12 < 2); l12 = (l12 + 1)) { - iRec74[l12] = 0; - + iRec73[l12] = 0; } for (int l13 = 0; (l13 < 2); l13 = (l13 + 1)) { - iRec75[l13] = 0; - + iRec76[l13] = 0; } for (int l14 = 0; (l14 < 2); l14 = (l14 + 1)) { - iRec76[l14] = 0; - + iRec75[l14] = 0; } for (int l15 = 0; (l15 < 2); l15 = (l15 + 1)) { - iRec77[l15] = 0; - + iRec78[l15] = 0; } for (int l16 = 0; (l16 < 2); l16 = (l16 + 1)) { - iRec78[l16] = 0; - + iRec77[l16] = 0; } for (int l17 = 0; (l17 < 2); l17 = (l17 + 1)) { - iRec79[l17] = 0; - + iRec80[l17] = 0; } for (int l18 = 0; (l18 < 2); l18 = (l18 + 1)) { - iRec80[l18] = 0; - + iRec79[l18] = 0; } for (int l19 = 0; (l19 < 2); l19 = (l19 + 1)) { - iRec81[l19] = 0; - + iRec82[l19] = 0; } for (int l20 = 0; (l20 < 2); l20 = (l20 + 1)) { - iRec82[l20] = 0; - + iRec81[l20] = 0; } for (int l21 = 0; (l21 < 2); l21 = (l21 + 1)) { - iRec83[l21] = 0; - + iRec84[l21] = 0; } for (int l22 = 0; (l22 < 2); l22 = (l22 + 1)) { - iRec84[l22] = 0; - + iRec83[l22] = 0; } for (int l23 = 0; (l23 < 2); l23 = (l23 + 1)) { - iRec85[l23] = 0; - + iRec86[l23] = 0; } for (int l24 = 0; (l24 < 2); l24 = (l24 + 1)) { - iRec86[l24] = 0; - + iRec85[l24] = 0; } for (int l25 = 0; (l25 < 2); l25 = (l25 + 1)) { - iRec87[l25] = 0; - + iRec88[l25] = 0; } for (int l26 = 0; (l26 < 2); l26 = (l26 + 1)) { - iRec88[l26] = 0; - + iRec87[l26] = 0; } for (int l27 = 0; (l27 < 2); l27 = (l27 + 1)) { - iRec89[l27] = 0; - + iRec90[l27] = 0; } for (int l28 = 0; (l28 < 2); l28 = (l28 + 1)) { - iRec90[l28] = 0; - + iRec89[l28] = 0; } for (int l29 = 0; (l29 < 2); l29 = (l29 + 1)) { - iRec91[l29] = 0; - + iRec92[l29] = 0; } for (int l30 = 0; (l30 < 2); l30 = (l30 + 1)) { - iRec92[l30] = 0; - + iRec91[l30] = 0; } for (int l31 = 0; (l31 < 2); l31 = (l31 + 1)) { - iRec93[l31] = 0; - + iRec94[l31] = 0; } for (int l32 = 0; (l32 < 2); l32 = (l32 + 1)) { - iRec94[l32] = 0; - + iRec93[l32] = 0; } for (int l33 = 0; (l33 < 2); l33 = (l33 + 1)) { - iRec95[l33] = 0; - + iRec96[l33] = 0; } for (int l34 = 0; (l34 < 2); l34 = (l34 + 1)) { - iRec96[l34] = 0; - + iRec95[l34] = 0; } for (int l35 = 0; (l35 < 2); l35 = (l35 + 1)) { - iRec97[l35] = 0; - + iRec98[l35] = 0; } for (int l36 = 0; (l36 < 2); l36 = (l36 + 1)) { - iRec98[l36] = 0; - + iRec97[l36] = 0; } for (int l37 = 0; (l37 < 2); l37 = (l37 + 1)) { - iRec99[l37] = 0; - + iRec100[l37] = 0; } for (int l38 = 0; (l38 < 2); l38 = (l38 + 1)) { - iRec100[l38] = 0; - + iRec99[l38] = 0; } for (int l39 = 0; (l39 < 2); l39 = (l39 + 1)) { - iRec101[l39] = 0; - + iRec102[l39] = 0; } for (int l40 = 0; (l40 < 2); l40 = (l40 + 1)) { - iRec102[l40] = 0; - + iRec101[l40] = 0; } for (int l41 = 0; (l41 < 2); l41 = (l41 + 1)) { - iRec103[l41] = 0; - + iRec104[l41] = 0; } for (int l42 = 0; (l42 < 2); l42 = (l42 + 1)) { - iRec104[l42] = 0; - + iRec103[l42] = 0; } for (int l43 = 0; (l43 < 2); l43 = (l43 + 1)) { - iRec105[l43] = 0; - + iRec106[l43] = 0; } for (int l44 = 0; (l44 < 2); l44 = (l44 + 1)) { - iRec106[l44] = 0; - + iRec105[l44] = 0; } for (int l45 = 0; (l45 < 2); l45 = (l45 + 1)) { - iRec107[l45] = 0; - + iRec108[l45] = 0; } for (int l46 = 0; (l46 < 2); l46 = (l46 + 1)) { - iRec108[l46] = 0; - + iRec107[l46] = 0; } for (int l47 = 0; (l47 < 2); l47 = (l47 + 1)) { - iRec109[l47] = 0; - + iRec110[l47] = 0; } for (int l48 = 0; (l48 < 2); l48 = (l48 + 1)) { - iRec110[l48] = 0; - + iRec109[l48] = 0; } for (int l49 = 0; (l49 < 2); l49 = (l49 + 1)) { - iRec111[l49] = 0; - + iRec112[l49] = 0; } for (int l50 = 0; (l50 < 2); l50 = (l50 + 1)) { - iRec112[l50] = 0; - + iRec111[l50] = 0; } for (int l51 = 0; (l51 < 2); l51 = (l51 + 1)) { - iRec113[l51] = 0; - + iRec114[l51] = 0; } for (int l52 = 0; (l52 < 2); l52 = (l52 + 1)) { - iRec114[l52] = 0; - + iRec113[l52] = 0; } for (int l53 = 0; (l53 < 2); l53 = (l53 + 1)) { - iRec115[l53] = 0; - + iRec116[l53] = 0; } for (int l54 = 0; (l54 < 2); l54 = (l54 + 1)) { - iRec116[l54] = 0; - + iRec115[l54] = 0; } for (int l55 = 0; (l55 < 2); l55 = (l55 + 1)) { - iRec117[l55] = 0; - + iRec118[l55] = 0; } for (int l56 = 0; (l56 < 2); l56 = (l56 + 1)) { - iRec118[l56] = 0; - + iRec117[l56] = 0; } for (int l57 = 0; (l57 < 2); l57 = (l57 + 1)) { - iRec119[l57] = 0; - + iRec120[l57] = 0; } for (int l58 = 0; (l58 < 2); l58 = (l58 + 1)) { - iRec120[l58] = 0; - + iRec119[l58] = 0; } for (int l59 = 0; (l59 < 2); l59 = (l59 + 1)) { - iRec121[l59] = 0; - + iRec122[l59] = 0; } for (int l60 = 0; (l60 < 2); l60 = (l60 + 1)) { - iRec122[l60] = 0; - + iRec121[l60] = 0; } for (int l61 = 0; (l61 < 2); l61 = (l61 + 1)) { - iRec123[l61] = 0; - + iRec124[l61] = 0; } for (int l62 = 0; (l62 < 2); l62 = (l62 + 1)) { - iRec124[l62] = 0; - + iRec123[l62] = 0; } for (int l63 = 0; (l63 < 2); l63 = (l63 + 1)) { - iRec125[l63] = 0; - + iRec126[l63] = 0; } for (int l64 = 0; (l64 < 2); l64 = (l64 + 1)) { - iRec126[l64] = 0; - + iRec125[l64] = 0; } for (int l65 = 0; (l65 < 2); l65 = (l65 + 1)) { - iRec127[l65] = 0; - + iRec128[l65] = 0; } for (int l66 = 0; (l66 < 2); l66 = (l66 + 1)) { - iRec128[l66] = 0; - + iRec127[l66] = 0; } for (int l67 = 0; (l67 < 2); l67 = (l67 + 1)) { - iRec129[l67] = 0; - + iRec130[l67] = 0; } for (int l68 = 0; (l68 < 2); l68 = (l68 + 1)) { - iRec130[l68] = 0; - + iRec129[l68] = 0; } for (int l69 = 0; (l69 < 2); l69 = (l69 + 1)) { - iRec131[l69] = 0; - + iRec132[l69] = 0; } for (int l70 = 0; (l70 < 2); l70 = (l70 + 1)) { - iRec132[l70] = 0; - + iRec131[l70] = 0; } for (int l71 = 0; (l71 < 2); l71 = (l71 + 1)) { iRec134[l71] = 0; - } for (int l72 = 0; (l72 < 2); l72 = (l72 + 1)) { iRec133[l72] = 0; - } for (int l73 = 0; (l73 < 2); l73 = (l73 + 1)) { - iRec135[l73] = 0; - + iRec136[l73] = 0; } for (int l74 = 0; (l74 < 2); l74 = (l74 + 1)) { - iRec136[l74] = 0; - + iRec135[l74] = 0; } for (int l75 = 0; (l75 < 2); l75 = (l75 + 1)) { - iRec137[l75] = 0; - + iRec138[l75] = 0; } for (int l76 = 0; (l76 < 2); l76 = (l76 + 1)) { - iRec138[l76] = 0; - + iRec137[l76] = 0; } for (int l77 = 0; (l77 < 2); l77 = (l77 + 1)) { iRec140[l77] = 0; - } for (int l78 = 0; (l78 < 2); l78 = (l78 + 1)) { iRec139[l78] = 0; - } for (int l79 = 0; (l79 < 2); l79 = (l79 + 1)) { iRec142[l79] = 0; - } for (int l80 = 0; (l80 < 2); l80 = (l80 + 1)) { iRec141[l80] = 0; - } for (int l81 = 0; (l81 < 2); l81 = (l81 + 1)) { iRec144[l81] = 0; - } for (int l82 = 0; (l82 < 2); l82 = (l82 + 1)) { iRec143[l82] = 0; - } for (int l83 = 0; (l83 < 2); l83 = (l83 + 1)) { iRec146[l83] = 0; - } for (int l84 = 0; (l84 < 2); l84 = (l84 + 1)) { iRec145[l84] = 0; - } for (int l85 = 0; (l85 < 2); l85 = (l85 + 1)) { - iRec147[l85] = 0; - + iRec148[l85] = 0; } for (int l86 = 0; (l86 < 2); l86 = (l86 + 1)) { - iRec148[l86] = 0; - + iRec147[l86] = 0; } for (int l87 = 0; (l87 < 2); l87 = (l87 + 1)) { iRec150[l87] = 0; - } for (int l88 = 0; (l88 < 2); l88 = (l88 + 1)) { iRec149[l88] = 0; - } for (int l89 = 0; (l89 < 2); l89 = (l89 + 1)) { iRec152[l89] = 0; - } for (int l90 = 0; (l90 < 2); l90 = (l90 + 1)) { iRec151[l90] = 0; - } for (int l91 = 0; (l91 < 2); l91 = (l91 + 1)) { iRec154[l91] = 0; - } for (int l92 = 0; (l92 < 2); l92 = (l92 + 1)) { iRec153[l92] = 0; - } for (int l93 = 0; (l93 < 2); l93 = (l93 + 1)) { - iRec155[l93] = 0; - + iRec156[l93] = 0; } for (int l94 = 0; (l94 < 2); l94 = (l94 + 1)) { - iRec156[l94] = 0; - + iRec155[l94] = 0; } for (int l95 = 0; (l95 < 2); l95 = (l95 + 1)) { - iRec157[l95] = 0; - + iRec158[l95] = 0; } for (int l96 = 0; (l96 < 2); l96 = (l96 + 1)) { - iRec158[l96] = 0; - + iRec157[l96] = 0; } for (int l97 = 0; (l97 < 2); l97 = (l97 + 1)) { - iRec159[l97] = 0; - + iRec160[l97] = 0; } for (int l98 = 0; (l98 < 2); l98 = (l98 + 1)) { - iRec160[l98] = 0; - + iRec159[l98] = 0; } for (int l99 = 0; (l99 < 2); l99 = (l99 + 1)) { - iRec161[l99] = 0; - + iRec162[l99] = 0; } for (int l100 = 0; (l100 < 2); l100 = (l100 + 1)) { - iRec162[l100] = 0; - + iRec161[l100] = 0; } for (int l101 = 0; (l101 < 2); l101 = (l101 + 1)) { - iRec163[l101] = 0; - + iRec164[l101] = 0; } for (int l102 = 0; (l102 < 2); l102 = (l102 + 1)) { - iRec164[l102] = 0; - + iRec163[l102] = 0; } for (int l103 = 0; (l103 < 2); l103 = (l103 + 1)) { - iRec165[l103] = 0; - + iRec166[l103] = 0; } for (int l104 = 0; (l104 < 2); l104 = (l104 + 1)) { - iRec166[l104] = 0; - + iRec165[l104] = 0; } for (int l105 = 0; (l105 < 2); l105 = (l105 + 1)) { - iRec167[l105] = 0; - + iRec168[l105] = 0; } for (int l106 = 0; (l106 < 2); l106 = (l106 + 1)) { - iRec168[l106] = 0; - + iRec167[l106] = 0; } for (int l107 = 0; (l107 < 2); l107 = (l107 + 1)) { - iRec169[l107] = 0; - + iRec170[l107] = 0; } for (int l108 = 0; (l108 < 2); l108 = (l108 + 1)) { - iRec170[l108] = 0; - + iRec169[l108] = 0; } for (int l109 = 0; (l109 < 2); l109 = (l109 + 1)) { - iRec171[l109] = 0; - + iRec172[l109] = 0; } for (int l110 = 0; (l110 < 2); l110 = (l110 + 1)) { - iRec172[l110] = 0; - + iRec171[l110] = 0; } for (int l111 = 0; (l111 < 2); l111 = (l111 + 1)) { - iRec173[l111] = 0; - + iRec174[l111] = 0; } for (int l112 = 0; (l112 < 2); l112 = (l112 + 1)) { - iRec174[l112] = 0; - + iRec173[l112] = 0; } for (int l113 = 0; (l113 < 2); l113 = (l113 + 1)) { - iRec175[l113] = 0; - + iRec176[l113] = 0; } for (int l114 = 0; (l114 < 2); l114 = (l114 + 1)) { - iRec176[l114] = 0; - + iRec175[l114] = 0; } for (int l115 = 0; (l115 < 2); l115 = (l115 + 1)) { - iRec177[l115] = 0; - + iRec178[l115] = 0; } for (int l116 = 0; (l116 < 2); l116 = (l116 + 1)) { - iRec178[l116] = 0; - + iRec177[l116] = 0; } for (int l117 = 0; (l117 < 2); l117 = (l117 + 1)) { - iRec179[l117] = 0; - + iRec180[l117] = 0; } for (int l118 = 0; (l118 < 2); l118 = (l118 + 1)) { - iRec180[l118] = 0; - + iRec179[l118] = 0; } for (int l119 = 0; (l119 < 2); l119 = (l119 + 1)) { - iRec181[l119] = 0; - + iRec182[l119] = 0; } for (int l120 = 0; (l120 < 2); l120 = (l120 + 1)) { - iRec182[l120] = 0; - + iRec181[l120] = 0; } for (int l121 = 0; (l121 < 2); l121 = (l121 + 1)) { - iRec183[l121] = 0; - + iRec184[l121] = 0; } for (int l122 = 0; (l122 < 2); l122 = (l122 + 1)) { - iRec184[l122] = 0; - + iRec183[l122] = 0; } for (int l123 = 0; (l123 < 2); l123 = (l123 + 1)) { - iRec185[l123] = 0; - + iRec186[l123] = 0; } for (int l124 = 0; (l124 < 2); l124 = (l124 + 1)) { - iRec186[l124] = 0; - + iRec185[l124] = 0; } for (int l125 = 0; (l125 < 2); l125 = (l125 + 1)) { iRec188[l125] = 0; - } for (int l126 = 0; (l126 < 2); l126 = (l126 + 1)) { iRec187[l126] = 0; - } for (int l127 = 0; (l127 < 2); l127 = (l127 + 1)) { iRec190[l127] = 0; - } for (int l128 = 0; (l128 < 2); l128 = (l128 + 1)) { iRec189[l128] = 0; - } for (int l129 = 0; (l129 < 2); l129 = (l129 + 1)) { iRec192[l129] = 0; - } for (int l130 = 0; (l130 < 2); l130 = (l130 + 1)) { iRec191[l130] = 0; - } for (int l131 = 0; (l131 < 2); l131 = (l131 + 1)) { iRec194[l131] = 0; - } for (int l132 = 0; (l132 < 2); l132 = (l132 + 1)) { iRec193[l132] = 0; - } for (int l133 = 0; (l133 < 2); l133 = (l133 + 1)) { - iRec195[l133] = 0; - + iRec196[l133] = 0; } for (int l134 = 0; (l134 < 2); l134 = (l134 + 1)) { - iRec196[l134] = 0; - + iRec195[l134] = 0; } - } - virtual void init(int samplingFreq) { - classInit(samplingFreq); - instanceInit(samplingFreq); + virtual void init(int sample_rate) { + classInit(sample_rate); + instanceInit(sample_rate); } - virtual void instanceInit(int samplingFreq) { - instanceConstants(samplingFreq); + virtual void instanceInit(int sample_rate) { + instanceConstants(sample_rate); instanceResetUserInterface(); instanceClear(); } @@ -1376,9 +1268,9 @@ class fx_granulator : public dsp { virtual fx_granulator* clone() { return new fx_granulator(); } + virtual int getSampleRate() { - return fSamplingFreq; - + return fSampleRate; } virtual void buildUserInterface(UI* ui_interface) { @@ -1389,7 +1281,6 @@ class fx_granulator : public dsp { ui_interface->declare(&fHslider2, "unit", "ms"); ui_interface->addHorizontalSlider("length", &fHslider2, 100.0f, 10.0f, 500.0f, 0.00999999978f); ui_interface->closeBox(); - } virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { @@ -1398,84 +1289,84 @@ class fx_granulator : public dsp { FAUSTFLOAT* output1 = outputs[1]; float fSlow0 = float(fHslider0); float fSlow1 = (2.0f / fSlow0); - int iSlow2 = (40.0f < fSlow0); + float fSlow2 = float((0.0f < fSlow0)); float fSlow3 = (0.00100000005f * float(fHslider1)); float fSlow4 = (9.99999997e-07f * float(fHslider2)); - int iSlow5 = (28.0f < fSlow0); - int iSlow6 = (2.0f < fSlow0); - int iSlow7 = (0.0f < fSlow0); - int iSlow8 = (4.0f < fSlow0); - int iSlow9 = (6.0f < fSlow0); - int iSlow10 = (8.0f < fSlow0); - int iSlow11 = (10.0f < fSlow0); - int iSlow12 = (12.0f < fSlow0); - int iSlow13 = (14.0f < fSlow0); - int iSlow14 = (16.0f < fSlow0); - int iSlow15 = (18.0f < fSlow0); - int iSlow16 = (20.0f < fSlow0); - int iSlow17 = (22.0f < fSlow0); - int iSlow18 = (24.0f < fSlow0); - int iSlow19 = (26.0f < fSlow0); - int iSlow20 = (30.0f < fSlow0); - int iSlow21 = (32.0f < fSlow0); - int iSlow22 = (34.0f < fSlow0); - int iSlow23 = (36.0f < fSlow0); - int iSlow24 = (38.0f < fSlow0); - int iSlow25 = (42.0f < fSlow0); - int iSlow26 = (44.0f < fSlow0); - int iSlow27 = (46.0f < fSlow0); - int iSlow28 = (48.0f < fSlow0); - int iSlow29 = (50.0f < fSlow0); - int iSlow30 = (52.0f < fSlow0); - int iSlow31 = (54.0f < fSlow0); - int iSlow32 = (56.0f < fSlow0); - int iSlow33 = (58.0f < fSlow0); - int iSlow34 = (60.0f < fSlow0); - int iSlow35 = (62.0f < fSlow0); - int iSlow36 = (59.0f < fSlow0); - int iSlow37 = (1.0f < fSlow0); - int iSlow38 = (3.0f < fSlow0); - int iSlow39 = (5.0f < fSlow0); - int iSlow40 = (7.0f < fSlow0); - int iSlow41 = (9.0f < fSlow0); - int iSlow42 = (11.0f < fSlow0); - int iSlow43 = (13.0f < fSlow0); - int iSlow44 = (15.0f < fSlow0); - int iSlow45 = (17.0f < fSlow0); - int iSlow46 = (19.0f < fSlow0); - int iSlow47 = (21.0f < fSlow0); - int iSlow48 = (23.0f < fSlow0); - int iSlow49 = (25.0f < fSlow0); - int iSlow50 = (27.0f < fSlow0); - int iSlow51 = (29.0f < fSlow0); - int iSlow52 = (31.0f < fSlow0); - int iSlow53 = (33.0f < fSlow0); - int iSlow54 = (35.0f < fSlow0); - int iSlow55 = (37.0f < fSlow0); - int iSlow56 = (39.0f < fSlow0); - int iSlow57 = (41.0f < fSlow0); - int iSlow58 = (43.0f < fSlow0); - int iSlow59 = (45.0f < fSlow0); - int iSlow60 = (47.0f < fSlow0); - int iSlow61 = (49.0f < fSlow0); - int iSlow62 = (51.0f < fSlow0); - int iSlow63 = (53.0f < fSlow0); - int iSlow64 = (55.0f < fSlow0); - int iSlow65 = (57.0f < fSlow0); - int iSlow66 = (61.0f < fSlow0); - int iSlow67 = (63.0f < fSlow0); + float fSlow5 = float((2.0f < fSlow0)); + float fSlow6 = float((4.0f < fSlow0)); + float fSlow7 = float((6.0f < fSlow0)); + float fSlow8 = float((8.0f < fSlow0)); + float fSlow9 = float((10.0f < fSlow0)); + float fSlow10 = float((12.0f < fSlow0)); + float fSlow11 = float((14.0f < fSlow0)); + float fSlow12 = float((16.0f < fSlow0)); + float fSlow13 = float((18.0f < fSlow0)); + float fSlow14 = float((20.0f < fSlow0)); + float fSlow15 = float((22.0f < fSlow0)); + float fSlow16 = float((24.0f < fSlow0)); + float fSlow17 = float((26.0f < fSlow0)); + float fSlow18 = float((28.0f < fSlow0)); + float fSlow19 = float((30.0f < fSlow0)); + float fSlow20 = float((32.0f < fSlow0)); + float fSlow21 = float((34.0f < fSlow0)); + float fSlow22 = float((36.0f < fSlow0)); + float fSlow23 = float((38.0f < fSlow0)); + float fSlow24 = float((40.0f < fSlow0)); + float fSlow25 = float((42.0f < fSlow0)); + float fSlow26 = float((44.0f < fSlow0)); + float fSlow27 = float((46.0f < fSlow0)); + float fSlow28 = float((48.0f < fSlow0)); + float fSlow29 = float((50.0f < fSlow0)); + float fSlow30 = float((52.0f < fSlow0)); + float fSlow31 = float((54.0f < fSlow0)); + float fSlow32 = float((56.0f < fSlow0)); + float fSlow33 = float((58.0f < fSlow0)); + float fSlow34 = float((60.0f < fSlow0)); + float fSlow35 = float((62.0f < fSlow0)); + float fSlow36 = float((1.0f < fSlow0)); + float fSlow37 = float((3.0f < fSlow0)); + float fSlow38 = float((5.0f < fSlow0)); + float fSlow39 = float((7.0f < fSlow0)); + float fSlow40 = float((9.0f < fSlow0)); + float fSlow41 = float((11.0f < fSlow0)); + float fSlow42 = float((13.0f < fSlow0)); + float fSlow43 = float((15.0f < fSlow0)); + float fSlow44 = float((17.0f < fSlow0)); + float fSlow45 = float((19.0f < fSlow0)); + float fSlow46 = float((21.0f < fSlow0)); + float fSlow47 = float((23.0f < fSlow0)); + float fSlow48 = float((25.0f < fSlow0)); + float fSlow49 = float((27.0f < fSlow0)); + float fSlow50 = float((29.0f < fSlow0)); + float fSlow51 = float((31.0f < fSlow0)); + float fSlow52 = float((33.0f < fSlow0)); + float fSlow53 = float((35.0f < fSlow0)); + float fSlow54 = float((37.0f < fSlow0)); + float fSlow55 = float((39.0f < fSlow0)); + float fSlow56 = float((41.0f < fSlow0)); + float fSlow57 = float((43.0f < fSlow0)); + float fSlow58 = float((45.0f < fSlow0)); + float fSlow59 = float((47.0f < fSlow0)); + float fSlow60 = float((49.0f < fSlow0)); + float fSlow61 = float((51.0f < fSlow0)); + float fSlow62 = float((53.0f < fSlow0)); + float fSlow63 = float((55.0f < fSlow0)); + float fSlow64 = float((57.0f < fSlow0)); + float fSlow65 = float((59.0f < fSlow0)); + float fSlow66 = float((61.0f < fSlow0)); + float fSlow67 = float((63.0f < fSlow0)); for (int i = 0; (i < count); i = (i + 1)) { iVec0[0] = 1; fRec1[0] = (fSlow3 + (0.999000013f * fRec1[1])); int iTemp0 = int((fConst0 * fRec1[0])); iRec0[0] = ((iRec0[1] + 1) % iTemp0); ftbl0[(iRec0[0] % iTemp0)] = float(input0[i]); - fRec3[0] = (fSlow4 + (0.999000013f * fRec3[1])); - int iTemp1 = int((fConst0 * fRec3[0])); - iRec2[0] = ((iRec2[1] + 1) % iTemp1); + fRec4[0] = (fSlow4 + (0.999000013f * fRec4[1])); + int iTemp1 = int((fConst0 * fRec4[0])); + iRec3[0] = ((iRec3[1] + 1) % iTemp1); int iTemp2 = (1 - iVec0[1]); - int iTemp3 = (1103515245 * (iRec5[1] + 12345)); - int iTemp4 = (1103515245 * (iTemp3 + 12345)); + float fTemp3 = float(iTemp0); + int iTemp4 = (1103515245 * (iRec6[1] + 12345)); int iTemp5 = (1103515245 * (iTemp4 + 12345)); int iTemp6 = (1103515245 * (iTemp5 + 12345)); int iTemp7 = (1103515245 * (iTemp6 + 12345)); @@ -1538,533 +1429,534 @@ class fx_granulator : public dsp { int iTemp64 = (1103515245 * (iTemp63 + 12345)); int iTemp65 = (1103515245 * (iTemp64 + 12345)); int iTemp66 = (1103515245 * (iTemp65 + 12345)); - iRec5[0] = (1103515245 * (iTemp66 + 12345)); - int iRec6 = iTemp66; - int iRec7 = iTemp65; - int iRec8 = iTemp64; - int iRec9 = iTemp63; - int iRec10 = iTemp62; - int iRec11 = iTemp61; - int iRec12 = iTemp60; - int iRec13 = iTemp59; - int iRec14 = iTemp58; - int iRec15 = iTemp57; - int iRec16 = iTemp56; - int iRec17 = iTemp55; - int iRec18 = iTemp54; - int iRec19 = iTemp53; - int iRec20 = iTemp52; - int iRec21 = iTemp51; - int iRec22 = iTemp50; - int iRec23 = iTemp49; - int iRec24 = iTemp48; - int iRec25 = iTemp47; - int iRec26 = iTemp46; - int iRec27 = iTemp45; - int iRec28 = iTemp44; - int iRec29 = iTemp43; - int iRec30 = iTemp42; - int iRec31 = iTemp41; - int iRec32 = iTemp40; - int iRec33 = iTemp39; - int iRec34 = iTemp38; - int iRec35 = iTemp37; - int iRec36 = iTemp36; - int iRec37 = iTemp35; - int iRec38 = iTemp34; - int iRec39 = iTemp33; - int iRec40 = iTemp32; - int iRec41 = iTemp31; - int iRec42 = iTemp30; - int iRec43 = iTemp29; - int iRec44 = iTemp28; - int iRec45 = iTemp27; - int iRec46 = iTemp26; - int iRec47 = iTemp25; - int iRec48 = iTemp24; - int iRec49 = iTemp23; - int iRec50 = iTemp22; - int iRec51 = iTemp21; - int iRec52 = iTemp20; - int iRec53 = iTemp19; - int iRec54 = iTemp18; - int iRec55 = iTemp17; - int iRec56 = iTemp16; - int iRec57 = iTemp15; - int iRec58 = iTemp14; - int iRec59 = iTemp13; - int iRec60 = iTemp12; - int iRec61 = iTemp11; - int iRec62 = iTemp10; - int iRec63 = iTemp9; - int iRec64 = iTemp8; - int iRec65 = iTemp7; - int iRec66 = iTemp6; - int iRec67 = iTemp5; - int iRec68 = iTemp4; - int iTemp67 = int((0.5f * (float(iTemp0) * ((2.32830644e-10f * float(iRec45)) + 1.0f)))); - iRec4[0] = ((iVec0[1] * iRec4[1]) + (iTemp2 * iTemp67)); - int iTemp68 = ((iRec2[0] + iRec4[0]) % iTemp1); - int iTemp69 = (iTemp1 + -1); - float fTemp70 = (float(iTemp68) / float(iTemp69)); - int iTemp71 = int(fTemp70); - iRec69[0] = ((iRec69[1] * (1 - iTemp71)) + (iTemp67 * iTemp71)); - int iTemp72 = int((0.5f * (float(iTemp0) * ((2.32830644e-10f * float(iRec33)) + 1.0f)))); - iRec71[0] = ((iVec0[1] * iRec71[1]) + (iTemp2 * iTemp72)); - int iTemp73 = ((iRec2[0] + iRec71[0]) % iTemp1); - float fTemp74 = (float(iTemp73) / float(iTemp69)); - int iTemp75 = int(fTemp74); - iRec72[0] = ((iTemp72 * iTemp75) + (iRec72[1] * (1 - iTemp75))); - int iTemp76 = int((0.5f * (float(iTemp0) * ((2.32830644e-10f * float(iRec7)) + 1.0f)))); - iRec73[0] = ((iVec0[1] * iRec73[1]) + (iTemp2 * iTemp76)); - int iTemp77 = ((iRec2[0] + iRec73[0]) % iTemp1); - float fTemp78 = (float(iTemp77) / float(iTemp69)); - int iTemp79 = int(fTemp78); - iRec74[0] = ((iRec74[1] * (1 - iTemp79)) + (iTemp76 * iTemp79)); - int iTemp80 = int((0.5f * (float(iTemp0) * ((2.32830644e-10f * float(iRec5[0])) + 1.0f)))); - iRec75[0] = ((iVec0[1] * iRec75[1]) + (iTemp2 * iTemp80)); - int iTemp81 = ((iRec2[0] + iRec75[0]) % iTemp1); - float fTemp82 = (float(iTemp81) / float(iTemp69)); - int iTemp83 = int(fTemp82); - iRec76[0] = ((iRec76[1] * (1 - iTemp83)) + (iTemp80 * iTemp83)); - int iTemp84 = int((0.5f * (float(iTemp0) * ((2.32830644e-10f * float(iRec9)) + 1.0f)))); - iRec77[0] = ((iVec0[1] * iRec77[1]) + (iTemp2 * iTemp84)); - int iTemp85 = ((iRec2[0] + iRec77[0]) % iTemp1); - float fTemp86 = (float(iTemp85) / float(iTemp69)); - int iTemp87 = int(fTemp86); - iRec78[0] = ((iRec78[1] * (1 - iTemp87)) + (iTemp84 * iTemp87)); - int iTemp88 = int((0.5f * (float(iTemp0) * ((2.32830644e-10f * float(iRec11)) + 1.0f)))); - iRec79[0] = ((iVec0[1] * iRec79[1]) + (iTemp2 * iTemp88)); - int iTemp89 = ((iRec2[0] + iRec79[0]) % iTemp1); - float fTemp90 = (float(iTemp89) / float(iTemp69)); - int iTemp91 = int(fTemp90); - iRec80[0] = ((iRec80[1] * (1 - iTemp91)) + (iTemp88 * iTemp91)); - int iTemp92 = int((0.5f * (float(iTemp0) * ((2.32830644e-10f * float(iRec13)) + 1.0f)))); - iRec81[0] = ((iVec0[1] * iRec81[1]) + (iTemp2 * iTemp92)); - int iTemp93 = ((iRec2[0] + iRec81[0]) % iTemp1); - float fTemp94 = (float(iTemp93) / float(iTemp69)); - int iTemp95 = int(fTemp94); - iRec82[0] = ((iRec82[1] * (1 - iTemp95)) + (iTemp92 * iTemp95)); - int iTemp96 = int((0.5f * (float(iTemp0) * ((2.32830644e-10f * float(iRec15)) + 1.0f)))); - iRec83[0] = ((iVec0[1] * iRec83[1]) + (iTemp2 * iTemp96)); - int iTemp97 = ((iRec2[0] + iRec83[0]) % iTemp1); - float fTemp98 = (float(iTemp97) / float(iTemp69)); - int iTemp99 = int(fTemp98); - iRec84[0] = ((iRec84[1] * (1 - iTemp99)) + (iTemp96 * iTemp99)); - int iTemp100 = int((0.5f * (float(iTemp0) * ((2.32830644e-10f * float(iRec17)) + 1.0f)))); - iRec85[0] = ((iVec0[1] * iRec85[1]) + (iTemp2 * iTemp100)); - int iTemp101 = ((iRec2[0] + iRec85[0]) % iTemp1); - float fTemp102 = (float(iTemp101) / float(iTemp69)); - int iTemp103 = int(fTemp102); - iRec86[0] = ((iRec86[1] * (1 - iTemp103)) + (iTemp100 * iTemp103)); - int iTemp104 = int((0.5f * (float(iTemp0) * ((2.32830644e-10f * float(iRec19)) + 1.0f)))); - iRec87[0] = ((iVec0[1] * iRec87[1]) + (iTemp2 * iTemp104)); - int iTemp105 = ((iRec2[0] + iRec87[0]) % iTemp1); - float fTemp106 = (float(iTemp105) / float(iTemp69)); - int iTemp107 = int(fTemp106); - iRec88[0] = ((iRec88[1] * (1 - iTemp107)) + (iTemp104 * iTemp107)); - int iTemp108 = int((0.5f * (float(iTemp0) * ((2.32830644e-10f * float(iRec21)) + 1.0f)))); - iRec89[0] = ((iVec0[1] * iRec89[1]) + (iTemp2 * iTemp108)); - int iTemp109 = ((iRec2[0] + iRec89[0]) % iTemp1); - float fTemp110 = (float(iTemp109) / float(iTemp69)); - int iTemp111 = int(fTemp110); - iRec90[0] = ((iRec90[1] * (1 - iTemp111)) + (iTemp108 * iTemp111)); - int iTemp112 = int((0.5f * (float(iTemp0) * ((2.32830644e-10f * float(iRec23)) + 1.0f)))); - iRec91[0] = ((iVec0[1] * iRec91[1]) + (iTemp2 * iTemp112)); - int iTemp113 = ((iRec2[0] + iRec91[0]) % iTemp1); - float fTemp114 = (float(iTemp113) / float(iTemp69)); - int iTemp115 = int(fTemp114); - iRec92[0] = ((iRec92[1] * (1 - iTemp115)) + (iTemp112 * iTemp115)); - int iTemp116 = int((0.5f * (float(iTemp0) * ((2.32830644e-10f * float(iRec25)) + 1.0f)))); - iRec93[0] = ((iVec0[1] * iRec93[1]) + (iTemp2 * iTemp116)); - int iTemp117 = ((iRec2[0] + iRec93[0]) % iTemp1); - float fTemp118 = (float(iTemp117) / float(iTemp69)); - int iTemp119 = int(fTemp118); - iRec94[0] = ((iRec94[1] * (1 - iTemp119)) + (iTemp116 * iTemp119)); - int iTemp120 = int((0.5f * (float(iTemp0) * ((2.32830644e-10f * float(iRec27)) + 1.0f)))); - iRec95[0] = ((iVec0[1] * iRec95[1]) + (iTemp2 * iTemp120)); - int iTemp121 = ((iRec2[0] + iRec95[0]) % iTemp1); - float fTemp122 = (float(iTemp121) / float(iTemp69)); - int iTemp123 = int(fTemp122); - iRec96[0] = ((iRec96[1] * (1 - iTemp123)) + (iTemp120 * iTemp123)); - int iTemp124 = int((0.5f * (float(iTemp0) * ((2.32830644e-10f * float(iRec29)) + 1.0f)))); - iRec97[0] = ((iVec0[1] * iRec97[1]) + (iTemp2 * iTemp124)); - int iTemp125 = ((iRec2[0] + iRec97[0]) % iTemp1); - float fTemp126 = (float(iTemp125) / float(iTemp69)); - int iTemp127 = int(fTemp126); - iRec98[0] = ((iRec98[1] * (1 - iTemp127)) + (iTemp124 * iTemp127)); - int iTemp128 = int((0.5f * (float(iTemp0) * ((2.32830644e-10f * float(iRec31)) + 1.0f)))); - iRec99[0] = ((iVec0[1] * iRec99[1]) + (iTemp2 * iTemp128)); - int iTemp129 = ((iRec2[0] + iRec99[0]) % iTemp1); - float fTemp130 = (float(iTemp129) / float(iTemp69)); - int iTemp131 = int(fTemp130); - iRec100[0] = ((iRec100[1] * (1 - iTemp131)) + (iTemp128 * iTemp131)); - int iTemp132 = int((0.5f * (float(iTemp0) * ((2.32830644e-10f * float(iRec35)) + 1.0f)))); - iRec101[0] = ((iVec0[1] * iRec101[1]) + (iTemp2 * iTemp132)); - int iTemp133 = ((iRec2[0] + iRec101[0]) % iTemp1); - float fTemp134 = (float(iTemp133) / float(iTemp69)); - int iTemp135 = int(fTemp134); - iRec102[0] = ((iRec102[1] * (1 - iTemp135)) + (iTemp132 * iTemp135)); - int iTemp136 = int((0.5f * (float(iTemp0) * ((2.32830644e-10f * float(iRec37)) + 1.0f)))); - iRec103[0] = ((iVec0[1] * iRec103[1]) + (iTemp2 * iTemp136)); - int iTemp137 = ((iRec2[0] + iRec103[0]) % iTemp1); - float fTemp138 = (float(iTemp137) / float(iTemp69)); - int iTemp139 = int(fTemp138); - iRec104[0] = ((iTemp136 * iTemp139) + (iRec104[1] * (1 - iTemp139))); - int iTemp140 = int((0.5f * (float(iTemp0) * ((2.32830644e-10f * float(iRec39)) + 1.0f)))); - iRec105[0] = ((iVec0[1] * iRec105[1]) + (iTemp2 * iTemp140)); - int iTemp141 = ((iRec2[0] + iRec105[0]) % iTemp1); - float fTemp142 = (float(iTemp141) / float(iTemp69)); - int iTemp143 = int(fTemp142); - iRec106[0] = ((iRec106[1] * (1 - iTemp143)) + (iTemp140 * iTemp143)); - int iTemp144 = int((0.5f * (float(iTemp0) * ((2.32830644e-10f * float(iRec41)) + 1.0f)))); - iRec107[0] = ((iVec0[1] * iRec107[1]) + (iTemp2 * iTemp144)); - int iTemp145 = ((iRec2[0] + iRec107[0]) % iTemp1); - float fTemp146 = (float(iTemp145) / float(iTemp69)); - int iTemp147 = int(fTemp146); - iRec108[0] = ((iRec108[1] * (1 - iTemp147)) + (iTemp144 * iTemp147)); - int iTemp148 = int((0.5f * (float(iTemp0) * ((2.32830644e-10f * float(iRec43)) + 1.0f)))); - iRec109[0] = ((iVec0[1] * iRec109[1]) + (iTemp2 * iTemp148)); - int iTemp149 = ((iRec2[0] + iRec109[0]) % iTemp1); - float fTemp150 = (float(iTemp149) / float(iTemp69)); - int iTemp151 = int(fTemp150); - iRec110[0] = ((iRec110[1] * (1 - iTemp151)) + (iTemp148 * iTemp151)); - int iTemp152 = int((0.5f * (float(iTemp0) * ((2.32830644e-10f * float(iRec47)) + 1.0f)))); - iRec111[0] = ((iVec0[1] * iRec111[1]) + (iTemp2 * iTemp152)); - int iTemp153 = ((iRec2[0] + iRec111[0]) % iTemp1); - float fTemp154 = (float(iTemp153) / float(iTemp69)); - int iTemp155 = int(fTemp154); - iRec112[0] = ((iTemp152 * iTemp155) + (iRec112[1] * (1 - iTemp155))); - int iTemp156 = int((0.5f * (float(iTemp0) * ((2.32830644e-10f * float(iRec49)) + 1.0f)))); - iRec113[0] = ((iVec0[1] * iRec113[1]) + (iTemp2 * iTemp156)); - int iTemp157 = ((iRec2[0] + iRec113[0]) % iTemp1); - float fTemp158 = (float(iTemp157) / float(iTemp69)); - int iTemp159 = int(fTemp158); - iRec114[0] = ((iRec114[1] * (1 - iTemp159)) + (iTemp156 * iTemp159)); - int iTemp160 = int((0.5f * (float(iTemp0) * ((2.32830644e-10f * float(iRec51)) + 1.0f)))); - iRec115[0] = ((iVec0[1] * iRec115[1]) + (iTemp2 * iTemp160)); - int iTemp161 = ((iRec2[0] + iRec115[0]) % iTemp1); - float fTemp162 = (float(iTemp161) / float(iTemp69)); - int iTemp163 = int(fTemp162); - iRec116[0] = ((iRec116[1] * (1 - iTemp163)) + (iTemp160 * iTemp163)); - int iTemp164 = int((0.5f * (float(iTemp0) * ((2.32830644e-10f * float(iRec53)) + 1.0f)))); - iRec117[0] = ((iVec0[1] * iRec117[1]) + (iTemp2 * iTemp164)); - int iTemp165 = ((iRec2[0] + iRec117[0]) % iTemp1); - float fTemp166 = (float(iTemp165) / float(iTemp69)); - int iTemp167 = int(fTemp166); - iRec118[0] = ((iTemp164 * iTemp167) + (iRec118[1] * (1 - iTemp167))); - int iTemp168 = int((0.5f * (float(iTemp0) * ((2.32830644e-10f * float(iRec55)) + 1.0f)))); - iRec119[0] = ((iVec0[1] * iRec119[1]) + (iTemp2 * iTemp168)); - int iTemp169 = ((iRec2[0] + iRec119[0]) % iTemp1); - float fTemp170 = (float(iTemp169) / float(iTemp69)); - int iTemp171 = int(fTemp170); - iRec120[0] = ((iRec120[1] * (1 - iTemp171)) + (iTemp168 * iTemp171)); - int iTemp172 = int((0.5f * (float(iTemp0) * ((2.32830644e-10f * float(iRec57)) + 1.0f)))); - iRec121[0] = ((iVec0[1] * iRec121[1]) + (iTemp2 * iTemp172)); - int iTemp173 = ((iRec2[0] + iRec121[0]) % iTemp1); - float fTemp174 = (float(iTemp173) / float(iTemp69)); - int iTemp175 = int(fTemp174); - iRec122[0] = ((iRec122[1] * (1 - iTemp175)) + (iTemp172 * iTemp175)); - int iTemp176 = int((0.5f * (float(iTemp0) * ((2.32830644e-10f * float(iRec59)) + 1.0f)))); - iRec123[0] = ((iVec0[1] * iRec123[1]) + (iTemp2 * iTemp176)); - int iTemp177 = ((iRec2[0] + iRec123[0]) % iTemp1); - float fTemp178 = (float(iTemp177) / float(iTemp69)); - int iTemp179 = int(fTemp178); - iRec124[0] = ((iRec124[1] * (1 - iTemp179)) + (iTemp176 * iTemp179)); - int iTemp180 = int((0.5f * (float(iTemp0) * ((2.32830644e-10f * float(iRec61)) + 1.0f)))); - iRec125[0] = ((iVec0[1] * iRec125[1]) + (iTemp2 * iTemp180)); - int iTemp181 = ((iRec2[0] + iRec125[0]) % iTemp1); - float fTemp182 = (float(iTemp181) / float(iTemp69)); - int iTemp183 = int(fTemp182); - iRec126[0] = ((iTemp180 * iTemp183) + (iRec126[1] * (1 - iTemp183))); - int iTemp184 = int((0.5f * (float(iTemp0) * ((2.32830644e-10f * float(iRec63)) + 1.0f)))); - iRec127[0] = ((iVec0[1] * iRec127[1]) + (iTemp2 * iTemp184)); - int iTemp185 = ((iRec2[0] + iRec127[0]) % iTemp1); - float fTemp186 = (float(iTemp185) / float(iTemp69)); - int iTemp187 = int(fTemp186); - iRec128[0] = ((iRec128[1] * (1 - iTemp187)) + (iTemp184 * iTemp187)); - int iTemp188 = int((0.5f * (float(iTemp0) * ((2.32830644e-10f * float(iRec65)) + 1.0f)))); - iRec129[0] = ((iVec0[1] * iRec129[1]) + (iTemp2 * iTemp188)); - int iTemp189 = ((iRec2[0] + iRec129[0]) % iTemp1); - float fTemp190 = (float(iTemp189) / float(iTemp69)); - int iTemp191 = int(fTemp190); - iRec130[0] = (((1 - iTemp191) * iRec130[1]) + (iTemp191 * iTemp188)); - int iTemp192 = int((0.5f * (float(iTemp0) * ((2.32830644e-10f * float(iRec67)) + 1.0f)))); - iRec131[0] = ((iVec0[1] * iRec131[1]) + (iTemp2 * iTemp192)); - int iTemp193 = ((iRec2[0] + iRec131[0]) % iTemp1); - float fTemp194 = (float(iTemp193) / float(iTemp69)); - int iTemp195 = int(fTemp194); - iRec132[0] = ((iRec132[1] * (1 - iTemp195)) + (iTemp192 * iTemp195)); - output0[i] = FAUSTFLOAT((fSlow1 * (((((((((((((float(iSlow2) * (ftbl0[((iTemp68 + iRec69[0]) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp70))])) + (((((((float(iSlow5) * (ftbl0[((iTemp73 + iRec72[0]) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp74))])) + ((((((((((((((float(iSlow6) * (ftbl1fx_granulatorSIG1[int((1024.0f * fTemp78))] * ftbl0[((iTemp77 + iRec74[0]) % iTemp0)])) + (float(iSlow7) * (ftbl0[((iTemp81 + iRec76[0]) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp82))]))) + (float(iSlow8) * (ftbl0[((iTemp85 + iRec78[0]) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp86))]))) + (float(iSlow9) * (ftbl0[((iTemp89 + iRec80[0]) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp90))]))) + (float(iSlow10) * (ftbl1fx_granulatorSIG1[int((1024.0f * fTemp94))] * ftbl0[((iTemp93 + iRec82[0]) % iTemp0)]))) + (float(iSlow11) * (ftbl0[((iTemp97 + iRec84[0]) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp98))]))) + (float(iSlow12) * (ftbl1fx_granulatorSIG1[int((1024.0f * fTemp102))] * ftbl0[((iTemp101 + iRec86[0]) % iTemp0)]))) + (float(iSlow13) * (ftbl0[((iTemp105 + iRec88[0]) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp106))]))) + (float(iSlow14) * (ftbl0[((iTemp109 + iRec90[0]) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp110))]))) + (float(iSlow15) * (ftbl0[((iTemp113 + iRec92[0]) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp114))]))) + (float(iSlow16) * (ftbl0[((iTemp117 + iRec94[0]) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp118))]))) + (float(iSlow17) * (ftbl1fx_granulatorSIG1[int((1024.0f * fTemp122))] * ftbl0[((iTemp121 + iRec96[0]) % iTemp0)]))) + (float(iSlow18) * (ftbl0[((iTemp125 + iRec98[0]) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp126))]))) + (float(iSlow19) * (ftbl1fx_granulatorSIG1[int((1024.0f * fTemp130))] * ftbl0[((iTemp129 + iRec100[0]) % iTemp0)])))) + (float(iSlow20) * (ftbl0[((iTemp133 + iRec102[0]) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp134))]))) + (float(iSlow21) * (ftbl0[((iTemp137 + iRec104[0]) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp138))]))) + (float(iSlow22) * (ftbl0[((iTemp141 + iRec106[0]) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp142))]))) + (float(iSlow23) * (ftbl0[((iTemp145 + iRec108[0]) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp146))]))) + (float(iSlow24) * (ftbl1fx_granulatorSIG1[int((1024.0f * fTemp150))] * ftbl0[((iTemp149 + iRec110[0]) % iTemp0)])))) + (float(iSlow25) * (ftbl0[((iTemp153 + iRec112[0]) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp154))]))) + (float(iSlow26) * (ftbl0[((iTemp157 + iRec114[0]) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp158))]))) + (float(iSlow27) * (ftbl0[((iTemp161 + iRec116[0]) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp162))]))) + (float(iSlow28) * (ftbl0[((iTemp165 + iRec118[0]) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp166))]))) + (float(iSlow29) * (ftbl0[((iTemp169 + iRec120[0]) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp170))]))) + (float(iSlow30) * (ftbl0[((iTemp173 + iRec122[0]) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp174))]))) + (float(iSlow31) * (ftbl0[((iTemp177 + iRec124[0]) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp178))]))) + (float(iSlow32) * (ftbl0[((iTemp181 + iRec126[0]) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp182))]))) + (float(iSlow33) * (ftbl0[((iTemp185 + iRec128[0]) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp186))]))) + (float(iSlow34) * (ftbl0[((iTemp189 + iRec130[0]) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp190))]))) + (float(iSlow35) * (ftbl0[((iTemp193 + iRec132[0]) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp194))]))))); - int iTemp196 = int((0.5f * (((2.32830644e-10f * float(iRec64)) + 1.0f) * float(iTemp0)))); - iRec134[0] = ((iVec0[1] * iRec134[1]) + (iTemp2 * iTemp196)); - int iTemp197 = ((iRec134[0] + iRec2[0]) % iTemp1); - float fTemp198 = (float(iTemp197) / float(iTemp69)); - int iTemp199 = int(fTemp198); - iRec133[0] = ((iRec133[1] * (1 - iTemp199)) + (iTemp196 * iTemp199)); - int iTemp200 = int((0.5f * (float(iTemp0) * ((2.32830644e-10f * float(iRec6)) + 1.0f)))); - iRec135[0] = ((iVec0[1] * iRec135[1]) + (iTemp2 * iTemp200)); - int iTemp201 = ((iRec2[0] + iRec135[0]) % iTemp1); - float fTemp202 = (float(iTemp201) / float(iTemp69)); - int iTemp203 = int(fTemp202); - iRec136[0] = ((iRec136[1] * (1 - iTemp203)) + (iTemp200 * iTemp203)); - int iTemp204 = int((0.5f * (float(iTemp0) * ((2.32830644e-10f * float(iRec8)) + 1.0f)))); - iRec137[0] = ((iVec0[1] * iRec137[1]) + (iTemp2 * iTemp204)); - int iTemp205 = ((iRec2[0] + iRec137[0]) % iTemp1); - float fTemp206 = (float(iTemp205) / float(iTemp69)); - int iTemp207 = int(fTemp206); - iRec138[0] = (((1 - iTemp207) * iRec138[1]) + (iTemp207 * iTemp204)); - int iTemp208 = int((0.5f * (((2.32830644e-10f * float(iRec10)) + 1.0f) * float(iTemp0)))); - iRec140[0] = ((iVec0[1] * iRec140[1]) + (iTemp2 * iTemp208)); - int iTemp209 = ((iRec140[0] + iRec2[0]) % iTemp1); - float fTemp210 = (float(iTemp209) / float(iTemp69)); - int iTemp211 = int(fTemp210); - iRec139[0] = ((iRec139[1] * (1 - iTemp211)) + (iTemp208 * iTemp211)); - int iTemp212 = int((0.5f * (((2.32830644e-10f * float(iRec12)) + 1.0f) * float(iTemp0)))); - iRec142[0] = ((iVec0[1] * iRec142[1]) + (iTemp2 * iTemp212)); - int iTemp213 = ((iRec142[0] + iRec2[0]) % iTemp1); - float fTemp214 = (float(iTemp213) / float(iTemp69)); - int iTemp215 = int(fTemp214); - iRec141[0] = ((iRec141[1] * (1 - iTemp215)) + (iTemp212 * iTemp215)); - int iTemp216 = int((0.5f * (((2.32830644e-10f * float(iRec14)) + 1.0f) * float(iTemp0)))); - iRec144[0] = ((iVec0[1] * iRec144[1]) + (iTemp2 * iTemp216)); - int iTemp217 = ((iRec144[0] + iRec2[0]) % iTemp1); - float fTemp218 = (float(iTemp217) / float(iTemp69)); - int iTemp219 = int(fTemp218); - iRec143[0] = ((iRec143[1] * (1 - iTemp219)) + (iTemp216 * iTemp219)); - int iTemp220 = int((0.5f * (((2.32830644e-10f * float(iRec16)) + 1.0f) * float(iTemp0)))); - iRec146[0] = ((iVec0[1] * iRec146[1]) + (iTemp2 * iTemp220)); - int iTemp221 = ((iRec146[0] + iRec2[0]) % iTemp1); - float fTemp222 = (float(iTemp221) / float(iTemp69)); - int iTemp223 = int(fTemp222); - iRec145[0] = ((iRec145[1] * (1 - iTemp223)) + (iTemp220 * iTemp223)); - int iTemp224 = int((0.5f * (float(iTemp0) * ((2.32830644e-10f * float(iRec18)) + 1.0f)))); - iRec147[0] = ((iVec0[1] * iRec147[1]) + (iTemp2 * iTemp224)); - int iTemp225 = ((iRec2[0] + iRec147[0]) % iTemp1); - float fTemp226 = (float(iTemp225) / float(iTemp69)); - int iTemp227 = int(fTemp226); - iRec148[0] = ((iRec148[1] * (1 - iTemp227)) + (iTemp227 * iTemp224)); - int iTemp228 = int((0.5f * (((2.32830644e-10f * float(iRec20)) + 1.0f) * float(iTemp0)))); - iRec150[0] = ((iVec0[1] * iRec150[1]) + (iTemp2 * iTemp228)); - int iTemp229 = ((iRec150[0] + iRec2[0]) % iTemp1); - float fTemp230 = (float(iTemp229) / float(iTemp69)); - int iTemp231 = int(fTemp230); - iRec149[0] = ((iRec149[1] * (1 - iTemp231)) + (iTemp228 * iTemp231)); - int iTemp232 = int((0.5f * (((2.32830644e-10f * float(iRec22)) + 1.0f) * float(iTemp0)))); - iRec152[0] = ((iVec0[1] * iRec152[1]) + (iTemp2 * iTemp232)); - int iTemp233 = ((iRec152[0] + iRec2[0]) % iTemp1); - float fTemp234 = (float(iTemp233) / float(iTemp69)); - int iTemp235 = int(fTemp234); - iRec151[0] = ((iRec151[1] * (1 - iTemp235)) + (iTemp232 * iTemp235)); - int iTemp236 = int((0.5f * (((2.32830644e-10f * float(iRec24)) + 1.0f) * float(iTemp0)))); - iRec154[0] = ((iVec0[1] * iRec154[1]) + (iTemp2 * iTemp236)); - int iTemp237 = ((iRec154[0] + iRec2[0]) % iTemp1); - float fTemp238 = (float(iTemp237) / float(iTemp69)); - int iTemp239 = int(fTemp238); - iRec153[0] = ((iRec153[1] * (1 - iTemp239)) + (iTemp236 * iTemp239)); - int iTemp240 = int((0.5f * (((2.32830644e-10f * float(iRec26)) + 1.0f) * float(iTemp0)))); - iRec155[0] = ((iVec0[1] * iRec155[1]) + (iTemp2 * iTemp240)); - int iTemp241 = ((iRec2[0] + iRec155[0]) % iTemp1); - float fTemp242 = (float(iTemp241) / float(iTemp69)); - int iTemp243 = int(fTemp242); - iRec156[0] = ((iRec156[1] * (1 - iTemp243)) + (iTemp243 * iTemp240)); - int iTemp244 = int((0.5f * (float(iTemp0) * ((2.32830644e-10f * float(iRec28)) + 1.0f)))); - iRec157[0] = ((iVec0[1] * iRec157[1]) + (iTemp2 * iTemp244)); - int iTemp245 = ((iRec2[0] + iRec157[0]) % iTemp1); - float fTemp246 = (float(iTemp245) / float(iTemp69)); - int iTemp247 = int(fTemp246); - iRec158[0] = ((iRec158[1] * (1 - iTemp247)) + (iTemp244 * iTemp247)); - int iTemp248 = int((0.5f * (float(iTemp0) * ((2.32830644e-10f * float(iRec30)) + 1.0f)))); - iRec159[0] = ((iVec0[1] * iRec159[1]) + (iTemp2 * iTemp248)); - int iTemp249 = ((iRec2[0] + iRec159[0]) % iTemp1); - float fTemp250 = (float(iTemp249) / float(iTemp69)); - int iTemp251 = int(fTemp250); - iRec160[0] = ((iRec160[1] * (1 - iTemp251)) + (iTemp248 * iTemp251)); - int iTemp252 = int((0.5f * (float(iTemp0) * ((2.32830644e-10f * float(iRec32)) + 1.0f)))); - iRec161[0] = ((iVec0[1] * iRec161[1]) + (iTemp2 * iTemp252)); - int iTemp253 = ((iRec2[0] + iRec161[0]) % iTemp1); - float fTemp254 = (float(iTemp253) / float(iTemp69)); - int iTemp255 = int(fTemp254); - iRec162[0] = ((iRec162[1] * (1 - iTemp255)) + (iTemp252 * iTemp255)); - int iTemp256 = int((0.5f * (float(iTemp0) * ((2.32830644e-10f * float(iRec34)) + 1.0f)))); - iRec163[0] = ((iVec0[1] * iRec163[1]) + (iTemp2 * iTemp256)); - int iTemp257 = ((iRec2[0] + iRec163[0]) % iTemp1); - float fTemp258 = (float(iTemp257) / float(iTemp69)); - int iTemp259 = int(fTemp258); - iRec164[0] = ((iRec164[1] * (1 - iTemp259)) + (iTemp256 * iTemp259)); - int iTemp260 = int((0.5f * (float(iTemp0) * ((2.32830644e-10f * float(iRec36)) + 1.0f)))); - iRec165[0] = ((iVec0[1] * iRec165[1]) + (iTemp2 * iTemp260)); - int iTemp261 = ((iRec2[0] + iRec165[0]) % iTemp1); - float fTemp262 = (float(iTemp261) / float(iTemp69)); - int iTemp263 = int(fTemp262); - iRec166[0] = ((iRec166[1] * (1 - iTemp263)) + (iTemp260 * iTemp263)); - int iTemp264 = int((0.5f * (float(iTemp0) * ((2.32830644e-10f * float(iRec38)) + 1.0f)))); - iRec167[0] = ((iVec0[1] * iRec167[1]) + (iTemp2 * iTemp264)); - int iTemp265 = ((iRec2[0] + iRec167[0]) % iTemp1); - float fTemp266 = (float(iTemp265) / float(iTemp69)); - int iTemp267 = int(fTemp266); - iRec168[0] = ((iRec168[1] * (1 - iTemp267)) + (iTemp264 * iTemp267)); - int iTemp268 = int((0.5f * (float(iTemp0) * ((2.32830644e-10f * float(iRec40)) + 1.0f)))); - iRec169[0] = ((iVec0[1] * iRec169[1]) + (iTemp2 * iTemp268)); - int iTemp269 = ((iRec2[0] + iRec169[0]) % iTemp1); - float fTemp270 = (float(iTemp269) / float(iTemp69)); - int iTemp271 = int(fTemp270); - iRec170[0] = ((iRec170[1] * (1 - iTemp271)) + (iTemp268 * iTemp271)); - int iTemp272 = int((0.5f * (float(iTemp0) * ((2.32830644e-10f * float(iRec42)) + 1.0f)))); - iRec171[0] = ((iVec0[1] * iRec171[1]) + (iTemp2 * iTemp272)); - int iTemp273 = ((iRec2[0] + iRec171[0]) % iTemp1); - float fTemp274 = (float(iTemp273) / float(iTemp69)); - int iTemp275 = int(fTemp274); - iRec172[0] = ((iRec172[1] * (1 - iTemp275)) + (iTemp272 * iTemp275)); - int iTemp276 = int((0.5f * (float(iTemp0) * ((2.32830644e-10f * float(iRec44)) + 1.0f)))); - iRec173[0] = ((iVec0[1] * iRec173[1]) + (iTemp2 * iTemp276)); - int iTemp277 = ((iRec2[0] + iRec173[0]) % iTemp1); - float fTemp278 = (float(iTemp277) / float(iTemp69)); - int iTemp279 = int(fTemp278); - iRec174[0] = ((iRec174[1] * (1 - iTemp279)) + (iTemp276 * iTemp279)); - int iTemp280 = int((0.5f * (float(iTemp0) * ((2.32830644e-10f * float(iRec46)) + 1.0f)))); - iRec175[0] = ((iVec0[1] * iRec175[1]) + (iTemp2 * iTemp280)); - int iTemp281 = ((iRec2[0] + iRec175[0]) % iTemp1); - float fTemp282 = (float(iTemp281) / float(iTemp69)); - int iTemp283 = int(fTemp282); - iRec176[0] = ((iRec176[1] * (1 - iTemp283)) + (iTemp280 * iTemp283)); - int iTemp284 = int((0.5f * (float(iTemp0) * ((2.32830644e-10f * float(iRec48)) + 1.0f)))); - iRec177[0] = ((iVec0[1] * iRec177[1]) + (iTemp2 * iTemp284)); - int iTemp285 = ((iRec2[0] + iRec177[0]) % iTemp1); - float fTemp286 = (float(iTemp285) / float(iTemp69)); - int iTemp287 = int(fTemp286); - iRec178[0] = ((iRec178[1] * (1 - iTemp287)) + (iTemp284 * iTemp287)); - int iTemp288 = int((0.5f * (float(iTemp0) * ((2.32830644e-10f * float(iRec50)) + 1.0f)))); - iRec179[0] = ((iVec0[1] * iRec179[1]) + (iTemp2 * iTemp288)); - int iTemp289 = ((iRec2[0] + iRec179[0]) % iTemp1); - float fTemp290 = (float(iTemp289) / float(iTemp69)); - int iTemp291 = int(fTemp290); - iRec180[0] = ((iRec180[1] * (1 - iTemp291)) + (iTemp288 * iTemp291)); - int iTemp292 = int((0.5f * (float(iTemp0) * ((2.32830644e-10f * float(iRec52)) + 1.0f)))); - iRec181[0] = ((iVec0[1] * iRec181[1]) + (iTemp2 * iTemp292)); - int iTemp293 = ((iRec2[0] + iRec181[0]) % iTemp1); - float fTemp294 = (float(iTemp293) / float(iTemp69)); - int iTemp295 = int(fTemp294); - iRec182[0] = ((iRec182[1] * (1 - iTemp295)) + (iTemp292 * iTemp295)); - int iTemp296 = int((0.5f * (float(iTemp0) * ((2.32830644e-10f * float(iRec54)) + 1.0f)))); - iRec183[0] = ((iVec0[1] * iRec183[1]) + (iTemp2 * iTemp296)); - int iTemp297 = ((iRec2[0] + iRec183[0]) % iTemp1); - float fTemp298 = (float(iTemp297) / float(iTemp69)); - int iTemp299 = int(fTemp298); - iRec184[0] = ((iRec184[1] * (1 - iTemp299)) + (iTemp296 * iTemp299)); - int iTemp300 = int((0.5f * (float(iTemp0) * ((2.32830644e-10f * float(iRec56)) + 1.0f)))); - iRec185[0] = ((iVec0[1] * iRec185[1]) + (iTemp2 * iTemp300)); - int iTemp301 = ((iRec2[0] + iRec185[0]) % iTemp1); - float fTemp302 = (float(iTemp301) / float(iTemp69)); - int iTemp303 = int(fTemp302); - iRec186[0] = (((1 - iTemp303) * iRec186[1]) + (iTemp303 * iTemp300)); - int iTemp304 = int((0.5f * (((2.32830644e-10f * float(iRec58)) + 1.0f) * float(iTemp0)))); - iRec188[0] = ((iVec0[1] * iRec188[1]) + (iTemp2 * iTemp304)); - int iTemp305 = ((iRec188[0] + iRec2[0]) % iTemp1); - float fTemp306 = (float(iTemp305) / float(iTemp69)); - int iTemp307 = int(fTemp306); - iRec187[0] = ((iRec187[1] * (1 - iTemp307)) + (iTemp304 * iTemp307)); - int iTemp308 = int((0.5f * (((2.32830644e-10f * float(iRec60)) + 1.0f) * float(iTemp0)))); - iRec190[0] = ((iVec0[1] * iRec190[1]) + (iTemp2 * iTemp308)); - int iTemp309 = ((iRec190[0] + iRec2[0]) % iTemp1); - float fTemp310 = (float(iTemp309) / float(iTemp69)); - int iTemp311 = int(fTemp310); - iRec189[0] = ((iRec189[1] * (1 - iTemp311)) + (iTemp308 * iTemp311)); - int iTemp312 = int((0.5f * (((2.32830644e-10f * float(iRec62)) + 1.0f) * float(iTemp0)))); - iRec192[0] = ((iVec0[1] * iRec192[1]) + (iTemp2 * iTemp312)); - int iTemp313 = ((iRec192[0] + iRec2[0]) % iTemp1); - float fTemp314 = (float(iTemp313) / float(iTemp69)); - int iTemp315 = int(fTemp314); - iRec191[0] = ((iRec191[1] * (1 - iTemp315)) + (iTemp312 * iTemp315)); - int iTemp316 = int((0.5f * (((2.32830644e-10f * float(iRec66)) + 1.0f) * float(iTemp0)))); - iRec194[0] = ((iVec0[1] * iRec194[1]) + (iTemp2 * iTemp316)); - int iTemp317 = ((iRec194[0] + iRec2[0]) % iTemp1); - float fTemp318 = (float(iTemp317) / float(iTemp69)); - int iTemp319 = int(fTemp318); - iRec193[0] = ((iRec193[1] * (1 - iTemp319)) + (iTemp316 * iTemp319)); - int iTemp320 = int((0.5f * (((2.32830644e-10f * float(iRec68)) + 1.0f) * float(iTemp0)))); - iRec195[0] = ((iVec0[1] * iRec195[1]) + (iTemp2 * iTemp320)); - int iTemp321 = ((iRec195[0] + iRec2[0]) % iTemp1); - float fTemp322 = (float(iTemp321) / float(iTemp69)); - int iTemp323 = int(fTemp322); - iRec196[0] = ((iRec196[1] * (1 - iTemp323)) + (iTemp320 * iTemp323)); - output1[i] = FAUSTFLOAT((fSlow1 * ((((float(iSlow36) * (ftbl0[((iRec133[0] + iTemp197) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp198))])) + (((((((((((((((((((((((((((((float(iSlow37) * (ftbl1fx_granulatorSIG1[int((1024.0f * fTemp202))] * ftbl0[((iTemp201 + iRec136[0]) % iTemp0)])) + (float(iSlow38) * (ftbl1fx_granulatorSIG1[int((1024.0f * fTemp206))] * ftbl0[((iRec138[0] + iTemp205) % iTemp0)]))) + (float(iSlow39) * (ftbl0[((iRec139[0] + iTemp209) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp210))]))) + (float(iSlow40) * (ftbl0[((iRec141[0] + iTemp213) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp214))]))) + (float(iSlow41) * (ftbl0[((iRec143[0] + iTemp217) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp218))]))) + (float(iSlow42) * (ftbl0[((iRec145[0] + iTemp221) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp222))]))) + (float(iSlow43) * (ftbl0[((iTemp225 + iRec148[0]) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp226))]))) + (float(iSlow44) * (ftbl0[((iRec149[0] + iTemp229) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp230))]))) + (float(iSlow45) * (ftbl0[((iRec151[0] + iTemp233) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp234))]))) + (float(iSlow46) * (ftbl0[((iRec153[0] + iTemp237) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp238))]))) + (float(iSlow47) * (ftbl0[((iTemp241 + iRec156[0]) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp242))]))) + (float(iSlow48) * (ftbl0[((iTemp245 + iRec158[0]) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp246))]))) + (float(iSlow49) * (ftbl0[((iTemp249 + iRec160[0]) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp250))]))) + (float(iSlow50) * (ftbl1fx_granulatorSIG1[int((1024.0f * fTemp254))] * ftbl0[((iTemp253 + iRec162[0]) % iTemp0)]))) + (float(iSlow51) * (ftbl0[((iTemp257 + iRec164[0]) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp258))]))) + (float(iSlow52) * (ftbl1fx_granulatorSIG1[int((1024.0f * fTemp262))] * ftbl0[((iTemp261 + iRec166[0]) % iTemp0)]))) + (float(iSlow53) * (ftbl1fx_granulatorSIG1[int((1024.0f * fTemp266))] * ftbl0[((iTemp265 + iRec168[0]) % iTemp0)]))) + (float(iSlow54) * (ftbl1fx_granulatorSIG1[int((1024.0f * fTemp270))] * ftbl0[((iTemp269 + iRec170[0]) % iTemp0)]))) + (float(iSlow55) * (ftbl0[((iTemp273 + iRec172[0]) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp274))]))) + (float(iSlow56) * (ftbl0[((iTemp277 + iRec174[0]) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp278))]))) + (float(iSlow57) * (ftbl1fx_granulatorSIG1[int((1024.0f * fTemp282))] * ftbl0[((iTemp281 + iRec176[0]) % iTemp0)]))) + (float(iSlow58) * (ftbl0[((iTemp285 + iRec178[0]) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp286))]))) + (float(iSlow59) * (ftbl0[((iTemp289 + iRec180[0]) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp290))]))) + (float(iSlow60) * (ftbl0[((iTemp293 + iRec182[0]) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp294))]))) + (float(iSlow61) * (ftbl1fx_granulatorSIG1[int((1024.0f * fTemp298))] * ftbl0[((iTemp297 + iRec184[0]) % iTemp0)]))) + (float(iSlow62) * (ftbl1fx_granulatorSIG1[int((1024.0f * fTemp302))] * ftbl0[((iRec186[0] + iTemp301) % iTemp0)]))) + (float(iSlow63) * (ftbl0[((iRec187[0] + iTemp305) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp306))]))) + (float(iSlow64) * (ftbl0[((iRec189[0] + iTemp309) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp310))]))) + (float(iSlow65) * (ftbl0[((iRec191[0] + iTemp313) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp314))])))) + (float(iSlow66) * (ftbl0[((iRec193[0] + iTemp317) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp318))]))) + (float(iSlow67) * (ftbl0[((iTemp321 + iRec196[0]) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp322))]))))); + int iTemp67 = (1103515245 * (iTemp66 + 12345)); + iRec6[0] = (1103515245 * (iTemp67 + 12345)); + int iRec7 = iTemp67; + int iRec8 = iTemp66; + int iRec9 = iTemp65; + int iRec10 = iTemp64; + int iRec11 = iTemp63; + int iRec12 = iTemp62; + int iRec13 = iTemp61; + int iRec14 = iTemp60; + int iRec15 = iTemp59; + int iRec16 = iTemp58; + int iRec17 = iTemp57; + int iRec18 = iTemp56; + int iRec19 = iTemp55; + int iRec20 = iTemp54; + int iRec21 = iTemp53; + int iRec22 = iTemp52; + int iRec23 = iTemp51; + int iRec24 = iTemp50; + int iRec25 = iTemp49; + int iRec26 = iTemp48; + int iRec27 = iTemp47; + int iRec28 = iTemp46; + int iRec29 = iTemp45; + int iRec30 = iTemp44; + int iRec31 = iTemp43; + int iRec32 = iTemp42; + int iRec33 = iTemp41; + int iRec34 = iTemp40; + int iRec35 = iTemp39; + int iRec36 = iTemp38; + int iRec37 = iTemp37; + int iRec38 = iTemp36; + int iRec39 = iTemp35; + int iRec40 = iTemp34; + int iRec41 = iTemp33; + int iRec42 = iTemp32; + int iRec43 = iTemp31; + int iRec44 = iTemp30; + int iRec45 = iTemp29; + int iRec46 = iTemp28; + int iRec47 = iTemp27; + int iRec48 = iTemp26; + int iRec49 = iTemp25; + int iRec50 = iTemp24; + int iRec51 = iTemp23; + int iRec52 = iTemp22; + int iRec53 = iTemp21; + int iRec54 = iTemp20; + int iRec55 = iTemp19; + int iRec56 = iTemp18; + int iRec57 = iTemp17; + int iRec58 = iTemp16; + int iRec59 = iTemp15; + int iRec60 = iTemp14; + int iRec61 = iTemp13; + int iRec62 = iTemp12; + int iRec63 = iTemp11; + int iRec64 = iTemp10; + int iRec65 = iTemp9; + int iRec66 = iTemp8; + int iRec67 = iTemp7; + int iRec68 = iTemp6; + int iRec69 = iTemp5; + int iTemp68 = int((0.5f * (fTemp3 * ((2.32830644e-10f * float(iRec6[0])) + 1.0f)))); + iRec5[0] = ((iVec0[1] * iRec5[1]) + (iTemp2 * iTemp68)); + int iTemp69 = ((iRec3[0] + iRec5[0]) % iTemp1); + float fTemp70 = float((iTemp1 + -1)); + float fTemp71 = (float(iTemp69) / fTemp70); + int iTemp72 = int(fTemp71); + iRec2[0] = ((iRec2[1] * (1 - iTemp72)) + (iTemp68 * iTemp72)); + int iTemp73 = int((0.5f * (fTemp3 * ((2.32830644e-10f * float(iRec8)) + 1.0f)))); + iRec72[0] = ((iVec0[1] * iRec72[1]) + (iTemp2 * iTemp73)); + int iTemp74 = ((iRec3[0] + iRec72[0]) % iTemp1); + float fTemp75 = (float(iTemp74) / fTemp70); + int iTemp76 = int(fTemp75); + iRec71[0] = ((iRec71[1] * (1 - iTemp76)) + (iTemp73 * iTemp76)); + int iTemp77 = int((0.5f * (fTemp3 * ((2.32830644e-10f * float(iRec10)) + 1.0f)))); + iRec74[0] = ((iVec0[1] * iRec74[1]) + (iTemp2 * iTemp77)); + int iTemp78 = ((iRec3[0] + iRec74[0]) % iTemp1); + float fTemp79 = (float(iTemp78) / fTemp70); + int iTemp80 = int(fTemp79); + iRec73[0] = ((iRec73[1] * (1 - iTemp80)) + (iTemp77 * iTemp80)); + int iTemp81 = int((0.5f * (fTemp3 * ((2.32830644e-10f * float(iRec12)) + 1.0f)))); + iRec76[0] = ((iVec0[1] * iRec76[1]) + (iTemp2 * iTemp81)); + int iTemp82 = ((iRec3[0] + iRec76[0]) % iTemp1); + float fTemp83 = (float(iTemp82) / fTemp70); + int iTemp84 = int(fTemp83); + iRec75[0] = ((iRec75[1] * (1 - iTemp84)) + (iTemp81 * iTemp84)); + int iTemp85 = int((0.5f * (fTemp3 * ((2.32830644e-10f * float(iRec14)) + 1.0f)))); + iRec78[0] = ((iVec0[1] * iRec78[1]) + (iTemp2 * iTemp85)); + int iTemp86 = ((iRec3[0] + iRec78[0]) % iTemp1); + float fTemp87 = (float(iTemp86) / fTemp70); + int iTemp88 = int(fTemp87); + iRec77[0] = ((iRec77[1] * (1 - iTemp88)) + (iTemp85 * iTemp88)); + int iTemp89 = int((0.5f * (fTemp3 * ((2.32830644e-10f * float(iRec16)) + 1.0f)))); + iRec80[0] = ((iVec0[1] * iRec80[1]) + (iTemp2 * iTemp89)); + int iTemp90 = ((iRec3[0] + iRec80[0]) % iTemp1); + float fTemp91 = (float(iTemp90) / fTemp70); + int iTemp92 = int(fTemp91); + iRec79[0] = ((iRec79[1] * (1 - iTemp92)) + (iTemp89 * iTemp92)); + int iTemp93 = int((0.5f * (fTemp3 * ((2.32830644e-10f * float(iRec18)) + 1.0f)))); + iRec82[0] = ((iVec0[1] * iRec82[1]) + (iTemp2 * iTemp93)); + int iTemp94 = ((iRec3[0] + iRec82[0]) % iTemp1); + float fTemp95 = (float(iTemp94) / fTemp70); + int iTemp96 = int(fTemp95); + iRec81[0] = ((iRec81[1] * (1 - iTemp96)) + (iTemp93 * iTemp96)); + int iTemp97 = int((0.5f * (fTemp3 * ((2.32830644e-10f * float(iRec20)) + 1.0f)))); + iRec84[0] = ((iVec0[1] * iRec84[1]) + (iTemp2 * iTemp97)); + int iTemp98 = ((iRec3[0] + iRec84[0]) % iTemp1); + float fTemp99 = (float(iTemp98) / fTemp70); + int iTemp100 = int(fTemp99); + iRec83[0] = ((iRec83[1] * (1 - iTemp100)) + (iTemp97 * iTemp100)); + int iTemp101 = int((0.5f * (fTemp3 * ((2.32830644e-10f * float(iRec22)) + 1.0f)))); + iRec86[0] = ((iVec0[1] * iRec86[1]) + (iTemp2 * iTemp101)); + int iTemp102 = ((iRec3[0] + iRec86[0]) % iTemp1); + float fTemp103 = (float(iTemp102) / fTemp70); + int iTemp104 = int(fTemp103); + iRec85[0] = ((iRec85[1] * (1 - iTemp104)) + (iTemp101 * iTemp104)); + int iTemp105 = int((0.5f * (fTemp3 * ((2.32830644e-10f * float(iRec24)) + 1.0f)))); + iRec88[0] = ((iVec0[1] * iRec88[1]) + (iTemp2 * iTemp105)); + int iTemp106 = ((iRec3[0] + iRec88[0]) % iTemp1); + float fTemp107 = (float(iTemp106) / fTemp70); + int iTemp108 = int(fTemp107); + iRec87[0] = ((iRec87[1] * (1 - iTemp108)) + (iTemp105 * iTemp108)); + int iTemp109 = int((0.5f * (fTemp3 * ((2.32830644e-10f * float(iRec26)) + 1.0f)))); + iRec90[0] = ((iVec0[1] * iRec90[1]) + (iTemp2 * iTemp109)); + int iTemp110 = ((iRec3[0] + iRec90[0]) % iTemp1); + float fTemp111 = (float(iTemp110) / fTemp70); + int iTemp112 = int(fTemp111); + iRec89[0] = ((iRec89[1] * (1 - iTemp112)) + (iTemp109 * iTemp112)); + int iTemp113 = int((0.5f * (fTemp3 * ((2.32830644e-10f * float(iRec28)) + 1.0f)))); + iRec92[0] = ((iVec0[1] * iRec92[1]) + (iTemp2 * iTemp113)); + int iTemp114 = ((iRec3[0] + iRec92[0]) % iTemp1); + float fTemp115 = (float(iTemp114) / fTemp70); + int iTemp116 = int(fTemp115); + iRec91[0] = ((iRec91[1] * (1 - iTemp116)) + (iTemp113 * iTemp116)); + int iTemp117 = int((0.5f * (fTemp3 * ((2.32830644e-10f * float(iRec30)) + 1.0f)))); + iRec94[0] = ((iVec0[1] * iRec94[1]) + (iTemp2 * iTemp117)); + int iTemp118 = ((iRec3[0] + iRec94[0]) % iTemp1); + float fTemp119 = (float(iTemp118) / fTemp70); + int iTemp120 = int(fTemp119); + iRec93[0] = ((iRec93[1] * (1 - iTemp120)) + (iTemp117 * iTemp120)); + int iTemp121 = int((0.5f * (fTemp3 * ((2.32830644e-10f * float(iRec32)) + 1.0f)))); + iRec96[0] = ((iVec0[1] * iRec96[1]) + (iTemp2 * iTemp121)); + int iTemp122 = ((iRec3[0] + iRec96[0]) % iTemp1); + float fTemp123 = (float(iTemp122) / fTemp70); + int iTemp124 = int(fTemp123); + iRec95[0] = ((iRec95[1] * (1 - iTemp124)) + (iTemp121 * iTemp124)); + int iTemp125 = int((0.5f * (fTemp3 * ((2.32830644e-10f * float(iRec34)) + 1.0f)))); + iRec98[0] = ((iVec0[1] * iRec98[1]) + (iTemp2 * iTemp125)); + int iTemp126 = ((iRec3[0] + iRec98[0]) % iTemp1); + float fTemp127 = (float(iTemp126) / fTemp70); + int iTemp128 = int(fTemp127); + iRec97[0] = ((iRec97[1] * (1 - iTemp128)) + (iTemp125 * iTemp128)); + int iTemp129 = int((0.5f * (fTemp3 * ((2.32830644e-10f * float(iRec36)) + 1.0f)))); + iRec100[0] = ((iVec0[1] * iRec100[1]) + (iTemp2 * iTemp129)); + int iTemp130 = ((iRec3[0] + iRec100[0]) % iTemp1); + float fTemp131 = (float(iTemp130) / fTemp70); + int iTemp132 = int(fTemp131); + iRec99[0] = ((iRec99[1] * (1 - iTemp132)) + (iTemp129 * iTemp132)); + int iTemp133 = int((0.5f * (fTemp3 * ((2.32830644e-10f * float(iRec38)) + 1.0f)))); + iRec102[0] = ((iVec0[1] * iRec102[1]) + (iTemp2 * iTemp133)); + int iTemp134 = ((iRec3[0] + iRec102[0]) % iTemp1); + float fTemp135 = (float(iTemp134) / fTemp70); + int iTemp136 = int(fTemp135); + iRec101[0] = ((iRec101[1] * (1 - iTemp136)) + (iTemp133 * iTemp136)); + int iTemp137 = int((0.5f * (fTemp3 * ((2.32830644e-10f * float(iRec40)) + 1.0f)))); + iRec104[0] = ((iVec0[1] * iRec104[1]) + (iTemp2 * iTemp137)); + int iTemp138 = ((iRec3[0] + iRec104[0]) % iTemp1); + float fTemp139 = (float(iTemp138) / fTemp70); + int iTemp140 = int(fTemp139); + iRec103[0] = ((iRec103[1] * (1 - iTemp140)) + (iTemp137 * iTemp140)); + int iTemp141 = int((0.5f * (fTemp3 * ((2.32830644e-10f * float(iRec42)) + 1.0f)))); + iRec106[0] = ((iVec0[1] * iRec106[1]) + (iTemp2 * iTemp141)); + int iTemp142 = ((iRec3[0] + iRec106[0]) % iTemp1); + float fTemp143 = (float(iTemp142) / fTemp70); + int iTemp144 = int(fTemp143); + iRec105[0] = ((iRec105[1] * (1 - iTemp144)) + (iTemp141 * iTemp144)); + int iTemp145 = int((0.5f * (fTemp3 * ((2.32830644e-10f * float(iRec44)) + 1.0f)))); + iRec108[0] = ((iVec0[1] * iRec108[1]) + (iTemp2 * iTemp145)); + int iTemp146 = ((iRec3[0] + iRec108[0]) % iTemp1); + float fTemp147 = (float(iTemp146) / fTemp70); + int iTemp148 = int(fTemp147); + iRec107[0] = ((iRec107[1] * (1 - iTemp148)) + (iTemp145 * iTemp148)); + int iTemp149 = int((0.5f * (fTemp3 * ((2.32830644e-10f * float(iRec46)) + 1.0f)))); + iRec110[0] = ((iVec0[1] * iRec110[1]) + (iTemp2 * iTemp149)); + int iTemp150 = ((iRec3[0] + iRec110[0]) % iTemp1); + float fTemp151 = (float(iTemp150) / fTemp70); + int iTemp152 = int(fTemp151); + iRec109[0] = ((iRec109[1] * (1 - iTemp152)) + (iTemp149 * iTemp152)); + int iTemp153 = int((0.5f * (fTemp3 * ((2.32830644e-10f * float(iRec48)) + 1.0f)))); + iRec112[0] = ((iVec0[1] * iRec112[1]) + (iTemp2 * iTemp153)); + int iTemp154 = ((iRec3[0] + iRec112[0]) % iTemp1); + float fTemp155 = (float(iTemp154) / fTemp70); + int iTemp156 = int(fTemp155); + iRec111[0] = ((iRec111[1] * (1 - iTemp156)) + (iTemp153 * iTemp156)); + int iTemp157 = int((0.5f * (fTemp3 * ((2.32830644e-10f * float(iRec50)) + 1.0f)))); + iRec114[0] = ((iVec0[1] * iRec114[1]) + (iTemp2 * iTemp157)); + int iTemp158 = ((iRec3[0] + iRec114[0]) % iTemp1); + float fTemp159 = (float(iTemp158) / fTemp70); + int iTemp160 = int(fTemp159); + iRec113[0] = ((iRec113[1] * (1 - iTemp160)) + (iTemp157 * iTemp160)); + int iTemp161 = int((0.5f * (fTemp3 * ((2.32830644e-10f * float(iRec52)) + 1.0f)))); + iRec116[0] = ((iVec0[1] * iRec116[1]) + (iTemp2 * iTemp161)); + int iTemp162 = ((iRec3[0] + iRec116[0]) % iTemp1); + float fTemp163 = (float(iTemp162) / fTemp70); + int iTemp164 = int(fTemp163); + iRec115[0] = ((iRec115[1] * (1 - iTemp164)) + (iTemp161 * iTemp164)); + int iTemp165 = int((0.5f * (fTemp3 * ((2.32830644e-10f * float(iRec54)) + 1.0f)))); + iRec118[0] = ((iVec0[1] * iRec118[1]) + (iTemp2 * iTemp165)); + int iTemp166 = ((iRec3[0] + iRec118[0]) % iTemp1); + float fTemp167 = (float(iTemp166) / fTemp70); + int iTemp168 = int(fTemp167); + iRec117[0] = ((iRec117[1] * (1 - iTemp168)) + (iTemp165 * iTemp168)); + int iTemp169 = int((0.5f * (fTemp3 * ((2.32830644e-10f * float(iRec56)) + 1.0f)))); + iRec120[0] = ((iVec0[1] * iRec120[1]) + (iTemp2 * iTemp169)); + int iTemp170 = ((iRec3[0] + iRec120[0]) % iTemp1); + float fTemp171 = (float(iTemp170) / fTemp70); + int iTemp172 = int(fTemp171); + iRec119[0] = ((iRec119[1] * (1 - iTemp172)) + (iTemp169 * iTemp172)); + int iTemp173 = int((0.5f * (fTemp3 * ((2.32830644e-10f * float(iRec58)) + 1.0f)))); + iRec122[0] = ((iVec0[1] * iRec122[1]) + (iTemp2 * iTemp173)); + int iTemp174 = ((iRec3[0] + iRec122[0]) % iTemp1); + float fTemp175 = (float(iTemp174) / fTemp70); + int iTemp176 = int(fTemp175); + iRec121[0] = ((iRec121[1] * (1 - iTemp176)) + (iTemp173 * iTemp176)); + int iTemp177 = int((0.5f * (fTemp3 * ((2.32830644e-10f * float(iRec60)) + 1.0f)))); + iRec124[0] = ((iVec0[1] * iRec124[1]) + (iTemp2 * iTemp177)); + int iTemp178 = ((iRec3[0] + iRec124[0]) % iTemp1); + float fTemp179 = (float(iTemp178) / fTemp70); + int iTemp180 = int(fTemp179); + iRec123[0] = ((iRec123[1] * (1 - iTemp180)) + (iTemp177 * iTemp180)); + int iTemp181 = int((0.5f * (fTemp3 * ((2.32830644e-10f * float(iRec62)) + 1.0f)))); + iRec126[0] = ((iVec0[1] * iRec126[1]) + (iTemp2 * iTemp181)); + int iTemp182 = ((iRec3[0] + iRec126[0]) % iTemp1); + float fTemp183 = (float(iTemp182) / fTemp70); + int iTemp184 = int(fTemp183); + iRec125[0] = ((iRec125[1] * (1 - iTemp184)) + (iTemp181 * iTemp184)); + int iTemp185 = int((0.5f * (fTemp3 * ((2.32830644e-10f * float(iRec64)) + 1.0f)))); + iRec128[0] = ((iVec0[1] * iRec128[1]) + (iTemp2 * iTemp185)); + int iTemp186 = ((iRec3[0] + iRec128[0]) % iTemp1); + float fTemp187 = (float(iTemp186) / fTemp70); + int iTemp188 = int(fTemp187); + iRec127[0] = ((iRec127[1] * (1 - iTemp188)) + (iTemp185 * iTemp188)); + int iTemp189 = int((0.5f * (fTemp3 * ((2.32830644e-10f * float(iRec66)) + 1.0f)))); + iRec130[0] = ((iVec0[1] * iRec130[1]) + (iTemp2 * iTemp189)); + int iTemp190 = ((iRec3[0] + iRec130[0]) % iTemp1); + float fTemp191 = (float(iTemp190) / fTemp70); + int iTemp192 = int(fTemp191); + iRec129[0] = ((iRec129[1] * (1 - iTemp192)) + (iTemp189 * iTemp192)); + int iTemp193 = int((0.5f * (fTemp3 * ((2.32830644e-10f * float(iRec68)) + 1.0f)))); + iRec132[0] = ((iVec0[1] * iRec132[1]) + (iTemp2 * iTemp193)); + int iTemp194 = ((iRec3[0] + iRec132[0]) % iTemp1); + float fTemp195 = (float(iTemp194) / fTemp70); + int iTemp196 = int(fTemp195); + iRec131[0] = ((iRec131[1] * (1 - iTemp196)) + (iTemp193 * iTemp196)); + output0[i] = FAUSTFLOAT((fSlow1 * ((((((((((((((((((((((((((((((((fSlow2 * (ftbl0[((iRec2[0] + iTemp69) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp71))])) + (fSlow5 * (ftbl0[((iRec71[0] + iTemp74) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp75))]))) + (fSlow6 * (ftbl0[((iRec73[0] + iTemp78) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp79))]))) + (fSlow7 * (ftbl0[((iRec75[0] + iTemp82) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp83))]))) + (fSlow8 * (ftbl0[((iRec77[0] + iTemp86) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp87))]))) + (fSlow9 * (ftbl0[((iRec79[0] + iTemp90) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp91))]))) + (fSlow10 * (ftbl0[((iRec81[0] + iTemp94) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp95))]))) + (fSlow11 * (ftbl0[((iRec83[0] + iTemp98) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp99))]))) + (fSlow12 * (ftbl0[((iRec85[0] + iTemp102) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp103))]))) + (fSlow13 * (ftbl0[((iRec87[0] + iTemp106) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp107))]))) + (fSlow14 * (ftbl0[((iRec89[0] + iTemp110) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp111))]))) + (fSlow15 * (ftbl0[((iRec91[0] + iTemp114) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp115))]))) + (fSlow16 * (ftbl0[((iRec93[0] + iTemp118) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp119))]))) + (fSlow17 * (ftbl0[((iRec95[0] + iTemp122) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp123))]))) + (fSlow18 * (ftbl0[((iRec97[0] + iTemp126) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp127))]))) + (fSlow19 * (ftbl0[((iRec99[0] + iTemp130) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp131))]))) + (fSlow20 * (ftbl0[((iRec101[0] + iTemp134) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp135))]))) + (fSlow21 * (ftbl0[((iRec103[0] + iTemp138) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp139))]))) + (fSlow22 * (ftbl0[((iRec105[0] + iTemp142) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp143))]))) + (fSlow23 * (ftbl0[((iRec107[0] + iTemp146) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp147))]))) + (fSlow24 * (ftbl0[((iRec109[0] + iTemp150) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp151))]))) + (fSlow25 * (ftbl0[((iRec111[0] + iTemp154) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp155))]))) + (fSlow26 * (ftbl0[((iRec113[0] + iTemp158) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp159))]))) + (fSlow27 * (ftbl0[((iRec115[0] + iTemp162) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp163))]))) + (fSlow28 * (ftbl0[((iRec117[0] + iTemp166) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp167))]))) + (fSlow29 * (ftbl0[((iRec119[0] + iTemp170) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp171))]))) + (fSlow30 * (ftbl0[((iRec121[0] + iTemp174) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp175))]))) + (fSlow31 * (ftbl0[((iRec123[0] + iTemp178) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp179))]))) + (fSlow32 * (ftbl0[((iRec125[0] + iTemp182) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp183))]))) + (fSlow33 * (ftbl0[((iRec127[0] + iTemp186) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp187))]))) + (fSlow34 * (ftbl0[((iRec129[0] + iTemp190) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp191))]))) + (fSlow35 * (ftbl0[((iRec131[0] + iTemp194) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp195))]))))); + int iTemp197 = int((0.5f * (fTemp3 * ((2.32830644e-10f * float(iRec7)) + 1.0f)))); + iRec134[0] = ((iVec0[1] * iRec134[1]) + (iTemp2 * iTemp197)); + int iTemp198 = ((iRec3[0] + iRec134[0]) % iTemp1); + float fTemp199 = (float(iTemp198) / fTemp70); + int iTemp200 = int(fTemp199); + iRec133[0] = ((iRec133[1] * (1 - iTemp200)) + (iTemp197 * iTemp200)); + int iTemp201 = int((0.5f * (fTemp3 * ((2.32830644e-10f * float(iRec9)) + 1.0f)))); + iRec136[0] = ((iVec0[1] * iRec136[1]) + (iTemp2 * iTemp201)); + int iTemp202 = ((iRec3[0] + iRec136[0]) % iTemp1); + float fTemp203 = (float(iTemp202) / fTemp70); + int iTemp204 = int(fTemp203); + iRec135[0] = ((iRec135[1] * (1 - iTemp204)) + (iTemp201 * iTemp204)); + int iTemp205 = int((0.5f * (fTemp3 * ((2.32830644e-10f * float(iRec11)) + 1.0f)))); + iRec138[0] = ((iVec0[1] * iRec138[1]) + (iTemp2 * iTemp205)); + int iTemp206 = ((iRec3[0] + iRec138[0]) % iTemp1); + float fTemp207 = (float(iTemp206) / fTemp70); + int iTemp208 = int(fTemp207); + iRec137[0] = ((iRec137[1] * (1 - iTemp208)) + (iTemp205 * iTemp208)); + int iTemp209 = int((0.5f * (fTemp3 * ((2.32830644e-10f * float(iRec13)) + 1.0f)))); + iRec140[0] = ((iVec0[1] * iRec140[1]) + (iTemp2 * iTemp209)); + int iTemp210 = ((iRec3[0] + iRec140[0]) % iTemp1); + float fTemp211 = (float(iTemp210) / fTemp70); + int iTemp212 = int(fTemp211); + iRec139[0] = ((iRec139[1] * (1 - iTemp212)) + (iTemp209 * iTemp212)); + int iTemp213 = int((0.5f * (fTemp3 * ((2.32830644e-10f * float(iRec15)) + 1.0f)))); + iRec142[0] = ((iVec0[1] * iRec142[1]) + (iTemp2 * iTemp213)); + int iTemp214 = ((iRec3[0] + iRec142[0]) % iTemp1); + float fTemp215 = (float(iTemp214) / fTemp70); + int iTemp216 = int(fTemp215); + iRec141[0] = ((iRec141[1] * (1 - iTemp216)) + (iTemp213 * iTemp216)); + int iTemp217 = int((0.5f * (fTemp3 * ((2.32830644e-10f * float(iRec17)) + 1.0f)))); + iRec144[0] = ((iVec0[1] * iRec144[1]) + (iTemp2 * iTemp217)); + int iTemp218 = ((iRec3[0] + iRec144[0]) % iTemp1); + float fTemp219 = (float(iTemp218) / fTemp70); + int iTemp220 = int(fTemp219); + iRec143[0] = ((iRec143[1] * (1 - iTemp220)) + (iTemp217 * iTemp220)); + int iTemp221 = int((0.5f * (fTemp3 * ((2.32830644e-10f * float(iRec19)) + 1.0f)))); + iRec146[0] = ((iVec0[1] * iRec146[1]) + (iTemp2 * iTemp221)); + int iTemp222 = ((iRec3[0] + iRec146[0]) % iTemp1); + float fTemp223 = (float(iTemp222) / fTemp70); + int iTemp224 = int(fTemp223); + iRec145[0] = ((iRec145[1] * (1 - iTemp224)) + (iTemp221 * iTemp224)); + int iTemp225 = int((0.5f * (fTemp3 * ((2.32830644e-10f * float(iRec21)) + 1.0f)))); + iRec148[0] = ((iVec0[1] * iRec148[1]) + (iTemp2 * iTemp225)); + int iTemp226 = ((iRec3[0] + iRec148[0]) % iTemp1); + float fTemp227 = (float(iTemp226) / fTemp70); + int iTemp228 = int(fTemp227); + iRec147[0] = ((iRec147[1] * (1 - iTemp228)) + (iTemp225 * iTemp228)); + int iTemp229 = int((0.5f * (fTemp3 * ((2.32830644e-10f * float(iRec23)) + 1.0f)))); + iRec150[0] = ((iVec0[1] * iRec150[1]) + (iTemp2 * iTemp229)); + int iTemp230 = ((iRec3[0] + iRec150[0]) % iTemp1); + float fTemp231 = (float(iTemp230) / fTemp70); + int iTemp232 = int(fTemp231); + iRec149[0] = ((iRec149[1] * (1 - iTemp232)) + (iTemp229 * iTemp232)); + int iTemp233 = int((0.5f * (fTemp3 * ((2.32830644e-10f * float(iRec25)) + 1.0f)))); + iRec152[0] = ((iVec0[1] * iRec152[1]) + (iTemp2 * iTemp233)); + int iTemp234 = ((iRec3[0] + iRec152[0]) % iTemp1); + float fTemp235 = (float(iTemp234) / fTemp70); + int iTemp236 = int(fTemp235); + iRec151[0] = ((iRec151[1] * (1 - iTemp236)) + (iTemp233 * iTemp236)); + int iTemp237 = int((0.5f * (fTemp3 * ((2.32830644e-10f * float(iRec27)) + 1.0f)))); + iRec154[0] = ((iVec0[1] * iRec154[1]) + (iTemp2 * iTemp237)); + int iTemp238 = ((iRec3[0] + iRec154[0]) % iTemp1); + float fTemp239 = (float(iTemp238) / fTemp70); + int iTemp240 = int(fTemp239); + iRec153[0] = ((iRec153[1] * (1 - iTemp240)) + (iTemp237 * iTemp240)); + int iTemp241 = int((0.5f * (fTemp3 * ((2.32830644e-10f * float(iRec29)) + 1.0f)))); + iRec156[0] = ((iVec0[1] * iRec156[1]) + (iTemp2 * iTemp241)); + int iTemp242 = ((iRec3[0] + iRec156[0]) % iTemp1); + float fTemp243 = (float(iTemp242) / fTemp70); + int iTemp244 = int(fTemp243); + iRec155[0] = ((iRec155[1] * (1 - iTemp244)) + (iTemp241 * iTemp244)); + int iTemp245 = int((0.5f * (fTemp3 * ((2.32830644e-10f * float(iRec31)) + 1.0f)))); + iRec158[0] = ((iVec0[1] * iRec158[1]) + (iTemp2 * iTemp245)); + int iTemp246 = ((iRec3[0] + iRec158[0]) % iTemp1); + float fTemp247 = (float(iTemp246) / fTemp70); + int iTemp248 = int(fTemp247); + iRec157[0] = ((iRec157[1] * (1 - iTemp248)) + (iTemp245 * iTemp248)); + int iTemp249 = int((0.5f * (fTemp3 * ((2.32830644e-10f * float(iRec33)) + 1.0f)))); + iRec160[0] = ((iVec0[1] * iRec160[1]) + (iTemp2 * iTemp249)); + int iTemp250 = ((iRec3[0] + iRec160[0]) % iTemp1); + float fTemp251 = (float(iTemp250) / fTemp70); + int iTemp252 = int(fTemp251); + iRec159[0] = ((iRec159[1] * (1 - iTemp252)) + (iTemp249 * iTemp252)); + int iTemp253 = int((0.5f * (fTemp3 * ((2.32830644e-10f * float(iRec35)) + 1.0f)))); + iRec162[0] = ((iVec0[1] * iRec162[1]) + (iTemp2 * iTemp253)); + int iTemp254 = ((iRec3[0] + iRec162[0]) % iTemp1); + float fTemp255 = (float(iTemp254) / fTemp70); + int iTemp256 = int(fTemp255); + iRec161[0] = ((iRec161[1] * (1 - iTemp256)) + (iTemp253 * iTemp256)); + int iTemp257 = int((0.5f * (fTemp3 * ((2.32830644e-10f * float(iRec37)) + 1.0f)))); + iRec164[0] = ((iVec0[1] * iRec164[1]) + (iTemp2 * iTemp257)); + int iTemp258 = ((iRec3[0] + iRec164[0]) % iTemp1); + float fTemp259 = (float(iTemp258) / fTemp70); + int iTemp260 = int(fTemp259); + iRec163[0] = ((iRec163[1] * (1 - iTemp260)) + (iTemp257 * iTemp260)); + int iTemp261 = int((0.5f * (fTemp3 * ((2.32830644e-10f * float(iRec39)) + 1.0f)))); + iRec166[0] = ((iVec0[1] * iRec166[1]) + (iTemp2 * iTemp261)); + int iTemp262 = ((iRec3[0] + iRec166[0]) % iTemp1); + float fTemp263 = (float(iTemp262) / fTemp70); + int iTemp264 = int(fTemp263); + iRec165[0] = ((iRec165[1] * (1 - iTemp264)) + (iTemp261 * iTemp264)); + int iTemp265 = int((0.5f * (fTemp3 * ((2.32830644e-10f * float(iRec41)) + 1.0f)))); + iRec168[0] = ((iVec0[1] * iRec168[1]) + (iTemp2 * iTemp265)); + int iTemp266 = ((iRec3[0] + iRec168[0]) % iTemp1); + float fTemp267 = (float(iTemp266) / fTemp70); + int iTemp268 = int(fTemp267); + iRec167[0] = ((iRec167[1] * (1 - iTemp268)) + (iTemp265 * iTemp268)); + int iTemp269 = int((0.5f * (fTemp3 * ((2.32830644e-10f * float(iRec43)) + 1.0f)))); + iRec170[0] = ((iVec0[1] * iRec170[1]) + (iTemp2 * iTemp269)); + int iTemp270 = ((iRec3[0] + iRec170[0]) % iTemp1); + float fTemp271 = (float(iTemp270) / fTemp70); + int iTemp272 = int(fTemp271); + iRec169[0] = ((iRec169[1] * (1 - iTemp272)) + (iTemp269 * iTemp272)); + int iTemp273 = int((0.5f * (fTemp3 * ((2.32830644e-10f * float(iRec45)) + 1.0f)))); + iRec172[0] = ((iVec0[1] * iRec172[1]) + (iTemp2 * iTemp273)); + int iTemp274 = ((iRec3[0] + iRec172[0]) % iTemp1); + float fTemp275 = (float(iTemp274) / fTemp70); + int iTemp276 = int(fTemp275); + iRec171[0] = ((iRec171[1] * (1 - iTemp276)) + (iTemp273 * iTemp276)); + int iTemp277 = int((0.5f * (fTemp3 * ((2.32830644e-10f * float(iRec47)) + 1.0f)))); + iRec174[0] = ((iVec0[1] * iRec174[1]) + (iTemp2 * iTemp277)); + int iTemp278 = ((iRec3[0] + iRec174[0]) % iTemp1); + float fTemp279 = (float(iTemp278) / fTemp70); + int iTemp280 = int(fTemp279); + iRec173[0] = ((iRec173[1] * (1 - iTemp280)) + (iTemp277 * iTemp280)); + int iTemp281 = int((0.5f * (fTemp3 * ((2.32830644e-10f * float(iRec49)) + 1.0f)))); + iRec176[0] = ((iVec0[1] * iRec176[1]) + (iTemp2 * iTemp281)); + int iTemp282 = ((iRec3[0] + iRec176[0]) % iTemp1); + float fTemp283 = (float(iTemp282) / fTemp70); + int iTemp284 = int(fTemp283); + iRec175[0] = ((iRec175[1] * (1 - iTemp284)) + (iTemp281 * iTemp284)); + int iTemp285 = int((0.5f * (fTemp3 * ((2.32830644e-10f * float(iRec51)) + 1.0f)))); + iRec178[0] = ((iVec0[1] * iRec178[1]) + (iTemp2 * iTemp285)); + int iTemp286 = ((iRec3[0] + iRec178[0]) % iTemp1); + float fTemp287 = (float(iTemp286) / fTemp70); + int iTemp288 = int(fTemp287); + iRec177[0] = ((iRec177[1] * (1 - iTemp288)) + (iTemp285 * iTemp288)); + int iTemp289 = int((0.5f * (fTemp3 * ((2.32830644e-10f * float(iRec53)) + 1.0f)))); + iRec180[0] = ((iVec0[1] * iRec180[1]) + (iTemp2 * iTemp289)); + int iTemp290 = ((iRec3[0] + iRec180[0]) % iTemp1); + float fTemp291 = (float(iTemp290) / fTemp70); + int iTemp292 = int(fTemp291); + iRec179[0] = ((iRec179[1] * (1 - iTemp292)) + (iTemp289 * iTemp292)); + int iTemp293 = int((0.5f * (fTemp3 * ((2.32830644e-10f * float(iRec55)) + 1.0f)))); + iRec182[0] = ((iVec0[1] * iRec182[1]) + (iTemp2 * iTemp293)); + int iTemp294 = ((iRec3[0] + iRec182[0]) % iTemp1); + float fTemp295 = (float(iTemp294) / fTemp70); + int iTemp296 = int(fTemp295); + iRec181[0] = ((iRec181[1] * (1 - iTemp296)) + (iTemp293 * iTemp296)); + int iTemp297 = int((0.5f * (fTemp3 * ((2.32830644e-10f * float(iRec57)) + 1.0f)))); + iRec184[0] = ((iVec0[1] * iRec184[1]) + (iTemp2 * iTemp297)); + int iTemp298 = ((iRec3[0] + iRec184[0]) % iTemp1); + float fTemp299 = (float(iTemp298) / fTemp70); + int iTemp300 = int(fTemp299); + iRec183[0] = ((iRec183[1] * (1 - iTemp300)) + (iTemp297 * iTemp300)); + int iTemp301 = int((0.5f * (fTemp3 * ((2.32830644e-10f * float(iRec59)) + 1.0f)))); + iRec186[0] = ((iVec0[1] * iRec186[1]) + (iTemp2 * iTemp301)); + int iTemp302 = ((iRec3[0] + iRec186[0]) % iTemp1); + float fTemp303 = (float(iTemp302) / fTemp70); + int iTemp304 = int(fTemp303); + iRec185[0] = ((iRec185[1] * (1 - iTemp304)) + (iTemp301 * iTemp304)); + int iTemp305 = int((0.5f * (fTemp3 * ((2.32830644e-10f * float(iRec61)) + 1.0f)))); + iRec188[0] = ((iVec0[1] * iRec188[1]) + (iTemp2 * iTemp305)); + int iTemp306 = ((iRec3[0] + iRec188[0]) % iTemp1); + float fTemp307 = (float(iTemp306) / fTemp70); + int iTemp308 = int(fTemp307); + iRec187[0] = ((iRec187[1] * (1 - iTemp308)) + (iTemp305 * iTemp308)); + int iTemp309 = int((0.5f * (fTemp3 * ((2.32830644e-10f * float(iRec63)) + 1.0f)))); + iRec190[0] = ((iVec0[1] * iRec190[1]) + (iTemp2 * iTemp309)); + int iTemp310 = ((iRec3[0] + iRec190[0]) % iTemp1); + float fTemp311 = (float(iTemp310) / fTemp70); + int iTemp312 = int(fTemp311); + iRec189[0] = ((iRec189[1] * (1 - iTemp312)) + (iTemp309 * iTemp312)); + int iTemp313 = int((0.5f * (fTemp3 * ((2.32830644e-10f * float(iRec65)) + 1.0f)))); + iRec192[0] = ((iVec0[1] * iRec192[1]) + (iTemp2 * iTemp313)); + int iTemp314 = ((iRec3[0] + iRec192[0]) % iTemp1); + float fTemp315 = (float(iTemp314) / fTemp70); + int iTemp316 = int(fTemp315); + iRec191[0] = ((iRec191[1] * (1 - iTemp316)) + (iTemp313 * iTemp316)); + int iTemp317 = int((0.5f * (fTemp3 * ((2.32830644e-10f * float(iRec67)) + 1.0f)))); + iRec194[0] = ((iVec0[1] * iRec194[1]) + (iTemp2 * iTemp317)); + int iTemp318 = ((iRec3[0] + iRec194[0]) % iTemp1); + float fTemp319 = (float(iTemp318) / fTemp70); + int iTemp320 = int(fTemp319); + iRec193[0] = ((iRec193[1] * (1 - iTemp320)) + (iTemp317 * iTemp320)); + int iTemp321 = int((0.5f * (fTemp3 * ((2.32830644e-10f * float(iRec69)) + 1.0f)))); + iRec196[0] = ((iVec0[1] * iRec196[1]) + (iTemp2 * iTemp321)); + int iTemp322 = ((iRec3[0] + iRec196[0]) % iTemp1); + float fTemp323 = (float(iTemp322) / fTemp70); + int iTemp324 = int(fTemp323); + iRec195[0] = ((iRec195[1] * (1 - iTemp324)) + (iTemp321 * iTemp324)); + output1[i] = FAUSTFLOAT((fSlow1 * ((((((((((((((((((((((((((((((((fSlow36 * (ftbl0[((iRec133[0] + iTemp198) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp199))])) + (fSlow37 * (ftbl0[((iRec135[0] + iTemp202) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp203))]))) + (fSlow38 * (ftbl0[((iRec137[0] + iTemp206) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp207))]))) + (fSlow39 * (ftbl0[((iRec139[0] + iTemp210) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp211))]))) + (fSlow40 * (ftbl0[((iRec141[0] + iTemp214) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp215))]))) + (fSlow41 * (ftbl0[((iRec143[0] + iTemp218) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp219))]))) + (fSlow42 * (ftbl0[((iRec145[0] + iTemp222) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp223))]))) + (fSlow43 * (ftbl0[((iRec147[0] + iTemp226) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp227))]))) + (fSlow44 * (ftbl0[((iRec149[0] + iTemp230) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp231))]))) + (fSlow45 * (ftbl0[((iRec151[0] + iTemp234) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp235))]))) + (fSlow46 * (ftbl0[((iRec153[0] + iTemp238) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp239))]))) + (fSlow47 * (ftbl0[((iRec155[0] + iTemp242) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp243))]))) + (fSlow48 * (ftbl0[((iRec157[0] + iTemp246) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp247))]))) + (fSlow49 * (ftbl0[((iRec159[0] + iTemp250) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp251))]))) + (fSlow50 * (ftbl0[((iRec161[0] + iTemp254) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp255))]))) + (fSlow51 * (ftbl0[((iRec163[0] + iTemp258) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp259))]))) + (fSlow52 * (ftbl0[((iRec165[0] + iTemp262) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp263))]))) + (fSlow53 * (ftbl0[((iRec167[0] + iTemp266) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp267))]))) + (fSlow54 * (ftbl0[((iRec169[0] + iTemp270) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp271))]))) + (fSlow55 * (ftbl0[((iRec171[0] + iTemp274) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp275))]))) + (fSlow56 * (ftbl0[((iRec173[0] + iTemp278) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp279))]))) + (fSlow57 * (ftbl0[((iRec175[0] + iTemp282) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp283))]))) + (fSlow58 * (ftbl0[((iRec177[0] + iTemp286) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp287))]))) + (fSlow59 * (ftbl0[((iRec179[0] + iTemp290) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp291))]))) + (fSlow60 * (ftbl0[((iRec181[0] + iTemp294) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp295))]))) + (fSlow61 * (ftbl0[((iRec183[0] + iTemp298) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp299))]))) + (fSlow62 * (ftbl0[((iRec185[0] + iTemp302) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp303))]))) + (fSlow63 * (ftbl0[((iRec187[0] + iTemp306) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp307))]))) + (fSlow64 * (ftbl0[((iRec189[0] + iTemp310) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp311))]))) + (fSlow65 * (ftbl0[((iRec191[0] + iTemp314) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp315))]))) + (fSlow66 * (ftbl0[((iRec193[0] + iTemp318) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp319))]))) + (fSlow67 * (ftbl0[((iRec195[0] + iTemp322) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp323))]))))); iVec0[1] = iVec0[0]; fRec1[1] = fRec1[0]; iRec0[1] = iRec0[0]; - fRec3[1] = fRec3[0]; - iRec2[1] = iRec2[0]; + fRec4[1] = fRec4[0]; + iRec3[1] = iRec3[0]; + iRec6[1] = iRec6[0]; iRec5[1] = iRec5[0]; - iRec4[1] = iRec4[0]; - iRec69[1] = iRec69[0]; - iRec71[1] = iRec71[0]; + iRec2[1] = iRec2[0]; iRec72[1] = iRec72[0]; - iRec73[1] = iRec73[0]; + iRec71[1] = iRec71[0]; iRec74[1] = iRec74[0]; - iRec75[1] = iRec75[0]; + iRec73[1] = iRec73[0]; iRec76[1] = iRec76[0]; - iRec77[1] = iRec77[0]; + iRec75[1] = iRec75[0]; iRec78[1] = iRec78[0]; - iRec79[1] = iRec79[0]; + iRec77[1] = iRec77[0]; iRec80[1] = iRec80[0]; - iRec81[1] = iRec81[0]; + iRec79[1] = iRec79[0]; iRec82[1] = iRec82[0]; - iRec83[1] = iRec83[0]; + iRec81[1] = iRec81[0]; iRec84[1] = iRec84[0]; - iRec85[1] = iRec85[0]; + iRec83[1] = iRec83[0]; iRec86[1] = iRec86[0]; - iRec87[1] = iRec87[0]; + iRec85[1] = iRec85[0]; iRec88[1] = iRec88[0]; - iRec89[1] = iRec89[0]; + iRec87[1] = iRec87[0]; iRec90[1] = iRec90[0]; - iRec91[1] = iRec91[0]; + iRec89[1] = iRec89[0]; iRec92[1] = iRec92[0]; - iRec93[1] = iRec93[0]; + iRec91[1] = iRec91[0]; iRec94[1] = iRec94[0]; - iRec95[1] = iRec95[0]; + iRec93[1] = iRec93[0]; iRec96[1] = iRec96[0]; - iRec97[1] = iRec97[0]; + iRec95[1] = iRec95[0]; iRec98[1] = iRec98[0]; - iRec99[1] = iRec99[0]; + iRec97[1] = iRec97[0]; iRec100[1] = iRec100[0]; - iRec101[1] = iRec101[0]; + iRec99[1] = iRec99[0]; iRec102[1] = iRec102[0]; - iRec103[1] = iRec103[0]; + iRec101[1] = iRec101[0]; iRec104[1] = iRec104[0]; - iRec105[1] = iRec105[0]; + iRec103[1] = iRec103[0]; iRec106[1] = iRec106[0]; - iRec107[1] = iRec107[0]; + iRec105[1] = iRec105[0]; iRec108[1] = iRec108[0]; - iRec109[1] = iRec109[0]; + iRec107[1] = iRec107[0]; iRec110[1] = iRec110[0]; - iRec111[1] = iRec111[0]; + iRec109[1] = iRec109[0]; iRec112[1] = iRec112[0]; - iRec113[1] = iRec113[0]; + iRec111[1] = iRec111[0]; iRec114[1] = iRec114[0]; - iRec115[1] = iRec115[0]; + iRec113[1] = iRec113[0]; iRec116[1] = iRec116[0]; - iRec117[1] = iRec117[0]; + iRec115[1] = iRec115[0]; iRec118[1] = iRec118[0]; - iRec119[1] = iRec119[0]; + iRec117[1] = iRec117[0]; iRec120[1] = iRec120[0]; - iRec121[1] = iRec121[0]; + iRec119[1] = iRec119[0]; iRec122[1] = iRec122[0]; - iRec123[1] = iRec123[0]; + iRec121[1] = iRec121[0]; iRec124[1] = iRec124[0]; - iRec125[1] = iRec125[0]; + iRec123[1] = iRec123[0]; iRec126[1] = iRec126[0]; - iRec127[1] = iRec127[0]; + iRec125[1] = iRec125[0]; iRec128[1] = iRec128[0]; - iRec129[1] = iRec129[0]; + iRec127[1] = iRec127[0]; iRec130[1] = iRec130[0]; - iRec131[1] = iRec131[0]; + iRec129[1] = iRec129[0]; iRec132[1] = iRec132[0]; + iRec131[1] = iRec131[0]; iRec134[1] = iRec134[0]; iRec133[1] = iRec133[0]; - iRec135[1] = iRec135[0]; iRec136[1] = iRec136[0]; - iRec137[1] = iRec137[0]; + iRec135[1] = iRec135[0]; iRec138[1] = iRec138[0]; + iRec137[1] = iRec137[0]; iRec140[1] = iRec140[0]; iRec139[1] = iRec139[0]; iRec142[1] = iRec142[0]; @@ -2073,46 +1965,46 @@ class fx_granulator : public dsp { iRec143[1] = iRec143[0]; iRec146[1] = iRec146[0]; iRec145[1] = iRec145[0]; - iRec147[1] = iRec147[0]; iRec148[1] = iRec148[0]; + iRec147[1] = iRec147[0]; iRec150[1] = iRec150[0]; iRec149[1] = iRec149[0]; iRec152[1] = iRec152[0]; iRec151[1] = iRec151[0]; iRec154[1] = iRec154[0]; iRec153[1] = iRec153[0]; - iRec155[1] = iRec155[0]; iRec156[1] = iRec156[0]; - iRec157[1] = iRec157[0]; + iRec155[1] = iRec155[0]; iRec158[1] = iRec158[0]; - iRec159[1] = iRec159[0]; + iRec157[1] = iRec157[0]; iRec160[1] = iRec160[0]; - iRec161[1] = iRec161[0]; + iRec159[1] = iRec159[0]; iRec162[1] = iRec162[0]; - iRec163[1] = iRec163[0]; + iRec161[1] = iRec161[0]; iRec164[1] = iRec164[0]; - iRec165[1] = iRec165[0]; + iRec163[1] = iRec163[0]; iRec166[1] = iRec166[0]; - iRec167[1] = iRec167[0]; + iRec165[1] = iRec165[0]; iRec168[1] = iRec168[0]; - iRec169[1] = iRec169[0]; + iRec167[1] = iRec167[0]; iRec170[1] = iRec170[0]; - iRec171[1] = iRec171[0]; + iRec169[1] = iRec169[0]; iRec172[1] = iRec172[0]; - iRec173[1] = iRec173[0]; + iRec171[1] = iRec171[0]; iRec174[1] = iRec174[0]; - iRec175[1] = iRec175[0]; + iRec173[1] = iRec173[0]; iRec176[1] = iRec176[0]; - iRec177[1] = iRec177[0]; + iRec175[1] = iRec175[0]; iRec178[1] = iRec178[0]; - iRec179[1] = iRec179[0]; + iRec177[1] = iRec177[0]; iRec180[1] = iRec180[0]; - iRec181[1] = iRec181[0]; + iRec179[1] = iRec179[0]; iRec182[1] = iRec182[0]; - iRec183[1] = iRec183[0]; + iRec181[1] = iRec181[0]; iRec184[1] = iRec184[0]; - iRec185[1] = iRec185[0]; + iRec183[1] = iRec183[0]; iRec186[1] = iRec186[0]; + iRec185[1] = iRec185[0]; iRec188[1] = iRec188[0]; iRec187[1] = iRec187[0]; iRec190[1] = iRec190[0]; @@ -2121,14 +2013,11 @@ class fx_granulator : public dsp { iRec191[1] = iRec191[0]; iRec194[1] = iRec194[0]; iRec193[1] = iRec193[0]; - iRec195[1] = iRec195[0]; iRec196[1] = iRec196[0]; - + iRec195[1] = iRec195[0]; } - } - }; // clang-format on #endif diff --git a/ceammc/ext/src/fx/fx_greyhole.h b/ceammc/ext/src/fx/fx_greyhole.h index 1f9618f96f..fc73be2ae9 100644 --- a/ceammc/ext/src/fx/fx_greyhole.h +++ b/ceammc/ext/src/fx/fx_greyhole.h @@ -4,8 +4,8 @@ copyright: "(c) Julian Parker 2013" license: "GPL2+" name: "fx.greyhole" version: "1.0" -Code generated with Faust 2.15.0 (https://faust.grame.fr) -Compilation options: cpp, -scal -ftz 0 +Code generated with Faust 2.22.1 (https://faust.grame.fr) +Compilation options: -lang cpp -scal -ftz 0 ------------------------------------------------------------ */ #ifndef __fx_greyhole_H__ @@ -18,6 +18,7 @@ Compilation options: cpp, -scal -ftz 0 #include #include +/************************** BEGIN dsp.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -100,23 +101,23 @@ class dsp { * - static class 'classInit': static tables initialization * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void init(int samplingRate) = 0; + virtual void init(int sample_rate) = 0; /** * Init instance state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceInit(int samplingRate) = 0; + virtual void instanceInit(int sample_rate) = 0; /** * Init instance constant state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceConstants(int samplingRate) = 0; + virtual void instanceConstants(int sample_rate) = 0; /* Init default control parameters values */ virtual void instanceResetUserInterface() = 0; @@ -153,8 +154,8 @@ class dsp { * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the number of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) * */ virtual void compute(double /*date_usec*/, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -173,16 +174,16 @@ class decorator_dsp : public dsp { public: - decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + decorator_dsp(dsp* dsp = nullptr):fDSP(dsp) {} virtual ~decorator_dsp() { delete fDSP; } virtual int getNumInputs() { return fDSP->getNumInputs(); } virtual int getNumOutputs() { return fDSP->getNumOutputs(); } virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } virtual int getSampleRate() { return fDSP->getSampleRate(); } - virtual void init(int samplingRate) { fDSP->init(samplingRate); } - virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } - virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void init(int sample_rate) { fDSP->init(sample_rate); } + virtual void instanceInit(int sample_rate) { fDSP->instanceInit(sample_rate); } + virtual void instanceConstants(int sample_rate) { fDSP->instanceConstants(sample_rate); } virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } @@ -237,6 +238,8 @@ class dsp_factory { #endif #endif +/************************** END dsp.h **************************/ +/************************** BEGIN UI.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -276,45 +279,54 @@ class dsp_factory { struct Soundfile; -class UI +template +class UIReal { - + public: - - UI() {} - - virtual ~UI() {} - + + UIReal() {} + virtual ~UIReal() {} + // -- widget's layouts - + virtual void openTabBox(const char* label) = 0; virtual void openHorizontalBox(const char* label) = 0; virtual void openVerticalBox(const char* label) = 0; virtual void closeBox() = 0; - + // -- active widgets - - virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - + + virtual void addButton(const char* label, REAL* zone) = 0; + virtual void addCheckButton(const char* label, REAL* zone) = 0; + virtual void addVerticalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addHorizontalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addNumEntry(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + // -- passive widgets - - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - + + virtual void addHorizontalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + virtual void addVerticalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + // -- soundfiles - + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; - + // -- metadata declarations + + virtual void declare(REAL* zone, const char* key, const char* val) {} +}; - virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +struct UI : public UIReal +{ + + UI() {} + virtual ~UI() {} }; #endif +/************************** END UI.h **************************/ +/************************** BEGIN meta.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -343,11 +355,14 @@ class UI struct Meta { - virtual void declare(const char* key, const char* value) = 0; virtual ~Meta() {}; + virtual void declare(const char* key, const char* value) = 0; + }; #endif +/************************** END meta.h **************************/ +/************************** BEGIN misc.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -370,7 +385,7 @@ struct Meta that work under terms of your choice, so long as this FAUST architecture section is not modified. ************************************************************************/ - + #ifndef __misc__ #define __misc__ @@ -378,6 +393,8 @@ struct Meta #include #include #include +#include +#include using std::max; @@ -399,27 +416,65 @@ static int int2pow2(int x) { int r = 0; while ((1<declare("author", "Julian Parker, bug fixes by Till Bovermann"); m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.0"); + m->declare("basics.lib/version", "0.1"); m->declare("ceammc.lib/name", "Ceammc PureData misc utils"); m->declare("ceammc.lib/version", "0.1.1"); m->declare("ceammc_ui.lib/name", "CEAMMC faust default UI elements"); m->declare("ceammc_ui.lib/version", "0.1.1"); m->declare("copyright", "(c) Julian Parker 2013"); m->declare("delays.lib/name", "Faust Delay Library"); - m->declare("delays.lib/version", "0.0"); - m->declare("filename", "fx_greyhole"); + m->declare("delays.lib/version", "0.1"); + m->declare("filename", "fx_greyhole.dsp"); + m->declare("filters.lib/lowpass0_highpass1", "Copyright (C) 2003-2019 by Julius O. Smith III "); m->declare("filters.lib/name", "Faust Filters Library"); - m->declare("filters.lib/version", "0.0"); + m->declare("filters.lib/nlf2:author", "Julius O. Smith III"); + m->declare("filters.lib/nlf2:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/nlf2:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/tf1:author", "Julius O. Smith III"); + m->declare("filters.lib/tf1:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/tf1:license", "MIT-style STK-4.3 license"); m->declare("license", "GPL2+"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); @@ -645,7 +707,7 @@ class fx_greyhole : public dsp { m->declare("oscillators.lib/name", "Faust Oscillator Library"); m->declare("oscillators.lib/version", "0.0"); m->declare("routes.lib/name", "Faust Signal Routing Library"); - m->declare("routes.lib/version", "0.0"); + m->declare("routes.lib/version", "0.1"); m->declare("signals.lib/name", "Faust Signal Routing Library"); m->declare("signals.lib/version", "0.0"); m->declare("version", "1.0"); @@ -653,15 +715,13 @@ class fx_greyhole : public dsp { virtual int getNumInputs() { return 2; - } virtual int getNumOutputs() { return 2; - } virtual int getInputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -674,14 +734,12 @@ class fx_greyhole : public dsp { rate = -1; break; } - } return rate; - } virtual int getOutputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -694,22 +752,18 @@ class fx_greyhole : public dsp { rate = -1; break; } - } return rate; - } - static void classInit(int samplingFreq) { - + static void classInit(int sample_rate) { } - virtual void instanceConstants(int samplingFreq) { - fSamplingFreq = samplingFreq; - fConst0 = std::min(192000.0f, std::max(1.0f, float(fSamplingFreq))); + virtual void instanceConstants(int sample_rate) { + fSampleRate = sample_rate; + fConst0 = std::min(192000.0f, std::max(1.0f, float(fSampleRate))); fConst1 = (0.000566893432f * fConst0); fConst2 = (3.14159274f / fConst0); - } virtual void instanceResetUserInterface() { @@ -717,581 +771,440 @@ class fx_greyhole : public dsp { fHslider0 = FAUSTFLOAT(1.0f); fHslider1 = FAUSTFLOAT(0.0f); fHslider2 = FAUSTFLOAT(0.5f); - fHslider3 = FAUSTFLOAT(0.20000000000000001f); - fHslider4 = FAUSTFLOAT(0.10000000000000001f); - fHslider5 = FAUSTFLOAT(2.0f); - fHslider6 = FAUSTFLOAT(0.90000000000000002f); + fHslider3 = FAUSTFLOAT(0.90000000000000002f); + fHslider4 = FAUSTFLOAT(0.20000000000000001f); + fHslider5 = FAUSTFLOAT(0.10000000000000001f); + fHslider6 = FAUSTFLOAT(2.0f); fHslider7 = FAUSTFLOAT(1.0f); - } virtual void instanceClear() { for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { iVec0[l0] = 0; - } for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { fRec0[l1] = 0.0f; - } for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { fVec1[l2] = 0.0f; - } for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { fVec2[l3] = 0.0f; - } for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { - fRec4[l4] = 0.0f; - + fVec3[l4] = 0.0f; } for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { - fRec5[l5] = 0.0f; - + fRec40[l5] = 0.0f; } for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { - fRec6[l6] = 0.0f; - + fRec41[l6] = 0.0f; } for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) { - fRec7[l7] = 0.0f; - + fRec42[l7] = 0.0f; } for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { - fVec3[l8] = 0.0f; - + fRec43[l8] = 0.0f; } for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { fVec4[l9] = 0.0f; - } for (int l10 = 0; (l10 < 2); l10 = (l10 + 1)) { - fRec8[l10] = 0.0f; - + fVec5[l10] = 0.0f; } for (int l11 = 0; (l11 < 2); l11 = (l11 + 1)) { - fRec9[l11] = 0.0f; - + fRec44[l11] = 0.0f; } - IOTA = 0; - for (int l12 = 0; (l12 < 131072); l12 = (l12 + 1)) { - fVec5[l12] = 0.0f; - + for (int l12 = 0; (l12 < 2); l12 = (l12 + 1)) { + fRec45[l12] = 0.0f; } - for (int l13 = 0; (l13 < 2); l13 = (l13 + 1)) { + IOTA = 0; + for (int l13 = 0; (l13 < 131072); l13 = (l13 + 1)) { fVec6[l13] = 0.0f; - } - for (int l14 = 0; (l14 < 131072); l14 = (l14 + 1)) { + for (int l14 = 0; (l14 < 16384); l14 = (l14 + 1)) { fVec7[l14] = 0.0f; - } - for (int l15 = 0; (l15 < 16384); l15 = (l15 + 1)) { - fVec8[l15] = 0.0f; - + for (int l15 = 0; (l15 < 2); l15 = (l15 + 1)) { + fRec46[l15] = 0.0f; } for (int l16 = 0; (l16 < 2); l16 = (l16 + 1)) { - fRec22[l16] = 0.0f; - + fVec8[l16] = 0.0f; } for (int l17 = 0; (l17 < 2); l17 = (l17 + 1)) { - fVec9[l17] = 0.0f; - + fRec39[l17] = 0.0f; } for (int l18 = 0; (l18 < 2); l18 = (l18 + 1)) { - fRec21[l18] = 0.0f; - + fRec37[l18] = 0.0f; } - for (int l19 = 0; (l19 < 2); l19 = (l19 + 1)) { - fRec19[l19] = 0.0f; - + for (int l19 = 0; (l19 < 131072); l19 = (l19 + 1)) { + fVec9[l19] = 0.0f; } for (int l20 = 0; (l20 < 16384); l20 = (l20 + 1)) { fVec10[l20] = 0.0f; - } for (int l21 = 0; (l21 < 2); l21 = (l21 + 1)) { - fRec24[l21] = 0.0f; - + fRec48[l21] = 0.0f; } for (int l22 = 0; (l22 < 2); l22 = (l22 + 1)) { fVec11[l22] = 0.0f; - } for (int l23 = 0; (l23 < 2); l23 = (l23 + 1)) { - fRec23[l23] = 0.0f; - + fRec47[l23] = 0.0f; } for (int l24 = 0; (l24 < 2); l24 = (l24 + 1)) { - fRec20[l24] = 0.0f; - + fRec38[l24] = 0.0f; } for (int l25 = 0; (l25 < 16384); l25 = (l25 + 1)) { fVec12[l25] = 0.0f; - } for (int l26 = 0; (l26 < 2); l26 = (l26 + 1)) { - fRec25[l26] = 0.0f; - + fRec49[l26] = 0.0f; } for (int l27 = 0; (l27 < 2); l27 = (l27 + 1)) { fVec13[l27] = 0.0f; - } for (int l28 = 0; (l28 < 2); l28 = (l28 + 1)) { - fRec18[l28] = 0.0f; - + fRec36[l28] = 0.0f; } for (int l29 = 0; (l29 < 2); l29 = (l29 + 1)) { - fRec16[l29] = 0.0f; - + fRec34[l29] = 0.0f; } for (int l30 = 0; (l30 < 16384); l30 = (l30 + 1)) { fVec14[l30] = 0.0f; - } for (int l31 = 0; (l31 < 2); l31 = (l31 + 1)) { - fRec27[l31] = 0.0f; - + fRec51[l31] = 0.0f; } for (int l32 = 0; (l32 < 2); l32 = (l32 + 1)) { fVec15[l32] = 0.0f; - } for (int l33 = 0; (l33 < 2); l33 = (l33 + 1)) { - fRec26[l33] = 0.0f; - + fRec50[l33] = 0.0f; } for (int l34 = 0; (l34 < 2); l34 = (l34 + 1)) { - fRec17[l34] = 0.0f; - + fRec35[l34] = 0.0f; } for (int l35 = 0; (l35 < 16384); l35 = (l35 + 1)) { fVec16[l35] = 0.0f; - } for (int l36 = 0; (l36 < 2); l36 = (l36 + 1)) { - fRec28[l36] = 0.0f; - + fRec52[l36] = 0.0f; } for (int l37 = 0; (l37 < 2); l37 = (l37 + 1)) { fVec17[l37] = 0.0f; - } for (int l38 = 0; (l38 < 2); l38 = (l38 + 1)) { - fRec15[l38] = 0.0f; - + fRec33[l38] = 0.0f; } for (int l39 = 0; (l39 < 2); l39 = (l39 + 1)) { - fRec13[l39] = 0.0f; - + fRec31[l39] = 0.0f; } for (int l40 = 0; (l40 < 16384); l40 = (l40 + 1)) { fVec18[l40] = 0.0f; - } for (int l41 = 0; (l41 < 2); l41 = (l41 + 1)) { - fRec30[l41] = 0.0f; - + fRec54[l41] = 0.0f; } for (int l42 = 0; (l42 < 2); l42 = (l42 + 1)) { fVec19[l42] = 0.0f; - } for (int l43 = 0; (l43 < 2); l43 = (l43 + 1)) { - fRec29[l43] = 0.0f; - + fRec53[l43] = 0.0f; } for (int l44 = 0; (l44 < 2); l44 = (l44 + 1)) { - fRec14[l44] = 0.0f; - + fRec32[l44] = 0.0f; } for (int l45 = 0; (l45 < 16384); l45 = (l45 + 1)) { fVec20[l45] = 0.0f; - } for (int l46 = 0; (l46 < 2); l46 = (l46 + 1)) { - fRec31[l46] = 0.0f; - + fRec55[l46] = 0.0f; } for (int l47 = 0; (l47 < 2); l47 = (l47 + 1)) { fVec21[l47] = 0.0f; - } for (int l48 = 0; (l48 < 2); l48 = (l48 + 1)) { - fRec12[l48] = 0.0f; - + fRec30[l48] = 0.0f; } for (int l49 = 0; (l49 < 2); l49 = (l49 + 1)) { - fRec10[l49] = 0.0f; - + fRec28[l49] = 0.0f; } for (int l50 = 0; (l50 < 16384); l50 = (l50 + 1)) { fVec22[l50] = 0.0f; - } for (int l51 = 0; (l51 < 2); l51 = (l51 + 1)) { - fRec33[l51] = 0.0f; - + fRec57[l51] = 0.0f; } for (int l52 = 0; (l52 < 2); l52 = (l52 + 1)) { fVec23[l52] = 0.0f; - } for (int l53 = 0; (l53 < 2); l53 = (l53 + 1)) { - fRec32[l53] = 0.0f; - + fRec56[l53] = 0.0f; } for (int l54 = 0; (l54 < 2); l54 = (l54 + 1)) { - fRec11[l54] = 0.0f; - + fRec29[l54] = 0.0f; } for (int l55 = 0; (l55 < 16384); l55 = (l55 + 1)) { fVec24[l55] = 0.0f; - } for (int l56 = 0; (l56 < 2); l56 = (l56 + 1)) { - fRec46[l56] = 0.0f; - + fRec58[l56] = 0.0f; } for (int l57 = 0; (l57 < 2); l57 = (l57 + 1)) { fVec25[l57] = 0.0f; - } for (int l58 = 0; (l58 < 2); l58 = (l58 + 1)) { - fRec45[l58] = 0.0f; - + fRec27[l58] = 0.0f; } for (int l59 = 0; (l59 < 2); l59 = (l59 + 1)) { - fRec43[l59] = 0.0f; - + fRec25[l59] = 0.0f; } for (int l60 = 0; (l60 < 16384); l60 = (l60 + 1)) { fVec26[l60] = 0.0f; - } for (int l61 = 0; (l61 < 2); l61 = (l61 + 1)) { - fRec48[l61] = 0.0f; - + fRec60[l61] = 0.0f; } for (int l62 = 0; (l62 < 2); l62 = (l62 + 1)) { fVec27[l62] = 0.0f; - } for (int l63 = 0; (l63 < 2); l63 = (l63 + 1)) { - fRec47[l63] = 0.0f; - + fRec59[l63] = 0.0f; } for (int l64 = 0; (l64 < 2); l64 = (l64 + 1)) { - fRec44[l64] = 0.0f; - + fRec26[l64] = 0.0f; } for (int l65 = 0; (l65 < 16384); l65 = (l65 + 1)) { fVec28[l65] = 0.0f; - } for (int l66 = 0; (l66 < 2); l66 = (l66 + 1)) { - fRec49[l66] = 0.0f; - + fRec61[l66] = 0.0f; } for (int l67 = 0; (l67 < 2); l67 = (l67 + 1)) { fVec29[l67] = 0.0f; - } for (int l68 = 0; (l68 < 2); l68 = (l68 + 1)) { - fRec42[l68] = 0.0f; - + fRec24[l68] = 0.0f; } for (int l69 = 0; (l69 < 2); l69 = (l69 + 1)) { - fRec40[l69] = 0.0f; - + fRec22[l69] = 0.0f; } for (int l70 = 0; (l70 < 16384); l70 = (l70 + 1)) { fVec30[l70] = 0.0f; - } for (int l71 = 0; (l71 < 2); l71 = (l71 + 1)) { - fRec51[l71] = 0.0f; - + fRec63[l71] = 0.0f; } for (int l72 = 0; (l72 < 2); l72 = (l72 + 1)) { fVec31[l72] = 0.0f; - } for (int l73 = 0; (l73 < 2); l73 = (l73 + 1)) { - fRec50[l73] = 0.0f; - + fRec62[l73] = 0.0f; } for (int l74 = 0; (l74 < 2); l74 = (l74 + 1)) { - fRec41[l74] = 0.0f; - + fRec23[l74] = 0.0f; } for (int l75 = 0; (l75 < 16384); l75 = (l75 + 1)) { fVec32[l75] = 0.0f; - } for (int l76 = 0; (l76 < 2); l76 = (l76 + 1)) { - fRec52[l76] = 0.0f; - + fRec64[l76] = 0.0f; } for (int l77 = 0; (l77 < 2); l77 = (l77 + 1)) { fVec33[l77] = 0.0f; - } for (int l78 = 0; (l78 < 2); l78 = (l78 + 1)) { - fRec39[l78] = 0.0f; - + fRec21[l78] = 0.0f; } for (int l79 = 0; (l79 < 2); l79 = (l79 + 1)) { - fRec37[l79] = 0.0f; - + fRec19[l79] = 0.0f; } for (int l80 = 0; (l80 < 16384); l80 = (l80 + 1)) { fVec34[l80] = 0.0f; - } for (int l81 = 0; (l81 < 2); l81 = (l81 + 1)) { - fRec54[l81] = 0.0f; - + fRec66[l81] = 0.0f; } for (int l82 = 0; (l82 < 2); l82 = (l82 + 1)) { fVec35[l82] = 0.0f; - } for (int l83 = 0; (l83 < 2); l83 = (l83 + 1)) { - fRec53[l83] = 0.0f; - + fRec65[l83] = 0.0f; } for (int l84 = 0; (l84 < 2); l84 = (l84 + 1)) { - fRec38[l84] = 0.0f; - + fRec20[l84] = 0.0f; } for (int l85 = 0; (l85 < 16384); l85 = (l85 + 1)) { fVec36[l85] = 0.0f; - } for (int l86 = 0; (l86 < 2); l86 = (l86 + 1)) { - fRec55[l86] = 0.0f; - + fRec67[l86] = 0.0f; } for (int l87 = 0; (l87 < 2); l87 = (l87 + 1)) { fVec37[l87] = 0.0f; - } for (int l88 = 0; (l88 < 2); l88 = (l88 + 1)) { - fRec36[l88] = 0.0f; - + fRec18[l88] = 0.0f; } for (int l89 = 0; (l89 < 2); l89 = (l89 + 1)) { - fRec34[l89] = 0.0f; - + fRec16[l89] = 0.0f; } for (int l90 = 0; (l90 < 16384); l90 = (l90 + 1)) { fVec38[l90] = 0.0f; - } for (int l91 = 0; (l91 < 2); l91 = (l91 + 1)) { - fRec57[l91] = 0.0f; - + fRec69[l91] = 0.0f; } for (int l92 = 0; (l92 < 2); l92 = (l92 + 1)) { fVec39[l92] = 0.0f; - } for (int l93 = 0; (l93 < 2); l93 = (l93 + 1)) { - fRec56[l93] = 0.0f; - + fRec68[l93] = 0.0f; } for (int l94 = 0; (l94 < 2); l94 = (l94 + 1)) { - fRec35[l94] = 0.0f; - + fRec17[l94] = 0.0f; } for (int l95 = 0; (l95 < 16384); l95 = (l95 + 1)) { fVec40[l95] = 0.0f; - } for (int l96 = 0; (l96 < 2); l96 = (l96 + 1)) { fRec70[l96] = 0.0f; - } for (int l97 = 0; (l97 < 2); l97 = (l97 + 1)) { fVec41[l97] = 0.0f; - } for (int l98 = 0; (l98 < 2); l98 = (l98 + 1)) { - fRec69[l98] = 0.0f; - + fRec15[l98] = 0.0f; } for (int l99 = 0; (l99 < 2); l99 = (l99 + 1)) { - fRec67[l99] = 0.0f; - + fRec13[l99] = 0.0f; } for (int l100 = 0; (l100 < 16384); l100 = (l100 + 1)) { fVec42[l100] = 0.0f; - } for (int l101 = 0; (l101 < 2); l101 = (l101 + 1)) { fRec72[l101] = 0.0f; - } for (int l102 = 0; (l102 < 2); l102 = (l102 + 1)) { fVec43[l102] = 0.0f; - } for (int l103 = 0; (l103 < 2); l103 = (l103 + 1)) { fRec71[l103] = 0.0f; - } for (int l104 = 0; (l104 < 2); l104 = (l104 + 1)) { - fRec68[l104] = 0.0f; - + fRec14[l104] = 0.0f; } for (int l105 = 0; (l105 < 16384); l105 = (l105 + 1)) { fVec44[l105] = 0.0f; - } for (int l106 = 0; (l106 < 2); l106 = (l106 + 1)) { fRec73[l106] = 0.0f; - } for (int l107 = 0; (l107 < 2); l107 = (l107 + 1)) { fVec45[l107] = 0.0f; - } for (int l108 = 0; (l108 < 2); l108 = (l108 + 1)) { - fRec66[l108] = 0.0f; - + fRec12[l108] = 0.0f; } for (int l109 = 0; (l109 < 2); l109 = (l109 + 1)) { - fRec64[l109] = 0.0f; - + fRec10[l109] = 0.0f; } for (int l110 = 0; (l110 < 16384); l110 = (l110 + 1)) { fVec46[l110] = 0.0f; - } for (int l111 = 0; (l111 < 2); l111 = (l111 + 1)) { fRec75[l111] = 0.0f; - } for (int l112 = 0; (l112 < 2); l112 = (l112 + 1)) { fVec47[l112] = 0.0f; - } for (int l113 = 0; (l113 < 2); l113 = (l113 + 1)) { fRec74[l113] = 0.0f; - } for (int l114 = 0; (l114 < 2); l114 = (l114 + 1)) { - fRec65[l114] = 0.0f; - + fRec11[l114] = 0.0f; } for (int l115 = 0; (l115 < 16384); l115 = (l115 + 1)) { fVec48[l115] = 0.0f; - } for (int l116 = 0; (l116 < 2); l116 = (l116 + 1)) { fRec76[l116] = 0.0f; - } for (int l117 = 0; (l117 < 2); l117 = (l117 + 1)) { fVec49[l117] = 0.0f; - } for (int l118 = 0; (l118 < 2); l118 = (l118 + 1)) { - fRec63[l118] = 0.0f; - + fRec9[l118] = 0.0f; } for (int l119 = 0; (l119 < 2); l119 = (l119 + 1)) { - fRec61[l119] = 0.0f; - + fRec7[l119] = 0.0f; } for (int l120 = 0; (l120 < 16384); l120 = (l120 + 1)) { fVec50[l120] = 0.0f; - } for (int l121 = 0; (l121 < 2); l121 = (l121 + 1)) { fRec78[l121] = 0.0f; - } for (int l122 = 0; (l122 < 2); l122 = (l122 + 1)) { fVec51[l122] = 0.0f; - } for (int l123 = 0; (l123 < 2); l123 = (l123 + 1)) { fRec77[l123] = 0.0f; - } for (int l124 = 0; (l124 < 2); l124 = (l124 + 1)) { - fRec62[l124] = 0.0f; - + fRec8[l124] = 0.0f; } for (int l125 = 0; (l125 < 16384); l125 = (l125 + 1)) { fVec52[l125] = 0.0f; - } for (int l126 = 0; (l126 < 2); l126 = (l126 + 1)) { fRec79[l126] = 0.0f; - } for (int l127 = 0; (l127 < 2); l127 = (l127 + 1)) { fVec53[l127] = 0.0f; - } for (int l128 = 0; (l128 < 2); l128 = (l128 + 1)) { - fRec60[l128] = 0.0f; - + fRec6[l128] = 0.0f; } for (int l129 = 0; (l129 < 2); l129 = (l129 + 1)) { - fRec58[l129] = 0.0f; - + fRec4[l129] = 0.0f; } for (int l130 = 0; (l130 < 16384); l130 = (l130 + 1)) { fVec54[l130] = 0.0f; - } for (int l131 = 0; (l131 < 2); l131 = (l131 + 1)) { fRec81[l131] = 0.0f; - } for (int l132 = 0; (l132 < 2); l132 = (l132 + 1)) { fVec55[l132] = 0.0f; - } for (int l133 = 0; (l133 < 2); l133 = (l133 + 1)) { fRec80[l133] = 0.0f; - } for (int l134 = 0; (l134 < 2); l134 = (l134 + 1)) { - fRec59[l134] = 0.0f; - + fRec5[l134] = 0.0f; } for (int l135 = 0; (l135 < 2); l135 = (l135 + 1)) { fRec3[l135] = 0.0f; - } for (int l136 = 0; (l136 < 1024); l136 = (l136 + 1)) { fRec1[l136] = 0.0f; - } for (int l137 = 0; (l137 < 2); l137 = (l137 + 1)) { fRec82[l137] = 0.0f; - } for (int l138 = 0; (l138 < 1024); l138 = (l138 + 1)) { fRec2[l138] = 0.0f; - } - } - virtual void init(int samplingFreq) { - classInit(samplingFreq); - instanceInit(samplingFreq); + virtual void init(int sample_rate) { + classInit(sample_rate); + instanceInit(sample_rate); } - virtual void instanceInit(int samplingFreq) { - instanceConstants(samplingFreq); + virtual void instanceInit(int sample_rate) { + instanceConstants(sample_rate); instanceResetUserInterface(); instanceClear(); } @@ -1299,25 +1212,24 @@ class fx_greyhole : public dsp { virtual fx_greyhole* clone() { return new fx_greyhole(); } + virtual int getSampleRate() { - return fSamplingFreq; - + return fSampleRate; } virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("fx.greyhole"); ui_interface->addCheckButton("bypass", &fCheckbox0); ui_interface->addHorizontalSlider("damping", &fHslider1, 0.0f, 0.0f, 0.99000001f, 0.00100000005f); - ui_interface->addHorizontalSlider("delaytime", &fHslider3, 0.200000003f, 0.00100000005f, 1.45000005f, 9.99999975e-05f); + ui_interface->addHorizontalSlider("delaytime", &fHslider4, 0.200000003f, 0.00100000005f, 1.45000005f, 9.99999975e-05f); ui_interface->addHorizontalSlider("diffusion", &fHslider2, 0.5f, 0.0f, 0.99000001f, 9.99999975e-05f); ui_interface->declare(&fHslider0, "style", "knob"); ui_interface->addHorizontalSlider("drywet", &fHslider0, 1.0f, 0.0f, 1.0f, 0.00999999978f); - ui_interface->addHorizontalSlider("feedback", &fHslider6, 0.899999976f, 0.0f, 1.0f, 0.00999999978f); - ui_interface->addHorizontalSlider("moddepth", &fHslider4, 0.100000001f, 0.0f, 1.0f, 0.00100000005f); - ui_interface->addHorizontalSlider("modfreq", &fHslider5, 2.0f, 0.0f, 10.0f, 0.00999999978f); + ui_interface->addHorizontalSlider("feedback", &fHslider3, 0.899999976f, 0.0f, 1.0f, 0.00999999978f); + ui_interface->addHorizontalSlider("moddepth", &fHslider5, 0.100000001f, 0.0f, 1.0f, 0.00100000005f); + ui_interface->addHorizontalSlider("modfreq", &fHslider6, 2.0f, 0.0f, 10.0f, 0.00999999978f); ui_interface->addHorizontalSlider("size", &fHslider7, 1.0f, 0.5f, 3.0f, 9.99999975e-05f); ui_interface->closeBox(); - } virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { @@ -1329,8 +1241,8 @@ class fx_greyhole : public dsp { float fSlow1 = (0.00100000005f * float(fHslider0)); float fSlow2 = float(fHslider1); float fSlow3 = float(fHslider2); - float fSlow4 = std::floor(std::min(65533.0f, (fConst0 * float(fHslider3)))); - float fSlow5 = float(fHslider4); + float fSlow4 = float(fHslider3); + float fSlow5 = std::floor(std::min(65533.0f, (fConst0 * float(fHslider4)))); float fSlow6 = float(fHslider5); float fSlow7 = float(fHslider6); float fSlow8 = float(fHslider7); @@ -1395,7 +1307,7 @@ class fx_greyhole : public dsp { float fSlow67 = (0.00100000005f * float(iSlow66)); for (int i = 0; (i < count); i = (i + 1)) { float fTemp0 = float(input0[i]); - float fTemp1 = (iSlow0?0.0f:fTemp0); + float fTemp1 = (iSlow0 ? 0.0f : fTemp0); iVec0[0] = 1; fRec0[0] = (fSlow1 + (0.999000013f * fRec0[1])); float fTemp2 = (1.0f - fRec0[0]); @@ -1403,395 +1315,392 @@ class fx_greyhole : public dsp { float fTemp3 = (fSlow2 + fVec1[1]); fVec2[0] = fSlow3; float fTemp4 = (0.5f * (fSlow3 + fVec2[1])); - float fTemp5 = (0.0f - fTemp4); - float fTemp6 = std::sin(fTemp5); - float fTemp7 = std::sin(fTemp4); - float fTemp8 = ((fRec4[1] != 0.0f)?(((fRec5[1] > 0.0f) & (fRec5[1] < 1.0f))?fRec4[1]:0.0f):(((fRec5[1] == 0.0f) & (fSlow4 != fRec6[1]))?4.53514731e-05f:(((fRec5[1] == 1.0f) & (fSlow4 != fRec7[1]))?-4.53514731e-05f:0.0f))); - fRec4[0] = fTemp8; - fRec5[0] = std::max(0.0f, std::min(1.0f, (fRec5[1] + fTemp8))); - fRec6[0] = (((fRec5[1] >= 1.0f) & (fRec7[1] != fSlow4))?fSlow4:fRec6[1]); - fRec7[0] = (((fRec5[1] <= 0.0f) & (fRec6[1] != fSlow4))?fSlow4:fRec7[1]); - float fTemp9 = (1.0f - fRec5[0]); - fVec3[0] = fSlow5; - float fTemp10 = (fSlow5 + fVec3[1]); + float fTemp5 = std::cos(fTemp4); + float fTemp6 = (0.0f - fTemp4); + float fTemp7 = std::cos(fTemp6); + float fTemp8 = float(input1[i]); + float fTemp9 = (iSlow0 ? 0.0f : fTemp8); + fVec3[0] = fSlow4; + float fTemp10 = (fSlow4 + fVec3[1]); + float fTemp11 = ((fRec40[1] != 0.0f) ? (((fRec41[1] > 0.0f) & (fRec41[1] < 1.0f)) ? fRec40[1] : 0.0f) : (((fRec41[1] == 0.0f) & (fSlow5 != fRec42[1])) ? 4.53514731e-05f : (((fRec41[1] == 1.0f) & (fSlow5 != fRec43[1])) ? -4.53514731e-05f : 0.0f))); + fRec40[0] = fTemp11; + fRec41[0] = std::max(0.0f, std::min(1.0f, (fRec41[1] + fTemp11))); + fRec42[0] = (((fRec41[1] >= 1.0f) & (fRec43[1] != fSlow5)) ? fSlow5 : fRec42[1]); + fRec43[0] = (((fRec41[1] <= 0.0f) & (fRec42[1] != fSlow5)) ? fSlow5 : fRec43[1]); + float fTemp12 = (1.0f - fRec41[0]); fVec4[0] = fSlow6; - float fTemp11 = (fConst2 * (fSlow6 + fVec4[1])); - float fTemp12 = std::sin(fTemp11); - float fTemp13 = std::cos(fTemp11); - fRec8[0] = ((fTemp12 * fRec9[1]) + (fTemp13 * fRec8[1])); - int iTemp14 = (1 - iVec0[1]); - fRec9[0] = ((float(iTemp14) + (fTemp13 * fRec9[1])) - (fTemp12 * fRec8[1])); - float fTemp15 = (fConst1 * (fTemp10 * (fRec9[0] + 1.0f))); - float fTemp16 = (fTemp15 + 8.50000477f); - int iTemp17 = int(fTemp16); - float fTemp18 = std::floor(fTemp16); - float fTemp19 = (fTemp15 + (9.0f - fTemp18)); - float fTemp20 = (fTemp15 + (8.0f - fTemp18)); - float fTemp21 = (fTemp15 + (7.0f - fTemp18)); - float fTemp22 = (fTemp15 + (6.0f - fTemp18)); - float fTemp23 = (fTemp19 * fTemp20); - float fTemp24 = (((((fRec1[((IOTA - (std::min(512, std::max(0, iTemp17)) + 1)) & 1023)] * (0.0f - fTemp19)) * (0.0f - (0.5f * fTemp20))) * (0.0f - (0.333333343f * fTemp21))) * (0.0f - (0.25f * fTemp22))) + ((fTemp15 + (10.0f - fTemp18)) * ((((((fRec1[((IOTA - (std::min(512, std::max(0, (iTemp17 + 1))) + 1)) & 1023)] * (0.0f - fTemp20)) * (0.0f - (0.5f * fTemp21))) * (0.0f - (0.333333343f * fTemp22))) + (0.5f * (((fTemp19 * fRec1[((IOTA - (std::min(512, std::max(0, (iTemp17 + 2))) + 1)) & 1023)]) * (0.0f - fTemp21)) * (0.0f - (0.5f * fTemp22))))) + (0.166666672f * ((fTemp23 * fRec1[((IOTA - (std::min(512, std::max(0, (iTemp17 + 3))) + 1)) & 1023)]) * (0.0f - fTemp22)))) + (0.0416666679f * ((fTemp23 * fTemp21) * fRec1[((IOTA - (std::min(512, std::max(0, (iTemp17 + 4))) + 1)) & 1023)]))))); - fVec5[(IOTA & 131071)] = fTemp24; - int iTemp25 = int(std::min(65536.0f, std::max(0.0f, fRec6[0]))); - int iTemp26 = int(std::min(65536.0f, std::max(0.0f, fRec7[0]))); - fVec6[0] = fSlow7; - float fTemp27 = (fSlow7 + fVec6[1]); - float fTemp28 = (fTemp1 + (0.5f * (((fTemp9 * fVec5[((IOTA - iTemp25) & 131071)]) + (fRec5[0] * fVec5[((IOTA - iTemp26) & 131071)])) * fTemp27))); - float fTemp29 = std::cos(fTemp4); - float fTemp30 = float(input1[i]); - float fTemp31 = (iSlow0?0.0f:fTemp30); - float fTemp32 = (fConst1 * (fTemp10 * (fRec8[0] + 1.0f))); - float fTemp33 = (fTemp32 + 8.50000477f); - int iTemp34 = int(fTemp33); - float fTemp35 = std::floor(fTemp33); - float fTemp36 = (fTemp32 + (9.0f - fTemp35)); - float fTemp37 = (fTemp32 + (8.0f - fTemp35)); - float fTemp38 = (fTemp32 + (7.0f - fTemp35)); - float fTemp39 = (fTemp32 + (6.0f - fTemp35)); - float fTemp40 = (fTemp36 * fTemp37); - float fTemp41 = (((((fRec2[((IOTA - (std::min(512, std::max(0, iTemp34)) + 1)) & 1023)] * (0.0f - fTemp36)) * (0.0f - (0.5f * fTemp37))) * (0.0f - (0.333333343f * fTemp38))) * (0.0f - (0.25f * fTemp39))) + ((fTemp32 + (10.0f - fTemp35)) * ((((((fRec2[((IOTA - (std::min(512, std::max(0, (iTemp34 + 1))) + 1)) & 1023)] * (0.0f - fTemp37)) * (0.0f - (0.5f * fTemp38))) * (0.0f - (0.333333343f * fTemp39))) + (0.5f * (((fTemp36 * fRec2[((IOTA - (std::min(512, std::max(0, (iTemp34 + 2))) + 1)) & 1023)]) * (0.0f - fTemp38)) * (0.0f - (0.5f * fTemp39))))) + (0.166666672f * ((fTemp40 * fRec2[((IOTA - (std::min(512, std::max(0, (iTemp34 + 3))) + 1)) & 1023)]) * (0.0f - fTemp39)))) + (0.0416666679f * ((fTemp40 * fTemp38) * fRec2[((IOTA - (std::min(512, std::max(0, (iTemp34 + 4))) + 1)) & 1023)]))))); - fVec7[(IOTA & 131071)] = fTemp41; - float fTemp42 = (fTemp31 + (0.5f * (fTemp27 * ((fRec5[0] * fVec7[((IOTA - iTemp26) & 131071)]) + (fTemp9 * fVec7[((IOTA - iTemp25) & 131071)]))))); - float fTemp43 = ((fTemp29 * fTemp42) - (fTemp7 * fRec11[1])); - float fTemp44 = ((fTemp29 * fTemp43) - (fTemp7 * fRec14[1])); - float fTemp45 = ((fTemp29 * fTemp44) - (fTemp7 * fRec17[1])); - fVec8[(IOTA & 16383)] = (0.0f - ((fTemp29 * fTemp45) - (fTemp7 * fRec20[1]))); - fRec22[0] = (fSlow11 + (0.999899983f * (fRec22[1] + float((iSlow10 * iTemp14))))); - float fTemp46 = (fRec22[0] + -1.49998999f); - float fTemp47 = fVec8[((IOTA - std::min(8192, std::max(0, int(fTemp46)))) & 16383)]; - fVec9[0] = fTemp47; - float fTemp48 = std::floor(fTemp46); - fRec21[0] = (fVec9[1] - (((fTemp48 + (2.0f - fRec22[0])) * (fRec21[1] - fTemp47)) / (fRec22[0] - fTemp48))); - fRec19[0] = fRec21[0]; - float fTemp49 = ((fTemp29 * fTemp28) - (fTemp7 * fRec10[1])); - float fTemp50 = ((fTemp29 * fTemp49) - (fTemp7 * fRec13[1])); - float fTemp51 = ((fTemp29 * fTemp50) - (fTemp7 * fRec16[1])); - fVec10[(IOTA & 16383)] = ((fTemp29 * fTemp51) - (fTemp7 * fRec19[1])); - fRec24[0] = (fSlow13 + (0.999899983f * (fRec24[1] + float((iSlow12 * iTemp14))))); - float fTemp52 = (fRec24[0] + -1.49998999f); + float fTemp13 = (fSlow6 + fVec4[1]); + fVec5[0] = fSlow7; + float fTemp14 = (fConst2 * (fSlow7 + fVec5[1])); + float fTemp15 = std::sin(fTemp14); + float fTemp16 = std::cos(fTemp14); + fRec44[0] = ((fTemp15 * fRec45[1]) + (fTemp16 * fRec44[1])); + int iTemp17 = (1 - iVec0[1]); + fRec45[0] = ((float(iTemp17) + (fTemp16 * fRec45[1])) - (fTemp15 * fRec44[1])); + float fTemp18 = (fConst1 * (fTemp13 * (fRec44[0] + 1.0f))); + float fTemp19 = (fTemp18 + 8.50000477f); + int iTemp20 = int(fTemp19); + float fTemp21 = std::floor(fTemp19); + float fTemp22 = (fTemp18 + (9.0f - fTemp21)); + float fTemp23 = (fTemp18 + (8.0f - fTemp21)); + float fTemp24 = (fTemp18 + (7.0f - fTemp21)); + float fTemp25 = (fTemp18 + (6.0f - fTemp21)); + float fTemp26 = (fTemp22 * fTemp23); + float fTemp27 = (((((fRec2[((IOTA - (std::min(512, std::max(0, iTemp20)) + 1)) & 1023)] * (0.0f - fTemp22)) * (0.0f - (0.5f * fTemp23))) * (0.0f - (0.333333343f * fTemp24))) * (0.0f - (0.25f * fTemp25))) + ((fTemp18 + (10.0f - fTemp21)) * ((((((fRec2[((IOTA - (std::min(512, std::max(0, (iTemp20 + 1))) + 1)) & 1023)] * (0.0f - fTemp23)) * (0.0f - (0.5f * fTemp24))) * (0.0f - (0.333333343f * fTemp25))) + (0.5f * (((fTemp22 * fRec2[((IOTA - (std::min(512, std::max(0, (iTemp20 + 2))) + 1)) & 1023)]) * (0.0f - fTemp24)) * (0.0f - (0.5f * fTemp25))))) + (0.166666672f * ((fTemp26 * fRec2[((IOTA - (std::min(512, std::max(0, (iTemp20 + 3))) + 1)) & 1023)]) * (0.0f - fTemp25)))) + (0.0416666679f * ((fTemp26 * fTemp24) * fRec2[((IOTA - (std::min(512, std::max(0, (iTemp20 + 4))) + 1)) & 1023)]))))); + fVec6[(IOTA & 131071)] = fTemp27; + int iTemp28 = int(std::min(65536.0f, std::max(0.0f, fRec42[0]))); + int iTemp29 = int(std::min(65536.0f, std::max(0.0f, fRec43[0]))); + float fTemp30 = (fTemp9 + (0.5f * (fTemp10 * ((fTemp12 * fVec6[((IOTA - iTemp28) & 131071)]) + (fRec41[0] * fVec6[((IOTA - iTemp29) & 131071)]))))); + float fTemp31 = std::sin(fTemp4); + float fTemp32 = ((fTemp5 * fTemp30) - (fTemp31 * fRec29[1])); + float fTemp33 = ((fTemp5 * fTemp32) - (fTemp31 * fRec32[1])); + float fTemp34 = ((fTemp5 * fTemp33) - (fTemp31 * fRec35[1])); + fVec7[(IOTA & 16383)] = (0.0f - ((fTemp5 * fTemp34) - (fTemp31 * fRec38[1]))); + fRec46[0] = (fSlow11 + (0.999899983f * (fRec46[1] + float((iSlow10 * iTemp17))))); + float fTemp35 = (fRec46[0] + -1.49998999f); + float fTemp36 = fVec7[((IOTA - std::min(8192, std::max(0, int(fTemp35)))) & 16383)]; + fVec8[0] = fTemp36; + float fTemp37 = std::floor(fTemp35); + fRec39[0] = (fVec8[1] - (((fTemp37 + (2.0f - fRec46[0])) * (fRec39[1] - fTemp36)) / (fRec46[0] - fTemp37))); + fRec37[0] = fRec39[0]; + float fTemp38 = (fConst1 * (fTemp13 * (fRec45[0] + 1.0f))); + float fTemp39 = (fTemp38 + 8.50000477f); + int iTemp40 = int(fTemp39); + float fTemp41 = std::floor(fTemp39); + float fTemp42 = (fTemp38 + (9.0f - fTemp41)); + float fTemp43 = (fTemp38 + (8.0f - fTemp41)); + float fTemp44 = (fTemp38 + (7.0f - fTemp41)); + float fTemp45 = (fTemp38 + (6.0f - fTemp41)); + float fTemp46 = (fTemp42 * fTemp43); + float fTemp47 = (((((fRec1[((IOTA - (std::min(512, std::max(0, iTemp40)) + 1)) & 1023)] * (0.0f - fTemp42)) * (0.0f - (0.5f * fTemp43))) * (0.0f - (0.333333343f * fTemp44))) * (0.0f - (0.25f * fTemp45))) + ((fTemp38 + (10.0f - fTemp41)) * ((((((fRec1[((IOTA - (std::min(512, std::max(0, (iTemp40 + 1))) + 1)) & 1023)] * (0.0f - fTemp43)) * (0.0f - (0.5f * fTemp44))) * (0.0f - (0.333333343f * fTemp45))) + (0.5f * (((fTemp42 * fRec1[((IOTA - (std::min(512, std::max(0, (iTemp40 + 2))) + 1)) & 1023)]) * (0.0f - fTemp44)) * (0.0f - (0.5f * fTemp45))))) + (0.166666672f * ((fTemp46 * fRec1[((IOTA - (std::min(512, std::max(0, (iTemp40 + 3))) + 1)) & 1023)]) * (0.0f - fTemp45)))) + (0.0416666679f * ((fTemp46 * fTemp44) * fRec1[((IOTA - (std::min(512, std::max(0, (iTemp40 + 4))) + 1)) & 1023)]))))); + fVec9[(IOTA & 131071)] = fTemp47; + float fTemp48 = (fTemp1 + (0.5f * (((fTemp12 * fVec9[((IOTA - iTemp28) & 131071)]) + (fRec41[0] * fVec9[((IOTA - iTemp29) & 131071)])) * fTemp10))); + float fTemp49 = ((fTemp48 * fTemp5) - (fTemp31 * fRec28[1])); + float fTemp50 = ((fTemp5 * fTemp49) - (fTemp31 * fRec31[1])); + float fTemp51 = ((fTemp5 * fTemp50) - (fTemp31 * fRec34[1])); + fVec10[(IOTA & 16383)] = ((fTemp5 * fTemp51) - (fTemp31 * fRec37[1])); + fRec48[0] = (fSlow13 + (0.999899983f * (fRec48[1] + float((iSlow12 * iTemp17))))); + float fTemp52 = (fRec48[0] + -1.49998999f); float fTemp53 = fVec10[((IOTA - std::min(8192, std::max(0, int(fTemp52)))) & 16383)]; fVec11[0] = fTemp53; float fTemp54 = std::floor(fTemp52); - fRec23[0] = (fVec11[1] - (((fTemp54 + (2.0f - fRec24[0])) * (fRec23[1] - fTemp53)) / (fRec24[0] - fTemp54))); - fRec20[0] = fRec23[0]; - fVec12[(IOTA & 16383)] = (0.0f - ((fTemp29 * fRec20[1]) + (fTemp7 * fTemp45))); - fRec25[0] = (fSlow16 + (0.999000013f * (fRec25[1] + float((iSlow15 * iTemp14))))); - float fTemp55 = (fRec25[0] + -1.49998999f); + fRec47[0] = (fVec11[1] - (((fTemp54 + (2.0f - fRec48[0])) * (fRec47[1] - fTemp53)) / (fRec48[0] - fTemp54))); + fRec38[0] = fRec47[0]; + fVec12[(IOTA & 16383)] = (0.0f - ((fTemp5 * fRec38[1]) + (fTemp31 * fTemp34))); + fRec49[0] = (fSlow16 + (0.999000013f * (fRec49[1] + float((iSlow15 * iTemp17))))); + float fTemp55 = (fRec49[0] + -1.49998999f); float fTemp56 = fVec12[((IOTA - std::min(8192, std::max(0, int(fTemp55)))) & 16383)]; fVec13[0] = fTemp56; float fTemp57 = std::floor(fTemp55); - fRec18[0] = (fVec13[1] - (((fTemp57 + (2.0f - fRec25[0])) * (fRec18[1] - fTemp56)) / (fRec25[0] - fTemp57))); - fRec16[0] = fRec18[0]; - fVec14[(IOTA & 16383)] = ((fTemp7 * fTemp51) + (fRec19[1] * fTemp29)); - fRec27[0] = (fSlow18 + (0.999000013f * (fRec27[1] + float((iSlow17 * iTemp14))))); - float fTemp58 = (fRec27[0] + -1.49998999f); + fRec36[0] = (fVec13[1] - (((fTemp57 + (2.0f - fRec49[0])) * (fRec36[1] - fTemp56)) / (fRec49[0] - fTemp57))); + fRec34[0] = fRec36[0]; + fVec14[(IOTA & 16383)] = ((fRec37[1] * fTemp5) + (fTemp31 * fTemp51)); + fRec51[0] = (fSlow18 + (0.999000013f * (fRec51[1] + float((iSlow17 * iTemp17))))); + float fTemp58 = (fRec51[0] + -1.49998999f); float fTemp59 = fVec14[((IOTA - std::min(8192, std::max(0, int(fTemp58)))) & 16383)]; fVec15[0] = fTemp59; float fTemp60 = std::floor(fTemp58); - fRec26[0] = (fVec15[1] - (((fTemp60 + (2.0f - fRec27[0])) * (fRec26[1] - fTemp59)) / (fRec27[0] - fTemp60))); - fRec17[0] = fRec26[0]; - fVec16[(IOTA & 16383)] = (0.0f - ((fTemp29 * fRec17[1]) + (fTemp7 * fTemp44))); - fRec28[0] = (fSlow21 + (0.999000013f * (fRec28[1] + float((iSlow20 * iTemp14))))); - float fTemp61 = (fRec28[0] + -1.49998999f); + fRec50[0] = (fVec15[1] - (((fTemp60 + (2.0f - fRec51[0])) * (fRec50[1] - fTemp59)) / (fRec51[0] - fTemp60))); + fRec35[0] = fRec50[0]; + fVec16[(IOTA & 16383)] = (0.0f - ((fTemp5 * fRec35[1]) + (fTemp31 * fTemp33))); + fRec52[0] = (fSlow21 + (0.999000013f * (fRec52[1] + float((iSlow20 * iTemp17))))); + float fTemp61 = (fRec52[0] + -1.49998999f); float fTemp62 = fVec16[((IOTA - std::min(8192, std::max(0, int(fTemp61)))) & 16383)]; fVec17[0] = fTemp62; float fTemp63 = std::floor(fTemp61); - fRec15[0] = (fVec17[1] - (((fTemp63 + (2.0f - fRec28[0])) * (fRec15[1] - fTemp62)) / (fRec28[0] - fTemp63))); - fRec13[0] = fRec15[0]; - fVec18[(IOTA & 16383)] = ((fTemp7 * fTemp50) + (fRec16[1] * fTemp29)); - fRec30[0] = (fSlow23 + (0.999000013f * (fRec30[1] + float((iSlow22 * iTemp14))))); - float fTemp64 = (fRec30[0] + -1.49998999f); + fRec33[0] = (fVec17[1] - (((fTemp63 + (2.0f - fRec52[0])) * (fRec33[1] - fTemp62)) / (fRec52[0] - fTemp63))); + fRec31[0] = fRec33[0]; + fVec18[(IOTA & 16383)] = ((fRec34[1] * fTemp5) + (fTemp31 * fTemp50)); + fRec54[0] = (fSlow23 + (0.999000013f * (fRec54[1] + float((iSlow22 * iTemp17))))); + float fTemp64 = (fRec54[0] + -1.49998999f); float fTemp65 = fVec18[((IOTA - std::min(8192, std::max(0, int(fTemp64)))) & 16383)]; fVec19[0] = fTemp65; float fTemp66 = std::floor(fTemp64); - fRec29[0] = (fVec19[1] - (((fTemp66 + (2.0f - fRec30[0])) * (fRec29[1] - fTemp65)) / (fRec30[0] - fTemp66))); - fRec14[0] = fRec29[0]; - fVec20[(IOTA & 16383)] = (0.0f - ((fTemp29 * fRec14[1]) + (fTemp7 * fTemp43))); - fRec31[0] = (fSlow25 + (0.999000013f * (fRec31[1] + float((iSlow24 * iTemp14))))); - float fTemp67 = (fRec31[0] + -1.49998999f); + fRec53[0] = (fVec19[1] - (((fTemp66 + (2.0f - fRec54[0])) * (fRec53[1] - fTemp65)) / (fRec54[0] - fTemp66))); + fRec32[0] = fRec53[0]; + fVec20[(IOTA & 16383)] = (0.0f - ((fTemp5 * fRec32[1]) + (fTemp31 * fTemp32))); + fRec55[0] = (fSlow25 + (0.999000013f * (fRec55[1] + float((iSlow24 * iTemp17))))); + float fTemp67 = (fRec55[0] + -1.49998999f); float fTemp68 = fVec20[((IOTA - std::min(8192, std::max(0, int(fTemp67)))) & 16383)]; fVec21[0] = fTemp68; float fTemp69 = std::floor(fTemp67); - fRec12[0] = (fVec21[1] - (((fTemp69 + (2.0f - fRec31[0])) * (fRec12[1] - fTemp68)) / (fRec31[0] - fTemp69))); - fRec10[0] = fRec12[0]; - fVec22[(IOTA & 16383)] = ((fTemp7 * fTemp49) + (fRec13[1] * fTemp29)); - fRec33[0] = (fSlow27 + (0.999000013f * (fRec33[1] + float((iSlow26 * iTemp14))))); - float fTemp70 = (fRec33[0] + -1.49998999f); + fRec30[0] = (fVec21[1] - (((fTemp69 + (2.0f - fRec55[0])) * (fRec30[1] - fTemp68)) / (fRec55[0] - fTemp69))); + fRec28[0] = fRec30[0]; + fVec22[(IOTA & 16383)] = ((fRec31[1] * fTemp5) + (fTemp31 * fTemp49)); + fRec57[0] = (fSlow27 + (0.999000013f * (fRec57[1] + float((iSlow26 * iTemp17))))); + float fTemp70 = (fRec57[0] + -1.49998999f); float fTemp71 = fVec22[((IOTA - std::min(8192, std::max(0, int(fTemp70)))) & 16383)]; fVec23[0] = fTemp71; float fTemp72 = std::floor(fTemp70); - fRec32[0] = (fVec23[1] - (((fTemp72 + (2.0f - fRec33[0])) * (fRec32[1] - fTemp71)) / (fRec33[0] - fTemp72))); - fRec11[0] = fRec32[0]; - float fTemp73 = ((fTemp7 * fTemp28) + (fRec10[1] * fTemp29)); - float fTemp74 = std::cos(fTemp5); - float fTemp75 = ((fTemp29 * fRec11[1]) + (fTemp7 * fTemp42)); - float fTemp76 = ((fTemp74 * fTemp75) - (fTemp6 * fRec35[1])); - float fTemp77 = ((fTemp74 * fTemp76) - (fTemp6 * fRec38[1])); - float fTemp78 = ((fTemp74 * fTemp77) - (fTemp6 * fRec41[1])); - fVec24[(IOTA & 16383)] = (0.0f - ((fTemp74 * fTemp78) - (fTemp6 * fRec44[1]))); - fRec46[0] = (fSlow30 + (0.999899983f * (fRec46[1] + float((iSlow29 * iTemp14))))); - float fTemp79 = (fRec46[0] + -1.49998999f); - float fTemp80 = fVec24[((IOTA - std::min(8192, std::max(0, int(fTemp79)))) & 16383)]; - fVec25[0] = fTemp80; - float fTemp81 = std::floor(fTemp79); - fRec45[0] = (fVec25[1] - (((fTemp81 + (2.0f - fRec46[0])) * (fRec45[1] - fTemp80)) / (fRec46[0] - fTemp81))); - fRec43[0] = fRec45[0]; - float fTemp82 = ((fTemp73 * fTemp74) - (fTemp6 * fRec34[1])); - float fTemp83 = ((fTemp74 * fTemp82) - (fTemp6 * fRec37[1])); - float fTemp84 = ((fTemp74 * fTemp83) - (fTemp6 * fRec40[1])); - fVec26[(IOTA & 16383)] = ((fTemp74 * fTemp84) - (fRec43[1] * fTemp6)); - fRec48[0] = (fSlow32 + (0.999899983f * (fRec48[1] + float((iSlow31 * iTemp14))))); - float fTemp85 = (fRec48[0] + -1.49998999f); + fRec56[0] = (fVec23[1] - (((fTemp72 + (2.0f - fRec57[0])) * (fRec56[1] - fTemp71)) / (fRec57[0] - fTemp72))); + fRec29[0] = fRec56[0]; + float fTemp73 = ((fTemp5 * fRec29[1]) + (fTemp31 * fTemp30)); + float fTemp74 = std::sin(fTemp6); + float fTemp75 = ((fTemp7 * fTemp73) - (fTemp74 * fRec17[1])); + float fTemp76 = ((fTemp7 * fTemp75) - (fTemp74 * fRec20[1])); + float fTemp77 = ((fTemp7 * fTemp76) - (fTemp74 * fRec23[1])); + fVec24[(IOTA & 16383)] = (0.0f - ((fTemp7 * fTemp77) - (fTemp74 * fRec26[1]))); + fRec58[0] = (fSlow30 + (0.999899983f * (fRec58[1] + float((iSlow29 * iTemp17))))); + float fTemp78 = (fRec58[0] + -1.49998999f); + float fTemp79 = fVec24[((IOTA - std::min(8192, std::max(0, int(fTemp78)))) & 16383)]; + fVec25[0] = fTemp79; + float fTemp80 = std::floor(fTemp78); + fRec27[0] = (fVec25[1] - (((fTemp80 + (2.0f - fRec58[0])) * (fRec27[1] - fTemp79)) / (fRec58[0] - fTemp80))); + fRec25[0] = fRec27[0]; + float fTemp81 = ((fRec28[1] * fTemp5) + (fTemp31 * fTemp48)); + float fTemp82 = ((fTemp81 * fTemp7) - (fTemp74 * fRec16[1])); + float fTemp83 = ((fTemp7 * fTemp82) - (fTemp74 * fRec19[1])); + float fTemp84 = ((fTemp7 * fTemp83) - (fTemp74 * fRec22[1])); + fVec26[(IOTA & 16383)] = ((fTemp7 * fTemp84) - (fRec25[1] * fTemp74)); + fRec60[0] = (fSlow32 + (0.999899983f * (fRec60[1] + float((iSlow31 * iTemp17))))); + float fTemp85 = (fRec60[0] + -1.49998999f); float fTemp86 = fVec26[((IOTA - std::min(8192, std::max(0, int(fTemp85)))) & 16383)]; fVec27[0] = fTemp86; float fTemp87 = std::floor(fTemp85); - fRec47[0] = (fVec27[1] - (((fTemp87 + (2.0f - fRec48[0])) * (fRec47[1] - fTemp86)) / (fRec48[0] - fTemp87))); - fRec44[0] = fRec47[0]; - fVec28[(IOTA & 16383)] = (0.0f - ((fTemp74 * fRec44[1]) + (fTemp6 * fTemp78))); - fRec49[0] = (fSlow35 + (0.999000013f * (fRec49[1] + float((iSlow34 * iTemp14))))); - float fTemp88 = (fRec49[0] + -1.49998999f); + fRec59[0] = (fVec27[1] - (((fTemp87 + (2.0f - fRec60[0])) * (fRec59[1] - fTemp86)) / (fRec60[0] - fTemp87))); + fRec26[0] = fRec59[0]; + fVec28[(IOTA & 16383)] = (0.0f - ((fTemp7 * fRec26[1]) + (fTemp74 * fTemp77))); + fRec61[0] = (fSlow35 + (0.999000013f * (fRec61[1] + float((iSlow34 * iTemp17))))); + float fTemp88 = (fRec61[0] + -1.49998999f); float fTemp89 = fVec28[((IOTA - std::min(8192, std::max(0, int(fTemp88)))) & 16383)]; fVec29[0] = fTemp89; float fTemp90 = std::floor(fTemp88); - fRec42[0] = (fVec29[1] - (((fTemp90 + (2.0f - fRec49[0])) * (fRec42[1] - fTemp89)) / (fRec49[0] - fTemp90))); - fRec40[0] = fRec42[0]; - fVec30[(IOTA & 16383)] = ((fTemp6 * fTemp84) + (fRec43[1] * fTemp74)); - fRec51[0] = (fSlow37 + (0.999000013f * (fRec51[1] + float((iSlow36 * iTemp14))))); - float fTemp91 = (fRec51[0] + -1.49998999f); + fRec24[0] = (fVec29[1] - (((fTemp90 + (2.0f - fRec61[0])) * (fRec24[1] - fTemp89)) / (fRec61[0] - fTemp90))); + fRec22[0] = fRec24[0]; + fVec30[(IOTA & 16383)] = ((fRec25[1] * fTemp7) + (fTemp74 * fTemp84)); + fRec63[0] = (fSlow37 + (0.999000013f * (fRec63[1] + float((iSlow36 * iTemp17))))); + float fTemp91 = (fRec63[0] + -1.49998999f); float fTemp92 = fVec30[((IOTA - std::min(8192, std::max(0, int(fTemp91)))) & 16383)]; fVec31[0] = fTemp92; float fTemp93 = std::floor(fTemp91); - fRec50[0] = (fVec31[1] - (((fTemp93 + (2.0f - fRec51[0])) * (fRec50[1] - fTemp92)) / (fRec51[0] - fTemp93))); - fRec41[0] = fRec50[0]; - fVec32[(IOTA & 16383)] = (0.0f - ((fTemp74 * fRec41[1]) + (fTemp6 * fTemp77))); - fRec52[0] = (fSlow40 + (0.999000013f * (fRec52[1] + float((iSlow39 * iTemp14))))); - float fTemp94 = (fRec52[0] + -1.49998999f); + fRec62[0] = (fVec31[1] - (((fTemp93 + (2.0f - fRec63[0])) * (fRec62[1] - fTemp92)) / (fRec63[0] - fTemp93))); + fRec23[0] = fRec62[0]; + fVec32[(IOTA & 16383)] = (0.0f - ((fTemp7 * fRec23[1]) + (fTemp74 * fTemp76))); + fRec64[0] = (fSlow40 + (0.999000013f * (fRec64[1] + float((iSlow39 * iTemp17))))); + float fTemp94 = (fRec64[0] + -1.49998999f); float fTemp95 = fVec32[((IOTA - std::min(8192, std::max(0, int(fTemp94)))) & 16383)]; fVec33[0] = fTemp95; float fTemp96 = std::floor(fTemp94); - fRec39[0] = (fVec33[1] - (((fTemp96 + (2.0f - fRec52[0])) * (fRec39[1] - fTemp95)) / (fRec52[0] - fTemp96))); - fRec37[0] = fRec39[0]; - fVec34[(IOTA & 16383)] = ((fTemp6 * fTemp83) + (fRec40[1] * fTemp74)); - fRec54[0] = (fSlow42 + (0.999000013f * (fRec54[1] + float((iSlow41 * iTemp14))))); - float fTemp97 = (fRec54[0] + -1.49998999f); + fRec21[0] = (fVec33[1] + (((fTemp96 + (2.0f - fRec64[0])) * (fTemp95 - fRec21[1])) / (fRec64[0] - fTemp96))); + fRec19[0] = fRec21[0]; + fVec34[(IOTA & 16383)] = ((fRec22[1] * fTemp7) + (fTemp74 * fTemp83)); + fRec66[0] = (fSlow42 + (0.999000013f * (fRec66[1] + float((iSlow41 * iTemp17))))); + float fTemp97 = (fRec66[0] + -1.49998999f); float fTemp98 = fVec34[((IOTA - std::min(8192, std::max(0, int(fTemp97)))) & 16383)]; fVec35[0] = fTemp98; float fTemp99 = std::floor(fTemp97); - fRec53[0] = (fVec35[1] - (((fTemp99 + (2.0f - fRec54[0])) * (fRec53[1] - fTemp98)) / (fRec54[0] - fTemp99))); - fRec38[0] = fRec53[0]; - fVec36[(IOTA & 16383)] = (0.0f - ((fTemp74 * fRec38[1]) + (fTemp6 * fTemp76))); - fRec55[0] = (fSlow45 + (0.999000013f * (fRec55[1] + float((iSlow44 * iTemp14))))); - float fTemp100 = (fRec55[0] + -1.49998999f); + fRec65[0] = (fVec35[1] - (((fTemp99 + (2.0f - fRec66[0])) * (fRec65[1] - fTemp98)) / (fRec66[0] - fTemp99))); + fRec20[0] = fRec65[0]; + fVec36[(IOTA & 16383)] = (0.0f - ((fTemp7 * fRec20[1]) + (fTemp74 * fTemp75))); + fRec67[0] = (fSlow45 + (0.999000013f * (fRec67[1] + float((iSlow44 * iTemp17))))); + float fTemp100 = (fRec67[0] + -1.49998999f); float fTemp101 = fVec36[((IOTA - std::min(8192, std::max(0, int(fTemp100)))) & 16383)]; fVec37[0] = fTemp101; float fTemp102 = std::floor(fTemp100); - fRec36[0] = (fVec37[1] + (((fTemp101 - fRec36[1]) * (fTemp102 + (2.0f - fRec55[0]))) / (fRec55[0] - fTemp102))); - fRec34[0] = fRec36[0]; - fVec38[(IOTA & 16383)] = ((fRec37[1] * fTemp74) + (fTemp6 * fTemp82)); - fRec57[0] = (fSlow47 + (0.999000013f * (fRec57[1] + float((iSlow46 * iTemp14))))); - float fTemp103 = (fRec57[0] + -1.49998999f); + fRec18[0] = (fVec37[1] - (((fTemp102 + (2.0f - fRec67[0])) * (fRec18[1] - fTemp101)) / (fRec67[0] - fTemp102))); + fRec16[0] = fRec18[0]; + fVec38[(IOTA & 16383)] = ((fRec19[1] * fTemp7) + (fTemp74 * fTemp82)); + fRec69[0] = (fSlow47 + (0.999000013f * (fRec69[1] + float((iSlow46 * iTemp17))))); + float fTemp103 = (fRec69[0] + -1.49998999f); float fTemp104 = fVec38[((IOTA - std::min(8192, std::max(0, int(fTemp103)))) & 16383)]; fVec39[0] = fTemp104; float fTemp105 = std::floor(fTemp103); - fRec56[0] = (fVec39[1] - (((fTemp105 + (2.0f - fRec57[0])) * (fRec56[1] - fTemp104)) / (fRec57[0] - fTemp105))); - fRec35[0] = fRec56[0]; - float fTemp106 = ((fTemp6 * fTemp73) + (fRec34[1] * fTemp74)); - float fTemp107 = ((fTemp74 * fRec35[1]) + (fTemp6 * fTemp75)); - float fTemp108 = ((fTemp107 * fTemp29) - (fRec59[1] * fTemp7)); - float fTemp109 = ((fTemp108 * fTemp29) - (fRec62[1] * fTemp7)); - float fTemp110 = ((fTemp109 * fTemp29) - (fRec65[1] * fTemp7)); - fVec40[(IOTA & 16383)] = (0.0f - ((fTemp110 * fTemp29) - (fRec68[1] * fTemp7))); - fRec70[0] = (fSlow50 + (0.999899983f * (fRec70[1] + float((iSlow49 * iTemp14))))); - float fTemp111 = (fRec70[0] + -1.49998999f); - float fTemp112 = fVec40[((IOTA - std::min(8192, std::max(0, int(fTemp111)))) & 16383)]; - fVec41[0] = fTemp112; - float fTemp113 = std::floor(fTemp111); - fRec69[0] = (fVec41[1] + (((fTemp112 - fRec69[1]) * (fTemp113 + (2.0f - fRec70[0]))) / (fRec70[0] - fTemp113))); - fRec67[0] = fRec69[0]; - float fTemp114 = ((fTemp106 * fTemp29) - (fTemp7 * fRec58[1])); - float fTemp115 = ((fTemp114 * fTemp29) - (fTemp7 * fRec61[1])); - float fTemp116 = ((fTemp115 * fTemp29) - (fTemp7 * fRec64[1])); - fVec42[(IOTA & 16383)] = ((fTemp116 * fTemp29) - (fRec67[1] * fTemp7)); - fRec72[0] = (fSlow52 + (0.999899983f * (fRec72[1] + float((iSlow51 * iTemp14))))); + fRec68[0] = (fVec39[1] - (((fTemp105 + (2.0f - fRec69[0])) * (fRec68[1] - fTemp104)) / (fRec69[0] - fTemp105))); + fRec17[0] = fRec68[0]; + float fTemp106 = ((fTemp7 * fRec17[1]) + (fTemp74 * fTemp73)); + float fTemp107 = ((fTemp5 * fTemp106) - (fTemp31 * fRec5[1])); + float fTemp108 = ((fTemp5 * fTemp107) - (fTemp31 * fRec8[1])); + float fTemp109 = ((fTemp5 * fTemp108) - (fTemp31 * fRec11[1])); + fVec40[(IOTA & 16383)] = (0.0f - ((fTemp5 * fTemp109) - (fTemp31 * fRec14[1]))); + fRec70[0] = (fSlow50 + (0.999899983f * (fRec70[1] + float((iSlow49 * iTemp17))))); + float fTemp110 = (fRec70[0] + -1.49998999f); + float fTemp111 = fVec40[((IOTA - std::min(8192, std::max(0, int(fTemp110)))) & 16383)]; + fVec41[0] = fTemp111; + float fTemp112 = std::floor(fTemp110); + fRec15[0] = (fVec41[1] - (((fTemp112 + (2.0f - fRec70[0])) * (fRec15[1] - fTemp111)) / (fRec70[0] - fTemp112))); + fRec13[0] = fRec15[0]; + float fTemp113 = ((fRec16[1] * fTemp7) + (fTemp74 * fTemp81)); + float fTemp114 = ((fTemp5 * fTemp113) - (fTemp31 * fRec4[1])); + float fTemp115 = ((fTemp5 * fTemp114) - (fTemp31 * fRec7[1])); + float fTemp116 = ((fTemp5 * fTemp115) - (fTemp31 * fRec10[1])); + fVec42[(IOTA & 16383)] = ((fTemp5 * fTemp116) - (fRec13[1] * fTemp31)); + fRec72[0] = (fSlow52 + (0.999899983f * (fRec72[1] + float((iSlow51 * iTemp17))))); float fTemp117 = (fRec72[0] + -1.49998999f); float fTemp118 = fVec42[((IOTA - std::min(8192, std::max(0, int(fTemp117)))) & 16383)]; fVec43[0] = fTemp118; float fTemp119 = std::floor(fTemp117); - fRec71[0] = (fVec43[1] - (((fRec71[1] - fTemp118) * (fTemp119 + (2.0f - fRec72[0]))) / (fRec72[0] - fTemp119))); - fRec68[0] = fRec71[0]; - fVec44[(IOTA & 16383)] = (0.0f - ((fRec68[1] * fTemp29) + (fTemp110 * fTemp7))); - fRec73[0] = (fSlow55 + (0.999000013f * (fRec73[1] + float((iSlow54 * iTemp14))))); + fRec71[0] = (fVec43[1] - (((fTemp119 + (2.0f - fRec72[0])) * (fRec71[1] - fTemp118)) / (fRec72[0] - fTemp119))); + fRec14[0] = fRec71[0]; + fVec44[(IOTA & 16383)] = (0.0f - ((fTemp5 * fRec14[1]) + (fTemp31 * fTemp109))); + fRec73[0] = (fSlow55 + (0.999000013f * (fRec73[1] + float((iSlow54 * iTemp17))))); float fTemp120 = (fRec73[0] + -1.49998999f); float fTemp121 = fVec44[((IOTA - std::min(8192, std::max(0, int(fTemp120)))) & 16383)]; fVec45[0] = fTemp121; float fTemp122 = std::floor(fTemp120); - fRec66[0] = (fVec45[1] + (((fTemp121 - fRec66[1]) * (fTemp122 + (2.0f - fRec73[0]))) / (fRec73[0] - fTemp122))); - fRec64[0] = fRec66[0]; - fVec46[(IOTA & 16383)] = ((fRec67[1] * fTemp29) + (fTemp116 * fTemp7)); - fRec75[0] = (fSlow57 + (0.999000013f * (fRec75[1] + float((iSlow56 * iTemp14))))); + fRec12[0] = (fVec45[1] - (((fTemp122 + (2.0f - fRec73[0])) * (fRec12[1] - fTemp121)) / (fRec73[0] - fTemp122))); + fRec10[0] = fRec12[0]; + fVec46[(IOTA & 16383)] = ((fRec13[1] * fTemp5) + (fTemp31 * fTemp116)); + fRec75[0] = (fSlow57 + (0.999000013f * (fRec75[1] + float((iSlow56 * iTemp17))))); float fTemp123 = (fRec75[0] + -1.49998999f); float fTemp124 = fVec46[((IOTA - std::min(8192, std::max(0, int(fTemp123)))) & 16383)]; fVec47[0] = fTemp124; float fTemp125 = std::floor(fTemp123); fRec74[0] = (fVec47[1] - (((fTemp125 + (2.0f - fRec75[0])) * (fRec74[1] - fTemp124)) / (fRec75[0] - fTemp125))); - fRec65[0] = fRec74[0]; - fVec48[(IOTA & 16383)] = (0.0f - ((fRec65[1] * fTemp29) + (fTemp109 * fTemp7))); - fRec76[0] = (fSlow60 + (0.999000013f * (fRec76[1] + float((iSlow59 * iTemp14))))); + fRec11[0] = fRec74[0]; + fVec48[(IOTA & 16383)] = (0.0f - ((fTemp5 * fRec11[1]) + (fTemp31 * fTemp108))); + fRec76[0] = (fSlow60 + (0.999000013f * (fRec76[1] + float((iSlow59 * iTemp17))))); float fTemp126 = (fRec76[0] + -1.49998999f); float fTemp127 = fVec48[((IOTA - std::min(8192, std::max(0, int(fTemp126)))) & 16383)]; fVec49[0] = fTemp127; float fTemp128 = std::floor(fTemp126); - fRec63[0] = (fVec49[1] - (((fTemp128 + (2.0f - fRec76[0])) * (fRec63[1] - fTemp127)) / (fRec76[0] - fTemp128))); - fRec61[0] = fRec63[0]; - fVec50[(IOTA & 16383)] = ((fTemp115 * fTemp7) + (fRec64[1] * fTemp29)); - fRec78[0] = (fSlow62 + (0.999000013f * (fRec78[1] + float((iSlow61 * iTemp14))))); + fRec9[0] = (fVec49[1] - (((fTemp128 + (2.0f - fRec76[0])) * (fRec9[1] - fTemp127)) / (fRec76[0] - fTemp128))); + fRec7[0] = fRec9[0]; + fVec50[(IOTA & 16383)] = ((fRec10[1] * fTemp5) + (fTemp31 * fTemp115)); + fRec78[0] = (fSlow62 + (0.999000013f * (fRec78[1] + float((iSlow61 * iTemp17))))); float fTemp129 = (fRec78[0] + -1.49998999f); float fTemp130 = fVec50[((IOTA - std::min(8192, std::max(0, int(fTemp129)))) & 16383)]; fVec51[0] = fTemp130; float fTemp131 = std::floor(fTemp129); fRec77[0] = (fVec51[1] - (((fTemp131 + (2.0f - fRec78[0])) * (fRec77[1] - fTemp130)) / (fRec78[0] - fTemp131))); - fRec62[0] = fRec77[0]; - fVec52[(IOTA & 16383)] = (0.0f - ((fRec62[1] * fTemp29) + (fTemp108 * fTemp7))); - fRec79[0] = (fSlow65 + (0.999000013f * (fRec79[1] + float((iSlow64 * iTemp14))))); + fRec8[0] = fRec77[0]; + fVec52[(IOTA & 16383)] = (0.0f - ((fTemp5 * fRec8[1]) + (fTemp31 * fTemp107))); + fRec79[0] = (fSlow65 + (0.999000013f * (fRec79[1] + float((iSlow64 * iTemp17))))); float fTemp132 = (fRec79[0] + -1.49998999f); float fTemp133 = fVec52[((IOTA - std::min(8192, std::max(0, int(fTemp132)))) & 16383)]; fVec53[0] = fTemp133; float fTemp134 = std::floor(fTemp132); - fRec60[0] = (fVec53[1] - (((fTemp134 + (2.0f - fRec79[0])) * (fRec60[1] - fTemp133)) / (fRec79[0] - fTemp134))); - fRec58[0] = fRec60[0]; - fVec54[(IOTA & 16383)] = ((fTemp114 * fTemp7) + (fRec61[1] * fTemp29)); - fRec81[0] = (fSlow67 + (0.999000013f * (fRec81[1] + float((iSlow66 * iTemp14))))); + fRec6[0] = (fVec53[1] - (((fTemp134 + (2.0f - fRec79[0])) * (fRec6[1] - fTemp133)) / (fRec79[0] - fTemp134))); + fRec4[0] = fRec6[0]; + fVec54[(IOTA & 16383)] = ((fRec7[1] * fTemp5) + (fTemp31 * fTemp114)); + fRec81[0] = (fSlow67 + (0.999000013f * (fRec81[1] + float((iSlow66 * iTemp17))))); float fTemp135 = (fRec81[0] + -1.49998999f); float fTemp136 = fVec54[((IOTA - std::min(8192, std::max(0, int(fTemp135)))) & 16383)]; fVec55[0] = fTemp136; float fTemp137 = std::floor(fTemp135); fRec80[0] = (fVec55[1] - (((fTemp137 + (2.0f - fRec81[0])) * (fRec80[1] - fTemp136)) / (fRec81[0] - fTemp137))); - fRec59[0] = fRec80[0]; + fRec5[0] = fRec80[0]; float fTemp138 = (1.0f - (0.5f * fTemp3)); - fRec3[0] = ((0.5f * (fTemp3 * fRec3[1])) + (((fTemp106 * fTemp7) + (fRec58[1] * fTemp29)) * fTemp138)); + fRec3[0] = ((0.5f * (fTemp3 * fRec3[1])) + (((fRec4[1] * fTemp5) + (fTemp31 * fTemp113)) * fTemp138)); fRec1[(IOTA & 1023)] = fRec3[0]; - fRec82[0] = ((0.5f * (fTemp3 * fRec82[1])) + (fTemp138 * ((fRec59[1] * fTemp29) + (fTemp107 * fTemp7)))); + fRec82[0] = ((0.5f * (fTemp3 * fRec82[1])) + (fTemp138 * ((fTemp5 * fRec5[1]) + (fTemp31 * fTemp106)))); fRec2[(IOTA & 1023)] = fRec82[0]; - output0[i] = FAUSTFLOAT((iSlow0?fTemp0:((fTemp1 * fTemp2) + (fRec0[0] * fRec1[((IOTA - 0) & 1023)])))); - output1[i] = FAUSTFLOAT((iSlow0?fTemp30:((fTemp2 * fTemp31) + (fRec0[0] * fRec2[((IOTA - 0) & 1023)])))); + output0[i] = FAUSTFLOAT((iSlow0 ? fTemp0 : ((fTemp1 * fTemp2) + (fRec0[0] * fRec1[((IOTA - 0) & 1023)])))); + output1[i] = FAUSTFLOAT((iSlow0 ? fTemp8 : ((fTemp2 * fTemp9) + (fRec0[0] * fRec2[((IOTA - 0) & 1023)])))); iVec0[1] = iVec0[0]; fRec0[1] = fRec0[0]; fVec1[1] = fVec1[0]; fVec2[1] = fVec2[0]; - fRec4[1] = fRec4[0]; - fRec5[1] = fRec5[0]; - fRec6[1] = fRec6[0]; - fRec7[1] = fRec7[0]; fVec3[1] = fVec3[0]; + fRec40[1] = fRec40[0]; + fRec41[1] = fRec41[0]; + fRec42[1] = fRec42[0]; + fRec43[1] = fRec43[0]; fVec4[1] = fVec4[0]; - fRec8[1] = fRec8[0]; - fRec9[1] = fRec9[0]; + fVec5[1] = fVec5[0]; + fRec44[1] = fRec44[0]; + fRec45[1] = fRec45[0]; IOTA = (IOTA + 1); - fVec6[1] = fVec6[0]; - fRec22[1] = fRec22[0]; - fVec9[1] = fVec9[0]; - fRec21[1] = fRec21[0]; - fRec19[1] = fRec19[0]; - fRec24[1] = fRec24[0]; + fRec46[1] = fRec46[0]; + fVec8[1] = fVec8[0]; + fRec39[1] = fRec39[0]; + fRec37[1] = fRec37[0]; + fRec48[1] = fRec48[0]; fVec11[1] = fVec11[0]; - fRec23[1] = fRec23[0]; - fRec20[1] = fRec20[0]; - fRec25[1] = fRec25[0]; + fRec47[1] = fRec47[0]; + fRec38[1] = fRec38[0]; + fRec49[1] = fRec49[0]; fVec13[1] = fVec13[0]; - fRec18[1] = fRec18[0]; - fRec16[1] = fRec16[0]; - fRec27[1] = fRec27[0]; + fRec36[1] = fRec36[0]; + fRec34[1] = fRec34[0]; + fRec51[1] = fRec51[0]; fVec15[1] = fVec15[0]; - fRec26[1] = fRec26[0]; - fRec17[1] = fRec17[0]; - fRec28[1] = fRec28[0]; + fRec50[1] = fRec50[0]; + fRec35[1] = fRec35[0]; + fRec52[1] = fRec52[0]; fVec17[1] = fVec17[0]; - fRec15[1] = fRec15[0]; - fRec13[1] = fRec13[0]; - fRec30[1] = fRec30[0]; - fVec19[1] = fVec19[0]; - fRec29[1] = fRec29[0]; - fRec14[1] = fRec14[0]; + fRec33[1] = fRec33[0]; fRec31[1] = fRec31[0]; + fRec54[1] = fRec54[0]; + fVec19[1] = fVec19[0]; + fRec53[1] = fRec53[0]; + fRec32[1] = fRec32[0]; + fRec55[1] = fRec55[0]; fVec21[1] = fVec21[0]; - fRec12[1] = fRec12[0]; - fRec10[1] = fRec10[0]; - fRec33[1] = fRec33[0]; + fRec30[1] = fRec30[0]; + fRec28[1] = fRec28[0]; + fRec57[1] = fRec57[0]; fVec23[1] = fVec23[0]; - fRec32[1] = fRec32[0]; - fRec11[1] = fRec11[0]; - fRec46[1] = fRec46[0]; + fRec56[1] = fRec56[0]; + fRec29[1] = fRec29[0]; + fRec58[1] = fRec58[0]; fVec25[1] = fVec25[0]; - fRec45[1] = fRec45[0]; - fRec43[1] = fRec43[0]; - fRec48[1] = fRec48[0]; + fRec27[1] = fRec27[0]; + fRec25[1] = fRec25[0]; + fRec60[1] = fRec60[0]; fVec27[1] = fVec27[0]; - fRec47[1] = fRec47[0]; - fRec44[1] = fRec44[0]; - fRec49[1] = fRec49[0]; + fRec59[1] = fRec59[0]; + fRec26[1] = fRec26[0]; + fRec61[1] = fRec61[0]; fVec29[1] = fVec29[0]; - fRec42[1] = fRec42[0]; - fRec40[1] = fRec40[0]; - fRec51[1] = fRec51[0]; + fRec24[1] = fRec24[0]; + fRec22[1] = fRec22[0]; + fRec63[1] = fRec63[0]; fVec31[1] = fVec31[0]; - fRec50[1] = fRec50[0]; - fRec41[1] = fRec41[0]; - fRec52[1] = fRec52[0]; + fRec62[1] = fRec62[0]; + fRec23[1] = fRec23[0]; + fRec64[1] = fRec64[0]; fVec33[1] = fVec33[0]; - fRec39[1] = fRec39[0]; - fRec37[1] = fRec37[0]; - fRec54[1] = fRec54[0]; + fRec21[1] = fRec21[0]; + fRec19[1] = fRec19[0]; + fRec66[1] = fRec66[0]; fVec35[1] = fVec35[0]; - fRec53[1] = fRec53[0]; - fRec38[1] = fRec38[0]; - fRec55[1] = fRec55[0]; + fRec65[1] = fRec65[0]; + fRec20[1] = fRec20[0]; + fRec67[1] = fRec67[0]; fVec37[1] = fVec37[0]; - fRec36[1] = fRec36[0]; - fRec34[1] = fRec34[0]; - fRec57[1] = fRec57[0]; + fRec18[1] = fRec18[0]; + fRec16[1] = fRec16[0]; + fRec69[1] = fRec69[0]; fVec39[1] = fVec39[0]; - fRec56[1] = fRec56[0]; - fRec35[1] = fRec35[0]; + fRec68[1] = fRec68[0]; + fRec17[1] = fRec17[0]; fRec70[1] = fRec70[0]; fVec41[1] = fVec41[0]; - fRec69[1] = fRec69[0]; - fRec67[1] = fRec67[0]; + fRec15[1] = fRec15[0]; + fRec13[1] = fRec13[0]; fRec72[1] = fRec72[0]; fVec43[1] = fVec43[0]; fRec71[1] = fRec71[0]; - fRec68[1] = fRec68[0]; + fRec14[1] = fRec14[0]; fRec73[1] = fRec73[0]; fVec45[1] = fVec45[0]; - fRec66[1] = fRec66[0]; - fRec64[1] = fRec64[0]; + fRec12[1] = fRec12[0]; + fRec10[1] = fRec10[0]; fRec75[1] = fRec75[0]; fVec47[1] = fVec47[0]; fRec74[1] = fRec74[0]; - fRec65[1] = fRec65[0]; + fRec11[1] = fRec11[0]; fRec76[1] = fRec76[0]; fVec49[1] = fVec49[0]; - fRec63[1] = fRec63[0]; - fRec61[1] = fRec61[0]; + fRec9[1] = fRec9[0]; + fRec7[1] = fRec7[0]; fRec78[1] = fRec78[0]; fVec51[1] = fVec51[0]; fRec77[1] = fRec77[0]; - fRec62[1] = fRec62[0]; + fRec8[1] = fRec8[0]; fRec79[1] = fRec79[0]; fVec53[1] = fVec53[0]; - fRec60[1] = fRec60[0]; - fRec58[1] = fRec58[0]; + fRec6[1] = fRec6[0]; + fRec4[1] = fRec4[0]; fRec81[1] = fRec81[0]; fVec55[1] = fVec55[0]; fRec80[1] = fRec80[0]; - fRec59[1] = fRec59[0]; + fRec5[1] = fRec5[0]; fRec3[1] = fRec3[0]; fRec82[1] = fRec82[0]; - } - } - }; // clang-format on #endif diff --git a/ceammc/ext/src/fx/fx_looper.cpp b/ceammc/ext/src/fx/fx_looper.cpp index 801ba76632..c043f0ab8f 100644 --- a/ceammc/ext/src/fx/fx_looper.cpp +++ b/ceammc/ext/src/fx/fx_looper.cpp @@ -92,6 +92,7 @@ FxLooper::FxLooper(const PdArgs& args) initTansitionTable(); capacity_sec_ = new FloatProperty("@capacity", positionalFloatArgument(0, DEFAULT_CAPACITY_SEC)); + capacity_sec_->info().setUnits(PropertyInfoUnits::SEC); createProperty(capacity_sec_); loop_bang_ = new BoolProperty("@loop_bang", false); @@ -121,10 +122,35 @@ FxLooper::FxLooper(const PdArgs& args) round_ = new IntProperty("@round", 0); createProperty(round_); - createCbProperty("@length", &FxLooper::p_length); - createCbProperty("@play_pos", &FxLooper::p_play_pos); - createCbProperty("@play_phase", &FxLooper::p_play_phase); - createCbProperty("@state", &FxLooper::p_state); + { + PropertyInfo& pi = createCbProperty("@length", &FxLooper::p_length)->info(); + pi.setType(PropertyInfoType::FLOAT); + pi.setMin(0); + pi.setUnits(PropertyInfoUnits::SEC); + } + + { + PropertyInfo& pi = createCbProperty("@play_pos", &FxLooper::p_play_pos)->info(); + pi.setUnits(PropertyInfoUnits::SEC); + pi.setMin(0); + pi.setType(PropertyInfoType::FLOAT); + } + + { + PropertyInfo& pi = createCbProperty("@play_phase", &FxLooper::p_play_phase)->info(); + pi.setType(PropertyInfoType::FLOAT); + pi.setRange(0, 1); + } + + { + PropertyInfo& pi = createCbProperty("@state", &FxLooper::p_state)->info(); + pi.setType(PropertyInfoType::SYMBOL); + pi.addEnum("record"); + pi.addEnum("init"); + pi.addEnum("overdub"); + pi.addEnum("stop"); + pi.addEnum("play"); + } array_name_ = new SymbolProperty("@array", &s_); createProperty(array_name_); diff --git a/ceammc/ext/src/fx/fx_pitchshift.h b/ceammc/ext/src/fx/fx_pitchshift.h index 24fcc70897..6a83470a87 100644 --- a/ceammc/ext/src/fx/fx_pitchshift.h +++ b/ceammc/ext/src/fx/fx_pitchshift.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "fx.pitchshift" -Code generated with Faust 2.8.5 (https://faust.grame.fr) -Compilation options: cpp, -scal -ftz 0 +Code generated with Faust 2.22.1 (https://faust.grame.fr) +Compilation options: -lang cpp -scal -ftz 0 ------------------------------------------------------------ */ #ifndef __fx_pitchshift_H__ @@ -14,6 +14,7 @@ Compilation options: cpp, -scal -ftz 0 #include #include +/************************** BEGIN dsp.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -96,23 +97,23 @@ class dsp { * - static class 'classInit': static tables initialization * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void init(int samplingRate) = 0; + virtual void init(int sample_rate) = 0; /** * Init instance state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceInit(int samplingRate) = 0; + virtual void instanceInit(int sample_rate) = 0; /** * Init instance constant state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceConstants(int samplingRate) = 0; + virtual void instanceConstants(int sample_rate) = 0; /* Init default control parameters values */ virtual void instanceResetUserInterface() = 0; @@ -149,8 +150,8 @@ class dsp { * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the number of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) * */ virtual void compute(double /*date_usec*/, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -169,16 +170,16 @@ class decorator_dsp : public dsp { public: - decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + decorator_dsp(dsp* dsp = nullptr):fDSP(dsp) {} virtual ~decorator_dsp() { delete fDSP; } virtual int getNumInputs() { return fDSP->getNumInputs(); } virtual int getNumOutputs() { return fDSP->getNumOutputs(); } virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } virtual int getSampleRate() { return fDSP->getSampleRate(); } - virtual void init(int samplingRate) { fDSP->init(samplingRate); } - virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } - virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void init(int sample_rate) { fDSP->init(sample_rate); } + virtual void instanceInit(int sample_rate) { fDSP->instanceInit(sample_rate); } + virtual void instanceConstants(int sample_rate) { fDSP->instanceConstants(sample_rate); } virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } @@ -233,6 +234,8 @@ class dsp_factory { #endif #endif +/************************** END dsp.h **************************/ +/************************** BEGIN UI.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -272,45 +275,54 @@ class dsp_factory { struct Soundfile; -class UI +template +class UIReal { - + public: - - UI() {} - - virtual ~UI() {} - + + UIReal() {} + virtual ~UIReal() {} + // -- widget's layouts - + virtual void openTabBox(const char* label) = 0; virtual void openHorizontalBox(const char* label) = 0; virtual void openVerticalBox(const char* label) = 0; virtual void closeBox() = 0; - + // -- active widgets - - virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - + + virtual void addButton(const char* label, REAL* zone) = 0; + virtual void addCheckButton(const char* label, REAL* zone) = 0; + virtual void addVerticalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addHorizontalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addNumEntry(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + // -- passive widgets - - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - + + virtual void addHorizontalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + virtual void addVerticalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + // -- soundfiles - + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; - + // -- metadata declarations + + virtual void declare(REAL* zone, const char* key, const char* val) {} +}; - virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +struct UI : public UIReal +{ + + UI() {} + virtual ~UI() {} }; #endif +/************************** END UI.h **************************/ +/************************** BEGIN meta.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -339,11 +351,14 @@ class UI struct Meta { - virtual void declare(const char* key, const char* value) = 0; virtual ~Meta() {}; + virtual void declare(const char* key, const char* value) = 0; + }; #endif +/************************** END meta.h **************************/ +/************************** BEGIN misc.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -366,15 +381,16 @@ struct Meta that work under terms of your choice, so long as this FAUST architecture section is not modified. ************************************************************************/ - + #ifndef __misc__ #define __misc__ #include #include -#include -#include #include +#include +#include +#include using std::max; @@ -382,41 +398,79 @@ using std::min; struct XXXX_Meta : std::map { - void declare(const char* key, const char* value) { (*this)[key]=value; } + void declare(const char* key, const char* value) { (*this)[key] = value; } }; struct MY_Meta : Meta, std::map { - void declare(const char* key, const char* value) { (*this)[key]=value; } + void declare(const char* key, const char* value) { (*this)[key] = value; } }; -inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } +static int lsr(int x, int n) { return int(((unsigned int)x) >> n); } -inline int int2pow2(int x) { int r = 0; while ((1<declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.0"); + m->declare("basics.lib/version", "0.1"); m->declare("ceammc.lib/name", "Ceammc PureData misc utils"); m->declare("ceammc.lib/version", "0.1.1"); m->declare("ceammc_ui.lib/name", "CEAMMC faust default UI elements"); m->declare("ceammc_ui.lib/version", "0.1.1"); m->declare("delays.lib/name", "Faust Delay Library"); - m->declare("delays.lib/version", "0.0"); - m->declare("filename", "fx_pitchshift"); + m->declare("delays.lib/version", "0.1"); + m->declare("filename", "fx_pitchshift.dsp"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); @@ -501,15 +556,13 @@ class fx_pitchshift : public dsp { virtual int getNumInputs() { return 1; - } virtual int getNumOutputs() { return 1; - } virtual int getInputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -518,14 +571,12 @@ class fx_pitchshift : public dsp { rate = -1; break; } - } return rate; - } virtual int getOutputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -534,22 +585,18 @@ class fx_pitchshift : public dsp { rate = -1; break; } - } return rate; - } - static void classInit(int samplingFreq) { - + static void classInit(int sample_rate) { } - virtual void instanceConstants(int samplingFreq) { - fSamplingFreq = samplingFreq; - fConst0 = std::min(192000.0f, std::max(1.0f, float(fSamplingFreq))); + virtual void instanceConstants(int sample_rate) { + fSampleRate = sample_rate; + fConst0 = std::min(192000.0f, std::max(1.0f, float(fSampleRate))); fConst1 = (0.00100000005f * fConst0); fConst2 = (1000.0f / fConst0); - } virtual void instanceResetUserInterface() { @@ -558,36 +605,30 @@ class fx_pitchshift : public dsp { fVslider0 = FAUSTFLOAT(200.0f); fVslider1 = FAUSTFLOAT(0.0f); fVslider2 = FAUSTFLOAT(100.0f); - } virtual void instanceClear() { IOTA = 0; for (int l0 = 0; (l0 < 131072); l0 = (l0 + 1)) { fVec0[l0] = 0.0f; - } for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { fRec0[l1] = 0.0f; - } for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { fRec2[l2] = 0.0f; - } for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { fRec1[l3] = 0.0f; - } - } - virtual void init(int samplingFreq) { - classInit(samplingFreq); - instanceInit(samplingFreq); + virtual void init(int sample_rate) { + classInit(sample_rate); + instanceInit(sample_rate); } - virtual void instanceInit(int samplingFreq) { - instanceConstants(samplingFreq); + virtual void instanceInit(int sample_rate) { + instanceConstants(sample_rate); instanceResetUserInterface(); instanceClear(); } @@ -595,9 +636,9 @@ class fx_pitchshift : public dsp { virtual fx_pitchshift* clone() { return new fx_pitchshift(); } + virtual int getSampleRate() { - return fSamplingFreq; - + return fSampleRate; } virtual void buildUserInterface(UI* ui_interface) { @@ -611,7 +652,6 @@ class fx_pitchshift : public dsp { ui_interface->declare(&fVslider0, "unit", "ms"); ui_interface->addVerticalSlider("window", &fVslider0, 200.0f, 10.0f, 2000.0f, 0.100000001f); ui_interface->closeBox(); - } virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { @@ -624,7 +664,7 @@ class fx_pitchshift : public dsp { float fSlow4 = (fConst2 / float(fVslider2)); for (int i = 0; (i < count); i = (i + 1)) { float fTemp0 = float(input0[i]); - float fTemp1 = (iSlow0?0.0f:fTemp0); + float fTemp1 = (iSlow0 ? 0.0f : fTemp0); fVec0[(IOTA & 131071)] = fTemp1; fRec0[0] = (fSlow1 + (0.999000013f * fRec0[1])); fRec2[0] = (fSlow3 + (0.999000013f * fRec2[1])); @@ -632,21 +672,18 @@ class fx_pitchshift : public dsp { int iTemp2 = int(fRec1[0]); float fTemp3 = std::floor(fRec1[0]); float fTemp4 = (1.0f - fRec1[0]); - float fTemp5 = std::min((fSlow4 * fRec1[0]), 1.0f); + float fTemp5 = std::min((fSlow4 * fRec1[0]), 1.0f); float fTemp6 = (fSlow2 + fRec1[0]); int iTemp7 = int(fTemp6); float fTemp8 = std::floor(fTemp6); - output0[i] = FAUSTFLOAT((iSlow0?fTemp0:((fTemp1 * (1.0f - fRec0[0])) + (fRec0[0] * ((((fVec0[((IOTA - std::min(65537, std::max(0, iTemp2))) & 131071)] * (fTemp3 + fTemp4)) + ((fRec1[0] - fTemp3) * fVec0[((IOTA - std::min(65537, std::max(0, (iTemp2 + 1)))) & 131071)])) * fTemp5) + (((fVec0[((IOTA - std::min(65537, std::max(0, iTemp7))) & 131071)] * ((fTemp8 + fTemp4) - fSlow2)) + ((fSlow2 + (fRec1[0] - fTemp8)) * fVec0[((IOTA - std::min(65537, std::max(0, (iTemp7 + 1)))) & 131071)])) * (1.0f - fTemp5))))))); + output0[i] = FAUSTFLOAT((iSlow0 ? fTemp0 : ((fTemp1 * (1.0f - fRec0[0])) + (fRec0[0] * ((((fVec0[((IOTA - std::min(65537, std::max(0, iTemp2))) & 131071)] * (fTemp3 + fTemp4)) + ((fRec1[0] - fTemp3) * fVec0[((IOTA - std::min(65537, std::max(0, (iTemp2 + 1)))) & 131071)])) * fTemp5) + (((fVec0[((IOTA - std::min(65537, std::max(0, iTemp7))) & 131071)] * ((fTemp8 + fTemp4) - fSlow2)) + ((fSlow2 + (fRec1[0] - fTemp8)) * fVec0[((IOTA - std::min(65537, std::max(0, (iTemp7 + 1)))) & 131071)])) * (1.0f - fTemp5))))))); IOTA = (IOTA + 1); fRec0[1] = fRec0[0]; fRec2[1] = fRec2[0]; fRec1[1] = fRec1[0]; - } - } - }; // clang-format on #endif diff --git a/ceammc/ext/src/fx/fx_sdelay.h b/ceammc/ext/src/fx/fx_sdelay.h index 1a70696dfd..0b1baeb605 100644 --- a/ceammc/ext/src/fx/fx_sdelay.h +++ b/ceammc/ext/src/fx/fx_sdelay.h @@ -2,10 +2,10 @@ author: "Yann Orlarey" copyright: "Grame" license: "STK-4.3" -name: "sdelay" +name: "fx.sdelay" version: "1.0" -Code generated with Faust 2.8.5 (https://faust.grame.fr) -Compilation options: cpp, -scal -ftz 0 +Code generated with Faust 2.22.1 (https://faust.grame.fr) +Compilation options: -lang cpp -scal -ftz 0 ------------------------------------------------------------ */ #ifndef __fx_sdelay_H__ @@ -18,6 +18,7 @@ Compilation options: cpp, -scal -ftz 0 #include #include +/************************** BEGIN dsp.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -100,23 +101,23 @@ class dsp { * - static class 'classInit': static tables initialization * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void init(int samplingRate) = 0; + virtual void init(int sample_rate) = 0; /** * Init instance state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceInit(int samplingRate) = 0; + virtual void instanceInit(int sample_rate) = 0; /** * Init instance constant state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceConstants(int samplingRate) = 0; + virtual void instanceConstants(int sample_rate) = 0; /* Init default control parameters values */ virtual void instanceResetUserInterface() = 0; @@ -153,8 +154,8 @@ class dsp { * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the number of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) * */ virtual void compute(double /*date_usec*/, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -173,16 +174,16 @@ class decorator_dsp : public dsp { public: - decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + decorator_dsp(dsp* dsp = nullptr):fDSP(dsp) {} virtual ~decorator_dsp() { delete fDSP; } virtual int getNumInputs() { return fDSP->getNumInputs(); } virtual int getNumOutputs() { return fDSP->getNumOutputs(); } virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } virtual int getSampleRate() { return fDSP->getSampleRate(); } - virtual void init(int samplingRate) { fDSP->init(samplingRate); } - virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } - virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void init(int sample_rate) { fDSP->init(sample_rate); } + virtual void instanceInit(int sample_rate) { fDSP->instanceInit(sample_rate); } + virtual void instanceConstants(int sample_rate) { fDSP->instanceConstants(sample_rate); } virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } @@ -237,6 +238,8 @@ class dsp_factory { #endif #endif +/************************** END dsp.h **************************/ +/************************** BEGIN UI.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -276,45 +279,54 @@ class dsp_factory { struct Soundfile; -class UI +template +class UIReal { - + public: - - UI() {} - - virtual ~UI() {} - + + UIReal() {} + virtual ~UIReal() {} + // -- widget's layouts - + virtual void openTabBox(const char* label) = 0; virtual void openHorizontalBox(const char* label) = 0; virtual void openVerticalBox(const char* label) = 0; virtual void closeBox() = 0; - + // -- active widgets - - virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - + + virtual void addButton(const char* label, REAL* zone) = 0; + virtual void addCheckButton(const char* label, REAL* zone) = 0; + virtual void addVerticalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addHorizontalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addNumEntry(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + // -- passive widgets - - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - + + virtual void addHorizontalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + virtual void addVerticalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + // -- soundfiles - + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; - + // -- metadata declarations + + virtual void declare(REAL* zone, const char* key, const char* val) {} +}; + +struct UI : public UIReal +{ - virtual void declare(FAUSTFLOAT*, const char*, const char*) {} + UI() {} + virtual ~UI() {} }; #endif +/************************** END UI.h **************************/ +/************************** BEGIN meta.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -343,11 +355,14 @@ class UI struct Meta { - virtual void declare(const char* key, const char* value) = 0; virtual ~Meta() {}; + virtual void declare(const char* key, const char* value) = 0; + }; #endif +/************************** END meta.h **************************/ +/************************** BEGIN misc.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -370,15 +385,16 @@ struct Meta that work under terms of your choice, so long as this FAUST architecture section is not modified. ************************************************************************/ - + #ifndef __misc__ #define __misc__ #include #include -#include -#include #include +#include +#include +#include using std::max; @@ -386,41 +402,79 @@ using std::min; struct XXXX_Meta : std::map { - void declare(const char* key, const char* value) { (*this)[key]=value; } + void declare(const char* key, const char* value) { (*this)[key] = value; } }; struct MY_Meta : Meta, std::map { - void declare(const char* key, const char* value) { (*this)[key]=value; } + void declare(const char* key, const char* value) { (*this)[key] = value; } }; -inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } +static int lsr(int x, int n) { return int(((unsigned int)x) >> n); } -inline int int2pow2(int x) { int r = 0; while ((1<declare("author", "Yann Orlarey"); m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.0"); + m->declare("basics.lib/version", "0.1"); m->declare("ceammc.lib/name", "Ceammc PureData misc utils"); m->declare("ceammc.lib/version", "0.1.1"); m->declare("ceammc_ui.lib/name", "CEAMMC faust default UI elements"); m->declare("ceammc_ui.lib/version", "0.1.1"); m->declare("copyright", "Grame"); m->declare("delays.lib/name", "Faust Delay Library"); - m->declare("delays.lib/version", "0.0"); - m->declare("filename", "fx_sdelay"); + m->declare("delays.lib/version", "0.1"); + m->declare("filename", "fx_sdelay.dsp"); m->declare("license", "STK-4.3"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); m->declare("maths.lib/name", "Faust Math Library"); m->declare("maths.lib/version", "2.1"); - m->declare("name", "sdelay"); + m->declare("name", "fx.sdelay"); m->declare("signals.lib/name", "Faust Signal Routing Library"); m->declare("signals.lib/version", "0.0"); m->declare("version", "1.0"); @@ -512,15 +567,13 @@ class fx_sdelay : public dsp { virtual int getNumInputs() { return 1; - } virtual int getNumOutputs() { return 1; - } virtual int getInputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -529,14 +582,12 @@ class fx_sdelay : public dsp { rate = -1; break; } - } return rate; - } virtual int getOutputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -545,77 +596,63 @@ class fx_sdelay : public dsp { rate = -1; break; } - } return rate; - } - static void classInit(int samplingFreq) { - + static void classInit(int sample_rate) { } - virtual void instanceConstants(int samplingFreq) { - fSamplingFreq = samplingFreq; - fConst0 = std::min(192000.0f, std::max(1.0f, float(fSamplingFreq))); - iConst1 = int((6.0f * fConst0)); - fConst2 = (9.99999997e-07f * fConst0); - fConst3 = (1000.0f / fConst0); - + virtual void instanceConstants(int sample_rate) { + fSampleRate = sample_rate; + fConst0 = std::min(192000.0f, std::max(1.0f, float(fSampleRate))); + fConst1 = (9.99999997e-07f * fConst0); + fConst2 = (1000.0f / fConst0); + iConst3 = int((6.0f * fConst0)); } virtual void instanceResetUserInterface() { fCheckbox0 = FAUSTFLOAT(0.0f); fHslider0 = FAUSTFLOAT(1.0f); - fHslider1 = FAUSTFLOAT(0.0f); - fHslider2 = FAUSTFLOAT(1.0f); - fHslider3 = FAUSTFLOAT(20.0f); - + fHslider1 = FAUSTFLOAT(1.0f); + fHslider2 = FAUSTFLOAT(20.0f); + fHslider3 = FAUSTFLOAT(0.0f); } virtual void instanceClear() { for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { fRec0[l0] = 0.0f; - } - IOTA = 0; - for (int l1 = 0; (l1 < 2097152); l1 = (l1 + 1)) { - fVec0[l1] = 0.0f; - + for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + fRec6[l1] = 0.0f; } for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { - fRec6[l2] = 0.0f; - + fRec2[l2] = 0.0f; } for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { - fRec2[l3] = 0.0f; - + fRec3[l3] = 0.0f; } for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { - fRec3[l4] = 0.0f; - + fRec4[l4] = 0.0f; } for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { - fRec4[l5] = 0.0f; - + fRec5[l5] = 0.0f; } - for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { - fRec5[l6] = 0.0f; - + IOTA = 0; + for (int l6 = 0; (l6 < 2097152); l6 = (l6 + 1)) { + fVec0[l6] = 0.0f; } for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) { fRec1[l7] = 0.0f; - } - } - virtual void init(int samplingFreq) { - classInit(samplingFreq); - instanceInit(samplingFreq); + virtual void init(int sample_rate) { + classInit(sample_rate); + instanceInit(sample_rate); } - virtual void instanceInit(int samplingFreq) { - instanceConstants(samplingFreq); + virtual void instanceInit(int sample_rate) { + instanceConstants(sample_rate); instanceResetUserInterface(); instanceClear(); } @@ -623,21 +660,20 @@ class fx_sdelay : public dsp { virtual fx_sdelay* clone() { return new fx_sdelay(); } + virtual int getSampleRate() { - return fSamplingFreq; - + return fSampleRate; } virtual void buildUserInterface(UI* ui_interface) { - ui_interface->openVerticalBox("sdelay"); + ui_interface->openVerticalBox("fx.sdelay"); ui_interface->addCheckButton("bypass", &fCheckbox0); - ui_interface->addHorizontalSlider("delay", &fHslider2, 1.0f, 0.0f, 6000.0f, 0.100000001f); + ui_interface->addHorizontalSlider("delay", &fHslider1, 1.0f, 0.0f, 6000.0f, 0.100000001f); ui_interface->declare(&fHslider0, "style", "knob"); ui_interface->addHorizontalSlider("drywet", &fHslider0, 1.0f, 0.0f, 1.0f, 0.00999999978f); - ui_interface->addHorizontalSlider("feedback", &fHslider1, 0.0f, 0.0f, 1.0f, 0.00100000005f); - ui_interface->addHorizontalSlider("interpolation", &fHslider3, 20.0f, 1.0f, 200.0f, 0.100000001f); + ui_interface->addHorizontalSlider("feedback", &fHslider3, 0.0f, 0.0f, 1.0f, 0.00100000005f); + ui_interface->addHorizontalSlider("interpolation", &fHslider2, 20.0f, 1.0f, 200.0f, 0.100000001f); ui_interface->closeBox(); - } virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { @@ -645,38 +681,35 @@ class fx_sdelay : public dsp { FAUSTFLOAT* output0 = outputs[0]; int iSlow0 = int(float(fCheckbox0)); float fSlow1 = (0.00100000005f * float(fHslider0)); - float fSlow2 = float(fHslider1); - float fSlow3 = (fConst2 * float(fHslider2)); - float fSlow4 = (fConst3 / float(fHslider3)); - float fSlow5 = (0.0f - fSlow4); + float fSlow2 = (fConst1 * float(fHslider1)); + float fSlow3 = (fConst2 / float(fHslider2)); + float fSlow4 = (0.0f - fSlow3); + float fSlow5 = float(fHslider3); for (int i = 0; (i < count); i = (i + 1)) { float fTemp0 = float(input0[i]); - float fTemp1 = (iSlow0?0.0f:fTemp0); + float fTemp1 = (iSlow0 ? 0.0f : fTemp0); fRec0[0] = (fSlow1 + (0.999000013f * fRec0[1])); - float fTemp2 = (fTemp1 + (fSlow2 * fRec1[1])); - fVec0[(IOTA & 2097151)] = fTemp2; - fRec6[0] = (fSlow3 + (0.999000013f * fRec6[1])); - float fTemp3 = ((fRec2[1] != 0.0f)?(((fRec3[1] > 0.0f) & (fRec3[1] < 1.0f))?fRec2[1]:0.0f):(((fRec3[1] == 0.0f) & (fRec6[0] != fRec4[1]))?fSlow4:(((fRec3[1] == 1.0f) & (fRec6[0] != fRec5[1]))?fSlow5:0.0f))); - fRec2[0] = fTemp3; - fRec3[0] = std::max(0.0f, std::min(1.0f, (fRec3[1] + fTemp3))); - fRec4[0] = (((fRec3[1] >= 1.0f) & (fRec5[1] != fRec6[0]))?fRec6[0]:fRec4[1]); - fRec5[0] = (((fRec3[1] <= 0.0f) & (fRec4[1] != fRec6[0]))?fRec6[0]:fRec5[1]); - fRec1[0] = ((fVec0[((IOTA - int(std::min(float(iConst1), std::max(0.0f, fRec4[0])))) & 2097151)] * (1.0f - fRec3[0])) + (fRec3[0] * fVec0[((IOTA - int(std::min(float(iConst1), std::max(0.0f, fRec5[0])))) & 2097151)])); - output0[i] = FAUSTFLOAT((iSlow0?fTemp0:((fTemp1 * (1.0f - fRec0[0])) + (fRec0[0] * fRec1[0])))); + fRec6[0] = (fSlow2 + (0.999000013f * fRec6[1])); + float fTemp2 = ((fRec2[1] != 0.0f) ? (((fRec3[1] > 0.0f) & (fRec3[1] < 1.0f)) ? fRec2[1] : 0.0f) : (((fRec3[1] == 0.0f) & (fRec6[0] != fRec4[1])) ? fSlow3 : (((fRec3[1] == 1.0f) & (fRec6[0] != fRec5[1])) ? fSlow4 : 0.0f))); + fRec2[0] = fTemp2; + fRec3[0] = std::max(0.0f, std::min(1.0f, (fRec3[1] + fTemp2))); + fRec4[0] = (((fRec3[1] >= 1.0f) & (fRec5[1] != fRec6[0])) ? fRec6[0] : fRec4[1]); + fRec5[0] = (((fRec3[1] <= 0.0f) & (fRec4[1] != fRec6[0])) ? fRec6[0] : fRec5[1]); + float fTemp3 = (fTemp1 + (fSlow5 * fRec1[1])); + fVec0[(IOTA & 2097151)] = fTemp3; + fRec1[0] = (((1.0f - fRec3[0]) * fVec0[((IOTA - int(std::min(float(iConst3), std::max(0.0f, fRec4[0])))) & 2097151)]) + (fRec3[0] * fVec0[((IOTA - int(std::min(float(iConst3), std::max(0.0f, fRec5[0])))) & 2097151)])); + output0[i] = FAUSTFLOAT((iSlow0 ? fTemp0 : ((fTemp1 * (1.0f - fRec0[0])) + (fRec0[0] * fRec1[0])))); fRec0[1] = fRec0[0]; - IOTA = (IOTA + 1); fRec6[1] = fRec6[0]; fRec2[1] = fRec2[0]; fRec3[1] = fRec3[0]; fRec4[1] = fRec4[0]; fRec5[1] = fRec5[0]; + IOTA = (IOTA + 1); fRec1[1] = fRec1[0]; - } - } - }; // clang-format on #endif diff --git a/ceammc/ext/src/fx/fx_vocoder.h b/ceammc/ext/src/fx/fx_vocoder.h index 76d2158f84..24260a6de5 100644 --- a/ceammc/ext/src/fx/fx_vocoder.h +++ b/ceammc/ext/src/fx/fx_vocoder.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "fx.vocoder" -Code generated with Faust 2.15.0 (https://faust.grame.fr) -Compilation options: cpp, -scal -ftz 0 +Code generated with Faust 2.22.1 (https://faust.grame.fr) +Compilation options: -lang cpp -scal -ftz 0 ------------------------------------------------------------ */ #ifndef __fx_vocoder_H__ @@ -14,6 +14,7 @@ Compilation options: cpp, -scal -ftz 0 #include #include +/************************** BEGIN dsp.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -96,23 +97,23 @@ class dsp { * - static class 'classInit': static tables initialization * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void init(int samplingRate) = 0; + virtual void init(int sample_rate) = 0; /** * Init instance state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceInit(int samplingRate) = 0; + virtual void instanceInit(int sample_rate) = 0; /** * Init instance constant state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceConstants(int samplingRate) = 0; + virtual void instanceConstants(int sample_rate) = 0; /* Init default control parameters values */ virtual void instanceResetUserInterface() = 0; @@ -149,8 +150,8 @@ class dsp { * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the number of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) * */ virtual void compute(double /*date_usec*/, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -169,16 +170,16 @@ class decorator_dsp : public dsp { public: - decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + decorator_dsp(dsp* dsp = nullptr):fDSP(dsp) {} virtual ~decorator_dsp() { delete fDSP; } virtual int getNumInputs() { return fDSP->getNumInputs(); } virtual int getNumOutputs() { return fDSP->getNumOutputs(); } virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } virtual int getSampleRate() { return fDSP->getSampleRate(); } - virtual void init(int samplingRate) { fDSP->init(samplingRate); } - virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } - virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void init(int sample_rate) { fDSP->init(sample_rate); } + virtual void instanceInit(int sample_rate) { fDSP->instanceInit(sample_rate); } + virtual void instanceConstants(int sample_rate) { fDSP->instanceConstants(sample_rate); } virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } @@ -233,6 +234,8 @@ class dsp_factory { #endif #endif +/************************** END dsp.h **************************/ +/************************** BEGIN UI.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -272,45 +275,54 @@ class dsp_factory { struct Soundfile; -class UI +template +class UIReal { - + public: - - UI() {} - - virtual ~UI() {} - + + UIReal() {} + virtual ~UIReal() {} + // -- widget's layouts - + virtual void openTabBox(const char* label) = 0; virtual void openHorizontalBox(const char* label) = 0; virtual void openVerticalBox(const char* label) = 0; virtual void closeBox() = 0; - + // -- active widgets - - virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - + + virtual void addButton(const char* label, REAL* zone) = 0; + virtual void addCheckButton(const char* label, REAL* zone) = 0; + virtual void addVerticalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addHorizontalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addNumEntry(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + // -- passive widgets - - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - + + virtual void addHorizontalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + virtual void addVerticalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + // -- soundfiles - + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; - + // -- metadata declarations + + virtual void declare(REAL* zone, const char* key, const char* val) {} +}; - virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +struct UI : public UIReal +{ + + UI() {} + virtual ~UI() {} }; #endif +/************************** END UI.h **************************/ +/************************** BEGIN meta.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -339,11 +351,14 @@ class UI struct Meta { - virtual void declare(const char* key, const char* value) = 0; virtual ~Meta() {}; + virtual void declare(const char* key, const char* value) = 0; + }; #endif +/************************** END meta.h **************************/ +/************************** BEGIN misc.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -366,7 +381,7 @@ struct Meta that work under terms of your choice, so long as this FAUST architecture section is not modified. ************************************************************************/ - + #ifndef __misc__ #define __misc__ @@ -374,6 +389,8 @@ struct Meta #include #include #include +#include +#include using std::max; @@ -395,27 +412,65 @@ static int int2pow2(int x) { int r = 0; while ((1<declare("analyzers.lib/name", "Faust Analyzer Library"); m->declare("analyzers.lib/version", "0.0"); m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.0"); + m->declare("basics.lib/version", "0.1"); m->declare("ceammc.lib/name", "Ceammc PureData misc utils"); m->declare("ceammc.lib/version", "0.1.1"); - m->declare("filename", "fx_vocoder"); + m->declare("filename", "fx_vocoder.dsp"); + m->declare("filters.lib/fir:author", "Julius O. Smith III"); + m->declare("filters.lib/fir:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/fir:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/iir:author", "Julius O. Smith III"); + m->declare("filters.lib/iir:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/iir:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/lowpass0_highpass1", "Copyright (C) 2003-2019 by Julius O. Smith III "); m->declare("filters.lib/name", "Faust Filters Library"); - m->declare("filters.lib/version", "0.0"); + m->declare("filters.lib/resonbp:author", "Julius O. Smith III"); + m->declare("filters.lib/resonbp:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/resonbp:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/tf2:author", "Julius O. Smith III"); + m->declare("filters.lib/tf2:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/tf2:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/tf2s:author", "Julius O. Smith III"); + m->declare("filters.lib/tf2s:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/tf2s:license", "MIT-style STK-4.3 license"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); @@ -722,15 +792,13 @@ class fx_vocoder : public dsp { virtual int getNumInputs() { return 2; - } virtual int getNumOutputs() { return 1; - } virtual int getInputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -743,14 +811,12 @@ class fx_vocoder : public dsp { rate = -1; break; } - } return rate; - } virtual int getOutputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -759,656 +825,520 @@ class fx_vocoder : public dsp { rate = -1; break; } - } return rate; - } - static void classInit(int samplingFreq) { - + static void classInit(int sample_rate) { } - virtual void instanceConstants(int samplingFreq) { - fSamplingFreq = samplingFreq; - fConst0 = std::min(192000.0f, std::max(1.0f, float(fSamplingFreq))); - fConst1 = std::tan((33089.8789f / fConst0)); + virtual void instanceConstants(int sample_rate) { + fSampleRate = sample_rate; + fConst0 = std::min(192000.0f, std::max(1.0f, float(fSampleRate))); + fConst1 = std::tan((40212.3867f / fConst0)); fConst2 = (1.0f / fConst1); fConst3 = (2.0f * (1.0f - (1.0f / fx_vocoder_faustpower2_f(fConst1)))); fConst4 = (1.0f / fConst0); - fConst5 = std::tan((27228.9238f / fConst0)); + fConst5 = std::tan((2159.68066f / fConst0)); fConst6 = (1.0f / fConst5); fConst7 = (2.0f * (1.0f - (1.0f / fx_vocoder_faustpower2_f(fConst5)))); - fConst8 = std::tan((22406.0742f / fConst0)); + fConst8 = std::tan((990.217957f / fConst0)); fConst9 = (1.0f / fConst8); fConst10 = (2.0f * (1.0f - (1.0f / fx_vocoder_faustpower2_f(fConst8)))); - fConst11 = std::tan((18437.4609f / fConst0)); + fConst11 = std::tan((814.828308f / fConst0)); fConst12 = (1.0f / fConst11); fConst13 = (2.0f * (1.0f - (1.0f / fx_vocoder_faustpower2_f(fConst11)))); - fConst14 = std::tan((15171.7754f / fConst0)); + fConst14 = std::tan((373.600433f / fConst0)); fConst15 = (1.0f / fConst14); fConst16 = (2.0f * (1.0f - (1.0f / fx_vocoder_faustpower2_f(fConst14)))); - fConst17 = std::tan((12484.5166f / fConst0)); + fConst17 = std::tan((171.296555f / fConst0)); fConst18 = (1.0f / fConst17); fConst19 = (2.0f * (1.0f - (1.0f / fx_vocoder_faustpower2_f(fConst17)))); - fConst20 = std::tan((10273.2305f / fConst0)); + fConst20 = std::tan((33089.8789f / fConst0)); fConst21 = (1.0f / fConst20); fConst22 = (2.0f * (1.0f - (1.0f / fx_vocoder_faustpower2_f(fConst20)))); - fConst23 = std::tan((3189.4729f / fConst0)); + fConst23 = std::tan((27228.9238f / fConst0)); fConst24 = (1.0f / fConst23); fConst25 = (2.0f * (1.0f - (1.0f / fx_vocoder_faustpower2_f(fConst23)))); - fConst26 = std::tan((2624.54639f / fConst0)); + fConst26 = std::tan((22406.0742f / fConst0)); fConst27 = (1.0f / fConst26); fConst28 = (2.0f * (1.0f - (1.0f / fx_vocoder_faustpower2_f(fConst26)))); - fConst29 = std::tan((2159.68066f / fConst0)); + fConst29 = std::tan((18437.4609f / fConst0)); fConst30 = (1.0f / fConst29); fConst31 = (2.0f * (1.0f - (1.0f / fx_vocoder_faustpower2_f(fConst29)))); - fConst32 = std::tan((1777.1532f / fConst0)); + fConst32 = std::tan((15171.7754f / fConst0)); fConst33 = (1.0f / fConst32); fConst34 = (2.0f * (1.0f - (1.0f / fx_vocoder_faustpower2_f(fConst32)))); - fConst35 = std::tan((814.828308f / fConst0)); + fConst35 = std::tan((12484.5166f / fConst0)); fConst36 = (1.0f / fConst35); fConst37 = (2.0f * (1.0f - (1.0f / fx_vocoder_faustpower2_f(fConst35)))); - fConst38 = std::tan((670.504089f / fConst0)); + fConst38 = std::tan((307.42749f / fConst0)); fConst39 = (1.0f / fConst38); fConst40 = (2.0f * (1.0f - (1.0f / fx_vocoder_faustpower2_f(fConst38)))); - fConst41 = std::tan((551.742859f / fConst0)); + fConst41 = std::tan((252.975235f / fConst0)); fConst42 = (1.0f / fConst41); fConst43 = (2.0f * (1.0f - (1.0f / fx_vocoder_faustpower2_f(fConst41)))); - fConst44 = std::tan((454.016937f / fConst0)); + fConst44 = std::tan((10273.2305f / fConst0)); fConst45 = (1.0f / fConst44); fConst46 = (2.0f * (1.0f - (1.0f / fx_vocoder_faustpower2_f(fConst44)))); - fConst47 = std::tan((373.600433f / fConst0)); + fConst47 = std::tan((8453.61328f / fConst0)); fConst48 = (1.0f / fConst47); fConst49 = (2.0f * (1.0f - (1.0f / fx_vocoder_faustpower2_f(fConst47)))); - fConst50 = std::tan((40212.3867f / fConst0)); + fConst50 = std::tan((6956.28955f / fConst0)); fConst51 = (1.0f / fConst50); fConst52 = (2.0f * (1.0f - (1.0f / fx_vocoder_faustpower2_f(fConst50)))); - fConst53 = std::tan((307.42749f / fConst0)); + fConst53 = std::tan((5724.17578f / fConst0)); fConst54 = (1.0f / fConst53); fConst55 = (2.0f * (1.0f - (1.0f / fx_vocoder_faustpower2_f(fConst53)))); - fConst56 = std::tan((252.975235f / fConst0)); + fConst56 = std::tan((3875.99854f / fConst0)); fConst57 = (1.0f / fConst56); fConst58 = (2.0f * (1.0f - (1.0f / fx_vocoder_faustpower2_f(fConst56)))); - fConst59 = std::tan((208.167679f / fConst0)); + fConst59 = std::tan((3189.4729f / fConst0)); fConst60 = (1.0f / fConst59); fConst61 = (2.0f * (1.0f - (1.0f / fx_vocoder_faustpower2_f(fConst59)))); - fConst62 = std::tan((171.296555f / fConst0)); + fConst62 = std::tan((2624.54639f / fConst0)); fConst63 = (1.0f / fConst62); fConst64 = (2.0f * (1.0f - (1.0f / fx_vocoder_faustpower2_f(fConst62)))); - fConst65 = std::tan((140.956116f / fConst0)); + fConst65 = std::tan((1203.35974f / fConst0)); fConst66 = (1.0f / fConst65); fConst67 = (2.0f * (1.0f - (1.0f / fx_vocoder_faustpower2_f(fConst65)))); - fConst68 = std::tan((95.4453049f / fConst0)); + fConst68 = std::tan((454.016937f / fConst0)); fConst69 = (1.0f / fConst68); fConst70 = (2.0f * (1.0f - (1.0f / fx_vocoder_faustpower2_f(fConst68)))); - fConst71 = std::tan((115.989655f / fConst0)); + fConst71 = std::tan((140.956116f / fConst0)); fConst72 = (1.0f / fConst71); fConst73 = (2.0f * (1.0f - (1.0f / fx_vocoder_faustpower2_f(fConst71)))); - fConst74 = std::tan((990.217957f / fConst0)); + fConst74 = std::tan((115.989655f / fConst0)); fConst75 = (1.0f / fConst74); fConst76 = (2.0f * (1.0f - (1.0f / fx_vocoder_faustpower2_f(fConst74)))); - fConst77 = std::tan((1203.35974f / fConst0)); + fConst77 = std::tan((95.4453049f / fConst0)); fConst78 = (1.0f / fConst77); fConst79 = (2.0f * (1.0f - (1.0f / fx_vocoder_faustpower2_f(fConst77)))); - fConst80 = std::tan((1462.37976f / fConst0)); + fConst80 = std::tan((4710.29688f / fConst0)); fConst81 = (1.0f / fConst80); fConst82 = (2.0f * (1.0f - (1.0f / fx_vocoder_faustpower2_f(fConst80)))); - fConst83 = std::tan((3875.99854f / fConst0)); + fConst83 = std::tan((1777.1532f / fConst0)); fConst84 = (1.0f / fConst83); fConst85 = (2.0f * (1.0f - (1.0f / fx_vocoder_faustpower2_f(fConst83)))); - fConst86 = std::tan((4710.29688f / fConst0)); + fConst86 = std::tan((1462.37976f / fConst0)); fConst87 = (1.0f / fConst86); fConst88 = (2.0f * (1.0f - (1.0f / fx_vocoder_faustpower2_f(fConst86)))); - fConst89 = std::tan((5724.17578f / fConst0)); + fConst89 = std::tan((670.504089f / fConst0)); fConst90 = (1.0f / fConst89); fConst91 = (2.0f * (1.0f - (1.0f / fx_vocoder_faustpower2_f(fConst89)))); - fConst92 = std::tan((6956.28955f / fConst0)); + fConst92 = std::tan((551.742859f / fConst0)); fConst93 = (1.0f / fConst92); fConst94 = (2.0f * (1.0f - (1.0f / fx_vocoder_faustpower2_f(fConst92)))); - fConst95 = std::tan((8453.61328f / fConst0)); + fConst95 = std::tan((208.167679f / fConst0)); fConst96 = (1.0f / fConst95); fConst97 = (2.0f * (1.0f - (1.0f / fx_vocoder_faustpower2_f(fConst95)))); - } virtual void instanceResetUserInterface() { fHslider0 = FAUSTFLOAT(0.5f); fHslider1 = FAUSTFLOAT(5.0f); fHslider2 = FAUSTFLOAT(5.0f); - } virtual void instanceClear() { for (int l0 = 0; (l0 < 3); l0 = (l0 + 1)) { fRec0[l0] = 0.0f; - } for (int l1 = 0; (l1 < 3); l1 = (l1 + 1)) { fRec3[l1] = 0.0f; - } for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { fRec4[l2] = 0.0f; - } for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { fRec5[l3] = 0.0f; - } for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { fRec2[l4] = 0.0f; - } for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { fRec1[l5] = 0.0f; - } for (int l6 = 0; (l6 < 3); l6 = (l6 + 1)) { fRec6[l6] = 0.0f; - } for (int l7 = 0; (l7 < 3); l7 = (l7 + 1)) { fRec9[l7] = 0.0f; - } for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { fRec8[l8] = 0.0f; - } for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { fRec7[l9] = 0.0f; - } for (int l10 = 0; (l10 < 3); l10 = (l10 + 1)) { fRec10[l10] = 0.0f; - } for (int l11 = 0; (l11 < 3); l11 = (l11 + 1)) { fRec13[l11] = 0.0f; - } for (int l12 = 0; (l12 < 2); l12 = (l12 + 1)) { fRec12[l12] = 0.0f; - } for (int l13 = 0; (l13 < 2); l13 = (l13 + 1)) { fRec11[l13] = 0.0f; - } for (int l14 = 0; (l14 < 3); l14 = (l14 + 1)) { fRec14[l14] = 0.0f; - } for (int l15 = 0; (l15 < 3); l15 = (l15 + 1)) { fRec17[l15] = 0.0f; - } for (int l16 = 0; (l16 < 2); l16 = (l16 + 1)) { fRec16[l16] = 0.0f; - } for (int l17 = 0; (l17 < 2); l17 = (l17 + 1)) { fRec15[l17] = 0.0f; - } for (int l18 = 0; (l18 < 3); l18 = (l18 + 1)) { fRec18[l18] = 0.0f; - } for (int l19 = 0; (l19 < 3); l19 = (l19 + 1)) { fRec21[l19] = 0.0f; - } for (int l20 = 0; (l20 < 2); l20 = (l20 + 1)) { fRec20[l20] = 0.0f; - } for (int l21 = 0; (l21 < 2); l21 = (l21 + 1)) { fRec19[l21] = 0.0f; - } for (int l22 = 0; (l22 < 3); l22 = (l22 + 1)) { fRec22[l22] = 0.0f; - } for (int l23 = 0; (l23 < 3); l23 = (l23 + 1)) { fRec25[l23] = 0.0f; - } for (int l24 = 0; (l24 < 2); l24 = (l24 + 1)) { fRec24[l24] = 0.0f; - } for (int l25 = 0; (l25 < 2); l25 = (l25 + 1)) { fRec23[l25] = 0.0f; - } for (int l26 = 0; (l26 < 3); l26 = (l26 + 1)) { fRec26[l26] = 0.0f; - } for (int l27 = 0; (l27 < 3); l27 = (l27 + 1)) { fRec29[l27] = 0.0f; - } for (int l28 = 0; (l28 < 2); l28 = (l28 + 1)) { fRec28[l28] = 0.0f; - } for (int l29 = 0; (l29 < 2); l29 = (l29 + 1)) { fRec27[l29] = 0.0f; - } for (int l30 = 0; (l30 < 3); l30 = (l30 + 1)) { fRec30[l30] = 0.0f; - } for (int l31 = 0; (l31 < 3); l31 = (l31 + 1)) { fRec33[l31] = 0.0f; - } for (int l32 = 0; (l32 < 2); l32 = (l32 + 1)) { fRec32[l32] = 0.0f; - } for (int l33 = 0; (l33 < 2); l33 = (l33 + 1)) { fRec31[l33] = 0.0f; - } for (int l34 = 0; (l34 < 3); l34 = (l34 + 1)) { fRec34[l34] = 0.0f; - } for (int l35 = 0; (l35 < 3); l35 = (l35 + 1)) { fRec37[l35] = 0.0f; - } for (int l36 = 0; (l36 < 2); l36 = (l36 + 1)) { fRec36[l36] = 0.0f; - } for (int l37 = 0; (l37 < 2); l37 = (l37 + 1)) { fRec35[l37] = 0.0f; - } for (int l38 = 0; (l38 < 3); l38 = (l38 + 1)) { fRec38[l38] = 0.0f; - } for (int l39 = 0; (l39 < 3); l39 = (l39 + 1)) { fRec41[l39] = 0.0f; - } for (int l40 = 0; (l40 < 2); l40 = (l40 + 1)) { fRec40[l40] = 0.0f; - } for (int l41 = 0; (l41 < 2); l41 = (l41 + 1)) { fRec39[l41] = 0.0f; - } for (int l42 = 0; (l42 < 3); l42 = (l42 + 1)) { - fRec44[l42] = 0.0f; - + fRec42[l42] = 0.0f; } - for (int l43 = 0; (l43 < 2); l43 = (l43 + 1)) { - fRec43[l43] = 0.0f; - + for (int l43 = 0; (l43 < 3); l43 = (l43 + 1)) { + fRec45[l43] = 0.0f; } for (int l44 = 0; (l44 < 2); l44 = (l44 + 1)) { - fRec42[l44] = 0.0f; - + fRec44[l44] = 0.0f; } - for (int l45 = 0; (l45 < 3); l45 = (l45 + 1)) { - fRec45[l45] = 0.0f; - + for (int l45 = 0; (l45 < 2); l45 = (l45 + 1)) { + fRec43[l45] = 0.0f; } for (int l46 = 0; (l46 < 3); l46 = (l46 + 1)) { fRec46[l46] = 0.0f; - } for (int l47 = 0; (l47 < 3); l47 = (l47 + 1)) { fRec49[l47] = 0.0f; - } for (int l48 = 0; (l48 < 2); l48 = (l48 + 1)) { fRec48[l48] = 0.0f; - } for (int l49 = 0; (l49 < 2); l49 = (l49 + 1)) { fRec47[l49] = 0.0f; - } for (int l50 = 0; (l50 < 3); l50 = (l50 + 1)) { fRec50[l50] = 0.0f; - } for (int l51 = 0; (l51 < 3); l51 = (l51 + 1)) { fRec53[l51] = 0.0f; - } for (int l52 = 0; (l52 < 2); l52 = (l52 + 1)) { fRec52[l52] = 0.0f; - } for (int l53 = 0; (l53 < 2); l53 = (l53 + 1)) { fRec51[l53] = 0.0f; - } for (int l54 = 0; (l54 < 3); l54 = (l54 + 1)) { fRec54[l54] = 0.0f; - } for (int l55 = 0; (l55 < 3); l55 = (l55 + 1)) { fRec57[l55] = 0.0f; - } for (int l56 = 0; (l56 < 2); l56 = (l56 + 1)) { fRec56[l56] = 0.0f; - } for (int l57 = 0; (l57 < 2); l57 = (l57 + 1)) { fRec55[l57] = 0.0f; - } for (int l58 = 0; (l58 < 3); l58 = (l58 + 1)) { fRec58[l58] = 0.0f; - } for (int l59 = 0; (l59 < 3); l59 = (l59 + 1)) { fRec61[l59] = 0.0f; - } for (int l60 = 0; (l60 < 2); l60 = (l60 + 1)) { fRec60[l60] = 0.0f; - } for (int l61 = 0; (l61 < 2); l61 = (l61 + 1)) { fRec59[l61] = 0.0f; - } for (int l62 = 0; (l62 < 3); l62 = (l62 + 1)) { fRec62[l62] = 0.0f; - } for (int l63 = 0; (l63 < 3); l63 = (l63 + 1)) { fRec65[l63] = 0.0f; - } for (int l64 = 0; (l64 < 2); l64 = (l64 + 1)) { fRec64[l64] = 0.0f; - } for (int l65 = 0; (l65 < 2); l65 = (l65 + 1)) { fRec63[l65] = 0.0f; - } for (int l66 = 0; (l66 < 3); l66 = (l66 + 1)) { fRec66[l66] = 0.0f; - } for (int l67 = 0; (l67 < 3); l67 = (l67 + 1)) { fRec69[l67] = 0.0f; - } for (int l68 = 0; (l68 < 2); l68 = (l68 + 1)) { fRec68[l68] = 0.0f; - } for (int l69 = 0; (l69 < 2); l69 = (l69 + 1)) { fRec67[l69] = 0.0f; - } for (int l70 = 0; (l70 < 3); l70 = (l70 + 1)) { fRec70[l70] = 0.0f; - } for (int l71 = 0; (l71 < 3); l71 = (l71 + 1)) { fRec73[l71] = 0.0f; - } for (int l72 = 0; (l72 < 2); l72 = (l72 + 1)) { fRec72[l72] = 0.0f; - } for (int l73 = 0; (l73 < 2); l73 = (l73 + 1)) { fRec71[l73] = 0.0f; - } for (int l74 = 0; (l74 < 3); l74 = (l74 + 1)) { fRec74[l74] = 0.0f; - } for (int l75 = 0; (l75 < 3); l75 = (l75 + 1)) { fRec77[l75] = 0.0f; - } for (int l76 = 0; (l76 < 2); l76 = (l76 + 1)) { fRec76[l76] = 0.0f; - } for (int l77 = 0; (l77 < 2); l77 = (l77 + 1)) { fRec75[l77] = 0.0f; - } for (int l78 = 0; (l78 < 3); l78 = (l78 + 1)) { fRec78[l78] = 0.0f; - } for (int l79 = 0; (l79 < 3); l79 = (l79 + 1)) { fRec81[l79] = 0.0f; - } for (int l80 = 0; (l80 < 2); l80 = (l80 + 1)) { fRec80[l80] = 0.0f; - } for (int l81 = 0; (l81 < 2); l81 = (l81 + 1)) { fRec79[l81] = 0.0f; - } for (int l82 = 0; (l82 < 3); l82 = (l82 + 1)) { fRec82[l82] = 0.0f; - } for (int l83 = 0; (l83 < 3); l83 = (l83 + 1)) { fRec85[l83] = 0.0f; - } for (int l84 = 0; (l84 < 2); l84 = (l84 + 1)) { fRec84[l84] = 0.0f; - } for (int l85 = 0; (l85 < 2); l85 = (l85 + 1)) { fRec83[l85] = 0.0f; - } for (int l86 = 0; (l86 < 3); l86 = (l86 + 1)) { fRec86[l86] = 0.0f; - } for (int l87 = 0; (l87 < 3); l87 = (l87 + 1)) { fRec89[l87] = 0.0f; - } for (int l88 = 0; (l88 < 2); l88 = (l88 + 1)) { fRec88[l88] = 0.0f; - } for (int l89 = 0; (l89 < 2); l89 = (l89 + 1)) { fRec87[l89] = 0.0f; - } for (int l90 = 0; (l90 < 3); l90 = (l90 + 1)) { fRec90[l90] = 0.0f; - } for (int l91 = 0; (l91 < 3); l91 = (l91 + 1)) { fRec93[l91] = 0.0f; - } for (int l92 = 0; (l92 < 2); l92 = (l92 + 1)) { fRec92[l92] = 0.0f; - } for (int l93 = 0; (l93 < 2); l93 = (l93 + 1)) { fRec91[l93] = 0.0f; - } for (int l94 = 0; (l94 < 3); l94 = (l94 + 1)) { fRec94[l94] = 0.0f; - } for (int l95 = 0; (l95 < 3); l95 = (l95 + 1)) { fRec97[l95] = 0.0f; - } for (int l96 = 0; (l96 < 2); l96 = (l96 + 1)) { fRec96[l96] = 0.0f; - } for (int l97 = 0; (l97 < 2); l97 = (l97 + 1)) { fRec95[l97] = 0.0f; - } for (int l98 = 0; (l98 < 3); l98 = (l98 + 1)) { fRec98[l98] = 0.0f; - } for (int l99 = 0; (l99 < 3); l99 = (l99 + 1)) { fRec101[l99] = 0.0f; - } for (int l100 = 0; (l100 < 2); l100 = (l100 + 1)) { fRec100[l100] = 0.0f; - } for (int l101 = 0; (l101 < 2); l101 = (l101 + 1)) { fRec99[l101] = 0.0f; - } for (int l102 = 0; (l102 < 3); l102 = (l102 + 1)) { fRec102[l102] = 0.0f; - } for (int l103 = 0; (l103 < 3); l103 = (l103 + 1)) { fRec105[l103] = 0.0f; - } for (int l104 = 0; (l104 < 2); l104 = (l104 + 1)) { fRec104[l104] = 0.0f; - } for (int l105 = 0; (l105 < 2); l105 = (l105 + 1)) { fRec103[l105] = 0.0f; - } for (int l106 = 0; (l106 < 3); l106 = (l106 + 1)) { fRec106[l106] = 0.0f; - } for (int l107 = 0; (l107 < 3); l107 = (l107 + 1)) { fRec109[l107] = 0.0f; - } for (int l108 = 0; (l108 < 2); l108 = (l108 + 1)) { fRec108[l108] = 0.0f; - } for (int l109 = 0; (l109 < 2); l109 = (l109 + 1)) { fRec107[l109] = 0.0f; - } for (int l110 = 0; (l110 < 3); l110 = (l110 + 1)) { fRec110[l110] = 0.0f; - } for (int l111 = 0; (l111 < 3); l111 = (l111 + 1)) { fRec113[l111] = 0.0f; - } for (int l112 = 0; (l112 < 2); l112 = (l112 + 1)) { fRec112[l112] = 0.0f; - } for (int l113 = 0; (l113 < 2); l113 = (l113 + 1)) { fRec111[l113] = 0.0f; - } for (int l114 = 0; (l114 < 3); l114 = (l114 + 1)) { fRec114[l114] = 0.0f; - } for (int l115 = 0; (l115 < 3); l115 = (l115 + 1)) { fRec117[l115] = 0.0f; - } for (int l116 = 0; (l116 < 2); l116 = (l116 + 1)) { fRec116[l116] = 0.0f; - } for (int l117 = 0; (l117 < 2); l117 = (l117 + 1)) { fRec115[l117] = 0.0f; - } for (int l118 = 0; (l118 < 3); l118 = (l118 + 1)) { fRec118[l118] = 0.0f; - } for (int l119 = 0; (l119 < 3); l119 = (l119 + 1)) { fRec121[l119] = 0.0f; - } for (int l120 = 0; (l120 < 2); l120 = (l120 + 1)) { fRec120[l120] = 0.0f; - } for (int l121 = 0; (l121 < 2); l121 = (l121 + 1)) { fRec119[l121] = 0.0f; - } for (int l122 = 0; (l122 < 3); l122 = (l122 + 1)) { fRec122[l122] = 0.0f; - } for (int l123 = 0; (l123 < 3); l123 = (l123 + 1)) { fRec125[l123] = 0.0f; - } for (int l124 = 0; (l124 < 2); l124 = (l124 + 1)) { fRec124[l124] = 0.0f; - } for (int l125 = 0; (l125 < 2); l125 = (l125 + 1)) { fRec123[l125] = 0.0f; - } for (int l126 = 0; (l126 < 3); l126 = (l126 + 1)) { fRec126[l126] = 0.0f; - } for (int l127 = 0; (l127 < 3); l127 = (l127 + 1)) { fRec129[l127] = 0.0f; - } for (int l128 = 0; (l128 < 2); l128 = (l128 + 1)) { fRec128[l128] = 0.0f; - } for (int l129 = 0; (l129 < 2); l129 = (l129 + 1)) { fRec127[l129] = 0.0f; - } - } - virtual void init(int samplingFreq) { - classInit(samplingFreq); - instanceInit(samplingFreq); + virtual void init(int sample_rate) { + classInit(sample_rate); + instanceInit(sample_rate); } - virtual void instanceInit(int samplingFreq) { - instanceConstants(samplingFreq); + virtual void instanceInit(int sample_rate) { + instanceConstants(sample_rate); instanceResetUserInterface(); instanceClear(); } @@ -1416,9 +1346,9 @@ class fx_vocoder : public dsp { virtual fx_vocoder* clone() { return new fx_vocoder(); } + virtual int getSampleRate() { - return fSamplingFreq; - + return fSampleRate; } virtual void buildUserInterface(UI* ui_interface) { @@ -1429,7 +1359,6 @@ class fx_vocoder : public dsp { ui_interface->declare(&fHslider2, "unit", "ms"); ui_interface->addHorizontalSlider("release", &fHslider2, 5.0f, 0.100000001f, 100.0f, 0.00999999978f); ui_interface->closeBox(); - } virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { @@ -1469,27 +1398,27 @@ class fx_vocoder : public dsp { float fSlow30 = ((fConst15 * (fConst15 - fSlow27)) + 1.0f); float fSlow31 = (fConst15 / fSlow28); float fSlow32 = (0.0f - fSlow31); - float fSlow33 = ((fConst18 * (fConst18 + fSlow15)) + 1.0f); - float fSlow34 = (1.0f / fSlow33); - float fSlow35 = ((fConst18 * (fConst18 - fSlow15)) + 1.0f); - float fSlow36 = (fConst18 / fSlow33); - float fSlow37 = (0.0f - fSlow36); - float fSlow38 = (0.177122265f * fSlow0); - float fSlow39 = ((fConst21 * (fConst21 + fSlow38)) + 1.0f); - float fSlow40 = (1.0f / fSlow39); - float fSlow41 = ((fConst21 * (fConst21 - fSlow38)) + 1.0f); - float fSlow42 = (fConst21 / fSlow39); - float fSlow43 = (0.0f - fSlow42); - float fSlow44 = (0.177122265f * fSlow0); - float fSlow45 = ((fConst24 * (fConst24 + fSlow44)) + 1.0f); - float fSlow46 = (1.0f / fSlow45); - float fSlow47 = ((fConst24 * (fConst24 - fSlow44)) + 1.0f); - float fSlow48 = (fConst24 / fSlow45); - float fSlow49 = (0.0f - fSlow48); - float fSlow50 = (0.177122265f * fSlow0); - float fSlow51 = ((fConst27 * (fConst27 + fSlow50)) + 1.0f); + float fSlow33 = (0.177122265f * fSlow0); + float fSlow34 = ((fConst18 * (fConst18 + fSlow33)) + 1.0f); + float fSlow35 = (1.0f / fSlow34); + float fSlow36 = ((fConst18 * (fConst18 - fSlow33)) + 1.0f); + float fSlow37 = (fConst18 / fSlow34); + float fSlow38 = (0.0f - fSlow37); + float fSlow39 = (0.177122265f * fSlow0); + float fSlow40 = ((fConst21 * (fConst21 + fSlow39)) + 1.0f); + float fSlow41 = (1.0f / fSlow40); + float fSlow42 = ((fConst21 * (fConst21 - fSlow39)) + 1.0f); + float fSlow43 = (fConst21 / fSlow40); + float fSlow44 = (0.0f - fSlow43); + float fSlow45 = (0.177122265f * fSlow0); + float fSlow46 = ((fConst24 * (fConst24 + fSlow45)) + 1.0f); + float fSlow47 = (1.0f / fSlow46); + float fSlow48 = ((fConst24 * (fConst24 - fSlow45)) + 1.0f); + float fSlow49 = (fConst24 / fSlow46); + float fSlow50 = (0.0f - fSlow49); + float fSlow51 = ((fConst27 * (fConst27 + fSlow27)) + 1.0f); float fSlow52 = (1.0f / fSlow51); - float fSlow53 = ((fConst27 * (fConst27 - fSlow50)) + 1.0f); + float fSlow53 = ((fConst27 * (fConst27 - fSlow27)) + 1.0f); float fSlow54 = (fConst27 / fSlow51); float fSlow55 = (0.0f - fSlow54); float fSlow56 = (0.177122265f * fSlow0); @@ -1498,320 +1427,322 @@ class fx_vocoder : public dsp { float fSlow59 = ((fConst30 * (fConst30 - fSlow56)) + 1.0f); float fSlow60 = (fConst30 / fSlow57); float fSlow61 = (0.0f - fSlow60); - float fSlow62 = ((fConst33 * (fConst33 + fSlow38)) + 1.0f); - float fSlow63 = (fConst33 / fSlow62); - float fSlow64 = (1.0f / fSlow62); - float fSlow65 = ((fConst33 * (fConst33 - fSlow38)) + 1.0f); - float fSlow66 = (0.0f - fSlow63); - float fSlow67 = (0.177122265f * fSlow0); - float fSlow68 = ((fConst36 * (fConst36 + fSlow67)) + 1.0f); - float fSlow69 = (fConst36 / fSlow68); - float fSlow70 = (1.0f / fSlow68); - float fSlow71 = ((fConst36 * (fConst36 - fSlow67)) + 1.0f); - float fSlow72 = (0.0f - fSlow69); - float fSlow73 = ((fConst39 * (fConst39 + fSlow27)) + 1.0f); + float fSlow62 = ((fConst33 * (fConst33 + fSlow15)) + 1.0f); + float fSlow63 = (1.0f / fSlow62); + float fSlow64 = ((fConst33 * (fConst33 - fSlow15)) + 1.0f); + float fSlow65 = (fConst33 / fSlow62); + float fSlow66 = (0.0f - fSlow65); + float fSlow67 = ((fConst36 * (fConst36 + fSlow27)) + 1.0f); + float fSlow68 = (1.0f / fSlow67); + float fSlow69 = ((fConst36 * (fConst36 - fSlow27)) + 1.0f); + float fSlow70 = (fConst36 / fSlow67); + float fSlow71 = (0.0f - fSlow70); + float fSlow72 = (0.177122265f * fSlow0); + float fSlow73 = ((fConst39 * (fConst39 + fSlow72)) + 1.0f); float fSlow74 = (1.0f / fSlow73); - float fSlow75 = ((fConst39 * (fConst39 - fSlow27)) + 1.0f); + float fSlow75 = ((fConst39 * (fConst39 - fSlow72)) + 1.0f); float fSlow76 = (fConst39 / fSlow73); float fSlow77 = (0.0f - fSlow76); - float fSlow78 = ((fConst42 * (fConst42 + fSlow56)) + 1.0f); - float fSlow79 = (1.0f / fSlow78); - float fSlow80 = ((fConst42 * (fConst42 - fSlow56)) + 1.0f); - float fSlow81 = (fConst42 / fSlow78); - float fSlow82 = (0.0f - fSlow81); - float fSlow83 = ((fConst45 * (fConst45 + fSlow44)) + 1.0f); - float fSlow84 = (1.0f / fSlow83); - float fSlow85 = ((fConst45 * (fConst45 - fSlow44)) + 1.0f); - float fSlow86 = (fConst45 / fSlow83); - float fSlow87 = (0.0f - fSlow86); - float fSlow88 = ((fConst48 * (fConst48 + fSlow15)) + 1.0f); - float fSlow89 = (fConst48 / fSlow88); - float fSlow90 = (1.0f / fSlow88); - float fSlow91 = ((fConst48 * (fConst48 - fSlow15)) + 1.0f); - float fSlow92 = (0.0f - fSlow89); - float fSlow93 = (0.177122265f * fSlow0); - float fSlow94 = ((fConst51 * (fConst51 + fSlow93)) + 1.0f); + float fSlow78 = (0.177122265f * fSlow0); + float fSlow79 = ((fConst42 * (fConst42 + fSlow78)) + 1.0f); + float fSlow80 = (1.0f / fSlow79); + float fSlow81 = ((fConst42 * (fConst42 - fSlow78)) + 1.0f); + float fSlow82 = (fConst42 / fSlow79); + float fSlow83 = (0.0f - fSlow82); + float fSlow84 = ((fConst45 * (fConst45 + fSlow33)) + 1.0f); + float fSlow85 = (1.0f / fSlow84); + float fSlow86 = ((fConst45 * (fConst45 - fSlow33)) + 1.0f); + float fSlow87 = (fConst45 / fSlow84); + float fSlow88 = (0.0f - fSlow87); + float fSlow89 = ((fConst48 * (fConst48 + fSlow1)) + 1.0f); + float fSlow90 = (1.0f / fSlow89); + float fSlow91 = ((fConst48 * (fConst48 - fSlow1)) + 1.0f); + float fSlow92 = (fConst48 / fSlow89); + float fSlow93 = (0.0f - fSlow92); + float fSlow94 = ((fConst51 * (fConst51 + fSlow72)) + 1.0f); float fSlow95 = (1.0f / fSlow94); - float fSlow96 = ((fConst51 * (fConst51 - fSlow93)) + 1.0f); + float fSlow96 = ((fConst51 * (fConst51 - fSlow72)) + 1.0f); float fSlow97 = (fConst51 / fSlow94); float fSlow98 = (0.0f - fSlow97); - float fSlow99 = (0.177122265f * fSlow0); - float fSlow100 = ((fConst54 * (fConst54 + fSlow99)) + 1.0f); - float fSlow101 = (1.0f / fSlow100); - float fSlow102 = ((fConst54 * (fConst54 - fSlow99)) + 1.0f); - float fSlow103 = (fConst54 / fSlow100); - float fSlow104 = (0.0f - fSlow103); - float fSlow105 = (0.177122265f * fSlow0); - float fSlow106 = ((fConst57 * (fConst57 + fSlow105)) + 1.0f); - float fSlow107 = (1.0f / fSlow106); - float fSlow108 = ((fConst57 * (fConst57 - fSlow105)) + 1.0f); - float fSlow109 = (fConst57 / fSlow106); - float fSlow110 = (0.0f - fSlow109); - float fSlow111 = ((fConst60 * (fConst60 + fSlow44)) + 1.0f); - float fSlow112 = (1.0f / fSlow111); - float fSlow113 = ((fConst60 * (fConst60 - fSlow44)) + 1.0f); - float fSlow114 = (fConst60 / fSlow111); - float fSlow115 = (0.0f - fSlow114); - float fSlow116 = ((fConst63 * (fConst63 + fSlow38)) + 1.0f); + float fSlow99 = ((fConst54 * (fConst54 + fSlow45)) + 1.0f); + float fSlow100 = (1.0f / fSlow99); + float fSlow101 = ((fConst54 * (fConst54 - fSlow45)) + 1.0f); + float fSlow102 = (fConst54 / fSlow99); + float fSlow103 = (0.0f - fSlow102); + float fSlow104 = ((fConst57 * (fConst57 + fSlow45)) + 1.0f); + float fSlow105 = (1.0f / fSlow104); + float fSlow106 = ((fConst57 * (fConst57 - fSlow45)) + 1.0f); + float fSlow107 = (fConst57 / fSlow104); + float fSlow108 = (0.0f - fSlow107); + float fSlow109 = (0.177122265f * fSlow0); + float fSlow110 = ((fConst60 * (fConst60 + fSlow109)) + 1.0f); + float fSlow111 = (1.0f / fSlow110); + float fSlow112 = ((fConst60 * (fConst60 - fSlow109)) + 1.0f); + float fSlow113 = (fConst60 / fSlow110); + float fSlow114 = (0.0f - fSlow113); + float fSlow115 = (0.177122265f * fSlow0); + float fSlow116 = ((fConst63 * (fConst63 + fSlow115)) + 1.0f); float fSlow117 = (1.0f / fSlow116); - float fSlow118 = ((fConst63 * (fConst63 - fSlow38)) + 1.0f); + float fSlow118 = ((fConst63 * (fConst63 - fSlow115)) + 1.0f); float fSlow119 = (fConst63 / fSlow116); float fSlow120 = (0.0f - fSlow119); - float fSlow121 = ((fConst66 * (fConst66 + fSlow15)) + 1.0f); - float fSlow122 = (fConst66 / fSlow121); - float fSlow123 = (1.0f / fSlow121); - float fSlow124 = ((fConst66 * (fConst66 - fSlow15)) + 1.0f); - float fSlow125 = (0.0f - fSlow122); - float fSlow126 = ((fConst69 * (fConst69 + fSlow15)) + 1.0f); - float fSlow127 = (fConst69 / fSlow126); - float fSlow128 = (1.0f / fSlow126); - float fSlow129 = ((fConst69 * (fConst69 - fSlow15)) + 1.0f); - float fSlow130 = (0.0f - fSlow127); - float fSlow131 = ((fConst72 * (fConst72 + fSlow56)) + 1.0f); - float fSlow132 = (fConst72 / fSlow131); - float fSlow133 = (1.0f / fSlow131); - float fSlow134 = ((fConst72 * (fConst72 - fSlow56)) + 1.0f); - float fSlow135 = (0.0f - fSlow132); - float fSlow136 = ((fConst75 * (fConst75 + fSlow27)) + 1.0f); + float fSlow121 = ((fConst66 * (fConst66 + fSlow45)) + 1.0f); + float fSlow122 = (1.0f / fSlow121); + float fSlow123 = ((fConst66 * (fConst66 - fSlow45)) + 1.0f); + float fSlow124 = (fConst66 / fSlow121); + float fSlow125 = (0.0f - fSlow124); + float fSlow126 = ((fConst69 * (fConst69 + fSlow109)) + 1.0f); + float fSlow127 = (1.0f / fSlow126); + float fSlow128 = ((fConst69 * (fConst69 - fSlow109)) + 1.0f); + float fSlow129 = (fConst69 / fSlow126); + float fSlow130 = (0.0f - fSlow129); + float fSlow131 = ((fConst72 * (fConst72 + fSlow27)) + 1.0f); + float fSlow132 = (1.0f / fSlow131); + float fSlow133 = ((fConst72 * (fConst72 - fSlow27)) + 1.0f); + float fSlow134 = (fConst72 / fSlow131); + float fSlow135 = (0.0f - fSlow134); + float fSlow136 = ((fConst75 * (fConst75 + fSlow9)) + 1.0f); float fSlow137 = (fConst75 / fSlow136); float fSlow138 = (1.0f / fSlow136); - float fSlow139 = ((fConst75 * (fConst75 - fSlow27)) + 1.0f); + float fSlow139 = ((fConst75 * (fConst75 - fSlow9)) + 1.0f); float fSlow140 = (0.0f - fSlow137); - float fSlow141 = ((fConst78 * (fConst78 + fSlow9)) + 1.0f); + float fSlow141 = ((fConst78 * (fConst78 + fSlow27)) + 1.0f); float fSlow142 = (fConst78 / fSlow141); float fSlow143 = (1.0f / fSlow141); - float fSlow144 = ((fConst78 * (fConst78 - fSlow9)) + 1.0f); + float fSlow144 = ((fConst78 * (fConst78 - fSlow27)) + 1.0f); float fSlow145 = (0.0f - fSlow142); - float fSlow146 = ((fConst81 * (fConst81 + fSlow38)) + 1.0f); - float fSlow147 = (fConst81 / fSlow146); - float fSlow148 = (1.0f / fSlow146); - float fSlow149 = ((fConst81 * (fConst81 - fSlow38)) + 1.0f); - float fSlow150 = (0.0f - fSlow147); - float fSlow151 = ((fConst84 * (fConst84 + fSlow9)) + 1.0f); - float fSlow152 = (fConst84 / fSlow151); - float fSlow153 = (1.0f / fSlow151); - float fSlow154 = ((fConst84 * (fConst84 - fSlow9)) + 1.0f); - float fSlow155 = (0.0f - fSlow152); - float fSlow156 = ((fConst87 * (fConst87 + fSlow99)) + 1.0f); - float fSlow157 = (fConst87 / fSlow156); - float fSlow158 = (1.0f / fSlow156); - float fSlow159 = ((fConst87 * (fConst87 - fSlow99)) + 1.0f); - float fSlow160 = (0.0f - fSlow157); - float fSlow161 = ((fConst90 * (fConst90 + fSlow9)) + 1.0f); - float fSlow162 = (fConst90 / fSlow161); - float fSlow163 = (1.0f / fSlow161); - float fSlow164 = ((fConst90 * (fConst90 - fSlow9)) + 1.0f); - float fSlow165 = (0.0f - fSlow162); - float fSlow166 = ((fConst93 * (fConst93 + fSlow99)) + 1.0f); - float fSlow167 = (fConst93 / fSlow166); - float fSlow168 = (1.0f / fSlow166); - float fSlow169 = ((fConst93 * (fConst93 - fSlow99)) + 1.0f); - float fSlow170 = (0.0f - fSlow167); - float fSlow171 = ((fConst96 * (fConst96 + fSlow93)) + 1.0f); - float fSlow172 = (fConst96 / fSlow171); - float fSlow173 = (1.0f / fSlow171); - float fSlow174 = ((fConst96 * (fConst96 - fSlow93)) + 1.0f); - float fSlow175 = (0.0f - fSlow172); + float fSlow146 = ((fConst81 * (fConst81 + fSlow72)) + 1.0f); + float fSlow147 = (1.0f / fSlow146); + float fSlow148 = ((fConst81 * (fConst81 - fSlow72)) + 1.0f); + float fSlow149 = (fConst81 / fSlow146); + float fSlow150 = (0.0f - fSlow149); + float fSlow151 = ((fConst84 * (fConst84 + fSlow33)) + 1.0f); + float fSlow152 = (1.0f / fSlow151); + float fSlow153 = ((fConst84 * (fConst84 - fSlow33)) + 1.0f); + float fSlow154 = (fConst84 / fSlow151); + float fSlow155 = (0.0f - fSlow154); + float fSlow156 = ((fConst87 * (fConst87 + fSlow33)) + 1.0f); + float fSlow157 = (1.0f / fSlow156); + float fSlow158 = ((fConst87 * (fConst87 - fSlow33)) + 1.0f); + float fSlow159 = (fConst87 / fSlow156); + float fSlow160 = (0.0f - fSlow159); + float fSlow161 = ((fConst90 * (fConst90 + fSlow15)) + 1.0f); + float fSlow162 = (1.0f / fSlow161); + float fSlow163 = ((fConst90 * (fConst90 - fSlow15)) + 1.0f); + float fSlow164 = (fConst90 / fSlow161); + float fSlow165 = (0.0f - fSlow164); + float fSlow166 = ((fConst93 * (fConst93 + fSlow9)) + 1.0f); + float fSlow167 = (1.0f / fSlow166); + float fSlow168 = ((fConst93 * (fConst93 - fSlow9)) + 1.0f); + float fSlow169 = (fConst93 / fSlow166); + float fSlow170 = (0.0f - fSlow169); + float fSlow171 = ((fConst96 * (fConst96 + fSlow109)) + 1.0f); + float fSlow172 = (1.0f / fSlow171); + float fSlow173 = ((fConst96 * (fConst96 - fSlow109)) + 1.0f); + float fSlow174 = (fConst96 / fSlow171); + float fSlow175 = (0.0f - fSlow174); for (int i = 0; (i < count); i = (i + 1)) { float fTemp0 = float(input1[i]); - fRec0[0] = (fTemp0 - (fSlow3 * ((fConst3 * fRec0[1]) + (fSlow4 * fRec0[2])))); + fRec0[0] = (fTemp0 - (fSlow3 * ((fSlow4 * fRec0[2]) + (fConst3 * fRec0[1])))); float fTemp1 = float(input0[i]); fRec3[0] = (fTemp1 - (fSlow3 * ((fSlow4 * fRec3[2]) + (fConst3 * fRec3[1])))); float fTemp2 = std::fabs(((fSlow5 * fRec3[0]) + (fSlow6 * fRec3[2]))); fRec4[0] = (fSlow7 + (0.999000013f * fRec4[1])); - float fTemp3 = std::exp((0.0f - (fConst4 / fRec4[0]))); + int iTemp3 = (std::fabs(fRec4[0]) < 1.19999996e-07f); + float fTemp4 = (iTemp3 ? 0.0f : std::exp((0.0f - (fConst4 / (iTemp3 ? 1.0f : fRec4[0]))))); fRec5[0] = (fSlow8 + (0.999000013f * fRec5[1])); - float fTemp4 = std::exp((0.0f - (fConst4 / fRec5[0]))); - float fTemp5 = ((fRec1[1] > fTemp2)?fTemp4:fTemp3); - fRec2[0] = ((fRec2[1] * fTemp5) + (fTemp2 * (1.0f - fTemp5))); + int iTemp5 = (std::fabs(fRec5[0]) < 1.19999996e-07f); + float fTemp6 = (iTemp5 ? 0.0f : std::exp((0.0f - (fConst4 / (iTemp5 ? 1.0f : fRec5[0]))))); + float fTemp7 = ((fRec1[1] > fTemp2) ? fTemp6 : fTemp4); + fRec2[0] = ((fRec2[1] * fTemp7) + (fTemp2 * (1.0f - fTemp7))); fRec1[0] = fRec2[0]; - fRec6[0] = (fTemp0 - (fSlow11 * ((fConst7 * fRec6[1]) + (fSlow12 * fRec6[2])))); - fRec9[0] = (fTemp1 - (fSlow11 * ((fConst7 * fRec9[1]) + (fSlow12 * fRec9[2])))); - float fTemp6 = std::fabs(((fSlow13 * fRec9[0]) + (fSlow14 * fRec9[2]))); - float fTemp7 = ((fRec7[1] > fTemp6)?fTemp4:fTemp3); - fRec8[0] = ((fRec8[1] * fTemp7) + (fTemp6 * (1.0f - fTemp7))); + fRec6[0] = (fTemp0 - (fSlow11 * ((fSlow12 * fRec6[2]) + (fConst7 * fRec6[1])))); + fRec9[0] = (fTemp1 - (fSlow11 * ((fSlow12 * fRec9[2]) + (fConst7 * fRec9[1])))); + float fTemp8 = std::fabs(((fSlow13 * fRec9[0]) + (fSlow14 * fRec9[2]))); + float fTemp9 = ((fRec7[1] > fTemp8) ? fTemp6 : fTemp4); + fRec8[0] = ((fRec8[1] * fTemp9) + (fTemp8 * (1.0f - fTemp9))); fRec7[0] = fRec8[0]; - fRec10[0] = (fTemp0 - (fSlow17 * ((fConst10 * fRec10[1]) + (fSlow18 * fRec10[2])))); - fRec13[0] = (fTemp1 - (fSlow17 * ((fConst10 * fRec13[1]) + (fSlow18 * fRec13[2])))); - float fTemp8 = std::fabs(((fSlow19 * fRec13[0]) + (fSlow20 * fRec13[2]))); - float fTemp9 = ((fRec11[1] > fTemp8)?fTemp4:fTemp3); - fRec12[0] = ((fRec12[1] * fTemp9) + (fTemp8 * (1.0f - fTemp9))); + fRec10[0] = (fTemp0 - (fSlow17 * ((fSlow18 * fRec10[2]) + (fConst10 * fRec10[1])))); + fRec13[0] = (fTemp1 - (fSlow17 * ((fSlow18 * fRec13[2]) + (fConst10 * fRec13[1])))); + float fTemp10 = std::fabs(((fSlow19 * fRec13[0]) + (fSlow20 * fRec13[2]))); + float fTemp11 = ((fRec11[1] > fTemp10) ? fTemp6 : fTemp4); + fRec12[0] = ((fRec12[1] * fTemp11) + (fTemp10 * (1.0f - fTemp11))); fRec11[0] = fRec12[0]; - fRec14[0] = (fTemp0 - (fSlow23 * ((fConst13 * fRec14[1]) + (fSlow24 * fRec14[2])))); - fRec17[0] = (fTemp1 - (fSlow23 * ((fConst13 * fRec17[1]) + (fSlow24 * fRec17[2])))); - float fTemp10 = std::fabs(((fSlow25 * fRec17[0]) + (fSlow26 * fRec17[2]))); - float fTemp11 = ((fRec15[1] > fTemp10)?fTemp4:fTemp3); - fRec16[0] = ((fRec16[1] * fTemp11) + (fTemp10 * (1.0f - fTemp11))); + fRec14[0] = (fTemp0 - (fSlow23 * ((fSlow24 * fRec14[2]) + (fConst13 * fRec14[1])))); + fRec17[0] = (fTemp1 - (fSlow23 * ((fSlow24 * fRec17[2]) + (fConst13 * fRec17[1])))); + float fTemp12 = std::fabs(((fSlow25 * fRec17[0]) + (fSlow26 * fRec17[2]))); + float fTemp13 = ((fRec15[1] > fTemp12) ? fTemp6 : fTemp4); + fRec16[0] = ((fRec16[1] * fTemp13) + (fTemp12 * (1.0f - fTemp13))); fRec15[0] = fRec16[0]; - fRec18[0] = (fTemp0 - (fSlow29 * ((fConst16 * fRec18[1]) + (fSlow30 * fRec18[2])))); - fRec21[0] = (fTemp1 - (fSlow29 * ((fConst16 * fRec21[1]) + (fSlow30 * fRec21[2])))); - float fTemp12 = std::fabs(((fSlow31 * fRec21[0]) + (fSlow32 * fRec21[2]))); - float fTemp13 = ((fRec19[1] > fTemp12)?fTemp4:fTemp3); - fRec20[0] = ((fRec20[1] * fTemp13) + (fTemp12 * (1.0f - fTemp13))); + fRec18[0] = (fTemp0 - (fSlow29 * ((fSlow30 * fRec18[2]) + (fConst16 * fRec18[1])))); + fRec21[0] = (fTemp1 - (fSlow29 * ((fSlow30 * fRec21[2]) + (fConst16 * fRec21[1])))); + float fTemp14 = std::fabs(((fSlow31 * fRec21[0]) + (fSlow32 * fRec21[2]))); + float fTemp15 = ((fRec19[1] > fTemp14) ? fTemp6 : fTemp4); + fRec20[0] = ((fRec20[1] * fTemp15) + (fTemp14 * (1.0f - fTemp15))); fRec19[0] = fRec20[0]; - fRec22[0] = (fTemp0 - (fSlow34 * ((fConst19 * fRec22[1]) + (fSlow35 * fRec22[2])))); - fRec25[0] = (fTemp1 - (fSlow34 * ((fSlow35 * fRec25[2]) + (fConst19 * fRec25[1])))); - float fTemp14 = std::fabs(((fSlow36 * fRec25[0]) + (fSlow37 * fRec25[2]))); - float fTemp15 = ((fRec23[1] > fTemp14)?fTemp4:fTemp3); - fRec24[0] = ((fRec24[1] * fTemp15) + (fTemp14 * (1.0f - fTemp15))); + fRec22[0] = (fTemp0 - (fSlow35 * ((fSlow36 * fRec22[2]) + (fConst19 * fRec22[1])))); + fRec25[0] = (fTemp1 - (fSlow35 * ((fSlow36 * fRec25[2]) + (fConst19 * fRec25[1])))); + float fTemp16 = std::fabs(((fSlow37 * fRec25[0]) + (fSlow38 * fRec25[2]))); + float fTemp17 = ((fRec23[1] > fTemp16) ? fTemp6 : fTemp4); + fRec24[0] = ((fRec24[1] * fTemp17) + (fTemp16 * (1.0f - fTemp17))); fRec23[0] = fRec24[0]; - fRec26[0] = (fTemp0 - (fSlow40 * ((fSlow41 * fRec26[2]) + (fConst22 * fRec26[1])))); - fRec29[0] = (fTemp1 - (fSlow40 * ((fConst22 * fRec29[1]) + (fSlow41 * fRec29[2])))); - float fTemp16 = std::fabs(((fSlow42 * fRec29[0]) + (fSlow43 * fRec29[2]))); - float fTemp17 = ((fRec27[1] > fTemp16)?fTemp4:fTemp3); - fRec28[0] = ((fRec28[1] * fTemp17) + (fTemp16 * (1.0f - fTemp17))); + fRec26[0] = (fTemp0 - (fSlow41 * ((fSlow42 * fRec26[2]) + (fConst22 * fRec26[1])))); + fRec29[0] = (fTemp1 - (fSlow41 * ((fSlow42 * fRec29[2]) + (fConst22 * fRec29[1])))); + float fTemp18 = std::fabs(((fSlow43 * fRec29[0]) + (fSlow44 * fRec29[2]))); + float fTemp19 = ((fRec27[1] > fTemp18) ? fTemp6 : fTemp4); + fRec28[0] = ((fRec28[1] * fTemp19) + (fTemp18 * (1.0f - fTemp19))); fRec27[0] = fRec28[0]; - fRec30[0] = (fTemp0 - (fSlow46 * ((fConst25 * fRec30[1]) + (fSlow47 * fRec30[2])))); - fRec33[0] = (fTemp1 - (fSlow46 * ((fSlow47 * fRec33[2]) + (fConst25 * fRec33[1])))); - float fTemp18 = std::fabs(((fSlow48 * fRec33[0]) + (fSlow49 * fRec33[2]))); - float fTemp19 = ((fRec31[1] > fTemp18)?fTemp4:fTemp3); - fRec32[0] = ((fRec32[1] * fTemp19) + (fTemp18 * (1.0f - fTemp19))); + fRec30[0] = (fTemp0 - (fSlow47 * ((fSlow48 * fRec30[2]) + (fConst25 * fRec30[1])))); + fRec33[0] = (fTemp1 - (fSlow47 * ((fSlow48 * fRec33[2]) + (fConst25 * fRec33[1])))); + float fTemp20 = std::fabs(((fSlow49 * fRec33[0]) + (fSlow50 * fRec33[2]))); + float fTemp21 = ((fRec31[1] > fTemp20) ? fTemp6 : fTemp4); + fRec32[0] = ((fRec32[1] * fTemp21) + (fTemp20 * (1.0f - fTemp21))); fRec31[0] = fRec32[0]; fRec34[0] = (fTemp0 - (fSlow52 * ((fSlow53 * fRec34[2]) + (fConst28 * fRec34[1])))); fRec37[0] = (fTemp1 - (fSlow52 * ((fSlow53 * fRec37[2]) + (fConst28 * fRec37[1])))); - float fTemp20 = std::fabs(((fSlow54 * fRec37[0]) + (fSlow55 * fRec37[2]))); - float fTemp21 = ((fRec35[1] > fTemp20)?fTemp4:fTemp3); - fRec36[0] = ((fRec36[1] * fTemp21) + (fTemp20 * (1.0f - fTemp21))); + float fTemp22 = std::fabs(((fSlow54 * fRec37[0]) + (fSlow55 * fRec37[2]))); + float fTemp23 = ((fRec35[1] > fTemp22) ? fTemp6 : fTemp4); + fRec36[0] = ((fRec36[1] * fTemp23) + (fTemp22 * (1.0f - fTemp23))); fRec35[0] = fRec36[0]; - fRec38[0] = (fTemp0 - (fSlow58 * ((fConst31 * fRec38[1]) + (fSlow59 * fRec38[2])))); + fRec38[0] = (fTemp0 - (fSlow58 * ((fSlow59 * fRec38[2]) + (fConst31 * fRec38[1])))); fRec41[0] = (fTemp1 - (fSlow58 * ((fSlow59 * fRec41[2]) + (fConst31 * fRec41[1])))); - float fTemp22 = std::fabs(((fSlow60 * fRec41[0]) + (fSlow61 * fRec41[2]))); - float fTemp23 = ((fRec39[1] > fTemp22)?fTemp4:fTemp3); - fRec40[0] = ((fRec40[1] * fTemp23) + (fTemp22 * (1.0f - fTemp23))); + float fTemp24 = std::fabs(((fSlow60 * fRec41[0]) + (fSlow61 * fRec41[2]))); + float fTemp25 = ((fRec39[1] > fTemp24) ? fTemp6 : fTemp4); + fRec40[0] = ((fRec40[1] * fTemp25) + (fTemp24 * (1.0f - fTemp25))); fRec39[0] = fRec40[0]; - fRec44[0] = (fTemp1 - (fSlow64 * ((fSlow65 * fRec44[2]) + (fConst34 * fRec44[1])))); - float fTemp24 = std::fabs(((fSlow63 * fRec44[0]) + (fSlow66 * fRec44[2]))); - float fTemp25 = ((fRec42[1] > fTemp24)?fTemp4:fTemp3); - fRec43[0] = ((fTemp25 * fRec43[1]) + (fTemp24 * (1.0f - fTemp25))); - fRec42[0] = fRec43[0]; - fRec45[0] = (fTemp0 - (fSlow64 * ((fSlow65 * fRec45[2]) + (fConst34 * fRec45[1])))); - fRec46[0] = (fTemp0 - (fSlow70 * ((fSlow71 * fRec46[2]) + (fConst37 * fRec46[1])))); - fRec49[0] = (fTemp1 - (fSlow70 * ((fSlow71 * fRec49[2]) + (fConst37 * fRec49[1])))); - float fTemp26 = std::fabs(((fSlow69 * fRec49[0]) + (fSlow72 * fRec49[2]))); - float fTemp27 = ((fRec47[1] > fTemp26)?fTemp4:fTemp3); - fRec48[0] = ((fRec48[1] * fTemp27) + (fTemp26 * (1.0f - fTemp27))); + fRec42[0] = (fTemp0 - (fSlow63 * ((fSlow64 * fRec42[2]) + (fConst34 * fRec42[1])))); + fRec45[0] = (fTemp1 - (fSlow63 * ((fSlow64 * fRec45[2]) + (fConst34 * fRec45[1])))); + float fTemp26 = std::fabs(((fSlow65 * fRec45[0]) + (fSlow66 * fRec45[2]))); + float fTemp27 = ((fRec43[1] > fTemp26) ? fTemp6 : fTemp4); + fRec44[0] = ((fRec44[1] * fTemp27) + (fTemp26 * (1.0f - fTemp27))); + fRec43[0] = fRec44[0]; + fRec46[0] = (fTemp0 - (fSlow68 * ((fSlow69 * fRec46[2]) + (fConst37 * fRec46[1])))); + fRec49[0] = (fTemp1 - (fSlow68 * ((fSlow69 * fRec49[2]) + (fConst37 * fRec49[1])))); + float fTemp28 = std::fabs(((fSlow70 * fRec49[0]) + (fSlow71 * fRec49[2]))); + float fTemp29 = ((fRec47[1] > fTemp28) ? fTemp6 : fTemp4); + fRec48[0] = ((fRec48[1] * fTemp29) + (fTemp28 * (1.0f - fTemp29))); fRec47[0] = fRec48[0]; fRec50[0] = (fTemp0 - (fSlow74 * ((fSlow75 * fRec50[2]) + (fConst40 * fRec50[1])))); fRec53[0] = (fTemp1 - (fSlow74 * ((fSlow75 * fRec53[2]) + (fConst40 * fRec53[1])))); - float fTemp28 = std::fabs(((fSlow76 * fRec53[0]) + (fSlow77 * fRec53[2]))); - float fTemp29 = ((fRec51[1] > fTemp28)?fTemp4:fTemp3); - fRec52[0] = ((fRec52[1] * fTemp29) + (fTemp28 * (1.0f - fTemp29))); + float fTemp30 = std::fabs(((fSlow76 * fRec53[0]) + (fSlow77 * fRec53[2]))); + float fTemp31 = ((fRec51[1] > fTemp30) ? fTemp6 : fTemp4); + fRec52[0] = ((fRec52[1] * fTemp31) + (fTemp30 * (1.0f - fTemp31))); fRec51[0] = fRec52[0]; - fRec54[0] = (fTemp0 - (fSlow79 * ((fSlow80 * fRec54[2]) + (fConst43 * fRec54[1])))); - fRec57[0] = (fTemp1 - (fSlow79 * ((fSlow80 * fRec57[2]) + (fConst43 * fRec57[1])))); - float fTemp30 = std::fabs(((fSlow81 * fRec57[0]) + (fSlow82 * fRec57[2]))); - float fTemp31 = ((fRec55[1] > fTemp30)?fTemp4:fTemp3); - fRec56[0] = ((fRec56[1] * fTemp31) + (fTemp30 * (1.0f - fTemp31))); + fRec54[0] = (fTemp0 - (fSlow80 * ((fSlow81 * fRec54[2]) + (fConst43 * fRec54[1])))); + fRec57[0] = (fTemp1 - (fSlow80 * ((fSlow81 * fRec57[2]) + (fConst43 * fRec57[1])))); + float fTemp32 = std::fabs(((fSlow82 * fRec57[0]) + (fSlow83 * fRec57[2]))); + float fTemp33 = ((fRec55[1] > fTemp32) ? fTemp6 : fTemp4); + fRec56[0] = ((fRec56[1] * fTemp33) + (fTemp32 * (1.0f - fTemp33))); fRec55[0] = fRec56[0]; - fRec58[0] = (fTemp0 - (fSlow84 * ((fSlow85 * fRec58[2]) + (fConst46 * fRec58[1])))); - fRec61[0] = (fTemp1 - (fSlow84 * ((fConst46 * fRec61[1]) + (fSlow85 * fRec61[2])))); - float fTemp32 = std::fabs(((fSlow87 * fRec61[2]) + (fSlow86 * fRec61[0]))); - float fTemp33 = ((fRec59[1] > fTemp32)?fTemp4:fTemp3); - fRec60[0] = (((1.0f - fTemp33) * fTemp32) + (fRec60[1] * fTemp33)); + fRec58[0] = (fTemp0 - (fSlow85 * ((fSlow86 * fRec58[2]) + (fConst46 * fRec58[1])))); + fRec61[0] = (fTemp1 - (fSlow85 * ((fSlow86 * fRec61[2]) + (fConst46 * fRec61[1])))); + float fTemp34 = std::fabs(((fSlow87 * fRec61[0]) + (fSlow88 * fRec61[2]))); + float fTemp35 = ((fRec59[1] > fTemp34) ? fTemp6 : fTemp4); + fRec60[0] = ((fRec60[1] * fTemp35) + (fTemp34 * (1.0f - fTemp35))); fRec59[0] = fRec60[0]; fRec62[0] = (fTemp0 - (fSlow90 * ((fSlow91 * fRec62[2]) + (fConst49 * fRec62[1])))); fRec65[0] = (fTemp1 - (fSlow90 * ((fSlow91 * fRec65[2]) + (fConst49 * fRec65[1])))); - float fTemp34 = std::fabs(((fSlow92 * fRec65[2]) + (fSlow89 * fRec65[0]))); - float fTemp35 = ((fRec63[1] > fTemp34)?fTemp4:fTemp3); - fRec64[0] = ((fRec64[1] * fTemp35) + (fTemp34 * (1.0f - fTemp35))); + float fTemp36 = std::fabs(((fSlow92 * fRec65[0]) + (fSlow93 * fRec65[2]))); + float fTemp37 = ((fRec63[1] > fTemp36) ? fTemp6 : fTemp4); + fRec64[0] = ((fRec64[1] * fTemp37) + (fTemp36 * (1.0f - fTemp37))); fRec63[0] = fRec64[0]; fRec66[0] = (fTemp0 - (fSlow95 * ((fSlow96 * fRec66[2]) + (fConst52 * fRec66[1])))); fRec69[0] = (fTemp1 - (fSlow95 * ((fSlow96 * fRec69[2]) + (fConst52 * fRec69[1])))); - float fTemp36 = std::fabs(((fSlow97 * fRec69[0]) + (fSlow98 * fRec69[2]))); - float fTemp37 = ((fRec67[1] > fTemp36)?fTemp4:fTemp3); - fRec68[0] = ((fRec68[1] * fTemp37) + (fTemp36 * (1.0f - fTemp37))); + float fTemp38 = std::fabs(((fSlow97 * fRec69[0]) + (fSlow98 * fRec69[2]))); + float fTemp39 = ((fRec67[1] > fTemp38) ? fTemp6 : fTemp4); + fRec68[0] = ((fRec68[1] * fTemp39) + (fTemp38 * (1.0f - fTemp39))); fRec67[0] = fRec68[0]; - fRec70[0] = (fTemp0 - (fSlow101 * ((fSlow102 * fRec70[2]) + (fConst55 * fRec70[1])))); - fRec73[0] = (fTemp1 - (fSlow101 * ((fSlow102 * fRec73[2]) + (fConst55 * fRec73[1])))); - float fTemp38 = std::fabs(((fSlow103 * fRec73[0]) + (fSlow104 * fRec73[2]))); - float fTemp39 = ((fRec71[1] > fTemp38)?fTemp4:fTemp3); - fRec72[0] = ((fRec72[1] * fTemp39) + (fTemp38 * (1.0f - fTemp39))); + fRec70[0] = (fTemp0 - (fSlow100 * ((fSlow101 * fRec70[2]) + (fConst55 * fRec70[1])))); + fRec73[0] = (fTemp1 - (fSlow100 * ((fSlow101 * fRec73[2]) + (fConst55 * fRec73[1])))); + float fTemp40 = std::fabs(((fSlow102 * fRec73[0]) + (fSlow103 * fRec73[2]))); + float fTemp41 = ((fRec71[1] > fTemp40) ? fTemp6 : fTemp4); + fRec72[0] = ((fRec72[1] * fTemp41) + (fTemp40 * (1.0f - fTemp41))); fRec71[0] = fRec72[0]; - fRec74[0] = (fTemp0 - (fSlow107 * ((fSlow108 * fRec74[2]) + (fConst58 * fRec74[1])))); - fRec77[0] = (fTemp1 - (fSlow107 * ((fSlow108 * fRec77[2]) + (fConst58 * fRec77[1])))); - float fTemp40 = std::fabs(((fSlow109 * fRec77[0]) + (fSlow110 * fRec77[2]))); - float fTemp41 = ((fRec75[1] > fTemp40)?fTemp4:fTemp3); - fRec76[0] = ((fRec76[1] * fTemp41) + (fTemp40 * (1.0f - fTemp41))); + fRec74[0] = (fTemp0 - (fSlow105 * ((fSlow106 * fRec74[2]) + (fConst58 * fRec74[1])))); + fRec77[0] = (fTemp1 - (fSlow105 * ((fSlow106 * fRec77[2]) + (fConst58 * fRec77[1])))); + float fTemp42 = std::fabs(((fSlow107 * fRec77[0]) + (fSlow108 * fRec77[2]))); + float fTemp43 = ((fRec75[1] > fTemp42) ? fTemp6 : fTemp4); + fRec76[0] = ((fRec76[1] * fTemp43) + (fTemp42 * (1.0f - fTemp43))); fRec75[0] = fRec76[0]; - fRec78[0] = (fTemp0 - (fSlow112 * ((fSlow113 * fRec78[2]) + (fConst61 * fRec78[1])))); - fRec81[0] = (fTemp1 - (fSlow112 * ((fSlow113 * fRec81[2]) + (fConst61 * fRec81[1])))); - float fTemp42 = std::fabs(((fSlow114 * fRec81[0]) + (fSlow115 * fRec81[2]))); - float fTemp43 = ((fRec79[1] > fTemp42)?fTemp4:fTemp3); - fRec80[0] = ((fRec80[1] * fTemp43) + (fTemp42 * (1.0f - fTemp43))); + fRec78[0] = (fTemp0 - (fSlow111 * ((fSlow112 * fRec78[2]) + (fConst61 * fRec78[1])))); + fRec81[0] = (fTemp1 - (fSlow111 * ((fSlow112 * fRec81[2]) + (fConst61 * fRec81[1])))); + float fTemp44 = std::fabs(((fSlow113 * fRec81[0]) + (fSlow114 * fRec81[2]))); + float fTemp45 = ((fRec79[1] > fTemp44) ? fTemp6 : fTemp4); + fRec80[0] = ((fRec80[1] * fTemp45) + (fTemp44 * (1.0f - fTemp45))); fRec79[0] = fRec80[0]; fRec82[0] = (fTemp0 - (fSlow117 * ((fSlow118 * fRec82[2]) + (fConst64 * fRec82[1])))); fRec85[0] = (fTemp1 - (fSlow117 * ((fSlow118 * fRec85[2]) + (fConst64 * fRec85[1])))); - float fTemp44 = std::fabs(((fSlow119 * fRec85[0]) + (fSlow120 * fRec85[2]))); - float fTemp45 = ((fRec83[1] > fTemp44)?fTemp4:fTemp3); - fRec84[0] = ((fRec84[1] * fTemp45) + (fTemp44 * (1.0f - fTemp45))); + float fTemp46 = std::fabs(((fSlow119 * fRec85[0]) + (fSlow120 * fRec85[2]))); + float fTemp47 = ((fRec83[1] > fTemp46) ? fTemp6 : fTemp4); + fRec84[0] = ((fRec84[1] * fTemp47) + (fTemp46 * (1.0f - fTemp47))); fRec83[0] = fRec84[0]; - fRec86[0] = (fTemp0 - (fSlow123 * ((fConst67 * fRec86[1]) + (fSlow124 * fRec86[2])))); - fRec89[0] = (fTemp1 - (fSlow123 * ((fConst67 * fRec89[1]) + (fSlow124 * fRec89[2])))); - float fTemp46 = std::fabs(((fSlow122 * fRec89[0]) + (fSlow125 * fRec89[2]))); - float fTemp47 = ((fRec87[1] > fTemp46)?fTemp4:fTemp3); - fRec88[0] = ((fTemp47 * fRec88[1]) + ((1.0f - fTemp47) * fTemp46)); + fRec86[0] = (fTemp0 - (fSlow122 * ((fSlow123 * fRec86[2]) + (fConst67 * fRec86[1])))); + fRec89[0] = (fTemp1 - (fSlow122 * ((fSlow123 * fRec89[2]) + (fConst67 * fRec89[1])))); + float fTemp48 = std::fabs(((fSlow124 * fRec89[0]) + (fSlow125 * fRec89[2]))); + float fTemp49 = ((fRec87[1] > fTemp48) ? fTemp6 : fTemp4); + fRec88[0] = ((fRec88[1] * fTemp49) + (fTemp48 * (1.0f - fTemp49))); fRec87[0] = fRec88[0]; - fRec90[0] = (fTemp0 - (fSlow128 * ((fSlow129 * fRec90[2]) + (fConst70 * fRec90[1])))); - fRec93[0] = (fTemp1 - (fSlow128 * ((fSlow129 * fRec93[2]) + (fConst70 * fRec93[1])))); - float fTemp48 = std::fabs(((fSlow127 * fRec93[0]) + (fSlow130 * fRec93[2]))); - float fTemp49 = ((fRec91[1] > fTemp48)?fTemp4:fTemp3); - fRec92[0] = ((fRec92[1] * fTemp49) + (fTemp48 * (1.0f - fTemp49))); + fRec90[0] = (fTemp0 - (fSlow127 * ((fSlow128 * fRec90[2]) + (fConst70 * fRec90[1])))); + fRec93[0] = (fTemp1 - (fSlow127 * ((fSlow128 * fRec93[2]) + (fConst70 * fRec93[1])))); + float fTemp50 = std::fabs(((fSlow129 * fRec93[0]) + (fSlow130 * fRec93[2]))); + float fTemp51 = ((fRec91[1] > fTemp50) ? fTemp6 : fTemp4); + fRec92[0] = ((fRec92[1] * fTemp51) + (fTemp50 * (1.0f - fTemp51))); fRec91[0] = fRec92[0]; - fRec94[0] = (fTemp0 - (fSlow133 * ((fSlow134 * fRec94[2]) + (fConst73 * fRec94[1])))); - fRec97[0] = (fTemp1 - (fSlow133 * ((fSlow134 * fRec97[2]) + (fConst73 * fRec97[1])))); - float fTemp50 = std::fabs(((fSlow132 * fRec97[0]) + (fSlow135 * fRec97[2]))); - float fTemp51 = ((fRec95[1] > fTemp50)?fTemp4:fTemp3); - fRec96[0] = ((fRec96[1] * fTemp51) + (fTemp50 * (1.0f - fTemp51))); + fRec94[0] = (fTemp0 - (fSlow132 * ((fSlow133 * fRec94[2]) + (fConst73 * fRec94[1])))); + fRec97[0] = (fTemp1 - (fSlow132 * ((fSlow133 * fRec97[2]) + (fConst73 * fRec97[1])))); + float fTemp52 = std::fabs(((fSlow134 * fRec97[0]) + (fSlow135 * fRec97[2]))); + float fTemp53 = ((fRec95[1] > fTemp52) ? fTemp6 : fTemp4); + fRec96[0] = ((fRec96[1] * fTemp53) + (fTemp52 * (1.0f - fTemp53))); fRec95[0] = fRec96[0]; fRec98[0] = (fTemp0 - (fSlow138 * ((fSlow139 * fRec98[2]) + (fConst76 * fRec98[1])))); fRec101[0] = (fTemp1 - (fSlow138 * ((fSlow139 * fRec101[2]) + (fConst76 * fRec101[1])))); - float fTemp52 = std::fabs(((fSlow137 * fRec101[0]) + (fSlow140 * fRec101[2]))); - float fTemp53 = ((fRec99[1] > fTemp52)?fTemp4:fTemp3); - fRec100[0] = ((fRec100[1] * fTemp53) + (fTemp52 * (1.0f - fTemp53))); + float fTemp54 = std::fabs(((fSlow137 * fRec101[0]) + (fSlow140 * fRec101[2]))); + float fTemp55 = ((fRec99[1] > fTemp54) ? fTemp6 : fTemp4); + fRec100[0] = ((fRec100[1] * fTemp55) + (fTemp54 * (1.0f - fTemp55))); fRec99[0] = fRec100[0]; - fRec102[0] = (fTemp0 - (fSlow143 * ((fConst79 * fRec102[1]) + (fSlow144 * fRec102[2])))); + fRec102[0] = (fTemp0 - (fSlow143 * ((fSlow144 * fRec102[2]) + (fConst79 * fRec102[1])))); fRec105[0] = (fTemp1 - (fSlow143 * ((fSlow144 * fRec105[2]) + (fConst79 * fRec105[1])))); - float fTemp54 = std::fabs(((fSlow142 * fRec105[0]) + (fSlow145 * fRec105[2]))); - float fTemp55 = ((fRec103[1] > fTemp54)?fTemp4:fTemp3); - fRec104[0] = ((fRec104[1] * fTemp55) + (fTemp54 * (1.0f - fTemp55))); + float fTemp56 = std::fabs(((fSlow142 * fRec105[0]) + (fSlow145 * fRec105[2]))); + float fTemp57 = ((fRec103[1] > fTemp56) ? fTemp6 : fTemp4); + fRec104[0] = ((fRec104[1] * fTemp57) + (fTemp56 * (1.0f - fTemp57))); fRec103[0] = fRec104[0]; - fRec106[0] = (fTemp0 - (fSlow148 * ((fConst82 * fRec106[1]) + (fSlow149 * fRec106[2])))); - fRec109[0] = (fTemp1 - (fSlow148 * ((fSlow149 * fRec109[2]) + (fConst82 * fRec109[1])))); - float fTemp56 = std::fabs(((fSlow147 * fRec109[0]) + (fSlow150 * fRec109[2]))); - float fTemp57 = ((fRec107[1] > fTemp56)?fTemp4:fTemp3); - fRec108[0] = ((fRec108[1] * fTemp57) + (fTemp56 * (1.0f - fTemp57))); + fRec106[0] = (fTemp0 - (fSlow147 * ((fSlow148 * fRec106[2]) + (fConst82 * fRec106[1])))); + fRec109[0] = (fTemp1 - (fSlow147 * ((fSlow148 * fRec109[2]) + (fConst82 * fRec109[1])))); + float fTemp58 = std::fabs(((fSlow149 * fRec109[0]) + (fSlow150 * fRec109[2]))); + float fTemp59 = ((fRec107[1] > fTemp58) ? fTemp6 : fTemp4); + fRec108[0] = ((fRec108[1] * fTemp59) + (fTemp58 * (1.0f - fTemp59))); fRec107[0] = fRec108[0]; - fRec110[0] = (fTemp0 - (fSlow153 * ((fSlow154 * fRec110[2]) + (fConst85 * fRec110[1])))); - fRec113[0] = (fTemp1 - (fSlow153 * ((fConst85 * fRec113[1]) + (fSlow154 * fRec113[2])))); - float fTemp58 = std::fabs(((fSlow152 * fRec113[0]) + (fSlow155 * fRec113[2]))); - float fTemp59 = ((fRec111[1] > fTemp58)?fTemp4:fTemp3); - fRec112[0] = ((fRec112[1] * fTemp59) + (fTemp58 * (1.0f - fTemp59))); + fRec110[0] = (fTemp0 - (fSlow152 * ((fSlow153 * fRec110[2]) + (fConst85 * fRec110[1])))); + fRec113[0] = (fTemp1 - (fSlow152 * ((fSlow153 * fRec113[2]) + (fConst85 * fRec113[1])))); + float fTemp60 = std::fabs(((fSlow154 * fRec113[0]) + (fSlow155 * fRec113[2]))); + float fTemp61 = ((fRec111[1] > fTemp60) ? fTemp6 : fTemp4); + fRec112[0] = ((fRec112[1] * fTemp61) + (fTemp60 * (1.0f - fTemp61))); fRec111[0] = fRec112[0]; - fRec114[0] = (fTemp0 - (fSlow158 * ((fConst88 * fRec114[1]) + (fSlow159 * fRec114[2])))); - fRec117[0] = (fTemp1 - (fSlow158 * ((fSlow159 * fRec117[2]) + (fConst88 * fRec117[1])))); - float fTemp60 = std::fabs(((fSlow157 * fRec117[0]) + (fSlow160 * fRec117[2]))); - float fTemp61 = ((fRec115[1] > fTemp60)?fTemp4:fTemp3); - fRec116[0] = ((fRec116[1] * fTemp61) + (fTemp60 * (1.0f - fTemp61))); + fRec114[0] = (fTemp0 - (fSlow157 * ((fSlow158 * fRec114[2]) + (fConst88 * fRec114[1])))); + fRec117[0] = (fTemp1 - (fSlow157 * ((fSlow158 * fRec117[2]) + (fConst88 * fRec117[1])))); + float fTemp62 = std::fabs(((fSlow159 * fRec117[0]) + (fSlow160 * fRec117[2]))); + float fTemp63 = ((fRec115[1] > fTemp62) ? fTemp6 : fTemp4); + fRec116[0] = ((fRec116[1] * fTemp63) + (fTemp62 * (1.0f - fTemp63))); fRec115[0] = fRec116[0]; - fRec118[0] = (fTemp0 - (fSlow163 * ((fConst91 * fRec118[1]) + (fSlow164 * fRec118[2])))); - fRec121[0] = (fTemp1 - (fSlow163 * ((fSlow164 * fRec121[2]) + (fConst91 * fRec121[1])))); - float fTemp62 = std::fabs(((fSlow162 * fRec121[0]) + (fSlow165 * fRec121[2]))); - float fTemp63 = ((fRec119[1] > fTemp62)?fTemp4:fTemp3); - fRec120[0] = ((fRec120[1] * fTemp63) + (fTemp62 * (1.0f - fTemp63))); + fRec118[0] = (fTemp0 - (fSlow162 * ((fSlow163 * fRec118[2]) + (fConst91 * fRec118[1])))); + fRec121[0] = (fTemp1 - (fSlow162 * ((fSlow163 * fRec121[2]) + (fConst91 * fRec121[1])))); + float fTemp64 = std::fabs(((fSlow164 * fRec121[0]) + (fSlow165 * fRec121[2]))); + float fTemp65 = ((fRec119[1] > fTemp64) ? fTemp6 : fTemp4); + fRec120[0] = ((fRec120[1] * fTemp65) + (fTemp64 * (1.0f - fTemp65))); fRec119[0] = fRec120[0]; - fRec122[0] = (fTemp0 - (fSlow168 * ((fConst94 * fRec122[1]) + (fSlow169 * fRec122[2])))); - fRec125[0] = (fTemp1 - (fSlow168 * ((fConst94 * fRec125[1]) + (fSlow169 * fRec125[2])))); - float fTemp64 = std::fabs(((fSlow167 * fRec125[0]) + (fSlow170 * fRec125[2]))); - float fTemp65 = ((fRec123[1] > fTemp64)?fTemp4:fTemp3); - fRec124[0] = ((fRec124[1] * fTemp65) + (fTemp64 * (1.0f - fTemp65))); + fRec122[0] = (fTemp0 - (fSlow167 * ((fSlow168 * fRec122[2]) + (fConst94 * fRec122[1])))); + fRec125[0] = (fTemp1 - (fSlow167 * ((fSlow168 * fRec125[2]) + (fConst94 * fRec125[1])))); + float fTemp66 = std::fabs(((fSlow169 * fRec125[0]) + (fSlow170 * fRec125[2]))); + float fTemp67 = ((fRec123[1] > fTemp66) ? fTemp6 : fTemp4); + fRec124[0] = ((fRec124[1] * fTemp67) + (fTemp66 * (1.0f - fTemp67))); fRec123[0] = fRec124[0]; - fRec126[0] = (fTemp0 - (fSlow173 * ((fConst97 * fRec126[1]) + (fSlow174 * fRec126[2])))); - fRec129[0] = (fTemp1 - (fSlow173 * ((fSlow174 * fRec129[2]) + (fConst97 * fRec129[1])))); - float fTemp66 = std::fabs(((fSlow172 * fRec129[0]) + (fSlow175 * fRec129[2]))); - float fTemp67 = ((fRec127[1] > fTemp66)?fTemp4:fTemp3); - fRec128[0] = ((fRec128[1] * fTemp67) + (fTemp66 * (1.0f - fTemp67))); + fRec126[0] = (fTemp0 - (fSlow172 * ((fSlow173 * fRec126[2]) + (fConst97 * fRec126[1])))); + fRec129[0] = (fTemp1 - (fSlow172 * ((fSlow173 * fRec129[2]) + (fConst97 * fRec129[1])))); + float fTemp68 = std::fabs(((fSlow174 * fRec129[0]) + (fSlow175 * fRec129[2]))); + float fTemp69 = ((fRec127[1] > fTemp68) ? fTemp6 : fTemp4); + fRec128[0] = ((fRec128[1] * fTemp69) + (fTemp68 * (1.0f - fTemp69))); fRec127[0] = fRec128[0]; - output0[i] = FAUSTFLOAT(((((((((((((((((((((((((fRec0[2] * (0.0f - (fSlow5 * fRec1[0]))) + ((fSlow5 * (fRec0[0] * fRec1[0])) + ((fRec6[2] * (0.0f - (fSlow13 * fRec7[0]))) + ((fSlow13 * (fRec6[0] * fRec7[0])) + ((fRec10[2] * (0.0f - (fSlow19 * fRec11[0]))) + ((fSlow19 * (fRec10[0] * fRec11[0])) + ((fRec14[2] * (0.0f - (fSlow25 * fRec15[0]))) + ((fSlow25 * (fRec14[0] * fRec15[0])) + ((fRec18[2] * (0.0f - (fSlow31 * fRec19[0]))) + ((fSlow31 * (fRec18[0] * fRec19[0])) + ((fRec22[2] * (0.0f - (fSlow36 * fRec23[0]))) + ((fSlow36 * (fRec22[0] * fRec23[0])) + ((fRec26[2] * (0.0f - (fSlow42 * fRec27[0]))) + ((fSlow42 * (fRec26[0] * fRec27[0])) + ((fRec30[2] * (0.0f - (fSlow48 * fRec31[0]))) + ((fRec34[2] * (0.0f - (fSlow54 * fRec35[0]))) + ((fSlow54 * (fRec34[0] * fRec35[0])) + ((fRec38[2] * (0.0f - (fSlow60 * fRec39[0]))) + ((fSlow60 * (fRec38[0] * fRec39[0])) + (((0.0f - (fSlow63 * fRec42[0])) * fRec45[2]) + ((fSlow63 * (fRec45[0] * fRec42[0])) + ((fSlow69 * (fRec46[0] * fRec47[0])) + ((fRec50[2] * (0.0f - (fSlow76 * fRec51[0]))) + ((fSlow76 * (fRec50[0] * fRec51[0])) + ((fRec54[2] * (0.0f - (fSlow81 * fRec55[0]))) + ((fSlow81 * (fRec54[0] * fRec55[0])) + ((fRec58[2] * (0.0f - (fSlow86 * fRec59[0]))) + ((fSlow86 * (fRec58[0] * fRec59[0])) + ((fSlow89 * (fRec62[0] * fRec63[0])) + ((fRec62[2] * (0.0f - (fSlow89 * fRec63[0]))) + ((fRec66[2] * (0.0f - (fSlow97 * fRec67[0]))) + (((fRec70[2] * (0.0f - (fSlow103 * fRec71[0]))) + (((fRec74[2] * (0.0f - (fSlow109 * fRec75[0]))) + (((fRec78[2] * (0.0f - (fSlow114 * fRec79[0]))) + (((fRec82[2] * (0.0f - (fSlow119 * fRec83[0]))) + (((fSlow122 * (fRec86[0] * fRec87[0])) + ((0.0f - (fSlow122 * fRec87[0])) * fRec86[2])) + (fSlow119 * (fRec82[0] * fRec83[0])))) + (fSlow114 * (fRec78[0] * fRec79[0])))) + (fSlow109 * (fRec74[0] * fRec75[0])))) + (fSlow103 * (fRec70[0] * fRec71[0])))) + (fSlow97 * (fRec66[0] * fRec67[0])))))))))))))))))))))))))))))))))) + (fSlow127 * (fRec90[0] * fRec91[0]))) + (fRec90[2] * (0.0f - (fSlow127 * fRec91[0])))) + (fSlow132 * (fRec94[0] * fRec95[0]))) + (fRec94[2] * (0.0f - (fSlow132 * fRec95[0])))) + (fRec46[2] * (0.0f - (fSlow69 * fRec47[0])))) + (fSlow137 * (fRec98[0] * fRec99[0]))) + (fRec98[2] * (0.0f - (fSlow137 * fRec99[0])))) + (fSlow142 * (fRec102[0] * fRec103[0]))) + (fRec102[2] * (0.0f - (fSlow142 * fRec103[0])))) + (fSlow147 * (fRec106[0] * fRec107[0]))) + (fRec106[2] * (0.0f - (fSlow147 * fRec107[0])))) + (fSlow48 * (fRec30[0] * fRec31[0]))) + (fSlow152 * (fRec110[0] * fRec111[0]))) + (fRec110[2] * (0.0f - (fSlow152 * fRec111[0])))) + (fSlow157 * (fRec114[0] * fRec115[0]))) + (fRec114[2] * (0.0f - (fSlow157 * fRec115[0])))) + (fSlow162 * (fRec118[0] * fRec119[0]))) + (fRec118[2] * (0.0f - (fSlow162 * fRec119[0])))) + (fSlow167 * (fRec122[0] * fRec123[0]))) + (fRec122[2] * (0.0f - (fSlow167 * fRec123[0])))) + (fSlow172 * (fRec126[0] * fRec127[0]))) + (fRec126[2] * (0.0f - (fSlow172 * fRec127[0]))))); + output0[i] = FAUSTFLOAT(((fRec0[2] * (0.0f - (fSlow5 * fRec1[0]))) + (((fRec6[2] * (0.0f - (fSlow13 * fRec7[0]))) + ((fSlow13 * (fRec6[0] * fRec7[0])) + ((fRec10[2] * (0.0f - (fSlow19 * fRec11[0]))) + ((fSlow19 * (fRec10[0] * fRec11[0])) + ((fRec14[2] * (0.0f - (fSlow25 * fRec15[0]))) + ((fSlow25 * (fRec14[0] * fRec15[0])) + ((fRec18[2] * (0.0f - (fSlow31 * fRec19[0]))) + ((fSlow31 * (fRec18[0] * fRec19[0])) + ((fRec22[2] * (0.0f - (fSlow37 * fRec23[0]))) + ((fSlow37 * (fRec22[0] * fRec23[0])) + ((fRec26[2] * (0.0f - (fSlow43 * fRec27[0]))) + (((fRec30[2] * (0.0f - (fSlow49 * fRec31[0]))) + (((fRec34[2] * (0.0f - (fSlow54 * fRec35[0]))) + (((fRec38[2] * (0.0f - (fSlow60 * fRec39[0]))) + (((fRec42[2] * (0.0f - (fSlow65 * fRec43[0]))) + (((fRec46[2] * (0.0f - (fSlow70 * fRec47[0]))) + (((fRec50[2] * (0.0f - (fSlow76 * fRec51[0]))) + ((fSlow76 * (fRec50[0] * fRec51[0])) + ((fRec54[2] * (0.0f - (fSlow82 * fRec55[0]))) + ((fSlow82 * (fRec54[0] * fRec55[0])) + ((fRec58[2] * (0.0f - (fSlow87 * fRec59[0]))) + (((fRec62[2] * (0.0f - (fSlow92 * fRec63[0]))) + (((fRec66[2] * (0.0f - (fSlow97 * fRec67[0]))) + (((fRec70[2] * (0.0f - (fSlow102 * fRec71[0]))) + (((fRec74[2] * (0.0f - (fSlow107 * fRec75[0]))) + ((fSlow107 * (fRec74[0] * fRec75[0])) + ((fRec78[2] * (0.0f - (fSlow113 * fRec79[0]))) + ((fSlow113 * (fRec78[0] * fRec79[0])) + ((fRec82[2] * (0.0f - (fSlow119 * fRec83[0]))) + ((fSlow119 * (fRec82[0] * fRec83[0])) + ((fRec86[2] * (0.0f - (fSlow124 * fRec87[0]))) + ((fSlow124 * (fRec86[0] * fRec87[0])) + ((fRec90[2] * (0.0f - (fSlow129 * fRec91[0]))) + ((fSlow129 * (fRec90[0] * fRec91[0])) + ((fRec94[2] * (0.0f - (fSlow134 * fRec95[0]))) + ((fSlow137 * (fRec98[0] * fRec99[0])) + ((fRec98[2] * (0.0f - (fSlow137 * fRec99[0]))) + ((fSlow142 * (fRec102[0] * fRec103[0])) + ((fRec106[2] * (0.0f - (fSlow149 * fRec107[0]))) + (((fRec110[2] * (0.0f - (fSlow154 * fRec111[0]))) + (((fRec114[2] * (0.0f - (fSlow159 * fRec115[0]))) + (((fRec118[2] * (0.0f - (fSlow164 * fRec119[0]))) + (((fRec122[2] * (0.0f - (fSlow169 * fRec123[0]))) + (((fRec126[2] * (0.0f - (fSlow174 * fRec127[0]))) + (((fRec102[2] * (0.0f - (fSlow142 * fRec103[0]))) + (fSlow134 * (fRec94[0] * fRec95[0]))) + (fSlow174 * (fRec126[0] * fRec127[0])))) + (fSlow169 * (fRec122[0] * fRec123[0])))) + (fSlow164 * (fRec118[0] * fRec119[0])))) + (fSlow159 * (fRec114[0] * fRec115[0])))) + (fSlow154 * (fRec110[0] * fRec111[0])))) + (fSlow149 * (fRec106[0] * fRec107[0])))))))))))))))))) + (fSlow102 * (fRec70[0] * fRec71[0])))) + (fSlow97 * (fRec66[0] * fRec67[0])))) + (fSlow92 * (fRec62[0] * fRec63[0])))) + (fSlow87 * (fRec58[0] * fRec59[0])))))))) + (fSlow70 * (fRec46[0] * fRec47[0])))) + (fSlow65 * (fRec42[0] * fRec43[0])))) + (fSlow60 * (fRec38[0] * fRec39[0])))) + (fSlow54 * (fRec34[0] * fRec35[0])))) + (fSlow49 * (fRec30[0] * fRec31[0])))) + (fSlow43 * (fRec26[0] * fRec27[0])))))))))))))) + (fSlow5 * (fRec0[0] * fRec1[0]))))); fRec0[2] = fRec0[1]; fRec0[1] = fRec0[0]; fRec3[2] = fRec3[1]; @@ -1874,12 +1805,12 @@ class fx_vocoder : public dsp { fRec41[1] = fRec41[0]; fRec40[1] = fRec40[0]; fRec39[1] = fRec39[0]; - fRec44[2] = fRec44[1]; - fRec44[1] = fRec44[0]; - fRec43[1] = fRec43[0]; + fRec42[2] = fRec42[1]; fRec42[1] = fRec42[0]; fRec45[2] = fRec45[1]; fRec45[1] = fRec45[0]; + fRec44[1] = fRec44[0]; + fRec43[1] = fRec43[0]; fRec46[2] = fRec46[1]; fRec46[1] = fRec46[0]; fRec49[2] = fRec49[1]; @@ -2006,12 +1937,9 @@ class fx_vocoder : public dsp { fRec129[1] = fRec129[0]; fRec128[1] = fRec128[0]; fRec127[1] = fRec127[0]; - } - } - }; // clang-format on #endif diff --git a/ceammc/ext/src/fx/fx_wahwah.h b/ceammc/ext/src/fx/fx_wahwah.h index a7d251ae88..80b13fb1b6 100644 --- a/ceammc/ext/src/fx/fx_wahwah.h +++ b/ceammc/ext/src/fx/fx_wahwah.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "fx.wahwah" -Code generated with Faust 2.15.0 (https://faust.grame.fr) -Compilation options: cpp, -scal -ftz 0 +Code generated with Faust 2.22.1 (https://faust.grame.fr) +Compilation options: -lang cpp -scal -ftz 0 ------------------------------------------------------------ */ #ifndef __fx_wahwah_H__ @@ -14,6 +14,7 @@ Compilation options: cpp, -scal -ftz 0 #include #include +/************************** BEGIN dsp.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -96,23 +97,23 @@ class dsp { * - static class 'classInit': static tables initialization * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void init(int samplingRate) = 0; + virtual void init(int sample_rate) = 0; /** * Init instance state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceInit(int samplingRate) = 0; + virtual void instanceInit(int sample_rate) = 0; /** * Init instance constant state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceConstants(int samplingRate) = 0; + virtual void instanceConstants(int sample_rate) = 0; /* Init default control parameters values */ virtual void instanceResetUserInterface() = 0; @@ -149,8 +150,8 @@ class dsp { * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the number of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) * */ virtual void compute(double /*date_usec*/, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -169,16 +170,16 @@ class decorator_dsp : public dsp { public: - decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + decorator_dsp(dsp* dsp = nullptr):fDSP(dsp) {} virtual ~decorator_dsp() { delete fDSP; } virtual int getNumInputs() { return fDSP->getNumInputs(); } virtual int getNumOutputs() { return fDSP->getNumOutputs(); } virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } virtual int getSampleRate() { return fDSP->getSampleRate(); } - virtual void init(int samplingRate) { fDSP->init(samplingRate); } - virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } - virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void init(int sample_rate) { fDSP->init(sample_rate); } + virtual void instanceInit(int sample_rate) { fDSP->instanceInit(sample_rate); } + virtual void instanceConstants(int sample_rate) { fDSP->instanceConstants(sample_rate); } virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } @@ -233,6 +234,8 @@ class dsp_factory { #endif #endif +/************************** END dsp.h **************************/ +/************************** BEGIN UI.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -272,45 +275,54 @@ class dsp_factory { struct Soundfile; -class UI +template +class UIReal { - + public: - - UI() {} - - virtual ~UI() {} - + + UIReal() {} + virtual ~UIReal() {} + // -- widget's layouts - + virtual void openTabBox(const char* label) = 0; virtual void openHorizontalBox(const char* label) = 0; virtual void openVerticalBox(const char* label) = 0; virtual void closeBox() = 0; - + // -- active widgets - - virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - + + virtual void addButton(const char* label, REAL* zone) = 0; + virtual void addCheckButton(const char* label, REAL* zone) = 0; + virtual void addVerticalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addHorizontalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addNumEntry(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + // -- passive widgets - - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - + + virtual void addHorizontalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + virtual void addVerticalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + // -- soundfiles - + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; - + // -- metadata declarations + + virtual void declare(REAL* zone, const char* key, const char* val) {} +}; + +struct UI : public UIReal +{ - virtual void declare(FAUSTFLOAT*, const char*, const char*) {} + UI() {} + virtual ~UI() {} }; #endif +/************************** END UI.h **************************/ +/************************** BEGIN meta.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -339,11 +351,14 @@ class UI struct Meta { - virtual void declare(const char* key, const char* value) = 0; virtual ~Meta() {}; + virtual void declare(const char* key, const char* value) = 0; + }; #endif +/************************** END meta.h **************************/ +/************************** BEGIN misc.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -366,7 +381,7 @@ struct Meta that work under terms of your choice, so long as this FAUST architecture section is not modified. ************************************************************************/ - + #ifndef __misc__ #define __misc__ @@ -374,6 +389,8 @@ struct Meta #include #include #include +#include +#include using std::max; @@ -395,27 +412,65 @@ static int int2pow2(int x) { int r = 0; while ((1< #include - class fx_wahwahSIG0 { private: @@ -456,27 +510,23 @@ class fx_wahwahSIG0 { int getNumInputsfx_wahwahSIG0() { return 0; - } int getNumOutputsfx_wahwahSIG0() { return 1; - } int getInputRatefx_wahwahSIG0(int channel) { int rate; - switch (channel) { + switch ((channel)) { default: { rate = -1; break; } - } return rate; - } int getOutputRatefx_wahwahSIG0(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 0; break; @@ -485,36 +535,32 @@ class fx_wahwahSIG0 { rate = -1; break; } - } return rate; - } - void instanceInitfx_wahwahSIG0(int samplingFreq) { - + void instanceInitfx_wahwahSIG0(int sample_rate) { } - void fillfx_wahwahSIG0(int count, float* output) { + void fillfx_wahwahSIG0(int count, float* table) { for (int i = 0; (i < count); i = (i + 1)) { - output[i] = 0.0f; - + table[i] = 0.0f; } - } + }; -fx_wahwahSIG0* newfx_wahwahSIG0() { return (fx_wahwahSIG0*)new fx_wahwahSIG0(); } -void deletefx_wahwahSIG0(fx_wahwahSIG0* dsp) { delete dsp; } +static fx_wahwahSIG0* newfx_wahwahSIG0() { return (fx_wahwahSIG0*)new fx_wahwahSIG0(); } +static void deletefx_wahwahSIG0(fx_wahwahSIG0* dsp) { delete dsp; } static float fx_wahwah_faustpower2_f(float value) { return (value * value); - } #ifndef FAUSTCLASS #define FAUSTCLASS fx_wahwah #endif + #ifdef __APPLE__ #define exp10f __exp10f #define exp10 __exp10 @@ -525,40 +571,49 @@ class fx_wahwah : public dsp { private: FAUSTFLOAT fCheckbox0; + FAUSTFLOAT fHslider0; int iVec0[2]; + float fRec0[2]; float ftbl0[16]; - int fSamplingFreq; + int fSampleRate; float fConst0; float fConst1; - FAUSTFLOAT fHslider0; - float fRec3[2]; - int iRec2[2]; - int iVec1[2]; FAUSTFLOAT fHslider1; - float fVec2[2]; float fRec4[2]; - int iRec5[2]; - float fRec1[2]; + int iRec3[2]; + int iVec1[2]; + FAUSTFLOAT fHslider2; + float fVec2[2]; + float fRec5[2]; + int iRec6[2]; + float fRec2[2]; float fConst2; float fConst3; - float fRec6[2]; float fRec7[2]; - float fRec0[3]; - FAUSTFLOAT fHslider2; float fRec8[2]; + float fRec1[3]; public: void metadata(Meta* m) { m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.0"); + m->declare("basics.lib/version", "0.1"); m->declare("ceammc.lib/name", "Ceammc PureData misc utils"); m->declare("ceammc.lib/version", "0.1.1"); m->declare("ceammc_ui.lib/name", "CEAMMC faust default UI elements"); m->declare("ceammc_ui.lib/version", "0.1.1"); - m->declare("filename", "fx_wahwah"); + m->declare("filename", "fx_wahwah.dsp"); + m->declare("filters.lib/fir:author", "Julius O. Smith III"); + m->declare("filters.lib/fir:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/fir:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/iir:author", "Julius O. Smith III"); + m->declare("filters.lib/iir:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/iir:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/lowpass0_highpass1", "Copyright (C) 2003-2019 by Julius O. Smith III "); m->declare("filters.lib/name", "Faust Filters Library"); - m->declare("filters.lib/version", "0.0"); + m->declare("filters.lib/tf2:author", "Julius O. Smith III"); + m->declare("filters.lib/tf2:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/tf2:license", "MIT-style STK-4.3 license"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); @@ -573,15 +628,13 @@ class fx_wahwah : public dsp { virtual int getNumInputs() { return 1; - } virtual int getNumOutputs() { return 1; - } virtual int getInputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -590,14 +643,12 @@ class fx_wahwah : public dsp { rate = -1; break; } - } return rate; - } virtual int getOutputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -606,95 +657,77 @@ class fx_wahwah : public dsp { rate = -1; break; } - } return rate; - } - static void classInit(int samplingFreq) { - + static void classInit(int sample_rate) { } - virtual void instanceConstants(int samplingFreq) { - fSamplingFreq = samplingFreq; + virtual void instanceConstants(int sample_rate) { + fSampleRate = sample_rate; fx_wahwahSIG0* sig0 = newfx_wahwahSIG0(); - sig0->instanceInitfx_wahwahSIG0(samplingFreq); + sig0->instanceInitfx_wahwahSIG0(sample_rate); sig0->fillfx_wahwahSIG0(16, ftbl0); - fConst0 = std::min(192000.0f, std::max(1.0f, float(fSamplingFreq))); + fConst0 = std::min(192000.0f, std::max(1.0f, float(fSampleRate))); fConst1 = (60.0f * fConst0); fConst2 = (1413.71667f / fConst0); fConst3 = (2827.43335f / fConst0); deletefx_wahwahSIG0(sig0); - } virtual void instanceResetUserInterface() { fCheckbox0 = FAUSTFLOAT(0.0f); - fHslider0 = FAUSTFLOAT(540.0f); - fHslider1 = FAUSTFLOAT(0.59999999999999998f); - fHslider2 = FAUSTFLOAT(1.0f); - + fHslider0 = FAUSTFLOAT(1.0f); + fHslider1 = FAUSTFLOAT(540.0f); + fHslider2 = FAUSTFLOAT(0.59999999999999998f); } virtual void instanceClear() { for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { iVec0[l0] = 0; - } for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { - fRec3[l1] = 0.0f; - + fRec0[l1] = 0.0f; } for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { - iRec2[l2] = 0; - + fRec4[l2] = 0.0f; } for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { - iVec1[l3] = 0; - + iRec3[l3] = 0; } for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { - fVec2[l4] = 0.0f; - + iVec1[l4] = 0; } for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { - fRec4[l5] = 0.0f; - + fVec2[l5] = 0.0f; } for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { - iRec5[l6] = 0; - + fRec5[l6] = 0.0f; } for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) { - fRec1[l7] = 0.0f; - + iRec6[l7] = 0; } for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { - fRec6[l8] = 0.0f; - + fRec2[l8] = 0.0f; } for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { fRec7[l9] = 0.0f; - } - for (int l10 = 0; (l10 < 3); l10 = (l10 + 1)) { - fRec0[l10] = 0.0f; - + for (int l10 = 0; (l10 < 2); l10 = (l10 + 1)) { + fRec8[l10] = 0.0f; } - for (int l11 = 0; (l11 < 2); l11 = (l11 + 1)) { - fRec8[l11] = 0.0f; - + for (int l11 = 0; (l11 < 3); l11 = (l11 + 1)) { + fRec1[l11] = 0.0f; } - } - virtual void init(int samplingFreq) { - classInit(samplingFreq); - instanceInit(samplingFreq); + virtual void init(int sample_rate) { + classInit(sample_rate); + instanceInit(sample_rate); } - virtual void instanceInit(int samplingFreq) { - instanceConstants(samplingFreq); + virtual void instanceInit(int sample_rate) { + instanceConstants(sample_rate); instanceResetUserInterface(); instanceClear(); } @@ -702,21 +735,20 @@ class fx_wahwah : public dsp { virtual fx_wahwah* clone() { return new fx_wahwah(); } + virtual int getSampleRate() { - return fSamplingFreq; - + return fSampleRate; } virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("fx.wahwah"); - ui_interface->addHorizontalSlider("angle", &fHslider1, 0.600000024f, 0.0f, 1.0f, 0.00999999978f); + ui_interface->addHorizontalSlider("angle", &fHslider2, 0.600000024f, 0.0f, 1.0f, 0.00999999978f); ui_interface->addCheckButton("bypass", &fCheckbox0); - ui_interface->declare(&fHslider2, "style", "knob"); - ui_interface->addHorizontalSlider("drywet", &fHslider2, 1.0f, 0.0f, 1.0f, 0.00999999978f); - ui_interface->declare(&fHslider0, "unit", "bpm"); - ui_interface->addHorizontalSlider("speed", &fHslider0, 540.0f, 360.0f, 780.0f, 0.100000001f); + ui_interface->declare(&fHslider0, "style", "knob"); + ui_interface->addHorizontalSlider("drywet", &fHslider0, 1.0f, 0.0f, 1.0f, 0.00999999978f); + ui_interface->declare(&fHslider1, "unit", "bpm"); + ui_interface->addHorizontalSlider("speed", &fHslider1, 540.0f, 360.0f, 780.0f, 0.100000001f); ui_interface->closeBox(); - } virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { @@ -724,49 +756,46 @@ class fx_wahwah : public dsp { FAUSTFLOAT* output0 = outputs[0]; int iSlow0 = int(float(fCheckbox0)); float fSlow1 = (0.00100000005f * float(fHslider0)); - float fSlow2 = float(fHslider1); - int iSlow3 = (fSlow2 <= 0.0f); - float fSlow4 = (0.00100000005f * float(fHslider2)); + float fSlow2 = (0.00100000005f * float(fHslider1)); + float fSlow3 = float(fHslider2); + int iSlow4 = (fSlow3 <= 0.0f); for (int i = 0; (i < count); i = (i + 1)) { + float fTemp0 = float(input0[i]); + float fTemp1 = (iSlow0 ? 0.0f : fTemp0); iVec0[0] = 1; - fRec3[0] = (fSlow1 + (0.999000013f * fRec3[1])); - iRec2[0] = ((iVec0[1] + iRec2[1]) % int((fConst1 / float(int(fRec3[0]))))); - int iTemp0 = (iRec2[0] == 0); - iVec1[0] = iTemp0; - fVec2[0] = fSlow2; - fRec4[0] = (iVec1[1]?0.0f:(std::fabs((fSlow2 - fVec2[1])) + fRec4[1])); - iRec5[0] = ((iTemp0 + iRec5[1]) % 15); - ftbl0[((iTemp0 & ((fRec4[0] > 0.0f) | iSlow3))?iRec5[0]:15)] = fSlow2; - float fTemp1 = ftbl0[iRec5[0]]; - fRec1[0] = ((0.999000013f * fRec1[1]) + (9.99999975e-05f * std::pow(4.0f, fTemp1))); - float fTemp2 = float(input0[i]); - float fTemp3 = (iSlow0?0.0f:fTemp2); - float fTemp4 = std::pow(2.0f, (2.29999995f * fTemp1)); - float fTemp5 = (1.0f - (fConst2 * (fTemp4 / std::pow(2.0f, ((2.0f * (1.0f - fTemp1)) + 1.0f))))); - fRec6[0] = ((0.999000013f * fRec6[1]) - (0.00200000009f * (fTemp5 * std::cos((fConst3 * fTemp4))))); - fRec7[0] = ((0.999000013f * fRec7[1]) + (0.00100000005f * fx_wahwah_faustpower2_f(fTemp5))); - fRec0[0] = ((fRec1[0] * fTemp3) - ((fRec6[0] * fRec0[1]) + (fRec7[0] * fRec0[2]))); - fRec8[0] = (fSlow4 + (0.999000013f * fRec8[1])); - output0[i] = FAUSTFLOAT((iSlow0?fTemp2:(((fRec0[0] - fRec0[1]) * fRec8[0]) + (fTemp3 * (1.0f - fRec8[0]))))); + fRec0[0] = (fSlow1 + (0.999000013f * fRec0[1])); + fRec4[0] = (fSlow2 + (0.999000013f * fRec4[1])); + iRec3[0] = ((iVec0[1] + iRec3[1]) % int((fConst1 / float(int(fRec4[0]))))); + int iTemp2 = (iRec3[0] == 0); + iVec1[0] = iTemp2; + fVec2[0] = fSlow3; + fRec5[0] = (iVec1[1] ? 0.0f : (std::fabs((fSlow3 - fVec2[1])) + fRec5[1])); + iRec6[0] = ((iTemp2 + iRec6[1]) % 15); + ftbl0[((iTemp2 & ((fRec5[0] > 0.0f) | iSlow4)) ? iRec6[0] : 15)] = fSlow3; + float fTemp3 = ftbl0[iRec6[0]]; + fRec2[0] = ((0.999000013f * fRec2[1]) + (9.99999975e-05f * std::pow(4.0f, fTemp3))); + float fTemp4 = std::pow(2.0f, (2.29999995f * fTemp3)); + float fTemp5 = (1.0f - (fConst2 * (fTemp4 / std::pow(2.0f, ((2.0f * (1.0f - fTemp3)) + 1.0f))))); + fRec7[0] = ((0.999000013f * fRec7[1]) - (0.00200000009f * (fTemp5 * std::cos((fConst3 * fTemp4))))); + fRec8[0] = ((0.999000013f * fRec8[1]) + (0.00100000005f * fx_wahwah_faustpower2_f(fTemp5))); + fRec1[0] = ((fRec2[0] * fTemp1) - ((fRec7[0] * fRec1[1]) + (fRec8[0] * fRec1[2]))); + output0[i] = FAUSTFLOAT((iSlow0 ? fTemp0 : ((fTemp1 * (1.0f - fRec0[0])) + (fRec0[0] * (fRec1[0] - fRec1[1]))))); iVec0[1] = iVec0[0]; - fRec3[1] = fRec3[0]; - iRec2[1] = iRec2[0]; + fRec0[1] = fRec0[0]; + fRec4[1] = fRec4[0]; + iRec3[1] = iRec3[0]; iVec1[1] = iVec1[0]; fVec2[1] = fVec2[0]; - fRec4[1] = fRec4[0]; - iRec5[1] = iRec5[0]; - fRec1[1] = fRec1[0]; - fRec6[1] = fRec6[0]; + fRec5[1] = fRec5[0]; + iRec6[1] = iRec6[0]; + fRec2[1] = fRec2[0]; fRec7[1] = fRec7[0]; - fRec0[2] = fRec0[1]; - fRec0[1] = fRec0[0]; fRec8[1] = fRec8[0]; - + fRec1[2] = fRec1[1]; + fRec1[1] = fRec1[0]; } - } - }; // clang-format on #endif diff --git a/ceammc/ext/src/fx/fx_zita_rev1.h b/ceammc/ext/src/fx/fx_zita_rev1.h index 8b134dfd01..16df961680 100644 --- a/ceammc/ext/src/fx/fx_zita_rev1.h +++ b/ceammc/ext/src/fx/fx_zita_rev1.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "fx.zita_rev1" -Code generated with Faust 2.8.5 (https://faust.grame.fr) -Compilation options: cpp, -scal -ftz 0 +Code generated with Faust 2.22.1 (https://faust.grame.fr) +Compilation options: -lang cpp -scal -ftz 0 ------------------------------------------------------------ */ #ifndef __fx_zita_rev1_H__ @@ -14,6 +14,7 @@ Compilation options: cpp, -scal -ftz 0 #include #include +/************************** BEGIN dsp.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -96,23 +97,23 @@ class dsp { * - static class 'classInit': static tables initialization * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void init(int samplingRate) = 0; + virtual void init(int sample_rate) = 0; /** * Init instance state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceInit(int samplingRate) = 0; + virtual void instanceInit(int sample_rate) = 0; /** * Init instance constant state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceConstants(int samplingRate) = 0; + virtual void instanceConstants(int sample_rate) = 0; /* Init default control parameters values */ virtual void instanceResetUserInterface() = 0; @@ -149,8 +150,8 @@ class dsp { * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the number of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) * */ virtual void compute(double /*date_usec*/, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -169,16 +170,16 @@ class decorator_dsp : public dsp { public: - decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + decorator_dsp(dsp* dsp = nullptr):fDSP(dsp) {} virtual ~decorator_dsp() { delete fDSP; } virtual int getNumInputs() { return fDSP->getNumInputs(); } virtual int getNumOutputs() { return fDSP->getNumOutputs(); } virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } virtual int getSampleRate() { return fDSP->getSampleRate(); } - virtual void init(int samplingRate) { fDSP->init(samplingRate); } - virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } - virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void init(int sample_rate) { fDSP->init(sample_rate); } + virtual void instanceInit(int sample_rate) { fDSP->instanceInit(sample_rate); } + virtual void instanceConstants(int sample_rate) { fDSP->instanceConstants(sample_rate); } virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } @@ -233,6 +234,8 @@ class dsp_factory { #endif #endif +/************************** END dsp.h **************************/ +/************************** BEGIN UI.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -272,45 +275,54 @@ class dsp_factory { struct Soundfile; -class UI +template +class UIReal { - + public: - - UI() {} - - virtual ~UI() {} - + + UIReal() {} + virtual ~UIReal() {} + // -- widget's layouts - + virtual void openTabBox(const char* label) = 0; virtual void openHorizontalBox(const char* label) = 0; virtual void openVerticalBox(const char* label) = 0; virtual void closeBox() = 0; - + // -- active widgets - - virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - + + virtual void addButton(const char* label, REAL* zone) = 0; + virtual void addCheckButton(const char* label, REAL* zone) = 0; + virtual void addVerticalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addHorizontalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addNumEntry(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + // -- passive widgets - - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - + + virtual void addHorizontalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + virtual void addVerticalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + // -- soundfiles - + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; - + // -- metadata declarations + + virtual void declare(REAL* zone, const char* key, const char* val) {} +}; + +struct UI : public UIReal +{ - virtual void declare(FAUSTFLOAT*, const char*, const char*) {} + UI() {} + virtual ~UI() {} }; #endif +/************************** END UI.h **************************/ +/************************** BEGIN meta.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -339,11 +351,14 @@ class UI struct Meta { - virtual void declare(const char* key, const char* value) = 0; virtual ~Meta() {}; + virtual void declare(const char* key, const char* value) = 0; + }; #endif +/************************** END meta.h **************************/ +/************************** BEGIN misc.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -366,15 +381,16 @@ struct Meta that work under terms of your choice, so long as this FAUST architecture section is not modified. ************************************************************************/ - + #ifndef __misc__ #define __misc__ #include #include -#include -#include #include +#include +#include +#include using std::max; @@ -382,41 +398,79 @@ using std::min; struct XXXX_Meta : std::map { - void declare(const char* key, const char* value) { (*this)[key]=value; } + void declare(const char* key, const char* value) { (*this)[key] = value; } }; struct MY_Meta : Meta, std::map { - void declare(const char* key, const char* value) { (*this)[key]=value; } + void declare(const char* key, const char* value) { (*this)[key] = value; } }; -inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } +static int lsr(int x, int n) { return int(((unsigned int)x) >> n); } -inline int int2pow2(int x) { int r = 0; while ((1<declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.0"); + m->declare("basics.lib/version", "0.1"); m->declare("ceammc.lib/name", "Ceammc PureData misc utils"); m->declare("ceammc.lib/version", "0.1.1"); m->declare("ceammc_ui.lib/name", "CEAMMC faust default UI elements"); m->declare("ceammc_ui.lib/version", "0.1.1"); m->declare("delays.lib/name", "Faust Delay Library"); - m->declare("delays.lib/version", "0.0"); - m->declare("filename", "fx_zita_rev1"); + m->declare("delays.lib/version", "0.1"); + m->declare("filename", "fx_zita_rev1.dsp"); + m->declare("filters.lib/allpass_comb:author", "Julius O. Smith III"); + m->declare("filters.lib/allpass_comb:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/allpass_comb:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/lowpass0_highpass1", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/lowpass0_highpass1:author", "Julius O. Smith III"); + m->declare("filters.lib/lowpass:author", "Julius O. Smith III"); + m->declare("filters.lib/lowpass:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/lowpass:license", "MIT-style STK-4.3 license"); m->declare("filters.lib/name", "Faust Filters Library"); - m->declare("filters.lib/version", "0.0"); + m->declare("filters.lib/tf1:author", "Julius O. Smith III"); + m->declare("filters.lib/tf1:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/tf1:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/tf1s:author", "Julius O. Smith III"); + m->declare("filters.lib/tf1s:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/tf1s:license", "MIT-style STK-4.3 license"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); @@ -593,22 +660,20 @@ class fx_zita_rev1 : public dsp { m->declare("reverbs.lib/name", "Faust Reverb Library"); m->declare("reverbs.lib/version", "0.0"); m->declare("routes.lib/name", "Faust Signal Routing Library"); - m->declare("routes.lib/version", "0.0"); + m->declare("routes.lib/version", "0.1"); m->declare("signals.lib/name", "Faust Signal Routing Library"); m->declare("signals.lib/version", "0.0"); } virtual int getNumInputs() { return 2; - } virtual int getNumOutputs() { return 2; - } virtual int getInputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -621,14 +686,12 @@ class fx_zita_rev1 : public dsp { rate = -1; break; } - } return rate; - } virtual int getOutputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -641,295 +704,237 @@ class fx_zita_rev1 : public dsp { rate = -1; break; } - } return rate; - } - static void classInit(int samplingFreq) { - + static void classInit(int sample_rate) { } - virtual void instanceConstants(int samplingFreq) { - fSamplingFreq = samplingFreq; - fConst0 = std::min(192000.0f, std::max(1.0f, float(fSamplingFreq))); - fConst1 = (0.00100000005f * fConst0); - fConst2 = (6.28318548f / fConst0); - fConst3 = std::floor(((0.210389003f * fConst0) + 0.5f)); - fConst4 = ((0.0f - (6.90775537f * fConst3)) / fConst0); - fConst5 = (3.14159274f / fConst0); - fConst6 = std::floor(((0.0244210009f * fConst0) + 0.5f)); - iConst7 = int(std::min(32768.0f, std::max(0.0f, (fConst3 - fConst6)))); - iConst8 = int(std::min(4096.0f, std::max(0.0f, (fConst6 + -1.0f)))); - fConst9 = std::floor(((0.153128996f * fConst0) + 0.5f)); + virtual void instanceConstants(int sample_rate) { + fSampleRate = sample_rate; + fConst0 = std::min(192000.0f, std::max(1.0f, float(fSampleRate))); + fConst1 = std::floor(((0.219990999f * fConst0) + 0.5f)); + fConst2 = ((0.0f - (6.90775537f * fConst1)) / fConst0); + fConst3 = (6.28318548f / fConst0); + fConst4 = (3.14159274f / fConst0); + fConst5 = std::floor(((0.0191229992f * fConst0) + 0.5f)); + iConst6 = int(std::min(32768.0f, std::max(0.0f, (fConst1 - fConst5)))); + fConst7 = (0.00100000005f * fConst0); + iConst8 = int(std::min(2048.0f, std::max(0.0f, (fConst5 + -1.0f)))); + fConst9 = std::floor(((0.256891012f * fConst0) + 0.5f)); fConst10 = ((0.0f - (6.90775537f * fConst9)) / fConst0); - fConst11 = std::floor(((0.0203460008f * fConst0) + 0.5f)); - iConst12 = int(std::min(16384.0f, std::max(0.0f, (fConst9 - fConst11)))); - iConst13 = int(std::min(2048.0f, std::max(0.0f, (fConst11 + -1.0f)))); - fConst14 = std::floor(((0.125f * fConst0) + 0.5f)); + fConst11 = std::floor(((0.0273330007f * fConst0) + 0.5f)); + iConst12 = int(std::min(32768.0f, std::max(0.0f, (fConst9 - fConst11)))); + iConst13 = int(std::min(4096.0f, std::max(0.0f, (fConst11 + -1.0f)))); + fConst14 = std::floor(((0.192303002f * fConst0) + 0.5f)); fConst15 = ((0.0f - (6.90775537f * fConst14)) / fConst0); - fConst16 = std::floor(((0.0134579996f * fConst0) + 0.5f)); - iConst17 = int(std::min(16384.0f, std::max(0.0f, (fConst14 - fConst16)))); - iConst18 = int(std::min(2048.0f, std::max(0.0f, (fConst16 + -1.0f)))); - fConst19 = std::floor(((0.219990999f * fConst0) + 0.5f)); + fConst16 = std::floor(((0.0292910002f * fConst0) + 0.5f)); + iConst17 = int(std::min(16384.0f, std::max(0.0f, (fConst14 - fConst16)))); + iConst18 = int(std::min(4096.0f, std::max(0.0f, (fConst16 + -1.0f)))); + fConst19 = std::floor(((0.210389003f * fConst0) + 0.5f)); fConst20 = ((0.0f - (6.90775537f * fConst19)) / fConst0); - fConst21 = std::floor(((0.0191229992f * fConst0) + 0.5f)); - iConst22 = int(std::min(32768.0f, std::max(0.0f, (fConst19 - fConst21)))); - iConst23 = int(std::min(2048.0f, std::max(0.0f, (fConst21 + -1.0f)))); - fConst24 = std::floor(((0.192303002f * fConst0) + 0.5f)); + fConst21 = std::floor(((0.0244210009f * fConst0) + 0.5f)); + iConst22 = int(std::min(32768.0f, std::max(0.0f, (fConst19 - fConst21)))); + iConst23 = int(std::min(4096.0f, std::max(0.0f, (fConst21 + -1.0f)))); + fConst24 = std::floor(((0.127837002f * fConst0) + 0.5f)); fConst25 = ((0.0f - (6.90775537f * fConst24)) / fConst0); - fConst26 = std::floor(((0.0292910002f * fConst0) + 0.5f)); - iConst27 = int(std::min(16384.0f, std::max(0.0f, (fConst24 - fConst26)))); - iConst28 = int(std::min(4096.0f, std::max(0.0f, (fConst26 + -1.0f)))); + fConst26 = std::floor(((0.0316039994f * fConst0) + 0.5f)); + iConst27 = int(std::min(16384.0f, std::max(0.0f, (fConst24 - fConst26)))); + iConst28 = int(std::min(4096.0f, std::max(0.0f, (fConst26 + -1.0f)))); fConst29 = std::floor(((0.174713001f * fConst0) + 0.5f)); fConst30 = ((0.0f - (6.90775537f * fConst29)) / fConst0); fConst31 = std::floor(((0.0229039993f * fConst0) + 0.5f)); - iConst32 = int(std::min(16384.0f, std::max(0.0f, (fConst29 - fConst31)))); - iConst33 = int(std::min(4096.0f, std::max(0.0f, (fConst31 + -1.0f)))); - fConst34 = std::floor(((0.256891012f * fConst0) + 0.5f)); + iConst32 = int(std::min(16384.0f, std::max(0.0f, (fConst29 - fConst31)))); + iConst33 = int(std::min(4096.0f, std::max(0.0f, (fConst31 + -1.0f)))); + fConst34 = std::floor(((0.153128996f * fConst0) + 0.5f)); fConst35 = ((0.0f - (6.90775537f * fConst34)) / fConst0); - fConst36 = std::floor(((0.0273330007f * fConst0) + 0.5f)); - iConst37 = int(std::min(32768.0f, std::max(0.0f, (fConst34 - fConst36)))); - iConst38 = int(std::min(4096.0f, std::max(0.0f, (fConst36 + -1.0f)))); - fConst39 = std::floor(((0.127837002f * fConst0) + 0.5f)); + fConst36 = std::floor(((0.0203460008f * fConst0) + 0.5f)); + iConst37 = int(std::min(16384.0f, std::max(0.0f, (fConst34 - fConst36)))); + iConst38 = int(std::min(2048.0f, std::max(0.0f, (fConst36 + -1.0f)))); + fConst39 = std::floor(((0.125f * fConst0) + 0.5f)); fConst40 = ((0.0f - (6.90775537f * fConst39)) / fConst0); - fConst41 = std::floor(((0.0316039994f * fConst0) + 0.5f)); - iConst42 = int(std::min(16384.0f, std::max(0.0f, (fConst39 - fConst41)))); - iConst43 = int(std::min(4096.0f, std::max(0.0f, (fConst41 + -1.0f)))); - + fConst41 = std::floor(((0.0134579996f * fConst0) + 0.5f)); + iConst42 = int(std::min(16384.0f, std::max(0.0f, (fConst39 - fConst41)))); + iConst43 = int(std::min(2048.0f, std::max(0.0f, (fConst41 + -1.0f)))); } virtual void instanceResetUserInterface() { fCheckbox0 = FAUSTFLOAT(0.0f); fHslider0 = FAUSTFLOAT(1.0f); - fVslider0 = FAUSTFLOAT(60.0f); + fVslider0 = FAUSTFLOAT(2.0f); fVslider1 = FAUSTFLOAT(6000.0f); - fVslider2 = FAUSTFLOAT(2.0f); - fVslider3 = FAUSTFLOAT(3.0f); - fVslider4 = FAUSTFLOAT(200.0f); - + fVslider2 = FAUSTFLOAT(3.0f); + fVslider3 = FAUSTFLOAT(200.0f); + fVslider4 = FAUSTFLOAT(60.0f); } virtual void instanceClear() { - for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { - fRec0[l0] = 0.0f; - - } IOTA = 0; - for (int l1 = 0; (l1 < 16384); l1 = (l1 + 1)) { - fVec0[l1] = 0.0f; - + for (int l0 = 0; (l0 < 16384); l0 = (l0 + 1)) { + fVec0[l0] = 0.0f; + } + for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + fRec0[l1] = 0.0f; } for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { - fRec11[l2] = 0.0f; - + fRec12[l2] = 0.0f; } for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { - fRec13[l3] = 0.0f; - + fRec11[l3] = 0.0f; } - for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { - fRec12[l4] = 0.0f; - + for (int l4 = 0; (l4 < 65536); l4 = (l4 + 1)) { + fVec1[l4] = 0.0f; } - for (int l5 = 0; (l5 < 65536); l5 = (l5 + 1)) { - fVec1[l5] = 0.0f; - + for (int l5 = 0; (l5 < 16384); l5 = (l5 + 1)) { + fVec2[l5] = 0.0f; } - for (int l6 = 0; (l6 < 8192); l6 = (l6 + 1)) { - fVec2[l6] = 0.0f; - + for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { + fRec13[l6] = 0.0f; } - for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) { - fRec9[l7] = 0.0f; - + for (int l7 = 0; (l7 < 4096); l7 = (l7 + 1)) { + fVec3[l7] = 0.0f; } - for (int l8 = 0; (l8 < 16384); l8 = (l8 + 1)) { - fVec3[l8] = 0.0f; - + for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { + fRec9[l8] = 0.0f; } for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { fRec17[l9] = 0.0f; - } for (int l10 = 0; (l10 < 2); l10 = (l10 + 1)) { fRec16[l10] = 0.0f; - } - for (int l11 = 0; (l11 < 32768); l11 = (l11 + 1)) { + for (int l11 = 0; (l11 < 65536); l11 = (l11 + 1)) { fVec4[l11] = 0.0f; - } - for (int l12 = 0; (l12 < 4096); l12 = (l12 + 1)) { + for (int l12 = 0; (l12 < 8192); l12 = (l12 + 1)) { fVec5[l12] = 0.0f; - } for (int l13 = 0; (l13 < 2); l13 = (l13 + 1)) { fRec14[l13] = 0.0f; - } for (int l14 = 0; (l14 < 2); l14 = (l14 + 1)) { fRec21[l14] = 0.0f; - } for (int l15 = 0; (l15 < 2); l15 = (l15 + 1)) { fRec20[l15] = 0.0f; - } for (int l16 = 0; (l16 < 32768); l16 = (l16 + 1)) { fVec6[l16] = 0.0f; - } - for (int l17 = 0; (l17 < 4096); l17 = (l17 + 1)) { + for (int l17 = 0; (l17 < 8192); l17 = (l17 + 1)) { fVec7[l17] = 0.0f; - } for (int l18 = 0; (l18 < 2); l18 = (l18 + 1)) { fRec18[l18] = 0.0f; - } for (int l19 = 0; (l19 < 2); l19 = (l19 + 1)) { fRec25[l19] = 0.0f; - } for (int l20 = 0; (l20 < 2); l20 = (l20 + 1)) { fRec24[l20] = 0.0f; - } for (int l21 = 0; (l21 < 65536); l21 = (l21 + 1)) { fVec8[l21] = 0.0f; - } - for (int l22 = 0; (l22 < 4096); l22 = (l22 + 1)) { + for (int l22 = 0; (l22 < 8192); l22 = (l22 + 1)) { fVec9[l22] = 0.0f; - } for (int l23 = 0; (l23 < 2); l23 = (l23 + 1)) { fRec22[l23] = 0.0f; - } for (int l24 = 0; (l24 < 2); l24 = (l24 + 1)) { fRec29[l24] = 0.0f; - } for (int l25 = 0; (l25 < 2); l25 = (l25 + 1)) { fRec28[l25] = 0.0f; - } for (int l26 = 0; (l26 < 32768); l26 = (l26 + 1)) { fVec10[l26] = 0.0f; - } for (int l27 = 0; (l27 < 8192); l27 = (l27 + 1)) { fVec11[l27] = 0.0f; - } for (int l28 = 0; (l28 < 2); l28 = (l28 + 1)) { fRec26[l28] = 0.0f; - } for (int l29 = 0; (l29 < 2); l29 = (l29 + 1)) { fRec33[l29] = 0.0f; - } for (int l30 = 0; (l30 < 2); l30 = (l30 + 1)) { fRec32[l30] = 0.0f; - } for (int l31 = 0; (l31 < 32768); l31 = (l31 + 1)) { fVec12[l31] = 0.0f; - } for (int l32 = 0; (l32 < 8192); l32 = (l32 + 1)) { fVec13[l32] = 0.0f; - } for (int l33 = 0; (l33 < 2); l33 = (l33 + 1)) { fRec30[l33] = 0.0f; - } for (int l34 = 0; (l34 < 2); l34 = (l34 + 1)) { fRec37[l34] = 0.0f; - } for (int l35 = 0; (l35 < 2); l35 = (l35 + 1)) { fRec36[l35] = 0.0f; - } - for (int l36 = 0; (l36 < 65536); l36 = (l36 + 1)) { + for (int l36 = 0; (l36 < 32768); l36 = (l36 + 1)) { fVec14[l36] = 0.0f; - } - for (int l37 = 0; (l37 < 8192); l37 = (l37 + 1)) { + for (int l37 = 0; (l37 < 4096); l37 = (l37 + 1)) { fVec15[l37] = 0.0f; - } for (int l38 = 0; (l38 < 2); l38 = (l38 + 1)) { fRec34[l38] = 0.0f; - } for (int l39 = 0; (l39 < 2); l39 = (l39 + 1)) { fRec41[l39] = 0.0f; - } for (int l40 = 0; (l40 < 2); l40 = (l40 + 1)) { fRec40[l40] = 0.0f; - } for (int l41 = 0; (l41 < 32768); l41 = (l41 + 1)) { fVec16[l41] = 0.0f; - } - for (int l42 = 0; (l42 < 8192); l42 = (l42 + 1)) { + for (int l42 = 0; (l42 < 4096); l42 = (l42 + 1)) { fVec17[l42] = 0.0f; - } for (int l43 = 0; (l43 < 2); l43 = (l43 + 1)) { fRec38[l43] = 0.0f; - } for (int l44 = 0; (l44 < 3); l44 = (l44 + 1)) { fRec1[l44] = 0.0f; - } for (int l45 = 0; (l45 < 3); l45 = (l45 + 1)) { fRec2[l45] = 0.0f; - } for (int l46 = 0; (l46 < 3); l46 = (l46 + 1)) { fRec3[l46] = 0.0f; - } for (int l47 = 0; (l47 < 3); l47 = (l47 + 1)) { fRec4[l47] = 0.0f; - } for (int l48 = 0; (l48 < 3); l48 = (l48 + 1)) { fRec5[l48] = 0.0f; - } for (int l49 = 0; (l49 < 3); l49 = (l49 + 1)) { fRec6[l49] = 0.0f; - } for (int l50 = 0; (l50 < 3); l50 = (l50 + 1)) { fRec7[l50] = 0.0f; - } for (int l51 = 0; (l51 < 3); l51 = (l51 + 1)) { fRec8[l51] = 0.0f; - } - } - virtual void init(int samplingFreq) { - classInit(samplingFreq); - instanceInit(samplingFreq); + virtual void init(int sample_rate) { + classInit(sample_rate); + instanceInit(sample_rate); } - virtual void instanceInit(int samplingFreq) { - instanceConstants(samplingFreq); + virtual void instanceInit(int sample_rate) { + instanceConstants(sample_rate); instanceResetUserInterface(); instanceClear(); } @@ -937,37 +942,36 @@ class fx_zita_rev1 : public dsp { virtual fx_zita_rev1* clone() { return new fx_zita_rev1(); } + virtual int getSampleRate() { - return fSamplingFreq; - + return fSampleRate; } virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("fx.zita_rev1"); ui_interface->addCheckButton("bypass", &fCheckbox0); - ui_interface->declare(&fVslider3, "scale", "log"); - ui_interface->declare(&fVslider3, "style", "knob"); - ui_interface->declare(&fVslider3, "unit", "s"); - ui_interface->addVerticalSlider("decay_low", &fVslider3, 3.0f, 1.0f, 25.0f, 0.100000001f); ui_interface->declare(&fVslider2, "scale", "log"); ui_interface->declare(&fVslider2, "style", "knob"); ui_interface->declare(&fVslider2, "unit", "s"); - ui_interface->addVerticalSlider("decay_mid", &fVslider2, 2.0f, 1.0f, 25.0f, 0.100000001f); + ui_interface->addVerticalSlider("decay_low", &fVslider2, 3.0f, 1.0f, 25.0f, 0.100000001f); + ui_interface->declare(&fVslider0, "scale", "log"); ui_interface->declare(&fVslider0, "style", "knob"); - ui_interface->declare(&fVslider0, "unit", "ms"); - ui_interface->addVerticalSlider("delay", &fVslider0, 60.0f, 20.0f, 100.0f, 1.0f); + ui_interface->declare(&fVslider0, "unit", "s"); + ui_interface->addVerticalSlider("decay_mid", &fVslider0, 2.0f, 1.0f, 25.0f, 0.100000001f); + ui_interface->declare(&fVslider4, "style", "knob"); + ui_interface->declare(&fVslider4, "unit", "ms"); + ui_interface->addVerticalSlider("delay", &fVslider4, 60.0f, 20.0f, 100.0f, 1.0f); ui_interface->declare(&fHslider0, "style", "knob"); ui_interface->addHorizontalSlider("drywet", &fHslider0, 1.0f, 0.0f, 1.0f, 0.00999999978f); ui_interface->declare(&fVslider1, "scale", "log"); ui_interface->declare(&fVslider1, "style", "knob"); ui_interface->declare(&fVslider1, "unit", "Hz"); ui_interface->addVerticalSlider("dump_hf", &fVslider1, 6000.0f, 1500.0f, 47040.0f, 1.0f); - ui_interface->declare(&fVslider4, "scale", "log"); - ui_interface->declare(&fVslider4, "style", "knob"); - ui_interface->declare(&fVslider4, "unit", "Hz"); - ui_interface->addVerticalSlider("freq_low", &fVslider4, 200.0f, 50.0f, 1000.0f, 1.0f); + ui_interface->declare(&fVslider3, "scale", "log"); + ui_interface->declare(&fVslider3, "style", "knob"); + ui_interface->declare(&fVslider3, "unit", "Hz"); + ui_interface->addVerticalSlider("freq_low", &fVslider3, 200.0f, 50.0f, 1000.0f, 1.0f); ui_interface->closeBox(); - } virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { @@ -977,179 +981,177 @@ class fx_zita_rev1 : public dsp { FAUSTFLOAT* output1 = outputs[1]; int iSlow0 = int(float(fCheckbox0)); float fSlow1 = (0.00100000005f * float(fHslider0)); - float fSlow2 = (0.00100000005f * float(fVslider0)); - float fSlow3 = std::cos((fConst2 * float(fVslider1))); - float fSlow4 = float(fVslider2); - float fSlow5 = std::exp((fConst4 / fSlow4)); - float fSlow6 = fx_zita_rev1_faustpower2_f(fSlow5); - float fSlow7 = (1.0f - (fSlow3 * fSlow6)); - float fSlow8 = (1.0f - fSlow6); - float fSlow9 = (fSlow7 / fSlow8); - float fSlow10 = std::sqrt(std::max(0.0f, ((fx_zita_rev1_faustpower2_f(fSlow7) / fx_zita_rev1_faustpower2_f(fSlow8)) + -1.0f))); - float fSlow11 = (fSlow9 - fSlow10); - float fSlow12 = (fSlow5 * (fSlow10 + (1.0f - fSlow9))); - float fSlow13 = float(fVslider3); - float fSlow14 = ((std::exp((fConst4 / fSlow13)) / fSlow5) + -1.0f); - float fSlow15 = (1.0f / std::tan((fConst5 * float(fVslider4)))); - float fSlow16 = (fSlow15 + 1.0f); - float fSlow17 = (1.0f / fSlow16); - float fSlow18 = (0.0f - ((1.0f - fSlow15) / fSlow16)); - float fSlow19 = std::exp((fConst10 / fSlow4)); - float fSlow20 = fx_zita_rev1_faustpower2_f(fSlow19); - float fSlow21 = (1.0f - (fSlow20 * fSlow3)); - float fSlow22 = (1.0f - fSlow20); - float fSlow23 = (fSlow21 / fSlow22); - float fSlow24 = std::sqrt(std::max(0.0f, ((fx_zita_rev1_faustpower2_f(fSlow21) / fx_zita_rev1_faustpower2_f(fSlow22)) + -1.0f))); - float fSlow25 = (fSlow23 - fSlow24); - float fSlow26 = (fSlow19 * (fSlow24 + (1.0f - fSlow23))); - float fSlow27 = ((std::exp((fConst10 / fSlow13)) / fSlow19) + -1.0f); - float fSlow28 = std::exp((fConst15 / fSlow4)); - float fSlow29 = fx_zita_rev1_faustpower2_f(fSlow28); - float fSlow30 = (1.0f - (fSlow3 * fSlow29)); - float fSlow31 = (1.0f - fSlow29); - float fSlow32 = (fSlow30 / fSlow31); - float fSlow33 = std::sqrt(std::max(0.0f, ((fx_zita_rev1_faustpower2_f(fSlow30) / fx_zita_rev1_faustpower2_f(fSlow31)) + -1.0f))); - float fSlow34 = (fSlow32 - fSlow33); - float fSlow35 = (fSlow28 * (fSlow33 + (1.0f - fSlow32))); - float fSlow36 = ((std::exp((fConst15 / fSlow13)) / fSlow28) + -1.0f); - float fSlow37 = std::exp((fConst20 / fSlow4)); - float fSlow38 = fx_zita_rev1_faustpower2_f(fSlow37); - float fSlow39 = (1.0f - (fSlow3 * fSlow38)); - float fSlow40 = (1.0f - fSlow38); - float fSlow41 = (fSlow39 / fSlow40); - float fSlow42 = std::sqrt(std::max(0.0f, ((fx_zita_rev1_faustpower2_f(fSlow39) / fx_zita_rev1_faustpower2_f(fSlow40)) + -1.0f))); - float fSlow43 = (fSlow41 - fSlow42); - float fSlow44 = (fSlow37 * (fSlow42 + (1.0f - fSlow41))); - float fSlow45 = ((std::exp((fConst20 / fSlow13)) / fSlow37) + -1.0f); - float fSlow46 = std::exp((fConst25 / fSlow4)); - float fSlow47 = fx_zita_rev1_faustpower2_f(fSlow46); - float fSlow48 = (1.0f - (fSlow3 * fSlow47)); - float fSlow49 = (1.0f - fSlow47); - float fSlow50 = (fSlow48 / fSlow49); - float fSlow51 = std::sqrt(std::max(0.0f, ((fx_zita_rev1_faustpower2_f(fSlow48) / fx_zita_rev1_faustpower2_f(fSlow49)) + -1.0f))); - float fSlow52 = (fSlow50 - fSlow51); - float fSlow53 = (fSlow46 * (fSlow51 + (1.0f - fSlow50))); - float fSlow54 = ((std::exp((fConst25 / fSlow13)) / fSlow46) + -1.0f); - float fSlow55 = std::exp((fConst30 / fSlow4)); - float fSlow56 = fx_zita_rev1_faustpower2_f(fSlow55); - float fSlow57 = (1.0f - (fSlow56 * fSlow3)); - float fSlow58 = (1.0f - fSlow56); - float fSlow59 = (fSlow57 / fSlow58); - float fSlow60 = std::sqrt(std::max(0.0f, ((fx_zita_rev1_faustpower2_f(fSlow57) / fx_zita_rev1_faustpower2_f(fSlow58)) + -1.0f))); - float fSlow61 = (fSlow59 - fSlow60); - float fSlow62 = (fSlow55 * (fSlow60 + (1.0f - fSlow59))); - float fSlow63 = ((std::exp((fConst30 / fSlow13)) / fSlow55) + -1.0f); - float fSlow64 = std::exp((fConst35 / fSlow4)); - float fSlow65 = fx_zita_rev1_faustpower2_f(fSlow64); - float fSlow66 = (1.0f - (fSlow3 * fSlow65)); - float fSlow67 = (1.0f - fSlow65); - float fSlow68 = (fSlow66 / fSlow67); - float fSlow69 = std::sqrt(std::max(0.0f, ((fx_zita_rev1_faustpower2_f(fSlow66) / fx_zita_rev1_faustpower2_f(fSlow67)) + -1.0f))); - float fSlow70 = (fSlow68 - fSlow69); - float fSlow71 = (fSlow64 * (fSlow69 + (1.0f - fSlow68))); - float fSlow72 = ((std::exp((fConst35 / fSlow13)) / fSlow64) + -1.0f); - float fSlow73 = std::exp((fConst40 / fSlow4)); - float fSlow74 = fx_zita_rev1_faustpower2_f(fSlow73); - float fSlow75 = (1.0f - (fSlow74 * fSlow3)); - float fSlow76 = (1.0f - fSlow74); - float fSlow77 = (fSlow75 / fSlow76); - float fSlow78 = std::sqrt(std::max(0.0f, ((fx_zita_rev1_faustpower2_f(fSlow75) / fx_zita_rev1_faustpower2_f(fSlow76)) + -1.0f))); - float fSlow79 = (fSlow77 - fSlow78); - float fSlow80 = (fSlow73 * (fSlow78 + (1.0f - fSlow77))); - float fSlow81 = ((std::exp((fConst40 / fSlow13)) / fSlow73) + -1.0f); + float fSlow2 = float(fVslider0); + float fSlow3 = std::exp((fConst2 / fSlow2)); + float fSlow4 = fx_zita_rev1_faustpower2_f(fSlow3); + float fSlow5 = std::cos((fConst3 * float(fVslider1))); + float fSlow6 = (1.0f - (fSlow4 * fSlow5)); + float fSlow7 = (1.0f - fSlow4); + float fSlow8 = (fSlow6 / fSlow7); + float fSlow9 = std::sqrt(std::max(0.0f, ((fx_zita_rev1_faustpower2_f(fSlow6) / fx_zita_rev1_faustpower2_f(fSlow7)) + -1.0f))); + float fSlow10 = (fSlow8 - fSlow9); + float fSlow11 = (fSlow3 * (fSlow9 + (1.0f - fSlow8))); + float fSlow12 = float(fVslider2); + float fSlow13 = ((std::exp((fConst2 / fSlow12)) / fSlow3) + -1.0f); + float fSlow14 = (1.0f / std::tan((fConst4 * float(fVslider3)))); + float fSlow15 = (1.0f / (fSlow14 + 1.0f)); + float fSlow16 = (1.0f - fSlow14); + float fSlow17 = (0.00100000005f * float(fVslider4)); + float fSlow18 = std::exp((fConst10 / fSlow2)); + float fSlow19 = fx_zita_rev1_faustpower2_f(fSlow18); + float fSlow20 = (1.0f - (fSlow19 * fSlow5)); + float fSlow21 = (1.0f - fSlow19); + float fSlow22 = (fSlow20 / fSlow21); + float fSlow23 = std::sqrt(std::max(0.0f, ((fx_zita_rev1_faustpower2_f(fSlow20) / fx_zita_rev1_faustpower2_f(fSlow21)) + -1.0f))); + float fSlow24 = (fSlow22 - fSlow23); + float fSlow25 = (fSlow18 * (fSlow23 + (1.0f - fSlow22))); + float fSlow26 = ((std::exp((fConst10 / fSlow12)) / fSlow18) + -1.0f); + float fSlow27 = std::exp((fConst15 / fSlow2)); + float fSlow28 = fx_zita_rev1_faustpower2_f(fSlow27); + float fSlow29 = (1.0f - (fSlow28 * fSlow5)); + float fSlow30 = (1.0f - fSlow28); + float fSlow31 = (fSlow29 / fSlow30); + float fSlow32 = std::sqrt(std::max(0.0f, ((fx_zita_rev1_faustpower2_f(fSlow29) / fx_zita_rev1_faustpower2_f(fSlow30)) + -1.0f))); + float fSlow33 = (fSlow31 - fSlow32); + float fSlow34 = (fSlow27 * (fSlow32 + (1.0f - fSlow31))); + float fSlow35 = ((std::exp((fConst15 / fSlow12)) / fSlow27) + -1.0f); + float fSlow36 = std::exp((fConst20 / fSlow2)); + float fSlow37 = fx_zita_rev1_faustpower2_f(fSlow36); + float fSlow38 = (1.0f - (fSlow37 * fSlow5)); + float fSlow39 = (1.0f - fSlow37); + float fSlow40 = (fSlow38 / fSlow39); + float fSlow41 = std::sqrt(std::max(0.0f, ((fx_zita_rev1_faustpower2_f(fSlow38) / fx_zita_rev1_faustpower2_f(fSlow39)) + -1.0f))); + float fSlow42 = (fSlow40 - fSlow41); + float fSlow43 = (fSlow36 * (fSlow41 + (1.0f - fSlow40))); + float fSlow44 = ((std::exp((fConst20 / fSlow12)) / fSlow36) + -1.0f); + float fSlow45 = std::exp((fConst25 / fSlow2)); + float fSlow46 = fx_zita_rev1_faustpower2_f(fSlow45); + float fSlow47 = (1.0f - (fSlow46 * fSlow5)); + float fSlow48 = (1.0f - fSlow46); + float fSlow49 = (fSlow47 / fSlow48); + float fSlow50 = std::sqrt(std::max(0.0f, ((fx_zita_rev1_faustpower2_f(fSlow47) / fx_zita_rev1_faustpower2_f(fSlow48)) + -1.0f))); + float fSlow51 = (fSlow49 - fSlow50); + float fSlow52 = (fSlow45 * (fSlow50 + (1.0f - fSlow49))); + float fSlow53 = ((std::exp((fConst25 / fSlow12)) / fSlow45) + -1.0f); + float fSlow54 = std::exp((fConst30 / fSlow2)); + float fSlow55 = fx_zita_rev1_faustpower2_f(fSlow54); + float fSlow56 = (1.0f - (fSlow55 * fSlow5)); + float fSlow57 = (1.0f - fSlow55); + float fSlow58 = (fSlow56 / fSlow57); + float fSlow59 = std::sqrt(std::max(0.0f, ((fx_zita_rev1_faustpower2_f(fSlow56) / fx_zita_rev1_faustpower2_f(fSlow57)) + -1.0f))); + float fSlow60 = (fSlow58 - fSlow59); + float fSlow61 = (fSlow54 * (fSlow59 + (1.0f - fSlow58))); + float fSlow62 = ((std::exp((fConst30 / fSlow12)) / fSlow54) + -1.0f); + float fSlow63 = std::exp((fConst35 / fSlow2)); + float fSlow64 = fx_zita_rev1_faustpower2_f(fSlow63); + float fSlow65 = (1.0f - (fSlow64 * fSlow5)); + float fSlow66 = (1.0f - fSlow64); + float fSlow67 = (fSlow65 / fSlow66); + float fSlow68 = std::sqrt(std::max(0.0f, ((fx_zita_rev1_faustpower2_f(fSlow65) / fx_zita_rev1_faustpower2_f(fSlow66)) + -1.0f))); + float fSlow69 = (fSlow67 - fSlow68); + float fSlow70 = (fSlow63 * (fSlow68 + (1.0f - fSlow67))); + float fSlow71 = ((std::exp((fConst35 / fSlow12)) / fSlow63) + -1.0f); + float fSlow72 = std::exp((fConst40 / fSlow2)); + float fSlow73 = fx_zita_rev1_faustpower2_f(fSlow72); + float fSlow74 = (1.0f - (fSlow73 * fSlow5)); + float fSlow75 = (1.0f - fSlow73); + float fSlow76 = (fSlow74 / fSlow75); + float fSlow77 = std::sqrt(std::max(0.0f, ((fx_zita_rev1_faustpower2_f(fSlow74) / fx_zita_rev1_faustpower2_f(fSlow75)) + -1.0f))); + float fSlow78 = (fSlow76 - fSlow77); + float fSlow79 = (fSlow72 * (fSlow77 + (1.0f - fSlow76))); + float fSlow80 = ((std::exp((fConst40 / fSlow12)) / fSlow72) + -1.0f); for (int i = 0; (i < count); i = (i + 1)) { - fRec0[0] = (fSlow1 + (0.999000013f * fRec0[1])); - float fTemp0 = float(input1[i]); - float fTemp1 = (iSlow0?0.0f:fTemp0); + float fTemp0 = float(input0[i]); + float fTemp1 = (iSlow0 ? 0.0f : fTemp0); fVec0[(IOTA & 16383)] = fTemp1; - fRec11[0] = (fSlow2 + (0.999000013f * fRec11[1])); - int iTemp2 = int(std::min(8192.0f, std::max(0.0f, (fConst1 * fRec11[0])))); - float fTemp3 = (0.300000012f * fVec0[((IOTA - iTemp2) & 16383)]); - fRec13[0] = ((fSlow17 * (fRec2[1] + fRec2[2])) + (fSlow18 * fRec13[1])); - fRec12[0] = ((fSlow11 * fRec12[1]) + (fSlow12 * (fRec2[1] + (fSlow14 * fRec13[0])))); - fVec1[(IOTA & 65535)] = ((0.353553385f * fRec12[0]) + 9.99999968e-21f); - float fTemp4 = (fTemp3 + ((0.600000024f * fRec9[1]) + fVec1[((IOTA - iConst7) & 65535)])); - fVec2[(IOTA & 8191)] = fTemp4; - fRec9[0] = fVec2[((IOTA - iConst8) & 8191)]; - float fRec10 = (0.0f - (0.600000024f * fTemp4)); - float fTemp5 = (fRec9[1] + fRec10); - float fTemp6 = float(input0[i]); - float fTemp7 = (iSlow0?0.0f:fTemp6); - fVec3[(IOTA & 16383)] = fTemp7; - float fTemp8 = (0.300000012f * fVec3[((IOTA - iTemp2) & 16383)]); - fRec17[0] = ((fSlow17 * (fRec1[1] + fRec1[2])) + (fSlow18 * fRec17[1])); - fRec16[0] = ((fSlow25 * fRec16[1]) + (fSlow26 * (fRec1[1] + (fSlow27 * fRec17[0])))); - fVec4[(IOTA & 32767)] = ((0.353553385f * fRec16[0]) + 9.99999968e-21f); - float fTemp9 = ((fTemp8 + fVec4[((IOTA - iConst12) & 32767)]) - (0.600000024f * fRec14[1])); - fVec5[(IOTA & 4095)] = fTemp9; - fRec14[0] = fVec5[((IOTA - iConst13) & 4095)]; - float fRec15 = (0.600000024f * fTemp9); - float fTemp10 = ((fTemp5 + fRec14[1]) + fRec15); - fRec21[0] = ((fSlow17 * (fRec7[1] + fRec7[2])) + (fSlow18 * fRec21[1])); - fRec20[0] = ((fSlow34 * fRec20[1]) + (fSlow35 * (fRec7[1] + (fSlow36 * fRec21[0])))); + fRec0[0] = (fSlow1 + (0.999000013f * fRec0[1])); + float fTemp2 = (1.0f - fRec0[0]); + fRec12[0] = (0.0f - (fSlow15 * ((fSlow16 * fRec12[1]) - (fRec8[1] + fRec8[2])))); + fRec11[0] = ((fSlow10 * fRec11[1]) + (fSlow11 * (fRec8[1] + (fSlow13 * fRec12[0])))); + fVec1[(IOTA & 65535)] = ((0.353553385f * fRec11[0]) + 9.99999968e-21f); + float fTemp3 = float(input1[i]); + float fTemp4 = (iSlow0 ? 0.0f : fTemp3); + fVec2[(IOTA & 16383)] = fTemp4; + fRec13[0] = (fSlow17 + (0.999000013f * fRec13[1])); + int iTemp5 = int(std::min(8192.0f, std::max(0.0f, (fConst7 * fRec13[0])))); + float fTemp6 = (0.300000012f * fVec2[((IOTA - iTemp5) & 16383)]); + float fTemp7 = (((0.600000024f * fRec9[1]) + fVec1[((IOTA - iConst6) & 65535)]) - fTemp6); + fVec3[(IOTA & 4095)] = fTemp7; + fRec9[0] = fVec3[((IOTA - iConst8) & 4095)]; + float fRec10 = (0.0f - (0.600000024f * fTemp7)); + fRec17[0] = (0.0f - (fSlow15 * ((fSlow16 * fRec17[1]) - (fRec4[1] + fRec4[2])))); + fRec16[0] = ((fSlow24 * fRec16[1]) + (fSlow25 * (fRec4[1] + (fSlow26 * fRec17[0])))); + fVec4[(IOTA & 65535)] = ((0.353553385f * fRec16[0]) + 9.99999968e-21f); + float fTemp8 = (((0.600000024f * fRec14[1]) + fVec4[((IOTA - iConst12) & 65535)]) - fTemp6); + fVec5[(IOTA & 8191)] = fTemp8; + fRec14[0] = fVec5[((IOTA - iConst13) & 8191)]; + float fRec15 = (0.0f - (0.600000024f * fTemp8)); + fRec21[0] = (0.0f - (fSlow15 * ((fSlow16 * fRec21[1]) - (fRec6[1] + fRec6[2])))); + fRec20[0] = ((fSlow33 * fRec20[1]) + (fSlow34 * (fRec6[1] + (fSlow35 * fRec21[0])))); fVec6[(IOTA & 32767)] = ((0.353553385f * fRec20[0]) + 9.99999968e-21f); - float fTemp11 = (fVec6[((IOTA - iConst17) & 32767)] - (fTemp8 + (0.600000024f * fRec18[1]))); - fVec7[(IOTA & 4095)] = fTemp11; - fRec18[0] = fVec7[((IOTA - iConst18) & 4095)]; - float fRec19 = (0.600000024f * fTemp11); - fRec25[0] = ((fSlow17 * (fRec8[1] + fRec8[2])) + (fSlow18 * fRec25[1])); - fRec24[0] = ((fSlow43 * fRec24[1]) + (fSlow44 * (fRec8[1] + (fSlow45 * fRec25[0])))); + float fTemp9 = (fVec6[((IOTA - iConst17) & 32767)] + (fTemp6 + (0.600000024f * fRec18[1]))); + fVec7[(IOTA & 8191)] = fTemp9; + fRec18[0] = fVec7[((IOTA - iConst18) & 8191)]; + float fRec19 = (0.0f - (0.600000024f * fTemp9)); + fRec25[0] = (0.0f - (fSlow15 * ((fSlow16 * fRec25[1]) - (fRec2[1] + fRec2[2])))); + fRec24[0] = ((fSlow42 * fRec24[1]) + (fSlow43 * (fRec2[1] + (fSlow44 * fRec25[0])))); fVec8[(IOTA & 65535)] = ((0.353553385f * fRec24[0]) + 9.99999968e-21f); - float fTemp12 = (((0.600000024f * fRec22[1]) + fVec8[((IOTA - iConst22) & 65535)]) - fTemp3); - fVec9[(IOTA & 4095)] = fTemp12; - fRec22[0] = fVec9[((IOTA - iConst23) & 4095)]; - float fRec23 = (0.0f - (0.600000024f * fTemp12)); - float fTemp13 = ((((fTemp10 + fRec18[1]) + fRec22[1]) + fRec23) + fRec19); - fRec29[0] = ((fSlow17 * (fRec6[1] + fRec6[2])) + (fSlow18 * fRec29[1])); - fRec28[0] = ((fSlow52 * fRec28[1]) + (fSlow53 * (fRec6[1] + (fSlow54 * fRec29[0])))); + float fTemp10 = (fTemp6 + ((0.600000024f * fRec22[1]) + fVec8[((IOTA - iConst22) & 65535)])); + fVec9[(IOTA & 8191)] = fTemp10; + fRec22[0] = fVec9[((IOTA - iConst23) & 8191)]; + float fRec23 = (0.0f - (0.600000024f * fTemp10)); + fRec29[0] = (fSlow15 * ((fRec3[1] + fRec3[2]) - (fSlow16 * fRec29[1]))); + fRec28[0] = ((fSlow51 * fRec28[1]) + (fSlow52 * (fRec3[1] + (fSlow53 * fRec29[0])))); fVec10[(IOTA & 32767)] = ((0.353553385f * fRec28[0]) + 9.99999968e-21f); - float fTemp14 = (fVec10[((IOTA - iConst27) & 32767)] + (fTemp3 + (0.600000024f * fRec26[1]))); - fVec11[(IOTA & 8191)] = fTemp14; + float fTemp11 = (0.300000012f * fVec0[((IOTA - iTemp5) & 16383)]); + float fTemp12 = (fVec10[((IOTA - iConst27) & 32767)] - (fTemp11 + (0.600000024f * fRec26[1]))); + fVec11[(IOTA & 8191)] = fTemp12; fRec26[0] = fVec11[((IOTA - iConst28) & 8191)]; - float fRec27 = (0.0f - (0.600000024f * fTemp14)); - fRec33[0] = ((fSlow17 * (fRec5[1] + fRec5[2])) + (fSlow18 * fRec33[1])); - fRec32[0] = ((fSlow61 * fRec32[1]) + (fSlow62 * (fRec5[1] + (fSlow63 * fRec33[0])))); + float fRec27 = (0.600000024f * fTemp12); + fRec33[0] = (0.0f - (fSlow15 * ((fSlow16 * fRec33[1]) - (fRec5[1] + fRec5[2])))); + fRec32[0] = ((fSlow60 * fRec32[1]) + (fSlow61 * (fRec5[1] + (fSlow62 * fRec33[0])))); fVec12[(IOTA & 32767)] = ((0.353553385f * fRec32[0]) + 9.99999968e-21f); - float fTemp15 = ((fTemp8 + fVec12[((IOTA - iConst32) & 32767)]) - (0.600000024f * fRec30[1])); - fVec13[(IOTA & 8191)] = fTemp15; + float fTemp13 = ((fTemp11 + fVec12[((IOTA - iConst32) & 32767)]) - (0.600000024f * fRec30[1])); + fVec13[(IOTA & 8191)] = fTemp13; fRec30[0] = fVec13[((IOTA - iConst33) & 8191)]; - float fRec31 = (0.600000024f * fTemp15); - fRec37[0] = ((fSlow17 * (fRec4[1] + fRec4[2])) + (fSlow18 * fRec37[1])); - fRec36[0] = ((fSlow70 * fRec36[1]) + (fSlow71 * (fRec4[1] + (fSlow72 * fRec37[0])))); - fVec14[(IOTA & 65535)] = ((0.353553385f * fRec36[0]) + 9.99999968e-21f); - float fTemp16 = (((0.600000024f * fRec34[1]) + fVec14[((IOTA - iConst37) & 65535)]) - fTemp3); - fVec15[(IOTA & 8191)] = fTemp16; - fRec34[0] = fVec15[((IOTA - iConst38) & 8191)]; - float fRec35 = (0.0f - (0.600000024f * fTemp16)); - fRec41[0] = ((fSlow17 * (fRec3[1] + fRec3[2])) + (fSlow18 * fRec41[1])); - fRec40[0] = ((fSlow79 * fRec40[1]) + (fSlow80 * (fRec3[1] + (fSlow81 * fRec41[0])))); + float fRec31 = (0.600000024f * fTemp13); + fRec37[0] = (0.0f - (fSlow15 * ((fSlow16 * fRec37[1]) - (fRec1[1] + fRec1[2])))); + fRec36[0] = ((fSlow69 * fRec36[1]) + (fSlow70 * (fRec1[1] + (fSlow71 * fRec37[0])))); + fVec14[(IOTA & 32767)] = ((0.353553385f * fRec36[0]) + 9.99999968e-21f); + float fTemp14 = ((fVec14[((IOTA - iConst37) & 32767)] + fTemp11) - (0.600000024f * fRec34[1])); + fVec15[(IOTA & 4095)] = fTemp14; + fRec34[0] = fVec15[((IOTA - iConst38) & 4095)]; + float fRec35 = (0.600000024f * fTemp14); + fRec41[0] = (0.0f - (fSlow15 * ((fSlow16 * fRec41[1]) - (fRec7[1] + fRec7[2])))); + fRec40[0] = ((fSlow78 * fRec40[1]) + (fSlow79 * (fRec7[1] + (fSlow80 * fRec41[0])))); fVec16[(IOTA & 32767)] = ((0.353553385f * fRec40[0]) + 9.99999968e-21f); - float fTemp17 = (fVec16[((IOTA - iConst42) & 32767)] - (fTemp8 + (0.600000024f * fRec38[1]))); - fVec17[(IOTA & 8191)] = fTemp17; - fRec38[0] = fVec17[((IOTA - iConst43) & 8191)]; - float fRec39 = (0.600000024f * fTemp17); - fRec1[0] = ((((((((fTemp13 + fRec26[1]) + fRec27) + fRec30[1]) + fRec31) + fRec34[1]) + fRec38[1]) + fRec39) + fRec35); - float fTemp18 = (fRec14[1] + fRec15); - float fTemp19 = ((fTemp18 + fRec18[1]) + fRec19); - float fTemp20 = ((fTemp5 + fRec22[1]) + fRec23); - fRec2[0] = (((((fTemp19 + fRec30[1]) + fRec31) + fRec38[1]) + fRec39) - ((((fTemp20 + fRec26[1]) + fRec27) + fRec34[1]) + fRec35)); - float fTemp21 = (((fRec18[1] + fRec22[1]) + fRec23) + fRec19); - fRec3[0] = (((((fTemp10 + fRec26[1]) + fRec27) + fRec30[1]) + fRec31) - ((((fTemp21 + fRec34[1]) + fRec38[1]) + fRec39) + fRec35)); - float fTemp22 = ((fTemp18 + fRec22[1]) + fRec23); - float fTemp23 = ((fTemp5 + fRec18[1]) + fRec19); - fRec4[0] = (((((fTemp22 + fRec30[1]) + fRec31) + fRec34[1]) + fRec35) - ((((fTemp23 + fRec26[1]) + fRec27) + fRec38[1]) + fRec39)); - fRec5[0] = (((((fTemp10 + fRec34[1]) + fRec38[1]) + fRec39) + fRec35) - ((((fTemp21 + fRec26[1]) + fRec27) + fRec30[1]) + fRec31)); - fRec6[0] = (((((fTemp22 + fRec26[1]) + fRec27) + fRec38[1]) + fRec39) - ((((fTemp23 + fRec30[1]) + fRec31) + fRec34[1]) + fRec35)); - fRec7[0] = (fTemp13 - (((((((fRec26[1] + fRec27) + fRec30[1]) + fRec31) + fRec34[1]) + fRec38[1]) + fRec39) + fRec35)); - fRec8[0] = (((((fTemp19 + fRec26[1]) + fRec27) + fRec34[1]) + fRec35) - ((((fTemp20 + fRec30[1]) + fRec31) + fRec38[1]) + fRec39)); - float fTemp24 = (1.0f - fRec0[0]); - output0[i] = FAUSTFLOAT((iSlow0?fTemp6:((0.370000005f * (fRec0[0] * (fRec2[0] + fRec3[0]))) + (fTemp24 * fTemp7)))); - output1[i] = FAUSTFLOAT((iSlow0?fTemp0:((fTemp24 * fTemp1) + (0.370000005f * (fRec0[0] * (fRec2[0] - fRec3[0])))))); - fRec0[1] = fRec0[0]; + float fTemp15 = (fVec16[((IOTA - iConst42) & 32767)] - (fTemp11 + (0.600000024f * fRec38[1]))); + fVec17[(IOTA & 4095)] = fTemp15; + fRec38[0] = fVec17[((IOTA - iConst43) & 4095)]; + float fRec39 = (0.600000024f * fTemp15); + float fTemp16 = (fRec35 + fRec38[1]); + float fTemp17 = (fRec39 + (fRec27 + (fRec31 + fTemp16))); + fRec1[0] = (fRec9[1] + (fRec14[1] + (fRec18[1] + (fRec22[1] + (fRec26[1] + (fRec30[1] + (fRec34[1] + (fRec10 + (fRec15 + (fRec19 + (fRec23 + fTemp17))))))))))); + fRec2[0] = ((fRec26[1] + (fRec30[1] + (fRec34[1] + fTemp17))) - (fRec9[1] + (fRec14[1] + (fRec18[1] + (fRec22[1] + (fRec10 + (fRec15 + (fRec23 + fRec19)))))))); + float fTemp18 = (fRec35 + fRec31); + float fTemp19 = (fRec39 + (fRec27 + fRec38[1])); + fRec3[0] = ((fRec18[1] + (fRec22[1] + (fRec30[1] + (fRec34[1] + (fRec19 + (fRec23 + fTemp18)))))) - (fRec9[1] + (fRec14[1] + (fRec26[1] + (fRec10 + (fRec15 + fTemp19)))))); + fRec4[0] = ((fRec9[1] + (fRec14[1] + (fRec30[1] + (fRec34[1] + (fRec10 + (fRec15 + fTemp18)))))) - (fRec18[1] + (fRec22[1] + (fRec26[1] + (fRec19 + (fRec23 + fTemp19)))))); + float fTemp20 = (fRec35 + fRec27); + float fTemp21 = (fRec39 + (fRec31 + fRec38[1])); + fRec5[0] = ((fRec14[1] + (fRec22[1] + (fRec26[1] + (fRec34[1] + (fRec15 + (fRec23 + fTemp20)))))) - (fRec9[1] + (fRec18[1] + (fRec30[1] + (fRec10 + (fRec19 + fTemp21)))))); + fRec6[0] = ((fRec9[1] + (fRec18[1] + (fRec26[1] + (fRec34[1] + (fRec10 + (fRec19 + fTemp20)))))) - (fRec14[1] + (fRec22[1] + (fRec30[1] + (fRec15 + (fRec23 + fTemp21)))))); + float fTemp22 = (fRec39 + fTemp16); + float fTemp23 = (fRec31 + fRec27); + fRec7[0] = ((fRec9[1] + (fRec22[1] + (fRec34[1] + (fRec10 + (fRec23 + fTemp22))))) - (fRec14[1] + (fRec18[1] + (fRec26[1] + (fRec30[1] + (fRec15 + (fRec19 + fTemp23))))))); + fRec8[0] = ((fRec14[1] + (fRec18[1] + (fRec34[1] + (fRec15 + (fRec19 + fTemp22))))) - (fRec9[1] + (fRec22[1] + (fRec26[1] + (fRec30[1] + (fRec10 + (fRec23 + fTemp23))))))); + output0[i] = FAUSTFLOAT((iSlow0 ? fTemp0 : ((fTemp1 * fTemp2) + (0.370000005f * (fRec0[0] * (fRec2[0] + fRec3[0])))))); + output1[i] = FAUSTFLOAT((iSlow0 ? fTemp3 : ((fTemp2 * fTemp4) + (0.370000005f * (fRec0[0] * (fRec2[0] - fRec3[0])))))); IOTA = (IOTA + 1); + fRec0[1] = fRec0[0]; + fRec12[1] = fRec12[0]; fRec11[1] = fRec11[0]; fRec13[1] = fRec13[0]; - fRec12[1] = fRec12[0]; fRec9[1] = fRec9[0]; fRec17[1] = fRec17[0]; fRec16[1] = fRec16[0]; @@ -1188,12 +1190,9 @@ class fx_zita_rev1 : public dsp { fRec7[1] = fRec7[0]; fRec8[2] = fRec8[1]; fRec8[1] = fRec8[0]; - } - } - }; // clang-format on #endif diff --git a/ceammc/ext/src/hw/CMakeLists.txt b/ceammc/ext/src/hw/CMakeLists.txt index 2399e88551..28b5d161c7 100644 --- a/ceammc/ext/src/hw/CMakeLists.txt +++ b/ceammc/ext/src/hw/CMakeLists.txt @@ -2,6 +2,7 @@ add_subdirectory(arduino) include_directories(${PROJECT_BINARY_DIR}/ceammc/extra/libusb) include_directories(${CMAKE_SOURCE_DIR}/ceammc/extra/serial/serial/include) include_directories(${PROJECT_SOURCE_DIR}/ceammc/extra/SMSLib) +include_directories(${PROJECT_SOURCE_DIR}/ceammc/extra) # for readerwriterqueue macro(ceammc_hw_external name) list(APPEND HW_SOURCES "hw_${name}.cpp") diff --git a/ceammc/ext/src/hw/arduino/CMakeLists.txt b/ceammc/ext/src/hw/arduino/CMakeLists.txt index 5e7ae59b94..b33e0a77b1 100644 --- a/ceammc/ext/src/hw/arduino/CMakeLists.txt +++ b/ceammc/ext/src/hw/arduino/CMakeLists.txt @@ -8,6 +8,8 @@ set(ARDUINO_SOURCES add_library(hw_arduino STATIC ${ARDUINO_SOURCES}) include_directories(${CMAKE_SOURCE_DIR}/ceammc/extra/serial/serial/include) +include_directories(${PROJECT_SOURCE_DIR}/ceammc/extra) # for readerwriterqueue + target_link_libraries(hw_arduino serial ceammc_core) if(UNIX) diff --git a/ceammc/ext/src/hw/hw_arduino.cpp b/ceammc/ext/src/hw/hw_arduino.cpp index af9d7181e8..44cdabfb2f 100644 --- a/ceammc/ext/src/hw/hw_arduino.cpp +++ b/ceammc/ext/src/hw/hw_arduino.cpp @@ -186,7 +186,10 @@ void ArduinoExternal::processMessages() void ArduinoExternal::initProperties() { - createCbProperty("@connected", &ArduinoExternal::p_connected); + { + Property* p = createCbProperty("@connected", &ArduinoExternal::p_connected); + p->info().setType(PropertyInfoType::BOOLEAN); + } port_ = new SymbolProperty("@port", positionalSymbolArgument(0, &s_), true); createProperty(port_); diff --git a/ceammc/ext/src/hw/hw_display.cpp b/ceammc/ext/src/hw/hw_display.cpp index 3f92455156..e269be9c75 100644 --- a/ceammc/ext/src/hw/hw_display.cpp +++ b/ceammc/ext/src/hw/hw_display.cpp @@ -18,7 +18,9 @@ HwDisplay::HwDisplay(const PdArgs& args) : BaseObject(args) { createOutlet(); - createCbProperty("@brightness", &HwDisplay::propBrightness, &HwDisplay::setPropBrightness); + createCbProperty("@brightness", &HwDisplay::propBrightness, &HwDisplay::setPropBrightness) + ->info() + .setType(PropertyInfoType::FLOAT); } AtomList HwDisplay::propBrightness() const @@ -33,7 +35,7 @@ AtomList HwDisplay::propBrightness() const #ifdef WITH_X11DISPLAY float v = 0; - if(!display_.getBrightness(&v)) + if (!display_.getBrightness(&v)) OBJ_ERR << "can't get brightness"; return AtomList(v); diff --git a/ceammc/ext/src/lfo/lfo_impulse.h b/ceammc/ext/src/lfo/lfo_impulse.h index 5c963ed9ee..e61f2e6049 100644 --- a/ceammc/ext/src/lfo/lfo_impulse.h +++ b/ceammc/ext/src/lfo/lfo_impulse.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "lfo_impulse" -Code generated with Faust 2.8.5 (https://faust.grame.fr) -Compilation options: cpp, -scal -ftz 0 +Code generated with Faust 2.22.1 (https://faust.grame.fr) +Compilation options: -lang cpp -scal -ftz 0 ------------------------------------------------------------ */ #ifndef __lfo_impulse_H__ @@ -14,6 +14,7 @@ Compilation options: cpp, -scal -ftz 0 #include #include +/************************** BEGIN dsp.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -96,23 +97,23 @@ class dsp { * - static class 'classInit': static tables initialization * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void init(int samplingRate) = 0; + virtual void init(int sample_rate) = 0; /** * Init instance state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceInit(int samplingRate) = 0; + virtual void instanceInit(int sample_rate) = 0; /** * Init instance constant state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceConstants(int samplingRate) = 0; + virtual void instanceConstants(int sample_rate) = 0; /* Init default control parameters values */ virtual void instanceResetUserInterface() = 0; @@ -149,8 +150,8 @@ class dsp { * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the number of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) * */ virtual void compute(double /*date_usec*/, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -169,16 +170,16 @@ class decorator_dsp : public dsp { public: - decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + decorator_dsp(dsp* dsp = nullptr):fDSP(dsp) {} virtual ~decorator_dsp() { delete fDSP; } virtual int getNumInputs() { return fDSP->getNumInputs(); } virtual int getNumOutputs() { return fDSP->getNumOutputs(); } virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } virtual int getSampleRate() { return fDSP->getSampleRate(); } - virtual void init(int samplingRate) { fDSP->init(samplingRate); } - virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } - virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void init(int sample_rate) { fDSP->init(sample_rate); } + virtual void instanceInit(int sample_rate) { fDSP->instanceInit(sample_rate); } + virtual void instanceConstants(int sample_rate) { fDSP->instanceConstants(sample_rate); } virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } @@ -233,6 +234,8 @@ class dsp_factory { #endif #endif +/************************** END dsp.h **************************/ +/************************** BEGIN UI.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -272,45 +275,54 @@ class dsp_factory { struct Soundfile; -class UI +template +class UIReal { - + public: - - UI() {} - - virtual ~UI() {} - + + UIReal() {} + virtual ~UIReal() {} + // -- widget's layouts - + virtual void openTabBox(const char* label) = 0; virtual void openHorizontalBox(const char* label) = 0; virtual void openVerticalBox(const char* label) = 0; virtual void closeBox() = 0; - + // -- active widgets - - virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - + + virtual void addButton(const char* label, REAL* zone) = 0; + virtual void addCheckButton(const char* label, REAL* zone) = 0; + virtual void addVerticalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addHorizontalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addNumEntry(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + // -- passive widgets - - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - + + virtual void addHorizontalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + virtual void addVerticalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + // -- soundfiles - + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; - + // -- metadata declarations + + virtual void declare(REAL* zone, const char* key, const char* val) {} +}; - virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +struct UI : public UIReal +{ + + UI() {} + virtual ~UI() {} }; #endif +/************************** END UI.h **************************/ +/************************** BEGIN meta.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -339,11 +351,14 @@ class UI struct Meta { - virtual void declare(const char* key, const char* value) = 0; virtual ~Meta() {}; + virtual void declare(const char* key, const char* value) = 0; + }; #endif +/************************** END meta.h **************************/ +/************************** BEGIN misc.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -366,15 +381,16 @@ struct Meta that work under terms of your choice, so long as this FAUST architecture section is not modified. ************************************************************************/ - + #ifndef __misc__ #define __misc__ #include #include -#include -#include #include +#include +#include +#include using std::max; @@ -382,41 +398,79 @@ using std::min; struct XXXX_Meta : std::map { - void declare(const char* key, const char* value) { (*this)[key]=value; } + void declare(const char* key, const char* value) { (*this)[key] = value; } }; struct MY_Meta : Meta, std::map { - void declare(const char* key, const char* value) { (*this)[key]=value; } + void declare(const char* key, const char* value) { (*this)[key] = value; } }; -inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } +static int lsr(int x, int n) { return int(((unsigned int)x) >> n); } -inline int int2pow2(int x) { int r = 0; while ((1<declare("filename", "lfo_impulse"); + m->declare("filename", "lfo_impulse.dsp"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); m->declare("maths.lib/name", "Faust Math Library"); m->declare("maths.lib/version", "2.1"); m->declare("name", "lfo_impulse"); - m->declare("oscillators.lib/lf_imptrain:copyright", "Julius O. Smith"); - m->declare("oscillators.lib/lf_imptrain:license", "STK-4.3.0 (see licenses/stk-4.3.0.md)"); m->declare("oscillators.lib/name", "Faust Oscillator Library"); m->declare("oscillators.lib/version", "0.0"); } virtual int getNumInputs() { return 1; - } virtual int getNumOutputs() { return 1; - } virtual int getInputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -500,14 +551,12 @@ class lfo_impulse : public dsp { rate = -1; break; } - } return rate; - } virtual int getOutputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -516,44 +565,36 @@ class lfo_impulse : public dsp { rate = -1; break; } - } return rate; - } - static void classInit(int samplingFreq) { - + static void classInit(int sample_rate) { } - virtual void instanceConstants(int samplingFreq) { - fSamplingFreq = samplingFreq; - fConst0 = (1.0f / std::min(192000.0f, std::max(1.0f, float(fSamplingFreq)))); - + virtual void instanceConstants(int sample_rate) { + fSampleRate = sample_rate; + fConst0 = (1.0f / std::min(192000.0f, std::max(1.0f, float(fSampleRate)))); } virtual void instanceResetUserInterface() { - } virtual void instanceClear() { for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { fVec0[l0] = 0.0f; - } for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { fRec0[l1] = 0.0f; - } - } - virtual void init(int samplingFreq) { - classInit(samplingFreq); - instanceInit(samplingFreq); + virtual void init(int sample_rate) { + classInit(sample_rate); + instanceInit(sample_rate); } - virtual void instanceInit(int samplingFreq) { - instanceConstants(samplingFreq); + virtual void instanceInit(int sample_rate) { + instanceConstants(sample_rate); instanceResetUserInterface(); instanceClear(); } @@ -561,15 +602,14 @@ class lfo_impulse : public dsp { virtual lfo_impulse* clone() { return new lfo_impulse(); } + virtual int getSampleRate() { - return fSamplingFreq; - + return fSampleRate; } virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("lfo_impulse"); ui_interface->closeBox(); - } virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { @@ -582,12 +622,9 @@ class lfo_impulse : public dsp { output0[i] = FAUSTFLOAT(((fRec0[0] - fRec0[1]) < 0.0f)); fVec0[1] = fVec0[0]; fRec0[1] = fRec0[0]; - } - } - }; // clang-format on #endif diff --git a/ceammc/ext/src/lfo/lfo_pulse.h b/ceammc/ext/src/lfo/lfo_pulse.h index 2d9b56ec4d..def45d30bf 100644 --- a/ceammc/ext/src/lfo/lfo_pulse.h +++ b/ceammc/ext/src/lfo/lfo_pulse.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "lfo_pulse" -Code generated with Faust 2.8.5 (https://faust.grame.fr) -Compilation options: cpp, -scal -ftz 0 +Code generated with Faust 2.22.1 (https://faust.grame.fr) +Compilation options: -lang cpp -scal -ftz 0 ------------------------------------------------------------ */ #ifndef __lfo_pulse_H__ @@ -14,6 +14,7 @@ Compilation options: cpp, -scal -ftz 0 #include #include +/************************** BEGIN dsp.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -96,23 +97,23 @@ class dsp { * - static class 'classInit': static tables initialization * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void init(int samplingRate) = 0; + virtual void init(int sample_rate) = 0; /** * Init instance state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceInit(int samplingRate) = 0; + virtual void instanceInit(int sample_rate) = 0; /** * Init instance constant state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceConstants(int samplingRate) = 0; + virtual void instanceConstants(int sample_rate) = 0; /* Init default control parameters values */ virtual void instanceResetUserInterface() = 0; @@ -149,8 +150,8 @@ class dsp { * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the number of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) * */ virtual void compute(double /*date_usec*/, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -169,16 +170,16 @@ class decorator_dsp : public dsp { public: - decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + decorator_dsp(dsp* dsp = nullptr):fDSP(dsp) {} virtual ~decorator_dsp() { delete fDSP; } virtual int getNumInputs() { return fDSP->getNumInputs(); } virtual int getNumOutputs() { return fDSP->getNumOutputs(); } virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } virtual int getSampleRate() { return fDSP->getSampleRate(); } - virtual void init(int samplingRate) { fDSP->init(samplingRate); } - virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } - virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void init(int sample_rate) { fDSP->init(sample_rate); } + virtual void instanceInit(int sample_rate) { fDSP->instanceInit(sample_rate); } + virtual void instanceConstants(int sample_rate) { fDSP->instanceConstants(sample_rate); } virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } @@ -233,6 +234,8 @@ class dsp_factory { #endif #endif +/************************** END dsp.h **************************/ +/************************** BEGIN UI.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -272,45 +275,54 @@ class dsp_factory { struct Soundfile; -class UI +template +class UIReal { - + public: - - UI() {} - - virtual ~UI() {} - + + UIReal() {} + virtual ~UIReal() {} + // -- widget's layouts - + virtual void openTabBox(const char* label) = 0; virtual void openHorizontalBox(const char* label) = 0; virtual void openVerticalBox(const char* label) = 0; virtual void closeBox() = 0; - + // -- active widgets - - virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - + + virtual void addButton(const char* label, REAL* zone) = 0; + virtual void addCheckButton(const char* label, REAL* zone) = 0; + virtual void addVerticalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addHorizontalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addNumEntry(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + // -- passive widgets - - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - + + virtual void addHorizontalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + virtual void addVerticalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + // -- soundfiles - + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; - + // -- metadata declarations + + virtual void declare(REAL* zone, const char* key, const char* val) {} +}; - virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +struct UI : public UIReal +{ + + UI() {} + virtual ~UI() {} }; #endif +/************************** END UI.h **************************/ +/************************** BEGIN meta.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -339,11 +351,14 @@ class UI struct Meta { - virtual void declare(const char* key, const char* value) = 0; virtual ~Meta() {}; + virtual void declare(const char* key, const char* value) = 0; + }; #endif +/************************** END meta.h **************************/ +/************************** BEGIN misc.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -366,15 +381,16 @@ struct Meta that work under terms of your choice, so long as this FAUST architecture section is not modified. ************************************************************************/ - + #ifndef __misc__ #define __misc__ #include #include -#include -#include #include +#include +#include +#include using std::max; @@ -382,41 +398,79 @@ using std::min; struct XXXX_Meta : std::map { - void declare(const char* key, const char* value) { (*this)[key]=value; } + void declare(const char* key, const char* value) { (*this)[key] = value; } }; struct MY_Meta : Meta, std::map { - void declare(const char* key, const char* value) { (*this)[key]=value; } + void declare(const char* key, const char* value) { (*this)[key] = value; } }; -inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } +static int lsr(int x, int n) { return int(((unsigned int)x) >> n); } -inline int int2pow2(int x) { int r = 0; while ((1<declare("filename", "lfo_pulse"); + m->declare("filename", "lfo_pulse.dsp"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); @@ -482,15 +537,13 @@ class lfo_pulse : public dsp { virtual int getNumInputs() { return 1; - } virtual int getNumOutputs() { return 1; - } virtual int getInputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -499,14 +552,12 @@ class lfo_pulse : public dsp { rate = -1; break; } - } return rate; - } virtual int getOutputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -515,45 +566,37 @@ class lfo_pulse : public dsp { rate = -1; break; } - } return rate; - } - static void classInit(int samplingFreq) { - + static void classInit(int sample_rate) { } - virtual void instanceConstants(int samplingFreq) { - fSamplingFreq = samplingFreq; - fConst0 = (1.0f / std::min(192000.0f, std::max(1.0f, float(fSamplingFreq)))); - + virtual void instanceConstants(int sample_rate) { + fSampleRate = sample_rate; + fConst0 = (1.0f / std::min(192000.0f, std::max(1.0f, float(fSampleRate)))); } virtual void instanceResetUserInterface() { fHslider0 = FAUSTFLOAT(0.5f); - } virtual void instanceClear() { for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { fVec0[l0] = 0.0f; - } for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { fRec0[l1] = 0.0f; - } - } - virtual void init(int samplingFreq) { - classInit(samplingFreq); - instanceInit(samplingFreq); + virtual void init(int sample_rate) { + classInit(sample_rate); + instanceInit(sample_rate); } - virtual void instanceInit(int samplingFreq) { - instanceConstants(samplingFreq); + virtual void instanceInit(int sample_rate) { + instanceConstants(sample_rate); instanceResetUserInterface(); instanceClear(); } @@ -561,16 +604,15 @@ class lfo_pulse : public dsp { virtual lfo_pulse* clone() { return new lfo_pulse(); } + virtual int getSampleRate() { - return fSamplingFreq; - + return fSampleRate; } virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("lfo_pulse"); ui_interface->addHorizontalSlider("duty", &fHslider0, 0.5f, 0.0f, 1.0f, 0.00999999978f); ui_interface->closeBox(); - } virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { @@ -579,17 +621,14 @@ class lfo_pulse : public dsp { float fSlow0 = float(fHslider0); for (int i = 0; (i < count); i = (i + 1)) { fVec0[0] = float(input0[i]); - float fTemp0 = ((fConst0 * fVec0[1]) + fRec0[1]); + float fTemp0 = (fRec0[1] + (fConst0 * fVec0[1])); fRec0[0] = (fTemp0 - std::floor(fTemp0)); output0[i] = FAUSTFLOAT(((2.0f * float((fRec0[0] <= fSlow0))) + -1.0f)); fVec0[1] = fVec0[0]; fRec0[1] = fRec0[0]; - } - } - }; // clang-format on #endif diff --git a/ceammc/ext/src/lfo/lfo_pulse_pos.h b/ceammc/ext/src/lfo/lfo_pulse_pos.h index 312af63273..fa4f40b972 100644 --- a/ceammc/ext/src/lfo/lfo_pulse_pos.h +++ b/ceammc/ext/src/lfo/lfo_pulse_pos.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "lfo_pulse_pos" -Code generated with Faust 2.8.5 (https://faust.grame.fr) -Compilation options: cpp, -scal -ftz 0 +Code generated with Faust 2.22.1 (https://faust.grame.fr) +Compilation options: -lang cpp -scal -ftz 0 ------------------------------------------------------------ */ #ifndef __lfo_pulse_pos_H__ @@ -14,6 +14,7 @@ Compilation options: cpp, -scal -ftz 0 #include #include +/************************** BEGIN dsp.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -96,23 +97,23 @@ class dsp { * - static class 'classInit': static tables initialization * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void init(int samplingRate) = 0; + virtual void init(int sample_rate) = 0; /** * Init instance state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceInit(int samplingRate) = 0; + virtual void instanceInit(int sample_rate) = 0; /** * Init instance constant state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceConstants(int samplingRate) = 0; + virtual void instanceConstants(int sample_rate) = 0; /* Init default control parameters values */ virtual void instanceResetUserInterface() = 0; @@ -149,8 +150,8 @@ class dsp { * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the number of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) * */ virtual void compute(double /*date_usec*/, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -169,16 +170,16 @@ class decorator_dsp : public dsp { public: - decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + decorator_dsp(dsp* dsp = nullptr):fDSP(dsp) {} virtual ~decorator_dsp() { delete fDSP; } virtual int getNumInputs() { return fDSP->getNumInputs(); } virtual int getNumOutputs() { return fDSP->getNumOutputs(); } virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } virtual int getSampleRate() { return fDSP->getSampleRate(); } - virtual void init(int samplingRate) { fDSP->init(samplingRate); } - virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } - virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void init(int sample_rate) { fDSP->init(sample_rate); } + virtual void instanceInit(int sample_rate) { fDSP->instanceInit(sample_rate); } + virtual void instanceConstants(int sample_rate) { fDSP->instanceConstants(sample_rate); } virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } @@ -233,6 +234,8 @@ class dsp_factory { #endif #endif +/************************** END dsp.h **************************/ +/************************** BEGIN UI.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -272,45 +275,54 @@ class dsp_factory { struct Soundfile; -class UI +template +class UIReal { - + public: - - UI() {} - - virtual ~UI() {} - + + UIReal() {} + virtual ~UIReal() {} + // -- widget's layouts - + virtual void openTabBox(const char* label) = 0; virtual void openHorizontalBox(const char* label) = 0; virtual void openVerticalBox(const char* label) = 0; virtual void closeBox() = 0; - + // -- active widgets - - virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - + + virtual void addButton(const char* label, REAL* zone) = 0; + virtual void addCheckButton(const char* label, REAL* zone) = 0; + virtual void addVerticalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addHorizontalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addNumEntry(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + // -- passive widgets - - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - + + virtual void addHorizontalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + virtual void addVerticalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + // -- soundfiles - + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; - + // -- metadata declarations + + virtual void declare(REAL* zone, const char* key, const char* val) {} +}; - virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +struct UI : public UIReal +{ + + UI() {} + virtual ~UI() {} }; #endif +/************************** END UI.h **************************/ +/************************** BEGIN meta.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -339,11 +351,14 @@ class UI struct Meta { - virtual void declare(const char* key, const char* value) = 0; virtual ~Meta() {}; + virtual void declare(const char* key, const char* value) = 0; + }; #endif +/************************** END meta.h **************************/ +/************************** BEGIN misc.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -366,15 +381,16 @@ struct Meta that work under terms of your choice, so long as this FAUST architecture section is not modified. ************************************************************************/ - + #ifndef __misc__ #define __misc__ #include #include -#include -#include #include +#include +#include +#include using std::max; @@ -382,41 +398,79 @@ using std::min; struct XXXX_Meta : std::map { - void declare(const char* key, const char* value) { (*this)[key]=value; } + void declare(const char* key, const char* value) { (*this)[key] = value; } }; struct MY_Meta : Meta, std::map { - void declare(const char* key, const char* value) { (*this)[key]=value; } + void declare(const char* key, const char* value) { (*this)[key] = value; } }; -inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } +static int lsr(int x, int n) { return int(((unsigned int)x) >> n); } -inline int int2pow2(int x) { int r = 0; while ((1<declare("filename", "lfo_pulse_pos"); + m->declare("filename", "lfo_pulse_pos.dsp"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); @@ -482,15 +537,13 @@ class lfo_pulse_pos : public dsp { virtual int getNumInputs() { return 1; - } virtual int getNumOutputs() { return 1; - } virtual int getInputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -499,14 +552,12 @@ class lfo_pulse_pos : public dsp { rate = -1; break; } - } return rate; - } virtual int getOutputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -515,45 +566,37 @@ class lfo_pulse_pos : public dsp { rate = -1; break; } - } return rate; - } - static void classInit(int samplingFreq) { - + static void classInit(int sample_rate) { } - virtual void instanceConstants(int samplingFreq) { - fSamplingFreq = samplingFreq; - fConst0 = (1.0f / std::min(192000.0f, std::max(1.0f, float(fSamplingFreq)))); - + virtual void instanceConstants(int sample_rate) { + fSampleRate = sample_rate; + fConst0 = (1.0f / std::min(192000.0f, std::max(1.0f, float(fSampleRate)))); } virtual void instanceResetUserInterface() { fHslider0 = FAUSTFLOAT(0.5f); - } virtual void instanceClear() { for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { fVec0[l0] = 0.0f; - } for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { fRec0[l1] = 0.0f; - } - } - virtual void init(int samplingFreq) { - classInit(samplingFreq); - instanceInit(samplingFreq); + virtual void init(int sample_rate) { + classInit(sample_rate); + instanceInit(sample_rate); } - virtual void instanceInit(int samplingFreq) { - instanceConstants(samplingFreq); + virtual void instanceInit(int sample_rate) { + instanceConstants(sample_rate); instanceResetUserInterface(); instanceClear(); } @@ -561,16 +604,15 @@ class lfo_pulse_pos : public dsp { virtual lfo_pulse_pos* clone() { return new lfo_pulse_pos(); } + virtual int getSampleRate() { - return fSamplingFreq; - + return fSampleRate; } virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("lfo_pulse_pos"); ui_interface->addHorizontalSlider("duty", &fHslider0, 0.5f, 0.0f, 1.0f, 0.00999999978f); ui_interface->closeBox(); - } virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { @@ -579,17 +621,14 @@ class lfo_pulse_pos : public dsp { float fSlow0 = float(fHslider0); for (int i = 0; (i < count); i = (i + 1)) { fVec0[0] = float(input0[i]); - float fTemp0 = ((fConst0 * fVec0[1]) + fRec0[1]); + float fTemp0 = (fRec0[1] + (fConst0 * fVec0[1])); fRec0[0] = (fTemp0 - std::floor(fTemp0)); output0[i] = FAUSTFLOAT(float((fRec0[0] <= fSlow0))); fVec0[1] = fVec0[0]; fRec0[1] = fRec0[0]; - } - } - }; // clang-format on #endif diff --git a/ceammc/ext/src/lfo/lfo_saw.h b/ceammc/ext/src/lfo/lfo_saw.h index 3fc9ddc394..c1a00245ed 100644 --- a/ceammc/ext/src/lfo/lfo_saw.h +++ b/ceammc/ext/src/lfo/lfo_saw.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "lfo_saw" -Code generated with Faust 2.15.0 (https://faust.grame.fr) -Compilation options: cpp, -scal -ftz 0 +Code generated with Faust 2.22.1 (https://faust.grame.fr) +Compilation options: -lang cpp -scal -ftz 0 ------------------------------------------------------------ */ #ifndef __lfo_saw_H__ @@ -14,6 +14,7 @@ Compilation options: cpp, -scal -ftz 0 #include #include +/************************** BEGIN dsp.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -96,23 +97,23 @@ class dsp { * - static class 'classInit': static tables initialization * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void init(int samplingRate) = 0; + virtual void init(int sample_rate) = 0; /** * Init instance state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceInit(int samplingRate) = 0; + virtual void instanceInit(int sample_rate) = 0; /** * Init instance constant state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceConstants(int samplingRate) = 0; + virtual void instanceConstants(int sample_rate) = 0; /* Init default control parameters values */ virtual void instanceResetUserInterface() = 0; @@ -149,8 +150,8 @@ class dsp { * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the number of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) * */ virtual void compute(double /*date_usec*/, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -169,16 +170,16 @@ class decorator_dsp : public dsp { public: - decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + decorator_dsp(dsp* dsp = nullptr):fDSP(dsp) {} virtual ~decorator_dsp() { delete fDSP; } virtual int getNumInputs() { return fDSP->getNumInputs(); } virtual int getNumOutputs() { return fDSP->getNumOutputs(); } virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } virtual int getSampleRate() { return fDSP->getSampleRate(); } - virtual void init(int samplingRate) { fDSP->init(samplingRate); } - virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } - virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void init(int sample_rate) { fDSP->init(sample_rate); } + virtual void instanceInit(int sample_rate) { fDSP->instanceInit(sample_rate); } + virtual void instanceConstants(int sample_rate) { fDSP->instanceConstants(sample_rate); } virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } @@ -233,6 +234,8 @@ class dsp_factory { #endif #endif +/************************** END dsp.h **************************/ +/************************** BEGIN UI.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -272,45 +275,54 @@ class dsp_factory { struct Soundfile; -class UI +template +class UIReal { - + public: - - UI() {} - - virtual ~UI() {} - + + UIReal() {} + virtual ~UIReal() {} + // -- widget's layouts - + virtual void openTabBox(const char* label) = 0; virtual void openHorizontalBox(const char* label) = 0; virtual void openVerticalBox(const char* label) = 0; virtual void closeBox() = 0; - + // -- active widgets - - virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - + + virtual void addButton(const char* label, REAL* zone) = 0; + virtual void addCheckButton(const char* label, REAL* zone) = 0; + virtual void addVerticalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addHorizontalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addNumEntry(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + // -- passive widgets - - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - + + virtual void addHorizontalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + virtual void addVerticalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + // -- soundfiles - + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; - + // -- metadata declarations + + virtual void declare(REAL* zone, const char* key, const char* val) {} +}; - virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +struct UI : public UIReal +{ + + UI() {} + virtual ~UI() {} }; #endif +/************************** END UI.h **************************/ +/************************** BEGIN meta.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -339,11 +351,14 @@ class UI struct Meta { - virtual void declare(const char* key, const char* value) = 0; virtual ~Meta() {}; + virtual void declare(const char* key, const char* value) = 0; + }; #endif +/************************** END meta.h **************************/ +/************************** BEGIN misc.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -366,7 +381,7 @@ struct Meta that work under terms of your choice, so long as this FAUST architecture section is not modified. ************************************************************************/ - + #ifndef __misc__ #define __misc__ @@ -374,6 +389,8 @@ struct Meta #include #include #include +#include +#include using std::max; @@ -395,27 +412,65 @@ static int int2pow2(int x) { int r = 0; while ((1<declare("filename", "lfo_saw"); + m->declare("filename", "lfo_saw.dsp"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); @@ -481,15 +537,13 @@ class lfo_saw : public dsp { virtual int getNumInputs() { return 1; - } virtual int getNumOutputs() { return 1; - } virtual int getInputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -498,14 +552,12 @@ class lfo_saw : public dsp { rate = -1; break; } - } return rate; - } virtual int getOutputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -514,45 +566,37 @@ class lfo_saw : public dsp { rate = -1; break; } - } return rate; - } - static void classInit(int samplingFreq) { - + static void classInit(int sample_rate) { } - virtual void instanceConstants(int samplingFreq) { - fSamplingFreq = samplingFreq; - fConst0 = (1.0f / std::min(192000.0f, std::max(1.0f, float(fSamplingFreq)))); - + virtual void instanceConstants(int sample_rate) { + fSampleRate = sample_rate; + fConst0 = (1.0f / std::min(192000.0f, std::max(1.0f, float(fSampleRate)))); } virtual void instanceResetUserInterface() { fCheckbox0 = FAUSTFLOAT(0.0f); - } virtual void instanceClear() { for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { fVec0[l0] = 0.0f; - } for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { fRec0[l1] = 0.0f; - } - } - virtual void init(int samplingFreq) { - classInit(samplingFreq); - instanceInit(samplingFreq); + virtual void init(int sample_rate) { + classInit(sample_rate); + instanceInit(sample_rate); } - virtual void instanceInit(int samplingFreq) { - instanceConstants(samplingFreq); + virtual void instanceInit(int sample_rate) { + instanceConstants(sample_rate); instanceResetUserInterface(); instanceClear(); } @@ -560,16 +604,15 @@ class lfo_saw : public dsp { virtual lfo_saw* clone() { return new lfo_saw(); } + virtual int getSampleRate() { - return fSamplingFreq; - + return fSampleRate; } virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("lfo_saw"); ui_interface->addCheckButton("invert", &fCheckbox0); ui_interface->closeBox(); - } virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { @@ -583,12 +626,9 @@ class lfo_saw : public dsp { output0[i] = FAUSTFLOAT((fSlow0 * ((2.0f * fRec0[0]) + -1.0f))); fVec0[1] = fVec0[0]; fRec0[1] = fRec0[0]; - } - } - }; // clang-format on #endif diff --git a/ceammc/ext/src/lfo/lfo_saw_pos.h b/ceammc/ext/src/lfo/lfo_saw_pos.h index 83e3c10cc8..ecdc462736 100644 --- a/ceammc/ext/src/lfo/lfo_saw_pos.h +++ b/ceammc/ext/src/lfo/lfo_saw_pos.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "lfo_saw_pos" -Code generated with Faust 2.15.0 (https://faust.grame.fr) -Compilation options: cpp, -scal -ftz 0 +Code generated with Faust 2.22.1 (https://faust.grame.fr) +Compilation options: -lang cpp -scal -ftz 0 ------------------------------------------------------------ */ #ifndef __lfo_saw_pos_H__ @@ -14,6 +14,7 @@ Compilation options: cpp, -scal -ftz 0 #include #include +/************************** BEGIN dsp.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -96,23 +97,23 @@ class dsp { * - static class 'classInit': static tables initialization * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void init(int samplingRate) = 0; + virtual void init(int sample_rate) = 0; /** * Init instance state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceInit(int samplingRate) = 0; + virtual void instanceInit(int sample_rate) = 0; /** * Init instance constant state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceConstants(int samplingRate) = 0; + virtual void instanceConstants(int sample_rate) = 0; /* Init default control parameters values */ virtual void instanceResetUserInterface() = 0; @@ -149,8 +150,8 @@ class dsp { * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the number of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) * */ virtual void compute(double /*date_usec*/, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -169,16 +170,16 @@ class decorator_dsp : public dsp { public: - decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + decorator_dsp(dsp* dsp = nullptr):fDSP(dsp) {} virtual ~decorator_dsp() { delete fDSP; } virtual int getNumInputs() { return fDSP->getNumInputs(); } virtual int getNumOutputs() { return fDSP->getNumOutputs(); } virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } virtual int getSampleRate() { return fDSP->getSampleRate(); } - virtual void init(int samplingRate) { fDSP->init(samplingRate); } - virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } - virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void init(int sample_rate) { fDSP->init(sample_rate); } + virtual void instanceInit(int sample_rate) { fDSP->instanceInit(sample_rate); } + virtual void instanceConstants(int sample_rate) { fDSP->instanceConstants(sample_rate); } virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } @@ -233,6 +234,8 @@ class dsp_factory { #endif #endif +/************************** END dsp.h **************************/ +/************************** BEGIN UI.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -272,45 +275,54 @@ class dsp_factory { struct Soundfile; -class UI +template +class UIReal { - + public: - - UI() {} - - virtual ~UI() {} - + + UIReal() {} + virtual ~UIReal() {} + // -- widget's layouts - + virtual void openTabBox(const char* label) = 0; virtual void openHorizontalBox(const char* label) = 0; virtual void openVerticalBox(const char* label) = 0; virtual void closeBox() = 0; - + // -- active widgets - - virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - + + virtual void addButton(const char* label, REAL* zone) = 0; + virtual void addCheckButton(const char* label, REAL* zone) = 0; + virtual void addVerticalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addHorizontalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addNumEntry(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + // -- passive widgets - - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - + + virtual void addHorizontalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + virtual void addVerticalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + // -- soundfiles - + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; - + // -- metadata declarations + + virtual void declare(REAL* zone, const char* key, const char* val) {} +}; - virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +struct UI : public UIReal +{ + + UI() {} + virtual ~UI() {} }; #endif +/************************** END UI.h **************************/ +/************************** BEGIN meta.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -339,11 +351,14 @@ class UI struct Meta { - virtual void declare(const char* key, const char* value) = 0; virtual ~Meta() {}; + virtual void declare(const char* key, const char* value) = 0; + }; #endif +/************************** END meta.h **************************/ +/************************** BEGIN misc.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -366,7 +381,7 @@ struct Meta that work under terms of your choice, so long as this FAUST architecture section is not modified. ************************************************************************/ - + #ifndef __misc__ #define __misc__ @@ -374,6 +389,8 @@ struct Meta #include #include #include +#include +#include using std::max; @@ -395,27 +412,65 @@ static int int2pow2(int x) { int r = 0; while ((1<declare("filename", "lfo_saw_pos"); + m->declare("filename", "lfo_saw_pos.dsp"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); @@ -481,15 +537,13 @@ class lfo_saw_pos : public dsp { virtual int getNumInputs() { return 1; - } virtual int getNumOutputs() { return 1; - } virtual int getInputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -498,14 +552,12 @@ class lfo_saw_pos : public dsp { rate = -1; break; } - } return rate; - } virtual int getOutputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -514,45 +566,37 @@ class lfo_saw_pos : public dsp { rate = -1; break; } - } return rate; - } - static void classInit(int samplingFreq) { - + static void classInit(int sample_rate) { } - virtual void instanceConstants(int samplingFreq) { - fSamplingFreq = samplingFreq; - fConst0 = (1.0f / std::min(192000.0f, std::max(1.0f, float(fSamplingFreq)))); - + virtual void instanceConstants(int sample_rate) { + fSampleRate = sample_rate; + fConst0 = (1.0f / std::min(192000.0f, std::max(1.0f, float(fSampleRate)))); } virtual void instanceResetUserInterface() { fCheckbox0 = FAUSTFLOAT(0.0f); - } virtual void instanceClear() { for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { fVec0[l0] = 0.0f; - } for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { fRec0[l1] = 0.0f; - } - } - virtual void init(int samplingFreq) { - classInit(samplingFreq); - instanceInit(samplingFreq); + virtual void init(int sample_rate) { + classInit(sample_rate); + instanceInit(sample_rate); } - virtual void instanceInit(int samplingFreq) { - instanceConstants(samplingFreq); + virtual void instanceInit(int sample_rate) { + instanceConstants(sample_rate); instanceResetUserInterface(); instanceClear(); } @@ -560,16 +604,15 @@ class lfo_saw_pos : public dsp { virtual lfo_saw_pos* clone() { return new lfo_saw_pos(); } + virtual int getSampleRate() { - return fSamplingFreq; - + return fSampleRate; } virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("lfo_saw_pos"); ui_interface->addCheckButton("invert", &fCheckbox0); ui_interface->closeBox(); - } virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { @@ -583,12 +626,9 @@ class lfo_saw_pos : public dsp { output0[i] = FAUSTFLOAT((0.5f * ((fSlow0 * ((2.0f * fRec0[0]) + -1.0f)) + 1.0f))); fVec0[1] = fVec0[0]; fRec0[1] = fRec0[0]; - } - } - }; // clang-format on #endif diff --git a/ceammc/ext/src/lfo/lfo_square.h b/ceammc/ext/src/lfo/lfo_square.h index 1b1fc9243a..db325f6bfa 100644 --- a/ceammc/ext/src/lfo/lfo_square.h +++ b/ceammc/ext/src/lfo/lfo_square.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "lfo_square" -Code generated with Faust 2.8.5 (https://faust.grame.fr) -Compilation options: cpp, -scal -ftz 0 +Code generated with Faust 2.22.1 (https://faust.grame.fr) +Compilation options: -lang cpp -scal -ftz 0 ------------------------------------------------------------ */ #ifndef __lfo_square_H__ @@ -14,6 +14,7 @@ Compilation options: cpp, -scal -ftz 0 #include #include +/************************** BEGIN dsp.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -96,23 +97,23 @@ class dsp { * - static class 'classInit': static tables initialization * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void init(int samplingRate) = 0; + virtual void init(int sample_rate) = 0; /** * Init instance state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceInit(int samplingRate) = 0; + virtual void instanceInit(int sample_rate) = 0; /** * Init instance constant state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceConstants(int samplingRate) = 0; + virtual void instanceConstants(int sample_rate) = 0; /* Init default control parameters values */ virtual void instanceResetUserInterface() = 0; @@ -149,8 +150,8 @@ class dsp { * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the number of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) * */ virtual void compute(double /*date_usec*/, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -169,16 +170,16 @@ class decorator_dsp : public dsp { public: - decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + decorator_dsp(dsp* dsp = nullptr):fDSP(dsp) {} virtual ~decorator_dsp() { delete fDSP; } virtual int getNumInputs() { return fDSP->getNumInputs(); } virtual int getNumOutputs() { return fDSP->getNumOutputs(); } virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } virtual int getSampleRate() { return fDSP->getSampleRate(); } - virtual void init(int samplingRate) { fDSP->init(samplingRate); } - virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } - virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void init(int sample_rate) { fDSP->init(sample_rate); } + virtual void instanceInit(int sample_rate) { fDSP->instanceInit(sample_rate); } + virtual void instanceConstants(int sample_rate) { fDSP->instanceConstants(sample_rate); } virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } @@ -233,6 +234,8 @@ class dsp_factory { #endif #endif +/************************** END dsp.h **************************/ +/************************** BEGIN UI.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -272,45 +275,54 @@ class dsp_factory { struct Soundfile; -class UI +template +class UIReal { - + public: - - UI() {} - - virtual ~UI() {} - + + UIReal() {} + virtual ~UIReal() {} + // -- widget's layouts - + virtual void openTabBox(const char* label) = 0; virtual void openHorizontalBox(const char* label) = 0; virtual void openVerticalBox(const char* label) = 0; virtual void closeBox() = 0; - + // -- active widgets - - virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - + + virtual void addButton(const char* label, REAL* zone) = 0; + virtual void addCheckButton(const char* label, REAL* zone) = 0; + virtual void addVerticalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addHorizontalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addNumEntry(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + // -- passive widgets - - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - + + virtual void addHorizontalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + virtual void addVerticalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + // -- soundfiles - + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; - + // -- metadata declarations + + virtual void declare(REAL* zone, const char* key, const char* val) {} +}; - virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +struct UI : public UIReal +{ + + UI() {} + virtual ~UI() {} }; #endif +/************************** END UI.h **************************/ +/************************** BEGIN meta.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -339,11 +351,14 @@ class UI struct Meta { - virtual void declare(const char* key, const char* value) = 0; virtual ~Meta() {}; + virtual void declare(const char* key, const char* value) = 0; + }; #endif +/************************** END meta.h **************************/ +/************************** BEGIN misc.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -366,15 +381,16 @@ struct Meta that work under terms of your choice, so long as this FAUST architecture section is not modified. ************************************************************************/ - + #ifndef __misc__ #define __misc__ #include #include -#include -#include #include +#include +#include +#include using std::max; @@ -382,41 +398,79 @@ using std::min; struct XXXX_Meta : std::map { - void declare(const char* key, const char* value) { (*this)[key]=value; } + void declare(const char* key, const char* value) { (*this)[key] = value; } }; struct MY_Meta : Meta, std::map { - void declare(const char* key, const char* value) { (*this)[key]=value; } + void declare(const char* key, const char* value) { (*this)[key] = value; } }; -inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } +static int lsr(int x, int n) { return int(((unsigned int)x) >> n); } -inline int int2pow2(int x) { int r = 0; while ((1<declare("filename", "lfo_square"); + m->declare("filename", "lfo_square.dsp"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); @@ -481,15 +536,13 @@ class lfo_square : public dsp { virtual int getNumInputs() { return 1; - } virtual int getNumOutputs() { return 1; - } virtual int getInputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -498,14 +551,12 @@ class lfo_square : public dsp { rate = -1; break; } - } return rate; - } virtual int getOutputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -514,44 +565,36 @@ class lfo_square : public dsp { rate = -1; break; } - } return rate; - } - static void classInit(int samplingFreq) { - + static void classInit(int sample_rate) { } - virtual void instanceConstants(int samplingFreq) { - fSamplingFreq = samplingFreq; - fConst0 = (1.0f / std::min(192000.0f, std::max(1.0f, float(fSamplingFreq)))); - + virtual void instanceConstants(int sample_rate) { + fSampleRate = sample_rate; + fConst0 = (1.0f / std::min(192000.0f, std::max(1.0f, float(fSampleRate)))); } virtual void instanceResetUserInterface() { - } virtual void instanceClear() { for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { fVec0[l0] = 0.0f; - } for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { fRec0[l1] = 0.0f; - } - } - virtual void init(int samplingFreq) { - classInit(samplingFreq); - instanceInit(samplingFreq); + virtual void init(int sample_rate) { + classInit(sample_rate); + instanceInit(sample_rate); } - virtual void instanceInit(int samplingFreq) { - instanceConstants(samplingFreq); + virtual void instanceInit(int sample_rate) { + instanceConstants(sample_rate); instanceResetUserInterface(); instanceClear(); } @@ -559,15 +602,14 @@ class lfo_square : public dsp { virtual lfo_square* clone() { return new lfo_square(); } + virtual int getSampleRate() { - return fSamplingFreq; - + return fSampleRate; } virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("lfo_square"); ui_interface->closeBox(); - } virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { @@ -575,17 +617,14 @@ class lfo_square : public dsp { FAUSTFLOAT* output0 = outputs[0]; for (int i = 0; (i < count); i = (i + 1)) { fVec0[0] = float(input0[i]); - float fTemp0 = ((fConst0 * fVec0[1]) + fRec0[1]); + float fTemp0 = (fRec0[1] + (fConst0 * fVec0[1])); fRec0[0] = (fTemp0 - std::floor(fTemp0)); output0[i] = FAUSTFLOAT(((2.0f * float((fRec0[0] <= 0.5f))) + -1.0f)); fVec0[1] = fVec0[0]; fRec0[1] = fRec0[0]; - } - } - }; // clang-format on #endif diff --git a/ceammc/ext/src/lfo/lfo_square_pos.h b/ceammc/ext/src/lfo/lfo_square_pos.h index fc925243ba..7a6d8962c1 100644 --- a/ceammc/ext/src/lfo/lfo_square_pos.h +++ b/ceammc/ext/src/lfo/lfo_square_pos.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "lfo_square_pos" -Code generated with Faust 2.8.5 (https://faust.grame.fr) -Compilation options: cpp, -scal -ftz 0 +Code generated with Faust 2.22.1 (https://faust.grame.fr) +Compilation options: -lang cpp -scal -ftz 0 ------------------------------------------------------------ */ #ifndef __lfo_square_pos_H__ @@ -14,6 +14,7 @@ Compilation options: cpp, -scal -ftz 0 #include #include +/************************** BEGIN dsp.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -96,23 +97,23 @@ class dsp { * - static class 'classInit': static tables initialization * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void init(int samplingRate) = 0; + virtual void init(int sample_rate) = 0; /** * Init instance state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceInit(int samplingRate) = 0; + virtual void instanceInit(int sample_rate) = 0; /** * Init instance constant state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceConstants(int samplingRate) = 0; + virtual void instanceConstants(int sample_rate) = 0; /* Init default control parameters values */ virtual void instanceResetUserInterface() = 0; @@ -149,8 +150,8 @@ class dsp { * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the number of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) * */ virtual void compute(double /*date_usec*/, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -169,16 +170,16 @@ class decorator_dsp : public dsp { public: - decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + decorator_dsp(dsp* dsp = nullptr):fDSP(dsp) {} virtual ~decorator_dsp() { delete fDSP; } virtual int getNumInputs() { return fDSP->getNumInputs(); } virtual int getNumOutputs() { return fDSP->getNumOutputs(); } virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } virtual int getSampleRate() { return fDSP->getSampleRate(); } - virtual void init(int samplingRate) { fDSP->init(samplingRate); } - virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } - virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void init(int sample_rate) { fDSP->init(sample_rate); } + virtual void instanceInit(int sample_rate) { fDSP->instanceInit(sample_rate); } + virtual void instanceConstants(int sample_rate) { fDSP->instanceConstants(sample_rate); } virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } @@ -233,6 +234,8 @@ class dsp_factory { #endif #endif +/************************** END dsp.h **************************/ +/************************** BEGIN UI.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -272,45 +275,54 @@ class dsp_factory { struct Soundfile; -class UI +template +class UIReal { - + public: - - UI() {} - - virtual ~UI() {} - + + UIReal() {} + virtual ~UIReal() {} + // -- widget's layouts - + virtual void openTabBox(const char* label) = 0; virtual void openHorizontalBox(const char* label) = 0; virtual void openVerticalBox(const char* label) = 0; virtual void closeBox() = 0; - + // -- active widgets - - virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - + + virtual void addButton(const char* label, REAL* zone) = 0; + virtual void addCheckButton(const char* label, REAL* zone) = 0; + virtual void addVerticalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addHorizontalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addNumEntry(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + // -- passive widgets - - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - + + virtual void addHorizontalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + virtual void addVerticalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + // -- soundfiles - + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; - + // -- metadata declarations + + virtual void declare(REAL* zone, const char* key, const char* val) {} +}; - virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +struct UI : public UIReal +{ + + UI() {} + virtual ~UI() {} }; #endif +/************************** END UI.h **************************/ +/************************** BEGIN meta.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -339,11 +351,14 @@ class UI struct Meta { - virtual void declare(const char* key, const char* value) = 0; virtual ~Meta() {}; + virtual void declare(const char* key, const char* value) = 0; + }; #endif +/************************** END meta.h **************************/ +/************************** BEGIN misc.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -366,15 +381,16 @@ struct Meta that work under terms of your choice, so long as this FAUST architecture section is not modified. ************************************************************************/ - + #ifndef __misc__ #define __misc__ #include #include -#include -#include #include +#include +#include +#include using std::max; @@ -382,41 +398,79 @@ using std::min; struct XXXX_Meta : std::map { - void declare(const char* key, const char* value) { (*this)[key]=value; } + void declare(const char* key, const char* value) { (*this)[key] = value; } }; struct MY_Meta : Meta, std::map { - void declare(const char* key, const char* value) { (*this)[key]=value; } + void declare(const char* key, const char* value) { (*this)[key] = value; } }; -inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } +static int lsr(int x, int n) { return int(((unsigned int)x) >> n); } -inline int int2pow2(int x) { int r = 0; while ((1<declare("filename", "lfo_square_pos"); + m->declare("filename", "lfo_square_pos.dsp"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); @@ -481,15 +536,13 @@ class lfo_square_pos : public dsp { virtual int getNumInputs() { return 1; - } virtual int getNumOutputs() { return 1; - } virtual int getInputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -498,14 +551,12 @@ class lfo_square_pos : public dsp { rate = -1; break; } - } return rate; - } virtual int getOutputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -514,44 +565,36 @@ class lfo_square_pos : public dsp { rate = -1; break; } - } return rate; - } - static void classInit(int samplingFreq) { - + static void classInit(int sample_rate) { } - virtual void instanceConstants(int samplingFreq) { - fSamplingFreq = samplingFreq; - fConst0 = (1.0f / std::min(192000.0f, std::max(1.0f, float(fSamplingFreq)))); - + virtual void instanceConstants(int sample_rate) { + fSampleRate = sample_rate; + fConst0 = (1.0f / std::min(192000.0f, std::max(1.0f, float(fSampleRate)))); } virtual void instanceResetUserInterface() { - } virtual void instanceClear() { for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { fVec0[l0] = 0.0f; - } for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { fRec0[l1] = 0.0f; - } - } - virtual void init(int samplingFreq) { - classInit(samplingFreq); - instanceInit(samplingFreq); + virtual void init(int sample_rate) { + classInit(sample_rate); + instanceInit(sample_rate); } - virtual void instanceInit(int samplingFreq) { - instanceConstants(samplingFreq); + virtual void instanceInit(int sample_rate) { + instanceConstants(sample_rate); instanceResetUserInterface(); instanceClear(); } @@ -559,15 +602,14 @@ class lfo_square_pos : public dsp { virtual lfo_square_pos* clone() { return new lfo_square_pos(); } + virtual int getSampleRate() { - return fSamplingFreq; - + return fSampleRate; } virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("lfo_square_pos"); ui_interface->closeBox(); - } virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { @@ -575,17 +617,14 @@ class lfo_square_pos : public dsp { FAUSTFLOAT* output0 = outputs[0]; for (int i = 0; (i < count); i = (i + 1)) { fVec0[0] = float(input0[i]); - float fTemp0 = ((fConst0 * fVec0[1]) + fRec0[1]); + float fTemp0 = (fRec0[1] + (fConst0 * fVec0[1])); fRec0[0] = (fTemp0 - std::floor(fTemp0)); output0[i] = FAUSTFLOAT(float((fRec0[0] <= 0.5f))); fVec0[1] = fVec0[0]; fRec0[1] = fRec0[0]; - } - } - }; // clang-format on #endif diff --git a/ceammc/ext/src/lfo/lfo_tri.h b/ceammc/ext/src/lfo/lfo_tri.h index 5aae337f0e..3ed5697716 100644 --- a/ceammc/ext/src/lfo/lfo_tri.h +++ b/ceammc/ext/src/lfo/lfo_tri.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "lfo_tri" -Code generated with Faust 2.8.5 (https://faust.grame.fr) -Compilation options: cpp, -scal -ftz 0 +Code generated with Faust 2.22.1 (https://faust.grame.fr) +Compilation options: -lang cpp -scal -ftz 0 ------------------------------------------------------------ */ #ifndef __lfo_tri_H__ @@ -14,6 +14,7 @@ Compilation options: cpp, -scal -ftz 0 #include #include +/************************** BEGIN dsp.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -96,23 +97,23 @@ class dsp { * - static class 'classInit': static tables initialization * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void init(int samplingRate) = 0; + virtual void init(int sample_rate) = 0; /** * Init instance state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceInit(int samplingRate) = 0; + virtual void instanceInit(int sample_rate) = 0; /** * Init instance constant state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceConstants(int samplingRate) = 0; + virtual void instanceConstants(int sample_rate) = 0; /* Init default control parameters values */ virtual void instanceResetUserInterface() = 0; @@ -149,8 +150,8 @@ class dsp { * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the number of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) * */ virtual void compute(double /*date_usec*/, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -169,16 +170,16 @@ class decorator_dsp : public dsp { public: - decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + decorator_dsp(dsp* dsp = nullptr):fDSP(dsp) {} virtual ~decorator_dsp() { delete fDSP; } virtual int getNumInputs() { return fDSP->getNumInputs(); } virtual int getNumOutputs() { return fDSP->getNumOutputs(); } virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } virtual int getSampleRate() { return fDSP->getSampleRate(); } - virtual void init(int samplingRate) { fDSP->init(samplingRate); } - virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } - virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void init(int sample_rate) { fDSP->init(sample_rate); } + virtual void instanceInit(int sample_rate) { fDSP->instanceInit(sample_rate); } + virtual void instanceConstants(int sample_rate) { fDSP->instanceConstants(sample_rate); } virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } @@ -233,6 +234,8 @@ class dsp_factory { #endif #endif +/************************** END dsp.h **************************/ +/************************** BEGIN UI.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -272,45 +275,54 @@ class dsp_factory { struct Soundfile; -class UI +template +class UIReal { - + public: - - UI() {} - - virtual ~UI() {} - + + UIReal() {} + virtual ~UIReal() {} + // -- widget's layouts - + virtual void openTabBox(const char* label) = 0; virtual void openHorizontalBox(const char* label) = 0; virtual void openVerticalBox(const char* label) = 0; virtual void closeBox() = 0; - + // -- active widgets - - virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - + + virtual void addButton(const char* label, REAL* zone) = 0; + virtual void addCheckButton(const char* label, REAL* zone) = 0; + virtual void addVerticalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addHorizontalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addNumEntry(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + // -- passive widgets - - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - + + virtual void addHorizontalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + virtual void addVerticalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + // -- soundfiles - + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; - + // -- metadata declarations + + virtual void declare(REAL* zone, const char* key, const char* val) {} +}; - virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +struct UI : public UIReal +{ + + UI() {} + virtual ~UI() {} }; #endif +/************************** END UI.h **************************/ +/************************** BEGIN meta.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -339,11 +351,14 @@ class UI struct Meta { - virtual void declare(const char* key, const char* value) = 0; virtual ~Meta() {}; + virtual void declare(const char* key, const char* value) = 0; + }; #endif +/************************** END meta.h **************************/ +/************************** BEGIN misc.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -366,15 +381,16 @@ struct Meta that work under terms of your choice, so long as this FAUST architecture section is not modified. ************************************************************************/ - + #ifndef __misc__ #define __misc__ #include #include -#include -#include #include +#include +#include +#include using std::max; @@ -382,41 +398,79 @@ using std::min; struct XXXX_Meta : std::map { - void declare(const char* key, const char* value) { (*this)[key]=value; } + void declare(const char* key, const char* value) { (*this)[key] = value; } }; struct MY_Meta : Meta, std::map { - void declare(const char* key, const char* value) { (*this)[key]=value; } + void declare(const char* key, const char* value) { (*this)[key] = value; } }; -inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } +static int lsr(int x, int n) { return int(((unsigned int)x) >> n); } -inline int int2pow2(int x) { int r = 0; while ((1<declare("filename", "lfo_tri"); + m->declare("filename", "lfo_tri.dsp"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); @@ -481,15 +536,13 @@ class lfo_tri : public dsp { virtual int getNumInputs() { return 1; - } virtual int getNumOutputs() { return 1; - } virtual int getInputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -498,14 +551,12 @@ class lfo_tri : public dsp { rate = -1; break; } - } return rate; - } virtual int getOutputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -514,44 +565,36 @@ class lfo_tri : public dsp { rate = -1; break; } - } return rate; - } - static void classInit(int samplingFreq) { - + static void classInit(int sample_rate) { } - virtual void instanceConstants(int samplingFreq) { - fSamplingFreq = samplingFreq; - fConst0 = (1.0f / std::min(192000.0f, std::max(1.0f, float(fSamplingFreq)))); - + virtual void instanceConstants(int sample_rate) { + fSampleRate = sample_rate; + fConst0 = (1.0f / std::min(192000.0f, std::max(1.0f, float(fSampleRate)))); } virtual void instanceResetUserInterface() { - } virtual void instanceClear() { for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { fVec0[l0] = 0.0f; - } for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { fRec0[l1] = 0.0f; - } - } - virtual void init(int samplingFreq) { - classInit(samplingFreq); - instanceInit(samplingFreq); + virtual void init(int sample_rate) { + classInit(sample_rate); + instanceInit(sample_rate); } - virtual void instanceInit(int samplingFreq) { - instanceConstants(samplingFreq); + virtual void instanceInit(int sample_rate) { + instanceConstants(sample_rate); instanceResetUserInterface(); instanceClear(); } @@ -559,15 +602,14 @@ class lfo_tri : public dsp { virtual lfo_tri* clone() { return new lfo_tri(); } + virtual int getSampleRate() { - return fSamplingFreq; - + return fSampleRate; } virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("lfo_tri"); ui_interface->closeBox(); - } virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { @@ -575,17 +617,14 @@ class lfo_tri : public dsp { FAUSTFLOAT* output0 = outputs[0]; for (int i = 0; (i < count); i = (i + 1)) { fVec0[0] = float(input0[i]); - float fTemp0 = ((fConst0 * fVec0[1]) + fRec0[1]); + float fTemp0 = (fRec0[1] + (fConst0 * fVec0[1])); fRec0[0] = (fTemp0 - std::floor(fTemp0)); output0[i] = FAUSTFLOAT(((2.0f * (1.0f - std::fabs(((2.0f * fRec0[0]) + -1.0f)))) + -1.0f)); fVec0[1] = fVec0[0]; fRec0[1] = fRec0[0]; - } - } - }; // clang-format on #endif diff --git a/ceammc/ext/src/lfo/lfo_tri_pos.h b/ceammc/ext/src/lfo/lfo_tri_pos.h index ceaa51bed8..7908e3844d 100644 --- a/ceammc/ext/src/lfo/lfo_tri_pos.h +++ b/ceammc/ext/src/lfo/lfo_tri_pos.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "lfo_tri_pos" -Code generated with Faust 2.8.5 (https://faust.grame.fr) -Compilation options: cpp, -scal -ftz 0 +Code generated with Faust 2.22.1 (https://faust.grame.fr) +Compilation options: -lang cpp -scal -ftz 0 ------------------------------------------------------------ */ #ifndef __lfo_tri_pos_H__ @@ -14,6 +14,7 @@ Compilation options: cpp, -scal -ftz 0 #include #include +/************************** BEGIN dsp.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -96,23 +97,23 @@ class dsp { * - static class 'classInit': static tables initialization * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void init(int samplingRate) = 0; + virtual void init(int sample_rate) = 0; /** * Init instance state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceInit(int samplingRate) = 0; + virtual void instanceInit(int sample_rate) = 0; /** * Init instance constant state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceConstants(int samplingRate) = 0; + virtual void instanceConstants(int sample_rate) = 0; /* Init default control parameters values */ virtual void instanceResetUserInterface() = 0; @@ -149,8 +150,8 @@ class dsp { * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the number of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) * */ virtual void compute(double /*date_usec*/, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -169,16 +170,16 @@ class decorator_dsp : public dsp { public: - decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + decorator_dsp(dsp* dsp = nullptr):fDSP(dsp) {} virtual ~decorator_dsp() { delete fDSP; } virtual int getNumInputs() { return fDSP->getNumInputs(); } virtual int getNumOutputs() { return fDSP->getNumOutputs(); } virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } virtual int getSampleRate() { return fDSP->getSampleRate(); } - virtual void init(int samplingRate) { fDSP->init(samplingRate); } - virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } - virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void init(int sample_rate) { fDSP->init(sample_rate); } + virtual void instanceInit(int sample_rate) { fDSP->instanceInit(sample_rate); } + virtual void instanceConstants(int sample_rate) { fDSP->instanceConstants(sample_rate); } virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } @@ -233,6 +234,8 @@ class dsp_factory { #endif #endif +/************************** END dsp.h **************************/ +/************************** BEGIN UI.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -272,45 +275,54 @@ class dsp_factory { struct Soundfile; -class UI +template +class UIReal { - + public: - - UI() {} - - virtual ~UI() {} - + + UIReal() {} + virtual ~UIReal() {} + // -- widget's layouts - + virtual void openTabBox(const char* label) = 0; virtual void openHorizontalBox(const char* label) = 0; virtual void openVerticalBox(const char* label) = 0; virtual void closeBox() = 0; - + // -- active widgets - - virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - + + virtual void addButton(const char* label, REAL* zone) = 0; + virtual void addCheckButton(const char* label, REAL* zone) = 0; + virtual void addVerticalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addHorizontalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addNumEntry(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + // -- passive widgets - - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - + + virtual void addHorizontalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + virtual void addVerticalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + // -- soundfiles - + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; - + // -- metadata declarations + + virtual void declare(REAL* zone, const char* key, const char* val) {} +}; - virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +struct UI : public UIReal +{ + + UI() {} + virtual ~UI() {} }; #endif +/************************** END UI.h **************************/ +/************************** BEGIN meta.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -339,11 +351,14 @@ class UI struct Meta { - virtual void declare(const char* key, const char* value) = 0; virtual ~Meta() {}; + virtual void declare(const char* key, const char* value) = 0; + }; #endif +/************************** END meta.h **************************/ +/************************** BEGIN misc.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -366,15 +381,16 @@ struct Meta that work under terms of your choice, so long as this FAUST architecture section is not modified. ************************************************************************/ - + #ifndef __misc__ #define __misc__ #include #include -#include -#include #include +#include +#include +#include using std::max; @@ -382,41 +398,79 @@ using std::min; struct XXXX_Meta : std::map { - void declare(const char* key, const char* value) { (*this)[key]=value; } + void declare(const char* key, const char* value) { (*this)[key] = value; } }; struct MY_Meta : Meta, std::map { - void declare(const char* key, const char* value) { (*this)[key]=value; } + void declare(const char* key, const char* value) { (*this)[key] = value; } }; -inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } +static int lsr(int x, int n) { return int(((unsigned int)x) >> n); } -inline int int2pow2(int x) { int r = 0; while ((1<declare("filename", "lfo_tri_pos"); + m->declare("filename", "lfo_tri_pos.dsp"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); @@ -481,15 +536,13 @@ class lfo_tri_pos : public dsp { virtual int getNumInputs() { return 1; - } virtual int getNumOutputs() { return 1; - } virtual int getInputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -498,14 +551,12 @@ class lfo_tri_pos : public dsp { rate = -1; break; } - } return rate; - } virtual int getOutputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -514,44 +565,36 @@ class lfo_tri_pos : public dsp { rate = -1; break; } - } return rate; - } - static void classInit(int samplingFreq) { - + static void classInit(int sample_rate) { } - virtual void instanceConstants(int samplingFreq) { - fSamplingFreq = samplingFreq; - fConst0 = (1.0f / std::min(192000.0f, std::max(1.0f, float(fSamplingFreq)))); - + virtual void instanceConstants(int sample_rate) { + fSampleRate = sample_rate; + fConst0 = (1.0f / std::min(192000.0f, std::max(1.0f, float(fSampleRate)))); } virtual void instanceResetUserInterface() { - } virtual void instanceClear() { for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { fVec0[l0] = 0.0f; - } for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { fRec0[l1] = 0.0f; - } - } - virtual void init(int samplingFreq) { - classInit(samplingFreq); - instanceInit(samplingFreq); + virtual void init(int sample_rate) { + classInit(sample_rate); + instanceInit(sample_rate); } - virtual void instanceInit(int samplingFreq) { - instanceConstants(samplingFreq); + virtual void instanceInit(int sample_rate) { + instanceConstants(sample_rate); instanceResetUserInterface(); instanceClear(); } @@ -559,15 +602,14 @@ class lfo_tri_pos : public dsp { virtual lfo_tri_pos* clone() { return new lfo_tri_pos(); } + virtual int getSampleRate() { - return fSamplingFreq; - + return fSampleRate; } virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("lfo_tri_pos"); ui_interface->closeBox(); - } virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { @@ -575,17 +617,14 @@ class lfo_tri_pos : public dsp { FAUSTFLOAT* output0 = outputs[0]; for (int i = 0; (i < count); i = (i + 1)) { fVec0[0] = float(input0[i]); - float fTemp0 = ((fConst0 * fVec0[1]) + fRec0[1]); + float fTemp0 = (fRec0[1] + (fConst0 * fVec0[1])); fRec0[0] = (fTemp0 - std::floor(fTemp0)); output0[i] = FAUSTFLOAT((1.0f - std::fabs(((2.0f * fRec0[0]) + -1.0f)))); fVec0[1] = fVec0[0]; fRec0[1] = fRec0[0]; - } - } - }; // clang-format on #endif diff --git a/ceammc/ext/src/lib/CMakeLists.txt b/ceammc/ext/src/lib/CMakeLists.txt index f2b7d8ebf2..77000c5bc3 100644 --- a/ceammc/ext/src/lib/CMakeLists.txt +++ b/ceammc/ext/src/lib/CMakeLists.txt @@ -1,5 +1,6 @@ include_directories(${CMAKE_BINARY_DIR}) # for config.h include_directories(${PROJECT_SOURCE_DIR}/src) +include_directories(${PROJECT_SOURCE_DIR}/ceammc/extra) include_directories(${CMAKE_CURRENT_SOURCE_DIR}) include_directories(${CMAKE_CURRENT_SOURCE_DIR}/utf8rewind) @@ -87,11 +88,10 @@ set(CEAMMC_UI_SRC ceammc_cicm.h ceammc_cicm.cpp ceammc_ui.h - ceammc_dsp_ui.h ceammc_ui_object.h ceammc_ui_object.cpp - ceammc_ui_dsp_object.h - ceammc_ui_dsp_object.cpp +# ceammc_ui_dsp_object.h +# ceammc_ui_dsp_object.cpp image_detect.cpp) if(UNIX) @@ -214,5 +214,6 @@ endif() add_custom_target(ceammc_cicm_tcl_gen COMMAND ${PROJECT_SOURCE_DIR}/ceammc/scripts/filecontent_to_cxx_header.sh cicm/Sources/cicm_common.tcl - SOURCES cicm/Sources/cicm_common.tcl + COMMAND ${PROJECT_SOURCE_DIR}/ceammc/scripts/filecontent_to_cxx_header.sh cicm/Sources/cicm_common_bind.tcl + SOURCES cicm/Sources/cicm_common.tcl cicm/Sources/cicm_common_bind.tcl WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) diff --git a/ceammc/ext/src/lib/ceammc_atom.h b/ceammc/ext/src/lib/ceammc_atom.h index b57776952a..06b9f15809 100644 --- a/ceammc/ext/src/lib/ceammc_atom.h +++ b/ceammc/ext/src/lib/ceammc_atom.h @@ -20,6 +20,16 @@ #include #include +#if defined(__has_feature) +# if __has_feature(address_sanitizer) +# define CEAMMC_NO_ASAN __attribute__((no_sanitize("address"))) __attribute__((no_sanitize("undefined"))) +# else +# define CEAMMC_NO_ASAN +# endif +#else +# define CEAMMC_NO_ASAN +#endif + namespace ceammc { class Atom; @@ -56,7 +66,7 @@ class Atom : t_atom { public: Atom(); - Atom(const t_atom& a); + CEAMMC_NO_ASAN Atom(const t_atom& a); Atom(t_float v); Atom(t_symbol* s); Atom(const DataDesc& d); @@ -94,7 +104,7 @@ class Atom : t_atom { /** * @returns atom logical type */ - Type type() const; + CEAMMC_NO_ASAN Type type() const; /** * Tries to get float from atom - writes to destination only if atom type if float @@ -124,7 +134,7 @@ class Atom : t_atom { * compare atoms of same type. * @note now only floats and symbols */ - bool operator<(const Atom& a) const; + CEAMMC_NO_ASAN bool operator<(const Atom& a) const; /** * @brief outputs atom to given outlet @@ -173,8 +183,8 @@ class Atom : t_atom { */ DataId dataId() const; - DataDesc getData() const; - void setData(const DataDesc& d); + CEAMMC_NO_ASAN DataDesc getData() const; + CEAMMC_NO_ASAN void setData(const DataDesc& d); /** * @returns true if atom is a data structure @@ -191,7 +201,7 @@ class Atom : t_atom { friend bool operator!=(const Atom& a1, const Atom& a2); }; -bool operator==(const Atom& a1, const Atom& a2); +CEAMMC_NO_ASAN bool operator==(const Atom& a1, const Atom& a2); bool operator!=(const Atom& a1, const Atom& a2); std::ostream& operator<<(std::ostream& os, const Atom& a); diff --git a/ceammc/ext/src/lib/ceammc_autopreset.cpp b/ceammc/ext/src/lib/ceammc_autopreset.cpp deleted file mode 100644 index 4d8ab4c057..0000000000 --- a/ceammc/ext/src/lib/ceammc_autopreset.cpp +++ /dev/null @@ -1,47 +0,0 @@ -// -// ceammc_autopreset.cpp -// pd_ext -// -// Created by Alex Nadzharov on 18/02/17. -// -// - -#include "m_pd.h" - -#include -#include -#include -#include - -namespace ceammc { - -typedef std::pair autoPresetPair; - -std::map autoPresetCounter; -std::map autoPresetClassName; - -class autoPreset { -public: - static void addObject(t_canvas* canvas, t_class* pdclass); - - static std::string getName(t_canvas* canvas, t_class* pdclass); -}; -} - -#pragma mark - - -void autopreset_addObject(t_canvas* canvas, t_class* pdclass) -{ - ceammc::autoPreset::addObject(canvas, pdclass); -} - -t_symbol* autopreset_getname(t_canvas* canvas, t_class* pdclass) -{ - t_symbol* ret; - - std::string ret_str; - ret_str = ceammc::autoPreset::getName(canvas, pdclass); - ret = gensym(ret_str.c_str()); - - return ret; -} \ No newline at end of file diff --git a/ceammc/ext/src/lib/ceammc_autopreset.h b/ceammc/ext/src/lib/ceammc_autopreset.h deleted file mode 100644 index dfa1aaf90f..0000000000 --- a/ceammc/ext/src/lib/ceammc_autopreset.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// ceammc_autopreset.hpp -// pd_ext -// -// Created by Alex Nadzharov on 18/02/17. -// -// - -#ifndef ceammc_autopreset_h -#define ceammc_autopreset_h - -#include "m_pd.h" - -extern t_symbol* ceammc_autopreset(t_canvas* canvas, t_object* object); - -#endif /* ceammc_autopreset_hpp */ diff --git a/ceammc/ext/src/lib/ceammc_canvas.cpp b/ceammc/ext/src/lib/ceammc_canvas.cpp index 04e1d34f30..5077e44a8f 100644 --- a/ceammc/ext/src/lib/ceammc_canvas.cpp +++ b/ceammc/ext/src/lib/ceammc_canvas.cpp @@ -33,52 +33,51 @@ struct _canvasenvironment { // temp crash fix with newer version // because _glits have other field order and size -struct pd048_glist -{ - t_object gl_obj; /* header in case we're a glist */ - t_gobj *gl_list; /* the actual data */ - struct _gstub *gl_stub; /* safe pointer handler */ - int gl_valid; /* incremented when pointers might be stale */ - struct _glist *gl_owner; /* parent glist, supercanvas, or 0 if none */ - int gl_pixwidth; /* width in pixels (on parent, if a graph) */ +struct pd048_glist { + t_object gl_obj; /* header in case we're a glist */ + t_gobj* gl_list; /* the actual data */ + struct _gstub* gl_stub; /* safe pointer handler */ + int gl_valid; /* incremented when pointers might be stale */ + struct _glist* gl_owner; /* parent glist, supercanvas, or 0 if none */ + int gl_pixwidth; /* width in pixels (on parent, if a graph) */ int gl_pixheight; - t_float gl_x1; /* bounding rectangle in our own coordinates */ + t_float gl_x1; /* bounding rectangle in our own coordinates */ t_float gl_y1; t_float gl_x2; t_float gl_y2; - int gl_screenx1; /* screen coordinates when toplevel */ + int gl_screenx1; /* screen coordinates when toplevel */ int gl_screeny1; int gl_screenx2; int gl_screeny2; - int gl_xmargin; /* origin for GOP rectangle */ + int gl_xmargin; /* origin for GOP rectangle */ int gl_ymargin; - t_tick gl_xtick; /* ticks marking X values */ - int gl_nxlabels; /* number of X coordinate labels */ - t_symbol **gl_xlabel; /* ... an array to hold them */ - t_float gl_xlabely; /* ... and their Y coordinates */ - t_tick gl_ytick; /* same as above for Y ticks and labels */ + t_tick gl_xtick; /* ticks marking X values */ + int gl_nxlabels; /* number of X coordinate labels */ + t_symbol** gl_xlabel; /* ... an array to hold them */ + t_float gl_xlabely; /* ... and their Y coordinates */ + t_tick gl_ytick; /* same as above for Y ticks and labels */ int gl_nylabels; - t_symbol **gl_ylabel; + t_symbol** gl_ylabel; t_float gl_ylabelx; - t_editor *gl_editor; /* editor structure when visible */ - t_symbol *gl_name; /* symbol bound here */ - int gl_font; /* nominal font size in points, e.g., 10 */ - struct _glist *gl_next; /* link in list of toplevels */ - t_canvasenvironment *gl_env; /* root canvases and abstractions only */ - unsigned int gl_havewindow:1; /* true if we own a window */ - unsigned int gl_mapped:1; /* true if, moreover, it's "mapped" */ - unsigned int gl_dirty:1; /* (root canvas only:) patch has changed */ - unsigned int gl_loading:1; /* am now loading from file */ - unsigned int gl_willvis:1; /* make me visible after loading */ - unsigned int gl_edit:1; /* edit mode */ - unsigned int gl_isdeleting:1; /* we're inside glist_delete -- hack! */ - unsigned int gl_goprect:1; /* draw rectangle for graph-on-parent */ - unsigned int gl_isgraph:1; /* show as graph on parent */ - unsigned int gl_hidetext:1; /* hide object-name + args when doing graph on parent */ - unsigned int gl_private:1; /* private flag used in x_scalar.c */ - unsigned int gl_isclone:1; /* exists as part of a clone object */ - int gl_zoom; /* zoom factor (integer zoom-in only) */ - void *gl_privatedata; /* private data */ + t_editor* gl_editor; /* editor structure when visible */ + t_symbol* gl_name; /* symbol bound here */ + int gl_font; /* nominal font size in points, e.g., 10 */ + struct _glist* gl_next; /* link in list of toplevels */ + t_canvasenvironment* gl_env; /* root canvases and abstractions only */ + unsigned int gl_havewindow : 1; /* true if we own a window */ + unsigned int gl_mapped : 1; /* true if, moreover, it's "mapped" */ + unsigned int gl_dirty : 1; /* (root canvas only:) patch has changed */ + unsigned int gl_loading : 1; /* am now loading from file */ + unsigned int gl_willvis : 1; /* make me visible after loading */ + unsigned int gl_edit : 1; /* edit mode */ + unsigned int gl_isdeleting : 1; /* we're inside glist_delete -- hack! */ + unsigned int gl_goprect : 1; /* draw rectangle for graph-on-parent */ + unsigned int gl_isgraph : 1; /* show as graph on parent */ + unsigned int gl_hidetext : 1; /* hide object-name + args when doing graph on parent */ + unsigned int gl_private : 1; /* private flag used in x_scalar.c */ + unsigned int gl_isclone : 1; /* exists as part of a clone object */ + int gl_zoom; /* zoom factor (integer zoom-in only) */ + void* gl_privatedata; /* private data */ }; using namespace ceammc; @@ -87,8 +86,8 @@ static bool is_pd048() { int major, minor, bugfix; sys_getversion(&major, &minor, &bugfix); - static_assert(PD_MINOR_VERSION < 50, "update for minor version"); - if(major == PD_MAJOR_VERSION && minor == PD_MINOR_VERSION) + static_assert(PD_MINOR_VERSION < 51, "update for minor version"); + if (major == PD_MAJOR_VERSION && minor == PD_MINOR_VERSION) return false; return true; @@ -98,13 +97,12 @@ t_canvasenvironment* canvas_get_current_env(const t_canvas* c) { static bool fix = is_pd048(); - if(!c) + if (!c) return nullptr; - if(!fix) { + if (!fix) { return c->gl_env; - } - else { + } else { auto x = reinterpret_cast(c); return x->gl_env; } @@ -157,7 +155,7 @@ bool ceammc::canvas_info_is_abstraction(const t_canvas* c) return c ? canvas_isabstraction(const_cast(c)) : false; } -t_rect ceammc::canvas_info_rect(const t_canvas* c) +t_rect ceammc::canvas_info_rect(const _glist* c) { if (!c) return t_rect(0, 0, 0, 0); @@ -209,14 +207,165 @@ bool Canvas::connect(const BaseObject& src, size_t nout, BaseObject& dest, size_ return connect(src.owner(), nout, dest.owner(), ninl); } +std::vector Canvas::objectList() const +{ + if (!canvas_) + return {}; + + std::vector res; + + for (const t_gobj* y = canvas_->gl_list; y; y = y->g_next) { + // skip non t_object's + if (!y->g_pd->c_patchable) + continue; + + res.push_back(reinterpret_cast(y)); + } + + return res; +} + +std::vector Canvas::findObjectByClassName(t_symbol* name) +{ + std::vector res; + if (!canvas_) + return res; + + for (const t_gobj* y = canvas_->gl_list; y; y = y->g_next) { + if ((y->g_pd->c_name != name) || (!y->g_pd->c_patchable)) + continue; + + res.push_back(reinterpret_cast(y)); + } + + return res; +} + +t_gobj* Canvas::findIf(std::function pred) +{ + if (!canvas_) + return nullptr; + + for (t_gobj* y = canvas_->gl_list; y; y = y->g_next) { + if (pred(y)) + return y; + } + + return nullptr; +} + +t_object* Canvas::findIf(std::function pred) +{ + if (!canvas_) + return nullptr; + + for (t_gobj* y = canvas_->gl_list; y; y = y->g_next) { + auto x = reinterpret_cast(y); + + if (y->g_pd->c_patchable && pred(x)) + return x; + } + + return nullptr; +} + +void Canvas::addExternal(pd::External& ext) +{ + glist_add(canvas_, &ext.object()->te_g); + ext.setParent(canvas_); +} + +std::shared_ptr Canvas::createObject(const char* name, const AtomList& args) +{ + std::shared_ptr ptr; + if (!canvas_) + return ptr; + + ptr.reset(new pd::External(name, args)); + return ptr; +} + +void Canvas::createPdObject(int x, int y, t_symbol* name, const AtomList& args) +{ + if (!canvas_) + return; + + static t_symbol* SYM_OBJ = gensym("obj"); + + AtomList xargs({ t_float(x), t_float(y) }); + xargs.reserve(args.size() + 3); + xargs.append(Atom(name)); + xargs.append(args); + + pd_typedmess(&canvas_->gl_obj.te_g.g_pd, SYM_OBJ, xargs.size(), xargs.toPdData()); +} + +_glist* Canvas::createAbstraction(int x, int y, t_symbol* name, const AtomList& args) +{ + static t_symbol* SYM_CANVAS = gensym("canvas"); + + if (!canvas_) + return nullptr; + + createPdObject(x, y, name, args); + + t_gobj* z; + for (z = canvas_->gl_list; z->g_next; z = z->g_next) { + // find last created object + } + + // load abstraction + if (z && z->g_pd->c_name == SYM_CANVAS) + return reinterpret_cast(z); + else { + LIB_ERR << "can't create abstraction: " << name << ' ' << args; + return nullptr; + } +} + _glist* Canvas::owner() { - return canvas_->gl_owner; + return canvas_ ? canvas_->gl_owner : nullptr; +} + +void Canvas::loadBang() +{ + if (canvas_) + canvas_loadbang(canvas_); +} + +void Canvas::show() +{ + if (canvas_) + canvas_vis(canvas_, 1); +} + +void Canvas::hide() +{ + if (canvas_) + canvas_vis(canvas_, 0); +} + +void Canvas::free() +{ + if (canvas_) { + canvas_free(canvas_); + canvas_ = nullptr; + } +} + +void Canvas::setupDsp() +{ + static t_symbol* SYM_DSP = gensym("dsp"); + + if (canvas_) { + mess0(&canvas_->gl_obj.te_g.g_pd, SYM_DSP); + } } t_symbol* Canvas::name() { - return canvas_->gl_name; + return canvas_ ? canvas_->gl_name : &s_; } void Canvas::setName(const char* str) @@ -234,9 +383,10 @@ _glist* Canvas::current() return canvas_getcurrent(); } -void Canvas::setCurrent(_glist* c) +void Canvas::setCurrent(t_canvas* c) { - canvas_setcurrent(c); + if (c) + canvas_setcurrent(c); } AtomList ceammc::canvas_info_args(const _glist* c) diff --git a/ceammc/ext/src/lib/ceammc_canvas.h b/ceammc/ext/src/lib/ceammc_canvas.h index b2e1ca356c..6e2b8955c6 100644 --- a/ceammc/ext/src/lib/ceammc_canvas.h +++ b/ceammc/ext/src/lib/ceammc_canvas.h @@ -16,9 +16,11 @@ #include "ceammc_array.h" #include "ceammc_atomlist.h" +#include "ceammc_pd.h" -#include +#include #include +#include #include struct _glist; @@ -28,6 +30,10 @@ typedef struct _text t_object; namespace ceammc { +namespace pd { + class External; +} + /** * Checks if given canvas is top level (window) * @param c - pointer to canvas @@ -86,14 +92,12 @@ struct t_rect { * Returns canvas rect, for root canvas - windows, for others - GOP * @param c - pointer to canvas */ -t_rect canvas_info_rect(const t_canvas* c); +t_rect canvas_info_rect(const _glist* c); class BaseObject; -typedef boost::shared_ptr ArrayPtr; -typedef std::map<_symbol*, ArrayPtr> ArrayMap; +typedef std::shared_ptr ArrayPtr; class Canvas { - ArrayMap array_list_; _glist* canvas_; public: @@ -104,9 +108,33 @@ class Canvas { static bool connect(t_object* src, size_t nout, t_object* dest, size_t ninl); static bool connect(const BaseObject& src, size_t nout, BaseObject& dest, size_t ninl); + std::vector objectList() const; + std::vector findObjectByClassName(t_symbol* name); + t_gobj* findIf(std::function pred); + t_object* findIf(std::function pred); + + void addExternal(pd::External& ext); + std::shared_ptr createObject(const char* name, const AtomList& args); + + void createPdObject(int x, int y, t_symbol* name, const AtomList& args = AtomList()); + _glist* createAbstraction(int x, int y, t_symbol* name, const AtomList& args = AtomList()); + + void loadBang(); + void show(); + void hide(); + void free(); + void setupDsp(); + + operator bool() { return canvas_ != nullptr; } + public: _glist* pd_canvas() { return canvas_; } _glist* owner(); + + /** + * canvas name + * @return canvas name or &s_ on null canvas + */ t_symbol* name(); void setName(const char* str); std::string parentName() const; diff --git a/ceammc/ext/src/lib/ceammc_cicm.cpp b/ceammc/ext/src/lib/ceammc_cicm.cpp index 880cc64cc0..9db9a98012 100644 --- a/ceammc/ext/src/lib/ceammc_cicm.cpp +++ b/ceammc/ext/src/lib/ceammc_cicm.cpp @@ -1,5 +1,7 @@ #include "ceammc_cicm.h" +#include + namespace ceammc { static const char* SYM_DECORATION_NONE = "roman"; @@ -325,6 +327,16 @@ void UIPainter::stroke() egraphics_stroke(layer_); } +void UIPainter::strokePreserve() +{ + egraphics_stroke_preserve(layer_); +} + +void UIPainter::closePath() +{ + egraphics_close_path(layer_); +} + void UIPainter::fillLayer(const t_rgba& color) { float w = layer_->e_rect.width; @@ -355,6 +367,11 @@ void UIPainter::setDashStyle(t_dashstyle style) egraphics_set_line_dashstyle(layer_, style); } +void UIPainter::setSmooth(t_smooth smooth) +{ + egraphics_set_line_smooth(layer_, smooth); +} + t_elayer* UIPainter::layer() { return layer_; @@ -368,36 +385,89 @@ void UIPainter::raiseOver(UIPainter& painter) egraphics_raise(layer_, painter.layer()); } -UIPopupMenu::UIPopupMenu(t_eobj* x, const char* name, const t_pt& pos) +void UIPainter::rotate(float angle) +{ + egraphics_rotate(layer_, angle); +} + +void UIPainter::setMatrix(const t_matrix& mtx) +{ + egraphics_set_matrix(layer_, &mtx); +} + +UIPopupMenu::UIPopupMenu(t_eobj* x, + const PopupMenuCallbacks& items, + const t_pt& absPos, + const t_pt& relPos) : menu_(nullptr) - , pos_(pos) + , abs_pos_(absPos) + , rel_pos_(relPos) + , menu_items_(items) { - menu_ = epopupmenu_create(x, gensym(name)); + menu_ = epopupmenu_create(x, gensym(items.name().c_str())); } UIPopupMenu::~UIPopupMenu() { int cnt = 0; - for (MenuEntry& m : menu_items_) { - if (m.first.empty()) + for (auto& m : menu_items_.items()) { + if (std::get<0>(m).empty()) epopupmenu_addseparator(menu_); - else - epopupmenu_additem(menu_, cnt++, m.first.c_str(), m.second); + else { + auto it = std::find(disabled_items_.begin(), disabled_items_.end(), std::get<0>(m)); + epopupmenu_additem(menu_, cnt, std::get<0>(m).c_str(), it == disabled_items_.end(), rel_pos_); + } + + // counter increment + cnt++; } - epopupmenu_popup(menu_, pos_); + epopupmenu_popup(menu_, abs_pos_); free(menu_); } -void UIPopupMenu::addSeparator() +void UIPopupMenu::disable(const std::string& name) +{ + disabled_items_.push_back(name); +} + +void UIPopupMenu::disable(const std::vector& names) +{ + disabled_items_.insert(disabled_items_.end(), names.begin(), names.end()); +} + +PopupMenuCallbacks::PopupMenuCallbacks(const std::string& name, + std::initializer_list args) + : name_(name) + , items_(args) +{ +} + +void PopupMenuCallbacks::addSeparator() +{ + items_.emplace_back("", MenuEntryFn()); +} + +void PopupMenuCallbacks::addItem(const std::string& name, PopupMenuCallbacks::MenuEntryFn fn) { - menu_items_.emplace_back("", false); + items_.emplace_back(name, fn); } -void UIPopupMenu::addItem(const std::string& name, bool enabled) +bool PopupMenuCallbacks::process(t_symbol* name, size_t idx, const t_pt& pt) { - menu_items_.emplace_back(name, enabled); + if (name_ != name->s_name) + return false; + + if (idx >= items_.size()) + return false; + + if (!std::get<1>(items_[idx])) + return false; + + auto fn = std::get<1>(items_[idx]); + fn(pt); + return true; } } diff --git a/ceammc/ext/src/lib/ceammc_cicm.h b/ceammc/ext/src/lib/ceammc_cicm.h index d62acf7b49..609e4a5b91 100644 --- a/ceammc/ext/src/lib/ceammc_cicm.h +++ b/ceammc/ext/src/lib/ceammc_cicm.h @@ -3,8 +3,11 @@ #include "cicm/Sources/cicm_wrapper.h" +#include +#include #include #include +#include #include namespace ceammc { @@ -126,6 +129,8 @@ class UIPainter { void fill(); void fillPreserve(); void stroke(); + void strokePreserve(); + void closePath(); void fillLayer(const t_rgba& color); @@ -133,9 +138,13 @@ class UIPainter { void setLineWidth(float w); void setColor(const t_rgba& c); void setDashStyle(t_dashstyle style); + void setSmooth(t_smooth smooth); t_elayer* layer(); void raiseOver(UIPainter& painter); + + void rotate(float angle); + void setMatrix(const t_matrix& mtx); }; class UILayer { @@ -150,18 +159,51 @@ class UILayer { bool contains_point(const t_rect& r, const t_pt& pt); +class PopupMenuCallbacks { +public: + typedef std::function MenuEntryFn; + typedef std::tuple Entry; + typedef std::vector MenuItems; + +private: + MenuItems items_; + std::string name_; + +public: + PopupMenuCallbacks(const std::string& name, std::initializer_list args = {}); + MenuItems& items() { return items_; } + const MenuItems& items() const { return items_; } + const std::string& name() const { return name_; } + + void addSeparator(); + void addItem(const std::string& name, MenuEntryFn fn); + + bool process(t_symbol* name, size_t idx, const t_pt& pt); + +public: + static Entry sep() + { + return { "", [](const t_pt&) {} }; + } +}; + class UIPopupMenu { t_epopup* menu_; - t_pt pos_; - typedef std::pair MenuEntry; - std::vector menu_items_; + t_pt abs_pos_; + t_pt rel_pos_; + PopupMenuCallbacks menu_items_; + std::vector disabled_items_; public: - UIPopupMenu(t_eobj* x, const char* name, const t_pt& pos); + UIPopupMenu(t_eobj* x, + const PopupMenuCallbacks& items, + const t_pt& absPos, + const t_pt& relPos); + ~UIPopupMenu(); - void addSeparator(); - void addItem(const std::string& name, bool enabled = true); + void disable(const std::string& name); + void disable(const std::vector& names); }; } diff --git a/ceammc/ext/src/lib/ceammc_convert.cpp b/ceammc/ext/src/lib/ceammc_convert.cpp index cefe9222f7..7082bb8205 100644 --- a/ceammc/ext/src/lib/ceammc_convert.cpp +++ b/ceammc/ext/src/lib/ceammc_convert.cpp @@ -13,8 +13,6 @@ *****************************************************************************/ #include "ceammc_convert.h" -#define _USE_MATH_DEFINES - #include #include #include diff --git a/ceammc/ext/src/lib/ceammc_convert.h b/ceammc/ext/src/lib/ceammc_convert.h index 4bad81d71d..287046a5ce 100644 --- a/ceammc/ext/src/lib/ceammc_convert.h +++ b/ceammc/ext/src/lib/ceammc_convert.h @@ -14,6 +14,10 @@ #ifndef CEAMMC_CONVERT_H #define CEAMMC_CONVERT_H +#ifndef _USE_MATH_DEFINES +#define _USE_MATH_DEFINES +#endif + #include #include #include @@ -36,6 +40,19 @@ T clip_any(T v, T v0, T v1) return clip(v, r.first, r.second); } +template +T clip(T v) +{ + static_assert(Min < Max, "Min should be less then Max"); + return std::min(T(Max), std::max(v, T(Min))); +} + +template +T clip01(T v) +{ + return clip(v); +} + /** * Wraps input values to specified range: * -3 -2 -1 0 1 2 3 @@ -110,6 +127,26 @@ T relativeIndex(T v, typename std::make_unsigned::type n) return (v < 0) ? v + N : v; } +/** + * wrap x -> [0,max) + */ +template +T wrapFloatMax(T x, T max) +{ + static_assert(std::is_floating_point(), "Floating point type expected"); + /* integer math: `(max + x % max) % max` */ + return std::fmod(max + std::fmod(x, max), max); +} + +/** + * wrap x -> [min,max) + */ +template +T wrapFloatMinMax(T x, T min, T max) +{ + return min + wrapFloatMax(x - min, max - min); +} + namespace convert { namespace time { /** @@ -126,6 +163,13 @@ namespace convert { return (v - x0) / (x1 - x0) * (y1 - y0) + y0; } + template + T lin2lin(T v, T y0, T y1) + { + static_assert(x0 != x1, "Zero input range"); + return (v - T(x0)) / (T(x1) - T(x0)) * (y1 - y0) + y0; + } + template T lin2lin_clip(T v, T x0, T x1, T y0, T y1) { @@ -133,6 +177,13 @@ namespace convert { return clip(lin2lin(v, x0, x1, y0, y1), yr.first, yr.second); } + template + T lin2lin_clip(T v, T y0, T y1) + { + static_assert(x0 != x1, "Zero input range"); + return (clip(v) - T(x0)) / (T(x1) - T(x0)) * (y1 - y0) + y0; + } + float lin2exp(float x, float x0, float x1, float y0, float y1); double lin2exp(double x, double x0, double x1, double y0, double y1); float exp2lin(float x, float x0, float x1, float y0, float y1); @@ -162,6 +213,81 @@ namespace convert { */ float freq2midi(float freq, float a_freq = 440.f); double freq2midi(double freq, double a_freq = 440); + + /** + * x -> [0, 2pi) + */ + template + T phase2rad(T x) + { + static_assert(std::is_floating_point(), "Float type expected"); + return wrapFloatMax(x, 1) * (2 * M_PI); + } + + /** + * x -> [0, 360) + */ + template + T phase2degree(T x) + { + static_assert(std::is_floating_point(), "Float type expected"); + return wrapFloatMax(x * 360, 360); + } + + /** + * x -> [0, 1) + */ + template + T degree2phase(T x) + { + static_assert(std::is_floating_point(), "Float type expected"); + return wrapFloatMax(x, 360) / 360; + } + + /** + * x -> [0, 2pi) + */ + template + T degree2rad(T x) + { + static_assert(std::is_floating_point(), "Float type expected"); + return (wrapFloatMax(x, 360) / 360) * (2 * M_PI); + } + + /** + * x -> [0, 1) + */ + template + T rad2phase(T x) + { + static_assert(std::is_floating_point(), "Float type expected"); + return wrapFloatMax(x / (2 * M_PI), 1); + } + + /** + * x -> [0, 360) + */ + template + T rad2degree(T x) + { + static_assert(std::is_floating_point(), "Float type expected"); + return wrapFloatMax(x * 360 / (2 * M_PI), 360); + } + + template + std::pair cartesian2polar(T x, T y) + { + static_assert(std::is_floating_point(), "Float type expected"); + return { std::hypot(x, y), std::atan2(y, x) }; + } + + template + std::pair polar2cartesian(T r, T theta) + { + static_assert(std::is_floating_point(), "Float type expected"); + return { r * std::cos(theta), r * std::sin(theta) }; + } + } } diff --git a/ceammc/ext/src/lib/ceammc_dataatom.h b/ceammc/ext/src/lib/ceammc_dataatom.h index b626863d0d..e21afdb64f 100644 --- a/ceammc/ext/src/lib/ceammc_dataatom.h +++ b/ceammc/ext/src/lib/ceammc_dataatom.h @@ -81,7 +81,7 @@ const T* DataAtom::as() const return data_->as(); } -size_t hash_value(const DataAtom& d); +CEAMMC_NO_ASAN size_t hash_value(const DataAtom& d); } #endif // CEAMMC_DATAATOM_H diff --git a/ceammc/ext/src/lib/ceammc_dsp_ui.h b/ceammc/ext/src/lib/ceammc_dsp_ui.h deleted file mode 100644 index e5d34e3e99..0000000000 --- a/ceammc/ext/src/lib/ceammc_dsp_ui.h +++ /dev/null @@ -1,817 +0,0 @@ -#ifndef CEAMMC_DSP_UI_H -#define CEAMMC_DSP_UI_H - -#include "ceammc_atomlist.h" -#include "ceammc_cicm.h" -#include "ceammc_externals.h" -#include "ceammc_ui.h" - -#include -#include -#include - -namespace ceammc { - -#define UI_DSP_METHOD_PTR(m) reinterpret_cast(&UIDspFactory::m) - -template -class UIDspFactory { - std::string name_; - -public: - typedef void (UI::*bangMethodPtr)(); - typedef void (UI::*floatMethodPtr)(t_float); - typedef void (UI::*listMethodPtr)(const AtomList&); - typedef float (UI::*propFloatGet)() const; - typedef void (UI::*propFloatSet)(float); - typedef AtomList (UI::*propListGet)() const; - typedef void (UI::*propListSet)(const AtomList&); - typedef std::pair propertyFloatAccess; - typedef std::pair propertyListAccess; - - typedef std::unordered_map BangMethodMap; - typedef std::unordered_map FloatMethodMap; - typedef std::unordered_map ListMethodMap; - typedef std::unordered_map FloatPropertyMap; - typedef std::unordered_map ListPropertyMap; - -public: - UIDspFactory(const char* name, long fl = EBOX_GROWINDI, int pd_flags = 0) - : name_(name) - { - flags = fl; - if (pd_class) { - pd_error(0, "class already initialized: %s", name); - return; - } - - pd_class = eclass_new(name_.c_str(), - UI_DSP_METHOD_PTR(alloc), - UI_DSP_METHOD_PTR(free), - sizeof(UI), pd_flags, A_GIMME, 0); - - if (!pd_class) { - pd_error(0, "can't allocate class: %s", name); - return; - } - - eclass_dspinit(pd_class); - eclass_guiinit(pd_class, flags); - setupMethods(); - setupAttributes(); - register_ui_external(&pd_class->c_class); - } - - ~UIDspFactory() - { - eclass_attr_sort(pd_class); - eclass_register(CLASS_BOX, pd_class); - } - - static UI* alloc(t_symbol* s, int argc, t_atom* argv) - { - void* mem = eobj_new(pd_class); - t_binbuf* d = binbuf_via_atoms(argc, argv); - - if (mem && d) { - UI* x = new (mem) UI(); - - ebox_new(x->asEBox(), 0 | flags); - x->dspInit(); - ebox_attrprocess_viabinbuf(x, d); - ebox_ready((t_ebox*)x); - binbuf_free(d); - - x->init(s, AtomList(argc, argv), use_presets); - return x; - } - - return 0; - } - - static void free(UI* x) - { - if (x) { - x->~UI(); - ebox_free(x->asEBox()); - } - } - - void setupMethods() - { - // clang-format off - eclass_addmethod(pd_class, UI_DSP_METHOD_PTR(dsp), "dsp", A_NULL, 0); - eclass_addmethod(pd_class, UI_DSP_METHOD_PTR(paint), "paint", A_GIMME, 0); - eclass_addmethod(pd_class, UI_DSP_METHOD_PTR(notify), "notify", A_GIMME, 0); - eclass_addmethod(pd_class, UI_DSP_METHOD_PTR(okSize), "oksize", A_GIMME, 0); - eclass_addmethod(pd_class, UI_DSP_METHOD_PTR(onPopup), "popup", A_GIMME, 0); - eclass_addmethod(pd_class, UI_DSP_METHOD_PTR(setDrawParams), "getdrawparams", A_NULL, 0); - // clang-format on - } - - void setupAttributes() - { - CLASS_ATTR_INVISIBLE(pd_class, "fontweight", 1); - CLASS_ATTR_INVISIBLE(pd_class, "fontslant", 1); - - // clang-format off - // background / border color - addProperty(PROP_BACKGROUND_COLOR, - _("Background Color"), - DEFAULT_BACKGROUND_COLOR, - &UI::prop_color_background); - - addProperty(PROP_BORDER_COLOR, - _("Border Color"), - DEFAULT_BORDER_COLOR, - &UI::prop_color_border); - - addProperty(PROP_LABEL_COLOR, - _("Label Color"), - DEFAULT_LABEL_COLOR, - &UI::prop_color_label); - - // default - CLASS_ATTR_DEFAULT (pd_class, "size", 0, "45. 15."); - // clang-format on - } - - void readWrite() - { - // clang-format off - eclass_addmethod(pd_class, UI_METHOD_PTR(write), "write", A_GIMME, 0); - eclass_addmethod(pd_class, UI_METHOD_PTR(read), "read", A_GIMME, 0); - // clang-format on - } - - void usePresets() - { - // clang-format off - - UIDspFactory::use_presets = true; - - eclass_addmethod(pd_class, UI_DSP_METHOD_PTR(loadPreset), "load", A_GIMME, 0); - eclass_addmethod(pd_class, UI_DSP_METHOD_PTR(storePreset), "store", A_GIMME, 0); - eclass_addmethod(pd_class, UI_DSP_METHOD_PTR(clearPreset), "clear", A_GIMME, 0); - - CLASS_ATTR_SYMBOL (pd_class, PROP_PRESET_NAME, 0, t_ebox, b_objpreset_id); - CLASS_ATTR_DEFAULT (pd_class, PROP_PRESET_NAME, 0, "(null)"); - CLASS_ATTR_SAVE (pd_class, PROP_PRESET_NAME, 0); - CLASS_ATTR_CATEGORY (pd_class, PROP_PRESET_NAME, 0, _("Basic")); - CLASS_ATTR_LABEL (pd_class, PROP_PRESET_NAME, 0, _("Preset Name")); - CLASS_ATTR_ACCESSORS(pd_class, PROP_PRESET_NAME, NULL, ebox_set_presetid); - - // clang-format on - } - - void hideLabel() - { - hideProperty("label"); - hideProperty("label_color"); - hideProperty("label_inner"); - hideProperty("label_side"); - hideProperty("label_align"); - hideProperty("label_valign"); - hideProperty("label_margins"); - - hideFontProps(); - } - - void hideLabelInner() - { - hideProperty("label_inner"); - setPropertyDefaultValue("label_inner", "outer"); - } - - void hideFontProps() - { - CLASS_ATTR_INVISIBLE(pd_class, "fontname", 1); - CLASS_ATTR_INVISIBLE(pd_class, "fontsize", 1); - } - - void useMouseEvents(int events) - { - if (events & UI_MOUSE_DOWN) - eclass_addmethod(pd_class, UI_DSP_METHOD_PTR(mouseDown), "mousedown", A_GIMME, 0); - - if (events & UI_MOUSE_UP) - eclass_addmethod(pd_class, UI_DSP_METHOD_PTR(mouseUp), "mouseup", A_GIMME, 0); - - if (events & UI_MOUSE_DRAG) - eclass_addmethod(pd_class, UI_DSP_METHOD_PTR(mouseDrag), "mousedrag", A_GIMME, 0); - - if (events & UI_MOUSE_ENTER) - eclass_addmethod(pd_class, UI_DSP_METHOD_PTR(mouseEnter), "mouseenter", A_GIMME, 0); - - if (events & UI_MOUSE_LEAVE) - eclass_addmethod(pd_class, UI_DSP_METHOD_PTR(mouseLeave), "mouseleave", A_GIMME, 0); - - if (events & UI_MOUSE_MOVE) - eclass_addmethod(pd_class, UI_DSP_METHOD_PTR(mouseMove), "mousemove", A_GIMME, 0); - - if (events & UI_MOUSE_DBL_CLICK) - eclass_addmethod(pd_class, UI_DSP_METHOD_PTR(dblClick), "dblclick", A_GIMME, 0); - - if (events & UI_MOUSE_WHEEL) - eclass_addmethod(pd_class, UI_DSP_METHOD_PTR(mouseWheel), "mousewheel", A_GIMME, 0); - } - - void useKeys() - { - eclass_addmethod(pd_class, UI_DSP_METHOD_PTR(key), "key", A_GIMME, 0); - } - - void useBang() - { - eclass_addmethod(pd_class, UI_DSP_METHOD_PTR(onBang), "bang", A_GIMME, 0); - } - - void useFloat() - { - eclass_addmethod(pd_class, UI_DSP_METHOD_PTR(onFloat), "float", A_FLOAT, 0); - } - - void useSymbol() - { - eclass_addmethod(pd_class, UI_DSP_METHOD_PTR(onSymbol), "symbol", A_SYMBOL, 0); - } - - void useList() - { - eclass_addmethod(pd_class, UI_DSP_METHOD_PTR(onList), "list", A_GIMME, 0); - } - - void useAny() - { - eclass_addmethod(pd_class, UI_DSP_METHOD_PTR(onAny), "anything", A_GIMME, 0); - } - - void useData() - { - eclass_addmethod(pd_class, UI_DSP_METHOD_PTR(onData), "list", A_GIMME, 0); - } - - void addMethod(const char* name, listMethodPtr m) - { - addMethod(gensym(name), m); - } - - void addMethod(t_symbol* name, listMethodPtr m) - { - list_map[name] = m; - eclass_addmethod(pd_class, reinterpret_cast(customMethodList), name->s_name, A_GIMME, 0); - } - - void addMethod(const char* name, floatMethodPtr m) - { - addMethod(gensym(name), m); - } - - void addMethod(t_symbol* name, floatMethodPtr m) - { - float_map[name] = m; - eclass_addmethod(pd_class, reinterpret_cast(customMethodFloat), name->s_name, A_GIMME, 0); - } - - void addMethod(const char* name, bangMethodPtr m) - { - addMethod(gensym(name), m); - } - - void addMethod(t_symbol* name, bangMethodPtr m) - { - bang_map[name] = m; - eclass_addmethod(pd_class, reinterpret_cast(customMethodBang), name->s_name, A_GIMME, 0); - } - - void addProperty(const char* name, const char* label, float def, float UI::*m, const char* category = "Misc") - { - char buf[32]; - snprintf(buf, 30, "%g", def); - - eclass_new_attr_typed(pd_class, name, "float", 1, 0, 0, offset(m)); - eclass_attr_label(pd_class, name, 0, label); - eclass_attr_save(pd_class, name, 0); - eclass_attr_paint(pd_class, name, 0); - eclass_attr_default(pd_class, name, 0, buf); - eclass_attr_style(pd_class, name, 0, "number"); - eclass_attr_category(pd_class, name, 0, category); - } - - void addIntProperty(const char* name, const char* label, int def, int UI::*m, const char* category = "Misc") - { - char buf[32]; - snprintf(buf, 30, "%d", def); - - eclass_new_attr_typed(pd_class, name, "int", 1, 0, 0, offset(m)); - eclass_attr_label(pd_class, name, 0, label); - eclass_attr_save(pd_class, name, 0); - eclass_attr_paint(pd_class, name, 0); - eclass_attr_default(pd_class, name, 0, buf); - eclass_attr_style(pd_class, name, 0, "number"); - eclass_attr_category(pd_class, name, 0, category); - } - - void addBoolProperty(const char* name, const char* label, bool def, int UI::*m, const char* category = "Misc") - { - eclass_new_attr_typed(pd_class, name, "int", 1, 0, 0, offset(m)); - eclass_attr_label(pd_class, name, 0, label); - eclass_attr_save(pd_class, name, 0); - eclass_attr_paint(pd_class, name, 0); - eclass_attr_default(pd_class, name, 0, def ? "1" : "0"); - eclass_attr_style(pd_class, name, 0, "onoff"); - eclass_attr_category(pd_class, name, 0, category); - } - - void addProperty(const char* name, const char* label, const char* def, t_rgba UI::*m) - { - eclass_new_attr_typed(pd_class, name, "float", 4, 0, 0, offset(m)); - eclass_attr_label(pd_class, name, 0, label); - eclass_attr_save(pd_class, name, 0); - eclass_attr_paint(pd_class, name, 0); - eclass_attr_default(pd_class, name, 0, def); - eclass_attr_style(pd_class, name, 0, "color"); - eclass_attr_category(pd_class, name, 0, "Colors"); - } - - void setPropertyMin(const char* name, float v) - { - eclass_attr_filter_min(pd_class, name, v); - } - - void setPropertyMax(const char* name, float v) - { - eclass_attr_filter_max(pd_class, name, v); - } - - void setPropertyRange(const char* name, float min, float max) - { - setPropertyMin(name, min); - setPropertyMax(name, max); - } - - void setPropertyDefaultValue(const char* name, const char* def) - { - eclass_attr_default(pd_class, name, 0, def); - } - - void hideProperty(const char* name) - { - eclass_attr_invisible(pd_class, name, 0); - } - - void showProperty(const char* name) - { - eclass_attr_visible(pd_class, name, 0); - } - - void setDefaultSize(int w, int h) - { - char buf[32]; - snprintf(buf, 30, "%d. %d.", w, h); - - CLASS_ATTR_DEFAULT(pd_class, "size", 0, buf); - } - - void addProperty(const char* name, - float (UI::*getter)() const, - void (UI::*setter)(float)) - { - eclass_new_attr_typed(pd_class, name, "float", 1, 0, 0, 0); - eclass_attr_invisible(pd_class, name, 0); - setPropertyAccessor(name, getter, setter); - } - - void addProperty(const char* name, - AtomList (UI::*getter)() const, - void (UI::*setter)(const AtomList&)) - { - eclass_new_attr_typed(pd_class, name, "atom", 1, 0, 0, 0); - eclass_attr_invisible(pd_class, name, 0); - setPropertyAccessor(name, getter, setter); - } - - void addProperty(const char* name, const char* label, - const char* def, t_symbol* UI::*m, - const char* items, const char* cat = "Misc") - { - eclass_new_attr_typed(pd_class, name, "symbol", 1, 0, 0, offset(m)); - eclass_attr_label(pd_class, name, 0, label); - eclass_attr_save(pd_class, name, 0); - eclass_attr_paint(pd_class, name, 0); - eclass_attr_default(pd_class, name, 0, def); - eclass_attr_style(pd_class, name, 0, "menu"); - eclass_attr_category(pd_class, name, 0, cat); - eclass_attr_itemlist(pd_class, name, 0, items); - } - - void addVirtualProperty(const char* name, const char* label, const char* def, - AtomList (UI::*getter)() const, void (UI::*setter)(const AtomList&)) - { - eclass_new_attr_typed(pd_class, name, "symbol", 1, 0, 0, 0); - eclass_attr_label(pd_class, name, 0, label); - eclass_attr_save(pd_class, name, 0); - eclass_attr_paint(pd_class, name, 0); - eclass_attr_default(pd_class, name, 0, def); - eclass_attr_accessor(pd_class, name, (t_err_method)listPropGetter, (t_err_method)listPropSetter); - prop_list_map[gensym(name)] = std::make_pair(getter, setter); - } - - void setPropertyAccessor(const char* name, float (UI::*getter)() const, void (UI::*setter)(float)) - { - eclass_attr_accessor(pd_class, name, (t_err_method)floatPropGetter, (t_err_method)floatPropSetter); - prop_float_map[gensym(name)] = std::make_pair(getter, setter); - } - - void setPropertyAccessor(const char* name, AtomList (UI::*getter)() const, void (UI::*setter)(const AtomList&)) - { - eclass_attr_accessor(pd_class, name, (t_err_method)listPropGetter, (t_err_method)listPropSetter); - prop_list_map[gensym(name)] = std::make_pair(getter, setter); - } - - void setPropertyRedirect(const char* name) - { - eclass_attr_redirect(pd_class, name, (t_gotfn)listPropRedirector); - } - - void addAlias(const char* name) - { - class_addcreator(reinterpret_cast(alloc), gensym(name), A_GIMME, A_NULL); - } - -public: - static void dsp(UI* z, t_object* dsp, - short* count, double samplerate, long maxvectorsize, long flags) - { - z->dspOn(samplerate, maxvectorsize); - object_method(dsp, gensym("dsp_add"), z, UI_DSP_METHOD_PTR(dspProcess), 0, NULL); - } - - static void dspProcess(UI* z, t_object* dsp, - t_sample** ins, long n_ins, - t_sample** outs, long n_outs, - long sampleframes, long flags, void* up) - { - z->dspProcess(ins, n_ins, outs, n_outs, sampleframes); - } - - static void paint(UI* z) - { - z->paint(); - } - - template - static size_t offset(T UI::*m) - { - static UI ui; - - char* v1 = (char*)static_cast(&(ui.*m)); - char* v0 = (char*)static_cast(&ui); - return v1 - v0; - } - - static void mouseMove(UI* z, t_object* view, t_pt pt, long modifiers) - { - z->onMouseMove(view, pt, modifiers); - } - - static void mouseDown(UI* z, t_object* view, t_pt pt, t_pt abs_pt, long modifiers) - { - z->onMouseDown(view, pt, abs_pt, modifiers); - } - - static void mouseUp(UI* z, t_object* view, t_pt pt, long modifiers) - { - z->onMouseUp(view, pt, modifiers); - } - - static void mouseDrag(UI* z, t_object* view, t_pt pt, long modifiers) - { - z->onMouseDrag(view, pt, modifiers); - } - - static void mouseLeave(UI* z, t_object* view, t_pt pt, long modifiers) - { - z->onMouseLeave(view, pt, modifiers); - } - - static void mouseEnter(UI* z, t_object* view, t_pt pt, long modifiers) - { - z->onMouseEnter(view, pt, modifiers); - } - - static void mouseWheel(UI* z, t_object* view, t_pt pt, long modifiers, double delta) - { - z->onMouseWheel(view, pt, modifiers, delta); - } - - static void dblClick(UI* z, t_object* view, t_pt pt, long modifiers) - { - z->onDblClick(view, pt, modifiers); - } - - static void key(UI* z, t_symbol*, int k, t_atom*) - { - z->onKey(k); - } - - static void notify(UI* z, t_symbol* prop_name, t_symbol* action_name) - { - if (action_name == s_attr_modified) { - if (use_presets && prop_name == gensym(PROP_PRESET_NAME)) - z->handlePresetNameChange(); - - z->onPropChange(prop_name); - } - } - - static void write(UI* z, const char* fname) - { - z->write(fname); - } - - static void read(UI* z, const char* fname) - { - z->read(fname); - } - - static void okSize(UI* z, ::t_rect* newrect) - { - z->okSize(newrect); - } - - static void onPopup(UI* z, t_symbol* menu_name, long itemIdx) - { - z->onPopup(menu_name, itemIdx); - } - - static void onBang(UI* z) - { - z->onBang(); - } - - static void onFloat(UI* z, t_float f) - { - z->onFloat(f); - } - - static void onSymbol(UI* z, t_symbol* s) - { - z->onSymbol(s); - } - - static void onList(UI* z, t_symbol* s, int argc, t_atom* argv) - { - z->onList(AtomList(argc, argv)); - } - - static void onAny(UI* z, t_symbol* s, int argc, t_atom* argv) - { - z->onAny(s, AtomList(argc, argv)); - } - - static int checkPresetIndex(UI* z, int argc, t_atom* argv) - { - int idx = 0; - if (argc > 0) { - if (argv->a_type != A_FLOAT) { - pd_error(z->asPd(), "[%s] invalid preset index", z->name()->s_name); - return -1; - } - - idx = atom_getint(argv); - } - - return idx; - } - - static void loadPreset(UI* z, t_symbol*, int argc, t_atom* argv) - { - int idx = checkPresetIndex(z, argc, argv); - - if (idx < 0) - return; - - z->loadPreset(idx); - } - - static void storePreset(UI* z, t_symbol*, int argc, t_atom* argv) - { - int idx = checkPresetIndex(z, argc, argv); - - if (idx < 0) - return; - - z->storePreset(idx); - } - - static void clearPreset(UI* z, t_symbol*, int argc, t_atom* argv) - { - int idx = checkPresetIndex(z, argc, argv); - - if (idx < 0) - return; - - z->clearPreset(idx); - } - - static void customMethodList(UI* z, t_symbol* s, int argc, t_atom* argv) - { - typename ListMethodMap::iterator it = list_map.find(s); - if (it == list_map.end()) { - pd_error(z->asPdObject(), "[%s] unknown method: %s", z->name()->s_name, s->s_name); - return; - } - - listMethodPtr m = it->second; - - if (!m) { - pd_error(z->asPdObject(), "[%s] NULL function pointer: %s", z->name()->s_name, s->s_name); - return; - } - - (z->*m)(AtomList(argc, argv)); - } - - static void customMethodFloat(UI* z, t_symbol* s, int argc, t_atom* argv) - { - if (argc < 1) - return; - - typename FloatMethodMap::iterator it = float_map.find(s); - if (it == float_map.end()) { - pd_error(z->asPdObject(), "[%s] unknown method: %s", z->name()->s_name, s->s_name); - return; - } - - floatMethodPtr m = it->second; - - if (!m) { - pd_error(z->asPdObject(), "[%s] NULL function pointer: %s", z->name()->s_name, s->s_name); - return; - } - - (z->*m)(atom_getfloat(argv)); - } - - static void customMethodBang(UI* z, t_symbol* s, int, t_atom*) - { - typename BangMethodMap::iterator it = bang_map.find(s); - if (it == bang_map.end()) { - pd_error(z->asPdObject(), "[%s] unknown method: %s", z->name()->s_name, s->s_name); - return; - } - - bangMethodPtr m = it->second; - - if (!m) { - pd_error(z->asPdObject(), "[%s] NULL function pointer: %s", z->name()->s_name, s->s_name); - return; - } - - (z->*m)(); - } - - static void setDrawParams(UI* z, t_edrawparams* params) - { - z->setDrawParams(params); - } - - static t_pd_err floatPropGetter(UI* z, t_eattr* attr, int* argc, t_atom** argv) - { - typename FloatPropertyMap::iterator it = prop_float_map.find(attr->name); - if (it == prop_float_map.end()) - return 1; - - propFloatGet m = it->second.first; - - if (m == 0) { - pd_error(z->asPdObject(), "[%s] non-readable property: @%s", z->name()->s_name, attr->name->s_name); - argc = 0; - *argv = 0; - return 1; - } - - *argc = 1; - *argv = (t_atom*)getbytes(sizeof(t_atom)); - atom_setfloat(*argv, (z->*m)()); - return 0; - } - - static t_pd_err floatPropSetter(UI* z, t_eattr* attr, int argc, t_atom* argv) - { - typename FloatPropertyMap::iterator it = prop_float_map.find(attr->name); - if (it == prop_float_map.end()) - return 1; - - if (argc < 1) - return 2; - - propFloatSet m = it->second.second; - - if (m == 0) { - pd_error(z->asPdObject(), "[%s] readonly property: @%s", z->name()->s_name, attr->name->s_name); - return 1; - } - - (z->*m)(atom_getfloat(argv)); - return 0; - } - - static t_pd_err listPropGetter(UI* z, t_eattr* attr, int* argc, t_atom** argv) - { - typename ListPropertyMap::iterator it = prop_list_map.find(attr->name); - if (it == prop_list_map.end()) - return 1; - - propListGet m = it->second.first; - - if (m == 0) { - pd_error(z->asPdObject(), "[%s] non-readable property: @%s", z->name()->s_name, attr->name->s_name); - argc = 0; - *argv = 0; - return 1; - } - - AtomList res = (z->*m)(); - - *argc = res.size(); - *argv = (t_atom*)copybytes(res.toPdData(), sizeof(t_atom) * res.size()); - return 0; - } - - static t_pd_err listPropSetter(UI* z, t_eattr* attr, int argc, t_atom* argv) - { - typename ListPropertyMap::iterator it = prop_list_map.find(attr->name); - if (it == prop_list_map.end()) - return 1; - - propListSet m = it->second.second; - - if (m == 0) { - pd_error(z->asPdObject(), "[%s] readonly property: @%s", z->name()->s_name, attr->name->s_name); - return 1; - } - - (z->*m)(AtomList(argc, argv)); - return 0; - } - - static void onData(UI* z, t_symbol*, int argc, t_atom* argv) - { - AtomList l(argc, argv); - if (l.size() == 1 && l[0].isData()) { - DataPtr ptr(l[0]); - if (ptr.isValid()) { - z->onData(ptr); - } else { - DataDesc desc = l[0].getData(); - LIB_ERR << "can't get data with type=" << desc.type << " and id=" << desc.id; - } - } else { - z->onList(l); - } - } - - static void listPropRedirector(UI* z, t_symbol* s, int argc, t_atom* argv) - { - z->onProperty(s, AtomList(argc, argv)); - } - -public: - static t_eclass* pd_class; - static bool use_presets; - static long flags; - static BangMethodMap bang_map; - static FloatMethodMap float_map; - static ListMethodMap list_map; - static FloatPropertyMap prop_float_map; - static ListPropertyMap prop_list_map; -}; - -template -t_eclass* UIDspFactory::pd_class = 0; - -template -bool UIDspFactory::use_presets = false; - -template -long UIDspFactory::flags = 0; - -template -typename UIDspFactory::BangMethodMap UIDspFactory::bang_map; - -template -typename UIDspFactory::FloatMethodMap UIDspFactory::float_map; - -template -typename UIDspFactory::ListMethodMap UIDspFactory::list_map; - -template -typename UIDspFactory::FloatPropertyMap UIDspFactory::prop_float_map; - -template -typename UIDspFactory::ListPropertyMap UIDspFactory::prop_list_map; -} - -#endif // CEAMMC_DSP_UI_H diff --git a/ceammc/ext/src/lib/ceammc_either.h b/ceammc/ext/src/lib/ceammc_either.h new file mode 100644 index 0000000000..d827bf855b --- /dev/null +++ b/ceammc/ext/src/lib/ceammc_either.h @@ -0,0 +1,137 @@ +/***************************************************************************** + * Copyright 2019 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#ifndef CEAMMC_EITHER_H +#define CEAMMC_EITHER_H + +#include +#include + +#include "ceammc_atomlist.h" + +namespace ceammc { + +class RuntimeError { + std::string msg_; + +public: + RuntimeError(const char* msg = "") + : msg_(msg) + { + } + + RuntimeError(const std::string& msg) + : msg_(msg) + { + } + + virtual ~RuntimeError() {} + + const std::string& what() const { return msg_; } +}; + +template +class InvalidValue : public RuntimeError { + V v_; + +public: + InvalidValue(V v, const char* msg) + : RuntimeError(msg) + , v_(v) + { + } + + InvalidValue(V v, const std::string& msg) + : RuntimeError(msg) + , v_(v) + { + } + + const V& value() const { return v_; } +}; + +template +struct Either : public boost::variant { + typedef Error ErrorType; + + Either(const Error& err) + : boost::variant(err) + { + } + + Either(const T& value) + : boost::variant(value) + { + } + + bool isError() const + { + return !isOk(); + } + + bool isOk() const + { + return boost::variant::which() == 0; + } + + bool matchError(Error& err) const + { + if (!isError()) + return false; + + err = boost::get(*this); + return true; + } + + bool matchValue(T& value) const + { + if (!isOk()) + return false; + + value = boost::get(*this); + return true; + } + + T& value() + { + return boost::get(*this); + } + + const T& value() const + { + return boost::get(*this); + } + + const Error& error() const + { + return boost::get(*this); + } + + template + static Either makeError(Args... args) + { + return Either(ErrorType(args...)); + } +}; + +typedef Either> EitherBool; +typedef Either> EitherFloat; +typedef Either> EitherSymbol; +typedef Either> EitherInt; +typedef Either> EitherSizeT; +typedef Either> EitherAtom; +typedef Either> EitherAtomList; + +} + +#endif // CEAMMC_EITHER_H diff --git a/ceammc/ext/src/lib/ceammc_externals.cpp b/ceammc/ext/src/lib/ceammc_externals.cpp index 5daea8e19a..b2d86370e5 100644 --- a/ceammc/ext/src/lib/ceammc_externals.cpp +++ b/ceammc/ext/src/lib/ceammc_externals.cpp @@ -162,7 +162,7 @@ std::vector ceammc_base_properties(t_object* x) for (auto& kv : obj->properties()) { Property* p = kv.second; - if (!p) + if (!p || !p->visible()) continue; res.push_back(p->info()); @@ -181,13 +181,15 @@ const UIObject* ceammc_to_ui_object(t_object* x) std::vector ceammc_ui_properties(t_object* x) { - const UIObject* obj = ceammc_to_ui_object(x); - if (!obj) { - std::cerr << "corrupted CEAMMC UI object: " << obj << "\n"; + if (!is_ceammc_ui(x)) return {}; - } - return obj->propsInfo(); + auto* c = reinterpret_cast(x->te_g.g_pd); + + if (c->c_dsp) + return static_cast(reinterpret_cast(x))->propsInfo(); + else + return static_cast(reinterpret_cast(x))->propsInfo(); } std::vector ceammc_faust_properties(t_object* x) diff --git a/ceammc/ext/src/lib/ceammc_factory.h b/ceammc/ext/src/lib/ceammc_factory.h index e55a9167fa..7589fae856 100644 --- a/ceammc/ext/src/lib/ceammc_factory.h +++ b/ceammc/ext/src/lib/ceammc_factory.h @@ -14,12 +14,11 @@ #ifndef CEAMMC_OBJECTCLASS_H #define CEAMMC_OBJECTCLASS_H -#include +#include "m_pd.h" #include -#include -#include #include +#include #include #include "ceammc_externals.h" @@ -60,20 +59,12 @@ class ObjectFactory { typedef void (*PdListFunction)(ObjectProxy*, t_symbol*, int argc, t_atom* argv); typedef void (*PdAnyFunction)(ObjectProxy*, t_symbol*, int argc, t_atom* argv); - typedef void (T::*MethodPtrBang)(); - typedef void (T::*MethodPtrFloat)(float); - typedef void (T::*MethodPrtSymbol)(t_symbol*); - typedef void (T::*MethodPtrList)(t_symbol* s, const AtomList& l); - - typedef std::map MethodBangMap; - typedef std::map MethodFloatMap; - typedef std::map MethodSymbolMap; - typedef std::map MethodListMap; + typedef void (T::*MethodPtrList)(t_symbol*, const AtomList&); + typedef std::unordered_map MethodListMap; public: ObjectFactory(const char* name, int flags = OBJECT_FACTORY_DEFAULT) - : name_(name) - , fn_bang_(nullptr) + : fn_bang_(nullptr) , fn_float_(nullptr) , fn_symbol_(nullptr) , fn_list_(nullptr) @@ -112,10 +103,13 @@ class ObjectFactory { if (!(flags & OBJECT_FACTORY_NO_ANY)) setAnyFn(processAny); + // add [dump( method to dump to Pd console class_addmethod(c, reinterpret_cast(dumpMethodList), SYM_DUMP(), A_NULL); + // add [@*?( method to output all properties class_addmethod(c, reinterpret_cast(queryPropNames), SYM_PROPS_ALL_Q(), A_NULL); class_name_ = s_name; + // add to database register_base_external(class_); } @@ -170,7 +164,7 @@ class ObjectFactory { { t_symbol* s = gensym(name); class_addmethod(class_, reinterpret_cast(defaultListMethod), s, A_GIMME, A_NULL); - methods_[s] = fn; + list_methods_[s] = fn; } void addAlias(const char* name) @@ -178,13 +172,17 @@ class ObjectFactory { class_addcreator(reinterpret_cast(createObject), gensym(name), A_GIMME, A_NULL); } - void addClick(MethodPtrList fn) + void useClick() { - fn_click_ = fn; class_addmethod(class_, reinterpret_cast(processClick), gensym("click"), A_DEFFLOAT, A_DEFFLOAT, A_DEFFLOAT, A_DEFFLOAT, A_DEFFLOAT, A_NULL); } + void useLoadBang() + { + class_addmethod(class_, reinterpret_cast(processLoadBang), gensym("loadbang"), A_DEFFLOAT, 0); + } + void processData() { setListFn(processDataFn); @@ -198,32 +196,34 @@ class ObjectFactory { static void* createObject(t_symbol* name, int argc, t_atom* argv) { - ObjectProxy* x = 0; + ObjectProxy* x = nullptr; + try { x = reinterpret_cast(pd_new(class_)); + if (x == nullptr) + throw std::runtime_error("can't allocate memory for object"); PdArgs args(AtomList(argc, argv), class_name_, &x->pd_obj, name); args.noDefaultInlet = flags_ & OBJECT_FACTORY_NO_DEFAULT_INLET; args.mainSignalInlet = flags_ & OBJECT_FACTORY_MAIN_SIGNAL_INLET; x->impl = new T(args); - x->impl->parseProperties(); } catch (std::exception& e) { - x->impl = 0; - pd_free(&x->pd_obj.te_g.g_pd); - x = 0; + pd_error(0, "[ceammc] can't create object [%s]: %s", class_name_->s_name, e.what()); - char buf[200]; - snprintf(buf, 199, "%s", e.what()); - pd_error(0, "[ceammc] can't create object [%s]: %s", class_name_->s_name, buf); - } catch (...) { - x->impl = 0; + x->impl = nullptr; pd_free(&x->pd_obj.te_g.g_pd); - x = 0; - + return nullptr; + } catch (...) { pd_error(0, "[ceammc] can't create object [%s]", class_name_->s_name); + + x->impl = nullptr; + pd_free(&x->pd_obj.te_g.g_pd); + return nullptr; } + x->impl->parseProperties(); + return x; } @@ -258,9 +258,14 @@ class ObjectFactory { } static void processClick(ObjectProxy* x, t_symbol* sel, - t_floatarg a, t_floatarg b, t_floatarg c, t_floatarg d, t_floatarg e) + t_floatarg xpos, t_floatarg ypos, t_floatarg shift, t_floatarg ctrl, t_floatarg alt) { - (x->impl->*(fn_click_))(sel, AtomList({ a, b, c, d, e })); + x->impl->onClick(xpos, ypos, shift, ctrl, alt); + } + + static void processLoadBang(ObjectProxy* x, t_floatarg action) + { + x->impl->dispatchLoadBang(action); } static void processDataFn(ObjectProxy* x, t_symbol*, int argc, t_atom* argv) @@ -298,8 +303,8 @@ class ObjectFactory { static void dumpMethodList(ObjectProxy* x) { - for (auto it = methods_.begin(); it != methods_.end(); ++it) { - post("[%s] method: %s", class_name_->s_name, it->first->s_name); + for (auto m : list_methods_) { + post("[%s] method: %s", class_name_->s_name, m.first->s_name); } x->impl->dump(); @@ -312,8 +317,8 @@ class ObjectFactory { static void defaultListMethod(ObjectProxy* x, t_symbol* sel, int argc, t_atom* argv) { - auto it = methods_.find(sel); - if (it == methods_.end()) { + auto it = list_methods_.find(sel); + if (it == list_methods_.end()) { pd_error(x, "unknown method: %s", sel->s_name); return; } @@ -321,8 +326,31 @@ class ObjectFactory { (x->impl->*(it->second))(sel, AtomList(argc, argv)); } + /** + * @brief classPointer + * @return pointer to Pd class + */ static t_class* classPointer() { return class_; } + /** + * @brief className + * @return Pd class name + */ + static t_symbol* className() { return class_name_; } + + /** + * convert from Pd object pointer to pointer to ceammc class + * @param x - pd object pointer + * @return - pointer to ceammc object or nullptr on error + */ + static T* fromObject(t_object* x) + { + if (!x) + return nullptr; + + return reinterpret_cast(x)->impl; + } + private: static void defaultFloatToList(ObjectProxy* x, t_floatarg f) { @@ -337,12 +365,10 @@ class ObjectFactory { private: static t_class* class_; static t_symbol* class_name_; - static MethodListMap methods_; + static MethodListMap list_methods_; static int flags_; - static MethodPtrList fn_click_; private: - const char* name_; PdBangFunction fn_bang_; PdFloatFunction fn_float_; PdSymbolFunction fn_symbol_; @@ -382,14 +408,11 @@ template t_symbol* ObjectFactory::class_name_ = 0; template -typename ObjectFactory::MethodListMap ObjectFactory::methods_; +typename ObjectFactory::MethodListMap ObjectFactory::list_methods_; template int ObjectFactory::flags_ = 0; -template -typename ObjectFactory::MethodPtrList ObjectFactory::fn_click_ = 0; - #define CLASS_ADD_METHOD() } // namespace ceammc diff --git a/ceammc/ext/src/lib/ceammc_fn_list.h b/ceammc/ext/src/lib/ceammc_fn_list.h index aa0603e9fa..ef5d20d204 100644 --- a/ceammc/ext/src/lib/ceammc_fn_list.h +++ b/ceammc/ext/src/lib/ceammc_fn_list.h @@ -74,6 +74,73 @@ namespace list { std::vector> rleEncode(const AtomList& l); AtomList rleDecode(const std::vector>& rle); + + template + static bool canConvertToType(const AtomList&) { return false; } + + template <> + bool canConvertToType(const AtomList& l) + { + if (l.size() != 1) + return false; + + if (l[0].isFloat()) + return true; + + if (l[0].isSymbol() + && (l[0].asSymbol() == gensym("true") || l[0].asSymbol() == gensym("false"))) + return true; + + return false; + } + + template <> + bool canConvertToType(const AtomList& l) + { + return l.isFloat(); + } + + template <> + bool canConvertToType(const AtomList& l) + { + return l.isFloat(); + } + + template <> + bool canConvertToType(const AtomList& l) + { + return l.isFloat(); + } + + template <> + bool canConvertToType(const AtomList& l) + { + if (!l.isFloat()) + return false; + + if (l[0].asFloat() < 0) + return false; + + return true; + } + + template <> + bool canConvertToType(const AtomList& l) + { + return l.isSymbol(); + } + + template <> + bool canConvertToType(const AtomList& l) + { + return l.size() == 1; + } + + template <> + bool canConvertToType(const AtomList& l) + { + return true; + } } } diff --git a/ceammc/ext/src/lib/ceammc_globaldata.h b/ceammc/ext/src/lib/ceammc_globaldata.h index 240f568f61..e40cacf6e3 100644 --- a/ceammc/ext/src/lib/ceammc_globaldata.h +++ b/ceammc/ext/src/lib/ceammc_globaldata.h @@ -15,12 +15,12 @@ #define CEAMMC_SHAREDDATA_H #include -#include #include +#include #include #include -#include +#include "m_pd.h" namespace ceammc { @@ -28,7 +28,7 @@ template class NamedDataDict { public: typedef std::pair Value; - typedef std::map Map; + typedef std::unordered_map Map; typedef typename Map::iterator iterator; typedef typename Map::const_iterator const_iterator; @@ -50,9 +50,9 @@ class NamedDataDict { std::cerr << "[ERROR | NamedDataDict] not all elements were released:\n "; } - for (iterator it = map_.begin(); it != map_.end(); ++it) { - std::cerr << "\t" << it->first << ": refcount = " << it->second.first << "\n"; - delete it->second.second; + for (auto& kv : map_) { + std::cerr << "\t" << kv.first->s_name << ": refcount = " << kv.second.first << "\n"; + delete kv.second.second; } } @@ -61,7 +61,7 @@ class NamedDataDict { * @param name - name of element * @return true if element exists */ - bool contains(const std::string& name) + bool contains(t_symbol* name) { return map_.find(name) != map_.end(); } @@ -80,9 +80,9 @@ class NamedDataDict { * @param name - element name * @return element reference count or 0, if element not found in dict */ - size_t refCount(const std::string& name) const + size_t refCount(t_symbol* name) const { - const_iterator it = map_.find(name); + auto it = map_.find(name); if (it == map_.end()) return 0; @@ -95,9 +95,9 @@ class NamedDataDict { * @param p - pointer to element * @return true if new element inserted, false if element already exists */ - bool create(const std::string& name, T* p) + bool create(t_symbol* name, T* p) { - iterator it = map_.find(name); + auto it = map_.find(name); if (it != map_.end()) return false; @@ -110,9 +110,9 @@ class NamedDataDict { * @param name - element name * @return pointer to element or NULL if not found */ - T* acquire(const std::string& name) + T* acquire(t_symbol* name) { - iterator it = map_.find(name); + auto it = map_.find(name); if (it == map_.end()) return 0; @@ -125,15 +125,15 @@ class NamedDataDict { * @param name - element name * @return true on succesfull release or false if object not found */ - bool release(const std::string& name) + bool release(t_symbol* name) { - iterator it = map_.find(name); + auto it = map_.find(name); if (it == map_.end()) return false; // not acquired value found: if (ref_is_zero(it)) { - std::cerr << "[ERROR | NamedDataDict] not acquired element: " << it->first << "\n"; + std::cerr << "[ERROR | NamedDataDict] not acquired element: " << it->first->s_name << "\n"; ref_free(it); ref_remove(it); return true; @@ -154,12 +154,11 @@ class NamedDataDict { /** * Retrieve all dict keys */ - void keys(std::vector& res) const + void keys(std::vector& res) const { - typename Map::const_iterator it; - for (it = map_.begin(); it != map_.end(); ++it) { - res.push_back(it->first); - } + res.reserve(map_.size()); + for (auto& p : map_) + res.push_back(p.first); } }; @@ -167,12 +166,18 @@ template class GlobalData { private: typedef typename NamedDataDict::iterator iterator; - static NamedDataDict data_; const static int log_level = 0; +private: + static NamedDataDict& data() + { + static NamedDataDict data_; + return data_; + } + private: T* ptr_; - std::string name_; + t_symbol* name_; std::string descr_; public: @@ -181,29 +186,29 @@ class GlobalData { * @param name - data name * @param descr - data description */ - GlobalData(const std::string& name, const std::string& desc = "") + GlobalData(t_symbol* name, const std::string& desc = "") : ptr_(0) , name_(name) , descr_(desc) { - ptr_ = data_.acquire(name); + ptr_ = data().acquire(name); if (ptr_ == 0) { // if not found - data_.create(name, new T()); - ptr_ = data_.acquire(name); + data().create(name, new T()); + ptr_ = data().acquire(name); - verbose(log_level, "[%s %s] created", descr_.c_str(), name_.c_str()); + verbose(log_level, "[%s %s] created", descr_.c_str(), name_->s_name); } - verbose(log_level, "[%s %s] +1", descr_.c_str(), name_.c_str()); + verbose(log_level, "[%s %s] +1", descr_.c_str(), name_->s_name); } ~GlobalData() { - verbose(log_level, "[%s %s] -1", descr_.c_str(), name_.c_str()); - data_.release(name_); + verbose(log_level, "[%s %s] -1", descr_.c_str(), name_->s_name); + data().release(name_); - if (!data_.contains(name_)) - verbose(log_level, "[%s %s] destroyed", descr_.c_str(), name_.c_str()); + if (!data().contains(name_)) + verbose(log_level, "[%s %s] destroyed", descr_.c_str(), name_->s_name); } /** @@ -215,7 +220,7 @@ class GlobalData { /** * Returns data name */ - std::string name() const { return name_; } + t_symbol* name() const { return name_; } /** * Returns data description @@ -231,19 +236,16 @@ class GlobalData { /** * Returns number of references to global data */ - size_t refCount() const { return data_.refCount(name_); } + size_t refCount() const { return data().refCount(name_); } /** * Retrieve all dict keys */ - static void keys(std::vector& res) + static void keys(std::vector& res) { - data_.keys(res); + data().keys(res); } }; - -template -NamedDataDict GlobalData::data_; } #endif // CEAMMC_SHAREDDATA_H diff --git a/ceammc/ext/src/lib/ceammc_loader_coreaudio_impl.m b/ceammc/ext/src/lib/ceammc_loader_coreaudio_impl.m index 231e6c7b58..17e0bc4345 100644 --- a/ceammc/ext/src/lib/ceammc_loader_coreaudio_impl.m +++ b/ceammc/ext/src/lib/ceammc_loader_coreaudio_impl.m @@ -25,8 +25,6 @@ AudioStreamBasicDescription inputFormat; } convert_settings; -static const size_t PLAYER_BUF_SIZE = 8192; - struct audio_player { ExtAudioFileRef file_ref; AudioStreamBasicDescription in_asbd; diff --git a/ceammc/ext/src/lib/ceammc_log.cpp b/ceammc/ext/src/lib/ceammc_log.cpp index 3f58da2d91..a9c2ee13a9 100644 --- a/ceammc/ext/src/lib/ceammc_log.cpp +++ b/ceammc/ext/src/lib/ceammc_log.cpp @@ -27,7 +27,7 @@ Error::Error(const BaseObject* obj) Error::~Error() { if (obj_ != 0) - pd_error(static_cast(obj_->owner()), "[%s] %s", obj_->className().c_str(), str().c_str()); + pd_error(static_cast(obj_->owner()), "[%s] %s", obj_->className()->s_name, str().c_str()); else pd_error(0, "[ceammc] %s", str().c_str()); } @@ -40,7 +40,7 @@ Debug::Debug(const BaseObject* obj) Debug::~Debug() { if (obj_ != 0) - post("[%s] %s", obj_->className().c_str(), str().c_str()); + post("[%s] %s", obj_->className()->s_name, str().c_str()); else post("[ceammc] %s", str().c_str()); } @@ -54,7 +54,7 @@ Log::Log(const BaseObject* obj, int level) Log::~Log() { if (obj_ != 0) - logpost(static_cast(obj_->owner()), level_ + 4, "[%s] %s", obj_->className().c_str(), str().c_str()); + logpost(static_cast(obj_->owner()), level_ + 4, "[%s] %s", obj_->className()->s_name, str().c_str()); else logpost(nullptr, level_ + 4, "[ceammc] %s", str().c_str()); } diff --git a/ceammc/ext/src/lib/ceammc_maybe.h b/ceammc/ext/src/lib/ceammc_maybe.h new file mode 100644 index 0000000000..4718a3d110 --- /dev/null +++ b/ceammc/ext/src/lib/ceammc_maybe.h @@ -0,0 +1,117 @@ +/***************************************************************************** + * Copyright 2019 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#ifndef CEAMMC_MAYBE_H +#define CEAMMC_MAYBE_H + +#include +#include +#include +#include + +namespace ceammc { + +template +class Maybe { + T value_; + bool null_; + +public: + Maybe(T v) + : value_(v) + , null_(false) + { + } + + Maybe() + : value_() + , null_(true) + { + } + + Maybe(const Maybe& m) + : value_(m.value_) + , null_(m.null_) + { + } + + Maybe(Maybe&& m) + : value_(m.value_) + , null_(m.null_) + { + } + + const Maybe& operator=(const Maybe& m) const + { + value_ = m.value_; + null_ = m.null_; + return *this; + } + + const Maybe& operator=(Maybe&& m) const + { + value_ = std::move(m.value_); + null_ = m.null_; + return *this; + } + + operator bool() const + { + return !null_; + } + + const T& operator*() const + { + return value(); + } + + const T& value() const + { + if (null_) + throw std::runtime_error("null value"); + + return value_; + } + + T& value() + { + if (null_) + throw std::runtime_error("null value"); + + return value_; + } + + template + Maybe call(std::function fn) + { + if (null_) + return Maybe(); + else + return Maybe(fn(value_)); + } +}; + +template +std::ostream& operator<<(std::ostream& os, const Maybe& m) +{ + if (m) + os << *m; + else + os << "Nothing"; + + return os; +} + +} + +#endif // CEAMMC_MAYBE_H diff --git a/ceammc/ext/src/lib/ceammc_message.cpp b/ceammc/ext/src/lib/ceammc_message.cpp index 95b6ed1c36..4c9c96ef73 100644 --- a/ceammc/ext/src/lib/ceammc_message.cpp +++ b/ceammc/ext/src/lib/ceammc_message.cpp @@ -12,6 +12,7 @@ * this file belongs to. *****************************************************************************/ #include "ceammc_message.h" +#include "ceammc_format.h" #include #include @@ -57,7 +58,7 @@ Message::Message(const AtomList& l) , data_(Atom()) , v_list_(l) { - if (l.size() == 1 && l[0].isData()) + if (l.size() == 1) setAtom(l[0]); } @@ -67,7 +68,7 @@ Message::Message(int argc, t_atom* argv) , data_(Atom()) , v_list_(argc, argv) { - if (argc == 1 && Atom(*argv).isData()) + if (argc == 1) setAtom(*argv); } @@ -255,4 +256,21 @@ bool operator!=(const Message& c1, const Message& c2) return !(c1 == c2); } +std::ostream& operator<<(std::ostream& os, const Message& m) +{ + os << '['; + + if (m.isBang()) + ; + else if (m.isFloat()) + os << "float "; + else if (m.isSymbol()) + os << "symbol "; + else if (m.isList()) + os << "list "; + + os << to_string(m, " ") << '('; + return os; +} + } // namespace ceammc diff --git a/ceammc/ext/src/lib/ceammc_message.h b/ceammc/ext/src/lib/ceammc_message.h index 4a6f470fb7..b798bcd9ac 100644 --- a/ceammc/ext/src/lib/ceammc_message.h +++ b/ceammc/ext/src/lib/ceammc_message.h @@ -52,6 +52,15 @@ class Message { Message(t_symbol* s, const AtomList& l); Message(t_symbol* s, int argc, t_atom* argv); + template + Message(const char* s, Args... args) + : type_(ANY) + , value_(gensym(s)) + , data_(Atom()) + , v_list_({ wrap_atom(args)... }) + { + } + // copy/move Message(const Message& m); Message(Message&& m); @@ -89,10 +98,19 @@ class Message { } const DataPtr& dataValue() const; + +private: + static Atom wrap_atom(const char* str) { return Atom(gensym(str)); } + static Atom wrap_atom(t_symbol* s) { return Atom(s); } + static Atom wrap_atom(double f) { return Atom(f); } + static Atom wrap_atom(float f) { return Atom(f); } + static Atom wrap_atom(int i) { return Atom(i); } + static Atom wrap_atom(long l) { return Atom(l); } }; bool operator==(const Message& c1, const Message& c2); bool operator!=(const Message& c1, const Message& c2); +std::ostream& operator<<(std::ostream& os, const Message& m); } // namespace ceammc diff --git a/ceammc/ext/src/lib/ceammc_object.cpp b/ceammc/ext/src/lib/ceammc_object.cpp index db36481e1b..bb5ed60971 100644 --- a/ceammc/ext/src/lib/ceammc_object.cpp +++ b/ceammc/ext/src/lib/ceammc_object.cpp @@ -615,8 +615,8 @@ bool BaseObject::checkArgs(const AtomList& lst, BaseObject::ArgumentType a1, void BaseObject::dump() const { // cast from size_t -> int; for all supported OS-platform to be happy - post("[%s] inlets: %i", className().c_str(), static_cast(numInlets())); - post("[%s] outlets: %i", className().c_str(), static_cast(numOutlets())); + post("[%s] inlets: %i", className()->s_name, static_cast(numInlets())); + post("[%s] outlets: %i", className()->s_name, static_cast(numOutlets())); Properties::const_iterator it; for (it = props_.begin(); it != props_.end(); ++it) { @@ -624,7 +624,7 @@ void BaseObject::dump() const continue; post("[%s] property: %s = %s", - className().c_str(), + className()->s_name, it->first->s_name, to_string(it->second->get()).c_str()); } @@ -674,6 +674,12 @@ void BaseObject::onAny(t_symbol* s, const AtomList&) OBJ_ERR << "unexpected message: " << s; } +void BaseObject::onClick(t_floatarg /*xpos*/, t_floatarg /*ypos*/, + t_floatarg /*shift*/, t_floatarg /*ctrl*/, t_floatarg /*alt*/) +{ + OBJ_ERR << "not implemeneted"; +} + void BaseObject::anyDispatch(t_symbol* s, const AtomList& lst) { if (processAnyInlets(s, lst)) @@ -685,6 +691,24 @@ void BaseObject::anyDispatch(t_symbol* s, const AtomList& lst) onAny(s, lst); } +void BaseObject::dispatchLoadBang(int action) +{ + switch (action) { + case LB_LOAD: + onLoadBang(); + break; + case LB_INIT: + onInitBang(); + break; + case LB_CLOSE: + onCloseBang(); + break; + default: + OBJ_ERR << "unknown loadbang type: " << action; + break; + } +} + void BaseObject::bindReceive(t_symbol* path) { if (path == 0) { @@ -735,18 +759,23 @@ std::string BaseObject::findInStdPaths(const char* fname) const t_symbol* BaseObject::tryGetPropKey(t_symbol* sel) { - t_symbol* res = nullptr; + if (!sel) + return nullptr; + const char* str = sel->s_name; + if (!str || !str[0]) + return nullptr; + const size_t last_idx = strlen(str) - 1; if (str[last_idx] == '?') { char buf[MAXPDSTRING] = { 0 }; memcpy(&buf, str, last_idx); buf[last_idx] = '\0'; - res = gensym(buf); + return gensym(buf); } - return res; + return nullptr; } bool BaseObject::isAbsolutePath(const char* path) diff --git a/ceammc/ext/src/lib/ceammc_object.h b/ceammc/ext/src/lib/ceammc_object.h index 9db9ee106c..bef344109f 100644 --- a/ceammc/ext/src/lib/ceammc_object.h +++ b/ceammc/ext/src/lib/ceammc_object.h @@ -125,14 +125,19 @@ class BaseObject { bool checkArgs(const AtomList& lst, ArgumentType a1, ArgumentType a2, ArgumentType a3, ArgumentType a4, t_symbol* method = 0) const; /** - * Returns object class name as string. + * Returns object class name */ - inline std::string className() const { return pd_.className->s_name; } + t_symbol* className() const { return pd_.className; } + + /** + * Returns object class pointer + */ + t_class* classPointer() const { return pd_.owner->te_g.g_pd; } /** * Returns pointer to pd object struct, if you need manually call pd fuctions. */ - inline t_object* owner() const { return pd_.owner; } + t_object* owner() const { return pd_.owner; } /** * Dumps object info to Pd window @@ -162,6 +167,31 @@ class BaseObject { */ virtual void onInlet(size_t, const AtomList&) {} + /** + * This function called on object click (should be enabled in factory) + * @param xpos - relative mouse x-pos + * @param ypos - relative mouse y-pos + * @param shift - if shift modifier is pressed + * @param ctrl - if control modifier is pressed + * @param alt - if alt modifier is pressed + */ + virtual void onClick(t_floatarg xpos, t_floatarg ypos, t_floatarg shift, t_floatarg ctrl, t_floatarg alt); + + /** + * called when loaded + */ + virtual void onLoadBang() {} + + /** + * called when loaded but not yet connected to parent patch + */ + virtual void onInitBang() {} + + /** + * called when about to close + */ + virtual void onCloseBang() {} + t_inlet* createInlet(); /** @@ -291,6 +321,12 @@ class BaseObject { */ virtual void anyDispatch(t_symbol* s, const AtomList& lst); + /** + * Various load(close)bang dispatcher + * @param action + */ + void dispatchLoadBang(int action); + /** * Bind object to listen global signal bus * @see unbindReceive() diff --git a/ceammc/ext/src/lib/ceammc_pd.cpp b/ceammc/ext/src/lib/ceammc_pd.cpp index f76bcd2de3..7f161606e3 100644 --- a/ceammc/ext/src/lib/ceammc_pd.cpp +++ b/ceammc/ext/src/lib/ceammc_pd.cpp @@ -23,6 +23,7 @@ extern "C" { #include "g_canvas.h" #include "m_imp.h" void pd_init(); +void obj_sendinlet(t_object* x, int n, t_symbol* s, int argc, t_atom* argv); } #include @@ -36,7 +37,8 @@ typedef t_object* (*t_newgimme)(t_symbol* s, int argc, t_atom* argv); using namespace ceammc; pd::External::External(const char* name, const AtomList& lst) - : obj_(0) + : obj_(nullptr) + , parent_(nullptr) { try { t_symbol* OBJ_NAME = gensym(name); @@ -64,6 +66,21 @@ pd::External::External(const char* name, const AtomList& lst) pd::External::~External() { if (obj_) { + if (parent_) { + t_gobj* y = &obj_->te_g; + + if (parent_->gl_list == y) { + parent_->gl_list = y->g_next; + } else { + for (auto g = parent_->gl_list; g; g = g->g_next) { + if (g->g_next == y) { + g->g_next = y->g_next; + break; + } + } + } + } + pd_free(&obj_->te_g.g_pd); } } @@ -134,7 +151,7 @@ bool pd::External::connectFrom(int outn, t_object* src, int inln) } if (inln >= numInlets()) { - printf("[%s: connectFrom %s] invalid destination inlet: %dn", + printf("[%s: connectFrom %s] invalid destination inlet: %d\n", OBJ_NAME(obj_), OBJ_NAME(src), inln); return false; } @@ -160,17 +177,17 @@ t_object* pd::External::object() return obj_; } -void pd::External::bang() +void pd::External::setParent(t_canvas* cnv) { - if (!obj_) - return; - - pd_bang(&obj_->te_g.g_pd); + parent_ = cnv; } void pd::External::sendBang() { - bang(); + if (!obj_) + return; + + pd_bang(pd()); } void pd::External::sendFloat(t_float v) @@ -178,7 +195,7 @@ void pd::External::sendFloat(t_float v) if (!obj_) return; - pd_float(&obj_->te_g.g_pd, v); + pd_float(pd(), v); } void pd::External::sendSymbol(t_symbol* s) @@ -186,7 +203,7 @@ void pd::External::sendSymbol(t_symbol* s) if (!obj_) return; - pd_symbol(&obj_->te_g.g_pd, s); + pd_symbol(pd(), s); } void pd::External::sendList(const AtomList& l) @@ -194,7 +211,51 @@ void pd::External::sendList(const AtomList& l) if (!obj_) return; - pd_list(&obj_->te_g.g_pd, &s_list, l.size(), l.toPdData()); + pd_list(pd(), &s_list, l.size(), l.toPdData()); +} + +void pd::External::sendBangTo(size_t inlet) +{ + if (inlet == 0) + sendBang(); + else { + External pd_b("bang"); + if (pd_b.connectTo(0, *this, inlet)) + pd_bang(pd_b.pd()); + } +} + +void pd::External::sendFloatTo(t_float v, size_t inlet) +{ + if (inlet == 0) + sendFloat(v); + else { + External pd_f("float"); + if (pd_f.connectTo(0, *this, inlet)) + pd_float(pd_f.pd(), v); + } +} + +void pd::External::sendSymbolTo(t_symbol* s, size_t inlet) +{ + if (inlet == 0) + sendSymbol(s); + else { + External pd_s("symbol"); + if (pd_s.connectTo(0, *this, inlet)) + pd_symbol(pd_s.pd(), s); + } +} + +void pd::External::sendListTo(const AtomList& l, size_t inlet) +{ + if (inlet == 0) + sendList(l); + else { + External pd_l("list"); + if (pd_l.connectTo(0, *this, inlet)) + pd_list(pd_l.pd(), &s_list, l.size(), l.toPdData()); + } } void pd::External::sendMessage(t_symbol* msg, const AtomList& args) @@ -205,6 +266,23 @@ void pd::External::sendMessage(t_symbol* msg, const AtomList& args) pd_typedmess(&obj_->te_g.g_pd, msg, args.size(), args.toPdData()); } +void pd::External::sendMessage(const Message& m) +{ + if (!obj_) + return; + + if (m.isBang()) + sendBang(); + else if (m.isFloat()) + sendFloat(m.atomValue().asFloat()); + else if (m.isSymbol()) + sendSymbol(m.atomValue().asSymbol()); + else if (m.isList()) + sendList(m.listValue()); + else + sendMessage(m.atomValue().asSymbol(), m.listValue()); +} + int pd::External::numOutlets() const { if (!obj_) @@ -336,7 +414,8 @@ CanvasPtr PureData::createTopCanvas(const char* name, const AtomList& args) l.append(400); // height l.append(10); // font size - canvas_setcurrent(0); + if (canvas_getcurrent()) + canvas_unsetcurrent(canvas_getcurrent()); if (platform::is_path_relative(name)) { glob_setfilename(0, gensym(name), gensym("~")); @@ -351,11 +430,12 @@ CanvasPtr PureData::createTopCanvas(const char* name, const AtomList& args) assert(l.size() == 5); t_canvas* cnv = canvas_new(0, gensym(name), l.size(), l.toPdData()); - cnv->gl_loading = 0; if (!cnv) return ptr; + cnv->gl_loading = 0; + ptr.reset(new Canvas(cnv)); canvas_map_[name] = ptr; return ptr; @@ -378,3 +458,35 @@ PureData& PureData::instance() static PureData pd; return pd; } + +t_class* pd::object_class(t_object* x) +{ + if (!x) + return nullptr; + + return x->te_g.g_pd; +} + +t_symbol* pd::object_name(t_object* x) +{ + if (!x) + return &s_; + + return x->te_g.g_pd->c_name; +} + +t_symbol* pd::object_dir(t_object* x) +{ + if (!x) + return &s_; + + return x->te_g.g_pd->c_externdir; +} + +void pd::object_bang(t_object* x) +{ + if (!x || !x->te_g.g_pd->c_bangmethod) + return; + + x->te_g.g_pd->c_bangmethod(&x->te_g.g_pd); +} diff --git a/ceammc/ext/src/lib/ceammc_pd.h b/ceammc/ext/src/lib/ceammc_pd.h index 7cafd17d56..e3dfe393f3 100644 --- a/ceammc/ext/src/lib/ceammc_pd.h +++ b/ceammc/ext/src/lib/ceammc_pd.h @@ -16,10 +16,11 @@ #include "ceammc_atomlist.h" #include "ceammc_canvas.h" +#include "ceammc_message.h" #include "ceammc_property_info.h" -#include #include +#include #include struct _text; @@ -27,6 +28,7 @@ typedef struct _text t_object; namespace ceammc { +class Canvas; class BaseObject; class UIObject; @@ -34,6 +36,7 @@ namespace pd { class External { private: t_object* obj_; + _glist* parent_; public: External(const char* name, const AtomList& lst = AtomList()); @@ -50,13 +53,30 @@ namespace pd { bool connectFrom(int outn, External& ext, int inln); t_object* object(); + t_pd* pd() { return &obj_->te_g.g_pd; } + void setParent(_glist* cnv); - void bang(); void sendBang(); void sendFloat(t_float v); void sendSymbol(t_symbol* s); void sendList(const AtomList& l); + void sendBangTo(size_t inlet); + void sendFloatTo(t_float v, size_t inlet); + void sendSymbolTo(t_symbol* s, size_t inlet); + void sendListTo(const AtomList& l, size_t inlet); void sendMessage(t_symbol* msg, const AtomList& args = AtomList()); + void sendMessage(const Message& m); + + template + void sendMessage(const char* msg, Args... args) + { + sendMessage({ msg, args... }); + } + + void sendMessage(const char* msg, const AtomList& args = AtomList()) + { + sendMessage(gensym(msg), args); + } int numOutlets() const; int numInlets() const; @@ -79,9 +99,14 @@ namespace pd { std::vector properties() const; }; + + t_class* object_class(t_object* x); + t_symbol* object_name(t_object* x); + t_symbol* object_dir(t_object* x); + void object_bang(t_object* x); } -typedef boost::shared_ptr CanvasPtr; +typedef std::shared_ptr CanvasPtr; typedef std::map CanvasMap; class PureData { diff --git a/ceammc/ext/src/lib/ceammc_property.h b/ceammc/ext/src/lib/ceammc_property.h index 48ffdfc88f..ba3750e3a4 100644 --- a/ceammc/ext/src/lib/ceammc_property.h +++ b/ceammc/ext/src/lib/ceammc_property.h @@ -69,7 +69,8 @@ class AtomProperty : public Property { bool set(const AtomList& lst); AtomList get() const; - Atom value() const { return v_; } + const Atom& value() const { return v_; } + Atom& value() { return v_; } void setValue(const Atom& v) { v_ = v; } }; diff --git a/ceammc/ext/src/lib/ceammc_property_extra.h b/ceammc/ext/src/lib/ceammc_property_extra.h new file mode 100644 index 0000000000..e9aa86f0b1 --- /dev/null +++ b/ceammc/ext/src/lib/ceammc_property_extra.h @@ -0,0 +1,153 @@ +/***************************************************************************** + * Copyright 2019 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#ifndef CEAMMC_PROPERTY_EXTRA_H +#define CEAMMC_PROPERTY_EXTRA_H + +#include "ceammc_either.h" +#include "ceammc_fn_list.h" +#include "ceammc_log.h" +#include "ceammc_property.h" +#include "ceammc_property_info.h" + +#include +#if BOOST_VERSION >= 105900 +#include +#define CEAMMC_DEMANGLE(str) boost::core::demangle(str) +#else +#define CEAMMC_DEMANGLE(str) str +#endif + +#include + +namespace ceammc { + +template +class LambdaCheckProperty : public Property { + typedef Either> EitherValue; + std::function check_fn_; + V value_; + V default_value_; + +public: + template + LambdaCheckProperty(const std::string& name, V defaultVal, CheckFn check_fn) + : Property(PropertyInfo(name, PropertyInfo::toType()), false) + , check_fn_(check_fn) + , default_value_(defaultVal) + { + if (!valueCheck(defaultVal)) + throw std::logic_error("invalid default value"); + + value_ = default_value_; + } + + bool set(const AtomList& lst) + { + if (!readonlyCheck()) + return false; + + if (!convertCheck(lst)) + return false; + + if (!lambdaCheck(lst)) + return false; + + return true; + } + + AtomList get() const + { + return Atom(value_); + } + + V value() const + { + return value_; + } + + void setValue(V v) + { + if (!valueCheck(v)) + return; + + value_ = v; + } + +private: + bool convertCheck(const AtomList& l) const + { + if (!list::canConvertToType(l)) { + LIB_ERR << name() << ": can't convert " << l << " to " + << CEAMMC_DEMANGLE(typeid(V).name()) << " type"; + return false; + } + + return true; + } + + bool lambdaCheck(const AtomList& lst) + { + V v = atomlistToValue(lst, default_value_); + if (!valueCheck(v)) + return false; + + value_ = v; + return true; + } + + bool valueCheck(V v) + { + EitherValue res = check_fn_(v); + if (res.isError()) { + LIB_ERR << "invalid value " << res.error().value() << " for property " << name() + << ": " << res.error().what(); + return false; + } + + return true; + } +}; + +/** + * Calls lambda function after successfull setting value + */ +template +class LambdaCallProperty : public Prop { + std::function fn_; + Owner* this_; + +public: + template + LambdaCallProperty(Owner* obj, Fn fn, Args... args) + : Prop(args...) + , this_(obj) + , fn_(fn) + { + static_assert(std::is_base_of::value, "not a Property subclass"); + } + + bool set(const AtomList& l) override + { + bool ok = Prop::set(l); + + if (ok) + fn_(this_, Prop::get()); + + return ok; + } +}; + +} + +#endif // CEAMMC_PROPERTY_EXTRA_H diff --git a/ceammc/ext/src/lib/ceammc_property_info.cpp b/ceammc/ext/src/lib/ceammc_property_info.cpp index eaa637709f..e99215afb0 100644 --- a/ceammc/ext/src/lib/ceammc_property_info.cpp +++ b/ceammc/ext/src/lib/ceammc_property_info.cpp @@ -289,7 +289,8 @@ t_symbol* PropertyInfo::defaultSymbol(t_symbol* def) const if (val.type() != typeid(t_symbol*)) return def; - return boost::get(val); + auto ret = boost::get(val); + return (ret == nullptr) ? def : ret; } Atom PropertyInfo::defaultAtom(const Atom& def) const diff --git a/ceammc/ext/src/lib/ceammc_sound_external.cpp b/ceammc/ext/src/lib/ceammc_sound_external.cpp index 1ea90fc5d9..072f413ee0 100644 --- a/ceammc/ext/src/lib/ceammc_sound_external.cpp +++ b/ceammc/ext/src/lib/ceammc_sound_external.cpp @@ -22,21 +22,15 @@ SoundExternal::SoundExternal(const PdArgs& a) , n_in_(a.hasDefaultSignalInlet() ? 1 : 0) , n_out_(0) , sample_rate_(44100) + , in_{} + , out_{} { } void SoundExternal::setupDSP(t_signal** sp) { - block_size_ = size_t(sp[0]->s_n); - sample_rate_ = size_t(sp[0]->s_sr); - + signalInit(sp); dsp_add(dspPerform, 1, static_cast(this)); - - for (size_t i = 0; i < n_in_; i++) - in_[i] = sp[i]->s_vec; - - for (size_t i = 0; i < n_out_; i++) - out_[i] = sp[i + n_in_]->s_vec; } t_inlet* SoundExternal::createSignalInlet() @@ -68,7 +62,42 @@ t_outlet* SoundExternal::createSignalOutlet() void SoundExternal::dump() const { BaseObject::dump(); - post("[%s] block size: %i", className().c_str(), blockSize()); - post("[%s] samplerate: %i", className().c_str(), samplerate()); + post("[%s] block size: %i", className()->s_name, blockSize()); + post("[%s] samplerate: %i", className()->s_name, samplerate()); } + +void SoundExternal::blockSizeChanged(size_t bs) +{ +} + +void SoundExternal::samplerateChanged(size_t sr) +{ +} + +void SoundExternal::signalInit(t_signal** sp) +{ + auto old_bs = block_size_; + auto old_sr = sample_rate_; + + if (n_in_) { + block_size_ = size_t(sp[0]->s_n); + sample_rate_ = size_t(sp[0]->s_sr); + } else { + block_size_ = 64; + sample_rate_ = 44100; + } + + for (size_t i = 0; i < n_in_; i++) + in_[i] = sp[i]->s_vec; + + for (size_t i = 0; i < n_out_; i++) + out_[i] = sp[i + n_in_]->s_vec; + + if (old_bs != block_size_) + blockSizeChanged(block_size_); + + if (old_sr != sample_rate_) + samplerateChanged(sample_rate_); +} + } diff --git a/ceammc/ext/src/lib/ceammc_sound_external.h b/ceammc/ext/src/lib/ceammc_sound_external.h index 472fc4b075..dc2ef7efa0 100644 --- a/ceammc/ext/src/lib/ceammc_sound_external.h +++ b/ceammc/ext/src/lib/ceammc_sound_external.h @@ -19,7 +19,7 @@ namespace ceammc { class SoundExternal : public BaseObject { - const static size_t MAX_SIG_NUM = 16; + const static size_t MAX_SIG_NUM = 64; private: size_t block_size_; @@ -31,6 +31,11 @@ class SoundExternal : public BaseObject { public: SoundExternal(const PdArgs& a); + + /** + * @brief setup signal processing + * @param sp - pointer to signals vector + */ virtual void setupDSP(t_signal** sp); /** @@ -75,6 +80,35 @@ class SoundExternal : public BaseObject { */ void dump() const override; + /** + * @brief return pointer to input blocks + */ + t_sample** inputBlocks() { return in_; } + + /** + * @brief return pointer to output blocks + */ + t_sample** outputBlocks() { return out_; } + + /** + * @brief override this to get block size change notification while setupDSP step + * @param bs - new block size + */ + virtual void blockSizeChanged(size_t bs); + + /** + * @brief override this to get samplerate change notification while setupDSP step + * @param sr - new sample rate + */ + virtual void samplerateChanged(size_t sr); + +protected: + /** + * @brief copy signals pointer + * @param sp + */ + void signalInit(t_signal** sp); + private: inline void _processBlock() { diff --git a/ceammc/ext/src/lib/ceammc_thread.cpp b/ceammc/ext/src/lib/ceammc_thread.cpp index fe237333fa..6f6505f573 100644 --- a/ceammc/ext/src/lib/ceammc_thread.cpp +++ b/ceammc/ext/src/lib/ceammc_thread.cpp @@ -65,7 +65,8 @@ ThreadExternalBase::ThreadExternalBase(const PdArgs& args, thread::Task* task) ThreadExternalBase::~ThreadExternalBase() { - waitStop(); + threadStop(); + threadWait(); } bool ThreadExternalBase::onThreadCommand(int code) @@ -93,12 +94,7 @@ void ThreadExternalBase::start() void ThreadExternalBase::stop() { - if (task_->stopRequested()) { - OBJ_DBG << "already stopping...."; - return; - } - - task_->stop(); + threadStop(); } bool ThreadExternalBase::isRunning() const @@ -110,7 +106,7 @@ bool ThreadExternalBase::isRunning() const return st != std::future_status::ready; } -void ThreadExternalBase::wait() +void ThreadExternalBase::threadWait() { if (!thread_result_.valid()) return; @@ -124,10 +120,20 @@ void ThreadExternalBase::wait() } } +void ThreadExternalBase::threadStop() +{ + if (task_->stopRequested()) { + OBJ_DBG << "already stopping...."; + return; + } + + task_->stop(); +} + void ThreadExternalBase::waitStop() { stop(); - wait(); + threadWait(); } thread::Task::Task(ThreadExternalBase* caller) @@ -247,7 +253,7 @@ ThreadPollClockExternal::ThreadPollClockExternal(const PdArgs& args, thread::Tas ThreadPollClockExternal::~ThreadPollClockExternal() { clock_.unset(); - waitStop(); + // waitStop() is called in ~ThreadExternalBase() } void ThreadPollClockExternal::start() @@ -285,7 +291,6 @@ ThreadPollPipeExternal::ThreadPollPipeExternal(const PdArgs& args, thread::Task* ThreadPollPipeExternal::~ThreadPollPipeExternal() { - waitStop(); } void ThreadPollPipeExternal::start() diff --git a/ceammc/ext/src/lib/ceammc_thread.h b/ceammc/ext/src/lib/ceammc_thread.h index 5319a0d748..3a88827584 100644 --- a/ceammc/ext/src/lib/ceammc_thread.h +++ b/ceammc/ext/src/lib/ceammc_thread.h @@ -11,7 +11,7 @@ #include "ceammc_object.h" #include "ceammc_pollfd.h" -#include "../../../extra/readerwriterqueue/readerwriterqueue.h" +#include "readerwriterqueue/readerwriterqueue.h" namespace ceammc { @@ -101,10 +101,13 @@ class ThreadExternalBase : public BaseObject { virtual bool onThreadCommand(int code); virtual void start(); virtual void stop(); + virtual void waitStop(); bool isRunning() const; - void wait(); - void waitStop(); + +protected: + void threadWait(); + void threadStop(); }; class ThreadPollPipeExternal : public ThreadExternalBase { @@ -127,6 +130,9 @@ class ThreadPollClockExternal : public ThreadExternalBase { ClockMemberFunction clock_; IntPropertyMin* poll_time_; + ThreadPollClockExternal(const ThreadPollPipeExternal&) = delete; + void operator=(const ThreadPollPipeExternal&) = delete; + public: ThreadPollClockExternal(const PdArgs& args, thread::Task* task); ~ThreadPollClockExternal(); diff --git a/ceammc/ext/src/lib/ceammc_ui.h b/ceammc/ext/src/lib/ceammc_ui.h index 8f93dc5e7f..5978c76de8 100644 --- a/ceammc/ext/src/lib/ceammc_ui.h +++ b/ceammc/ext/src/lib/ceammc_ui.h @@ -17,6 +17,9 @@ namespace ceammc { +class UIObject; +class UIDspObject; + static const char* DEFAULT_ACTIVE_COLOR = "0. 0.75 1. 1."; static const char* DEFAULT_BORDER_COLOR = "0.6 0.6 0.6 1."; static const char* DEFAULT_BACKGROUND_COLOR = "0.93 0.93 0.93 1."; @@ -51,6 +54,11 @@ enum MouseEvents { }; // clang-format on +enum class MouseEventsOutput { + DEFAULT_OFF, + DEFAULT_ON +}; + template class UIObjectFactory { std::string name_; @@ -65,6 +73,8 @@ class UIObjectFactory { typedef void (UI::*propListSet)(const AtomList&); typedef std::pair propertyFloatAccess; typedef std::pair propertyListAccess; + typedef std::is_base_of isControlObject; + typedef std::is_base_of isDSPObject; typedef std::unordered_map BangMethodMap; typedef std::unordered_map FloatMethodMap; @@ -92,8 +102,9 @@ class UIObjectFactory { return; } - eclass_guiinit(pd_class, flags); + cicmInit(); setupMethods(); + setupAttributes(); register_ui_external(&pd_class->c_class); } @@ -110,30 +121,16 @@ class UIObjectFactory { t_binbuf* d = binbuf_via_atoms(argc, argv); if (mem && d) { - try { - UI* x = new (mem) UI(); - - ebox_new(x->asEBox(), 0 | flags); - ebox_attrprocess_viabinbuf(x, d); - ebox_ready((t_ebox*)x); - binbuf_free(d); - - x->init(s, AtomList(argc, argv), use_presets); - return x; - } catch (std::exception& e) { - char buf[200]; - snprintf(buf, sizeof(buf) - 1, "%s", e.what()); - const char* class_name = pd_class->c_class.c_name->s_name; - pd_error(0, "[ceammc] can't create object [%s], %s", class_name, buf); - - binbuf_free(d); - return nullptr; - } catch (...) { - const char* class_name = pd_class->c_class.c_name->s_name; - pd_error(0, "[ceammc] can't create object [%s]", class_name); - binbuf_free(d); - return nullptr; - } + UI* x = new (mem) UI(); + + ebox_new(x->asEBox(), 0 | flags); + dspInit(x); + ebox_attrprocess_viabinbuf(x, d); + ebox_ready((t_ebox*)x); + binbuf_free(d); + + x->init(s, AtomList(argc, argv), use_presets); + return x; } return 0; @@ -147,19 +144,70 @@ class UIObjectFactory { } } - void setupMethods() + template + typename std::enable_if::type cicmInit() + { + eclass_dspinit(pd_class); + eclass_guiinit(pd_class, flags); + } + + template + typename std::enable_if::type cicmInit() + { + eclass_guiinit(pd_class, flags); + } + + template + static typename std::enable_if::type dspInit(UI* x) + { + x->dspInit(); + } + + template + static typename std::enable_if::type dspInit(UI*) + { + } + + template + typename std::enable_if::type setupMethods() { // clang-format off + eclass_addmethod(pd_class, UI_METHOD_PTR(dsp), "dsp", A_NULL, 0); eclass_addmethod(pd_class, UI_METHOD_PTR(paint), "paint", A_GIMME, 0); + eclass_addmethod(pd_class, UI_METHOD_PTR(notify), "notify", A_GIMME, 0); + eclass_addmethod(pd_class, UI_METHOD_PTR(okSize), "oksize", A_GIMME, 0); + eclass_addmethod(pd_class, UI_METHOD_PTR(onZoom), "onzoom", A_GIMME, 0); + eclass_addmethod(pd_class, UI_METHOD_PTR(setDrawParams), "getdrawparams", A_NULL, 0); + // clang-format on + } + template + typename std::enable_if::type setupMethods() + { + // clang-format off + eclass_addmethod(pd_class, UI_METHOD_PTR(paint), "paint", A_GIMME, 0); eclass_addmethod(pd_class, UI_METHOD_PTR(notify), "notify", A_GIMME, 0); eclass_addmethod(pd_class, UI_METHOD_PTR(okSize), "oksize", A_GIMME, 0); eclass_addmethod(pd_class, UI_METHOD_PTR(onZoom), "onzoom", A_GIMME, 0); eclass_addmethod(pd_class, UI_METHOD_PTR(setDrawParams), "getdrawparams", A_NULL, 0); - eclass_addmethod(pd_class, UI_METHOD_PTR(onPopup), "popup", A_GIMME, 0); // clang-format on } + static void dsp(UI* z, t_object* dsp, + short* count, double samplerate, long maxvectorsize, long flags) + { + z->dspOn(samplerate, maxvectorsize); + object_method(dsp, gensym("dsp_add"), z, UI_METHOD_PTR(dspProcess), 0, NULL); + } + + static void dspProcess(UI* z, t_object* dsp, + t_sample** ins, long n_ins, + t_sample** outs, long n_outs, + long sampleframes, long flags, void* up) + { + z->dspProcess(ins, n_ins, outs, n_outs, sampleframes); + } + void setupAttributes() { hideProperty("fontweight"); @@ -183,7 +231,7 @@ class UIObjectFactory { &UI::prop_color_label); // default - CLASS_ATTR_DEFAULT (pd_class, "size", 0, "45. 15."); + CLASS_ATTR_DEFAULT (pd_class, "size", "45. 15."); // clang-format on } @@ -197,16 +245,24 @@ class UIObjectFactory { eclass_addmethod(pd_class, UI_METHOD_PTR(storePreset), "store", A_GIMME, 0); eclass_addmethod(pd_class, UI_METHOD_PTR(clearPreset), "clear", A_GIMME, 0); - CLASS_ATTR_SYMBOL (pd_class, PROP_PRESET_NAME, 0, t_ebox, b_objpreset_id); - CLASS_ATTR_DEFAULT (pd_class, PROP_PRESET_NAME, 0, "(null)"); - CLASS_ATTR_SAVE (pd_class, PROP_PRESET_NAME, 0); - CLASS_ATTR_CATEGORY (pd_class, PROP_PRESET_NAME, 0, _("Basic")); - CLASS_ATTR_LABEL (pd_class, PROP_PRESET_NAME, 0, _("Preset Name")); + CLASS_ATTR_SYMBOL (pd_class, PROP_PRESET_NAME, t_ebox, b_objpreset_id); + CLASS_ATTR_DEFAULT (pd_class, PROP_PRESET_NAME, "(null)"); + CLASS_ATTR_SAVE (pd_class, PROP_PRESET_NAME); + CLASS_ATTR_CATEGORY (pd_class, PROP_PRESET_NAME, _("Basic")); + CLASS_ATTR_LABEL (pd_class, PROP_PRESET_NAME, _("Preset Name")); CLASS_ATTR_ACCESSORS(pd_class, PROP_PRESET_NAME, NULL, ebox_set_presetid); // clang-format on } + void usePopup() + { + // clang-format off + eclass_addmethod(pd_class, UI_METHOD_PTR(showPopup), "rightclick", A_GIMME, 0); + eclass_addmethod(pd_class, UI_METHOD_PTR(processPopup), "popup", A_GIMME, 0); + // clang-format on + } + void hideFontProps() { hideProperty("fontname"); @@ -272,6 +328,13 @@ class UIObjectFactory { eclass_addmethod(pd_class, UI_METHOD_PTR(mouseWheel), "mousewheel", A_GIMME, 0); } + void outputMouseEvents(MouseEventsOutput t = MouseEventsOutput::DEFAULT_OFF) + { + addBoolProperty("mouse_events", _("Output mouse events"), + t == MouseEventsOutput::DEFAULT_ON, + &UI::prop_mouse_events, _("Basic")); + } + void useKeys() { eclass_addmethod(pd_class, UI_METHOD_PTR(key), "key", A_GIMME, 0); @@ -308,6 +371,12 @@ class UIObjectFactory { eclass_addmethod(pd_class, UI_METHOD_PTR(onData), "list", A_GIMME, 0); } + void useDrawCallbacks() + { + eclass_addmethod(pd_class, UI_METHOD_PTR(create), ".create", A_CANT, 0); + eclass_addmethod(pd_class, UI_METHOD_PTR(erase), ".erase", A_CANT, 0); + } + void addMethod(const char* name, listMethodPtr m) { addMethod(gensym(name), m); @@ -341,18 +410,170 @@ class UIObjectFactory { eclass_addmethod(pd_class, reinterpret_cast(customMethodBang), name->s_name, A_GIMME, 0); } + /** + * @brief adds boolean property shown as toggle in properties dialog + * @param name - property name + * @param label - property display label + * @param def - default property value + * @param m - member pointer to property + * @param category - property category + */ + void addBoolProperty(const char* name, const char* label, bool def, int UI::*m, const char* category = "Misc") + { + eclass_new_attr_typed(pd_class, name, "int", 1, 0, offset(m)); + eclass_attr_label(pd_class, name, label); + eclass_attr_save(pd_class, name); + eclass_attr_paint(pd_class, name); + eclass_attr_default(pd_class, name, def ? "1" : "0"); + eclass_attr_style(pd_class, name, "onoff"); + eclass_attr_category(pd_class, name, category); + } + + /** + * @brief adds float property shown as number entry in property dialog + * @param name - property name + * @param label - property display label + * @param def - default property value + * @param m - member pointer to property + * @param category - property category + */ + void addFloatProperty(const char* name, const char* label, float def, float UI::*m, const char* category = "Misc") + { + char buf[32]; + snprintf(buf, 30, "%g", def); + + eclass_new_attr_typed(pd_class, name, "float", 1, 0, offset(m)); + eclass_attr_label(pd_class, name, label); + eclass_attr_save(pd_class, name); + eclass_attr_paint(pd_class, name); + eclass_attr_default(pd_class, name, buf); + eclass_attr_style(pd_class, name, "number"); + eclass_attr_category(pd_class, name, category); + } + + /** + * @brief adds integer property shown as integer spinbox entry in properties dialog + * @param name - property name + * @param label - property display label + * @param def - default property value + * @param m - member pointer to property + * @param category - property category + */ + void addIntProperty(const char* name, const char* label, int def, int UI::*m, const char* category = "Misc") + { + char buf[32]; + snprintf(buf, 30, "%d", def); + + eclass_new_attr_typed(pd_class, name, "int", 1, 0, offset(m)); + eclass_attr_label(pd_class, name, label); + eclass_attr_save(pd_class, name); + eclass_attr_paint(pd_class, name); + eclass_attr_default(pd_class, name, buf); + eclass_attr_style(pd_class, name, "number"); + eclass_attr_category(pd_class, name, category); + } + + /** + * @brief adds symbol enum property shown as dropout menu in properties dialog + * @param name - property name + * @param label - property display label + * @param def - default value + * @param m - member pointer to property + * @param items - list of items (space separated) "a b c" + * @param cat - category name + */ + void addMenuProperty(const char* name, const char* label, + const char* def, t_symbol* UI::*m, + const char* items, const char* cat = "Misc") + { + eclass_new_attr_typed(pd_class, name, "symbol", 1, 0, offset(m)); + eclass_attr_label(pd_class, name, label); + eclass_attr_save(pd_class, name); + eclass_attr_paint(pd_class, name); + eclass_attr_default(pd_class, name, def); + eclass_attr_style(pd_class, name, "menu"); + eclass_attr_category(pd_class, name, cat); + eclass_attr_itemlist(pd_class, name, items); + } + + /** + * @brief adds RGBA color property shown as color chooser in properties dialog + * @param name - property name + * @param label - property display label + * @param def - default value, like "1.0 0.5 0.3 1", in RGBA format + * @param m - member pointer to property + */ + void addColorProperty(const char* name, const char* label, const char* def, t_rgba UI::*m) + { + eclass_new_attr_typed(pd_class, name, "float", 4, 0, offset(m)); + eclass_attr_label(pd_class, name, label); + eclass_attr_save(pd_class, name); + eclass_attr_paint(pd_class, name); + eclass_attr_default(pd_class, name, def); + eclass_attr_style(pd_class, name, "color"); + eclass_attr_category(pd_class, name, "Colors"); + } + + /** + * @brief adds visible in dialog property with callbacks, but without member pointer + * @param name - property name + * @param label - property name + * @param def - default value + */ + void addVirtualProperty(const char* name, const char* label, const char* def, + AtomList (UI::*getter)() const, void (UI::*setter)(const AtomList&)) + { + eclass_new_attr_typed(pd_class, name, "symbol", 1, 0, 0); + eclass_attr_label(pd_class, name, label); + eclass_attr_save(pd_class, name); + eclass_attr_paint(pd_class, name); + eclass_attr_default(pd_class, name, def); + eclass_attr_accessor(pd_class, name, (t_err_method)listPropGetter, (t_err_method)listPropSetter); + prop_list_map[gensym(name)] = std::make_pair(getter, setter); + } + + /** + * @brief adds hidden float property with callbacks + * @param name - property name + * @param getter - member pointer to getter function + * @param setter - member pointer to setter function + */ + void addHiddenFloatCbProperty(const char* name, + float (UI::*getter)() const, + void (UI::*setter)(float)) + { + eclass_new_attr_typed(pd_class, name, "float", 1, 0, 0); + eclass_attr_invisible(pd_class, name); + setPropertyAccessor(name, getter, setter); + } + + /** + * @brief adds hidden list property with callbacks + * @param name - property name + * @param getter - member pointer to getter function + * @param setter - member pointer to setter function + */ + void addHiddenListCbProperty(const char* name, + AtomList (UI::*getter)() const, + void (UI::*setter)(const AtomList&)) + { + eclass_new_attr_typed(pd_class, name, "atom", 1, 0, 0); + eclass_attr_invisible(pd_class, name); + setPropertyAccessor(name, getter, setter); + } + void addProperty(const char* name, const char* label, float def, float UI::*m, const char* category = "Misc") { char buf[32]; snprintf(buf, 30, "%g", def); - eclass_new_attr_typed(pd_class, name, "float", 1, 0, 0, offset(m)); - eclass_attr_label(pd_class, name, 0, label); - eclass_attr_save(pd_class, name, 0); - eclass_attr_paint(pd_class, name, 0); - eclass_attr_default(pd_class, name, 0, buf); - eclass_attr_style(pd_class, name, 0, "number"); - eclass_attr_category(pd_class, name, 0, category); + eclass_new_attr_typed(pd_class, name, "float", 1, 0, offset(m)); + eclass_attr_label(pd_class, name, label); + eclass_attr_save(pd_class, name); + eclass_attr_paint(pd_class, name); + eclass_attr_default(pd_class, name, buf); + eclass_attr_style(pd_class, name, "number"); + eclass_attr_category(pd_class, name, category); } void addProperty(const char* name, const char* label, int def, int UI::*m, const char* category = "Misc") @@ -360,35 +581,35 @@ class UIObjectFactory { char buf[32]; snprintf(buf, 30, "%d", def); - eclass_new_attr_typed(pd_class, name, "int", 1, 0, 0, offset(m)); - eclass_attr_label(pd_class, name, 0, label); - eclass_attr_save(pd_class, name, 0); - eclass_attr_paint(pd_class, name, 0); - eclass_attr_default(pd_class, name, 0, buf); - eclass_attr_style(pd_class, name, 0, "number"); - eclass_attr_category(pd_class, name, 0, category); + eclass_new_attr_typed(pd_class, name, "int", 1, 0, offset(m)); + eclass_attr_label(pd_class, name, label); + eclass_attr_save(pd_class, name); + eclass_attr_paint(pd_class, name); + eclass_attr_default(pd_class, name, buf); + eclass_attr_style(pd_class, name, "number"); + eclass_attr_category(pd_class, name, category); } void addProperty(const char* name, const char* label, bool def, int UI::*m, const char* category = "Misc") { - eclass_new_attr_typed(pd_class, name, "int", 1, 0, 0, offset(m)); - eclass_attr_label(pd_class, name, 0, label); - eclass_attr_save(pd_class, name, 0); - eclass_attr_paint(pd_class, name, 0); - eclass_attr_default(pd_class, name, 0, def ? "1" : "0"); - eclass_attr_style(pd_class, name, 0, "onoff"); - eclass_attr_category(pd_class, name, 0, category); + eclass_new_attr_typed(pd_class, name, "int", 1, 0, offset(m)); + eclass_attr_label(pd_class, name, label); + eclass_attr_save(pd_class, name); + eclass_attr_paint(pd_class, name); + eclass_attr_default(pd_class, name, def ? "1" : "0"); + eclass_attr_style(pd_class, name, "onoff"); + eclass_attr_category(pd_class, name, category); } void addProperty(const char* name, const char* label, const char* def, t_rgba UI::*m) { - eclass_new_attr_typed(pd_class, name, "float", 4, 0, 0, offset(m)); - eclass_attr_label(pd_class, name, 0, label); - eclass_attr_save(pd_class, name, 0); - eclass_attr_paint(pd_class, name, 0); - eclass_attr_default(pd_class, name, 0, def); - eclass_attr_style(pd_class, name, 0, "color"); - eclass_attr_category(pd_class, name, 0, "Colors"); + eclass_new_attr_typed(pd_class, name, "float", 4, 0, offset(m)); + eclass_attr_label(pd_class, name, label); + eclass_attr_save(pd_class, name); + eclass_attr_paint(pd_class, name); + eclass_attr_default(pd_class, name, def); + eclass_attr_style(pd_class, name, "color"); + eclass_attr_category(pd_class, name, "Colors"); } void addSymbolProperty(const char* name, @@ -397,13 +618,13 @@ class UIObjectFactory { t_symbol* UI::*m, const char* category = "Misc") { - eclass_new_attr_typed(pd_class, name, "symbol", 1, 0, 0, offset(m)); - eclass_attr_label(pd_class, name, 0, label); - eclass_attr_save(pd_class, name, 0); - eclass_attr_paint(pd_class, name, 0); - eclass_attr_default(pd_class, name, 0, def); - eclass_attr_style(pd_class, name, 0, "entry"); - eclass_attr_category(pd_class, name, 0, category); + eclass_new_attr_typed(pd_class, name, "symbol", 1, 0, offset(m)); + eclass_attr_label(pd_class, name, label); + eclass_attr_save(pd_class, name); + eclass_attr_paint(pd_class, name); + eclass_attr_default(pd_class, name, def); + eclass_attr_style(pd_class, name, "entry"); + eclass_attr_category(pd_class, name, category); } void addPathProperty(const char* name, @@ -412,13 +633,13 @@ class UIObjectFactory { t_symbol* UI::*m, const char* category = "Misc") { - eclass_new_attr_typed(pd_class, name, "symbol", 1, 0, 0, offset(m)); - eclass_attr_label(pd_class, name, 0, label); - eclass_attr_save(pd_class, name, 0); - eclass_attr_paint(pd_class, name, 0); - eclass_attr_default(pd_class, name, 0, def); - eclass_attr_style(pd_class, name, 0, "path"); - eclass_attr_category(pd_class, name, 0, category); + eclass_new_attr_typed(pd_class, name, "symbol", 1, 0, offset(m)); + eclass_attr_label(pd_class, name, label); + eclass_attr_save(pd_class, name); + eclass_attr_paint(pd_class, name); + eclass_attr_default(pd_class, name, def); + eclass_attr_style(pd_class, name, "path"); + eclass_attr_category(pd_class, name, category); } void setPropertyMin(const char* name, float v) @@ -433,7 +654,7 @@ class UIObjectFactory { void setPropertyLabel(const char* name, const char* label) { - eclass_attr_label(pd_class, name, 0, label); + eclass_attr_label(pd_class, name, label); } void setPropertyRange(const char* name, float min, float max) @@ -442,9 +663,14 @@ class UIObjectFactory { setPropertyMax(name, max); } + void setPropertySave(const char* name, bool value = true) + { + eclass_attr_save(pd_class, name, value); + } + void setPropertyDefaultValue(const char* name, const char* def) { - eclass_attr_default(pd_class, name, 0, def); + eclass_attr_default(pd_class, name, def); } void setPropertyStep(const char* name, float step) @@ -454,12 +680,12 @@ class UIObjectFactory { void hideProperty(const char* name) { - eclass_attr_invisible(pd_class, name, 0); + eclass_attr_invisible(pd_class, name); } void showProperty(const char* name) { - eclass_attr_visible(pd_class, name, 0); + eclass_attr_visible(pd_class, name); } void setDefaultSize(int w, int h) @@ -467,20 +693,20 @@ class UIObjectFactory { char buf[32]; snprintf(buf, 30, "%d. %d.", w, h); - CLASS_ATTR_DEFAULT(pd_class, "size", 0, buf); + CLASS_ATTR_DEFAULT(pd_class, "size", buf); } void setPropertyCategory(const char* name, const char* cat_name) { - eclass_attr_category(pd_class, name, 0, cat_name); + eclass_attr_category(pd_class, name, cat_name); } void addProperty(const char* name, float (UI::*getter)() const, void (UI::*setter)(float)) { - eclass_new_attr_typed(pd_class, name, "float", 1, 0, 0, 0); - eclass_attr_invisible(pd_class, name, 0); + eclass_new_attr_typed(pd_class, name, "float", 1, 0, 0); + eclass_attr_invisible(pd_class, name); setPropertyAccessor(name, getter, setter); } @@ -488,8 +714,8 @@ class UIObjectFactory { AtomList (UI::*getter)() const, void (UI::*setter)(const AtomList&) = 0) { - eclass_new_attr_typed(pd_class, name, "atom", 1, 0, 0, 0); - eclass_attr_invisible(pd_class, name, 0); + eclass_new_attr_typed(pd_class, name, "atom", 1, 0, 0); + eclass_attr_invisible(pd_class, name); setPropertyAccessor(name, getter, setter); } @@ -497,62 +723,57 @@ class UIObjectFactory { const char* def, t_symbol* UI::*m, const char* items, const char* cat = "Misc") { - eclass_new_attr_typed(pd_class, name, "symbol", 1, 0, 0, offset(m)); - eclass_attr_label(pd_class, name, 0, label); - eclass_attr_save(pd_class, name, 0); - eclass_attr_paint(pd_class, name, 0); - eclass_attr_default(pd_class, name, 0, def); - eclass_attr_style(pd_class, name, 0, "menu"); - eclass_attr_category(pd_class, name, 0, cat); - eclass_attr_itemlist(pd_class, name, 0, items); + eclass_new_attr_typed(pd_class, name, "symbol", 1, 0, offset(m)); + eclass_attr_label(pd_class, name, label); + eclass_attr_save(pd_class, name); + eclass_attr_paint(pd_class, name); + eclass_attr_default(pd_class, name, def); + eclass_attr_style(pd_class, name, "menu"); + eclass_attr_category(pd_class, name, cat); + eclass_attr_itemlist(pd_class, name, items); } void addPropertyIntMenu(const char* name, const char* label, const char* def, int UI::*m, const char* items, const char* cat = "Misc") { - eclass_new_attr_typed(pd_class, name, "int", 1, 0, 0, offset(m)); - eclass_attr_label(pd_class, name, 0, label); - eclass_attr_save(pd_class, name, 0); - eclass_attr_paint(pd_class, name, 0); - eclass_attr_default(pd_class, name, 0, def); - eclass_attr_style(pd_class, name, 0, "menu"); - eclass_attr_category(pd_class, name, 0, cat); - eclass_attr_itemlist(pd_class, name, 0, items); - } - - void addVirtualProperty(const char* name, const char* label, const char* def, - AtomList (UI::*getter)() const, void (UI::*setter)(const AtomList&)) - { - eclass_new_attr_typed(pd_class, name, "symbol", 1, 0, 0, 0); - eclass_attr_label(pd_class, name, 0, label); - eclass_attr_save(pd_class, name, 0); - eclass_attr_paint(pd_class, name, 0); - eclass_attr_default(pd_class, name, 0, def); - eclass_attr_accessor(pd_class, name, (t_err_method)listPropGetter, (t_err_method)listPropSetter); - prop_list_map[gensym(name)] = std::make_pair(getter, setter); + eclass_new_attr_typed(pd_class, name, "int", 1, 0, offset(m)); + eclass_attr_label(pd_class, name, label); + eclass_attr_save(pd_class, name); + eclass_attr_paint(pd_class, name); + eclass_attr_default(pd_class, name, def); + eclass_attr_style(pd_class, name, "menu"); + eclass_attr_category(pd_class, name, cat); + eclass_attr_itemlist(pd_class, name, items); } void setPropertyAccessor(const char* name, float (UI::*getter)() const, void (UI::*setter)(float)) { - eclass_attr_accessor(pd_class, name, (t_err_method)floatPropGetter, (t_err_method)floatPropSetter); + t_err_method m = reinterpret_cast(setter != nullptr ? floatPropSetter : nullptr); + eclass_attr_accessor(pd_class, name, (t_err_method)floatPropGetter, m); prop_float_map[gensym(name)] = std::make_pair(getter, setter); } void setPropertyAccessor(const char* name, AtomList (UI::*getter)() const, void (UI::*setter)(const AtomList&)) { - eclass_attr_accessor(pd_class, name, (t_err_method)listPropGetter, (t_err_method)listPropSetter); + t_err_method m = reinterpret_cast(setter != nullptr ? listPropSetter : nullptr); + eclass_attr_accessor(pd_class, name, (t_err_method)listPropGetter, m); prop_list_map[gensym(name)] = std::make_pair(getter, setter); } - void setPropertySave(const char* name, bool value = true) + void setPropertyRedirect(const char* name) { - eclass_attr_save(pd_class, name, 0, value); + eclass_attr_redirect(pd_class, name, (t_gotfn)listPropRedirector); } - void setPropertyRedirect(const char* name) + void setPropertyUnits(const char* name, const char* value) { - eclass_attr_redirect(pd_class, name, (t_gotfn)listPropRedirector); + setPropertyUnits(gensym(name), gensym(value)); + } + + void setPropertyUnits(t_symbol* name, t_symbol* value) + { + eclass_attr_units(pd_class, name, value); } void addAlias(const char* name) @@ -566,6 +787,16 @@ class UIObjectFactory { z->paint(); } + static void create(UI* z) + { + z->create(); + } + + static void erase(UI* z) + { + z->erase(); + } + template static size_t offset(T UI::*m) { @@ -576,62 +807,91 @@ class UIObjectFactory { return v1 - v0; } + static void outputMouse(UI* z, t_symbol* s, bool value) + { + if (z->outputMouseEvents() && !z->outlets().empty()) { + t_atom a; + SETFLOAT(&a, value ? 1 : 0); + outlet_anything(z->outlets().front(), s, 1, &a); + } + } + static void mouseMove(UI* z, t_object* view, t_pt pt, long modifiers) { + static t_symbol* SYM = gensym("@mouse_move"); + updateMousePos(pt); + + outputMouse(z, SYM, true); z->onMouseMove(view, pt, modifiers); + outputMouse(z, SYM, false); } static void mouseDown(UI* z, t_object* view, t_pt pt, t_pt abs_pt, long modifiers) { + static t_symbol* SYM = gensym("@mouse_down"); + updateMousePos(pt); + + outputMouse(z, SYM, true); z->onMouseDown(view, pt, abs_pt, modifiers); + outputMouse(z, SYM, false); } static void mouseUp(UI* z, t_object* view, t_pt pt, long modifiers) { + static t_symbol* SYM = gensym("@mouse_up"); + updateMousePos(pt); + + outputMouse(z, SYM, true); z->onMouseUp(view, pt, modifiers); + outputMouse(z, SYM, false); } static void mouseDrag(UI* z, t_object* view, t_pt pt, long modifiers) { + static t_symbol* SYM = gensym("@mouse_drag"); + updateMousePos(pt); + + outputMouse(z, SYM, true); z->onMouseDrag(view, pt, modifiers); + outputMouse(z, SYM, false); } static void mouseLeave(UI* z, t_object* view, t_pt pt, long modifiers) { + static t_symbol* SYM = gensym("@mouse_leave"); + // invalidate mouse pointer coord on mouseLeave to prevent mouseWheel handle // when mouse is outside of widget - t_pt pos; - pos.x = std::numeric_limits::max(); - pos.y = pos.x; - updateMousePos(pos); + updateMousePos({std::numeric_limits::max(), std::numeric_limits::max()}); + outputMouse(z, SYM, true); z->onMouseLeave(view, pt, modifiers); + outputMouse(z, SYM, false); } static void mouseEnter(UI* z, t_object* view, t_pt pt, long modifiers) { + static t_symbol* SYM = gensym("@mouse_enter"); + updateMousePos(pt); + + outputMouse(z, SYM, true); z->onMouseEnter(view, pt, modifiers); + outputMouse(z, SYM, false); } - static void mouseWheel(UI* z, t_object* view, t_pt pt, long modifiers, double delta) + static void mouseWheel(UI* z, t_pt pt, long modifiers, float delta) { -#ifdef __APPLE__ - z->onMouseWheel(view, pt, modifiers, delta); -#else - z->onMouseWheel(view, mouse_pos_, modifiers, delta); -#endif + z->onMouseWheel(mouse_pos_, modifiers, delta); } static void updateMousePos(const t_pt& pt) { -#ifndef __APPLE__ mouse_pos_ = pt; -#endif } static void dblClick(UI* z, t_object* view, t_pt pt, long modifiers) @@ -679,9 +939,14 @@ class UIObjectFactory { z->onZoom(zoom); } - static void onPopup(UI* z, t_symbol* menu_name, long itemIdx) + static void processPopup(UI* z, t_symbol* menu_name, long itemIdx, t_pt rel_pos) { - z->onPopup(menu_name, itemIdx); + z->onPopup(menu_name, itemIdx, rel_pos); + } + + static void showPopup(UI* z, t_pt pos, t_pt abs_pos) + { + z->showPopup(pos, abs_pos); } static void onBang(UI* z) @@ -926,11 +1191,7 @@ class UIObjectFactory { static ListMethodMap list_map; static FloatPropertyMap prop_float_map; static ListPropertyMap prop_list_map; - - // trick to get valid mouse pointer coordinates on MouseWheel event on Linux and Windows -#ifndef __APPLE__ static t_pt mouse_pos_; -#endif }; template @@ -942,10 +1203,8 @@ bool UIObjectFactory::use_presets = false; template long UIObjectFactory::flags = 0; -#ifndef __APPLE__ template t_pt UIObjectFactory::mouse_pos_; -#endif template typename UIObjectFactory::BangMethodMap UIObjectFactory::bang_map; @@ -961,6 +1220,7 @@ typename UIObjectFactory::FloatPropertyMap UIObjectFactory::prop_float_m template typename UIObjectFactory::ListPropertyMap UIObjectFactory::prop_list_map; + } #endif // CEAMMC_NEW_GUI_H diff --git a/ceammc/ext/src/lib/ceammc_ui_dsp_object.cpp b/ceammc/ext/src/lib/ceammc_ui_dsp_object.cpp index 3644da293d..3aa4a1235f 100644 --- a/ceammc/ext/src/lib/ceammc_ui_dsp_object.cpp +++ b/ceammc/ext/src/lib/ceammc_ui_dsp_object.cpp @@ -12,8 +12,8 @@ * this file belongs to. *****************************************************************************/ #include "ceammc_ui_dsp_object.h" -#include "ceammc_dsp_ui.h" #include "ceammc_preset.h" +#include "ceammc_ui.h" #include "ceammc_cicm.h" #include "m_pd.h" @@ -74,13 +74,13 @@ UIDspObject::UIDspObject() : name_(&s_) , bg_layer_(asEBox(), gensym(BG_LAYER)) , old_preset_id_(s_null) - , cursor_(ECURSOR_LEFT_PTR) , samplerate_(44100) , blocksize_(0) , use_presets_(false) , prop_color_background(rgba_white) , prop_color_border(rgba_black) , prop_color_label(rgba_black) + , prop_mouse_events(0) { } @@ -211,7 +211,7 @@ void UIDspObject::onMouseEnter(t_object* view, const t_pt& pt, long modifiers) { } -void UIDspObject::onMouseWheel(t_object* view, const t_pt& pt, long modifiers, double delta) +void UIDspObject::onMouseWheel(const t_pt& pt, long modifiers, float delta) { } @@ -223,11 +223,24 @@ void UIDspObject::onPopup(t_symbol* menu_name, long item_idx) { } +void UIDspObject::showPopup(const t_pt& pt, const t_pt& abs_pt) +{ +} + +bool UIDspObject::outputMouseEvents() const +{ + return prop_mouse_events; +} + void UIDspObject::onPropChange(t_symbol* /*prop_name*/) { redrawBGLayer(); } +void UIDspObject::onZoom(t_float z) +{ +} + void UIDspObject::okSize(t_rect* newrect) { } @@ -400,17 +413,9 @@ float UIDspObject::zoom() const return ebox_getzoom(asEBox()); } -t_cursor UIDspObject::cursor() const -{ - return cursor_; -} - void UIDspObject::setCursor(t_cursor c) { - if (cursor_ != c) { - ebox_set_cursor(asEBox(), c); - cursor_ = c; - } + ebox_set_cursor(asEBox(), c); } void UIDspObject::presetInit() diff --git a/ceammc/ext/src/lib/ceammc_ui_dsp_object.h b/ceammc/ext/src/lib/ceammc_ui_dsp_object.h index a76f7905f4..473249166e 100644 --- a/ceammc/ext/src/lib/ceammc_ui_dsp_object.h +++ b/ceammc/ext/src/lib/ceammc_ui_dsp_object.h @@ -11,7 +11,8 @@ * contact the author of this file, or the owner of the project in which * this file belongs to. *****************************************************************************/ -#ifndef CEAMMC_UI_DSP_OBJECT_H +#include "ceammc_ui_object.h" +#ifdef CEAMMC_UI_DSP_OBJECT_H #define CEAMMC_UI_DSP_OBJECT_H #include "ceammc_atomlist.h" @@ -56,7 +57,6 @@ class UIDspObject : t_edspbox { std::unordered_set binded_signals_; t_symbol* name_; t_symbol* old_preset_id_; - t_cursor cursor_; t_float samplerate_; long blocksize_; bool use_presets_; @@ -68,6 +68,7 @@ class UIDspObject : t_edspbox { t_rgba prop_color_background; t_rgba prop_color_border; t_rgba prop_color_label; + int prop_mouse_events; public: UIDspObject(); @@ -82,7 +83,6 @@ class UIDspObject : t_edspbox { t_edspbox* asDspBox() const; t_object* asPdObject() const; t_pd* asPd() const; - t_outlet* createOutlet(); t_canvas* canvas() const; bool isPatchLoading() const; bool isPatchEdited() const; @@ -99,10 +99,10 @@ class UIDspObject : t_edspbox { void updateSize(); void resize(int w, int h); void onPropChange(t_symbol* prop_name); + void onZoom(t_float z); void okSize(t_rect* newrect); void setDrawParams(t_edrawparams* params); float zoom() const; - t_cursor cursor() const; void setCursor(t_cursor c); // user input @@ -113,9 +113,11 @@ class UIDspObject : t_edspbox { void onMouseDrag(t_object* view, const t_pt& pt, long modifiers); void onMouseLeave(t_object* view, const t_pt& pt, long modifiers); void onMouseEnter(t_object* view, const t_pt& pt, long modifiers); - void onMouseWheel(t_object* view, const t_pt& pt, long modifiers, double delta); + void onMouseWheel(const t_pt& pt, long modifiers, float delta); void onDblClick(t_object* view, const t_pt& pt, long modifiers); void onPopup(t_symbol* menu_name, long item_idx); + void showPopup(const t_pt& pt, const t_pt& abs_pt); + bool outputMouseEvents() const; // input void onBang(); @@ -162,6 +164,8 @@ class UIDspObject : t_edspbox { // outlets size_t numInlets() const; size_t numOutlets() const; + const std::vector& outlets() const { return outlets_; } + t_outlet* createOutlet(); // properties bool hasProperty(t_symbol* name) const; diff --git a/ceammc/ext/src/lib/ceammc_ui_object.cpp b/ceammc/ext/src/lib/ceammc_ui_object.cpp index 60cd767add..02af4660b7 100644 --- a/ceammc/ext/src/lib/ceammc_ui_object.cpp +++ b/ceammc/ext/src/lib/ceammc_ui_object.cpp @@ -5,42 +5,43 @@ namespace ceammc { -const char* UIObject::BG_LAYER = "background_layer"; +const char* UIObjectImpl::BG_LAYER = "background_layer"; #ifdef __APPLE__ -const char* UIObject::FONT_FAMILY = "Helvetica"; -const int UIObject::FONT_SIZE = 12; -const int UIObject::FONT_SIZE_SMALL = 8; +const char* UIObjectImpl::FONT_FAMILY = "Helvetica"; +const int UIObjectImpl::FONT_SIZE = 12; +const int UIObjectImpl::FONT_SIZE_SMALL = 8; #elif _WIN32 -const char* UIObject::FONT_FAMILY = "DejaVu Sans Mono"; -const int UIObject::FONT_SIZE = 9; -const int UIObject::FONT_SIZE_SMALL = 6; +const char* UIObjectImpl::FONT_FAMILY = "DejaVu Sans Mono"; +const int UIObjectImpl::FONT_SIZE = 9; +const int UIObjectImpl::FONT_SIZE_SMALL = 6; #else -const char* UIObject::FONT_FAMILY = "DejaVu Sans Mono"; -const int UIObject::FONT_SIZE = 9; -const int UIObject::FONT_SIZE_SMALL = 6; +const char* UIObjectImpl::FONT_FAMILY = "DejaVu Sans Mono"; +const int UIObjectImpl::FONT_SIZE = 9; +const int UIObjectImpl::FONT_SIZE_SMALL = 6; #endif -const char* UIObject::FONT_STYLE = "roman"; -const char* UIObject::FONT_WEIGHT = "normal"; -const char* UIObject::COLOR_ACTIVE = "#00C0FF"; +const char* UIObjectImpl::FONT_STYLE = "roman"; +const char* UIObjectImpl::FONT_WEIGHT = "normal"; +const char* UIObjectImpl::COLOR_ACTIVE = "#00C0FF"; -UIObject::PresetNameMap UIObject::presets_; +UIObjectImpl::PresetNameMap UIObjectImpl::presets_; -UIObject::UIObject() - : name_(&s_) - , bg_layer_(asEBox(), gensym(BG_LAYER)) +UIObjectImpl::UIObjectImpl(t_ebox* x) + : box_(x) + , name_(&s_) + , bg_layer_(box_, gensym(BG_LAYER)) , old_preset_id_(s_null) - , cursor_(ECURSOR_LEFT_PTR) , use_presets_(false) , prop_color_background(rgba_white) , prop_color_border(rgba_black) , prop_color_label(rgba_black) + , prop_mouse_events(0) { appendToLayerList(&bg_layer_); } -UIObject::~UIObject() +UIObjectImpl::~UIObjectImpl() { for (size_t i = 0; i < outlets_.size(); i++) outlet_free(outlets_[i]); @@ -49,17 +50,17 @@ UIObject::~UIObject() unbindAll(); } -void UIObject::appendToLayerList(UILayer* l) +void UIObjectImpl::appendToLayerList(UILayer* l) { layer_stack_.push_back(l); } -void UIObject::prependToLayerList(UILayer* l) +void UIObjectImpl::prependToLayerList(UILayer* l) { layer_stack_.insert(layer_stack_.begin(), l); } -void UIObject::invalidateLayer(UILayer* l) +void UIObjectImpl::invalidateLayer(UILayer* l) { bool found = false; for (UILayer* x : layer_stack_) { @@ -71,54 +72,104 @@ void UIObject::invalidateLayer(UILayer* l) } } -void UIObject::invalidateBox() +void UIObjectImpl::invalidateBox() +{ + ebox_invalidate_border(box_); + ebox_invalidate_io(box_); +} + +void UIObjectImpl::invalidateXlets() +{ + ebox_invalidate_io(box_); +} + +void UIObjectImpl::invalidateBorder() +{ + ebox_invalidate_border(box_); +} + +void UIObjectImpl::initPopupMenu(const std::string& n, std::initializer_list args) +{ + auto it = std::find_if(popup_menu_list_.begin(), popup_menu_list_.end(), [&n](const PopupMenuCallbacks& c) { return c.name() == n; }); + if (it != popup_menu_list_.end()) { + UI_ERR << "menu already exists: " << n; + return; + } + + popup_menu_list_.emplace_back(n, args); +} + +void UIObjectImpl::showDefaultPopupMenu(const t_pt& pt, const t_pt& abs_pt) +{ + if (popup_menu_list_.empty()) { + UI_ERR << "no default popup menu exists"; + return; + } + + UIPopupMenu menu(asEObj(), popup_menu_list_.front(), abs_pt, pt); +} + +void UIObjectImpl::showPopupMenu(const std::string& n, const t_pt& pt, const t_pt& abs_pt) { - ebox_invalidate_layer(asEBox(), s_eboxbd); - ebox_invalidate_layer(asEBox(), s_eboxio); + auto it = std::find_if(popup_menu_list_.begin(), popup_menu_list_.end(), [&n](const PopupMenuCallbacks& c) { return c.name() == n; }); + if (it == popup_menu_list_.end()) { + UI_ERR << "menu not found: " << n; + return; + } + + UIPopupMenu menu(asEObj(), *it, abs_pt, pt); } -t_ebox* UIObject::asEBox() const { return const_cast(this); } +t_eobj* UIObjectImpl::asEObj() const +{ + return &(box_->b_obj); +} -t_eobj* UIObject::asEObj() const +t_object* UIObjectImpl::asPdObject() const { - return &const_cast(this)->b_obj; + return &(box_->b_obj.o_obj); } -t_object* UIObject::asPdObject() const +t_gobj* UIObjectImpl::asGObj() const { - return &(asEBox()->b_obj.o_obj); + return &(box_->b_obj.o_obj.te_g); } -t_pd* UIObject::asPd() const +t_pd* UIObjectImpl::asPd() const { - return &asPdObject()->te_g.g_pd; + return &(asPdObject()->te_g.g_pd); } -t_outlet* UIObject::createOutlet() +t_outlet* UIObjectImpl::createOutlet() { t_outlet* out = outlet_new(asPdObject(), &s_list); outlets_.push_back(out); return out; } -t_canvas* UIObject::canvas() const +t_canvas* UIObjectImpl::canvas() const { - return eobj_getcanvas((void*)this); + return asEObj()->o_canvas; } -bool UIObject::isPatchLoading() const +bool UIObjectImpl::isPatchLoading() const { t_canvas* c = canvas(); return c ? c->gl_loading : false; } -bool UIObject::isPatchEdited() const +bool UIObjectImpl::isPatchEdited() const { t_canvas* c = canvas(); return c ? c->gl_edit : false; } -void UIObject::init(t_symbol* name, const AtomList& args, bool usePresets) +bool UIObjectImpl::isVisible() const +{ + return box_ && ebox_isvisible(box_); +} + +void UIObjectImpl::init(t_symbol* name, const AtomList& args, bool usePresets) { name_ = name; args_ = args; @@ -128,91 +179,105 @@ void UIObject::init(t_symbol* name, const AtomList& args, bool usePresets) presetInit(); } -t_symbol* UIObject::name() const +t_symbol* UIObjectImpl::name() const { return name_; } -t_symbol* UIObject::presetId() +t_symbol* UIObjectImpl::presetId() { - return b_objpreset_id; + return box_->b_objpreset_id; } -void UIObject::paint() +void UIObjectImpl::paint() { } -void UIObject::redraw() +void UIObjectImpl::create() { - ebox_redraw(asEBox()); } -void UIObject::redrawInnerArea() +void UIObjectImpl::erase() { - ebox_redraw_inner(asEBox()); } -void UIObject::redrawBGLayer() +void UIObjectImpl::redraw() +{ + ebox_redraw(box_); +} + +void UIObjectImpl::redrawInnerArea() +{ + ebox_redraw_inner(box_); +} + +void UIObjectImpl::redrawBGLayer() { bg_layer_.invalidate(); redraw(); } -void UIObject::updateSize() +void UIObjectImpl::updateSize() { - ebox_notify(asEBox(), s_size); + if (box_) + ebox_notify(box_, s_size); } -void UIObject::resize(int w, int h) +void UIObjectImpl::resize(int w, int h) { - b_rect.width = w; - b_rect.height = h; + box_->b_rect.width = w; + box_->b_rect.height = h; updateSize(); } -void UIObject::redrawLayer(UILayer& l) +void UIObjectImpl::redrawLayer(UILayer& l) { invalidateLayer(&l); redrawInnerArea(); } -void UIObject::onMouseMove(t_object* view, const t_pt& pt, long modifiers) +void UIObjectImpl::onMouseMove(t_object* view, const t_pt& pt, long modifiers) { } -void UIObject::onMouseUp(t_object* view, const t_pt& pt, long modifiers) +void UIObjectImpl::onMouseUp(t_object* view, const t_pt& pt, long modifiers) { } -void UIObject::onMouseDown(t_object* view, const t_pt& pt, const t_pt& abs_pt, long modifiers) +void UIObjectImpl::onMouseDown(t_object* view, const t_pt& pt, const t_pt& abs_pt, long modifiers) { } -void UIObject::onMouseDrag(t_object* view, const t_pt& pt, long modifiers) +void UIObjectImpl::onMouseDrag(t_object* view, const t_pt& pt, long modifiers) { } -void UIObject::onMouseLeave(t_object* view, const t_pt& pt, long modifiers) +void UIObjectImpl::onMouseLeave(t_object* view, const t_pt& pt, long modifiers) { } -void UIObject::onMouseEnter(t_object* view, const t_pt& pt, long modifiers) +void UIObjectImpl::onMouseEnter(t_object* view, const t_pt& pt, long modifiers) { } -void UIObject::onMouseWheel(t_object* view, const t_pt& pt, long modifiers, double delta) +void UIObjectImpl::onMouseWheel(const t_pt& pt, long modifiers, double delta) { } -void UIObject::onDblClick(t_object* view, const t_pt& pt, long modifiers) +void UIObjectImpl::onDblClick(t_object* view, const t_pt& pt, long modifiers) { } -void UIObject::okSize(t_rect* newrect) +bool UIObjectImpl::outputMouseEvents() const { + return prop_mouse_events; } -void UIObject::setDrawParams(t_edrawparams* params) +void UIObjectImpl::okSize(t_rect* newrect) +{ +} + +void UIObjectImpl::setDrawParams(t_edrawparams* params) { params->d_borderthickness = 1; params->d_bordercolor = prop_color_border; @@ -220,82 +285,97 @@ void UIObject::setDrawParams(t_edrawparams* params) params->d_labelcolor = prop_color_label; } -void UIObject::onZoom(t_float z) +void UIObjectImpl::onZoom(t_float z) { } -void UIObject::onPopup(t_symbol* menu_name, long item_idx) +void UIObjectImpl::onPopup(t_symbol* menu_name, long item_idx, const t_pt& pt) +{ + auto it = std::find_if(popup_menu_list_.begin(), popup_menu_list_.end(), [menu_name](const PopupMenuCallbacks& cb) { return cb.name() == menu_name->s_name; }); + if (it == popup_menu_list_.end()) { + UI_ERR << "popup menu not found: " << menu_name->s_name; + return; + } + + if (!it->process(menu_name, item_idx, pt)) { + UI_ERR << "popup menu item processing error: " << item_idx; + return; + } +} + +void UIObjectImpl::showPopup(const t_pt& pt, const t_pt& abs_pt) { + showDefaultPopupMenu(pt, abs_pt); } -void UIObject::onPropChange(t_symbol* name) +void UIObjectImpl::onPropChange(t_symbol* name) { redrawLayer(bg_layer_); } -void UIObject::write(const std::string& fname) +void UIObjectImpl::write(const std::string& fname) { } -void UIObject::read(const std::string& fname) +void UIObjectImpl::read(const std::string& fname) { } -void UIObject::m_custom(t_symbol* sel, const AtomList& lst) +void UIObjectImpl::m_custom(t_symbol* sel, const AtomList& lst) { } -void UIObject::onBang() +void UIObjectImpl::onBang() { } -void UIObject::onFloat(t_float f) +void UIObjectImpl::onFloat(t_float f) { } -void UIObject::onSymbol(t_symbol* s) +void UIObjectImpl::onSymbol(t_symbol* s) { } -void UIObject::onList(const AtomList& lst) +void UIObjectImpl::onList(const AtomList& lst) { } -void UIObject::onAny(t_symbol* s, const AtomList& lst) +void UIObjectImpl::onAny(t_symbol* s, const AtomList& lst) { LIB_ERR << "unknown message: " << s->s_name; } -void UIObject::onKey(int k, long modifiers) +void UIObjectImpl::onKey(int k, long modifiers) { } -void UIObject::onKeyFilter(int k, long modifiers) +void UIObjectImpl::onKeyFilter(int k, long modifiers) { } -void UIObject::onData(const DataPtr& ptr) +void UIObjectImpl::onData(const DataPtr& ptr) { } -void UIObject::onProperty(t_symbol* s, const AtomList& lst) +void UIObjectImpl::onProperty(t_symbol* s, const AtomList& lst) { } -void UIObject::loadPreset(size_t idx) +void UIObjectImpl::loadPreset(size_t idx) { } -void UIObject::storePreset(size_t idx) +void UIObjectImpl::storePreset(size_t idx) { } -void UIObject::clearPreset(size_t idx) +void UIObjectImpl::clearPreset(size_t idx) { PresetStorage::instance().clearValueAt(presetId(), idx); } -void UIObject::bangTo(size_t n) +void UIObjectImpl::bangTo(size_t n) { if (n >= outlets_.size()) return; @@ -303,7 +383,7 @@ void UIObject::bangTo(size_t n) outlet_bang(outlets_[n]); } -void UIObject::floatTo(size_t n, t_float f) +void UIObjectImpl::floatTo(size_t n, t_float f) { if (n >= outlets_.size()) return; @@ -311,7 +391,7 @@ void UIObject::floatTo(size_t n, t_float f) outlet_float(outlets_[n], f); } -void UIObject::symbolTo(size_t n, t_symbol* s) +void UIObjectImpl::symbolTo(size_t n, t_symbol* s) { if (n >= outlets_.size()) return; @@ -319,7 +399,7 @@ void UIObject::symbolTo(size_t n, t_symbol* s) outlet_symbol(outlets_[n], s); } -void UIObject::listTo(size_t n, const AtomList& lst) +void UIObjectImpl::listTo(size_t n, const AtomList& lst) { if (n >= outlets_.size()) return; @@ -327,7 +407,7 @@ void UIObject::listTo(size_t n, const AtomList& lst) outlet_list(outlets_[n], &s_list, lst.size(), lst.toPdData()); } -void UIObject::anyTo(size_t n, t_symbol* s, const AtomList& args) +void UIObjectImpl::anyTo(size_t n, t_symbol* s, const AtomList& args) { if (n >= outlets_.size()) return; @@ -335,7 +415,7 @@ void UIObject::anyTo(size_t n, t_symbol* s, const AtomList& args) outlet_anything(outlets_[n], s, args.size(), args.toPdData()); } -void UIObject::anyTo(size_t n, const AtomList& msg) +void UIObjectImpl::anyTo(size_t n, const AtomList& msg) { if (n >= outlets_.size()) return; @@ -349,7 +429,7 @@ void UIObject::anyTo(size_t n, const AtomList& msg) outlet_anything(outlets_[n], msg[0].asSymbol(), msg.size() - 1, msg.toPdData() + 1); } -void UIObject::dataTo(size_t n, const DataPtr& ptr) +void UIObjectImpl::dataTo(size_t n, const DataPtr& ptr) { if (n >= outlets_.size()) return; @@ -360,89 +440,81 @@ void UIObject::dataTo(size_t n, const DataPtr& ptr) ptr.asAtom().output(outlets_[n]); } -void UIObject::sendBang() +void UIObjectImpl::sendBang() { - t_pd* send = ebox_getsender(asEBox()); + t_pd* send = ebox_getsender(box_); if (send) pd_bang(send); } -void UIObject::send(t_float f) +void UIObjectImpl::send(t_float f) { - t_pd* send = ebox_getsender(asEBox()); + t_pd* send = ebox_getsender(box_); if (send) pd_float(send, f); } -void UIObject::send(t_symbol* s) +void UIObjectImpl::send(t_symbol* s) { - t_pd* send = ebox_getsender(asEBox()); + t_pd* send = ebox_getsender(box_); if (send) pd_symbol(send, s); } -void UIObject::send(const AtomList& lst) +void UIObjectImpl::send(const AtomList& lst) { - t_pd* send = ebox_getsender(asEBox()); + t_pd* send = ebox_getsender(box_); if (send) pd_list(send, &s_list, lst.size(), lst.toPdData()); } -void UIObject::send(t_symbol* s, const AtomList& lst) +void UIObjectImpl::send(t_symbol* s, const AtomList& lst) { - t_pd* send = ebox_getsender(asEBox()); + t_pd* send = ebox_getsender(box_); if (send) pd_typedmess(send, s, lst.size(), lst.toPdData()); } -t_rect UIObject::rect() const +t_rect UIObjectImpl::rect() const { - auto z = asEBox()->b_zoom; - auto r = asEBox()->b_rect; + auto z = box_->b_zoom; + auto r = box_->b_rect; r.width *= z; r.height *= z; return r; } -float UIObject::x() const { return asEBox()->b_rect.x; } +float UIObjectImpl::x() const { return box_->b_rect.x; } -float UIObject::y() const { return asEBox()->b_rect.y; } +float UIObjectImpl::y() const { return box_->b_rect.y; } -float UIObject::width() const { return asEBox()->b_rect.width * asEBox()->b_zoom; } +float UIObjectImpl::width() const { return box_->b_rect.width * box_->b_zoom; } -float UIObject::height() const { return asEBox()->b_rect.height * asEBox()->b_zoom; } +float UIObjectImpl::height() const { return box_->b_rect.height * box_->b_zoom; } -float UIObject::zoom() const +float UIObjectImpl::zoom() const { - return ebox_getzoom(asEBox()); + return ebox_getzoom(box_); } -t_cursor UIObject::cursor() const +void UIObjectImpl::setCursor(t_cursor c) { - return cursor_; + ebox_set_cursor(box_, c); } -void UIObject::setCursor(t_cursor c) -{ - if (cursor_ != c) { - ebox_set_cursor(asEBox(), c); - cursor_ = c; - } -} - -void UIObject::presetInit() +void UIObjectImpl::presetInit() { old_preset_id_ = s_null; if ((!presetId() || presetId() == s_null) && !isPatchLoading()) { t_symbol* name = genPresetName(name_); - b_objpreset_id = name; - bindPreset(b_objpreset_id); + box_->b_objpreset_id = name; + bindPreset(box_->b_objpreset_id); } else if (isPatchEdited() && !isPatchLoading()) { - PresetNameMap::iterator it = presets_.find(b_objpreset_id); + PresetNameMap::iterator it = presets_.find(box_->b_objpreset_id); if (it != presets_.end() && it->second > 1) { t_symbol* name = genPresetName(name_); - rebindPreset(b_objpreset_id, name); - b_objpreset_id = name; + rebindPreset(box_->b_objpreset_id, name); + box_->b_objpreset_id = name; } } @@ -450,7 +522,7 @@ void UIObject::presetInit() old_preset_id_ = presetId(); } -void UIObject::bindPreset(t_symbol* name) +void UIObjectImpl::bindPreset(t_symbol* name) { if (!name || name == s_null) return; @@ -464,7 +536,7 @@ void UIObject::bindPreset(t_symbol* name) acquirePresetName(name); } -void UIObject::unbindPreset(t_symbol* name) +void UIObjectImpl::unbindPreset(t_symbol* name) { if (!name || name == s_null) return; @@ -478,7 +550,7 @@ void UIObject::unbindPreset(t_symbol* name) releasePresetName(name); } -void UIObject::rebindPreset(t_symbol* from, t_symbol* to) +void UIObjectImpl::rebindPreset(t_symbol* from, t_symbol* to) { if (from == to) return; @@ -496,7 +568,7 @@ void UIObject::rebindPreset(t_symbol* from, t_symbol* to) acquirePresetName(to); } -void UIObject::handlePresetNameChange() +void UIObjectImpl::handlePresetNameChange() { if (old_preset_id_ != presetId()) { if (old_preset_id_ == s_null) @@ -507,23 +579,23 @@ void UIObject::handlePresetNameChange() rebindPreset(old_preset_id_, presetId()); // sync - old_preset_id_ = b_objpreset_id; + old_preset_id_ = box_->b_objpreset_id; } } -size_t UIObject::numInlets() const +size_t UIObjectImpl::numInlets() const { return obj_ninlets(asPdObject()); } -size_t UIObject::numOutlets() const +size_t UIObjectImpl::numOutlets() const { return outlets_.size(); } -bool UIObject::hasProperty(t_symbol* name) const +bool UIObjectImpl::hasProperty(t_symbol* name) const { - t_eclass* c = (t_eclass*)b_obj.o_obj.te_g.g_pd; + t_eclass* c = (t_eclass*)asPdObject()->te_g.g_pd; for (int i = 0; i < c->c_nattr; i++) { if (c->c_attr[i]->name == name) @@ -533,7 +605,7 @@ bool UIObject::hasProperty(t_symbol* name) const return false; } -bool UIObject::getProperty(t_symbol* name, t_float& f) const +bool UIObjectImpl::getProperty(t_symbol* name, t_float& f) const { int argc = 0; t_atom* argv = 0; @@ -558,7 +630,7 @@ bool UIObject::getProperty(t_symbol* name, t_float& f) const return false; } -bool UIObject::getProperty(t_symbol* name, AtomList& lst) const +bool UIObjectImpl::getProperty(t_symbol* name, AtomList& lst) const { int argc = 0; t_atom* argv = 0; @@ -573,7 +645,7 @@ bool UIObject::getProperty(t_symbol* name, AtomList& lst) const return false; } -void UIObject::setProperty(t_symbol* name, const AtomList& lst) +void UIObjectImpl::setProperty(t_symbol* name, const AtomList& lst) { eclass_attr_setter(asPdObject(), name, lst.size(), lst.toPdData()); } @@ -595,10 +667,10 @@ static void set_constrains(PropertyInfo& info, t_eattr* a) if (a->step) info.setStep(a->step); - if (a->clipped & 0x1) + if (a->clipped & E_CLIP_MIN) info.setMin(a->minimum); - if (a->clipped & 0x2) + if (a->clipped & E_CLIP_MAX) info.setMax(a->maximum); if (a->itemssize > 0) { @@ -619,6 +691,13 @@ static PropertyInfo attr_to_prop(t_eattr* a) static t_symbol* SYM_SYMBOL = &s_symbol; static t_symbol* SYM_COLOR = gensym("color"); static t_symbol* SYM_ATOM = gensym("atom"); + static t_symbol* SYM_UNIT_DB = gensym("db"); + static t_symbol* SYM_UNIT_MSEC = gensym("msec"); + static t_symbol* SYM_UNIT_SEC = gensym("sec"); + static t_symbol* SYM_UNIT_SAMP = gensym("samp"); + static t_symbol* SYM_UNIT_DEG = gensym("deg"); + static t_symbol* SYM_UNIT_RAD = gensym("rad"); + static t_symbol* SYM_UNIT_HZ = gensym("hz"); PropertyInfo res(std::string("@") + a->name->s_name, PropertyInfoType::VARIANT); @@ -696,15 +775,34 @@ static PropertyInfo attr_to_prop(t_eattr* a) } } + if (a->units != &s_) { + if (a->units == SYM_UNIT_DB) + res.setUnits(PropertyInfoUnits::DB); + else if (a->units == SYM_UNIT_MSEC) + res.setUnits(PropertyInfoUnits::MSEC); + else if (a->units == SYM_UNIT_SEC) + res.setUnits(PropertyInfoUnits::SEC); + else if (a->units == SYM_UNIT_SAMP) + res.setUnits(PropertyInfoUnits::SAMP); + else if (a->units == SYM_UNIT_DEG) + res.setUnits(PropertyInfoUnits::DEG); + else if (a->units == SYM_UNIT_RAD) + res.setUnits(PropertyInfoUnits::RAD); + else if (a->units == SYM_UNIT_HZ) + res.setUnits(PropertyInfoUnits::HZ); + else + std::cerr << "unknown unit: " << a->units->s_name << "\n"; + } + if (a->getter != 0) res.setReadonly(a->setter == 0); return res; } -std::vector UIObject::propsInfo() const +std::vector UIObjectImpl::propsInfo() const { - const t_eclass* c = reinterpret_cast(asEBox()->b_obj.o_obj.te_g.g_pd); + const t_eclass* c = reinterpret_cast(box_->b_obj.o_obj.te_g.g_pd); std::vector res; res.reserve(c->c_nattr); @@ -715,7 +813,7 @@ std::vector UIObject::propsInfo() const return res; } -void UIObject::bindTo(t_symbol* s) +void UIObjectImpl::bindTo(t_symbol* s) { if (binded_signals_.find(s) == binded_signals_.end()) { pd_bind(asPd(), s); @@ -723,7 +821,7 @@ void UIObject::bindTo(t_symbol* s) } } -void UIObject::unbindFrom(t_symbol* s) +void UIObjectImpl::unbindFrom(t_symbol* s) { if (binded_signals_.find(s) != binded_signals_.end()) { pd_unbind(asPd(), s); @@ -731,24 +829,24 @@ void UIObject::unbindFrom(t_symbol* s) } } -void UIObject::unbindAll() +void UIObjectImpl::unbindAll() { for (t_symbol* s : binded_signals_) { pd_unbind(asPd(), s); } } -float UIObject::fontSize() const +float UIObjectImpl::fontSize() const { - return ebox_getfontsize(asEBox()); + return ebox_getfontsize(box_); } -float UIObject::fontSizeZoomed() const +float UIObjectImpl::fontSizeZoomed() const { - return ebox_getzoomfontsize(asEBox()); + return ebox_getzoomfontsize(box_); } -t_symbol* UIObject::genPresetName(t_symbol* prefix) +t_symbol* UIObjectImpl::genPresetName(t_symbol* prefix) { char buf[64]; @@ -764,7 +862,7 @@ t_symbol* UIObject::genPresetName(t_symbol* prefix) return s_null; } -void UIObject::releasePresetName(t_symbol* s) +void UIObjectImpl::releasePresetName(t_symbol* s) { PresetNameMap::iterator it = presets_.find(s); if (it != presets_.end()) { @@ -785,7 +883,7 @@ void UIObject::releasePresetName(t_symbol* s) } } -void UIObject::acquirePresetName(t_symbol* s) +void UIObjectImpl::acquirePresetName(t_symbol* s) { presets_[s] += 1; @@ -794,7 +892,7 @@ void UIObject::acquirePresetName(t_symbol* s) #endif } -UIError::UIError(const UIObject* obj) +UIError::UIError(const UIObjectImpl* obj) : obj_(obj) { } @@ -837,7 +935,7 @@ UIError::~UIError() pdError(0, "ceammc", str()); } -UIDebug::UIDebug(const UIObject* obj) +UIDebug::UIDebug(const UIObjectImpl* obj) : obj_(obj) { } @@ -849,4 +947,41 @@ UIDebug::~UIDebug() else pdDebug("ceammc", str()); } + +UIObject::UIObject() + : UIObjectImpl(this) +{ +} + +UIDspObject::UIDspObject() + : UIObjectImpl(&e_box) + , samplerate_(44100) + , blocksize_(0) +{ +} + +void UIDspObject::dspInit() +{ +} + +void UIDspObject::dspSetup(size_t n_in, size_t n_out) +{ + std::vector outs(n_out, 0); + + eobj_dspsetup(asEBox(), n_in, n_out, 0, outs.data()); + std::copy(outs.begin(), outs.end(), std::back_inserter(outlets_)); +} + +void UIDspObject::dspOn(double samplerate, long blocksize) +{ + samplerate_ = samplerate; + blocksize_ = blocksize; +} + +void UIDspObject::dspProcess(t_sample** ins, long n_ins, + t_sample** outs, long n_outs, + long sampleframes) +{ +} + } diff --git a/ceammc/ext/src/lib/ceammc_ui_object.h b/ceammc/ext/src/lib/ceammc_ui_object.h index d54f1c468d..0217652900 100644 --- a/ceammc/ext/src/lib/ceammc_ui_object.h +++ b/ceammc/ext/src/lib/ceammc_ui_object.h @@ -6,6 +6,7 @@ #include "ceammc_data.h" #include "ceammc_property_info.h" +#include #include #include #include @@ -13,22 +14,22 @@ namespace ceammc { -class UIObject; +class UIObjectImpl; class UIError : public std::ostringstream { - const UIObject* obj_; + const UIObjectImpl* obj_; public: - UIError(const UIObject* obj = NULL); + UIError(const UIObjectImpl* obj = nullptr); ~UIError(); UIError& stream() { return *this; } }; class UIDebug : public std::ostringstream { - const UIObject* obj_; + const UIObjectImpl* obj_; public: - UIDebug(const UIObject* obj = NULL); + UIDebug(const UIObjectImpl* obj = nullptr); ~UIDebug(); UIDebug& stream() { return *this; } }; @@ -36,41 +37,50 @@ class UIDebug : public std::ostringstream { #define UI_ERR UIError(this).stream() #define UI_DBG UIDebug(this).stream() -class UIObject : t_ebox { +class UIObjectImpl { + t_ebox* const box_; AtomList args_; - std::vector outlets_; std::unordered_set binded_signals_; std::vector layer_stack_; t_symbol* name_; t_symbol* old_preset_id_; - t_cursor cursor_; bool use_presets_; protected: UILayer bg_layer_; + std::vector popup_menu_list_; + std::vector outlets_; + void appendToLayerList(UILayer* l); void prependToLayerList(UILayer* l); void invalidateLayer(UILayer* l); void invalidateBox(); + void invalidateXlets(); + void invalidateBorder(); + void initPopupMenu(const std::string& n, std::initializer_list args); + void showDefaultPopupMenu(const t_pt& pt, const t_pt& abs_pt); + void showPopupMenu(const std::string& n, const t_pt& pt, const t_pt& abs_pt); public: t_rgba prop_color_background; t_rgba prop_color_border; t_rgba prop_color_label; + int prop_mouse_events; public: - UIObject(); - ~UIObject(); + UIObjectImpl(t_ebox* x); + ~UIObjectImpl(); // CICM and Pd - t_ebox* asEBox() const; + t_ebox* asEBox() const { return box_; } t_eobj* asEObj() const; t_object* asPdObject() const; + t_gobj* asGObj() const; t_pd* asPd() const; - t_outlet* createOutlet(); t_canvas* canvas() const; bool isPatchLoading() const; bool isPatchEdited() const; + bool isVisible() const; const AtomList& args() const { return args_; } AtomList& args() { return args_; } @@ -79,6 +89,8 @@ class UIObject : t_ebox { t_symbol* presetId(); void paint(); + void create(); + void erase(); void redraw(); void redrawInnerArea(); @@ -94,13 +106,15 @@ class UIObject : t_ebox { void onMouseDrag(t_object* view, const t_pt& pt, long modifiers); void onMouseLeave(t_object* view, const t_pt& pt, long modifiers); void onMouseEnter(t_object* view, const t_pt& pt, long modifiers); - void onMouseWheel(t_object* view, const t_pt& pt, long modifiers, double delta); + void onMouseWheel(const t_pt& pt, long modifiers, double delta); void onDblClick(t_object* view, const t_pt& pt, long modifiers); + void onPopup(t_symbol* menu_name, long item_idx, const t_pt& pt); + void showPopup(const t_pt& pt, const t_pt& abs_pt); + bool outputMouseEvents() const; void okSize(t_rect* newrect); void setDrawParams(t_edrawparams* params); void onZoom(t_float z); - void onPopup(t_symbol* menu_name, long item_idx); void onPropChange(t_symbol* name); void write(const std::string& fname); void read(const std::string& fname); @@ -142,17 +156,20 @@ class UIObject : t_ebox { float height() const; float zoom() const; - t_cursor cursor() const; void setCursor(t_cursor c); + // presets void presetInit(); void bindPreset(t_symbol* name); void unbindPreset(t_symbol* name); void rebindPreset(t_symbol* from, t_symbol* to); void handlePresetNameChange(); + // xlets size_t numInlets() const; size_t numOutlets() const; + const std::vector& outlets() const { return outlets_; } + t_outlet* createOutlet(); bool hasProperty(t_symbol* name) const; bool getProperty(t_symbol* name, t_float& f) const; @@ -186,6 +203,28 @@ class UIObject : t_ebox { typedef std::unordered_map PresetNameMap; static PresetNameMap presets_; }; + +class UIObject : public t_ebox, public UIObjectImpl { +public: + UIObject(); +}; + +class UIDspObject : public t_edspbox, public UIObjectImpl { + t_float samplerate_; + long blocksize_; + +public: + UIDspObject(); + + // DSP + void dspInit(); + void dspSetup(size_t n_in, size_t n_out); + void dspOn(double samplerate, long blocksize); + void dspProcess(t_sample** ins, long n_ins, t_sample** outs, long n_outs, long sampleframes); + float samplerate() const { return samplerate_; } + long blocksize() const { return blocksize_; } +}; + } #endif // CEAMMC_UI_OBJECT_H diff --git a/ceammc/ext/src/lib/ceammc_window.h b/ceammc/ext/src/lib/ceammc_window.h index 69cb446fd1..40d1648bc0 100644 --- a/ceammc/ext/src/lib/ceammc_window.h +++ b/ceammc/ext/src/lib/ceammc_window.h @@ -14,7 +14,9 @@ #ifndef CEAMMC_WINDOW_H #define CEAMMC_WINDOW_H +#ifndef _USE_MATH_DEFINES #define _USE_MATH_DEFINES +#endif #include #include diff --git a/ceammc/ext/src/lib/cicm/Sources/cicm_common.tcl b/ceammc/ext/src/lib/cicm/Sources/cicm_common.tcl index e8f55efe75..9b5f1a7317 100644 --- a/ceammc/ext/src/lib/cicm/Sources/cicm_common.tcl +++ b/ceammc/ext/src/lib/cicm/Sources/cicm_common.tcl @@ -124,21 +124,26 @@ proc ceammc_category_toggle {id var_name_state controls} { } # create images -image create photo ceammc_image_category_opened -width 18 -height 18 \ - -data "R0lGODlhEgASAIABAAAAAP///yH5BAEKAAEALAAAAAASABIAAAIajI+py+0Po2RA1QauyY8H32UaBE7miabqmhQAOw==" -image create photo ceammc_image_category_closed -width 18 -height 18 \ - -data "R0lGODlhEgASAIABAAAAAP///yH5BAEKAAEALAAAAAASABIAAAIajI+py+0PA4gITGoszhdr30FfNIqhuKXqChUAOw==" - +if { $::tcl_version >= 8.6 } { + image create photo ceammc_image_category_opened -width 18 -height 18 \ + -data "iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAQAAAD8x0bcAAAAQklEQVR4AWMYDoAFnYcJNBnuMFjDebYMtxk0MBVJMtxg+MxgA1XyBciTBLMxlQElbfAoQShDKMGjDKYErzIgHFEAAGLzEOwIrN0jAAAAAElFTkSuQmCC" + image create photo ceammc_image_category_closed -width 18 -height 18 \ + -data "iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAQAAAD8x0bcAAAAPUlEQVR4AWMY9ICNoZCBlZAiH4b/DGsIK8sjTlkBccoqgcqW41fCy3CE4Q9DKO2UIIArw3egEoJAkmGIAABqKxDmokl7sAAAAABJRU5ErkJggg==" +} else { + image create photo ceammc_image_category_opened -width 18 -height 18 \ + -data "R0lGODlhEgASAPAAAAAAAAAAACH5BAEAAAAAIf8LSW1hZ2VNYWdpY2sOZ2FtbWE9MC40NTQ1NDUALAAAAAASABIAAAIahI+py+0Po2RB1RauyY8D32UaBE7miabqmhQAOw==" + image create photo ceammc_image_category_closed -width 18 -height 18 \ + -data "R0lGODlhEgASAPAAAAAAAAAAACH5BAEAAAAAIf8LSW1hZ2VNYWdpY2sOZ2FtbWE9MC40NTQ1NDUALAAAAAASABIAAAIYhI+py+0PowpBHmoNzjt2+D2hmJXmiToFADs=" +} # create font for categories in dialog ceammc_create_label_font_bold CICMCategoryFont # show tooltips -if { [catch package require tooltip] } { - namespace eval ::tooltip:: { - namespace export tooltip +if { [catch {package require tooltip} ] } { + proc ceammc_tooltip {id msg} {} +} { + proc ceammc_tooltip {id msg} { + tooltip::tooltip $id $msg } - - proc ::tooltip::tooltip {args} {} } - diff --git a/ceammc/ext/src/lib/cicm/Sources/cicm_common.tcl.h b/ceammc/ext/src/lib/cicm/Sources/cicm_common.tcl.h index 07d247c2fc..7e6a505df4 100644 --- a/ceammc/ext/src/lib/cicm/Sources/cicm_common.tcl.h +++ b/ceammc/ext/src/lib/cicm/Sources/cicm_common.tcl.h @@ -104,16 +104,24 @@ const char* cicm_common_tcl = " if {$v ne 0} { set $var_name_state 0 } { set $var_name_state 1 }\n" " ceammc_category_apply $id $var_name_state $controls\n" "}\n" -"image create photo ceammc_image_category_opened -width 18 -height 18 \\\n" -" -data \"R0lGODlhEgASAIABAAAAAP///yH5BAEKAAEALAAAAAASABIAAAIajI+py+0Po2RA1QauyY8H32UaBE7miabqmhQAOw==\"\n" -"image create photo ceammc_image_category_closed -width 18 -height 18 \\\n" -" -data \"R0lGODlhEgASAIABAAAAAP///yH5BAEKAAEALAAAAAASABIAAAIajI+py+0PA4gITGoszhdr30FfNIqhuKXqChUAOw==\"\n" +"if { $::tcl_version >= 8.6 } {\n" +" image create photo ceammc_image_category_opened -width 18 -height 18 \\\n" +" -data \"iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAQAAAD8x0bcAAAAQklEQVR4AWMYDoAFnYcJNBnuMFjDebYMtxk0MBVJMtxg+MxgA1XyBciTBLMxlQElbfAoQShDKMGjDKYErzIgHFEAAGLzEOwIrN0jAAAAAElFTkSuQmCC\"\n" +" image create photo ceammc_image_category_closed -width 18 -height 18 \\\n" +" -data \"iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAQAAAD8x0bcAAAAPUlEQVR4AWMY9ICNoZCBlZAiH4b/DGsIK8sjTlkBccoqgcqW41fCy3CE4Q9DKO2UIIArw3egEoJAkmGIAABqKxDmokl7sAAAAABJRU5ErkJggg==\"\n" +"} else {\n" +" image create photo ceammc_image_category_opened -width 18 -height 18 \\\n" +" -data \"R0lGODlhEgASAPAAAAAAAAAAACH5BAEAAAAAIf8LSW1hZ2VNYWdpY2sOZ2FtbWE9MC40NTQ1NDUALAAAAAASABIAAAIahI+py+0Po2RB1RauyY8D32UaBE7miabqmhQAOw==\"\n" +" image create photo ceammc_image_category_closed -width 18 -height 18 \\\n" +" -data \"R0lGODlhEgASAPAAAAAAAAAAACH5BAEAAAAAIf8LSW1hZ2VNYWdpY2sOZ2FtbWE9MC40NTQ1NDUALAAAAAASABIAAAIYhI+py+0PowpBHmoNzjt2+D2hmJXmiToFADs=\"\n" +"}\n" "ceammc_create_label_font_bold CICMCategoryFont\n" -"if { [catch package require tooltip] } {\n" -" namespace eval ::tooltip:: {\n" -" namespace export tooltip\n" +"if { [catch {package require tooltip} ] } {\n" +" proc ceammc_tooltip {id msg} {}\n" +"} {\n" +" proc ceammc_tooltip {id msg} {\n" +" tooltip::tooltip $id $msg\n" " }\n" -" proc ::tooltip::tooltip {args} {}\n" "}\n" ; #endif diff --git a/ceammc/ext/src/lib/cicm/Sources/cicm_common_bind.tcl b/ceammc/ext/src/lib/cicm/Sources/cicm_common_bind.tcl new file mode 100644 index 0000000000..0938039db8 --- /dev/null +++ b/ceammc/ext/src/lib/cicm/Sources/cicm_common_bind.tcl @@ -0,0 +1,94 @@ +proc ceammc_fix_macos_state {n} { if { $n > 256 } { return [expr $n & 0xFF ] } { return $n } } +proc ceammc_fix_win32_alt {n} { + if { $n & 131072 } { + incr n -131072 + set n [expr $n | 16] + } + return $n +} +proc ceammc_fix_win32_state {n} { + if { $n & 32 } { incr n -32 } + return [expr 0xFF & [ceammc_fix_win32_alt $n]] +} + +proc ceammc_fix_x11_state {n} {} + +proc ceammc_send_motion {obj x y mod} { + switch -- $::windowingsystem { + "aqua" { + # disable mouse dragging for buttons other then first + if { $mod < 512 } { pdsend "$obj mousemove $x $y [ceammc_fix_macos_state $mod]" } + } "win32" { + set mod [ceammc_fix_win32_alt $mod] + if { $mod < 512 } { pdsend "$obj mousemove $x $y [ceammc_fix_win32_state $mod]" } + } "default" { + pdsend "$obj mousemove $x $y $mod" + } + } +} + +proc ceammc_bind_mouse_down {id obj} { + switch -- $::windowingsystem { + "win32" { + bind $id [subst -nocommands {+pdsend "$obj mousedown %x %y %X %Y [ceammc_fix_win32_state %s]"}] + } "default" { + bind $id [subst {+pdsend "$obj mousedown %x %y %X %Y %s"}] + } + } +} + +# sends #obj mouseup X Y MOD +proc ceammc_bind_mouse_up {id obj} { + switch -- $::windowingsystem { + "aqua" { + bind $id [subst -nocommands {+pdsend "$obj mouseup %x %y [ceammc_fix_macos_state %s]"}] + } "win32" { + bind $id [subst -nocommands {+pdsend "$obj mouseup %x %y [ceammc_fix_win32_state %s]"}] + } "default" { + bind $id [subst {+pdsend "$obj mouseup %x %y %s"}] + } + } +} + +# sends #obj dblclick X Y MOD +proc ceammc_bind_mouse_double_click {id obj} { + switch -- $::windowingsystem { + "aqua" { + bind $id [subst -nocommands {+pdsend "$obj dblclick %x %y [ceammc_fix_macos_state %s]"}] + } "win32" { + bind $id [subst -nocommands {+pdsend "$obj dblclick %x %y [ceammc_fix_win32_state %s]"}] + } "default" { + bind $id [subst {+pdsend "$obj dblclick %x %y %s"}] + } + } +} + +# sends #obj mouseup X Y ABSX ABSY MOD +proc ceammc_bind_mouse_right_click {id obj} { + switch -- $::windowingsystem { + "aqua" { + bind $id [subst {+pdsend "$obj rightclick %x %y %X %Y %s"}] + bind $id [subst {+pdsend "$obj rightclick %x %y %X %Y %s"}] + } "win32" { + bind $id [subst -nocommands {+pdsend "$obj rightclick %x %y %X %Y [ceammc_fix_win32_state %s]"}] + } "default" { + bind $id [subst {+pdsend "$obj rightclick %x %y %X %Y %s"}] + } + } +} + +# sends #obj mouseup X Y DELTA MOD +proc ceammc_bind_mouse_wheel {id obj} { + switch -- $::windowingsystem { + "win32" { + bind $id [subst -nocommands {+pdsend "$obj mousewheel %x %y [expr %D / 120.0] [ceammc_fix_win32_state %s]"}] + } "default" { + bind $id [subst {+pdsend "$obj mousewheel %x %y %D %s"}] + } + } +} + +# sends #obj mousemove X Y MOD +proc ceammc_bind_mouse_move {id obj} { bind $id [subst {+ceammc_send_motion $obj %x %y %s}] } +proc ceammc_bind_mouse_enter {id obj} { bind $id [subst {+pdsend "$obj mouseenter"}] } +proc ceammc_bind_mouse_leave {id obj} { bind $id [subst {+pdsend "$obj mouseleave"}] } diff --git a/ceammc/ext/src/lib/cicm/Sources/cicm_common_bind.tcl.h b/ceammc/ext/src/lib/cicm/Sources/cicm_common_bind.tcl.h new file mode 100644 index 0000000000..d8cd33cb38 --- /dev/null +++ b/ceammc/ext/src/lib/cicm/Sources/cicm_common_bind.tcl.h @@ -0,0 +1,89 @@ +// this is autogenerated file: do not edit +// clang-format off +#ifndef cicm_common_bind_tcl_h_ +#define cicm_common_bind_tcl_h_ +const char* cicm_common_bind_tcl = +"proc ceammc_fix_macos_state {n} { if { $n > 256 } { return [expr $n & 0xFF ] } { return $n } }\n" +"proc ceammc_fix_win32_alt {n} {\n" +" if { $n & 131072 } {\n" +" incr n -131072\n" +" set n [expr $n | 16]\n" +" }\n" +" return $n\n" +"}\n" +"proc ceammc_fix_win32_state {n} {\n" +" if { $n & 32 } { incr n -32 }\n" +" return [expr 0xFF & [ceammc_fix_win32_alt $n]]\n" +"}\n" +"proc ceammc_fix_x11_state {n} {}\n" +"proc ceammc_send_motion {obj x y mod} {\n" +" switch -- $::windowingsystem {\n" +" \"aqua\" {\n" +" # disable mouse dragging for buttons other then first\n" +" if { $mod < 512 } { pdsend \"$obj mousemove $x $y [ceammc_fix_macos_state $mod]\" }\n" +" } \"win32\" {\n" +" set mod [ceammc_fix_win32_alt $mod]\n" +" if { $mod < 512 } { pdsend \"$obj mousemove $x $y [ceammc_fix_win32_state $mod]\" }\n" +" } \"default\" {\n" +" pdsend \"$obj mousemove $x $y $mod\"\n" +" }\n" +" }\n" +"}\n" +"proc ceammc_bind_mouse_down {id obj} {\n" +" switch -- $::windowingsystem {\n" +" \"win32\" {\n" +" bind $id [subst -nocommands {+pdsend \"$obj mousedown %x %y %X %Y [ceammc_fix_win32_state %s]\"}]\n" +" } \"default\" {\n" +" bind $id [subst {+pdsend \"$obj mousedown %x %y %X %Y %s\"}]\n" +" }\n" +" }\n" +"}\n" +"proc ceammc_bind_mouse_up {id obj} {\n" +" switch -- $::windowingsystem {\n" +" \"aqua\" {\n" +" bind $id [subst -nocommands {+pdsend \"$obj mouseup %x %y [ceammc_fix_macos_state %s]\"}]\n" +" } \"win32\" {\n" +" bind $id [subst -nocommands {+pdsend \"$obj mouseup %x %y [ceammc_fix_win32_state %s]\"}]\n" +" } \"default\" {\n" +" bind $id [subst {+pdsend \"$obj mouseup %x %y %s\"}]\n" +" }\n" +" }\n" +"}\n" +"proc ceammc_bind_mouse_double_click {id obj} {\n" +" switch -- $::windowingsystem {\n" +" \"aqua\" {\n" +" bind $id [subst -nocommands {+pdsend \"$obj dblclick %x %y [ceammc_fix_macos_state %s]\"}]\n" +" } \"win32\" {\n" +" bind $id [subst -nocommands {+pdsend \"$obj dblclick %x %y [ceammc_fix_win32_state %s]\"}]\n" +" } \"default\" {\n" +" bind $id [subst {+pdsend \"$obj dblclick %x %y %s\"}]\n" +" }\n" +" }\n" +"}\n" +"proc ceammc_bind_mouse_right_click {id obj} {\n" +" switch -- $::windowingsystem {\n" +" \"aqua\" {\n" +" bind $id [subst {+pdsend \"$obj rightclick %x %y %X %Y %s\"}]\n" +" bind $id [subst {+pdsend \"$obj rightclick %x %y %X %Y %s\"}]\n" +" } \"win32\" {\n" +" bind $id [subst -nocommands {+pdsend \"$obj rightclick %x %y %X %Y [ceammc_fix_win32_state %s]\"}]\n" +" } \"default\" {\n" +" bind $id [subst {+pdsend \"$obj rightclick %x %y %X %Y %s\"}]\n" +" }\n" +" }\n" +"}\n" +"proc ceammc_bind_mouse_wheel {id obj} {\n" +" switch -- $::windowingsystem {\n" +" \"win32\" {\n" +" bind $id [subst -nocommands {+pdsend \"$obj mousewheel %x %y [expr %D / 120.0] [ceammc_fix_win32_state %s]\"}]\n" +" } \"default\" {\n" +" bind $id [subst {+pdsend \"$obj mousewheel %x %y %D %s\"}]\n" +" }\n" +" }\n" +"}\n" +"proc ceammc_bind_mouse_move {id obj} { bind $id [subst {+ceammc_send_motion $obj %x %y %s}] }\n" +"proc ceammc_bind_mouse_enter {id obj} { bind $id [subst {+pdsend \"$obj mouseenter\"}] }\n" +"proc ceammc_bind_mouse_leave {id obj} { bind $id [subst {+pdsend \"$obj mouseleave\"}] }\n" +; +#endif +// clang-format on diff --git a/ceammc/ext/src/lib/cicm/Sources/ebox.cpp b/ceammc/ext/src/lib/cicm/Sources/ebox.cpp index 7ada193d3f..58d8646348 100644 --- a/ceammc/ext/src/lib/cicm/Sources/ebox.cpp +++ b/ceammc/ext/src/lib/cicm/Sources/ebox.cpp @@ -15,26 +15,23 @@ #include #include +#include #include #include #include #include #include #include -#include #include #include -int egraphics_smooth(); - std::string ceammc_raute2dollar(const char* s); t_symbol* ceammc_dollar2raute(const char* s); std::string ceammc_quote_str(const std::string& str, char q = '\''); -static std::array my_cursorlist = { +static std::array my_cursorlist = { "left_ptr", "center_ptr", - "sb_v_double_arrow", "plus", "hand2", "circle", @@ -42,9 +39,12 @@ static std::array my_cursorlist = { "bottom_side", "bottom_right_corner", "right_side", - "double_arrow", + "left_side", "exchange", - "xterm" + "xterm", + "fleur", + "sb_v_double_arrow", + "sb_h_double_arrow", }; static std::array my_capstylelist = { @@ -71,7 +71,6 @@ static const char* SYM_SW = "sw"; static const char* SYM_W = "w"; static const char* SYM_NW = "nw"; -static const char* SYM_SIZE = "size"; static const char* SYM_DEFAULT_FONT_FAMILY = "Helvetica"; static const char* SYM_BOLD = "bold"; static const char* SYM_NORMAL = "normal"; @@ -82,10 +81,10 @@ static const char* SYM_ALL_PROPS = "@*"; static const char* SYM_CHECKBUTTON = "checkbutton"; static const char* SYM_MENU = "menu"; static const char* SYM_COLOR = "color"; -static const char* SYM_ENTRY = "entry"; #define LABEL_TAG "label_%s" +static t_pt ebox_calc_pos(t_ebox* x, t_glist* glist); static void ebox_create_window(t_ebox* x, t_glist* glist); static void ebox_invalidate_all(t_ebox* x); static void ebox_draw_border(t_ebox* x); @@ -169,7 +168,7 @@ static t_symbol* label_draw_id(t_ebox* x) static void ebox_erase_label(t_ebox* x) { if (x->b_label != s_null) - sys_vgui("%s delete " LABEL_TAG "\n", label_draw_id(x)->s_name, x->b_canvas_id->s_name); + sys_vgui("%s delete " LABEL_TAG "\n", label_draw_id(x)->s_name, x->b_drawing_id->s_name); } static LabelAlign label_align_idx(t_symbol* s) @@ -406,26 +405,26 @@ static void ebox_create_label(t_ebox* x) rgba_to_hex_int(x->b_boxparameters.d_labelcolor), x->b_font.c_family->s_name, (int)(x->b_font.c_sizereal * x->b_zoom), - x->b_canvas_id->s_name); + x->b_drawing_id->s_name); } static void ebox_update_label_pos(t_ebox* x) { - if (ebox_isdrawable(x) && x->b_obj.o_canvas->gl_havewindow && x->b_visible && x->b_label != s_null) { + if (ebox_isvisible(x) && x->b_label != s_null) { auto enums = label_enums(x); t_symbol* cnv = label_draw_id(x); sys_vgui("%s itemconfigure " LABEL_TAG " -anchor %s -justify %s\n", cnv->s_name, - x->b_canvas_id->s_name, + x->b_drawing_id->s_name, ebox_label_anchor(x, std::get<0>(enums), std::get<1>(enums), std::get<2>(enums), std::get<3>(enums)), x->label_align->s_name); auto pt = ebox_label_coord(x, std::get<0>(enums), std::get<1>(enums), std::get<2>(enums), std::get<3>(enums)); sys_vgui("%s coords " LABEL_TAG " %d %d\n", cnv->s_name, - x->b_canvas_id->s_name, + x->b_drawing_id->s_name, pt.first, pt.second); } @@ -433,12 +432,12 @@ static void ebox_update_label_pos(t_ebox* x) static void ebox_update_label_font(t_ebox* x) { - if (ebox_isdrawable(x) && x->b_obj.o_canvas->gl_havewindow && x->b_visible && x->b_label != s_null) { + if (ebox_isvisible(x) && x->b_label != s_null) { t_symbol* cnv = label_draw_id(x); sys_vgui("%s itemconfigure " LABEL_TAG " -font {{%s} %d roman normal}\n", cnv->s_name, - x->b_canvas_id->s_name, + x->b_drawing_id->s_name, x->b_font.c_family->s_name, (int)(x->b_font.c_sizereal * x->b_zoom)); } @@ -447,17 +446,16 @@ static void ebox_update_label_font(t_ebox* x) void ebox_new(t_ebox* x, long flags) { x->b_flags = flags; - x->b_ready_to_draw = 0; + x->b_ready_to_draw = false; + x->b_have_window = false; x->b_number_of_layers = 0; x->b_layers = NULL; x->b_window_id = NULL; x->b_receive_id = s_null; x->b_send_id = s_null; x->b_objpreset_id = s_null; - x->b_visible = 1; + x->b_visible = true; x->b_zoom = 1; - x->b_smooth_method = egraphics_smooth(); - x->b_force_redraw = 0; x->b_label = s_null; x->label_align = s_value_label_align_left; @@ -466,6 +464,9 @@ void ebox_new(t_ebox* x, long flags) x->label_side = gensym("left"); x->label_margins[0] = 0; x->label_margins[1] = 0; + x->cursor = ECURSOR_LEFT_PTR; + + x->wis_canvas = nullptr; eobj_getclass(x)->c_widget.w_dosave = (t_typ_method)ebox_dosave; ebox_attrprocess_default(x); @@ -479,7 +480,7 @@ void ebox_ready(t_ebox* x) x->b_selected_inlet = -1; x->b_selected_outlet = -1; x->b_mouse_down = 0; - x->b_resize = 0; + x->b_resize = false; x->b_zoom = 1; x->b_boxparameters.d_borderthickness = 1; @@ -490,7 +491,7 @@ void ebox_ready(t_ebox* x) if (c->c_widget.w_getdrawparameters) c->c_widget.w_getdrawparameters(x, &x->b_boxparameters); - x->b_ready_to_draw = 1; + x->b_ready_to_draw = true; ebox_newzoom(x); } @@ -555,7 +556,10 @@ bool ebox_isdrawable(t_ebox* x) void ebox_set_cursor(t_ebox* x, t_cursor cursor) { - sys_vgui("%s configure -cursor %s\n", x->b_drawing_id->s_name, my_cursorlist[cursor]); + if (x->cursor != cursor) { + sys_vgui("%s configure -cursor %s\n", x->b_drawing_id->s_name, my_cursorlist[cursor]); + x->cursor = cursor; + } } void ebox_attrprocess_viatoms(void* x, int argc, t_atom* argv) @@ -598,39 +602,73 @@ void ebox_attrprocess_viabinbuf(void* x, t_binbuf* d) static void ebox_attrprocess_default(void* x) { - int i, j, k; - long defc = 0; - t_atom* defv = NULL; t_eclass* c = eobj_getclass(x); - for (i = 0; i < c->c_nattr; i++) { - if (c->c_attr[i]->defvals) { - defc = c->c_attr[i]->size; - defv = (t_atom*)calloc((unsigned long)defc, sizeof(t_atom)); - if (defc && defv) { - char check = 0; - const char* str_start = c->c_attr[i]->defvals->s_name; - char* str_end = nullptr; - for (j = 0; j < defc; j++) { - for (k = 0; k < (int)(strlen(str_start)); k++) { - if (isalpha(str_start[k])) - check = 1; - } - if (check || strpbrk(str_start, "<>()'\"")) { - atom_setsym(defv + j, gensym(str_start)); - } else { - float val = std::strtof(str_start, &str_end); - atom_setfloat(defv + j, val); - str_start = str_end; - } + for (int i = 0; i < c->c_nattr; i++) { + // skip if default is not set + if (!c->c_attr[i]->defvals) + continue; + + if (c->c_attr[i]->size < 1) { + pd_error(x, "[%s] invalid attribute size: %ld", c->c_class.c_name->s_name, c->c_attr[i]->size); + return; + } + + const size_t N = c->c_attr[i]->size; + t_atom defv[N]; + memset(defv, 0, sizeof(defv)); + + const std::string str = c->c_attr[i]->defvals->s_name; + const bool has_alpha = (bool)std::any_of(str.begin(), str.end(), ::isalpha); + const bool has_special = (str.find_first_of("<>()'\"") != std::string::npos); + const bool is_symbol = has_alpha || has_special; + + // list of numbers + if (!is_symbol) { + std::vector result; + boost::split(result, c->c_attr[i]->defvals->s_name, boost::is_any_of(" "), boost::token_compress_on); + + if (N != result.size()) { + pd_error(x, "[%s] mismatched size of default values: %d != %d", + c->c_class.c_name->s_name, (int)N, (int)result.size()); + return; + } + + for (size_t j = 0; j < N; j++) { + const char* s = result[j].c_str(); + char* e = nullptr; + float f = std::strtof(s, &e); + if (f == HUGE_VALF) { + pd_error(x, "[%s] value is too big: %s", c->c_class.c_name->s_name, s); + return; + } else if (f == 0 && e == s) { + pd_error(x, "[%s] can't parse value: %s", c->c_class.c_name->s_name, s); + return; + } else { + atom_setfloat(&defv[j], f); } - eobj_attr_setvalueof(x, c->c_attr[i]->name, (int)defc, defv); } - if (defv) { - free(defv); - defv = NULL; + } else { + // single symbol + if (N == 1) { + atom_setsym(&defv[0], gensym(str.c_str())); + } else { + // symbol list + std::vector result; + boost::split(result, c->c_attr[i]->defvals->s_name, boost::is_any_of(" "), boost::token_compress_on); + + if (N != result.size()) { + pd_error(x, "[%s] mismatched size of default values: %d != %d", + c->c_class.c_name->s_name, (int)N, (int)result.size()); + return; + } + + for (size_t j = 0; j < N; j++) + atom_setsym(&defv[j], gensym(result[j].c_str())); } } + + eobj_attr_setvalueof(x, c->c_attr[i]->name, (int)N, defv); } } @@ -650,8 +688,10 @@ static void ebox_paint(t_ebox* x) // prevent crash if called by some reason before calling // create_widget - if (!x->b_drawing_id) + if (!x->b_drawing_id) { + bug("ebox_paint"); return; + } sys_vgui("%s configure -bg #%6.6x\n", x->b_drawing_id->s_name, rgba_to_hex_int(x->b_boxparameters.d_boxfillcolor)); @@ -660,6 +700,7 @@ static void ebox_paint(t_ebox* x) sys_vgui("lower %s\n", x->b_drawing_id->s_name); t_eclass* c = eobj_getclass(x); + if (c->c_widget.w_paint) c->c_widget.w_paint(x); @@ -667,12 +708,12 @@ static void ebox_paint(t_ebox* x) if (x->label_inner) { // raise up sys_vgui("%s raise " LABEL_TAG " %s\n", - label_draw_id(x)->s_name, x->b_canvas_id->s_name, x->b_all_id->s_name); + label_draw_id(x)->s_name, x->b_drawing_id->s_name, x->b_all_id->s_name); } // update label color sys_vgui("%s itemconfigure " LABEL_TAG " -fill #%6.6x\n", - label_draw_id(x)->s_name, x->b_canvas_id->s_name, rgba_to_hex_int(x->b_boxparameters.d_labelcolor)); + label_draw_id(x)->s_name, x->b_drawing_id->s_name, rgba_to_hex_int(x->b_boxparameters.d_labelcolor)); } ebox_draw_border(x); @@ -683,8 +724,11 @@ static void ebox_paint(t_ebox* x) void ebox_wvis(t_gobj* z, t_glist* glist, int vis) { t_ebox* x = (t_ebox*)z; + x->wis_canvas = glist; + if (vis) { if (eobj_isbox(x) && x->b_ready_to_draw && x->b_visible) { + ebox_invalidate_all(x); ebox_create_window(x, glist); ebox_paint(x); @@ -698,23 +742,26 @@ void ebox_wvis(t_gobj* z, t_glist* glist, int vis) //! Widget void ebox_wdisplace(t_gobj* z, t_glist* glist, int dx, int dy) { -#ifdef _WINDOWS t_ebox* x = (t_ebox*)z; + +#ifdef _WINDOWS if (x->b_selected_box) { +#endif + + // prevents crash on early call + if (!x->b_canvas_id || !x->b_window_id) + return; + x->b_rect.x += dx; x->b_rect.y += dy; x->b_obj.o_obj.te_xpix += dx; x->b_obj.o_obj.te_ypix += dy; + + sys_vgui("%s move %s %d %d\n", x->b_canvas_id->s_name, x->b_window_id->s_name, dx, dy); ebox_move(x); - } -#else - t_ebox* x = (t_ebox*)z; - x->b_rect.x += dx; - x->b_rect.y += dy; - x->b_obj.o_obj.te_xpix += dx; - x->b_obj.o_obj.te_ypix += dy; - ebox_move(x); +#ifdef _WINDOWS + } #endif } @@ -758,24 +805,29 @@ static void ebox_tk_ids(t_ebox* x, t_canvas* canvas) x->b_all_id = gensym(buffer); } +static void ebox_bind_event(t_ebox* x, const char* name) +{ + sys_vgui("%s %s %s\n", name, x->b_drawing_id->s_name, x->b_obj.o_id->s_name); +} + static void ebox_bind_events(t_ebox* x) { t_eclass* c = (t_eclass*)eobj_getclass(x); - sys_vgui("bind %s {+pdsend {%s mousedown %%x %%y %%X %%Y %i}}\n", x->b_drawing_id->s_name, x->b_obj.o_id->s_name, EMOD_RIGHT); - sys_vgui("bind %s {+pdsend {%s mousedown %%x %%y %%X %%Y %i}}\n", x->b_drawing_id->s_name, x->b_obj.o_id->s_name, EMOD_RIGHT); - sys_vgui("bind %s {+pdsend {%s mousedown %%x %%y %%X %%Y %%s}}\n", x->b_drawing_id->s_name, x->b_obj.o_id->s_name); - sys_vgui("bind %s {+pdsend {%s mouseup %%x %%y %%s}}\n", x->b_drawing_id->s_name, x->b_obj.o_id->s_name); - sys_vgui("bind %s {+pdsend {%s mousemove %%x %%y %%s}}\n", x->b_drawing_id->s_name, x->b_obj.o_id->s_name); - sys_vgui("bind %s {+pdsend {%s mouseenter}}\n", x->b_drawing_id->s_name, x->b_obj.o_id->s_name); - sys_vgui("bind %s {+pdsend {%s mouseleave}}\n", x->b_drawing_id->s_name, x->b_obj.o_id->s_name); + ebox_bind_event(x, "ceammc_bind_mouse_down"); + ebox_bind_event(x, "ceammc_bind_mouse_up"); + + ebox_bind_event(x, "ceammc_bind_mouse_move"); + ebox_bind_event(x, "ceammc_bind_mouse_enter"); + ebox_bind_event(x, "ceammc_bind_mouse_leave"); + ebox_bind_event(x, "ceammc_bind_mouse_right_click"); + + if (c->c_widget.w_dblclick) + ebox_bind_event(x, "ceammc_bind_mouse_double_click"); + + if (c->c_widget.w_mousewheel) + ebox_bind_event(x, "ceammc_bind_mouse_wheel"); - if (c->c_widget.w_dblclick) { - sys_vgui("bind %s {+pdsend {%s dblclick %%x %%y %%s}}\n", x->b_drawing_id->s_name, x->b_obj.o_id->s_name); - } - if (c->c_widget.w_mousewheel) { - sys_vgui("bind %s {+pdsend {%s mousewheel %%x %%y %%D %%s}}\n", x->b_drawing_id->s_name, x->b_obj.o_id->s_name); - } if (c->c_widget.w_key || c->c_widget.w_keyfilter) { sys_vgui("bind %s {+pdsend {%s key %%k %%N}} \n", x->b_drawing_id->s_name, x->b_obj.o_id->s_name); } @@ -792,27 +844,40 @@ static void ebox_create_widget(t_ebox* x) (int)(x->b_rect.height * x->b_zoom + x->b_boxparameters.d_borderthickness * 2.)); } -static void ebox_create_window(t_ebox* x, t_glist* glist) +static t_pt ebox_calc_pos(t_ebox* x, t_glist* glist) { - x->b_force_redraw = 0; + t_pt pos = { 0, 0 }; + if (!glist->gl_havewindow) { - x->b_isinsubcanvas = 1; - x->b_rect.x = x->b_obj.o_obj.te_xpix; - x->b_rect.y = x->b_obj.o_obj.te_ypix; - - while (!glist->gl_havewindow) { - x->b_rect.x -= glist->gl_xmargin; - x->b_rect.y -= glist->gl_ymargin; - x->b_rect.x += glist->gl_obj.te_xpix; - x->b_rect.y += glist->gl_obj.te_ypix; + pos.x = x->b_obj.o_obj.te_xpix; + pos.y = x->b_obj.o_obj.te_ypix; + + while (glist && !glist->gl_havewindow) { + pos.x -= glist->gl_xmargin; + pos.y -= glist->gl_ymargin; + pos.x += glist->gl_obj.te_xpix; + pos.y += glist->gl_obj.te_ypix; glist = glist->gl_owner; } } else { - x->b_isinsubcanvas = 0; - x->b_rect.x = x->b_obj.o_obj.te_xpix; - x->b_rect.y = x->b_obj.o_obj.te_ypix; + pos.x = x->b_obj.o_obj.te_xpix; + pos.y = x->b_obj.o_obj.te_ypix; } + pos.x *= x->b_zoom; + pos.y *= x->b_zoom; + + return pos; +} + +static void ebox_create_window(t_ebox* x, t_glist* glist) +{ + x->b_have_window = false; + x->b_isinsubcanvas = !glist->gl_havewindow; + auto pos = ebox_calc_pos(x, glist); + x->b_rect.x = pos.x; + x->b_rect.y = pos.y; + ebox_tk_ids(x, glist_getcanvas(glist)); ebox_create_widget(x); ebox_bind_events(x); @@ -828,11 +893,18 @@ static void ebox_create_window(t_ebox* x, t_glist* glist) if (x->b_label != s_null) ebox_create_label(x); + + // create callback + t_eclass* c = eobj_getclass(x); + if (c->c_widget.w_create) + c->c_widget.w_create(x); + + x->b_have_window = true; } static char is_platform_control(long mod) { -#ifdef _WINDOWS +#ifdef __WIN32 return mod & EMOD_CTRL; #else return mod == EMOD_CMD; @@ -847,15 +919,7 @@ static char is_for_box(t_ebox* x, long mod) static long modifier_wrapper(long mod) { #ifdef __APPLE__ - if (mod >= 256) { - mod -= 256; - } #elif __WIN32 - - if (mod >= 131072) { - mod -= 131072; - mod |= EMOD_ALT; - } #else if (mod == 24) //right click mod = EMOD_CMD; @@ -894,11 +958,11 @@ void ebox_mouse_leave(t_ebox* x) } } -void ebox_mouse_move(t_ebox* x, t_symbol* s, int argc, t_atom* argv) +void ebox_mouse_move(t_ebox* x, t_floatarg xpos, t_floatarg ypos, t_floatarg mod) { - t_pt mouse; + const t_pt mouse { xpos, ypos }; t_atom av[2]; - long modif = modifier_wrapper((long)atom_getfloat(argv + 2)); + long modif = modifier_wrapper(mod); t_eclass* c = eobj_getclass(x); // mouse move @@ -907,16 +971,12 @@ void ebox_mouse_move(t_ebox* x, t_symbol* s, int argc, t_atom* argv) if (!(x->b_flags & EBOX_IGNORELOCKCLICK)) { ebox_set_cursor(x, ECURSOR_CENTER_PTR); if (c->c_widget.w_mousemove) { - mouse.x = atom_getfloat(argv); - mouse.y = atom_getfloat(argv + 1); c->c_widget.w_mousemove(x, x->b_obj.o_canvas, mouse, modif); } } else { ebox_set_cursor(x, ECURSOR_LEFT_PTR); } } else if (!x->b_isinsubcanvas) { - mouse.x = atom_getfloat(argv); - mouse.y = atom_getfloat(argv + 1); x->b_selected_outlet = -1; x->b_selected_inlet = -1; x->b_selected_item = EITEM_NONE; @@ -973,13 +1033,9 @@ void ebox_mouse_move(t_ebox* x, t_symbol* s, int argc, t_atom* argv) } else { // mouse drag if (is_for_box(x, modif)) { if (c->c_widget.w_mousedrag && !(x->b_flags & EBOX_IGNORELOCKCLICK)) { - mouse.x = atom_getfloat(argv); - mouse.y = atom_getfloat(argv + 1); c->c_widget.w_mousedrag(x, x->b_obj.o_canvas, mouse, modif); } } else if (!x->b_isinsubcanvas) { - mouse.x = atom_getfloat(argv); - mouse.y = atom_getfloat(argv + 1); if (x->b_selected_item == EITEM_NONE) { sys_vgui("eobj_canvas_motion %s 0\n", x->b_canvas_id->s_name); } else if (!(x->b_flags & EBOX_GROWNO)) { @@ -1011,9 +1067,9 @@ void ebox_mouse_move(t_ebox* x, t_symbol* s, int argc, t_atom* argv) atom_setfloat(av + 1, mouse.y); } } - x->b_resize = 1; + x->b_resize = true; mess3((t_pd*)x, s_attr_size, s_attr_size, (void*)2, (void*)av); - x->b_resize = 0; + x->b_resize = false; } } else { sys_vgui("eobj_canvas_motion %s 1\n", x->b_canvas_id->s_name); @@ -1021,24 +1077,15 @@ void ebox_mouse_move(t_ebox* x, t_symbol* s, int argc, t_atom* argv) } } -void ebox_mouse_down(t_ebox* x, t_symbol* s, int argc, t_atom* argv) +void ebox_mouse_down(t_ebox* x, t_floatarg xpos, t_floatarg ypos, t_floatarg absx, t_floatarg absy, t_floatarg mod) { - if (argc != 5) { - fprintf(stderr, "[ebox_mouse_down] warning: not enough arguments: %d", argc); - return; - } + long modif = modifier_wrapper(mod); - long modif = modifier_wrapper((long)atom_getfloat(argv + 4)); t_eclass* c = eobj_getclass(x); if (is_for_box(x, modif)) { if (c->c_widget.w_mousedown && !(x->b_flags & EBOX_IGNORELOCKCLICK)) { - t_pt mouse; - mouse.x = atom_getfloat(argv); - mouse.y = atom_getfloat(argv + 1); - - t_pt mouse_abs; - mouse_abs.x = atom_getfloat(argv + 2); - mouse_abs.y = atom_getfloat(argv + 3); + t_pt mouse { xpos, ypos }; + t_pt mouse_abs { absx, absy }; c->c_widget.w_mousedown(x, x->b_obj.o_canvas, mouse, mouse_abs, modif); } @@ -1059,24 +1106,22 @@ void ebox_mouse_down(t_ebox* x, t_symbol* s, int argc, t_atom* argv) x->b_rect_last = br; } } - x->b_mouse_down = 1; + x->b_mouse_down = true; } -void ebox_mouse_up(t_ebox* x, t_symbol* s, int argc, t_atom* argv) +void ebox_mouse_up(t_ebox* x, t_floatarg xpos, t_floatarg ypos, t_floatarg mod) { - t_pt mouse; - long modif = modifier_wrapper((long)atom_getfloat(argv + 2)); + long modif = modifier_wrapper(mod); t_eclass* c = eobj_getclass(x); if (is_for_box(x, modif)) { if (c->c_widget.w_mouseup && !(x->b_flags & EBOX_IGNORELOCKCLICK)) { - mouse.x = atom_getfloat(argv); - mouse.y = atom_getfloat(argv + 1); + t_pt mouse { xpos, ypos }; c->c_widget.w_mouseup(x, x->b_obj.o_canvas, mouse, modif); } } else { sys_vgui("eobj_canvas_up %s\n", x->b_canvas_id->s_name); } - x->b_mouse_down = 0; + x->b_mouse_down = false; } void ebox_mouse_dblclick(t_ebox* x, t_symbol* s, int argc, t_atom* argv) @@ -1091,20 +1136,46 @@ void ebox_mouse_dblclick(t_ebox* x, t_symbol* s, int argc, t_atom* argv) } } -void ebox_mouse_wheel(t_ebox* x, t_symbol* s, int argc, t_atom* argv) +static void ebox_open_help(t_ebox* x) +{ + t_eclass* c = eobj_getclass(x); + open_via_helppath(class_gethelpname(&c->c_class), class_gethelpdir(&c->c_class)); +} + +void ebox_mouse_rightclick(t_ebox* x, t_floatarg xpos, t_floatarg ypos, t_floatarg absx, t_floatarg absy, t_floatarg mod) { - t_pt mouse; - long modif = modifier_wrapper((long)atom_getfloat(argv + 3)); t_eclass* c = eobj_getclass(x); - if (is_for_box(x, modif) && c->c_widget.w_mousewheel && !(x->b_flags & EBOX_IGNORELOCKCLICK)) { - // map mouse window coords to widget coords - mouse.x = atom_getfloat(argv) - x->b_rect.x; - mouse.y = atom_getfloat(argv + 1) - x->b_rect.y; - double delta = atom_getfloat(argv + 2); - c->c_widget.w_mousewheel(x, x->b_obj.o_canvas, mouse, modif, delta); + const auto modif = modifier_wrapper(mod); + + // show help menu in all modes (edit/performance) with pressed Shift + if (modif & EMOD_SHIFT) + return ebox_open_help(x); + + // show object properties in all modes (edit/performance) with pressed Alt + if (modif & EMOD_ALT) + return ebox_properties(x, nullptr); + + if (x->b_obj.o_canvas->gl_edit) { + // in edit mode show standart Pd popup + sys_vgui("eobj_canvas_right %s\n", x->b_canvas_id->s_name); + } else { + // in performance mode if widget defines their own popup dialogs: show them + // or show standart Pd popup otherwise + if (c->c_widget.w_rightclick && !(x->b_flags & EBOX_IGNORELOCKCLICK)) + c->c_widget.w_rightclick(x, { xpos, ypos }, { absx, absy }); + else + sys_vgui("eobj_canvas_right %s\n", x->b_canvas_id->s_name); } } +void ebox_mouse_wheel(t_ebox* x, t_floatarg xpos, t_floatarg ypos, t_floatarg delta, t_floatarg mod) +{ + long modif = modifier_wrapper(mod); + t_eclass* c = eobj_getclass(x); + if (is_for_box(x, modif) && c->c_widget.w_mousewheel && !(x->b_flags & EBOX_IGNORELOCKCLICK)) + c->c_widget.w_mousewheel(x, { xpos, ypos }, modif, delta); +} + void ebox_key(t_ebox* x, t_symbol* s, int argc, t_atom* argv) { t_eclass* c = eobj_getclass(x); @@ -1184,15 +1255,28 @@ void ebox_pos(t_ebox* x, float newx, float newy) ebox_move(x); } -void ebox_vis(t_ebox* x, int vis) +void ebox_vis(t_ebox* x, t_float v) { - vis = (int)pd_clip_minmax(vis, 0, 1); + const bool vis = (v != 0); if (x->b_visible != vis) { - x->b_visible = (char)vis; - if (x->b_visible && x->b_ready_to_draw && x->b_obj.o_canvas) { - ebox_redraw(x); - } else { - ebox_erase(x); + x->b_visible = vis; + + if (ebox_isdrawable(x)) { + if (vis) { + + if (x->wis_canvas) { + auto pos = ebox_calc_pos(x, x->wis_canvas); + x->b_rect.x = pos.x; + x->b_rect.y = pos.y; + } + + ebox_invalidate_all(x); + ebox_create_window(x, x->wis_canvas); + + ebox_paint(x); + } else { + ebox_erase(x); + } } } } @@ -1247,26 +1331,49 @@ t_pd_err ebox_set_sendid(t_ebox* x, t_object* attr, int argc, t_atom* argv) t_pd_err ebox_set_label(t_ebox* x, t_object* attr, int argc, t_atom* argv) { if (argc && argv && atom_gettype(argv) == A_SYMBOL && atom_getsymbol(argv) != s_null) { + if (x->b_label == s_null) { - x->b_label = atom_getsymbol(argv); // create new label - if (ebox_isdrawable(x) && x->b_obj.o_canvas->gl_havewindow && x->b_visible) + x->b_label = atom_getsymbol(argv); + if (ebox_isvisible(x)) ebox_create_label(x); } else { - x->b_label = atom_getsymbol(argv); + // change label text + if (argc == 1) + x->b_label = atom_getsymbol(argv); + else { + auto to_str = [](const t_atom& a) -> std::string { + auto t = atom_gettype(&a); + if (t == A_SYMBOL) + return atom_getsymbol(&a)->s_name; + else if (t == A_FLOAT) { + return atom_gensym(&a)->s_name; + } else + return {}; + }; + + std::string res; + for (int j = 0; j < argc; j++) { + if (j != 0) + res.push_back(' '); + + res += to_str(argv[j]); + } + + x->b_label = gensym(res.c_str()); + } - if (ebox_isdrawable(x) && x->b_obj.o_canvas->gl_havewindow && x->b_visible) { + if (ebox_isvisible(x)) { sys_vgui("%s itemconfigure " LABEL_TAG " -text {%s}\n", label_draw_id(x)->s_name, - x->b_canvas_id->s_name, + x->b_drawing_id->s_name, x->b_label->s_name); } } } else { - if (x->b_label != s_null) { - if (ebox_isdrawable(x) && x->b_obj.o_canvas->gl_havewindow && x->b_visible) - ebox_erase_label(x); - } + // erase label + if (ebox_isvisible(x) && x->b_label != s_null) + ebox_erase_label(x); x->b_label = s_null; } @@ -1375,15 +1482,15 @@ t_pd_err ebox_set_label_position(t_ebox* x, t_object* attr, int argc, t_atom* ar if (argc && argv && atom_gettype(argv) == A_FLOAT) { int pos = (atom_getfloat(argv) != 0) ? 1 : 0; - if (x->label_inner != pos) { - const bool is_drawable = ebox_isdrawable(x); + if (x->label_inner != pos && x->b_label != s_null) { + const bool is_vis = ebox_isvisible(x); - if (is_drawable) + if (is_vis) ebox_erase_label(x); x->label_inner = pos; - if (is_drawable) + if (is_vis) ebox_create_label(x); } } @@ -1536,7 +1643,7 @@ bool ebox_notify(t_ebox* x, t_symbol* s) if (c->c_widget.w_oksize != NULL) c->c_widget.w_oksize(x, &x->b_rect); ebox_invalidate_all(x); - if (ebox_isdrawable(x)) { + if (ebox_isvisible(x)) { sys_vgui("%s itemconfigure %s -width %d -height %d\n", x->b_canvas_id->s_name, x->b_window_id->s_name, (int)(x->b_rect.width * x->b_zoom + x->b_boxparameters.d_borderthickness * 2.), (int)(x->b_rect.height * x->b_zoom + x->b_boxparameters.d_borderthickness * 2.)); @@ -1545,7 +1652,7 @@ bool ebox_notify(t_ebox* x, t_symbol* s) ebox_update_label_pos(x); } ebox_redraw(x); - } else if (s == s_pinned && ebox_isdrawable(x)) { + } else if (s == s_pinned && ebox_isvisible(x)) { if (x->b_pinned) { sys_vgui("lower %s\n", x->b_drawing_id->s_name); } else { @@ -1791,18 +1898,16 @@ void ebox_dialog(t_ebox* x, t_symbol* s, int argc, t_atom* argv) void ebox_redraw(t_ebox* x) { - if ((ebox_isdrawable(x) && x->b_obj.o_canvas->gl_havewindow) || x->b_force_redraw) { - x->b_force_redraw = 0; - ebox_invalidate_layer(x, s_eboxbd); - ebox_invalidate_layer(x, s_eboxio); + if (ebox_isvisible(x)) { + ebox_invalidate_border(x); + ebox_invalidate_io(x); ebox_paint(x); } } void ebox_redraw_inner(t_ebox* x) { - if ((ebox_isdrawable(x) && x->b_obj.o_canvas->gl_havewindow) || x->b_force_redraw) { - x->b_force_redraw = 0; + if (ebox_isvisible(x)) { ebox_paint(x); } } @@ -1829,6 +1934,7 @@ t_elayer* ebox_start_layer(t_ebox* x, t_symbol* name, float width, float height) graphic->e_line_width = 1.f; graphic->e_line_capstyle = ECAPSTYLE_BUTT; graphic->e_line_dashstyle = EDASHSTYLE_NONE; + graphic->e_line_smooth = ESMOOTH_NONE; graphic->e_color = 0; graphic->e_rect.x = 0.f; graphic->e_rect.y = 0.f; @@ -1882,6 +1988,7 @@ t_elayer* ebox_start_layer(t_ebox* x, t_symbol* name, float width, float height) graphic->e_line_width = 1.f; graphic->e_line_capstyle = ECAPSTYLE_BUTT; graphic->e_line_dashstyle = EDASHSTYLE_NONE; + graphic->e_line_smooth = ESMOOTH_NONE; graphic->e_color = 0; graphic->e_rect.x = 0.f; graphic->e_rect.y = 0.f; @@ -1934,6 +2041,16 @@ t_pd_err ebox_invalidate_layer(t_ebox* x, t_symbol* name) return 0; } +t_pd_err ebox_invalidate_io(t_ebox* x) +{ + return ebox_invalidate_layer(x, s_eboxio); +} + +t_pd_err ebox_invalidate_border(t_ebox* x) +{ + return ebox_invalidate_layer(x, s_eboxbd); +} + static void ebox_do_paint_rect(t_elayer* g, t_ebox* x, t_egobj const* gobj, float x_p, float y_p) { t_pt const* pt = gobj->e_points; @@ -2022,10 +2139,11 @@ t_pd_err ebox_paint_layer(t_ebox* x, t_symbol* name, float x_p, float y_p) gobj->e_color, g->e_id->s_name, x->b_all_id->s_name); } else { sprintf(header, "%s create line ", x->b_drawing_id->s_name); - sprintf(bottom, "-fill #%6.6x -width %.1f -capstyle %s %s -tags { %s %s }\n", + sprintf(bottom, "-fill #%6.6x -width %.1f -capstyle %s %s %s -tags { %s %s }\n", gobj->e_color, gobj->e_width, my_capstylelist[gobj->e_capstyle], my_dashstylelist[gobj->e_dashstyle], + gobj->e_smooth == ESMOOTH_NONE ? "" : "-smooth true", g->e_id->s_name, x->b_all_id->s_name); } @@ -2162,8 +2280,6 @@ static void ebox_draw_iolets(t_ebox* x) egraphics_set_color_hex(g, STYLE_IEM_BORDER_COLOR); egraphics_rectangle(g, pos_x_inlet, 0, XW, (is_sig) ? XSIGH : XCTRLH); - - egraphics_stroke_preserve(g); egraphics_fill(g); } @@ -2184,8 +2300,6 @@ static void ebox_draw_iolets(t_ebox* x) } egraphics_rectangle(g, pos_x_outlet, BOX_H - (outlet_h + 1) + bdsize * 2, XW, outlet_h); - - egraphics_stroke_preserve(g); egraphics_fill(g); } } @@ -2213,12 +2327,20 @@ static void layers_erase(t_ebox* x) static void ebox_erase(t_ebox* x) { - if (x->b_obj.o_canvas && glist_isvisible(x->b_obj.o_canvas) && x->b_obj.o_canvas->gl_havewindow) { - ebox_erase_label(x); - // prevent double destroy - x->b_label = s_null; + if (x->b_obj.o_canvas && glist_isvisible(x->b_obj.o_canvas) && x->b_have_window) { + if (x->b_obj.o_canvas->gl_havewindow) { + // erase callback + t_eclass* c = eobj_getclass(x); + if (c->c_widget.w_erase) + c->c_widget.w_erase(x); + + ebox_erase_label(x); + } + sys_vgui("destroy %s \n", x->b_drawing_id->s_name); + x->b_have_window = false; } + if (x->b_layers) { for (long i = 0; i < x->b_number_of_layers; i++) elayer_free_content(x->b_layers[i]); @@ -2231,7 +2353,7 @@ static void ebox_erase(t_ebox* x) static void ebox_select(t_ebox* x) { - if (glist_isvisible(x->b_obj.o_canvas)) { + if (ebox_isvisible(x)) { int color = (x->b_selected_box == EITEM_OBJ) ? rgba_to_hex_int(rgba_blue) : rgba_to_hex_int(x->b_boxparameters.d_bordercolor); @@ -2243,7 +2365,13 @@ static void ebox_select(t_ebox* x) static void ebox_move(t_ebox* x) { - if (glist_isvisible(x->b_obj.o_canvas)) { + if (ebox_isvisible(x)) { + if (x->wis_canvas) { + auto pos = ebox_calc_pos(x, x->wis_canvas); + x->b_rect.x = pos.x; + x->b_rect.y = pos.y; + } + sys_vgui("%s coords %s %d %d\n", x->b_canvas_id->s_name, x->b_window_id->s_name, (int)(x->b_rect.x - x->b_boxparameters.d_borderthickness), (int)(x->b_rect.y - x->b_boxparameters.d_borderthickness)); @@ -2251,6 +2379,7 @@ static void ebox_move(t_ebox* x) if (x->b_label != s_null) ebox_update_label_pos(x); } + canvas_fixlinesfor(glist_getcanvas(x->b_obj.o_canvas), (t_text*)x); } @@ -2322,3 +2451,8 @@ void ebox_free_layer(t_elayer* l) elayer_free_content(*l); free(l); } + +bool ebox_isvisible(t_ebox* x) +{ + return x && ebox_isdrawable(x) && x->b_obj.o_canvas->gl_havewindow && x->b_have_window && x->b_visible; +} diff --git a/ceammc/ext/src/lib/cicm/Sources/ebox.h b/ceammc/ext/src/lib/cicm/Sources/ebox.h index c211091df4..109767fc85 100644 --- a/ceammc/ext/src/lib/cicm/Sources/ebox.h +++ b/ceammc/ext/src/lib/cicm/Sources/ebox.h @@ -100,7 +100,7 @@ float ebox_getzoomfontsize(t_ebox* x); t_pd* ebox_getsender(t_ebox* x); /*! - * \fn char ebox_isdrawable(t_ebox* x) + * \fn bool ebox_isdrawable(t_ebox* x) * \brief Retrieves if a t_ebox is drawable. * \details Checks several things that ensure that the t_ebox can be drawn; * \param x The t_ebox pointer. @@ -108,6 +108,12 @@ t_pd* ebox_getsender(t_ebox* x); */ bool ebox_isdrawable(t_ebox* x); +/** + * @brief Check if a t_ebox is drawable and visible + * @param x The t_ebox pointer + */ +bool ebox_isvisible(t_ebox* x); + /*! * \fn void ebox_attrprocess_viabinbuf(void *x, t_binbuf *d) * \brief Changes the attributes with a binbuf. @@ -208,6 +214,9 @@ t_pd_err ebox_paint_layer(t_ebox* x, t_symbol* name, float x_p, float y_p); */ t_pd_err ebox_invalidate_layer(t_ebox* x, t_symbol* name); +t_pd_err ebox_invalidate_io(t_ebox* x); +t_pd_err ebox_invalidate_border(t_ebox* x); + /** @} */ //! @cond @@ -231,34 +240,31 @@ void ebox_mouse_leave(t_ebox* x); /* * \memberof ebox * \param x The ebox pointer - * \param s The message selector - * \param argc The size of the array of atoms - * \param argv The array of atoms - * \return Nothing + * \param xpos relative mouse x-coord + * \param ypos relative mouse y-coord + * \param mod keyboard modifiers */ -void ebox_mouse_move(t_ebox* x, t_symbol* s, int argc, t_atom* argv); +void ebox_mouse_move(t_ebox* x, t_floatarg xpos, t_floatarg ypos, t_floatarg mod); //! The mouse up method called by tcl/tk (PRIVATE) /* * \memberof ebox * \param x The ebox pointer - * \param s The message selector - * \param argc The size of the array of atoms - * \param argv The array of atoms - * \return Nothing + * \param xpos relative mouse x-coord + * \param ypos relative mouse y-coord + * \param mod keyboard modifiers */ -void ebox_mouse_up(t_ebox* x, t_symbol* s, int argc, t_atom* argv); +void ebox_mouse_up(t_ebox* x, t_floatarg xpos, t_floatarg ypos, t_floatarg mod); //! The mouse down method called by tcl/tk (PRIVATE) /* * \memberof ebox * \param x The ebox pointer - * \param s The message selector - * \param argc The size of the array of atoms - * \param argv The array of atoms - * \return Nothing + * \param xpos relative mouse x-coord + * \param ypos relative mouse y-coord + * \param mod keyboard modifiers */ -void ebox_mouse_down(t_ebox* x, t_symbol* s, int argc, t_atom* argv); +void ebox_mouse_down(t_ebox* x, t_floatarg xpos, t_floatarg ypos, t_floatarg absx, t_floatarg absy, t_floatarg mod); //! The mouse double click method called by tcl/tk (PRIVATE) /* @@ -270,17 +276,18 @@ void ebox_mouse_down(t_ebox* x, t_symbol* s, int argc, t_atom* argv); * \return Nothing */ void ebox_mouse_dblclick(t_ebox* x, t_symbol* s, int argc, t_atom* argv); +void ebox_mouse_rightclick(t_ebox* x, t_floatarg xpos, t_floatarg ypos, t_floatarg absx, t_floatarg absy, t_floatarg mod); //! The mouse wheel method called by tcl/tk (PRIVATE) /* * \memberof ebox * \param x The ebox pointer - * \param s The message selector - * \param argc The size of the array of atoms - * \param argv The array of atoms - * \return Nothing + * \param xpos relative mouse x-coord + * \param ypos relative mouse y-coord + * \param delta mousewheel delta + * \param mod keyboard modifiers */ -void ebox_mouse_wheel(t_ebox* x, t_symbol* s, int argc, t_atom* argv); +void ebox_mouse_wheel(t_ebox* x, t_floatarg xpos, t_floatarg ypos, t_floatarg delta, t_floatarg mod); //! The key down method called by tcl/tk (PRIVATE AND NOT READY) /* @@ -315,7 +322,7 @@ void ebox_pos(t_ebox* x, float newx, float newy); * \param x The ebox pointer * \param vis The visible state */ -void ebox_vis(t_ebox* x, int vis); +void ebox_vis(t_ebox* x, t_float vis); //! The default user id method for all ebox called by PD (PRIVATE) /* @@ -462,7 +469,6 @@ t_pd_err ebox_set_label_side(t_ebox* x, t_object* attr, int argc, t_atom* argv); t_pd_err ebox_set_label_position(t_ebox* x, t_object* attr, int argc, t_atom* argv); t_pd_err ebox_set_label_margins(t_ebox* x, t_object* attr, int argc, t_atom* argv); - // The defaults pd widgets void ebox_wgetrect(t_gobj* z, t_glist* glist, int* xp1, int* yp1, int* xp2, int* yp2); void ebox_wvis(t_gobj* z, t_glist* glist, int vis); diff --git a/ceammc/ext/src/lib/cicm/Sources/eclass.cpp b/ceammc/ext/src/lib/cicm/Sources/eclass.cpp index c248d2ce96..5c0d85475c 100644 --- a/ceammc/ext/src/lib/cicm/Sources/eclass.cpp +++ b/ceammc/ext/src/lib/cicm/Sources/eclass.cpp @@ -15,8 +15,8 @@ #include "eobj.h" #include "epopup.h" -#include "../ceammc/extra/fmt/include/fmt/core.h" -#include "../ceammc/extra/fmt/include/fmt/format.h" +#include "fmt/core.h" +#include "fmt/format.h" #include #include @@ -35,13 +35,13 @@ static const char* SYM_MOUSE_DRAG = "mousedrag"; static const char* SYM_MOUSE_UP = "mouseup"; static const char* SYM_MOUSE_WHEEL = "mousewheel"; static const char* SYM_MOUSE_DBL_CLICK = "dblclick"; +static const char* SYM_MOUSE_RIGHT_CLICK = "rightclick"; static const char* SYM_KEY = "key"; static const char* SYM_KEY_FILTER = "keyfilter"; -static const char* SYM_READ = "read"; -static const char* SYM_WRITE = "write"; - static const char* SYM_PAINT = "paint"; +static const char* SYM_WIDGET_CREATE = ".create"; +static const char* SYM_WIDGET_ERASE = ".erase"; static const char* SYM_NOTIFY = "notify"; static const char* SYM_GET_DRAW_PARAMS = "getdrawparams"; static const char* SYM_OK_SIZE = "oksize"; @@ -80,21 +80,23 @@ enum CategoryType { CAT_MISC = 600 }; -static void eclass_properties_dialog(t_eclass* c); -static void ewidget_init(t_eclass* c); -static void eclass_attr_ceammc_setter(t_object* x, t_symbol* s, int argc, t_atom* argv); - -static t_class* tcl_version_class = 0; typedef struct tcl_version { t_object x_obj; char minor; char major; } t_tcl_version; -t_tcl_version* tcl_version_instance; +static void eclass_properties_dialog(t_eclass* c); +static void ewidget_init(t_eclass* c); +static void eclass_attr_ceammc_setter(t_object* x, t_symbol* s, int argc, t_atom* argv); +static t_tcl_version* tcl_version_new(); + +static t_class* tcl_version_class = nullptr; +static t_tcl_version* tcl_version_instance = nullptr; + t_tcl_version* tcl_version_new() { - t_tcl_version* x = (t_tcl_version*)pd_new(tcl_version_class); + t_tcl_version* x = reinterpret_cast(pd_new(tcl_version_class)); if (x) { x->minor = 0; x->major = 0; @@ -103,27 +105,6 @@ t_tcl_version* tcl_version_new() return x; } -std::pair eclass_tcl_version() -{ - std::pair res({ 0, 0 }); - if (!tcl_version_class || !tcl_version_instance) - return res; - - res.first = tcl_version_instance->major; - res.second = tcl_version_instance->minor; - return res; -} - -int egraphics_smooth() -{ - auto ver = eclass_tcl_version(); - - if (ver.first == 8 && ver.second == 6) - return 1; - else - return 0; -} - void tcl_version_set(t_tcl_version* x, t_float v) { float int_part; @@ -170,8 +151,8 @@ t_eclass* eclass_new(const char* name, t_typ_method newm, t_typ_method freem, si memset(&c->c_widget, 0, sizeof(t_ewidget)); c->c_attr = 0; c->c_nattr = 0; - c->c_dsp = 0; - c->c_box = 0; + c->c_dsp = false; + c->c_box = false; c->c_attr = NULL; } else { bug("Memory allocation failed for the class %s.", name); @@ -192,127 +173,127 @@ void eclass_guiinit(t_eclass* c, long flags) c->c_box = 1; // DEFAULT ATTRIBUTES // - CLASS_ATTR_FLOAT_ARRAY(c, "size", 0, t_ebox, b_rect.width, 2); - CLASS_ATTR_SYMBOL(c, "fontname", 0, t_ebox, b_font.c_family); - CLASS_ATTR_SYMBOL(c, "fontweight", 0, t_ebox, b_font.c_weight); - CLASS_ATTR_SYMBOL(c, "fontslant", 0, t_ebox, b_font.c_slant); - CLASS_ATTR_INT(c, "fontsize", 0, t_ebox, b_font.c_sizereal); - CLASS_ATTR_SYMBOL(c, "receive", 0, t_ebox, b_receive_id); - CLASS_ATTR_SYMBOL(c, "send", 0, t_ebox, b_send_id); - CLASS_ATTR_SYMBOL(c, "label", 0, t_ebox, b_label); - CLASS_ATTR_INT(c, "label_inner", 0, t_ebox, label_inner); - CLASS_ATTR_SYMBOL(c, "label_side", 0, t_ebox, label_side); - CLASS_ATTR_SYMBOL(c, "label_align", 0, t_ebox, label_align); - CLASS_ATTR_SYMBOL(c, "label_valign", 0, t_ebox, label_valign); - CLASS_ATTR_INT_ARRAY(c, "label_margins", 0, t_ebox, label_margins, 2); - - CLASS_ATTR_DEFAULT(c, "size", 0, "100. 100."); + CLASS_ATTR_FLOAT_ARRAY(c, "size", t_ebox, b_rect.width, 2); + CLASS_ATTR_SYMBOL(c, "fontname", t_ebox, b_font.c_family); + CLASS_ATTR_SYMBOL(c, "fontweight", t_ebox, b_font.c_weight); + CLASS_ATTR_SYMBOL(c, "fontslant", t_ebox, b_font.c_slant); + CLASS_ATTR_INT(c, "fontsize", t_ebox, b_font.c_sizereal); + CLASS_ATTR_SYMBOL(c, "receive", t_ebox, b_receive_id); + CLASS_ATTR_SYMBOL(c, "send", t_ebox, b_send_id); + CLASS_ATTR_SYMBOL(c, "label", t_ebox, b_label); + CLASS_ATTR_INT(c, "label_inner", t_ebox, label_inner); + CLASS_ATTR_SYMBOL(c, "label_side", t_ebox, label_side); + CLASS_ATTR_SYMBOL(c, "label_align", t_ebox, label_align); + CLASS_ATTR_SYMBOL(c, "label_valign", t_ebox, label_valign); + CLASS_ATTR_INT_ARRAY(c, "label_margins", t_ebox, label_margins, 2); + + CLASS_ATTR_DEFAULT(c, "size", "100. 100."); CLASS_ATTR_FILTER_MIN(c, "size", 4); - CLASS_ATTR_SAVE(c, "size", 0); - CLASS_ATTR_PAINT(c, "size", 0); - CLASS_ATTR_CATEGORY(c, "size", 0, _("Basic")); - CLASS_ATTR_LABEL(c, "size", 0, _("Patching Size")); + CLASS_ATTR_SAVE(c, "size"); + CLASS_ATTR_PAINT(c, "size"); + CLASS_ATTR_CATEGORY(c, "size", _("Basic")); + CLASS_ATTR_LABEL(c, "size", _("Patching Size")); CLASS_ATTR_ACCESSORS(c, "size", NULL, (t_err_method)ebox_size_set); - CLASS_ATTR_INT(c, "pinned", 0, t_ebox, b_pinned); - CLASS_ATTR_DEFAULT(c, "pinned", 0, "0"); + CLASS_ATTR_INT(c, "pinned", t_ebox, b_pinned); + CLASS_ATTR_DEFAULT(c, "pinned", "0"); CLASS_ATTR_FILTER_CLIP(c, "pinned", 0, 1); - CLASS_ATTR_SAVE(c, "pinned", 0); - CLASS_ATTR_CATEGORY(c, "pinned", 0, _("Basic")); - CLASS_ATTR_LABEL(c, "pinned", 0, _("Pinned")); - CLASS_ATTR_STYLE(c, "pinned", 0, "onoff"); - - CLASS_ATTR_DEFAULT(c, "fontname", 0, "Helvetica"); - CLASS_ATTR_SAVE(c, "fontname", 0); - CLASS_ATTR_PAINT(c, "fontname", 0); - CLASS_ATTR_CATEGORY(c, "fontname", 0, _("Label")); - CLASS_ATTR_LABEL(c, "fontname", 0, _("Font Name")); + CLASS_ATTR_SAVE(c, "pinned"); + CLASS_ATTR_CATEGORY(c, "pinned", _("Basic")); + CLASS_ATTR_LABEL(c, "pinned", _("Pinned")); + CLASS_ATTR_STYLE(c, "pinned", "onoff"); + + CLASS_ATTR_DEFAULT(c, "fontname", "Helvetica"); + CLASS_ATTR_SAVE(c, "fontname"); + CLASS_ATTR_PAINT(c, "fontname"); + CLASS_ATTR_CATEGORY(c, "fontname", _("Label")); + CLASS_ATTR_LABEL(c, "fontname", _("Font Name")); CLASS_ATTR_ACCESSORS(c, "fontname", NULL, (t_err_method)ebox_set_font); - CLASS_ATTR_STYLE(c, "fontname", 0, "menu"); - CLASS_ATTR_ITEMS(c, "fontname", 0, "Helvetica Monaco Courier Times DejaVu"); - - CLASS_ATTR_DEFAULT(c, "fontweight", 0, _("normal")); - CLASS_ATTR_SAVE(c, "fontweight", 0); - CLASS_ATTR_PAINT(c, "fontweight", 0); - CLASS_ATTR_CATEGORY(c, "fontweight", 0, _("Label")); - CLASS_ATTR_LABEL(c, "fontweight", 0, _("Font Weight")); + CLASS_ATTR_STYLE(c, "fontname", "menu"); + CLASS_ATTR_ITEMS(c, "fontname", "Helvetica Monaco Courier Times DejaVu"); + + CLASS_ATTR_DEFAULT(c, "fontweight", _("normal")); + CLASS_ATTR_SAVE(c, "fontweight"); + CLASS_ATTR_PAINT(c, "fontweight"); + CLASS_ATTR_CATEGORY(c, "fontweight", _("Label")); + CLASS_ATTR_LABEL(c, "fontweight", _("Font Weight")); CLASS_ATTR_ACCESSORS(c, "fontweight", NULL, (t_err_method)ebox_set_fontweight); - CLASS_ATTR_STYLE(c, "fontweight", 0, "menu"); - CLASS_ATTR_ITEMS(c, "fontweight", 0, "normal bold"); - - CLASS_ATTR_DEFAULT(c, "fontslant", 0, "roman"); - CLASS_ATTR_SAVE(c, "fontslant", 0); - CLASS_ATTR_PAINT(c, "fontslant", 0); - CLASS_ATTR_CATEGORY(c, "fontslant", 0, _("Label")); - CLASS_ATTR_LABEL(c, "fontslant", 0, _("Font Slant")); + CLASS_ATTR_STYLE(c, "fontweight", "menu"); + CLASS_ATTR_ITEMS(c, "fontweight", "normal bold"); + + CLASS_ATTR_DEFAULT(c, "fontslant", "roman"); + CLASS_ATTR_SAVE(c, "fontslant"); + CLASS_ATTR_PAINT(c, "fontslant"); + CLASS_ATTR_CATEGORY(c, "fontslant", _("Label")); + CLASS_ATTR_LABEL(c, "fontslant", _("Font Slant")); CLASS_ATTR_ACCESSORS(c, "fontslant", NULL, (t_err_method)ebox_set_fontslant); - CLASS_ATTR_STYLE(c, "fontslant", 0, "menu"); - CLASS_ATTR_ITEMS(c, "fontslant", 0, "roman italic"); + CLASS_ATTR_STYLE(c, "fontslant", "menu"); + CLASS_ATTR_ITEMS(c, "fontslant", "roman italic"); - CLASS_ATTR_DEFAULT(c, "fontsize", 0, "11"); + CLASS_ATTR_DEFAULT(c, "fontsize", "11"); CLASS_ATTR_FILTER_MIN(c, "fontsize", 4); - CLASS_ATTR_SAVE(c, "fontsize", 0); - CLASS_ATTR_PAINT(c, "fontsize", 0); - CLASS_ATTR_CATEGORY(c, "fontsize", 0, _("Label")); - CLASS_ATTR_LABEL(c, "fontsize", 0, _("Font Size")); + CLASS_ATTR_SAVE(c, "fontsize"); + CLASS_ATTR_PAINT(c, "fontsize"); + CLASS_ATTR_CATEGORY(c, "fontsize", _("Label")); + CLASS_ATTR_LABEL(c, "fontsize", _("Font Size")); CLASS_ATTR_ACCESSORS(c, "fontsize", NULL, ebox_set_fontsize); - CLASS_ATTR_STYLE(c, "fontsize", 0, "number"); + CLASS_ATTR_STYLE(c, "fontsize", "number"); - CLASS_ATTR_DEFAULT(c, "receive", 0, "(null)"); + CLASS_ATTR_DEFAULT(c, "receive", "(null)"); CLASS_ATTR_ACCESSORS(c, "receive", NULL, ebox_set_receiveid); - CLASS_ATTR_SAVE(c, "receive", 0); - CLASS_ATTR_CATEGORY(c, "receive", 0, _("Basic")); - CLASS_ATTR_LABEL(c, "receive", 0, _("Receive Symbol")); + CLASS_ATTR_SAVE(c, "receive"); + CLASS_ATTR_CATEGORY(c, "receive", _("Basic")); + CLASS_ATTR_LABEL(c, "receive", _("Receive Symbol")); - CLASS_ATTR_DEFAULT(c, "send", 0, "(null)"); + CLASS_ATTR_DEFAULT(c, "send", "(null)"); CLASS_ATTR_ACCESSORS(c, "send", NULL, ebox_set_sendid); - CLASS_ATTR_SAVE(c, "send", 0); - CLASS_ATTR_CATEGORY(c, "send", 0, _("Basic")); - CLASS_ATTR_LABEL(c, "send", 0, _("Send Symbol")); + CLASS_ATTR_SAVE(c, "send"); + CLASS_ATTR_CATEGORY(c, "send", _("Basic")); + CLASS_ATTR_LABEL(c, "send", _("Send Symbol")); - CLASS_ATTR_DEFAULT(c, "label", 0, "(null)"); + CLASS_ATTR_DEFAULT(c, "label", "(null)"); CLASS_ATTR_ACCESSORS(c, "label", NULL, ebox_set_label); - CLASS_ATTR_SAVE(c, "label", 0); - CLASS_ATTR_CATEGORY(c, "label", 0, _("Label")); - CLASS_ATTR_LABEL(c, "label", 0, _("Text")); + CLASS_ATTR_SAVE(c, "label"); + CLASS_ATTR_CATEGORY(c, "label", _("Label")); + CLASS_ATTR_LABEL(c, "label", _("Text")); - CLASS_ATTR_DEFAULT(c, "label_align", 0, "left"); + CLASS_ATTR_DEFAULT(c, "label_align", "left"); CLASS_ATTR_ACCESSORS(c, "label_align", NULL, ebox_set_label_align); - CLASS_ATTR_SAVE(c, "label_align", 0); - CLASS_ATTR_CATEGORY(c, "label_align", 0, _("Label")); - CLASS_ATTR_LABEL(c, "label_align", 0, _("Horizontal align")); - CLASS_ATTR_STYLE(c, "label_align", 0, "menu"); - CLASS_ATTR_ITEMS(c, "label_align", 0, "left center right"); + CLASS_ATTR_SAVE(c, "label_align"); + CLASS_ATTR_CATEGORY(c, "label_align", _("Label")); + CLASS_ATTR_LABEL(c, "label_align", _("Horizontal align")); + CLASS_ATTR_STYLE(c, "label_align", "menu"); + CLASS_ATTR_ITEMS(c, "label_align", "left center right"); - CLASS_ATTR_DEFAULT(c, "label_valign", 0, "top"); + CLASS_ATTR_DEFAULT(c, "label_valign", "top"); CLASS_ATTR_ACCESSORS(c, "label_valign", NULL, ebox_set_label_valign); - CLASS_ATTR_SAVE(c, "label_valign", 0); - CLASS_ATTR_CATEGORY(c, "label_valign", 0, _("Label")); - CLASS_ATTR_LABEL(c, "label_valign", 0, _("Vertical align")); - CLASS_ATTR_STYLE(c, "label_valign", 0, "menu"); - CLASS_ATTR_ITEMS(c, "label_valign", 0, "top center bottom"); + CLASS_ATTR_SAVE(c, "label_valign"); + CLASS_ATTR_CATEGORY(c, "label_valign", _("Label")); + CLASS_ATTR_LABEL(c, "label_valign", _("Vertical align")); + CLASS_ATTR_STYLE(c, "label_valign", "menu"); + CLASS_ATTR_ITEMS(c, "label_valign", "top center bottom"); - CLASS_ATTR_DEFAULT(c, "label_side", 0, "top"); + CLASS_ATTR_DEFAULT(c, "label_side", "top"); CLASS_ATTR_ACCESSORS(c, "label_side", NULL, ebox_set_label_side); - CLASS_ATTR_SAVE(c, "label_side", 0); - CLASS_ATTR_CATEGORY(c, "label_side", 0, _("Label")); - CLASS_ATTR_LABEL(c, "label_side", 0, _("Attach side")); - CLASS_ATTR_STYLE(c, "label_side", 0, "menu"); - CLASS_ATTR_ITEMS(c, "label_side", 0, "left top right bottom"); + CLASS_ATTR_SAVE(c, "label_side"); + CLASS_ATTR_CATEGORY(c, "label_side", _("Label")); + CLASS_ATTR_LABEL(c, "label_side", _("Attach side")); + CLASS_ATTR_STYLE(c, "label_side", "menu"); + CLASS_ATTR_ITEMS(c, "label_side", "left top right bottom"); - CLASS_ATTR_DEFAULT(c, "label_inner", 0, "0"); + CLASS_ATTR_DEFAULT(c, "label_inner", "0"); CLASS_ATTR_ACCESSORS(c, "label_inner", NULL, ebox_set_label_position); - CLASS_ATTR_SAVE(c, "label_inner", 0); - CLASS_ATTR_CATEGORY(c, "label_inner", 0, _("Label")); - CLASS_ATTR_LABEL(c, "label_inner", 0, _("Inner position")); - CLASS_ATTR_STYLE(c, "label_inner", 0, "onoff"); + CLASS_ATTR_SAVE(c, "label_inner"); + CLASS_ATTR_CATEGORY(c, "label_inner", _("Label")); + CLASS_ATTR_LABEL(c, "label_inner", _("Inner position")); + CLASS_ATTR_STYLE(c, "label_inner", "onoff"); CLASS_ATTR_FILTER_CLIP(c, "label_inner", 0, 1); - CLASS_ATTR_DEFAULT(c, "label_margins", 0, "0 0"); - CLASS_ATTR_SAVE(c, "label_margins", 0); - CLASS_ATTR_PAINT(c, "label_margins", 0); - CLASS_ATTR_CATEGORY(c, "label_margins", 0, _("Label")); - CLASS_ATTR_LABEL(c, "label_margins", 0, _("Margins")); + CLASS_ATTR_DEFAULT(c, "label_margins", "0 0"); + CLASS_ATTR_SAVE(c, "label_margins"); + CLASS_ATTR_PAINT(c, "label_margins"); + CLASS_ATTR_CATEGORY(c, "label_margins", _("Label")); + CLASS_ATTR_LABEL(c, "label_margins", _("Margins")); CLASS_ATTR_ACCESSORS(c, "label_margins", NULL, ebox_set_label_margins); // GUI always need this methods // @@ -322,13 +303,14 @@ void eclass_guiinit(t_eclass* c, long flags) class_addmethod((t_class*)c, (t_method)ebox_mouse_enter, gensym(SYM_MOUSE_ENTER), A_NULL, 0); class_addmethod((t_class*)c, (t_method)ebox_mouse_leave, gensym(SYM_MOUSE_LEAVE), A_NULL, 0); - class_addmethod((t_class*)c, (t_method)ebox_mouse_move, gensym(SYM_MOUSE_MOVE), A_GIMME, 0); - class_addmethod((t_class*)c, (t_method)ebox_mouse_down, gensym(SYM_MOUSE_DOWN), A_GIMME, 0); - class_addmethod((t_class*)c, (t_method)ebox_mouse_up, gensym(SYM_MOUSE_UP), A_GIMME, 0); + class_addmethod((t_class*)c, (t_method)ebox_mouse_move, gensym(SYM_MOUSE_MOVE), A_DEFFLOAT, A_DEFFLOAT, A_DEFFLOAT, 0); + class_addmethod((t_class*)c, (t_method)ebox_mouse_down, gensym(SYM_MOUSE_DOWN), A_DEFFLOAT, A_DEFFLOAT, A_DEFFLOAT, A_DEFFLOAT, A_DEFFLOAT, 0); + class_addmethod((t_class*)c, (t_method)ebox_mouse_up, gensym(SYM_MOUSE_UP), A_DEFFLOAT, A_DEFFLOAT, A_DEFFLOAT, 0); + class_addmethod((t_class*)c, (t_method)ebox_mouse_rightclick, gensym(SYM_MOUSE_RIGHT_CLICK), A_DEFFLOAT, A_DEFFLOAT, A_DEFFLOAT, A_DEFFLOAT, A_DEFFLOAT, 0); class_addmethod((t_class*)c, (t_method)ebox_pos, gensym(SYM_POS), A_DEFFLOAT, A_DEFFLOAT, 0); class_addmethod((t_class*)c, (t_method)ebox_vis, gensym(SYM_VIS), A_DEFFLOAT, 0); - class_addmethod((t_class*)c, (t_method)ebox_setzoom, gensym(SYM_ZOOM), A_DEFFLOAT, 0); + class_addmethod((t_class*)c, (t_method)ebox_setzoom, gensym(SYM_ZOOM), A_CANT, 0); class_setwidget((t_class*)&c->c_class, (t_widgetbehavior*)&c->c_widget); class_setsavefn((t_class*)&c->c_class, (t_savefn)eobj_save); @@ -342,12 +324,12 @@ void eclass_dspinit(t_eclass* c) class_addmethod((t_class*)c, (t_method)eobj_dsp_add, gensym(SYM_DSP_ADD64), A_NULL, 0); } -static t_pd_err is_cicm(t_eobj* x) +static t_pd_err is_cicm(t_eobj* /*x*/) { return 1; } -t_pd_err eclass_register(t_symbol* name, t_eclass* c) +t_pd_err eclass_register(t_symbol* /*name*/, t_eclass* c) { if (c->c_dsp) { long diff = 0; @@ -370,28 +352,30 @@ t_pd_err eclass_register(t_symbol* name, t_eclass* c) return 0; } -void eclass_addmethod(t_eclass* c, t_typ_method m, const char* name, t_atomtype type, long dummy) +void eclass_addmethod(t_eclass* c, t_typ_method m, const char* name, t_atomtype type, long /*dummy*/) { t_symbol* sname = gensym(name); t_class* cx = &c->c_class; if (sname == gensym(SYM_MOUSE_ENTER)) { - c->c_widget.w_mouseenter = m; + c->c_widget.w_mouseenter = reinterpret_cast(m); } else if (sname == gensym(SYM_MOUSE_LEAVE)) { - c->c_widget.w_mouseleave = m; + c->c_widget.w_mouseleave = reinterpret_cast(m); } else if (sname == gensym(SYM_MOUSE_MOVE)) { - c->c_widget.w_mousemove = m; + c->c_widget.w_mousemove = reinterpret_cast(m); } else if (sname == gensym(SYM_MOUSE_DOWN)) { - c->c_widget.w_mousedown = m; + c->c_widget.w_mousedown = reinterpret_cast(m); } else if (sname == gensym(SYM_MOUSE_DRAG)) { c->c_widget.w_mousedrag = m; } else if (sname == gensym(SYM_MOUSE_UP)) { - c->c_widget.w_mouseup = m; + c->c_widget.w_mouseup = reinterpret_cast(m); + } else if (sname == gensym(SYM_MOUSE_RIGHT_CLICK)) { + c->c_widget.w_rightclick = reinterpret_cast(m); } else if (sname == gensym(SYM_MOUSE_WHEEL)) { - class_addmethod(cx, (t_method)ebox_mouse_wheel, gensym(SYM_MOUSE_WHEEL), A_GIMME, 0); - c->c_widget.w_mousewheel = m; + class_addmethod(cx, (t_method)ebox_mouse_wheel, gensym(SYM_MOUSE_WHEEL), A_DEFFLOAT, A_DEFFLOAT, A_DEFFLOAT, A_DEFFLOAT, 0); + c->c_widget.w_mousewheel = reinterpret_cast(m); } else if (sname == gensym(SYM_MOUSE_DBL_CLICK)) { class_addmethod(cx, (t_method)ebox_mouse_dblclick, gensym(SYM_MOUSE_DBL_CLICK), A_GIMME, 0); - c->c_widget.w_dblclick = m; + c->c_widget.w_dblclick = reinterpret_cast(m); } else if (sname == gensym(SYM_KEY) || sname == gensym(SYM_KEY_FILTER)) { if (c->c_widget.w_key == NULL && c->c_widget.w_keyfilter == NULL) class_addmethod(cx, (t_method)ebox_key, gensym(SYM_KEY), A_GIMME, 0); @@ -401,6 +385,10 @@ void eclass_addmethod(t_eclass* c, t_typ_method m, const char* name, t_atomtype c->c_widget.w_keyfilter = m; } else if (sname == gensym(SYM_PAINT)) { c->c_widget.w_paint = m; + } else if (sname == gensym(SYM_WIDGET_CREATE)) { + c->c_widget.w_create = m; + } else if (sname == gensym(SYM_WIDGET_ERASE)) { + c->c_widget.w_erase = m; } else if (sname == gensym(SYM_NOTIFY)) { c->c_widget.w_notify = (t_err_method)m; } else if (sname == gensym(SYM_GET_DRAW_PARAMS)) { @@ -412,8 +400,8 @@ void eclass_addmethod(t_eclass* c, t_typ_method m, const char* name, t_atomtype } else if (sname == gensym(SYM_SAVE)) { c->c_widget.w_save = m; } else if (sname == gensym(SYM_POPUP)) { - class_addmethod(cx, (t_method)eobj_popup, gensym(SYM_POPUP), A_SYMBOL, A_DEFFLOAT, 0); - c->c_widget.w_popup = m; + class_addmethod(cx, (t_method)eobj_popup, gensym(SYM_POPUP), A_SYMBOL, A_DEFFLOAT, A_DEFFLOAT, A_DEFFLOAT, 0); + c->c_widget.w_popup = reinterpret_cast(m);; } else if (sname == gensym(SYM_DSP)) { c->c_widget.w_dsp = m; } else if (sname == &s_bang) { @@ -427,11 +415,11 @@ void eclass_addmethod(t_eclass* c, t_typ_method m, const char* name, t_atomtype } else if (sname == &s_symbol) { class_addsymbol(cx, m); } else if (sname == gensym(SYM_PRESET)) { - CLASS_ATTR_SYMBOL(c, "presetname", 0, t_ebox, b_objpreset_id); - CLASS_ATTR_DEFAULT(c, "presetname", 0, "(null)"); - CLASS_ATTR_SAVE(c, "presetname", 0); - CLASS_ATTR_CATEGORY(c, "presetname", 0, _("Basic")); - CLASS_ATTR_LABEL(c, "presetname", 0, _("Preset Name")); + CLASS_ATTR_SYMBOL(c, "presetname", t_ebox, b_objpreset_id); + CLASS_ATTR_DEFAULT(c, "presetname", "(null)"); + CLASS_ATTR_SAVE(c, "presetname"); + CLASS_ATTR_CATEGORY(c, "presetname", _("Basic")); + CLASS_ATTR_LABEL(c, "presetname", _("Preset Name")); CLASS_ATTR_ACCESSORS(c, "presetname", NULL, ebox_set_presetid); class_addmethod(cx, (t_method)m, sname, type, 0); } else { @@ -449,22 +437,20 @@ static t_symbol* gentype(const char* name) return gensym(name); } -void eclass_new_attr_typed(t_eclass* c, const char* attrname, const char* type, long size, long maxsize, long flags, long offset) +void eclass_new_attr_typed(t_eclass* c, const char* attrname, const char* type, + size_t size, size_t maxsize, size_t offset) { - int i; - t_eattr* attr; - t_eattr** attrs; if (size >= 1) { t_symbol* name = gensym(attrname); - for (i = 0; i < c->c_nattr; i++) { + for (int i = 0; i < c->c_nattr; i++) { if (c->c_attr[i]->name == name) { error("%s already have %s attribute.", c->c_class.c_name->s_name, attrname); return; } } - attr = (t_eattr*)getbytes(sizeof(t_eattr)); + t_eattr* attr = (t_eattr*)getbytes(sizeof(t_eattr)); if (attr) { attr->name = name; @@ -472,17 +458,17 @@ void eclass_new_attr_typed(t_eclass* c, const char* attrname, const char* type, attr->category = c->c_class.c_name; attr->label = gensym(""); attr->style = gensym(SYM_ENTRY); + attr->units = &s_; attr->order = c->c_nattr + 1; - attr->save = 0; - attr->paint = 0; - attr->invisible = 0; - attr->flags = flags; + attr->save = false; + attr->paint = false; + attr->invisible = false; attr->offset = offset; attr->size = size; attr->sizemax = maxsize; attr->getter = NULL; attr->setter = NULL; - attr->clipped = 0; + attr->clipped = E_CLIP_NONE; attr->minimum = 0; attr->maximum = 1; attr->step = 1; @@ -491,16 +477,16 @@ void eclass_new_attr_typed(t_eclass* c, const char* attrname, const char* type, attr->itemssize = 0; size_t new_sz = (size_t)(c->c_nattr + 1) * sizeof(t_eattr*); - attrs = (t_eattr**)resizebytes(c->c_attr, new_sz, new_sz); + t_eattr** attrs = (t_eattr**)resizebytes(c->c_attr, new_sz, new_sz); if (attrs) { char buf[MAXPDSTRING]; c->c_attr = attrs; c->c_attr[c->c_nattr] = attr; sprintf(buf, "@%s", attrname); - class_addmethod((t_class*)c, (t_method)eclass_attr_ceammc_setter, gensym(buf), A_GIMME, 0); + class_addmethod(&c->c_class, (t_method)eclass_attr_ceammc_setter, gensym(buf), A_GIMME, 0); sprintf(buf, "@%s?", attrname); - class_addmethod((t_class*)c, (t_method)eclass_attr_ceammc_getter, gensym(buf), A_GIMME, 0); + class_addmethod(&c->c_class, (t_method)eclass_attr_ceammc_getter, gensym(buf), A_GIMME, 0); c->c_nattr++; } else { error("%s can't increase memory for %s attribute.", c->c_class.c_name->s_name, attrname); @@ -529,10 +515,12 @@ void eclass_attr_redirect(t_eclass* c, const char* attrname, t_gotfn fn) } } -void eclass_attr_default(t_eclass* c, const char* attrname, long flags, const char* value) +void eclass_attr_default(t_eclass* c, const char* attrname, const char* value) { + t_symbol* sel = gensym(attrname); + for (int i = 0; i < c->c_nattr; i++) { - if (c->c_attr[i]->name == gensym(attrname)) { + if (c->c_attr[i]->name == sel) { c->c_attr[i]->defvals = gensym(value); return; } @@ -541,7 +529,7 @@ void eclass_attr_default(t_eclass* c, const char* attrname, long flags, const ch pd_error(nullptr, "[%s] property not found: %s", c->c_class.c_name->s_name, attrname); } -void eclass_attr_category(t_eclass* c, const char* attrname, long flags, const char* category) +void eclass_attr_category(t_eclass* c, const char* attrname, const char* category) { t_symbol* cat = gensym(category); t_symbol* sel = gensym(attrname); @@ -570,7 +558,7 @@ void eclass_attr_category(t_eclass* c, const char* attrname, long flags, const c } } -void eclass_attr_order(t_eclass* c, const char* attrname, long flags, const char* order) +void eclass_attr_order(t_eclass* c, const char* attrname, const char* order) { t_symbol* sel = gensym(attrname); @@ -585,7 +573,7 @@ void eclass_attr_order(t_eclass* c, const char* attrname, long flags, const char } } -void eclass_attr_label(t_eclass* c, const char* attrname, long flags, const char* label) +void eclass_attr_label(t_eclass* c, const char* attrname, const char* label) { t_symbol* sel = gensym(attrname); @@ -597,7 +585,7 @@ void eclass_attr_label(t_eclass* c, const char* attrname, long flags, const char } } -void eclass_attr_style(t_eclass* c, const char* attrname, long flags, const char* style) +void eclass_attr_style(t_eclass* c, const char* attrname, const char* style) { t_symbol* sel = gensym(attrname); t_symbol* s_style = gensym(style); @@ -622,13 +610,13 @@ void eclass_attr_style(t_eclass* c, const char* attrname, long flags, const char } } -void eclass_attr_itemlist(t_eclass* c, const char* attrname, long flags, const char* list) +void eclass_attr_itemlist(t_eclass* c, const char* attrname, const char* list) { - int i, j = 0; + int j = 0; char* pch; int size = 0; t_symbol* s_attrname = gensym(attrname); - for (i = 0; i < c->c_nattr; i++) { + for (int i = 0; i < c->c_nattr; i++) { if (c->c_attr[i]->name == s_attrname) { auto plist = strdup(list); if (!plist) @@ -680,14 +668,10 @@ void eclass_attr_itemlist(t_eclass* c, const char* attrname, long flags, const c void eclass_attr_filter_min(t_eclass* c, const char* attrname, float value) { - t_symbol* s_attrname = gensym(attrname); + t_symbol* sel = gensym(attrname); for (int i = 0; i < c->c_nattr; i++) { - if (c->c_attr[i]->name == s_attrname) { - if (c->c_attr[i]->clipped == 0) - c->c_attr[i]->clipped = 1; - else if (c->c_attr[i]->clipped == 2) - c->c_attr[i]->clipped = 3; - + if (c->c_attr[i]->name == sel) { + c->c_attr[i]->clipped = static_cast(c->c_attr[i]->clipped | E_CLIP_MIN); c->c_attr[i]->minimum = value; return; } @@ -696,14 +680,10 @@ void eclass_attr_filter_min(t_eclass* c, const char* attrname, float value) void eclass_attr_filter_max(t_eclass* c, const char* attrname, float value) { - t_symbol* s_attrname = gensym(attrname); + t_symbol* sel = gensym(attrname); for (int i = 0; i < c->c_nattr; i++) { - if (c->c_attr[i]->name == s_attrname) { - if (c->c_attr[i]->clipped == 0) - c->c_attr[i]->clipped = 2; - else if (c->c_attr[i]->clipped == 1) - c->c_attr[i]->clipped = 3; - + if (c->c_attr[i]->name == sel) { + c->c_attr[i]->clipped = static_cast(c->c_attr[i]->clipped | E_CLIP_MAX); c->c_attr[i]->maximum = value; return; } @@ -721,34 +701,34 @@ void eclass_attr_step(t_eclass* c, const char* attrname, float value) } } -void eclass_attr_save(t_eclass* c, const char* attrname, long flags, bool value) +void eclass_attr_save(t_eclass* c, const char* attrname, bool value) { - t_symbol* s_attrname = gensym(attrname); + t_symbol* sel = gensym(attrname); for (int i = 0; i < c->c_nattr; i++) { - if (c->c_attr[i]->name == s_attrname) { - c->c_attr[i]->save = value ? 1 : 0; + if (c->c_attr[i]->name == sel) { + c->c_attr[i]->save = value; return; } } } -void eclass_attr_paint(t_eclass* c, const char* attrname, long flags) +void eclass_attr_paint(t_eclass* c, const char* attrname) { t_symbol* s_attrname = gensym(attrname); for (int i = 0; i < c->c_nattr; i++) { if (c->c_attr[i]->name == s_attrname) { - c->c_attr[i]->paint = 1; + c->c_attr[i]->paint = true; return; } } } -void eclass_attr_invisible(t_eclass* c, const char* attrname, long flags) +void eclass_attr_invisible(t_eclass* c, const char* attrname) { t_symbol* s_attrname = gensym(attrname); for (int i = 0; i < c->c_nattr; i++) { if (c->c_attr[i]->name == s_attrname) { - c->c_attr[i]->invisible = 1; + c->c_attr[i]->invisible = true; return; } } @@ -880,8 +860,6 @@ static bool request_property(t_object* x, t_symbol* s, std::vector& res) void eclass_attr_ceammc_getter(t_object* x, t_symbol* s, int argc, t_atom* argv) { - int argc_ = 0; - t_atom* argv_ = NULL; t_ebox* z = (t_ebox*)x; if (!z->b_obj.o_obj.te_outlet) { pd_error(x, "[%s] can't get property: class has no outlets.", class_getname(x->te_pd)); @@ -956,22 +934,29 @@ void eclass_attr_setter(t_object* x, t_symbol* s, int argc, t_atom* argv) point = (char*)(x) + c->c_attr[i]->offset; - if (c->c_attr[i]->clipped == 1 || c->c_attr[i]->clipped == 3) { + if (c->c_attr[i]->clipped & E_CLIP_MIN) { for (int j = 0; j < argc; j++) { if (atom_gettype(argv + j) == A_FLOAT) { - atom_setfloat(argv + j, (float)pd_clip_min(atom_getfloat(argv + j), c->c_attr[i]->minimum)); + atom_setfloat(argv + j, pd_clip_min(atom_getfloat(argv + j), c->c_attr[i]->minimum)); } } } - if (c->c_attr[i]->clipped == 2 || c->c_attr[i]->clipped == 3) { + if (c->c_attr[i]->clipped & E_CLIP_MAX) { for (int j = 0; j < argc; j++) { if (atom_gettype(argv + j) == A_FLOAT) { - atom_setfloat(argv + j, (float)pd_clip_max(atom_getfloat(argv + j), c->c_attr[i]->maximum)); + atom_setfloat(argv + j, pd_clip_max(atom_getfloat(argv + j), c->c_attr[i]->maximum)); } } } - if (c->c_attr[i]->setter) { + if (c->c_attr[i]->getter) { + if (c->c_attr[i]->setter) { // getter and setter + c->c_attr[i]->setter(x, c->c_attr[i], argc, argv); + } else { // getter only (readonly) + pd_error(x, "[%s] readonly property: @%s", c->c_class.c_name->s_name, c->c_attr[i]->name->s_name); + } + } else if (c->c_attr[i]->getter == nullptr + && c->c_attr[i]->setter != nullptr) { // setter only (using default set method) c->c_attr[i]->setter(x, c->c_attr[i], argc, argv); } else if (type == s_int) { int* pointor = (int*)point; @@ -1048,6 +1033,8 @@ static void ewidget_init(t_eclass* c) c->c_widget.w_clickfn = nullptr; c->c_widget.w_paint = nullptr; + c->c_widget.w_create = nullptr; + c->c_widget.w_erase = nullptr; c->c_widget.w_mouseenter = nullptr; c->c_widget.w_mouseleave = nullptr; c->c_widget.w_mousemove = nullptr; @@ -1056,6 +1043,7 @@ static void ewidget_init(t_eclass* c) c->c_widget.w_mouseup = nullptr; c->c_widget.w_mousewheel = nullptr; c->c_widget.w_dblclick = nullptr; + c->c_widget.w_rightclick = nullptr; c->c_widget.w_key = nullptr; c->c_widget.w_keyfilter = nullptr; c->c_widget.w_getdrawparameters = nullptr; @@ -1256,7 +1244,7 @@ static void eclass_properties_dialog(t_eclass* c) /** ATTRIBUTES NAMES **/ auto str = fmt::format(" # property: @{2}\n" " ttk::label {0} -justify left -text [join [list [_ \"{1}\" ] {{:}}] {{}}]\n" - " tooltip::tooltip {0} \"@{2}\"\n", + " ceammc_tooltip {0} \"@{2}\"\n", LABEL_ID, c->c_attr[i]->label->s_name, ATTR_NAME); sys_gui(str.c_str()); @@ -1378,12 +1366,22 @@ void eclass_attr_sort(t_eclass* c) qsort(c->c_attr, c->c_nattr, sizeof(t_eattr*), attr_cmp); } -void eclass_attr_visible(t_eclass* c, const char* attrname, long flags) +void eclass_attr_visible(t_eclass* c, const char* attrname) { t_symbol* s_attrname = gensym(attrname); for (int i = 0; i < c->c_nattr; i++) { if (c->c_attr[i]->name == s_attrname) { - c->c_attr[i]->invisible = 0; + c->c_attr[i]->invisible = false; + return; + } + } +} + +void eclass_attr_units(t_eclass* c, t_symbol* attrname, t_symbol* units) +{ + for (int i = 0; i < c->c_nattr; i++) { + if (c->c_attr[i]->name == attrname) { + c->c_attr[i]->units = units; return; } } diff --git a/ceammc/ext/src/lib/cicm/Sources/eclass.h b/ceammc/ext/src/lib/cicm/Sources/eclass.h index e68cf01728..1331e63d96 100644 --- a/ceammc/ext/src/lib/cicm/Sources/eclass.h +++ b/ceammc/ext/src/lib/cicm/Sources/eclass.h @@ -98,10 +98,9 @@ void eclass_addmethod(t_eclass* c, t_typ_method m, const char* name, t_atomtype * \param type The attribute type * \param size The attribute size * \param maxsize The attribute max size - * \param flags The attribute flags (dummy) * \param offset The attribute bit offset in the object structure */ -void eclass_new_attr_typed(t_eclass* c, const char* attrname, const char* type, long size, long maxsize, long flags, long offset); +void eclass_new_attr_typed(t_eclass* c, const char* attrname, const char* type, size_t size, size_t maxsize, size_t offset); //! @cond /*! @@ -142,10 +141,9 @@ void eclass_attr_ceammc_getter(t_object* x, t_symbol* s, int argc, t_atom* argv) * \details For the moment the category is a dummy member of the attribute. You should prefer to use the MACROS. * \param c The t_eclass pointer * \param attrname The attribute name - * \param flags The flags of the attribute (dummy) * \param category The category of the attribute */ -void eclass_attr_category(t_eclass* c, const char* attrname, long flags, const char* category); +void eclass_attr_category(t_eclass* c, const char* attrname, const char* category); /*! * \fn void eclass_attr_order(t_eclass* c, const char* attrname, long flags, const char* order) @@ -153,10 +151,9 @@ void eclass_attr_category(t_eclass* c, const char* attrname, long flags, const c * \details For the moment the order is a dummy member of the attribute. You should prefer to use the MACROS. * \param c The t_eclass pointer * \param attrname The attribute name - * \param flags The flags of the attribute (dummy) * \param order The order of the attribute */ -void eclass_attr_order(t_eclass* c, const char* attrname, long flags, const char* order); +void eclass_attr_order(t_eclass* c, const char* attrname, const char* order); /*! * \fn void eclass_attr_label(t_eclass* c, const char* attrname, long flags, const char* label) @@ -164,10 +161,9 @@ void eclass_attr_order(t_eclass* c, const char* attrname, long flags, const char * \details The label is the message that will be displayed in the properties window of the object. You should prefer to use the MACROS. * \param c The t_eclass pointer * \param attrname The attribute name - * \param flags The flags of the attribute (dummy) * \param label The label of the attribute */ -void eclass_attr_label(t_eclass* c, const char* attrname, long flags, const char* label); +void eclass_attr_label(t_eclass* c, const char* attrname, const char* label); /*! * \fn void eclass_attr_style(t_eclass* c, const char* attrname, long flags, const char* style) @@ -175,10 +171,18 @@ void eclass_attr_label(t_eclass* c, const char* attrname, long flags, const char * \details The style is how the attribute will be displayed in the properties window of the object. it could be \"onoff\", \"color\", \"number\", \"menu\" or \"entry\". You should prefer to use the MACROS. * \param c The t_eclass pointer * \param attrname The attribute name - * \param flags The flags of the attribute (dummy) * \param style The style of the attribute */ -void eclass_attr_style(t_eclass* c, const char* attrname, long flags, const char* style); +void eclass_attr_style(t_eclass* c, const char* attrname, const char* style); + +/*! + * \fn void eclass_attr_units(t_eclass* c, const char* attrname, long flags, const char* style) + * \brief Sets the units of an attribute. + * \param c The t_eclass pointer + * \param attrname The attribute name + * \param units The units of the attribute + */ +void eclass_attr_units(t_eclass* c, t_symbol* attrname, t_symbol* units); /*! * \fn void eclass_attr_default(t_eclass* c, const char* attrname, long flags, const char* value) @@ -186,10 +190,9 @@ void eclass_attr_style(t_eclass* c, const char* attrname, long flags, const char * \details The default value is a string that will be parse into an array of atoms or a array of number if needed. You should prefer to use the MACROS. * \param c The t_eclass pointer * \param attrname The attribute name - * \param flags The flags of the attribute (dummy) * \param value The default value */ -void eclass_attr_default(t_eclass* c, const char* attrname, long flags, const char* value); +void eclass_attr_default(t_eclass* c, const char* attrname, const char* value); /*! * \fn void eclass_attr_filter_min(t_eclass* c, const char* attrname, float value) @@ -229,7 +232,7 @@ void eclass_attr_step(t_eclass* c, const char* attrname, float value); * \param attrname The attribute name * \param value The save or not save */ -void eclass_attr_save(t_eclass* c, const char* attrname, long flags, bool value = true); +void eclass_attr_save(t_eclass* c, const char* attrname, bool value = true); /*! * \fn void eclass_attr_paint(t_eclass* c, const char* attrname, long flags) @@ -237,9 +240,8 @@ void eclass_attr_save(t_eclass* c, const char* attrname, long flags, bool value * \details If the method has been called, when the attribute has changed it call the ebox_redraw function to redraw the object. Only GUI can be repainted. You should prefer to use the MACROS. * \param c The t_eclass pointer * \param attrname The attribute name - * \param flags The flags of the attribute (dummy) */ -void eclass_attr_paint(t_eclass* c, const char* attrname, long flags); +void eclass_attr_paint(t_eclass* c, const char* attrname); /*! * \fn void eclass_attr_invisible(t_eclass* c, const char* attrname, long flags) @@ -247,9 +249,8 @@ void eclass_attr_paint(t_eclass* c, const char* attrname, long flags); * \details You should prefer to use the MACROS. * \param c The t_eclass pointer * \param attrname The attribute name - * \param flags The flags of the attribute (dummy) */ -void eclass_attr_invisible(t_eclass* c, const char* attrname, long flags); +void eclass_attr_invisible(t_eclass* c, const char* attrname); /*! * \fn void eclass_attr_visible(t_eclass* c, const char* attrname, long flags) @@ -257,9 +258,8 @@ void eclass_attr_invisible(t_eclass* c, const char* attrname, long flags); * \details You should prefer to use the MACROS. * \param c The t_eclass pointer * \param attrname The attribute name - * \param flags The flags of the attribute (dummy) */ -void eclass_attr_visible(t_eclass* c, const char* attrname, long flags); +void eclass_attr_visible(t_eclass* c, const char* attrname); /*! * \fn void eclass_attr_accessor(t_eclass* c, const char* attrname, t_err_method getter, t_err_method setter) @@ -278,10 +278,9 @@ void eclass_attr_accessor(t_eclass* c, const char* attrname, t_err_method getter * \details For example, the font weight attribute offers \"normal\" and \"bold\". You should prefer to use the MACROS. * \param c The t_eclass pointer * \param attrname The attribute name - * \param flags The flags of the attribute (dummy) * \param list The list of items. */ -void eclass_attr_itemlist(t_eclass* c, const char* attrname, long flags, const char* list); +void eclass_attr_itemlist(t_eclass* c, const char* attrname, const char* list); void eclass_attr_sort(t_eclass* c); @@ -297,83 +296,83 @@ std::pair eclass_tcl_version(); //! @endcond //! Macros that create an int attribute -#define CLASS_ATTR_INT(c, name, flags, struct, member) \ - eclass_new_attr_typed(c, name, "int", 1, 0, flags, calcoffset(struct, member)) +#define CLASS_ATTR_INT(c, name, struct, member) \ + eclass_new_attr_typed(c, name, "int", 1, 0, calcoffset(struct, member)) //! Macros that create a long attribute -#define CLASS_ATTR_LONG(c, name, flags, struct, member) \ - eclass_new_attr_typed(c, name, "long", 1, 0, flags, calcoffset(struct, member)) +#define CLASS_ATTR_LONG(c, name, struct, member) \ + eclass_new_attr_typed(c, name, "long", 1, 0, calcoffset(struct, member)) //! Macros that create a float attribute -#define CLASS_ATTR_FLOAT(c, name, flags, struct, member) \ - eclass_new_attr_typed(c, name, "float", 1, 0, flags, calcoffset(struct, member)) +#define CLASS_ATTR_FLOAT(c, name, struct, member) \ + eclass_new_attr_typed(c, name, "float", 1, 0, calcoffset(struct, member)) //! Macros that create a double attribute -#define CLASS_ATTR_DOUBLE(c, name, flags, struct, member) \ - eclass_new_attr_typed(c, name, "double", 1, 0, flags, calcoffset(struct, member)) +#define CLASS_ATTR_DOUBLE(c, name, struct, member) \ + eclass_new_attr_typed(c, name, "double", 1, 0, calcoffset(struct, member)) //! Macros that create a rgb attribute -#define CLASS_ATTR_RGB(c, name, flags, struct, member) \ - eclass_new_attr_typed(c, name, "float", 3, 0, flags, calcoffset(struct, member)) +#define CLASS_ATTR_RGB(c, name, struct, member) \ + eclass_new_attr_typed(c, name, "float", 3, 0, calcoffset(struct, member)) //! Macros that create a rgba attribute -#define CLASS_ATTR_RGBA(c, name, flags, struct, member) \ - eclass_new_attr_typed(c, name, "float", 4, 0, flags, calcoffset(struct, member)) +#define CLASS_ATTR_RGBA(c, name, struct, member) \ + eclass_new_attr_typed(c, name, "float", 4, 0, calcoffset(struct, member)) //! Macros that create a symbol attribute -#define CLASS_ATTR_SYMBOL(c, name, flags, struct, member) \ - eclass_new_attr_typed(c, name, "symbol", 1, 0, flags, calcoffset(struct, member)) +#define CLASS_ATTR_SYMBOL(c, name, struct, member) \ + eclass_new_attr_typed(c, name, "symbol", 1, 0, calcoffset(struct, member)) //! Macros that create a atom attribute -#define CLASS_ATTR_ATOM(c, name, flags, struct, member) \ - eclass_new_attr_typed(c, name, "atom", 1, 0, flags, calcoffset(struct, member)) +#define CLASS_ATTR_ATOM(c, name, struct, member) \ + eclass_new_attr_typed(c, name, "atom", 1, 0, calcoffset(struct, member)) //! Macros that create an int array attribute -#define CLASS_ATTR_INT_ARRAY(c, name, flags, struct, member, size) \ - eclass_new_attr_typed(c, name, "int", size, 0, flags, calcoffset(struct, member)) +#define CLASS_ATTR_INT_ARRAY(c, name, struct, member, size) \ + eclass_new_attr_typed(c, name, "int", size, 0, calcoffset(struct, member)) //! Macros that create a long array attribute -#define CLASS_ATTR_LONG_ARRAY(c, name, flags, struct, member, size) \ - eclass_new_attr_typed(c, name, "long", size, 0, flags, calcoffset(struct, member)) +#define CLASS_ATTR_LONG_ARRAY(c, name, struct, member, size) \ + eclass_new_attr_typed(c, name, "long", size, 0, calcoffset(struct, member)) //! Macros that create a float array attribute -#define CLASS_ATTR_FLOAT_ARRAY(c, name, flags, struct, member, size) \ - eclass_new_attr_typed(c, name, "float", size, 0, flags, calcoffset(struct, member)) +#define CLASS_ATTR_FLOAT_ARRAY(c, name, struct, member, size) \ + eclass_new_attr_typed(c, name, "float", size, 0, calcoffset(struct, member)) //! Macros that create a double array attribute -#define CLASS_ATTR_DOUBLE_ARRAY(c, name, flags, struct, member, size) \ - eclass_new_attr_typed(c, name, "double", size, 0, flags, calcoffset(struct, member)) +#define CLASS_ATTR_DOUBLE_ARRAY(c, name, struct, member, size) \ + eclass_new_attr_typed(c, name, "double", size, 0, calcoffset(struct, member)) //! Macros that create a symbol array attribute -#define CLASS_ATTR_SYMBOL_ARRAY(c, name, flags, struct, member, size) \ - eclass_new_attr_typed(c, name, "symbol", size, 0, flags, calcoffset(struct, member)) +#define CLASS_ATTR_SYMBOL_ARRAY(c, name, struct, member, size) \ + eclass_new_attr_typed(c, name, "symbol", size, 0, calcoffset(struct, member)) //! Macros that create a atom array attribute -#define CLASS_ATTR_ATOM_ARRAY(c, name, flags, struct, member, size) \ - eclass_new_attr_typed(c, name, "atom", size, 0, flags, calcoffset(struct, member)) +#define CLASS_ATTR_ATOM_ARRAY(c, name, struct, member, size) \ + eclass_new_attr_typed(c, name, "atom", size, 0, calcoffset(struct, member)) //! Macros that create an int array with a variable size attribute -#define CLASS_ATTR_INT_VARSIZE(c, name, flags, struct, member, size, maxsize) \ - eclass_new_attr_typed(c, name, "int", calcoffset(struct, size), maxsize, flags, calcoffset(struct, member)) +#define CLASS_ATTR_INT_VARSIZE(c, name, struct, member, size, maxsize) \ + eclass_new_attr_typed(c, name, "int", calcoffset(struct, size), maxsize, calcoffset(struct, member)) //! Macros that create a long array with a variable size attribute -#define CLASS_ATTR_LONG_VARSIZE(c, name, flags, struct, member, size, maxsize) \ - eclass_new_attr_typed(c, name, "long", calcoffset(struct, size), maxsize, flags, calcoffset(struct, member)) +#define CLASS_ATTR_LONG_VARSIZE(c, name, struct, member, size, maxsize) \ + eclass_new_attr_typed(c, name, "long", calcoffset(struct, size), maxsize, calcoffset(struct, member)) //! Macros that create a float array with a variable size attribute -#define CLASS_ATTR_FLOAT_VARSIZE(c, name, flags, struct, member, size, maxsize) \ - eclass_new_attr_typed(c, name, "float", calcoffset(struct, size), maxsize, flags, calcoffset(struct, member)) +#define CLASS_ATTR_FLOAT_VARSIZE(c, name, struct, member, size, maxsize) \ + eclass_new_attr_typed(c, name, "float", calcoffset(struct, size), maxsize, calcoffset(struct, member)) //! Macros that create a double array with a variable size attribute -#define CLASS_ATTR_DOUBLE_VARSIZE(c, name, flags, struct, member, size, maxsize) \ - eclass_new_attr_typed(c, name, "double", calcoffset(struct, size), maxsize, flags, calcoffset(struct, member)) +#define CLASS_ATTR_DOUBLE_VARSIZE(c, name, struct, member, size, maxsize) \ + eclass_new_attr_typed(c, name, "double", calcoffset(struct, size), maxsize, calcoffset(struct, member)) //! Macros that create a symbol array with a variable size attribute -#define CLASS_ATTR_SYMBOL_VARSIZE(c, name, flags, struct, member, size, maxsize) \ - eclass_new_attr_typed(c, name, "symbol", calcoffset(struct, size), maxsize, flags, calcoffset(struct, member)) +#define CLASS_ATTR_SYMBOL_VARSIZE(c, name, struct, member, size, maxsize) \ + eclass_new_attr_typed(c, name, "symbol", calcoffset(struct, size), maxsize, calcoffset(struct, member)) //! Macros that create a atom array with a variable size attribute -#define CLASS_ATTR_ATOM_VARSIZE(c, name, flags, struct, member, size, maxsize) \ - eclass_new_attr_typed(c, name, "atom", calcoffset(struct, size), maxsize, flags, calcoffset(struct, member)) +#define CLASS_ATTR_ATOM_VARSIZE(c, name, struct, member, size, maxsize) \ + eclass_new_attr_typed(c, name, "atom", calcoffset(struct, size), maxsize, calcoffset(struct, member)) //! CEAMMC //! Macros that creates virtual invisible attribute only with getter and setter access -#define CLASS_ATTR_VIRTUAL(c, name, getter, setter) \ - eclass_new_attr_typed(c, name, "float", 1, 0, 0, 0); \ - eclass_attr_invisible(c, name, 0); \ +#define CLASS_ATTR_VIRTUAL(c, name, getter, setter) \ + eclass_new_attr_typed(c, name, "float", 1, 0, 0); \ + eclass_attr_invisible(c, name, 0); \ eclass_attr_accessor(c, name, (t_err_method)getter, (t_err_method)setter) //! Macros that define the category of the attributes -#define CLASS_ATTR_CATEGORY(c, name, flags, categoryname) eclass_attr_category(c, name, flags, categoryname) +#define CLASS_ATTR_CATEGORY(c, name, categoryname) eclass_attr_category(c, name, categoryname) //! Macros that define the order of the attributes -#define CLASS_ATTR_ORDER(c, name, flags, order) eclass_attr_order(c, name, flags, order) +#define CLASS_ATTR_ORDER(c, name, order) eclass_attr_order(c, name, order) //! Macros that define the label of the attributes -#define CLASS_ATTR_LABEL(c, name, flags, label) eclass_attr_label(c, name, flags, label) +#define CLASS_ATTR_LABEL(c, name, label) eclass_attr_label(c, name, label) //! Macros that define the style of the attributes -#define CLASS_ATTR_STYLE(c, name, flags, style) eclass_attr_style(c, name, flags, style) +#define CLASS_ATTR_STYLE(c, name, style) eclass_attr_style(c, name, style) //! Macros that define the default value of the attributes -#define CLASS_ATTR_DEFAULT(c, name, flags, val) eclass_attr_default(c, name, flags, val) +#define CLASS_ATTR_DEFAULT(c, name, val) eclass_attr_default(c, name, val) //! Macros that define the minimum value of the attributes #define CLASS_ATTR_FILTER_MIN(c, name, value) eclass_attr_filter_min(c, name, value) //! Macros that define the maximum value of the attributes @@ -385,21 +384,21 @@ std::pair eclass_tcl_version(); //! Macros that define the step value of the attributes #define CLASS_ATTR_STEP(c, name, value) eclass_attr_step(c, name, value) //! Macros that define the save behavior of the attributes -#define CLASS_ATTR_SAVE(c, name, flags) eclass_attr_save(c, name, flags) +#define CLASS_ATTR_SAVE(c, name) eclass_attr_save(c, name) //! Macros that define the paint behavior of the attributes -#define CLASS_ATTR_PAINT(c, name, flags) eclass_attr_paint(c, name, flags) +#define CLASS_ATTR_PAINT(c, name) eclass_attr_paint(c, name) //! Macros that define the visible behavior of the attributes -#define CLASS_ATTR_INVISIBLE(c, name, flags) eclass_attr_invisible(c, name, flags) +#define CLASS_ATTR_INVISIBLE(c, name) eclass_attr_invisible(c, name) //! Macros that define the setter and getter of the attributes #define CLASS_ATTR_ACCESSORS(c, name, getter, setter) eclass_attr_accessor(c, name, (t_err_method)getter, (t_err_method)setter) //! Macros that define the items list of the attributes -#define CLASS_ATTR_ITEMS(c, name, flags, list) eclass_attr_itemlist(c, name, flags, list) +#define CLASS_ATTR_ITEMS(c, name, list) eclass_attr_itemlist(c, name, list) //! Macros that define the deault value, save and paint bbehavior of the attributes -#define CLASS_ATTR_DEFAULT_SAVE_PAINT(c, attrname, flags, parsestr) \ - { \ - CLASS_ATTR_DEFAULT(c, attrname, flags, parsestr); \ - CLASS_ATTR_SAVE(c, attrname, flags); \ - CLASS_ATTR_PAINT(c, attrname, flags); \ +#define CLASS_ATTR_DEFAULT_SAVE_PAINT(c, attrname, parsestr) \ + { \ + CLASS_ATTR_DEFAULT(c, attrname, parsestr); \ + CLASS_ATTR_SAVE(c, attrname); \ + CLASS_ATTR_PAINT(c, attrname); \ } /** @} */ diff --git a/ceammc/ext/src/lib/cicm/Sources/ecommon.cpp b/ceammc/ext/src/lib/cicm/Sources/ecommon.cpp index 75ad84c0e0..0d0772a473 100644 --- a/ceammc/ext/src/lib/cicm/Sources/ecommon.cpp +++ b/ceammc/ext/src/lib/cicm/Sources/ecommon.cpp @@ -10,6 +10,7 @@ #include "ecommon.h" #include "cicm_common.tcl.h" +#include "cicm_common_bind.tcl.h" #include "egraphics.h" t_symbol* s_null; @@ -44,11 +45,10 @@ t_symbol* s_value_label_side_bottom; void epd_init(void) { - static int init_ = 0; - if (init_++) + static bool done = false; + if (done) return; - t_symbol* epd_symbol = gensym("epd1572"); s_null = gensym("(null)"); s_atom = gensym("atom"); s_obj = gensym("obj"); @@ -81,6 +81,9 @@ void epd_init(void) s_value_label_side_bottom = gensym("bottom"); sys_gui(cicm_common_tcl); + sys_gui(cicm_common_bind_tcl); + + done = true; } void object_method(void* x, t_symbol* s, void* z, t_typ_method method, long number, void* other) diff --git a/ceammc/ext/src/lib/cicm/Sources/edefine.h b/ceammc/ext/src/lib/cicm/Sources/edefine.h index cc84816cd6..5acae90853 100644 --- a/ceammc/ext/src/lib/cicm/Sources/edefine.h +++ b/ceammc/ext/src/lib/cicm/Sources/edefine.h @@ -230,6 +230,13 @@ typedef enum { E_SHAPE_RECT = 3 /*!< This shape is rectangle. */ } eshape_types; +enum eclip_flags { + E_CLIP_NONE = 0x0, + E_CLIP_MIN = 0x1, + E_CLIP_MAX = 0x2, + E_CLIP_MINMAX = E_CLIP_MIN & E_CLIP_MAX +}; + /** * @struct t_pt * @brief A point structure. @@ -332,6 +339,16 @@ typedef enum t_dashstyle { EDASHSTYLE_64 = 2 /*!< */ } t_dashstyle; +/** + * @struct t_dashstyle + * @brief A dashstyle enum + */ +typedef enum t_smooth { + ESMOOTH_NONE = 0, /*!< Default. No dash line pattern */ + ESMOOTH_RAW = 1, /*!< */ + ESMOOTH_BEZIER = 2 /*!< */ +} t_smooth; + //! The pre-defined black t_rgba extern const t_rgba rgba_black; //! The pre-defined grey dark t_rgba @@ -409,6 +426,7 @@ typedef struct t_egobj { t_capstyle e_capstyle; /*!< The line capstyle of the graphical object. */ t_dashstyle e_dashstyle; /*!< The line dashstyle of the graphical object. */ + t_smooth e_smooth; /*!< The line smooth of the graphical object. */ etextanchor_flags e_anchor; /*!< The anchor of the graphical object. */ etextjustify_flags e_justify; /*!< The justification of the graphical object. */ @@ -437,6 +455,7 @@ typedef struct t_elayer { elayer_flags e_state; /*!< The layer state. */ t_capstyle e_line_capstyle; /*!< The layer line capstyle. */ t_dashstyle e_line_dashstyle; /*!< The layer line dashstyle. */ + t_smooth e_line_smooth; /*!< The layer line dashstyle. */ } t_elayer; /** @} */ @@ -470,6 +489,16 @@ typedef struct t_epopup { //! Macros that define the a GUI box #define CLASS_BOX gensym("box") +typedef void (*t_mouseenter_method)(void* x); +typedef void (*t_mouseleave_method)(void* x); +typedef void (*t_mousemove_method)(void* x, t_glist*, t_pt, long); +typedef void (*t_mousedown_method)(void* x, t_glist*, t_pt, t_pt, long); +typedef void (*t_mouseup_method)(void* x, t_glist*, t_pt, long); +typedef void (*t_mousewheel_method)(void* x, t_pt, long, float); +typedef void (*t_dblclick_method)(void* x, t_glist*, t_pt, long); +typedef void (*t_rightclick_method)(void* x, t_pt, t_pt); +typedef void (*t_popup_method)(void* x, t_symbol*, long, t_pt); + /** * @struct t_ewidget * @brief The default method of a class. @@ -485,20 +514,23 @@ typedef struct t_ewidget { t_clickfn w_clickfn; /*!< The native Pd click method. */ t_typ_method w_assist; /*!< The dummy iolets assist method. */ t_typ_method w_paint; /*!< The paint method. */ - t_typ_method w_mouseenter; /*!< The mouse enter method. */ - t_typ_method w_mouseleave; /*!< The mouse leave method. */ - t_typ_method w_mousemove; /*!< The mouse move method. */ - t_typ_method w_mousedown; /*!< The mouse down method. */ + t_typ_method w_create; /*!< The widget after create method. */ + t_typ_method w_erase; /*!< The widget before erase method. */ + t_mouseenter_method w_mouseenter; /*!< The mouse enter method. */ + t_mouseleave_method w_mouseleave; /*!< The mouse leave method. */ + t_mousemove_method w_mousemove; /*!< The mouse move method. */ + t_mousedown_method w_mousedown; /*!< The mouse down method. */ t_typ_method w_mousedrag; /*!< The mouse drag method. */ - t_typ_method w_mouseup; /*!< The mouse up method. */ - t_typ_method w_mousewheel; /*!< The mouse wheel method. */ - t_typ_method w_dblclick; /*!< The mouse double click method. */ + t_mouseup_method w_mouseup; /*!< The mouse up method. */ + t_mousewheel_method w_mousewheel; /*!< The mouse wheel method. */ + t_dblclick_method w_dblclick; /*!< The mouse double click method. */ + t_rightclick_method w_rightclick; /*!< The mouse double click method. */ t_typ_method w_key; /*!< The key method. */ t_typ_method w_keyfilter; /*!< The key filter method. */ t_typ_method w_getdrawparameters; /*!< The get draw parameter method. */ t_typ_method w_save; /*!< The save method. */ t_typ_method w_dosave; /*!< The real save method. */ - t_typ_method w_popup; /*!< The popup method. */ + t_popup_method w_popup; /*!< The popup method. */ t_typ_method w_dsp; /*!< The dsp method. */ t_typ_method w_oksize; /*!< The size validation method. */ t_err_method w_notify; /*!< The notification method. */ @@ -519,24 +551,23 @@ typedef struct t_eattr { t_symbol* category; /*!< The dummy category of the attribute. */ t_symbol* label; /*!< The label of the attribute. */ t_symbol* style; /*!< The style of the attribute (checkbutton, color, number, entry, menu). */ - long order; /*!< The dummy order of the attribute. */ - char save; /*!< If the attribute should be saved. */ - char paint; /*!< If the attribute should repaint the t_ebox when it has changed. */ - char invisible; /*!< If the attribute is invisible. */ - long flags; /*!< The dummy flags of the attribute. */ - long offset; /*!< The offset of the attribute in the object structure. */ - long sizemax; /*!< The maximum size of the attribute if the attribute is an array. */ - long size; /*!< The size of the attribute if the attribute is an array. */ - + t_symbol* units; /*!< The units of the attribute. */ + t_symbol* defvals; /*!< The default value of the attribute. */ + t_symbol** itemslist; /*!< The available items of an attribute if it is a menu. */ + long itemssize; /*!< The number of available items of an attribute if it is a menu. */ t_err_method getter; /*!< The getter method of the attribute. */ t_err_method setter; /*!< The setter method of the attribute. */ - long clipped; /*!< If the attribute is clipped if it's value or an array of numerical values. */ + size_t offset; /*!< The offset of the attribute in the object structure. */ + size_t sizemax; /*!< The maximum size of the attribute if the attribute is an array. */ + size_t size; /*!< The size of the attribute if the attribute is an array. */ float minimum; /*!< The minimum value of the attribute. */ float maximum; /*!< The maximum value of the attribute. */ float step; /*!< The increment or decrement step calue of the attribute. */ - t_symbol* defvals; /*!< The default value of the attribute. */ - t_symbol** itemslist; /*!< The available items of an attribute if it is a menu. */ - long itemssize; /*!< The number of available items of an attribute if it is a menu. */ + int order; /*!< The dummy order of the attribute. */ + eclip_flags clipped; /*!< If the attribute is clipped if it's value or an array of numerical values. */ + bool save; /*!< If the attribute should be saved. */ + bool paint; /*!< If the attribute should repaint the t_ebox when it has changed. */ + bool invisible; /*!< If the attribute is invisible. */ } t_eattr; /** @@ -550,8 +581,8 @@ typedef struct t_eclass { // in Pd 0.48 t_class* next added into t_class, and sizeof(t_class) grown to 8 bytes on x86_64 // this padding added to prevent field rewriting values char c_padding[8]; - char c_box; /*!< The marker if the class is GUI. */ - char c_dsp; /*!< The marker if the class is DSP. */ + bool c_box; /*!< The marker if the class is GUI. */ + bool c_dsp; /*!< The marker if the class is DSP. */ t_ewidget c_widget; /*!< The extra widget methods. */ t_eattr** c_attr; /*!< The attributes. */ long c_nattr; /*!< The number of attributes. */ @@ -707,17 +738,19 @@ typedef enum { typedef enum t_cursor { ECURSOR_LEFT_PTR = 0, /*!< The left_ptr string. */ ECURSOR_CENTER_PTR = 1, /*!< The center_ptr string. */ - ECURSOR_SDOUBLE_ARROW = 2, /*!< The sb_v_double_arrow string. */ - ECURSOR_PLUS = 3, /*!< The plus string. */ - ECURSOR_HAND = 4, /*!< The hand2 string. */ - ECURSOR_CIRCLE = 5, /*!< The circle string. */ - ECURSOR_X = 6, /*!< The X_cursor string. */ - ECURSOR_BOTTOM = 7, /*!< The bottom_side string. */ - ECURSOR_RIGHT_CORNER = 8, /*!< The bottom_right_corner string. */ - ECURSOR_RIGHT_SIDE = 9, /*!< The right_side string. */ - ECURSOR_DOUBLE_ARROW = 10, /*!< The double_arrow string. */ - ECURSOR_EXCHANGE = 11, /*!< The exchange string. */ - ECURSOR_XTERM = 12 /*!< The xterm string. */ + ECURSOR_PLUS = 2, /*!< The plus string. */ + ECURSOR_HAND = 3, /*!< The hand2 string. */ + ECURSOR_CIRCLE = 4, /*!< The circle string. */ + ECURSOR_X = 5, /*!< The X_cursor string. */ + ECURSOR_BOTTOM = 6, /*!< The bottom_side string. */ + ECURSOR_RIGHT_CORNER = 7, /*!< The bottom_right_corner string. */ + ECURSOR_RIGHT_SIDE = 8, /*!< The right_side string. */ + ECURSOR_LEFT_SIDE = 9, /*!< The left_side string. */ + ECURSOR_EXCHANGE = 10, /*!< The exchange string. */ + ECURSOR_XTERM = 11, /*!< The xterm string. */ + ECURSOR_MOVE = 12, /*!< The move cursor */ + ECURSOR_VDOUBLE_ARROW = 13, /*!< The sb_v_double_arrow string. */ + ECURSOR_HDOUBLE_ARROW = 14 /*!< The sb_h_double_arrow string. */ } ebox_cursors; /** @@ -739,7 +772,7 @@ typedef struct t_edrawparams { * @details It contains the t_eobj with all the members for graphical behavior. * This should be used for graphical object that don't have signal processing methods. */ -typedef struct t_ebox { +typedef struct t_ebox_ { t_eobj b_obj; ///e_width = g->e_line_width; nobj->e_capstyle = g->e_line_capstyle; nobj->e_dashstyle = g->e_line_dashstyle; + nobj->e_smooth = g->e_line_smooth; nobj->e_justify = g->e_new_objects.e_justify; nobj->e_anchor = g->e_new_objects.e_anchor; nobj->e_text = g->e_new_objects.e_text; @@ -846,6 +847,17 @@ static void egraphics_apply_matrix(t_elayer* g, t_egobj* gobj) i++; } } + } else if (gobj->e_type == E_GOBJ_SHAPE) { + if (gobj->e_points[0].x == E_SHAPE_OVAL) { + x_p = gobj->e_points[1].x * g->e_matrix.xx + gobj->e_points[1].y * g->e_matrix.xy + g->e_matrix.x0; + y_p = gobj->e_points[1].x * g->e_matrix.yx + gobj->e_points[1].y * g->e_matrix.yy + g->e_matrix.y0; + gobj->e_points[1].x = x_p; + gobj->e_points[1].y = y_p; + x_p = gobj->e_points[2].x * g->e_matrix.xx + gobj->e_points[2].y * g->e_matrix.xy + g->e_matrix.x0; + y_p = gobj->e_points[2].x * g->e_matrix.yx + gobj->e_points[2].y * g->e_matrix.yy + g->e_matrix.y0; + gobj->e_points[2].x = x_p; + gobj->e_points[2].y = y_p; + } } else { for (i = 0; i < gobj->e_npoints; i++) { x_p = gobj->e_points[i].x * g->e_matrix.xx + gobj->e_points[i].y * g->e_matrix.xy + g->e_matrix.x0; @@ -1073,3 +1085,8 @@ void egraphics_raise(t_elayer* over, t_elayer* l) { sys_vgui("raise %s %s\n", over->e_id->s_name, l->e_id->s_name); } + +void egraphics_set_line_smooth(t_elayer* g, t_smooth smooth) +{ + g->e_line_smooth = smooth; +} diff --git a/ceammc/ext/src/lib/cicm/Sources/egraphics.h b/ceammc/ext/src/lib/cicm/Sources/egraphics.h index fe4c828d95..6c7144d8cd 100644 --- a/ceammc/ext/src/lib/cicm/Sources/egraphics.h +++ b/ceammc/ext/src/lib/cicm/Sources/egraphics.h @@ -45,6 +45,14 @@ void egraphics_set_line_capstyle(t_elayer* g, t_capstyle style); */ void egraphics_set_line_dashstyle(t_elayer* g, t_dashstyle style); +/*! + * \fn void egraphics_set_line_smooth(t_elayer *g, t_smooth smooth) + * \brief Sets the line smooth that will be used by the t_elayer. + * \param g The t_elayer pointer. + * \param smooth The t_dashstyle value. + */ +void egraphics_set_line_smooth(t_elayer* g, t_smooth smooth); + /*! * \fn void egraphics_set_color_rgba(t_elayer *g, const t_rgba *rgba) * \brief Sets the color in rgba that will be used by the t_elayer. diff --git a/ceammc/ext/src/lib/cicm/Sources/eobj.cpp b/ceammc/ext/src/lib/cicm/Sources/eobj.cpp index 126a828c2c..1985f781b5 100644 --- a/ceammc/ext/src/lib/cicm/Sources/eobj.cpp +++ b/ceammc/ext/src/lib/cicm/Sources/eobj.cpp @@ -96,28 +96,25 @@ t_canvas* eobj_getcanvas(void* x) return z->o_canvas; } -char eobj_isbox(void* x) +bool eobj_isbox(void* x) { t_eobj* z = (t_eobj*)x; t_eclass* c = eobj_getclass(z); return c->c_box; } -char eobj_isdsp(void* x) +bool eobj_isdsp(void* x) { t_eobj* z = (t_eobj*)x; t_eclass* c = eobj_getclass(z); - if (c->c_dsp && c->c_widget.w_dsp) - return 1; - else - return 0; + return (c->c_dsp && c->c_widget.w_dsp); } -void eobj_popup(t_eobj* x, t_symbol* s, float itemid) +void eobj_popup(t_eobj* x, t_symbol* s, t_float itemid, t_float xpos, t_float ypos) { t_eclass* c = eobj_getclass(x); if (c->c_widget.w_popup) { - c->c_widget.w_popup(x, s, (long)itemid); + c->c_widget.w_popup(x, s, (long)itemid, { xpos, ypos }); } } diff --git a/ceammc/ext/src/lib/cicm/Sources/eobj.h b/ceammc/ext/src/lib/cicm/Sources/eobj.h index 5bbe7c9e2e..629e0fe178 100644 --- a/ceammc/ext/src/lib/cicm/Sources/eobj.h +++ b/ceammc/ext/src/lib/cicm/Sources/eobj.h @@ -30,7 +30,7 @@ * \param c The t_eclass pointer. * \return This function returns a pointer to a new instance of a t_eobj. */ -void *eobj_new(t_eclass *c); +void* eobj_new(t_eclass* c); /*! * \fn void eobj_free(void *x) @@ -38,7 +38,7 @@ void *eobj_new(t_eclass *c); * \details Detaches the t_eobj from Pure Data and frees the proxy inlets. * \param x The t_eobj pointer */ -void eobj_free(void *x); +void eobj_free(void* x); /*! * \fn t_pd_err eobj_iscicm(void* x) @@ -64,7 +64,7 @@ t_eproxy* eobj_proxynew(void* x); * \param x The t_eobj pointer. * \return This function return the index of the current proxy. */ -int eobj_getproxy(void* x); +int eobj_getproxy(void* x); /*! * \fn t_eclass* eobj_getclass(void* x) @@ -91,25 +91,25 @@ t_symbol* eobj_getclassname(void* x); * \param x The t_eobj pointer. * \return This function returns a pointer the canvas that owns the t_eobj. */ -t_canvas* eobj_getcanvas(void *x); +t_canvas* eobj_getcanvas(void* x); /*! * \fn char eobj_isbox(void *x) * \brief Retreives if a t_eobj is a GUI box or not. * \details Check if the box flag is postive or null. * \param x The t_eobj pointer. - * \return This function returns 1 if the t_eobj is a GUI and 0 if not. + * \return This function returns true if the t_eobj is a GUI and false if not. */ -char eobj_isbox(void *x); +bool eobj_isbox(void* x); /*! * \fn char eobj_isdsp(void *x) * \brief Retreives if a t_eobj is a DSP object or not * \details Check if the dsp method has been initialized. * \param x The t_eobj pointer. - * \return This function returns 1 if the t_eobj is a DSP object and 0 if not. + * \return This function returns true if the t_eobj is a DSP object and false if not. */ -char eobj_isdsp(void *x); +bool eobj_isdsp(void* x); /*! * \fn void eobj_attrprocess_viabinbuf(void *x, t_binbuf *d) @@ -118,7 +118,7 @@ char eobj_isdsp(void *x); * \param x The t_ebox pointer. * \param d The binbuf pointer. */ -void eobj_attrprocess_viabinbuf(void *x, t_binbuf *d); +void eobj_attrprocess_viabinbuf(void* x, t_binbuf* d); /*! * \fn void eobj_attrprocess_viatoms(void *x, int argc, t_atom *argv) @@ -128,7 +128,7 @@ void eobj_attrprocess_viabinbuf(void *x, t_binbuf *d); * \param argc The number of atoms. * \param argv The pointer to the atoms. */ -void eobj_attrprocess_viatoms(void *x, int argc, t_atom *argv); +void eobj_attrprocess_viatoms(void* x, int argc, t_atom* argv); /*! * \fn void eobj_attr_setvalueof(void *x, t_symbol* s, int argc, t_atom *argv) @@ -139,7 +139,7 @@ void eobj_attrprocess_viatoms(void *x, int argc, t_atom *argv); * \param argc The number of the atoms. * \param argv The array of the atoms. */ -void eobj_attr_setvalueof(void *x, t_symbol* s, int argc, t_atom *argv); +void eobj_attr_setvalueof(void* x, t_symbol* s, int argc, t_atom* argv); /*! * \fn void eobj_attr_getvalueof(void *x, t_symbol* s, int *argc, t_atom **argv) @@ -150,7 +150,7 @@ void eobj_attr_setvalueof(void *x, t_symbol* s, int argc, t_atom *argv); * \param argc The pointer to an int that will be initialize with the number of the atoms. * \param argv The pointer to the array of the atoms that will be allocated if the attribute exist. */ -void eobj_attr_getvalueof(void *x, t_symbol *s, int *argc, t_atom **argv); +void eobj_attr_getvalueof(void* x, t_symbol* s, int* argc, t_atom** argv); /** @} */ @@ -168,7 +168,7 @@ void eobj_attr_getvalueof(void *x, t_symbol *s, int *argc, t_atom **argv); * \param inlets Write created inlets to given pointer, if NULL given - no write * \param outlets Write created outlets to given pointer, if NULL given - no write */ -void eobj_dspsetup(void *x, long nins, long nouts, t_eproxy** inlets, t_outlet** outlets); +void eobj_dspsetup(void* x, long nins, long nouts, t_eproxy** inlets, t_outlet** outlets); /*! * \fn void eobj_dspflags(void *x, long flags) @@ -178,7 +178,7 @@ void eobj_dspsetup(void *x, long nins, long nouts, t_eproxy** inlets, t_outlet** * \param flags The dsp flags. * \see edsp_flags */ -void eobj_dspflags(void *x, long flags); +void eobj_dspflags(void* x, long flags); /*! * \fn void eobj_dspfree(void *x) @@ -186,7 +186,7 @@ void eobj_dspflags(void *x, long flags); * \details Frees the memory allocated for digital dignal processing of a t_edspobj. \n This function should replace pd_free() and you shouldn't have to call eobj_free(); * \param x The edspobj pointer */ -void eobj_dspfree(void *x); +void eobj_dspfree(void* x); /*! * \fn void eobj_resize_inputs(void *x, long nins) @@ -195,7 +195,7 @@ void eobj_dspfree(void *x); * \param x The edspobj pointer. * \param nins The number of signal inputs. */ -void eobj_resize_inputs(void *x, long nins); +void eobj_resize_inputs(void* x, long nins); /*! * \fn t_sample* eobj_getsignalinput(void *x, long index) @@ -205,7 +205,7 @@ void eobj_resize_inputs(void *x, long nins); * \param index The index of the input. * \return A pointer to the signal vector or NULL. */ -t_sample* eobj_getsignalinput(void *x, long index); +t_sample* eobj_getsignalinput(void* x, long index); /*! * \fn t_sample* eobj_getsignaloutput(void *x, long index) @@ -215,11 +215,10 @@ t_sample* eobj_getsignalinput(void *x, long index); * \param index The index of the output. * \return A pointer to the signal vector or NULL. */ -t_sample* eobj_getsignaloutput(void *x, long index); +t_sample* eobj_getsignaloutput(void* x, long index); /** @} */ - //! @cond //! The default save method for eobj called by PD (PRIVATE) @@ -228,7 +227,7 @@ t_sample* eobj_getsignaloutput(void *x, long index); * \param z The eobj pointor * \param b The binbuf */ -void eobj_save(t_gobj* x, t_binbuf *b); +void eobj_save(t_gobj* x, t_binbuf* b); //! The default save method for UI ebox (PRIVATE) /* @@ -236,7 +235,7 @@ void eobj_save(t_gobj* x, t_binbuf *b); * \param z The eobj pointor * \param b The binbuf */ -void eobj_dosave(t_eobj* x, t_binbuf *b); +void eobj_dosave(t_eobj* x, t_binbuf* b); //! The popup method called by tcl/tk (PRIVATE) /* @@ -245,7 +244,7 @@ void eobj_dosave(t_eobj* x, t_binbuf *b); * \param s The message selector * \param itemid the id of the selected item */ -void eobj_popup(t_eobj* x, t_symbol* s, float itemid); +void eobj_popup(t_eobj* x, t_symbol* s, t_float itemid, t_float xpos, t_float ypos); //! The default write method for all eobj called by PD (PRIVATE) /* @@ -255,7 +254,7 @@ void eobj_popup(t_eobj* x, t_symbol* s, float itemid); * \param argc The size of the array of atoms * \param argv The array of atoms */ -void eobj_write(t_eobj* x, t_symbol* s, int argc, t_atom *argv); +void eobj_write(t_eobj* x, t_symbol* s, int argc, t_atom* argv); //! The default read method for all eobj called by PD (PRIVATE) /* @@ -265,14 +264,14 @@ void eobj_write(t_eobj* x, t_symbol* s, int argc, t_atom *argv); * \param argc The size of the array of atoms * \param argv The array of atoms */ -void eobj_read(t_eobj* x, t_symbol* s, int argc, t_atom *argv); +void eobj_read(t_eobj* x, t_symbol* s, int argc, t_atom* argv); //! The dsp method (PRIVATE) /* * \param x The edspobj pointer * \param sp The pointers to signal structures */ -void eobj_dsp(void *x, t_signal **sp); +void eobj_dsp(void* x, t_signal** sp); //! The perform method for no inplace(PRIVATE) /* @@ -295,10 +294,7 @@ t_int* eobj_perform_noinplace(t_int* w); * \param flags The user perform flags * \param userparam The user perform parameters */ -void eobj_dsp_add(void *x, t_symbol* s, t_object* obj, t_typ_method m, long flags, void *userparam); +void eobj_dsp_add(void* x, t_symbol* s, t_object* obj, t_typ_method m, long flags, void* userparam); //! @endcond #endif - - - diff --git a/ceammc/ext/src/lib/cicm/Sources/epopup.cpp b/ceammc/ext/src/lib/cicm/Sources/epopup.cpp index 5ed48153e1..648fb690c4 100644 --- a/ceammc/ext/src/lib/cicm/Sources/epopup.cpp +++ b/ceammc/ext/src/lib/cicm/Sources/epopup.cpp @@ -27,10 +27,10 @@ void epopupmenu_setfont(t_epopup* popup, t_efont* font) sys_vgui(".eboxpopup%s configure -font {%s %d %s italic}\n", popup->c_name->s_name, font[0].c_family->s_name, (int)font[0].c_size, font[0].c_weight->s_name, font[0].c_slant->s_name); } -void epopupmenu_additem(t_epopup* popup, int itemid, const char* text, bool enabled) +void epopupmenu_additem(t_epopup* popup, int itemid, const char* text, bool enabled, const t_pt& pos) { sys_vgui(".eboxpopup%s add command ", popup->c_name->s_name); - sys_vgui("-command {pdsend {%s popup %s %d}} ", popup->c_send->s_name, popup->c_name->s_name, itemid); + sys_vgui("-command {pdsend {%s popup %s %d %i %i}} ", popup->c_send->s_name, popup->c_name->s_name, itemid, (int)pos.x, (int)pos.y); sys_vgui("-label [_ {%s} ] ", text); if (enabled) sys_vgui("-state active\n"); diff --git a/ceammc/ext/src/lib/cicm/Sources/epopup.h b/ceammc/ext/src/lib/cicm/Sources/epopup.h index 235a25994f..b6a176691d 100644 --- a/ceammc/ext/src/lib/cicm/Sources/epopup.h +++ b/ceammc/ext/src/lib/cicm/Sources/epopup.h @@ -49,8 +49,9 @@ void epopupmenu_setfont(t_epopup* popup, t_efont* font); * \param itemid The id of the item. * \param text The text of the item. * \param enabled If the item is marked as enabled or not. + * \param pos popup menu position */ -void epopupmenu_additem(t_epopup* popup, int itemid, const char* text, bool enabled); +void epopupmenu_additem(t_epopup* popup, int itemid, const char* text, bool enabled, const t_pt& pos); /*! * \fn void epopupmenu_addseparator(t_epopup *popup) diff --git a/ceammc/ext/src/lib/datatype_property.cpp b/ceammc/ext/src/lib/datatype_property.cpp index 24dad21762..c611fa32fe 100644 --- a/ceammc/ext/src/lib/datatype_property.cpp +++ b/ceammc/ext/src/lib/datatype_property.cpp @@ -14,6 +14,7 @@ #include "datatype_property.h" #include "ceammc_convert.h" #include "ceammc_datatypes.h" +#include "ceammc_format.h" #include "ceammc_log.h" #include @@ -60,7 +61,8 @@ std::string DataTypeProperty::toString() const { std::ostringstream ss; ss << "Property: " << name_ << "\n" - << " type: " << type_ << "\n"; + << " type: " << type_ << "\n" + << " value: " << propertyStrValue() << "\n"; return ss.str(); } @@ -279,6 +281,79 @@ bool DataTypeProperty::setEnumValues(const AtomList& lst) return true; } +const std::string& DataTypeProperty::propertyStrType() const +{ + static std::string str_[] = { "float", "int", "bool", "symbol", "list" }; + return str_[type_]; +} + +std::string DataTypeProperty::propertyStrValue() const +{ + bool vbool = false; + long vint = 0; + t_float vfloat = 0; + t_symbol* vsym = &s_; + AtomList vlist; + + if (getBool(vbool)) + return vbool ? "true" : "false"; + else if (getInt(vint)) + return std::to_string(vint); + else if (getFloat(vfloat)) + return std::to_string(vfloat); + else if (getSymbol(&vsym)) + return vsym->s_name; + else if (getList(vlist)) + return to_string(vlist); + else + return "unknown property value type"; +} + +std::string DataTypeProperty::propertyStrMinValue() const +{ + if (isFloat()) + return std::to_string(floatRange().first); + else if (isInt()) + return std::to_string(intRange().first); + else + return ""; +} + +std::string DataTypeProperty::propertyStrMaxValue() const +{ + if (isFloat()) + return std::to_string(floatRange().second); + else if (isInt()) + return std::to_string(intRange().second); + else + return ""; +} + +bool DataTypeProperty::hasMinValue() const +{ + if (isFloat()) + return floatRange().first != std::numeric_limits::lowest(); + else if (isInt()) + return intRange().first != std::numeric_limits::lowest(); + else + return false; +} + +bool DataTypeProperty::hasMaxValue() const +{ + if (isFloat()) + return floatRange().second != std::numeric_limits::max(); + else if (isInt()) + return intRange().second != std::numeric_limits::max(); + else + return false; +} + +bool DataTypeProperty::hasEnumValues() const +{ + return !enum_.empty(); +} + static PropertyInfoType type2type(DataTypeProperty::Type t) { switch (t) { @@ -325,21 +400,31 @@ void DataTypeProperty::updateAll() PropertyStorage::Dict& PropertyStorage::storage() { - static Dict dict; - return dict; + static Dict dict_; + return dict_; } -std::string PropertyStorage::makeFullName(const std::string& name, _glist* cnv) +t_symbol* PropertyStorage::makeFullName(const std::string& name, t_glist* cnv) { std::string res; char buf[30]; snprintf(buf, sizeof(buf), "%p:", (void*)cnv); res += buf; res += name; - return res; + return gensym(res.c_str()); +} + +t_symbol* PropertyStorage::makeFullName(t_symbol* name, t_glist* cnv) +{ + std::string res; + char buf[30]; + snprintf(buf, sizeof(buf), "%p:", (void*)cnv); + res += buf; + res += name->s_name; + return gensym(res.c_str()); } -PropertyPtr::PropertyPtr(const std::string& name) +PropertyPtr::PropertyPtr(t_symbol* name) : name_(name) , prop_(PropertyStorage::storage().acquire(name_)) { diff --git a/ceammc/ext/src/lib/datatype_property.h b/ceammc/ext/src/lib/datatype_property.h index 1f200069ca..cf143a0186 100644 --- a/ceammc/ext/src/lib/datatype_property.h +++ b/ceammc/ext/src/lib/datatype_property.h @@ -76,10 +76,18 @@ class DataTypeProperty : public AbstractData { t_symbol* name() const { return name_; } Type propertyType() const { return type_; } + const std::string& propertyStrType() const; + std::string propertyStrValue() const; + std::string propertyStrMinValue() const; + std::string propertyStrMaxValue() const; std::pair floatRange() const { return { fmin_, fmax_ }; } std::pair intRange() const { return { lmin_, lmax_ }; } const AtomList& enumValues() const { return enum_; } + bool hasMinValue() const; + bool hasMaxValue() const; + bool hasEnumValues() const; + PropertyInfo info() const; public: @@ -106,15 +114,16 @@ class PropertyStorage { public: static Dict& storage(); - static std::string makeFullName(const std::string& name, t_canvas* cnv); + static t_symbol* makeFullName(const std::string& name, t_canvas* cnv); + static t_symbol* makeFullName(t_symbol* name, t_canvas* cnv); }; class PropertyPtr { - std::string name_; + t_symbol* name_; DataTypeProperty* prop_; public: - PropertyPtr(const std::string& name); + PropertyPtr(t_symbol* name); ~PropertyPtr(); DataTypeProperty* operator->() diff --git a/ceammc/ext/src/lib/ext_methods.cpp b/ceammc/ext/src/lib/ext_methods.cpp index 828eb0c2d4..1a4835678f 100644 --- a/ceammc/ext/src/lib/ext_methods.cpp +++ b/ceammc/ext/src/lib/ext_methods.cpp @@ -16,6 +16,7 @@ #include "ceammc_pd.h" #include "ceammc_platform.h" #include "m_pd.h" +#include "stk/stk/include/Stk.h" #include #include @@ -66,6 +67,11 @@ int main(int argc, char* argv[]) binbuf_free(b); } + // stk rawwaves path + if (getenv("RAWWAVES") != nullptr) { + stk::Stk::setRawwavePath(getenv("RAWWAVES")); + } + pd::External ext(argv[1], args); if (!ext.object()) { cerr << "can't create object: " << argv[1] << endl; diff --git a/ceammc/ext/src/lib/ext_props.cpp b/ceammc/ext/src/lib/ext_props.cpp index 2cf02247e9..f73797685e 100644 --- a/ceammc/ext/src/lib/ext_props.cpp +++ b/ceammc/ext/src/lib/ext_props.cpp @@ -16,6 +16,7 @@ #include "ceammc_format.h" #include "ceammc_pd.h" #include "ceammc_platform.h" +#include "stk/stk/include/Stk.h" #include #include @@ -140,7 +141,7 @@ static void printInfo(std::ostream& os, const PropertyInfo& pi) os << " \"default\": " << pi.defaultList() << ",\n"; break; case PropertyInfoType::SYMBOL: - os << " \"default\": \"" << pi.defaultSymbol()->s_name << "\",\n"; + os << " \"default\": \"" << pi.defaultSymbol(&s_)->s_name << "\",\n"; break; case PropertyInfoType::VARIANT: if (!pi.defaultAtom().isNone()) @@ -162,7 +163,7 @@ int main(int argc, char* argv[]) ceammc_init(); if (argc < 2) { - cerr << "usage: " << platform::basename(argv[0]) << " OBJECT_NAME" << endl; + cerr << "usage: " << platform::basename(argv[0]) << " OBJECT_NAME [ARGS]" << endl; return 1; } @@ -173,7 +174,29 @@ int main(int argc, char* argv[]) return 2; } - pd::External ext(argv[1], AtomList()); + AtomList pd_args; + if (argc > 2) { + for (int i = 2; i < argc; i++) { + t_binbuf* b = binbuf_new(); + if (b) { + binbuf_text(b, argv[i], strlen(argv[i])); + auto n = binbuf_getnatom(b); + auto v = binbuf_getvec(b); + + for (int j = 0; j < n; j++) + pd_args.append(Atom(v[j])); + + binbuf_free(b); + } + } + } + + // stk rawwaves path + if (getenv("RAWWAVES") != nullptr) { + stk::Stk::setRawwavePath(getenv("RAWWAVES")); + } + + pd::External ext(argv[1], pd_args); if (!ext.object()) { cerr << "can't create object: " << argv[1] << endl; return 3; @@ -188,6 +211,9 @@ int main(int argc, char* argv[]) cout << "{\n"; for (auto& p : ext.properties()) { + if (p.name().size() > 1 && p.name()[1] == '.') + continue; + if (!first) cout << ",\n"; diff --git a/ceammc/ext/src/list/list_at.cpp b/ceammc/ext/src/list/list_at.cpp index 9ab6d0f016..c202769994 100644 --- a/ceammc/ext/src/list/list_at.cpp +++ b/ceammc/ext/src/list/list_at.cpp @@ -5,6 +5,7 @@ ListAt::ListAt(const PdArgs& a) : ListBase(a) + , default_(nullptr) { static t_symbol* SYM_REL = gensym("rel"); static t_symbol* SYM_CLIP = gensym("clip"); @@ -30,6 +31,9 @@ ListAt::ListAt(const PdArgs& a) createProperty(new SymbolEnumAlias("@clip", at_method_, SYM_CLIP)); createProperty(new SymbolEnumAlias("@wrap", at_method_, SYM_WRAP)); createProperty(new SymbolEnumAlias("@fold", at_method_, SYM_FOLD)); + + default_ = new AtomProperty("@default", Atom()); + createProperty(default_); } void ListAt::onInlet(size_t idx, const AtomList& l) @@ -93,8 +97,12 @@ const Atom* ListAt::at(const AtomList& l, const Atom& p) else a = l.relativeAt(pos); - if (a == 0) - OBJ_ERR << "invalid index value: " << p; + if (a == 0) { + if (default_->value().isNone()) + OBJ_ERR << "invalid index value: " << p; + else + a = &(default_->value()); + } return a; } diff --git a/ceammc/ext/src/list/list_at.h b/ceammc/ext/src/list/list_at.h index 3781cf2e81..6692824bb0 100644 --- a/ceammc/ext/src/list/list_at.h +++ b/ceammc/ext/src/list/list_at.h @@ -21,6 +21,7 @@ using namespace ceammc; class ListAt : public ListBase { ListProperty* pos_; SymbolEnumProperty* at_method_; + AtomProperty* default_; public: ListAt(const PdArgs& a); diff --git a/ceammc/ext/src/list/list_remove.cpp b/ceammc/ext/src/list/list_remove.cpp index 638b898baf..e224ca5dbe 100644 --- a/ceammc/ext/src/list/list_remove.cpp +++ b/ceammc/ext/src/list/list_remove.cpp @@ -23,10 +23,10 @@ ListRemove::ListRemove(const PdArgs& args) createInlet(); createOutlet(); - onInlet(1, positionalArguments()); + setRemoveList(positionalArguments()); } -void ListRemove::onInlet(size_t, const AtomList& lst) +void ListRemove::setRemoveList(const AtomList& lst) { auto l = list::uniqueSorted(lst); idx_.clear(); @@ -35,6 +35,11 @@ void ListRemove::onInlet(size_t, const AtomList& lst) idx_.push_back(el.asInt()); } +void ListRemove::onInlet(size_t, const AtomList& lst) +{ + setRemoveList(lst); +} + void ListRemove::onList(const AtomList& lst) { size_t N = lst.size(); diff --git a/ceammc/ext/src/list/list_remove.h b/ceammc/ext/src/list/list_remove.h index aa7120c585..6c4eb8eb7a 100644 --- a/ceammc/ext/src/list/list_remove.h +++ b/ceammc/ext/src/list/list_remove.h @@ -27,13 +27,14 @@ class ListRemove : public BaseObject { public: ListRemove(const PdArgs& args); - void onInlet(size_t, const AtomList&) override; - void onList(const AtomList& lst) override; + void onInlet(size_t, const AtomList&) final; + void onList(const AtomList& lst) final; void onDataT(const DataTPtr& l); private: void precalcIndexes(size_t N); + void setRemoveList(const AtomList& lst); }; void setup_list_remove(); diff --git a/ceammc/ext/src/list/list_resize.cpp b/ceammc/ext/src/list/list_resize.cpp index d9ee93433c..ad252e4ec6 100644 --- a/ceammc/ext/src/list/list_resize.cpp +++ b/ceammc/ext/src/list/list_resize.cpp @@ -73,7 +73,10 @@ void ListResize::initProperties() createProperty(new SymbolEnumAlias("@wrap", method_, SYM_WRAP)); createProperty(new SymbolEnumAlias("@fold", method_, SYM_FOLD)); - createCbProperty("@pad", &ListResize::getPadValue, &ListResize::setPadValue); + { + Property* p = createCbProperty("@pad", &ListResize::getPadValue, &ListResize::setPadValue); + p->info().setType(PropertyInfoType::VARIANT); + } } AtomList ListResize::getPadValue() const diff --git a/ceammc/ext/src/list/list_separate.cpp b/ceammc/ext/src/list/list_separate.cpp index a6a16d6031..a38c3a2dff 100644 --- a/ceammc/ext/src/list/list_separate.cpp +++ b/ceammc/ext/src/list/list_separate.cpp @@ -17,23 +17,43 @@ ListSeparate::ListSeparate(const PdArgs& a) : BaseObject(a) + , enumerate_(nullptr) + , from_(nullptr) { + enumerate_ = new BoolProperty("@enumerate", false); + createProperty(enumerate_); + + from_ = new IntProperty("@from", 0); + createProperty(from_); + createOutlet(); createOutlet(); } void ListSeparate::onList(const AtomList& l) { - for (auto& el : l) - atomTo(0, el); + if (!enumerate_->value()) { + for (auto& el : l) + atomTo(0, el); + } else { + int idx = from_->value(); + for (auto& el : l) + listTo(0, AtomList(Atom(idx++), el)); + } bangTo(1); } void ListSeparate::onDataT(const DataTPtr& l) { - for (auto& el : *l) - atomTo(0, el.toAtom()); + if (!enumerate_->value()) { + for (auto& el : *l) + atomTo(0, el.toAtom()); + } else { + int idx = from_->value(); + for (auto& el : *l) + listTo(0, AtomList(Atom(idx++), el.toAtom())); + } bangTo(1); } diff --git a/ceammc/ext/src/list/list_separate.h b/ceammc/ext/src/list/list_separate.h index 7a4001c329..da9a2591af 100644 --- a/ceammc/ext/src/list/list_separate.h +++ b/ceammc/ext/src/list/list_separate.h @@ -20,6 +20,9 @@ using namespace ceammc; class DataTypeMList; class ListSeparate : public BaseObject { + BoolProperty* enumerate_; + IntProperty* from_; + public: ListSeparate(const PdArgs& a); void onList(const AtomList& l); diff --git a/ceammc/ext/src/list/list_walk.cpp b/ceammc/ext/src/list/list_walk.cpp index 1d45f75914..dde6d23270 100644 --- a/ceammc/ext/src/list/list_walk.cpp +++ b/ceammc/ext/src/list/list_walk.cpp @@ -5,39 +5,44 @@ using namespace ceammc; using namespace ceammc::list; -static const char* SYM_SINGLE = "single"; -static const char* SYM_CLIP = "clip"; -static const char* SYM_WRAP = "wrap"; -static const char* SYM_FOLD = "fold"; +static t_symbol* SYM_SINGLE; +static t_symbol* SYM_CLIP; +static t_symbol* SYM_WRAP; +static t_symbol* SYM_FOLD; ListWalk::ListWalk(const PdArgs& a) : BaseObject(a) - , walk_mode_(0) + , walk_mode_(nullptr) , current_pos_(0) , length_(1) , forward_(true) , single_done_(false) { createOutlet(); + createOutlet(); createProperty(new PointerProperty("@direction", &forward_, false)); createProperty(new PointerProperty("@length", &length_, false)); createProperty(new PointerProperty("@value", &lst_)); - walk_mode_ = new SymbolEnumProperty("@mode", gensym(SYM_SINGLE)); - walk_mode_->appendEnum(gensym(SYM_WRAP)); - walk_mode_->appendEnum(gensym(SYM_CLIP)); - walk_mode_->appendEnum(gensym(SYM_FOLD)); + walk_mode_ = new SymbolEnumProperty("@mode", SYM_SINGLE); + walk_mode_->appendEnum(SYM_WRAP); + walk_mode_->appendEnum(SYM_CLIP); + walk_mode_->appendEnum(SYM_FOLD); createProperty(walk_mode_); // aliases - createProperty(new SymbolEnumAlias("@single", walk_mode_, gensym(SYM_SINGLE))); - createProperty(new SymbolEnumAlias("@loop", walk_mode_, gensym(SYM_WRAP))); - createProperty(new SymbolEnumAlias("@wrap", walk_mode_, gensym(SYM_WRAP))); - createProperty(new SymbolEnumAlias("@clip", walk_mode_, gensym(SYM_CLIP))); - createProperty(new SymbolEnumAlias("@fold", walk_mode_, gensym(SYM_FOLD))); + createProperty(new SymbolEnumAlias("@single", walk_mode_, SYM_SINGLE)); + createProperty(new SymbolEnumAlias("@loop", walk_mode_, SYM_WRAP)); + createProperty(new SymbolEnumAlias("@wrap", walk_mode_, SYM_WRAP)); + createProperty(new SymbolEnumAlias("@clip", walk_mode_, SYM_CLIP)); + createProperty(new SymbolEnumAlias("@fold", walk_mode_, SYM_FOLD)); + + { + Property* p = createCbProperty("@size", &ListWalk::p_size); + p->info().setType(PropertyInfoType::INTEGER); + } - createCbProperty("@size", &ListWalk::p_size); createCbProperty("@index", &ListWalk::p_index, &ListWalk::p_set_index); property("@index")->info().setType(PropertyInfoType::INTEGER); @@ -81,7 +86,7 @@ AtomList ListWalk::p_size() const { return AtomList(lst_.size()); } AtomList ListWalk::p_index() const { - if (walk_mode_->value() != gensym(SYM_FOLD)) + if (walk_mode_->value() != SYM_FOLD) return AtomList(current_pos_); else { size_t idx = 0; @@ -128,7 +133,7 @@ void ListWalk::toPosition(int pos) size_t idx = 0; - if (walk_mode_->value() == gensym(SYM_SINGLE)) { + if (walk_mode_->value() == SYM_SINGLE) { if (pos < 0) { current_pos_ = 0; single_done_ = true; @@ -139,13 +144,13 @@ void ListWalk::toPosition(int pos) current_pos_ = lst_.size() - 1; single_done_ = true; } - } else if (walk_mode_->value() == gensym(SYM_WRAP)) { + } else if (walk_mode_->value() == SYM_WRAP) { if (calcWrapIndex(pos, lst_.size(), &idx)) current_pos_ = idx; - } else if (walk_mode_->value() == gensym(SYM_CLIP)) { + } else if (walk_mode_->value() == SYM_CLIP) { if (calcClipIndex(pos, lst_.size(), &idx)) current_pos_ = idx; - } else if (walk_mode_->value() == gensym(SYM_FOLD)) { + } else if (walk_mode_->value() == SYM_FOLD) { current_pos_ = pos; } else { OBJ_ERR << "unsupported list mode: " << walk_mode_->value()->s_name; @@ -165,28 +170,37 @@ void ListWalk::current() } //! single - if (walk_mode_->value() == gensym(SYM_SINGLE)) { + if (walk_mode_->value() == SYM_SINGLE) { if (single_done_) return; listTo(0, lst_.slice(current_pos_, current_pos_ + length_ - 1)); } //! clip - else if (walk_mode_->value() == gensym(SYM_CLIP)) { + else if (walk_mode_->value() == SYM_CLIP) { listTo(0, list::sliceClip(lst_, current_pos_, length_)); } //! wrap/loop - else if (walk_mode_->value() == gensym(SYM_WRAP)) { + else if (walk_mode_->value() == SYM_WRAP) { listTo(0, list::sliceWrap(lst_, current_pos_, length_)); } //! fold - else if (walk_mode_->value() == gensym(SYM_FOLD)) { + else if (walk_mode_->value() == SYM_FOLD) { listTo(0, list::sliceFold(lst_, current_pos_, length_)); } + + // last element + if ((current_pos_ + 1) == lst_.size()) + bangTo(1); } -extern "C" void setup_list0x2ewalk() +void setup_list_walk() { + SYM_SINGLE = gensym("single"); + SYM_CLIP = gensym("clip"); + SYM_WRAP = gensym("wrap"); + SYM_FOLD = gensym("fold"); + ObjectFactory obj("list.walk"); obj.addMethod("current", &ListWalk::m_current); obj.addMethod("next", &ListWalk::m_next); diff --git a/ceammc/ext/src/list/list_walk.h b/ceammc/ext/src/list/list_walk.h index d3d7184c33..da83e66793 100644 --- a/ceammc/ext/src/list/list_walk.h +++ b/ceammc/ext/src/list/list_walk.h @@ -52,4 +52,6 @@ class ListWalk : public BaseObject { }; } +void setup_list_walk(); + #endif // LIST_WALK_H diff --git a/ceammc/ext/src/list/list_zip.cpp b/ceammc/ext/src/list/list_zip.cpp index 40365734ea..28ad44f6c8 100644 --- a/ceammc/ext/src/list/list_zip.cpp +++ b/ceammc/ext/src/list/list_zip.cpp @@ -127,7 +127,10 @@ void ListZip::initProperties() createProperty(new SymbolEnumAlias("@wrap", method_, SYM_WRAP)); createProperty(new SymbolEnumAlias("@fold", method_, SYM_FOLD)); - createCbProperty("@pad", &ListZip::getPadValue, &ListZip::setPadValue); + { + Property* p = createCbProperty("@pad", &ListZip::getPadValue, &ListZip::setPadValue); + p->info().setType(PropertyInfoType::VARIANT); + } } AtomList ListZip::getPadValue() const diff --git a/ceammc/ext/src/list/mod_list.cpp b/ceammc/ext/src/list/mod_list.cpp index 0e9379fa9d..b7a6724b96 100644 --- a/ceammc/ext/src/list/mod_list.cpp +++ b/ceammc/ext/src/list/mod_list.cpp @@ -6,7 +6,6 @@ extern "C" void setup_list0x2edelta(); extern "C" void setup_list0x2eintegrator(); extern "C" void setup_list0x2erepack(); extern "C" void setup_list0x2eseq(); -extern "C" void setup_list0x2ewalk(); void setup_list_any_of(); void setup_list_all_of(); @@ -60,6 +59,7 @@ void setup_list_sum(); void setup_list_unique(); void setup_list_unpack(); void setup_list_unzip(); +void setup_list_walk(); void setup_list_xat(); void setup_list_xcontains(); void setup_list_xsearch(); @@ -71,7 +71,6 @@ void ceammc_list_setup() setup_list0x2eintegrator(); setup_list0x2erepack(); setup_list0x2eseq(); - setup_list0x2ewalk(); setup_list_any_of(); setup_list_all_of(); @@ -126,6 +125,7 @@ void ceammc_list_setup() setup_list_unique(); setup_list_unpack(); setup_list_unzip(); + setup_list_walk(); setup_list_xat(); setup_list_xcontains(); setup_list_xsearch(); diff --git a/ceammc/ext/src/math/CMakeLists.txt b/ceammc/ext/src/math/CMakeLists.txt index a766403491..8ff84978ee 100644 --- a/ceammc/ext/src/math/CMakeLists.txt +++ b/ceammc/ext/src/math/CMakeLists.txt @@ -4,16 +4,15 @@ add_custom_target(ceammc_generate_math set(MATH_SOURCES math_expr.lex math_expr.y) macro(ceammc_math_external name) - list(APPEND MATH_SOURCES "math_${name}.c") + list(APPEND MATH_C_SOURCES "math_${name}.c") endmacro() macro(ceammc_mathxx_external name) - list(APPEND MATH_SOURCES "math_${name}.cpp") + list(APPEND MATH_CXX_SOURCES "math_${name}.cpp") endmacro() -list(APPEND MATH_SOURCES math_bool_op.cpp) -list(APPEND MATH_SOURCES math_expr.tab.c) -list(APPEND MATH_SOURCES lex.math_expr.c lex.math_expr.h math_expr_ast.cpp) +list(APPEND MATH_CXX_SOURCES math_bool_op.cpp math_expr_ast.cpp math_sync_base.cpp math_sync_op.cpp) +list(APPEND MATH_C_SOURCES math_expr.tab.c lex.math_expr.c lex.math_expr.h) # begin autogenerated ceammc_math_external(abs) @@ -66,7 +65,16 @@ ceammc_mathxx_external(cdiv_tilde) ceammc_mathxx_external(cmul_tilde) ceammc_mathxx_external(round_tilde) -add_library(ceammc_math STATIC mod_math.h mod_math.cpp ${MATH_SOURCES}) +add_library(ceammc_math STATIC mod_math.h mod_math.cpp ${MATH_C_SOURCES} ${MATH_CXX_SOURCES}) + +if(CMAKE_CXX_COMPILER_ID MATCHES "GNU") + # gcc boost compile fix + # set only for c++ source files + foreach(_cpp ${MATH_CXX_SOURCES}) + set_source_files_properties(${_cpp} PROPERTIES COMPILE_FLAGS -fext-numeric-literals) + endforeach() +endif() + if(UNIX) set_target_properties(ceammc_math PROPERTIES COMPILE_FLAGS "-fPIC") endif() diff --git a/ceammc/ext/src/math/math_abs.c b/ceammc/ext/src/math/math_abs.c index 37d2b66a67..594ecadaa2 100644 --- a/ceammc/ext/src/math/math_abs.c +++ b/ceammc/ext/src/math/math_abs.c @@ -1,9 +1,8 @@ #include "ceammc.h" -#include +#include "m_pd.h" #include #define OBJ_NAME "math.abs" -#define MSG_PREFIX "[" OBJ_NAME "]" static t_class* math_abs_class; typedef struct math_abs { diff --git a/ceammc/ext/src/math/math_acos.c b/ceammc/ext/src/math/math_acos.c index 9e9ea31073..c606368ed1 100644 --- a/ceammc/ext/src/math/math_acos.c +++ b/ceammc/ext/src/math/math_acos.c @@ -1,9 +1,8 @@ #include "ceammc.h" -#include +#include "m_pd.h" #include #define OBJ_NAME "math.acos" -#define MSG_PREFIX "[" OBJ_NAME "]" static t_class* math_acos_class; typedef struct math_acos { diff --git a/ceammc/ext/src/math/math_acosh.c b/ceammc/ext/src/math/math_acosh.c index 66c59f070d..8a834c2a32 100644 --- a/ceammc/ext/src/math/math_acosh.c +++ b/ceammc/ext/src/math/math_acosh.c @@ -1,9 +1,8 @@ #include "ceammc.h" -#include +#include "m_pd.h" #include #define OBJ_NAME "math.acosh" -#define MSG_PREFIX "[" OBJ_NAME "]" static t_class* math_acosh_class; typedef struct math_acosh { diff --git a/ceammc/ext/src/math/math_asin.c b/ceammc/ext/src/math/math_asin.c index 6c133a0733..f0407ee261 100644 --- a/ceammc/ext/src/math/math_asin.c +++ b/ceammc/ext/src/math/math_asin.c @@ -1,9 +1,8 @@ #include "ceammc.h" -#include +#include "m_pd.h" #include #define OBJ_NAME "math.asin" -#define MSG_PREFIX "[" OBJ_NAME "]" static t_class* math_asin_class; typedef struct math_asin { diff --git a/ceammc/ext/src/math/math_asinh.c b/ceammc/ext/src/math/math_asinh.c index 30666d8893..375690f6c0 100644 --- a/ceammc/ext/src/math/math_asinh.c +++ b/ceammc/ext/src/math/math_asinh.c @@ -1,9 +1,8 @@ #include "ceammc.h" -#include +#include "m_pd.h" #include #define OBJ_NAME "math.asinh" -#define MSG_PREFIX "[" OBJ_NAME "]" static t_class* math_asinh_class; typedef struct math_asinh { diff --git a/ceammc/ext/src/math/math_atan.c b/ceammc/ext/src/math/math_atan.c index 7419cc2c25..f0ad638e16 100644 --- a/ceammc/ext/src/math/math_atan.c +++ b/ceammc/ext/src/math/math_atan.c @@ -1,9 +1,8 @@ #include "ceammc.h" -#include +#include "m_pd.h" #include #define OBJ_NAME "math.atan" -#define MSG_PREFIX "[" OBJ_NAME "]" static t_class* math_atan_class; typedef struct math_atan { diff --git a/ceammc/ext/src/math/math_atanh.c b/ceammc/ext/src/math/math_atanh.c index e6b02d3751..c6a70e659a 100644 --- a/ceammc/ext/src/math/math_atanh.c +++ b/ceammc/ext/src/math/math_atanh.c @@ -1,9 +1,8 @@ #include "ceammc.h" -#include +#include "m_pd.h" #include #define OBJ_NAME "math.atanh" -#define MSG_PREFIX "[" OBJ_NAME "]" static t_class* math_atanh_class; typedef struct math_atanh { diff --git a/ceammc/ext/src/math/math_cbrt.c b/ceammc/ext/src/math/math_cbrt.c index 8d007f7d14..95100f3ffe 100644 --- a/ceammc/ext/src/math/math_cbrt.c +++ b/ceammc/ext/src/math/math_cbrt.c @@ -1,9 +1,8 @@ #include "ceammc.h" -#include +#include "m_pd.h" #include #define OBJ_NAME "math.cbrt" -#define MSG_PREFIX "[" OBJ_NAME "]" static t_class* math_cbrt_class; typedef struct math_cbrt { diff --git a/ceammc/ext/src/math/math_ceil.c b/ceammc/ext/src/math/math_ceil.c index 6054702aa3..3721332eaa 100644 --- a/ceammc/ext/src/math/math_ceil.c +++ b/ceammc/ext/src/math/math_ceil.c @@ -1,9 +1,8 @@ #include "ceammc.h" -#include +#include "m_pd.h" #include #define OBJ_NAME "math.ceil" -#define MSG_PREFIX "[" OBJ_NAME "]" static t_class* math_ceil_class; typedef struct math_ceil { diff --git a/ceammc/ext/src/math/math_cos.c b/ceammc/ext/src/math/math_cos.c index be0d6c248e..5c2718012c 100644 --- a/ceammc/ext/src/math/math_cos.c +++ b/ceammc/ext/src/math/math_cos.c @@ -1,9 +1,8 @@ #include "ceammc.h" -#include +#include "m_pd.h" #include #define OBJ_NAME "math.cos" -#define MSG_PREFIX "[" OBJ_NAME "]" static t_class* math_cos_class; typedef struct math_cos { diff --git a/ceammc/ext/src/math/math_cosh.c b/ceammc/ext/src/math/math_cosh.c index 480dae5d6b..20104018a5 100644 --- a/ceammc/ext/src/math/math_cosh.c +++ b/ceammc/ext/src/math/math_cosh.c @@ -1,9 +1,8 @@ #include "ceammc.h" -#include +#include "m_pd.h" #include #define OBJ_NAME "math.cosh" -#define MSG_PREFIX "[" OBJ_NAME "]" static t_class* math_cosh_class; typedef struct math_cosh { diff --git a/ceammc/ext/src/math/math_e.c b/ceammc/ext/src/math/math_e.c index 20f924d916..afcc8f8e96 100644 --- a/ceammc/ext/src/math/math_e.c +++ b/ceammc/ext/src/math/math_e.c @@ -1,9 +1,8 @@ #include "ceammc.h" -#include +#include "m_pd.h" #include #define OBJ_NAME "math.e" -#define MSG_PREFIX "[" OBJ_NAME "]" static t_class* math_e_class; typedef struct math_e { diff --git a/ceammc/ext/src/math/math_exp.c b/ceammc/ext/src/math/math_exp.c index 637663d292..5ac8ac560b 100644 --- a/ceammc/ext/src/math/math_exp.c +++ b/ceammc/ext/src/math/math_exp.c @@ -1,9 +1,8 @@ #include "ceammc.h" -#include +#include "m_pd.h" #include #define OBJ_NAME "math.exp" -#define MSG_PREFIX "[" OBJ_NAME "]" static t_class* math_exp_class; typedef struct math_exp { diff --git a/ceammc/ext/src/math/math_exp2.c b/ceammc/ext/src/math/math_exp2.c index 2035d8f072..7718de53a9 100644 --- a/ceammc/ext/src/math/math_exp2.c +++ b/ceammc/ext/src/math/math_exp2.c @@ -1,9 +1,8 @@ #include "ceammc.h" -#include +#include "m_pd.h" #include #define OBJ_NAME "math.exp2" -#define MSG_PREFIX "[" OBJ_NAME "]" static t_class* math_exp2_class; typedef struct math_exp2 { diff --git a/ceammc/ext/src/math/math_expr_ast.cpp b/ceammc/ext/src/math/math_expr_ast.cpp index 12b2ae7bb4..efe539ac94 100644 --- a/ceammc/ext/src/math/math_expr_ast.cpp +++ b/ceammc/ext/src/math/math_expr_ast.cpp @@ -238,6 +238,7 @@ struct Ast { Ast() : root(CONTAINTER) + , vars {} , ok(1) { } diff --git a/ceammc/ext/src/math/math_floor.c b/ceammc/ext/src/math/math_floor.c index d911c5f59b..ba3d793399 100644 --- a/ceammc/ext/src/math/math_floor.c +++ b/ceammc/ext/src/math/math_floor.c @@ -1,9 +1,8 @@ #include "ceammc.h" -#include +#include "m_pd.h" #include #define OBJ_NAME "math.floor" -#define MSG_PREFIX "[" OBJ_NAME "]" static t_class* math_floor_class; typedef struct math_floor { diff --git a/ceammc/ext/src/math/math_inf.c b/ceammc/ext/src/math/math_inf.c index f82965eecc..4cb2862f57 100644 --- a/ceammc/ext/src/math/math_inf.c +++ b/ceammc/ext/src/math/math_inf.c @@ -1,9 +1,8 @@ #include "ceammc.h" -#include +#include "m_pd.h" #include #define OBJ_NAME "math.inf" -#define MSG_PREFIX "[" OBJ_NAME "]" static t_class* math_inf_class; typedef struct math_inf { diff --git a/ceammc/ext/src/math/math_log.c b/ceammc/ext/src/math/math_log.c index 8b4cff0928..e4d8e056cf 100644 --- a/ceammc/ext/src/math/math_log.c +++ b/ceammc/ext/src/math/math_log.c @@ -1,9 +1,8 @@ #include "ceammc.h" -#include +#include "m_pd.h" #include #define OBJ_NAME "math.log" -#define MSG_PREFIX "[" OBJ_NAME "]" static t_class* math_log_class; typedef struct math_log { diff --git a/ceammc/ext/src/math/math_log10.c b/ceammc/ext/src/math/math_log10.c index eedd510ddb..959be49c31 100644 --- a/ceammc/ext/src/math/math_log10.c +++ b/ceammc/ext/src/math/math_log10.c @@ -1,9 +1,8 @@ #include "ceammc.h" -#include +#include "m_pd.h" #include #define OBJ_NAME "math.log10" -#define MSG_PREFIX "[" OBJ_NAME "]" static t_class* math_log10_class; typedef struct math_log10 { diff --git a/ceammc/ext/src/math/math_log2.c b/ceammc/ext/src/math/math_log2.c index c940bc490c..718df8acea 100644 --- a/ceammc/ext/src/math/math_log2.c +++ b/ceammc/ext/src/math/math_log2.c @@ -1,9 +1,8 @@ #include "ceammc.h" -#include +#include "m_pd.h" #include #define OBJ_NAME "math.log2" -#define MSG_PREFIX "[" OBJ_NAME "]" static t_class* math_log2_class; typedef struct math_log2 { diff --git a/ceammc/ext/src/math/math_nan.c b/ceammc/ext/src/math/math_nan.c index 35c2c66fda..6d3aaed909 100644 --- a/ceammc/ext/src/math/math_nan.c +++ b/ceammc/ext/src/math/math_nan.c @@ -1,9 +1,8 @@ #include "ceammc.h" -#include +#include "m_pd.h" #include #define OBJ_NAME "math.nan" -#define MSG_PREFIX "[" OBJ_NAME "]" static t_class* math_nan_class; typedef struct math_nan { diff --git a/ceammc/ext/src/math/math_pi.c b/ceammc/ext/src/math/math_pi.c index b35416206f..430dafda89 100644 --- a/ceammc/ext/src/math/math_pi.c +++ b/ceammc/ext/src/math/math_pi.c @@ -1,9 +1,8 @@ #include "ceammc.h" -#include +#include "m_pd.h" #include #define OBJ_NAME "math.pi" -#define MSG_PREFIX "[" OBJ_NAME "]" static t_class* math_pi_class; typedef struct math_pi { diff --git a/ceammc/ext/src/math/math_round.c b/ceammc/ext/src/math/math_round.c index 51b17d3091..ccfdde368b 100644 --- a/ceammc/ext/src/math/math_round.c +++ b/ceammc/ext/src/math/math_round.c @@ -1,9 +1,8 @@ #include "ceammc.h" -#include +#include "m_pd.h" #include #define OBJ_NAME "math.round" -#define MSG_PREFIX "[" OBJ_NAME "]" static t_class* math_round_class; typedef struct math_round { diff --git a/ceammc/ext/src/math/math_sin.c b/ceammc/ext/src/math/math_sin.c index 8767a311d5..32d7abab92 100644 --- a/ceammc/ext/src/math/math_sin.c +++ b/ceammc/ext/src/math/math_sin.c @@ -1,9 +1,8 @@ #include "ceammc.h" -#include +#include "m_pd.h" #include #define OBJ_NAME "math.sin" -#define MSG_PREFIX "[" OBJ_NAME "]" static t_class* math_sin_class; typedef struct math_sin { diff --git a/ceammc/ext/src/math/math_sinh.c b/ceammc/ext/src/math/math_sinh.c index 9287908c55..50aa7c999a 100644 --- a/ceammc/ext/src/math/math_sinh.c +++ b/ceammc/ext/src/math/math_sinh.c @@ -1,9 +1,8 @@ #include "ceammc.h" -#include +#include "m_pd.h" #include #define OBJ_NAME "math.sinh" -#define MSG_PREFIX "[" OBJ_NAME "]" static t_class* math_sinh_class; typedef struct math_sinh { diff --git a/ceammc/ext/src/math/math_sqrt.c b/ceammc/ext/src/math/math_sqrt.c index 099b673981..079d6f7299 100644 --- a/ceammc/ext/src/math/math_sqrt.c +++ b/ceammc/ext/src/math/math_sqrt.c @@ -1,9 +1,8 @@ #include "ceammc.h" -#include +#include "m_pd.h" #include #define OBJ_NAME "math.sqrt" -#define MSG_PREFIX "[" OBJ_NAME "]" static t_class* math_sqrt_class; typedef struct math_sqrt { diff --git a/ceammc/ext/src/math/math_sync_base.cpp b/ceammc/ext/src/math/math_sync_base.cpp new file mode 100644 index 0000000000..fa1e6a531a --- /dev/null +++ b/ceammc/ext/src/math/math_sync_base.cpp @@ -0,0 +1,136 @@ +/***************************************************************************** + * Copyright 2019 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#include "math_sync_base.h" + +#include +#include +#include + +namespace ceammc { + +MathSyncBase::MathSyncBase(FloatBinFn fn, const PdArgs& args) + : BaseObject(args) + , prop_int_(nullptr) + , v1_(0) + , v2_(positionalFloatArgument(0, 0)) + , fn_(fn) +{ + prop_int_ = new FlagProperty("@int"); + createProperty(prop_int_); + + createInlet(); + createOutlet(); +} + +void MathSyncBase::onBang() +{ + try { + + if (prop_int_->value()) + floatTo(0, static_cast(fn_(static_cast(v1_), static_cast(v2_)))); + else + floatTo(0, fn_(v1_, v2_)); + + } catch (std::exception& e) { + OBJ_ERR << e.what(); + } +} + +void MathSyncBase::onFloat(t_float f) +{ + v1_ = f; + onBang(); +} + +void MathSyncBase::onInlet(size_t n, const AtomList& lst) +{ + if (n != 1) + return; + + if (!lst.empty()) + v2_ = lst[0].asFloat(); + + onBang(); +} + +void MathSyncBase::onList(const AtomList& lst) +{ + const auto N = lst.size(); + + if (N > 0) + v1_ = lst[0].asFloat(); + + if (N > 1) + v2_ = lst[1].asFloat(); + + onBang(); +} + +MathSyncBool::MathSyncBool(BoolBinFn fn, const PdArgs& args) + : BaseObject(args) + , v1_(false) + , v2_(checkBool(positionalFloatArgument(0, 0))) + , fn_(fn) +{ + createInlet(); + createOutlet(); +} + +void MathSyncBool::onBang() +{ + floatTo(0, fn_(v1_, v2_) ? 1 : 0); +} + +void MathSyncBool::onFloat(t_float f) +{ + v1_ = checkBool(f); + onBang(); +} + +void MathSyncBool::onInlet(size_t n, const AtomList& lst) +{ + if (n != 1) + return; + + if (!lst.empty()) + v2_ = checkBool(lst[0].asFloat()); + + onBang(); +} + +void MathSyncBool::onList(const AtomList& lst) +{ + const auto N = lst.size(); + + if (N > 0) + v1_ = checkBool(lst[0].asFloat()); + + if (N > 1) + v2_ = checkBool(lst[1].asFloat()); + + onBang(); +} + +bool MathSyncBool::checkBool(t_float f) const +{ + if (f == 0) + return false; + else if (f == 1) + return true; + else { + OBJ_ERR << "1 or 0 expected"; + return true; + } +} +} diff --git a/ceammc/ext/src/math/math_sync_base.h b/ceammc/ext/src/math/math_sync_base.h new file mode 100644 index 0000000000..4616788717 --- /dev/null +++ b/ceammc/ext/src/math/math_sync_base.h @@ -0,0 +1,73 @@ +/***************************************************************************** + * Copyright 2019 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#ifndef MATH_SYNC_BASE_H +#define MATH_SYNC_BASE_H + +#include + +#include "ceammc_object.h" + +namespace ceammc { + +typedef std::function FloatBinFn; +typedef std::function BoolBinFn; +template +struct IntT { +}; + +template <> +struct IntT { + typedef std::int32_t type; +}; + +template <> +struct IntT { + typedef std::int64_t type; +}; + +typedef IntT::value>::type IntType; + +class MathSyncBase : public BaseObject { +protected: + t_float v1_, v2_; + FloatBinFn fn_; + FlagProperty* prop_int_; + +public: + MathSyncBase(FloatBinFn fn, const PdArgs& args); + void onBang() final; + void onFloat(t_float f) final; + void onInlet(size_t n, const AtomList& lst) final; + void onList(const AtomList& lst) final; +}; + +class MathSyncBool : public BaseObject { +protected: + bool v1_, v2_; + BoolBinFn fn_; + +public: + MathSyncBool(BoolBinFn fn, const PdArgs& args); + void onBang() final; + void onFloat(t_float f) final; + void onInlet(size_t n, const AtomList& lst) final; + void onList(const AtomList& lst) final; + +private: + bool checkBool(t_float f) const; +}; + +} + +#endif // MATH_SYNC_BASE_H diff --git a/ceammc/ext/src/math/math_sync_op.cpp b/ceammc/ext/src/math/math_sync_op.cpp new file mode 100644 index 0000000000..abf17ed5d4 --- /dev/null +++ b/ceammc/ext/src/math/math_sync_op.cpp @@ -0,0 +1,162 @@ +/***************************************************************************** + * Copyright 2019 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#include "math_sync_op.h" +#include "ceammc_factory.h" + +#include +#include + +MathSyncMul::MathSyncMul(const PdArgs& args) + : MathSyncBase([](t_float v1, t_float v2) { return v1 * v2; }, args) +{ +} + +MathSyncDiv::MathSyncDiv(const PdArgs& args) + : MathSyncBase([](t_float v1, t_float v2) { + if (v2 == 0) + throw std::runtime_error("division by zero"); + + return v1 / v2; + }, + args) +{ +} + +MathSyncAdd::MathSyncAdd(const PdArgs& args) + : MathSyncBase([](t_float v1, t_float v2) { return v1 + v2; }, args) +{ +} + +MathSyncSub::MathSyncSub(const PdArgs& args) + : MathSyncBase([](t_float v1, t_float v2) { return v1 - v2; }, args) +{ +} + +MathSyncEqual::MathSyncEqual(const PdArgs& args) + : MathSyncBase([this](t_float v1, t_float v2) { + if (epsilon_->value() == 0) + return (v1 == v2) ? 1 : 0; + else + return (std::fabs(v1 - v2) < epsilon_->value()) ? 1 : 0; + }, + args) + , epsilon_(nullptr) +{ + prop_int_->setReadonly(true); + prop_int_->setVisible(false); + + epsilon_ = new FloatPropertyMinEq("@epsilon", 0, 0); + createProperty(epsilon_); +} + +MathSyncNotEqual::MathSyncNotEqual(const PdArgs& args) + : MathSyncBase([this](t_float v1, t_float v2) { + if (epsilon_->value() == 0) + return (v1 != v2) ? 1 : 0; + else + return (std::fabs(v1 - v2) < epsilon_->value()) ? 0 : 1; + }, + args) + , epsilon_(nullptr) +{ + prop_int_->setReadonly(true); + prop_int_->setVisible(false); + + epsilon_ = new FloatPropertyMinEq("@epsilon", 0, 0); + createProperty(epsilon_); +} + +MathSyncLessThen::MathSyncLessThen(const PdArgs& args) + : MathSyncBase([](t_float v1, t_float v2) { return v1 < v2; }, args) +{ + prop_int_->setReadonly(true); + prop_int_->setVisible(false); +} + +MathSyncLessEqual::MathSyncLessEqual(const PdArgs& args) + : MathSyncBase([](t_float v1, t_float v2) { return v1 <= v2; }, args) +{ + prop_int_->setReadonly(true); + prop_int_->setVisible(false); +} + +MathSyncGreaterThen::MathSyncGreaterThen(const PdArgs& args) + : MathSyncBase([](t_float v1, t_float v2) { return v1 > v2; }, args) +{ + prop_int_->setReadonly(true); + prop_int_->setVisible(false); +} + +MathSyncGreaterEqual::MathSyncGreaterEqual(const PdArgs& args) + : MathSyncBase([](t_float v1, t_float v2) { return v1 >= v2; }, args) +{ + prop_int_->setReadonly(true); + prop_int_->setVisible(false); +} + +MathSyncMod::MathSyncMod(const PdArgs& args) + : MathSyncBase([this](t_float v1, t_float v2) { + if (v2 == 0) + throw std::runtime_error("division by zero"); + + if (prop_int_->value()) + return static_cast(std::div(static_cast(v1), static_cast(v2)).rem); + else + return std::fmod(v1, v2); + }, + args) +{ +} + +MathSyncAnd::MathSyncAnd(const PdArgs& args) + : MathSyncBool([](bool v1, bool v2) { return v1 && v2; }, args) +{ +} + +MathSyncOr::MathSyncOr(const PdArgs& args) + : MathSyncBool([](bool v1, bool v2) { return v1 || v2; }, args) +{ +} + +MathSyncXor::MathSyncXor(const PdArgs& args) + : MathSyncBool([](bool v1, bool v2) { return v1 ^ v2; }, args) +{ +} + +void setup_math_sync_op() +{ +#define FACTORY_INIT(class_name, full_name, short_name) \ + { \ + ObjectFactory obj("math.sync_" full_name); \ + obj.addAlias("math." short_name "'"); \ + obj.addAlias(short_name "'"); \ + } + + FACTORY_INIT(MathSyncMul, "mul", "*") + FACTORY_INIT(MathSyncDiv, "div", "/") + FACTORY_INIT(MathSyncAdd, "add", "+") + FACTORY_INIT(MathSyncSub, "sub", "-") + FACTORY_INIT(MathSyncMod, "mod", "%") + + FACTORY_INIT(MathSyncEqual, "eq", "==") + FACTORY_INIT(MathSyncNotEqual, "ne", "!=") + FACTORY_INIT(MathSyncLessThen, "lt", "<") + FACTORY_INIT(MathSyncLessEqual, "le", "<=") + FACTORY_INIT(MathSyncGreaterThen, "gt", ">") + FACTORY_INIT(MathSyncGreaterEqual, "ge", ">=") + + FACTORY_INIT(MathSyncAnd, "and", "&&") + FACTORY_INIT(MathSyncOr, "or", "||") + FACTORY_INIT(MathSyncXor, "xor", "^") +} diff --git a/ceammc/ext/src/math/math_sync_op.h b/ceammc/ext/src/math/math_sync_op.h new file mode 100644 index 0000000000..75d267077b --- /dev/null +++ b/ceammc/ext/src/math/math_sync_op.h @@ -0,0 +1,97 @@ +/***************************************************************************** + * Copyright 2019 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#ifndef MATH_SYNC_OP_H +#define MATH_SYNC_OP_H + +#include "math_sync_base.h" + +using namespace ceammc; + +class MathSyncMul : public MathSyncBase { +public: + MathSyncMul(const PdArgs& args); +}; + +class MathSyncDiv : public MathSyncBase { +public: + MathSyncDiv(const PdArgs& args); +}; + +class MathSyncAdd : public MathSyncBase { +public: + MathSyncAdd(const PdArgs& args); +}; + +class MathSyncSub : public MathSyncBase { +public: + MathSyncSub(const PdArgs& args); +}; + +class MathSyncEqual : public MathSyncBase { + FloatPropertyMinEq* epsilon_; + +public: + MathSyncEqual(const PdArgs& args); +}; + +class MathSyncNotEqual : public MathSyncBase { + FloatPropertyMinEq* epsilon_; + +public: + MathSyncNotEqual(const PdArgs& args); +}; + +class MathSyncLessThen : public MathSyncBase { +public: + MathSyncLessThen(const PdArgs& args); +}; + +class MathSyncLessEqual : public MathSyncBase { +public: + MathSyncLessEqual(const PdArgs& args); +}; + +class MathSyncGreaterThen : public MathSyncBase { +public: + MathSyncGreaterThen(const PdArgs& args); +}; + +class MathSyncGreaterEqual : public MathSyncBase { +public: + MathSyncGreaterEqual(const PdArgs& args); +}; + +class MathSyncMod : public MathSyncBase { +public: + MathSyncMod(const PdArgs& args); +}; + +class MathSyncAnd : public MathSyncBool { +public: + MathSyncAnd(const PdArgs& args); +}; + +class MathSyncOr : public MathSyncBool { +public: + MathSyncOr(const PdArgs& args); +}; + +class MathSyncXor : public MathSyncBool { +public: + MathSyncXor(const PdArgs& args); +}; + +void setup_math_sync_op(); + +#endif // MATH_SYNC_OP_H diff --git a/ceammc/ext/src/math/math_tan.c b/ceammc/ext/src/math/math_tan.c index 830d063d8d..f9f21d51da 100644 --- a/ceammc/ext/src/math/math_tan.c +++ b/ceammc/ext/src/math/math_tan.c @@ -1,9 +1,8 @@ #include "ceammc.h" -#include +#include "m_pd.h" #include #define OBJ_NAME "math.tan" -#define MSG_PREFIX "[" OBJ_NAME "]" static t_class* math_tan_class; typedef struct math_tan { diff --git a/ceammc/ext/src/math/math_tanh.c b/ceammc/ext/src/math/math_tanh.c index 158f73df0e..c0b4f5bb5d 100644 --- a/ceammc/ext/src/math/math_tanh.c +++ b/ceammc/ext/src/math/math_tanh.c @@ -1,9 +1,8 @@ #include "ceammc.h" -#include +#include "m_pd.h" #include #define OBJ_NAME "math.tanh" -#define MSG_PREFIX "[" OBJ_NAME "]" static t_class* math_tanh_class; typedef struct math_tanh { diff --git a/ceammc/ext/src/math/math_trunc.c b/ceammc/ext/src/math/math_trunc.c index 7275ab1356..eab5d4240d 100644 --- a/ceammc/ext/src/math/math_trunc.c +++ b/ceammc/ext/src/math/math_trunc.c @@ -1,9 +1,8 @@ #include "ceammc.h" -#include +#include "m_pd.h" #include #define OBJ_NAME "math.trunc" -#define MSG_PREFIX "[" OBJ_NAME "]" static t_class* math_trunc_class; typedef struct math_trunc { diff --git a/ceammc/ext/src/math/mod_math.cpp b/ceammc/ext/src/math/mod_math.cpp index 97f22367c5..3a729fdf3e 100644 --- a/ceammc/ext/src/math/mod_math.cpp +++ b/ceammc/ext/src/math/mod_math.cpp @@ -6,6 +6,7 @@ #include "math_lcm.h" #include "math_mul.h" #include "math_polyeval.h" +#include "math_sync_op.h" extern "C" void setup_math0x2eabs(); extern "C" void setup_math0x2eacos(); @@ -97,4 +98,6 @@ void ceammc_math_setup() setup_math_mul(); setup_math_polyeval(); setup_math_round_tilde(); + + setup_math_sync_op(); } diff --git a/ceammc/ext/src/misc/CMakeLists.txt b/ceammc/ext/src/misc/CMakeLists.txt index b4b0f0a93c..e11efec410 100644 --- a/ceammc/ext/src/misc/CMakeLists.txt +++ b/ceammc/ext/src/misc/CMakeLists.txt @@ -5,11 +5,14 @@ endmacro() ceammc_misc_external(live capture) -find_package(ModPlug) -if(MODPLUG_FOUND) - include_directories(${MODPLUG_INCLUDES}) - list(APPEND MISC_SOURCES misc_modplug.cpp) - list(APPEND MISC_LIBRARIES ${MODPLUG_LIBRARIES}) +if(WITH_MODPLUG) + find_package(ModPlug REQUIRED) + if(MODPLUG_FOUND) + include_directories(${MODPLUG_INCLUDES}) + list(APPEND MISC_SOURCES misc_modplug.cpp) + list(APPEND MISC_LIBRARIES ${MODPLUG_LIBRARIES}) + add_definitions(-DWITH_MODPLUG) + endif() endif() if(WITH_FLUIDSYNTH) @@ -18,12 +21,15 @@ if(WITH_FLUIDSYNTH) list(APPEND MISC_LIBRARIES ${FLUIDSYNTH_LIBRARIES}) endif() -# flite TTS engine -include_directories("${CMAKE_SOURCE_DIR}/ceammc/extra/speech/flite/include") -list(APPEND MISC_SOURCES speech_flite.cpp fliterender.cpp) +if(WITH_TTS_FLITE) + include_directories(${FLITE_INCLUDES}) + include_directories(${PROJECT_SOURCE_DIR}/ceammc/extra) + list(APPEND MISC_SOURCES speech_flite.cpp fliterender.cpp) + list(APPEND MISC_LIBRARIES ${FLITE_LIBRARIES}) +endif() add_library(ceammc_misc STATIC mod_misc.cpp ${MISC_SOURCES}) -target_link_libraries(ceammc_misc flite ${MISC_LIBRARIES}) +target_link_libraries(ceammc_misc ${MISC_LIBRARIES}) set_target_properties(ceammc_misc PROPERTIES COMPILE_DEFINITIONS "FAUST_MACRO") diff --git a/ceammc/ext/src/misc/fluid.cpp b/ceammc/ext/src/misc/fluid.cpp index efddb5a386..0bcbf25bc8 100644 --- a/ceammc/ext/src/misc/fluid.cpp +++ b/ceammc/ext/src/misc/fluid.cpp @@ -47,9 +47,16 @@ Fluid::Fluid(const PdArgs& args) if (synth_ == nullptr) OBJ_ERR << "couldn't create synth"; - createCbProperty("@sf", &Fluid::propSoundFont, &Fluid::propSetSoundFont); - property("@sf")->info().setType(PropertyInfoType::SYMBOL); - createCbProperty("@version", &Fluid::propVersion); + { + Property* p = createCbProperty("@sf", &Fluid::propSoundFont, &Fluid::propSetSoundFont); + p->info().setType(PropertyInfoType::SYMBOL); + } + + { + Property* p = createCbProperty("@version", &Fluid::propVersion); + p->info().setType(PropertyInfoType::SYMBOL); + } + createCbProperty("@soundfonts", &Fluid::propSoundFonts); } @@ -130,7 +137,7 @@ AtomList Fluid::propSoundFonts() const AtomList res; const int N = fluid_synth_sfcount(synth_); - for (int i = 0; i < N; i++) { + for (unsigned int i = 0; int(i) < N; i++) { fluid_sfont_t* sf = fluid_synth_get_sfont(synth_, i); const char* name = fluid_sfont_get_name(sf); res.append(Atom(gensym(name))); @@ -203,9 +210,9 @@ void Fluid::m_bank(t_symbol* s, const AtomList& lst) int bank = lst[1].asInt(); fluid_synth_bank_select(synth_, chan - 1, bank); - unsigned int sf_id; - unsigned int bank_num; - unsigned int prog_num; + int sf_id; + int bank_num; + int prog_num; fluid_synth_get_program(synth_, chan - 1, &sf_id, &bank_num, &prog_num); fluid_synth_program_change(synth_, chan - 1, prog_num); @@ -323,9 +330,9 @@ void Fluid::dump() const if (preset != NULL) { const char* preset_name = fluid_preset_get_name(preset); - unsigned int sf_id; - unsigned int bank_num; - unsigned int prog_num; + int sf_id; + int bank_num; + int prog_num; fluid_sfont_t* sf; fluid_synth_get_program(synth_, i, &sf_id, &bank_num, &prog_num); diff --git a/ceammc/ext/src/misc/live_capture.h b/ceammc/ext/src/misc/live_capture.h index badf9bb521..df8521c900 100644 --- a/ceammc/ext/src/misc/live_capture.h +++ b/ceammc/ext/src/misc/live_capture.h @@ -4,8 +4,8 @@ copyright: "(c)GRAME 2006" license: "BSD" name: "capture" version: "1.0" -Code generated with Faust 2.8.5 (https://faust.grame.fr) -Compilation options: cpp, -scal -ftz 0 +Code generated with Faust 2.22.1 (https://faust.grame.fr) +Compilation options: -lang cpp -scal -ftz 0 ------------------------------------------------------------ */ #ifndef __live_capture_H__ @@ -18,6 +18,7 @@ Compilation options: cpp, -scal -ftz 0 #include #include +/************************** BEGIN dsp.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -100,23 +101,23 @@ class dsp { * - static class 'classInit': static tables initialization * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void init(int samplingRate) = 0; + virtual void init(int sample_rate) = 0; /** * Init instance state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceInit(int samplingRate) = 0; + virtual void instanceInit(int sample_rate) = 0; /** * Init instance constant state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceConstants(int samplingRate) = 0; + virtual void instanceConstants(int sample_rate) = 0; /* Init default control parameters values */ virtual void instanceResetUserInterface() = 0; @@ -153,8 +154,8 @@ class dsp { * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the number of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) * */ virtual void compute(double /*date_usec*/, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -173,16 +174,16 @@ class decorator_dsp : public dsp { public: - decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + decorator_dsp(dsp* dsp = nullptr):fDSP(dsp) {} virtual ~decorator_dsp() { delete fDSP; } virtual int getNumInputs() { return fDSP->getNumInputs(); } virtual int getNumOutputs() { return fDSP->getNumOutputs(); } virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } virtual int getSampleRate() { return fDSP->getSampleRate(); } - virtual void init(int samplingRate) { fDSP->init(samplingRate); } - virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } - virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void init(int sample_rate) { fDSP->init(sample_rate); } + virtual void instanceInit(int sample_rate) { fDSP->instanceInit(sample_rate); } + virtual void instanceConstants(int sample_rate) { fDSP->instanceConstants(sample_rate); } virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } @@ -237,6 +238,8 @@ class dsp_factory { #endif #endif +/************************** END dsp.h **************************/ +/************************** BEGIN UI.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -276,45 +279,54 @@ class dsp_factory { struct Soundfile; -class UI +template +class UIReal { - + public: - - UI() {} - - virtual ~UI() {} - + + UIReal() {} + virtual ~UIReal() {} + // -- widget's layouts - + virtual void openTabBox(const char* label) = 0; virtual void openHorizontalBox(const char* label) = 0; virtual void openVerticalBox(const char* label) = 0; virtual void closeBox() = 0; - + // -- active widgets - - virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - + + virtual void addButton(const char* label, REAL* zone) = 0; + virtual void addCheckButton(const char* label, REAL* zone) = 0; + virtual void addVerticalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addHorizontalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addNumEntry(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + // -- passive widgets - - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - + + virtual void addHorizontalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + virtual void addVerticalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + // -- soundfiles - + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; - + // -- metadata declarations + + virtual void declare(REAL* zone, const char* key, const char* val) {} +}; - virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +struct UI : public UIReal +{ + + UI() {} + virtual ~UI() {} }; #endif +/************************** END UI.h **************************/ +/************************** BEGIN meta.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -343,11 +355,14 @@ class UI struct Meta { - virtual void declare(const char* key, const char* value) = 0; virtual ~Meta() {}; + virtual void declare(const char* key, const char* value) = 0; + }; #endif +/************************** END meta.h **************************/ +/************************** BEGIN misc.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -370,15 +385,16 @@ struct Meta that work under terms of your choice, so long as this FAUST architecture section is not modified. ************************************************************************/ - + #ifndef __misc__ #define __misc__ #include #include -#include -#include #include +#include +#include +#include using std::max; @@ -386,41 +402,79 @@ using std::min; struct XXXX_Meta : std::map { - void declare(const char* key, const char* value) { (*this)[key]=value; } + void declare(const char* key, const char* value) { (*this)[key] = value; } }; struct MY_Meta : Meta, std::map { - void declare(const char* key, const char* value) { (*this)[key]=value; } + void declare(const char* key, const char* value) { (*this)[key] = value; } }; -inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } +static int lsr(int x, int n) { return int(((unsigned int)x) >> n); } -inline int int2pow2(int x) { int r = 0; while ((1<declare("author", "Grame"); m->declare("copyright", "(c)GRAME 2006"); m->declare("delays.lib/name", "Faust Delay Library"); - m->declare("delays.lib/version", "0.0"); - m->declare("filename", "live_capture"); + m->declare("delays.lib/version", "0.1"); + m->declare("filename", "live_capture.dsp"); m->declare("license", "BSD"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); @@ -493,15 +548,13 @@ class live_capture : public dsp { virtual int getNumInputs() { return 1; - } virtual int getNumOutputs() { return 1; - } virtual int getInputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -510,14 +563,12 @@ class live_capture : public dsp { rate = -1; break; } - } return rate; - } virtual int getOutputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -526,54 +577,44 @@ class live_capture : public dsp { rate = -1; break; } - } return rate; - } - static void classInit(int samplingFreq) { - + static void classInit(int sample_rate) { } - virtual void instanceConstants(int samplingFreq) { - fSamplingFreq = samplingFreq; - fConst0 = (32.0f * std::min(192000.0f, std::max(1.0f, float(fSamplingFreq)))); - + virtual void instanceConstants(int sample_rate) { + fSampleRate = sample_rate; + fConst0 = (32.0f * std::min(192000.0f, std::max(1.0f, float(fSampleRate)))); } virtual void instanceResetUserInterface() { fCheckbox0 = FAUSTFLOAT(0.0f); - } virtual void instanceClear() { IOTA = 0; for (int l0 = 0; (l0 < 8388608); l0 = (l0 + 1)) { fVec0[l0] = 0.0f; - } for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { iVec1[l1] = 0; - } for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { iRec1[l2] = 0; - } for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { fRec0[l3] = 0.0f; - } - } - virtual void init(int samplingFreq) { - classInit(samplingFreq); - instanceInit(samplingFreq); + virtual void init(int sample_rate) { + classInit(sample_rate); + instanceInit(sample_rate); } - virtual void instanceInit(int samplingFreq) { - instanceConstants(samplingFreq); + virtual void instanceInit(int sample_rate) { + instanceConstants(sample_rate); instanceResetUserInterface(); instanceClear(); } @@ -581,16 +622,15 @@ class live_capture : public dsp { virtual live_capture* clone() { return new live_capture(); } + virtual int getSampleRate() { - return fSamplingFreq; - + return fSampleRate; } virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("capture"); ui_interface->addCheckButton("gate", &fCheckbox0); ui_interface->closeBox(); - } virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { @@ -600,21 +640,18 @@ class live_capture : public dsp { float fSlow1 = (1.0f - fSlow0); int iSlow2 = int(fSlow0); for (int i = 0; (i < count); i = (i + 1)) { - fVec0[(IOTA & 8388607)] = ((fSlow0 * float(input0[i])) + (fSlow1 * fRec0[1])); + fVec0[(IOTA & 8388607)] = ((fSlow1 * fRec0[1]) + (fSlow0 * float(input0[i]))); iVec1[0] = iSlow2; iRec1[0] = (((iSlow2 - iVec1[1]) <= 0) * (iSlow2 + iRec1[1])); - fRec0[0] = fVec0[((IOTA - int(std::min(fConst0, float(std::max(0, int((iRec1[0] + -1))))))) & 8388607)]; + fRec0[0] = fVec0[((IOTA - int(std::min(fConst0, float(std::max(0, int((iRec1[0] + -1))))))) & 8388607)]; output0[i] = FAUSTFLOAT(fRec0[0]); IOTA = (IOTA + 1); iVec1[1] = iVec1[0]; iRec1[1] = iRec1[0]; fRec0[1] = fRec0[0]; - } - } - }; // clang-format on #endif diff --git a/ceammc/ext/src/misc/mod_misc.cpp b/ceammc/ext/src/misc/mod_misc.cpp index a86c303a74..4c1cd82c4f 100644 --- a/ceammc/ext/src/misc/mod_misc.cpp +++ b/ceammc/ext/src/misc/mod_misc.cpp @@ -1,8 +1,11 @@ #include "mod_misc.h" #include "ceammc_config.h" + +#ifdef CEAMMC_HAVE_TTS_FLITE #include "speech_flite.h" +#endif -#ifdef CEAMMC_HAVE_MODPLUG +#ifdef WITH_MODPLUG #include "misc_modplug.h" #endif @@ -13,13 +16,16 @@ extern void setup_live_capture_tilde(); void ceammc_misc_setup() { setup_live_capture_tilde(); - setup_misc_speech_flite(); -#ifdef CEAMMC_HAVE_MODPLUG +#ifdef WITH_MODPLUG setup_misc0x2emodplug_tilde(); #endif #ifdef CEAMMC_HAVE_FLUIDSYNTH setup_misc_fluid(); #endif + +#ifdef CEAMMC_HAVE_TTS_FLITE +setup_misc_speech_flite(); +#endif } diff --git a/ceammc/ext/src/misc/speech_flite.cpp b/ceammc/ext/src/misc/speech_flite.cpp index f48f00f5f7..f51fb7f022 100644 --- a/ceammc/ext/src/misc/speech_flite.cpp +++ b/ceammc/ext/src/misc/speech_flite.cpp @@ -39,6 +39,10 @@ SpeechFlite::SpeechFlite(const PdArgs& args) createProperty(new PointerProperty("@array", &name_, false)); voice_name_ = new SymbolProperty("@voice", gensym("kal16")); + voice_name_->info().addEnum("slt"); + voice_name_->info().addEnum("rms"); + voice_name_->info().addEnum("awb"); + voice_name_->info().addEnum("kal16"); createProperty(voice_name_); speed_ = new FloatPropertyClosedRange("@speed", 1, 1, 4); diff --git a/ceammc/ext/src/net/CMakeLists.txt b/ceammc/ext/src/net/CMakeLists.txt index 1538109a18..5bc1cf20c8 100644 --- a/ceammc/ext/src/net/CMakeLists.txt +++ b/ceammc/ext/src/net/CMakeLists.txt @@ -1,3 +1,5 @@ +include_directories(${PROJECT_SOURCE_DIR}/ceammc/extra) # for readerwriterqueue + macro(ceammc_net_external name) list(APPEND NET_SOURCES "net_${name}.cpp") endmacro() diff --git a/ceammc/ext/src/noise/noise_crackle.h b/ceammc/ext/src/noise/noise_crackle.h index 48b499df75..cd5b8fbee6 100644 --- a/ceammc/ext/src/noise/noise_crackle.h +++ b/ceammc/ext/src/noise/noise_crackle.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "noise.crackle" -Code generated with Faust 2.15.0 (https://faust.grame.fr) -Compilation options: cpp, -scal -ftz 0 +Code generated with Faust 2.22.1 (https://faust.grame.fr) +Compilation options: -lang cpp -scal -ftz 0 ------------------------------------------------------------ */ #ifndef __noise_crackle_H__ @@ -14,6 +14,7 @@ Compilation options: cpp, -scal -ftz 0 #include #include +/************************** BEGIN dsp.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -96,23 +97,23 @@ class dsp { * - static class 'classInit': static tables initialization * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void init(int samplingRate) = 0; + virtual void init(int sample_rate) = 0; /** * Init instance state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceInit(int samplingRate) = 0; + virtual void instanceInit(int sample_rate) = 0; /** * Init instance constant state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceConstants(int samplingRate) = 0; + virtual void instanceConstants(int sample_rate) = 0; /* Init default control parameters values */ virtual void instanceResetUserInterface() = 0; @@ -149,8 +150,8 @@ class dsp { * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the number of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) * */ virtual void compute(double /*date_usec*/, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -169,16 +170,16 @@ class decorator_dsp : public dsp { public: - decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + decorator_dsp(dsp* dsp = nullptr):fDSP(dsp) {} virtual ~decorator_dsp() { delete fDSP; } virtual int getNumInputs() { return fDSP->getNumInputs(); } virtual int getNumOutputs() { return fDSP->getNumOutputs(); } virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } virtual int getSampleRate() { return fDSP->getSampleRate(); } - virtual void init(int samplingRate) { fDSP->init(samplingRate); } - virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } - virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void init(int sample_rate) { fDSP->init(sample_rate); } + virtual void instanceInit(int sample_rate) { fDSP->instanceInit(sample_rate); } + virtual void instanceConstants(int sample_rate) { fDSP->instanceConstants(sample_rate); } virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } @@ -233,6 +234,8 @@ class dsp_factory { #endif #endif +/************************** END dsp.h **************************/ +/************************** BEGIN UI.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -272,45 +275,54 @@ class dsp_factory { struct Soundfile; -class UI +template +class UIReal { - + public: - - UI() {} - - virtual ~UI() {} - + + UIReal() {} + virtual ~UIReal() {} + // -- widget's layouts - + virtual void openTabBox(const char* label) = 0; virtual void openHorizontalBox(const char* label) = 0; virtual void openVerticalBox(const char* label) = 0; virtual void closeBox() = 0; - + // -- active widgets - - virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - + + virtual void addButton(const char* label, REAL* zone) = 0; + virtual void addCheckButton(const char* label, REAL* zone) = 0; + virtual void addVerticalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addHorizontalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addNumEntry(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + // -- passive widgets - - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - + + virtual void addHorizontalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + virtual void addVerticalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + // -- soundfiles - + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; - + // -- metadata declarations + + virtual void declare(REAL* zone, const char* key, const char* val) {} +}; - virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +struct UI : public UIReal +{ + + UI() {} + virtual ~UI() {} }; #endif +/************************** END UI.h **************************/ +/************************** BEGIN meta.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -339,11 +351,14 @@ class UI struct Meta { - virtual void declare(const char* key, const char* value) = 0; virtual ~Meta() {}; + virtual void declare(const char* key, const char* value) = 0; + }; #endif +/************************** END meta.h **************************/ +/************************** BEGIN misc.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -366,7 +381,7 @@ struct Meta that work under terms of your choice, so long as this FAUST architecture section is not modified. ************************************************************************/ - + #ifndef __misc__ #define __misc__ @@ -374,6 +389,8 @@ struct Meta #include #include #include +#include +#include using std::max; @@ -395,27 +412,65 @@ static int int2pow2(int x) { int r = 0; while ((1<declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.0"); - m->declare("filename", "noise_crackle"); + m->declare("basics.lib/version", "0.1"); + m->declare("filename", "noise_crackle.dsp"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); @@ -489,27 +545,23 @@ class noise_crackle : public dsp { virtual int getNumInputs() { return 0; - } virtual int getNumOutputs() { return 1; - } virtual int getInputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { default: { rate = -1; break; } - } return rate; - } virtual int getOutputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -518,61 +570,49 @@ class noise_crackle : public dsp { rate = -1; break; } - } return rate; - } - static void classInit(int samplingFreq) { - + static void classInit(int sample_rate) { } - virtual void instanceConstants(int samplingFreq) { - fSamplingFreq = samplingFreq; - fConst0 = (1.0f / std::min(192000.0f, std::max(1.0f, float(fSamplingFreq)))); - + virtual void instanceConstants(int sample_rate) { + fSampleRate = sample_rate; + fConst0 = (1.0f / std::min(192000.0f, std::max(1.0f, float(fSampleRate)))); } virtual void instanceResetUserInterface() { fHslider0 = FAUSTFLOAT(10.0f); - } virtual void instanceClear() { for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { iRec0[l0] = 0; - } for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { fVec0[l1] = 0.0f; - } for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { fVec1[l2] = 0.0f; - } for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { fRec1[l3] = 0.0f; - } for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { fVec2[l4] = 0.0f; - } for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { fRec2[l5] = 0.0f; - } - } - virtual void init(int samplingFreq) { - classInit(samplingFreq); - instanceInit(samplingFreq); + virtual void init(int sample_rate) { + classInit(sample_rate); + instanceInit(sample_rate); } - virtual void instanceInit(int samplingFreq) { - instanceConstants(samplingFreq); + virtual void instanceInit(int sample_rate) { + instanceConstants(sample_rate); instanceResetUserInterface(); instanceClear(); } @@ -580,9 +620,9 @@ class noise_crackle : public dsp { virtual noise_crackle* clone() { return new noise_crackle(); } + virtual int getSampleRate() { - return fSamplingFreq; - + return fSampleRate; } virtual void buildUserInterface(UI* ui_interface) { @@ -591,7 +631,6 @@ class noise_crackle : public dsp { ui_interface->declare(&fHslider0, "unit", "Hz"); ui_interface->addHorizontalSlider("freq", &fHslider0, 10.0f, 0.0f, 100.0f, 0.00999999978f); ui_interface->closeBox(); - } virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { @@ -602,26 +641,23 @@ class noise_crackle : public dsp { float fTemp0 = float(iRec0[0]); fVec0[0] = fTemp0; fVec1[0] = fSlow0; - float fTemp1 = (fRec1[1] + (fConst0 * fVec1[1])); + float fTemp1 = ((fConst0 * fVec1[1]) + fRec1[1]); fRec1[0] = (fTemp1 - std::floor(fTemp1)); float fTemp2 = (fRec1[0] - fRec1[1]); fVec2[0] = fTemp2; int iTemp3 = ((fVec2[1] <= 0.0f) & (fTemp2 > 0.0f)); fRec2[0] = ((fRec2[1] * float((1 - iTemp3))) + (4.65661287e-10f * (fTemp0 * float(iTemp3)))); float fTemp4 = (0.5f * (fRec2[0] + 1.0f)); - output0[i] = FAUSTFLOAT((4.65661287e-10f * (fVec0[1] * float(((fRec1[1] < fTemp4) * (fRec1[0] >= fTemp4)))))); + output0[i] = FAUSTFLOAT((4.65661287e-10f * (fVec0[1] * float(((fRec1[0] >= fTemp4) * (fRec1[1] < fTemp4)))))); iRec0[1] = iRec0[0]; fVec0[1] = fVec0[0]; fVec1[1] = fVec1[0]; fRec1[1] = fRec1[0]; fVec2[1] = fVec2[0]; fRec2[1] = fRec2[0]; - } - } - }; // clang-format on #endif diff --git a/ceammc/ext/src/noise/noise_lfreq.h b/ceammc/ext/src/noise/noise_lfreq.h index b8e330ab29..ad0b71c38a 100644 --- a/ceammc/ext/src/noise/noise_lfreq.h +++ b/ceammc/ext/src/noise/noise_lfreq.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "noise.lfreq" -Code generated with Faust 2.15.0 (https://faust.grame.fr) -Compilation options: cpp, -scal -ftz 0 +Code generated with Faust 2.22.1 (https://faust.grame.fr) +Compilation options: -lang cpp -scal -ftz 0 ------------------------------------------------------------ */ #ifndef __noise_lfreq_H__ @@ -14,6 +14,7 @@ Compilation options: cpp, -scal -ftz 0 #include #include +/************************** BEGIN dsp.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -96,23 +97,23 @@ class dsp { * - static class 'classInit': static tables initialization * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void init(int samplingRate) = 0; + virtual void init(int sample_rate) = 0; /** * Init instance state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceInit(int samplingRate) = 0; + virtual void instanceInit(int sample_rate) = 0; /** * Init instance constant state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceConstants(int samplingRate) = 0; + virtual void instanceConstants(int sample_rate) = 0; /* Init default control parameters values */ virtual void instanceResetUserInterface() = 0; @@ -149,8 +150,8 @@ class dsp { * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the number of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) * */ virtual void compute(double /*date_usec*/, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -169,16 +170,16 @@ class decorator_dsp : public dsp { public: - decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + decorator_dsp(dsp* dsp = nullptr):fDSP(dsp) {} virtual ~decorator_dsp() { delete fDSP; } virtual int getNumInputs() { return fDSP->getNumInputs(); } virtual int getNumOutputs() { return fDSP->getNumOutputs(); } virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } virtual int getSampleRate() { return fDSP->getSampleRate(); } - virtual void init(int samplingRate) { fDSP->init(samplingRate); } - virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } - virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void init(int sample_rate) { fDSP->init(sample_rate); } + virtual void instanceInit(int sample_rate) { fDSP->instanceInit(sample_rate); } + virtual void instanceConstants(int sample_rate) { fDSP->instanceConstants(sample_rate); } virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } @@ -233,6 +234,8 @@ class dsp_factory { #endif #endif +/************************** END dsp.h **************************/ +/************************** BEGIN UI.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -272,45 +275,54 @@ class dsp_factory { struct Soundfile; -class UI +template +class UIReal { - + public: - - UI() {} - - virtual ~UI() {} - + + UIReal() {} + virtual ~UIReal() {} + // -- widget's layouts - + virtual void openTabBox(const char* label) = 0; virtual void openHorizontalBox(const char* label) = 0; virtual void openVerticalBox(const char* label) = 0; virtual void closeBox() = 0; - + // -- active widgets - - virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - + + virtual void addButton(const char* label, REAL* zone) = 0; + virtual void addCheckButton(const char* label, REAL* zone) = 0; + virtual void addVerticalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addHorizontalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addNumEntry(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + // -- passive widgets - - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - + + virtual void addHorizontalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + virtual void addVerticalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + // -- soundfiles - + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; - + // -- metadata declarations + + virtual void declare(REAL* zone, const char* key, const char* val) {} +}; - virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +struct UI : public UIReal +{ + + UI() {} + virtual ~UI() {} }; #endif +/************************** END UI.h **************************/ +/************************** BEGIN meta.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -339,11 +351,14 @@ class UI struct Meta { - virtual void declare(const char* key, const char* value) = 0; virtual ~Meta() {}; + virtual void declare(const char* key, const char* value) = 0; + }; #endif +/************************** END meta.h **************************/ +/************************** BEGIN misc.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -366,7 +381,7 @@ struct Meta that work under terms of your choice, so long as this FAUST architecture section is not modified. ************************************************************************/ - + #ifndef __misc__ #define __misc__ @@ -374,6 +389,8 @@ struct Meta #include #include #include +#include +#include using std::max; @@ -395,27 +412,65 @@ static int int2pow2(int x) { int r = 0; while ((1<declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.0"); - m->declare("filename", "noise_lfreq"); + m->declare("basics.lib/version", "0.1"); + m->declare("filename", "noise_lfreq.dsp"); + m->declare("filters.lib/lowpass0_highpass1", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/lowpass0_highpass1:author", "Julius O. Smith III"); + m->declare("filters.lib/lowpass:author", "Julius O. Smith III"); + m->declare("filters.lib/lowpass:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/lowpass:license", "MIT-style STK-4.3 license"); m->declare("filters.lib/name", "Faust Filters Library"); - m->declare("filters.lib/version", "0.0"); + m->declare("filters.lib/nlf2:author", "Julius O. Smith III"); + m->declare("filters.lib/nlf2:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/nlf2:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/tf1:author", "Julius O. Smith III"); + m->declare("filters.lib/tf1:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/tf1:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/tf1s:author", "Julius O. Smith III"); + m->declare("filters.lib/tf1s:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/tf1s:license", "MIT-style STK-4.3 license"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); @@ -500,27 +569,23 @@ class noise_lfreq : public dsp { virtual int getNumInputs() { return 0; - } virtual int getNumOutputs() { return 1; - } virtual int getInputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { default: { rate = -1; break; } - } return rate; - } virtual int getOutputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -529,83 +594,66 @@ class noise_lfreq : public dsp { rate = -1; break; } - } return rate; - } - static void classInit(int samplingFreq) { - + static void classInit(int sample_rate) { } - virtual void instanceConstants(int samplingFreq) { - fSamplingFreq = samplingFreq; - fConst0 = std::min(192000.0f, std::max(1.0f, float(fSamplingFreq))); + virtual void instanceConstants(int sample_rate) { + fSampleRate = sample_rate; + fConst0 = std::min(192000.0f, std::max(1.0f, float(fSampleRate))); fConst1 = (3.14159274f / fConst0); fConst2 = (6.28318548f / fConst0); - } virtual void instanceResetUserInterface() { fHslider0 = FAUSTFLOAT(1000.0f); - } virtual void instanceClear() { for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { iVec0[l0] = 0; - } for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { fRec1[l1] = 0.0f; - } for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { fRec7[l2] = 0.0f; - } for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { fRec8[l3] = 0.0f; - } for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { iRec9[l4] = 0; - } for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { fRec6[l5] = 0.0f; - } for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { fRec5[l6] = 0.0f; - } for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) { fRec4[l7] = 0.0f; - } for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { fRec3[l8] = 0.0f; - } for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { fRec2[l9] = 0.0f; - } for (int l10 = 0; (l10 < 2); l10 = (l10 + 1)) { fRec0[l10] = 0.0f; - } - } - virtual void init(int samplingFreq) { - classInit(samplingFreq); - instanceInit(samplingFreq); + virtual void init(int sample_rate) { + classInit(sample_rate); + instanceInit(sample_rate); } - virtual void instanceInit(int samplingFreq) { - instanceConstants(samplingFreq); + virtual void instanceInit(int sample_rate) { + instanceConstants(sample_rate); instanceResetUserInterface(); instanceClear(); } @@ -613,9 +661,9 @@ class noise_lfreq : public dsp { virtual noise_lfreq* clone() { return new noise_lfreq(); } + virtual int getSampleRate() { - return fSamplingFreq; - + return fSampleRate; } virtual void buildUserInterface(UI* ui_interface) { @@ -623,7 +671,6 @@ class noise_lfreq : public dsp { ui_interface->declare(&fHslider0, "unit", "Hz"); ui_interface->addHorizontalSlider("freq", &fHslider0, 1000.0f, 5.0f, 22050.0f, 0.100000001f); ui_interface->closeBox(); - } virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { @@ -660,12 +707,9 @@ class noise_lfreq : public dsp { fRec3[1] = fRec3[0]; fRec2[1] = fRec2[0]; fRec0[1] = fRec0[0]; - } - } - }; // clang-format on #endif diff --git a/ceammc/ext/src/noise/noise_lfreq0.h b/ceammc/ext/src/noise/noise_lfreq0.h index 1223b7a06c..6c6b48f8ce 100644 --- a/ceammc/ext/src/noise/noise_lfreq0.h +++ b/ceammc/ext/src/noise/noise_lfreq0.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "noise.lfreq0" -Code generated with Faust 2.15.0 (https://faust.grame.fr) -Compilation options: cpp, -scal -ftz 0 +Code generated with Faust 2.22.1 (https://faust.grame.fr) +Compilation options: -lang cpp -scal -ftz 0 ------------------------------------------------------------ */ #ifndef __noise_lfreq0_H__ @@ -14,6 +14,7 @@ Compilation options: cpp, -scal -ftz 0 #include #include +/************************** BEGIN dsp.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -96,23 +97,23 @@ class dsp { * - static class 'classInit': static tables initialization * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void init(int samplingRate) = 0; + virtual void init(int sample_rate) = 0; /** * Init instance state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceInit(int samplingRate) = 0; + virtual void instanceInit(int sample_rate) = 0; /** * Init instance constant state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceConstants(int samplingRate) = 0; + virtual void instanceConstants(int sample_rate) = 0; /* Init default control parameters values */ virtual void instanceResetUserInterface() = 0; @@ -149,8 +150,8 @@ class dsp { * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the number of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) * */ virtual void compute(double /*date_usec*/, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -169,16 +170,16 @@ class decorator_dsp : public dsp { public: - decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + decorator_dsp(dsp* dsp = nullptr):fDSP(dsp) {} virtual ~decorator_dsp() { delete fDSP; } virtual int getNumInputs() { return fDSP->getNumInputs(); } virtual int getNumOutputs() { return fDSP->getNumOutputs(); } virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } virtual int getSampleRate() { return fDSP->getSampleRate(); } - virtual void init(int samplingRate) { fDSP->init(samplingRate); } - virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } - virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void init(int sample_rate) { fDSP->init(sample_rate); } + virtual void instanceInit(int sample_rate) { fDSP->instanceInit(sample_rate); } + virtual void instanceConstants(int sample_rate) { fDSP->instanceConstants(sample_rate); } virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } @@ -233,6 +234,8 @@ class dsp_factory { #endif #endif +/************************** END dsp.h **************************/ +/************************** BEGIN UI.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -272,45 +275,54 @@ class dsp_factory { struct Soundfile; -class UI +template +class UIReal { - + public: - - UI() {} - - virtual ~UI() {} - + + UIReal() {} + virtual ~UIReal() {} + // -- widget's layouts - + virtual void openTabBox(const char* label) = 0; virtual void openHorizontalBox(const char* label) = 0; virtual void openVerticalBox(const char* label) = 0; virtual void closeBox() = 0; - + // -- active widgets - - virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - + + virtual void addButton(const char* label, REAL* zone) = 0; + virtual void addCheckButton(const char* label, REAL* zone) = 0; + virtual void addVerticalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addHorizontalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addNumEntry(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + // -- passive widgets - - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - + + virtual void addHorizontalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + virtual void addVerticalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + // -- soundfiles - + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; - + // -- metadata declarations + + virtual void declare(REAL* zone, const char* key, const char* val) {} +}; - virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +struct UI : public UIReal +{ + + UI() {} + virtual ~UI() {} }; #endif +/************************** END UI.h **************************/ +/************************** BEGIN meta.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -339,11 +351,14 @@ class UI struct Meta { - virtual void declare(const char* key, const char* value) = 0; virtual ~Meta() {}; + virtual void declare(const char* key, const char* value) = 0; + }; #endif +/************************** END meta.h **************************/ +/************************** BEGIN misc.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -366,7 +381,7 @@ struct Meta that work under terms of your choice, so long as this FAUST architecture section is not modified. ************************************************************************/ - + #ifndef __misc__ #define __misc__ @@ -374,6 +389,8 @@ struct Meta #include #include #include +#include +#include using std::max; @@ -395,27 +412,65 @@ static int int2pow2(int x) { int r = 0; while ((1<declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.0"); - m->declare("filename", "noise_lfreq0"); + m->declare("basics.lib/version", "0.1"); + m->declare("filename", "noise_lfreq0.dsp"); + m->declare("filters.lib/lowpass0_highpass1", "Copyright (C) 2003-2019 by Julius O. Smith III "); m->declare("filters.lib/name", "Faust Filters Library"); - m->declare("filters.lib/version", "0.0"); + m->declare("filters.lib/nlf2:author", "Julius O. Smith III"); + m->declare("filters.lib/nlf2:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/nlf2:license", "MIT-style STK-4.3 license"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); @@ -490,27 +549,23 @@ class noise_lfreq0 : public dsp { virtual int getNumInputs() { return 0; - } virtual int getNumOutputs() { return 1; - } virtual int getInputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { default: { rate = -1; break; } - } return rate; - } virtual int getOutputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -519,57 +574,46 @@ class noise_lfreq0 : public dsp { rate = -1; break; } - } return rate; - } - static void classInit(int samplingFreq) { - + static void classInit(int sample_rate) { } - virtual void instanceConstants(int samplingFreq) { - fSamplingFreq = samplingFreq; - fConst0 = (6.28318548f / std::min(192000.0f, std::max(1.0f, float(fSamplingFreq)))); - + virtual void instanceConstants(int sample_rate) { + fSampleRate = sample_rate; + fConst0 = (6.28318548f / std::min(192000.0f, std::max(1.0f, float(fSampleRate)))); } virtual void instanceResetUserInterface() { fHslider0 = FAUSTFLOAT(1000.0f); - } virtual void instanceClear() { for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { iVec0[l0] = 0; - } for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { fRec1[l1] = 0.0f; - } for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { fRec2[l2] = 0.0f; - } for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { iRec3[l3] = 0; - } for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { fRec0[l4] = 0.0f; - } - } - virtual void init(int samplingFreq) { - classInit(samplingFreq); - instanceInit(samplingFreq); + virtual void init(int sample_rate) { + classInit(sample_rate); + instanceInit(sample_rate); } - virtual void instanceInit(int samplingFreq) { - instanceConstants(samplingFreq); + virtual void instanceInit(int sample_rate) { + instanceConstants(sample_rate); instanceResetUserInterface(); instanceClear(); } @@ -577,9 +621,9 @@ class noise_lfreq0 : public dsp { virtual noise_lfreq0* clone() { return new noise_lfreq0(); } + virtual int getSampleRate() { - return fSamplingFreq; - + return fSampleRate; } virtual void buildUserInterface(UI* ui_interface) { @@ -587,7 +631,6 @@ class noise_lfreq0 : public dsp { ui_interface->declare(&fHslider0, "unit", "Hz"); ui_interface->addHorizontalSlider("freq", &fHslider0, 1000.0f, 5.0f, 22050.0f, 0.100000001f); ui_interface->closeBox(); - } virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { @@ -608,12 +651,9 @@ class noise_lfreq0 : public dsp { fRec2[1] = fRec2[0]; iRec3[1] = iRec3[0]; fRec0[1] = fRec0[0]; - } - } - }; // clang-format on #endif diff --git a/ceammc/ext/src/noise/noise_pink.h b/ceammc/ext/src/noise/noise_pink.h index e0b4493535..c60af368b7 100644 --- a/ceammc/ext/src/noise/noise_pink.h +++ b/ceammc/ext/src/noise/noise_pink.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "noise_pink" -Code generated with Faust 2.8.5 (https://faust.grame.fr) -Compilation options: cpp, -scal -ftz 0 +Code generated with Faust 2.22.1 (https://faust.grame.fr) +Compilation options: -lang cpp -scal -ftz 0 ------------------------------------------------------------ */ #ifndef __pink_H__ @@ -39,6 +39,7 @@ Compilation options: cpp, -scal -ftz 0 #include #include +/************************** BEGIN dsp.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -121,23 +122,23 @@ class dsp { * - static class 'classInit': static tables initialization * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void init(int samplingRate) = 0; + virtual void init(int sample_rate) = 0; /** * Init instance state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceInit(int samplingRate) = 0; + virtual void instanceInit(int sample_rate) = 0; /** * Init instance constant state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceConstants(int samplingRate) = 0; + virtual void instanceConstants(int sample_rate) = 0; /* Init default control parameters values */ virtual void instanceResetUserInterface() = 0; @@ -174,8 +175,8 @@ class dsp { * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the number of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) * */ virtual void compute(double /*date_usec*/, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -194,16 +195,16 @@ class decorator_dsp : public dsp { public: - decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + decorator_dsp(dsp* dsp = nullptr):fDSP(dsp) {} virtual ~decorator_dsp() { delete fDSP; } virtual int getNumInputs() { return fDSP->getNumInputs(); } virtual int getNumOutputs() { return fDSP->getNumOutputs(); } virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } virtual int getSampleRate() { return fDSP->getSampleRate(); } - virtual void init(int samplingRate) { fDSP->init(samplingRate); } - virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } - virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void init(int sample_rate) { fDSP->init(sample_rate); } + virtual void instanceInit(int sample_rate) { fDSP->instanceInit(sample_rate); } + virtual void instanceConstants(int sample_rate) { fDSP->instanceConstants(sample_rate); } virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } @@ -258,6 +259,8 @@ class dsp_factory { #endif #endif +/************************** END dsp.h **************************/ +/************************** BEGIN UI.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -297,45 +300,54 @@ class dsp_factory { struct Soundfile; -class UI +template +class UIReal { - + public: - - UI() {} - - virtual ~UI() {} - + + UIReal() {} + virtual ~UIReal() {} + // -- widget's layouts - + virtual void openTabBox(const char* label) = 0; virtual void openHorizontalBox(const char* label) = 0; virtual void openVerticalBox(const char* label) = 0; virtual void closeBox() = 0; - + // -- active widgets - - virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - + + virtual void addButton(const char* label, REAL* zone) = 0; + virtual void addCheckButton(const char* label, REAL* zone) = 0; + virtual void addVerticalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addHorizontalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addNumEntry(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + // -- passive widgets - - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - + + virtual void addHorizontalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + virtual void addVerticalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + // -- soundfiles - + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; - + // -- metadata declarations + + virtual void declare(REAL* zone, const char* key, const char* val) {} +}; + +struct UI : public UIReal +{ - virtual void declare(FAUSTFLOAT*, const char*, const char*) {} + UI() {} + virtual ~UI() {} }; #endif +/************************** END UI.h **************************/ +/************************** BEGIN meta.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -364,11 +376,14 @@ class UI struct Meta { - virtual void declare(const char* key, const char* value) = 0; virtual ~Meta() {}; + virtual void declare(const char* key, const char* value) = 0; + }; #endif +/************************** END meta.h **************************/ +/************************** BEGIN misc.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -391,15 +406,16 @@ struct Meta that work under terms of your choice, so long as this FAUST architecture section is not modified. ************************************************************************/ - + #ifndef __misc__ #define __misc__ #include #include -#include -#include #include +#include +#include +#include using std::max; @@ -407,41 +423,79 @@ using std::min; struct XXXX_Meta : std::map { - void declare(const char* key, const char* value) { (*this)[key]=value; } + void declare(const char* key, const char* value) { (*this)[key] = value; } }; struct MY_Meta : Meta, std::map { - void declare(const char* key, const char* value) { (*this)[key]=value; } + void declare(const char* key, const char* value) { (*this)[key] = value; } }; -inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } +static int lsr(int x, int n) { return int(((unsigned int)x) >> n); } -inline int int2pow2(int x) { int r = 0; while ((1<declare("filename", "noise_pink"); + m->declare("filename", "noise_pink.dsp"); + m->declare("filters.lib/fir:author", "Julius O. Smith III"); + m->declare("filters.lib/fir:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/fir:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/iir:author", "Julius O. Smith III"); + m->declare("filters.lib/iir:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/iir:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/lowpass0_highpass1", "Copyright (C) 2003-2019 by Julius O. Smith III "); m->declare("filters.lib/name", "Faust Filters Library"); - m->declare("filters.lib/version", "0.0"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); @@ -533,27 +594,23 @@ class pink : public dsp { virtual int getNumInputs() { return 0; - } virtual int getNumOutputs() { return 1; - } virtual int getInputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { default: { rate = -1; break; } - } return rate; - } virtual int getOutputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -562,43 +619,35 @@ class pink : public dsp { rate = -1; break; } - } return rate; - } - static void classInit(int samplingFreq) { - + static void classInit(int sample_rate) { } - virtual void instanceConstants(int samplingFreq) { - fSamplingFreq = samplingFreq; - + virtual void instanceConstants(int sample_rate) { + fSampleRate = sample_rate; } virtual void instanceResetUserInterface() { - } virtual void instanceClear() { for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { iRec1[l0] = 0; - } for (int l1 = 0; (l1 < 4); l1 = (l1 + 1)) { fRec0[l1] = 0.0f; - } - } - virtual void init(int samplingFreq) { - classInit(samplingFreq); - instanceInit(samplingFreq); + virtual void init(int sample_rate) { + classInit(sample_rate); + instanceInit(sample_rate); } - virtual void instanceInit(int samplingFreq) { - instanceConstants(samplingFreq); + virtual void instanceInit(int sample_rate) { + instanceConstants(sample_rate); instanceResetUserInterface(); instanceClear(); } @@ -606,34 +655,29 @@ class pink : public dsp { virtual pink* clone() { return new pink(); } + virtual int getSampleRate() { - return fSamplingFreq; - + return fSampleRate; } virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("noise_pink"); ui_interface->closeBox(); - } virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { FAUSTFLOAT* output0 = outputs[0]; for (int i = 0; (i < count); i = (i + 1)) { iRec1[0] = ((1103515245 * iRec1[1]) + 12345); - fRec0[0] = (((4.65661287e-10f * float(iRec1[0])) + ((0.522189379f * fRec0[3]) + (2.49495602f * fRec0[1]))) - (2.0172658f * fRec0[2])); + fRec0[0] = (((2.49495602f * fRec0[1]) + ((4.65661287e-10f * float(iRec1[0])) + (0.522189379f * fRec0[3]))) - (2.0172658f * fRec0[2])); output0[i] = FAUSTFLOAT((((0.0499220341f * fRec0[0]) + (0.0506126992f * fRec0[2])) - ((0.0959935337f * fRec0[1]) + (0.00440878607f * fRec0[3])))); iRec1[1] = iRec1[0]; for (int j0 = 3; (j0 > 0); j0 = (j0 - 1)) { fRec0[j0] = fRec0[(j0 - 1)]; - } - } - } - }; // clang-format on #endif diff --git a/ceammc/ext/src/noise/noise_white.h b/ceammc/ext/src/noise/noise_white.h index 5179e17f00..ba6b97965c 100644 --- a/ceammc/ext/src/noise/noise_white.h +++ b/ceammc/ext/src/noise/noise_white.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "noise_white" -Code generated with Faust 2.8.5 (https://faust.grame.fr) -Compilation options: cpp, -scal -ftz 0 +Code generated with Faust 2.22.1 (https://faust.grame.fr) +Compilation options: -lang cpp -scal -ftz 0 ------------------------------------------------------------ */ #ifndef __white_H__ @@ -39,6 +39,7 @@ Compilation options: cpp, -scal -ftz 0 #include #include +/************************** BEGIN dsp.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -121,23 +122,23 @@ class dsp { * - static class 'classInit': static tables initialization * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void init(int samplingRate) = 0; + virtual void init(int sample_rate) = 0; /** * Init instance state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceInit(int samplingRate) = 0; + virtual void instanceInit(int sample_rate) = 0; /** * Init instance constant state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceConstants(int samplingRate) = 0; + virtual void instanceConstants(int sample_rate) = 0; /* Init default control parameters values */ virtual void instanceResetUserInterface() = 0; @@ -174,8 +175,8 @@ class dsp { * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the number of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) * */ virtual void compute(double /*date_usec*/, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -194,16 +195,16 @@ class decorator_dsp : public dsp { public: - decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + decorator_dsp(dsp* dsp = nullptr):fDSP(dsp) {} virtual ~decorator_dsp() { delete fDSP; } virtual int getNumInputs() { return fDSP->getNumInputs(); } virtual int getNumOutputs() { return fDSP->getNumOutputs(); } virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } virtual int getSampleRate() { return fDSP->getSampleRate(); } - virtual void init(int samplingRate) { fDSP->init(samplingRate); } - virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } - virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void init(int sample_rate) { fDSP->init(sample_rate); } + virtual void instanceInit(int sample_rate) { fDSP->instanceInit(sample_rate); } + virtual void instanceConstants(int sample_rate) { fDSP->instanceConstants(sample_rate); } virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } @@ -258,6 +259,8 @@ class dsp_factory { #endif #endif +/************************** END dsp.h **************************/ +/************************** BEGIN UI.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -297,45 +300,54 @@ class dsp_factory { struct Soundfile; -class UI +template +class UIReal { - + public: - - UI() {} - - virtual ~UI() {} - + + UIReal() {} + virtual ~UIReal() {} + // -- widget's layouts - + virtual void openTabBox(const char* label) = 0; virtual void openHorizontalBox(const char* label) = 0; virtual void openVerticalBox(const char* label) = 0; virtual void closeBox() = 0; - + // -- active widgets - - virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - + + virtual void addButton(const char* label, REAL* zone) = 0; + virtual void addCheckButton(const char* label, REAL* zone) = 0; + virtual void addVerticalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addHorizontalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addNumEntry(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + // -- passive widgets - - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - + + virtual void addHorizontalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + virtual void addVerticalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + // -- soundfiles - + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; - + // -- metadata declarations + + virtual void declare(REAL* zone, const char* key, const char* val) {} +}; + +struct UI : public UIReal +{ - virtual void declare(FAUSTFLOAT*, const char*, const char*) {} + UI() {} + virtual ~UI() {} }; #endif +/************************** END UI.h **************************/ +/************************** BEGIN meta.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -364,11 +376,14 @@ class UI struct Meta { - virtual void declare(const char* key, const char* value) = 0; virtual ~Meta() {}; + virtual void declare(const char* key, const char* value) = 0; + }; #endif +/************************** END meta.h **************************/ +/************************** BEGIN misc.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -391,15 +406,16 @@ struct Meta that work under terms of your choice, so long as this FAUST architecture section is not modified. ************************************************************************/ - + #ifndef __misc__ #define __misc__ #include #include -#include -#include #include +#include +#include +#include using std::max; @@ -407,41 +423,79 @@ using std::min; struct XXXX_Meta : std::map { - void declare(const char* key, const char* value) { (*this)[key]=value; } + void declare(const char* key, const char* value) { (*this)[key] = value; } }; struct MY_Meta : Meta, std::map { - void declare(const char* key, const char* value) { (*this)[key]=value; } + void declare(const char* key, const char* value) { (*this)[key] = value; } }; -inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } +static int lsr(int x, int n) { return int(((unsigned int)x) >> n); } -inline int int2pow2(int x) { int r = 0; while ((1<declare("filename", "noise_white"); + m->declare("filename", "noise_white.dsp"); m->declare("name", "noise_white"); m->declare("noises.lib/name", "Faust Noise Generator Library"); m->declare("noises.lib/version", "0.0"); @@ -525,27 +580,23 @@ class white : public dsp { virtual int getNumInputs() { return 0; - } virtual int getNumOutputs() { return 1; - } virtual int getInputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { default: { rate = -1; break; } - } return rate; - } virtual int getOutputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -554,39 +605,32 @@ class white : public dsp { rate = -1; break; } - } return rate; - } - static void classInit(int samplingFreq) { - + static void classInit(int sample_rate) { } - virtual void instanceConstants(int samplingFreq) { - fSamplingFreq = samplingFreq; - + virtual void instanceConstants(int sample_rate) { + fSampleRate = sample_rate; } virtual void instanceResetUserInterface() { - } virtual void instanceClear() { for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { iRec0[l0] = 0; - } - } - virtual void init(int samplingFreq) { - classInit(samplingFreq); - instanceInit(samplingFreq); + virtual void init(int sample_rate) { + classInit(sample_rate); + instanceInit(sample_rate); } - virtual void instanceInit(int samplingFreq) { - instanceConstants(samplingFreq); + virtual void instanceInit(int sample_rate) { + instanceConstants(sample_rate); instanceResetUserInterface(); instanceClear(); } @@ -594,15 +638,14 @@ class white : public dsp { virtual white* clone() { return new white(); } + virtual int getSampleRate() { - return fSamplingFreq; - + return fSampleRate; } virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("noise_white"); ui_interface->closeBox(); - } virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { @@ -611,12 +654,9 @@ class white : public dsp { iRec0[0] = ((1103515245 * iRec0[1]) + 12345); output0[i] = FAUSTFLOAT((4.65661287e-10f * float(iRec0[0]))); iRec0[1] = iRec0[0]; - } - } - }; // clang-format on #endif diff --git a/ceammc/ext/src/osc/osc_impulse.h b/ceammc/ext/src/osc/osc_impulse.h index 32c6f2d784..7e1a43d91a 100644 --- a/ceammc/ext/src/osc/osc_impulse.h +++ b/ceammc/ext/src/osc/osc_impulse.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "osc_impulse" -Code generated with Faust 2.15.10 (https://faust.grame.fr) -Compilation options: cpp, -scal -ftz 0 +Code generated with Faust 2.22.1 (https://faust.grame.fr) +Compilation options: -lang cpp -scal -ftz 0 ------------------------------------------------------------ */ #ifndef __osc_impulse_H__ @@ -14,6 +14,7 @@ Compilation options: cpp, -scal -ftz 0 #include #include +/************************** BEGIN dsp.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -96,23 +97,23 @@ class dsp { * - static class 'classInit': static tables initialization * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void init(int samplingRate) = 0; + virtual void init(int sample_rate) = 0; /** * Init instance state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceInit(int samplingRate) = 0; + virtual void instanceInit(int sample_rate) = 0; /** * Init instance constant state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceConstants(int samplingRate) = 0; + virtual void instanceConstants(int sample_rate) = 0; /* Init default control parameters values */ virtual void instanceResetUserInterface() = 0; @@ -149,8 +150,8 @@ class dsp { * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the number of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) * */ virtual void compute(double /*date_usec*/, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -169,16 +170,16 @@ class decorator_dsp : public dsp { public: - decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + decorator_dsp(dsp* dsp = nullptr):fDSP(dsp) {} virtual ~decorator_dsp() { delete fDSP; } virtual int getNumInputs() { return fDSP->getNumInputs(); } virtual int getNumOutputs() { return fDSP->getNumOutputs(); } virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } virtual int getSampleRate() { return fDSP->getSampleRate(); } - virtual void init(int samplingRate) { fDSP->init(samplingRate); } - virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } - virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void init(int sample_rate) { fDSP->init(sample_rate); } + virtual void instanceInit(int sample_rate) { fDSP->instanceInit(sample_rate); } + virtual void instanceConstants(int sample_rate) { fDSP->instanceConstants(sample_rate); } virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } @@ -233,6 +234,8 @@ class dsp_factory { #endif #endif +/************************** END dsp.h **************************/ +/************************** BEGIN UI.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -272,45 +275,54 @@ class dsp_factory { struct Soundfile; -class UI +template +class UIReal { - + public: - - UI() {} - - virtual ~UI() {} - + + UIReal() {} + virtual ~UIReal() {} + // -- widget's layouts - + virtual void openTabBox(const char* label) = 0; virtual void openHorizontalBox(const char* label) = 0; virtual void openVerticalBox(const char* label) = 0; virtual void closeBox() = 0; - + // -- active widgets - - virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - + + virtual void addButton(const char* label, REAL* zone) = 0; + virtual void addCheckButton(const char* label, REAL* zone) = 0; + virtual void addVerticalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addHorizontalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addNumEntry(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + // -- passive widgets - - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - + + virtual void addHorizontalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + virtual void addVerticalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + // -- soundfiles - + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; - + // -- metadata declarations + + virtual void declare(REAL* zone, const char* key, const char* val) {} +}; - virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +struct UI : public UIReal +{ + + UI() {} + virtual ~UI() {} }; #endif +/************************** END UI.h **************************/ +/************************** BEGIN meta.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -339,11 +351,14 @@ class UI struct Meta { - virtual void declare(const char* key, const char* value) = 0; virtual ~Meta() {}; + virtual void declare(const char* key, const char* value) = 0; + }; #endif +/************************** END meta.h **************************/ +/************************** BEGIN misc.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -366,7 +381,7 @@ struct Meta that work under terms of your choice, so long as this FAUST architecture section is not modified. ************************************************************************/ - + #ifndef __misc__ #define __misc__ @@ -374,6 +389,8 @@ struct Meta #include #include #include +#include +#include using std::max; @@ -395,27 +412,65 @@ static int int2pow2(int x) { int r = 0; while ((1<declare("filename", "osc_impulse"); + m->declare("filename", "osc_impulse.dsp"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); @@ -489,15 +544,13 @@ class osc_impulse : public dsp { virtual int getNumInputs() { return 1; - } virtual int getNumOutputs() { return 1; - } virtual int getInputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -506,14 +559,12 @@ class osc_impulse : public dsp { rate = -1; break; } - } return rate; - } virtual int getOutputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -522,59 +573,47 @@ class osc_impulse : public dsp { rate = -1; break; } - } return rate; - } - static void classInit(int samplingFreq) { - + static void classInit(int sample_rate) { } - virtual void instanceConstants(int samplingFreq) { - fSamplingFreq = samplingFreq; - fConst0 = std::min(192000.0f, std::max(1.0f, float(fSamplingFreq))); + virtual void instanceConstants(int sample_rate) { + fSampleRate = sample_rate; + fConst0 = std::min(192000.0f, std::max(1.0f, float(fSampleRate))); fConst1 = (0.25f * fConst0); fConst2 = (1.0f / fConst0); - } virtual void instanceResetUserInterface() { - } virtual void instanceClear() { for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { iVec0[l0] = 0; - } for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { fVec1[l1] = 0.0f; - } for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { fRec0[l2] = 0.0f; - } for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { fVec2[l3] = 0.0f; - } for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { fVec3[l4] = 0.0f; - } - } - virtual void init(int samplingFreq) { - classInit(samplingFreq); - instanceInit(samplingFreq); + virtual void init(int sample_rate) { + classInit(sample_rate); + instanceInit(sample_rate); } - - virtual void instanceInit(int samplingFreq) { - instanceConstants(samplingFreq); + virtual void instanceInit(int sample_rate) { + instanceConstants(sample_rate); instanceResetUserInterface(); instanceClear(); } @@ -584,14 +623,12 @@ class osc_impulse : public dsp { } virtual int getSampleRate() { - return fSamplingFreq; - + return fSampleRate; } virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("osc_impulse"); ui_interface->closeBox(); - } virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { @@ -613,9 +650,7 @@ class osc_impulse : public dsp { fRec0[1] = fRec0[0]; fVec2[1] = fVec2[0]; fVec3[1] = fVec3[0]; - } - } }; diff --git a/ceammc/ext/src/osc/osc_pulse.h b/ceammc/ext/src/osc/osc_pulse.h index 5ee1447ac0..5944d295a2 100644 --- a/ceammc/ext/src/osc/osc_pulse.h +++ b/ceammc/ext/src/osc/osc_pulse.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "osc_pulse" -Code generated with Faust 2.15.10 (https://faust.grame.fr) -Compilation options: cpp, -scal -ftz 0 +Code generated with Faust 2.22.1 (https://faust.grame.fr) +Compilation options: -lang cpp -scal -ftz 0 ------------------------------------------------------------ */ #ifndef __osc_pulse_H__ @@ -14,6 +14,7 @@ Compilation options: cpp, -scal -ftz 0 #include #include +/************************** BEGIN dsp.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -96,23 +97,23 @@ class dsp { * - static class 'classInit': static tables initialization * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void init(int samplingRate) = 0; + virtual void init(int sample_rate) = 0; /** * Init instance state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceInit(int samplingRate) = 0; + virtual void instanceInit(int sample_rate) = 0; /** * Init instance constant state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceConstants(int samplingRate) = 0; + virtual void instanceConstants(int sample_rate) = 0; /* Init default control parameters values */ virtual void instanceResetUserInterface() = 0; @@ -149,8 +150,8 @@ class dsp { * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the number of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) * */ virtual void compute(double /*date_usec*/, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -169,16 +170,16 @@ class decorator_dsp : public dsp { public: - decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + decorator_dsp(dsp* dsp = nullptr):fDSP(dsp) {} virtual ~decorator_dsp() { delete fDSP; } virtual int getNumInputs() { return fDSP->getNumInputs(); } virtual int getNumOutputs() { return fDSP->getNumOutputs(); } virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } virtual int getSampleRate() { return fDSP->getSampleRate(); } - virtual void init(int samplingRate) { fDSP->init(samplingRate); } - virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } - virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void init(int sample_rate) { fDSP->init(sample_rate); } + virtual void instanceInit(int sample_rate) { fDSP->instanceInit(sample_rate); } + virtual void instanceConstants(int sample_rate) { fDSP->instanceConstants(sample_rate); } virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } @@ -233,6 +234,8 @@ class dsp_factory { #endif #endif +/************************** END dsp.h **************************/ +/************************** BEGIN UI.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -272,45 +275,54 @@ class dsp_factory { struct Soundfile; -class UI +template +class UIReal { - + public: - - UI() {} - - virtual ~UI() {} - + + UIReal() {} + virtual ~UIReal() {} + // -- widget's layouts - + virtual void openTabBox(const char* label) = 0; virtual void openHorizontalBox(const char* label) = 0; virtual void openVerticalBox(const char* label) = 0; virtual void closeBox() = 0; - + // -- active widgets - - virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - + + virtual void addButton(const char* label, REAL* zone) = 0; + virtual void addCheckButton(const char* label, REAL* zone) = 0; + virtual void addVerticalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addHorizontalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addNumEntry(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + // -- passive widgets - - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - + + virtual void addHorizontalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + virtual void addVerticalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + // -- soundfiles - + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; - + // -- metadata declarations + + virtual void declare(REAL* zone, const char* key, const char* val) {} +}; - virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +struct UI : public UIReal +{ + + UI() {} + virtual ~UI() {} }; #endif +/************************** END UI.h **************************/ +/************************** BEGIN meta.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -339,11 +351,14 @@ class UI struct Meta { - virtual void declare(const char* key, const char* value) = 0; virtual ~Meta() {}; + virtual void declare(const char* key, const char* value) = 0; + }; #endif +/************************** END meta.h **************************/ +/************************** BEGIN misc.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -366,7 +381,7 @@ struct Meta that work under terms of your choice, so long as this FAUST architecture section is not modified. ************************************************************************/ - + #ifndef __misc__ #define __misc__ @@ -374,6 +389,8 @@ struct Meta #include #include #include +#include +#include using std::max; @@ -395,27 +412,65 @@ static int int2pow2(int x) { int r = 0; while ((1<declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.0"); - m->declare("filename", "osc_pulse"); + m->declare("basics.lib/version", "0.1"); + m->declare("filename", "osc_pulse.dsp"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); @@ -496,15 +551,13 @@ class osc_pulse : public dsp { virtual int getNumInputs() { return 1; - } virtual int getNumOutputs() { return 1; - } virtual int getInputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -513,14 +566,12 @@ class osc_pulse : public dsp { rate = -1; break; } - } return rate; - } virtual int getOutputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -529,65 +580,52 @@ class osc_pulse : public dsp { rate = -1; break; } - } return rate; - } - static void classInit(int samplingFreq) { - + static void classInit(int sample_rate) { } - virtual void instanceConstants(int samplingFreq) { - fSamplingFreq = samplingFreq; - fConst0 = std::min(192000.0f, std::max(1.0f, float(fSamplingFreq))); + virtual void instanceConstants(int sample_rate) { + fSampleRate = sample_rate; + fConst0 = std::min(192000.0f, std::max(1.0f, float(fSampleRate))); fConst1 = (0.25f * fConst0); fConst2 = (1.0f / fConst0); - } virtual void instanceResetUserInterface() { fHslider0 = FAUSTFLOAT(0.5f); - } virtual void instanceClear() { for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { iVec0[l0] = 0; - } for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { fVec1[l1] = 0.0f; - } for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { fRec0[l2] = 0.0f; - } for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { fVec2[l3] = 0.0f; - } IOTA = 0; for (int l4 = 0; (l4 < 4096); l4 = (l4 + 1)) { fVec3[l4] = 0.0f; - } for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { fRec1[l5] = 0.0f; - } - } - virtual void init(int samplingFreq) { - classInit(samplingFreq); - instanceInit(samplingFreq); + virtual void init(int sample_rate) { + classInit(sample_rate); + instanceInit(sample_rate); } - - virtual void instanceInit(int samplingFreq) { - instanceConstants(samplingFreq); + virtual void instanceInit(int sample_rate) { + instanceConstants(sample_rate); instanceResetUserInterface(); instanceClear(); } @@ -597,15 +635,13 @@ class osc_pulse : public dsp { } virtual int getSampleRate() { - return fSamplingFreq; - + return fSampleRate; } virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("osc_pulse"); ui_interface->addHorizontalSlider("duty", &fHslider0, 0.5f, 0.0f, 1.0f, 0.00100000005f); ui_interface->closeBox(); - } virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { @@ -628,16 +664,14 @@ class osc_pulse : public dsp { float fTemp6 = std::max(0.0f, std::min(2047.0f, (fConst0 * (fRec1[0] / fTemp1)))); int iTemp7 = int(fTemp6); float fTemp8 = std::floor(fTemp6); - output0[i] = FAUSTFLOAT(((fTemp0 == 0.0f)?0.0f:(fConst1 * ((fTemp5 - (fVec3[((IOTA - iTemp7) & 4095)] * (fTemp8 + (1.0f - fTemp6)))) - ((fTemp6 - fTemp8) * fVec3[((IOTA - (iTemp7 + 1)) & 4095)]))))); + output0[i] = FAUSTFLOAT(((fTemp0 == 0.0f) ? 0.0f : (fConst1 * ((fTemp5 - (fVec3[((IOTA - iTemp7) & 4095)] * (fTemp8 + (1.0f - fTemp6)))) - ((fTemp6 - fTemp8) * fVec3[((IOTA - (iTemp7 + 1)) & 4095)]))))); iVec0[1] = iVec0[0]; fVec1[1] = fVec1[0]; fRec0[1] = fRec0[0]; fVec2[1] = fVec2[0]; IOTA = (IOTA + 1); fRec1[1] = fRec1[0]; - } - } }; diff --git a/ceammc/ext/src/osc/osc_saw.h b/ceammc/ext/src/osc/osc_saw.h index 9e79bc53af..dee7a211df 100644 --- a/ceammc/ext/src/osc/osc_saw.h +++ b/ceammc/ext/src/osc/osc_saw.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "osc_saw" -Code generated with Faust 2.15.10 (https://faust.grame.fr) -Compilation options: cpp, -scal -ftz 0 +Code generated with Faust 2.22.1 (https://faust.grame.fr) +Compilation options: -lang cpp -scal -ftz 0 ------------------------------------------------------------ */ #ifndef __osc_saw_H__ @@ -14,6 +14,7 @@ Compilation options: cpp, -scal -ftz 0 #include #include +/************************** BEGIN dsp.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -96,23 +97,23 @@ class dsp { * - static class 'classInit': static tables initialization * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void init(int samplingRate) = 0; + virtual void init(int sample_rate) = 0; /** * Init instance state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceInit(int samplingRate) = 0; + virtual void instanceInit(int sample_rate) = 0; /** * Init instance constant state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceConstants(int samplingRate) = 0; + virtual void instanceConstants(int sample_rate) = 0; /* Init default control parameters values */ virtual void instanceResetUserInterface() = 0; @@ -149,8 +150,8 @@ class dsp { * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the number of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) * */ virtual void compute(double /*date_usec*/, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -169,16 +170,16 @@ class decorator_dsp : public dsp { public: - decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + decorator_dsp(dsp* dsp = nullptr):fDSP(dsp) {} virtual ~decorator_dsp() { delete fDSP; } virtual int getNumInputs() { return fDSP->getNumInputs(); } virtual int getNumOutputs() { return fDSP->getNumOutputs(); } virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } virtual int getSampleRate() { return fDSP->getSampleRate(); } - virtual void init(int samplingRate) { fDSP->init(samplingRate); } - virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } - virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void init(int sample_rate) { fDSP->init(sample_rate); } + virtual void instanceInit(int sample_rate) { fDSP->instanceInit(sample_rate); } + virtual void instanceConstants(int sample_rate) { fDSP->instanceConstants(sample_rate); } virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } @@ -233,6 +234,8 @@ class dsp_factory { #endif #endif +/************************** END dsp.h **************************/ +/************************** BEGIN UI.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -272,45 +275,54 @@ class dsp_factory { struct Soundfile; -class UI +template +class UIReal { - + public: - - UI() {} - - virtual ~UI() {} - + + UIReal() {} + virtual ~UIReal() {} + // -- widget's layouts - + virtual void openTabBox(const char* label) = 0; virtual void openHorizontalBox(const char* label) = 0; virtual void openVerticalBox(const char* label) = 0; virtual void closeBox() = 0; - + // -- active widgets - - virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - + + virtual void addButton(const char* label, REAL* zone) = 0; + virtual void addCheckButton(const char* label, REAL* zone) = 0; + virtual void addVerticalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addHorizontalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addNumEntry(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + // -- passive widgets - - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - + + virtual void addHorizontalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + virtual void addVerticalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + // -- soundfiles - + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; - + // -- metadata declarations + + virtual void declare(REAL* zone, const char* key, const char* val) {} +}; - virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +struct UI : public UIReal +{ + + UI() {} + virtual ~UI() {} }; #endif +/************************** END UI.h **************************/ +/************************** BEGIN meta.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -339,11 +351,14 @@ class UI struct Meta { - virtual void declare(const char* key, const char* value) = 0; virtual ~Meta() {}; + virtual void declare(const char* key, const char* value) = 0; + }; #endif +/************************** END meta.h **************************/ +/************************** BEGIN misc.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -366,7 +381,7 @@ struct Meta that work under terms of your choice, so long as this FAUST architecture section is not modified. ************************************************************************/ - + #ifndef __misc__ #define __misc__ @@ -374,6 +389,8 @@ struct Meta #include #include #include +#include +#include using std::max; @@ -395,27 +412,65 @@ static int int2pow2(int x) { int r = 0; while ((1<declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.0"); - m->declare("filename", "osc_saw"); + m->declare("basics.lib/version", "0.1"); + m->declare("filename", "osc_saw.dsp"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); @@ -482,15 +538,13 @@ class osc_saw : public dsp { virtual int getNumInputs() { return 1; - } virtual int getNumOutputs() { return 1; - } virtual int getInputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -499,14 +553,12 @@ class osc_saw : public dsp { rate = -1; break; } - } return rate; - } virtual int getOutputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -515,42 +567,34 @@ class osc_saw : public dsp { rate = -1; break; } - } return rate; - } - static void classInit(int samplingFreq) { - + static void classInit(int sample_rate) { } - virtual void instanceConstants(int samplingFreq) { - fSamplingFreq = samplingFreq; - fConst0 = std::min(192000.0f, std::max(1.0f, float(fSamplingFreq))); + virtual void instanceConstants(int sample_rate) { + fSampleRate = sample_rate; + fConst0 = std::min(192000.0f, std::max(1.0f, float(fSampleRate))); fConst1 = (1.0f / fConst0); - } virtual void instanceResetUserInterface() { - } virtual void instanceClear() { for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { fRec0[l0] = 0.0f; - } - } - virtual void init(int samplingFreq) { - classInit(samplingFreq); - instanceInit(samplingFreq); + virtual void init(int sample_rate) { + classInit(sample_rate); + instanceInit(sample_rate); } - - virtual void instanceInit(int samplingFreq) { - instanceConstants(samplingFreq); + virtual void instanceInit(int sample_rate) { + instanceConstants(sample_rate); instanceResetUserInterface(); instanceClear(); } @@ -560,14 +604,12 @@ class osc_saw : public dsp { } virtual int getSampleRate() { - return fSamplingFreq; - + return fSampleRate; } virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("osc_saw"); ui_interface->closeBox(); - } virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { @@ -579,13 +621,11 @@ class osc_saw : public dsp { float fTemp2 = (fRec0[1] + (fConst1 * fTemp1)); float fTemp3 = (fTemp2 + -1.0f); int iTemp4 = (fTemp3 < 0.0f); - fRec0[0] = (iTemp4?fTemp2:fTemp3); - float fRec1 = (iTemp4?fTemp2:(fTemp2 + ((1.0f - (fConst0 / fTemp1)) * fTemp3))); - output0[i] = FAUSTFLOAT(((fTemp0 == 0.0f)?0.0f:((2.0f * fRec1) + -1.0f))); + fRec0[0] = (iTemp4 ? fTemp2 : fTemp3); + float fRec1 = (iTemp4 ? fTemp2 : (fTemp2 + ((1.0f - (fConst0 / fTemp1)) * fTemp3))); + output0[i] = FAUSTFLOAT(((fTemp0 == 0.0f) ? 0.0f : ((2.0f * fRec1) + -1.0f))); fRec0[1] = fRec0[0]; - } - } }; diff --git a/ceammc/ext/src/osc/osc_saw4.h b/ceammc/ext/src/osc/osc_saw4.h index ffd08c18ae..266302cc56 100644 --- a/ceammc/ext/src/osc/osc_saw4.h +++ b/ceammc/ext/src/osc/osc_saw4.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "osc_saw4" -Code generated with Faust 2.15.10 (https://faust.grame.fr) -Compilation options: cpp, -scal -ftz 0 +Code generated with Faust 2.22.1 (https://faust.grame.fr) +Compilation options: -lang cpp -scal -ftz 0 ------------------------------------------------------------ */ #ifndef __osc_saw4_H__ @@ -14,6 +14,7 @@ Compilation options: cpp, -scal -ftz 0 #include #include +/************************** BEGIN dsp.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -96,23 +97,23 @@ class dsp { * - static class 'classInit': static tables initialization * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void init(int samplingRate) = 0; + virtual void init(int sample_rate) = 0; /** * Init instance state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceInit(int samplingRate) = 0; + virtual void instanceInit(int sample_rate) = 0; /** * Init instance constant state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceConstants(int samplingRate) = 0; + virtual void instanceConstants(int sample_rate) = 0; /* Init default control parameters values */ virtual void instanceResetUserInterface() = 0; @@ -149,8 +150,8 @@ class dsp { * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the number of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) * */ virtual void compute(double /*date_usec*/, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -169,16 +170,16 @@ class decorator_dsp : public dsp { public: - decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + decorator_dsp(dsp* dsp = nullptr):fDSP(dsp) {} virtual ~decorator_dsp() { delete fDSP; } virtual int getNumInputs() { return fDSP->getNumInputs(); } virtual int getNumOutputs() { return fDSP->getNumOutputs(); } virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } virtual int getSampleRate() { return fDSP->getSampleRate(); } - virtual void init(int samplingRate) { fDSP->init(samplingRate); } - virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } - virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void init(int sample_rate) { fDSP->init(sample_rate); } + virtual void instanceInit(int sample_rate) { fDSP->instanceInit(sample_rate); } + virtual void instanceConstants(int sample_rate) { fDSP->instanceConstants(sample_rate); } virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } @@ -233,6 +234,8 @@ class dsp_factory { #endif #endif +/************************** END dsp.h **************************/ +/************************** BEGIN UI.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -272,45 +275,54 @@ class dsp_factory { struct Soundfile; -class UI +template +class UIReal { - + public: - - UI() {} - - virtual ~UI() {} - + + UIReal() {} + virtual ~UIReal() {} + // -- widget's layouts - + virtual void openTabBox(const char* label) = 0; virtual void openHorizontalBox(const char* label) = 0; virtual void openVerticalBox(const char* label) = 0; virtual void closeBox() = 0; - + // -- active widgets - - virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - + + virtual void addButton(const char* label, REAL* zone) = 0; + virtual void addCheckButton(const char* label, REAL* zone) = 0; + virtual void addVerticalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addHorizontalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addNumEntry(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + // -- passive widgets - - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - + + virtual void addHorizontalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + virtual void addVerticalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + // -- soundfiles - + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; - + // -- metadata declarations + + virtual void declare(REAL* zone, const char* key, const char* val) {} +}; - virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +struct UI : public UIReal +{ + + UI() {} + virtual ~UI() {} }; #endif +/************************** END UI.h **************************/ +/************************** BEGIN meta.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -339,11 +351,14 @@ class UI struct Meta { - virtual void declare(const char* key, const char* value) = 0; virtual ~Meta() {}; + virtual void declare(const char* key, const char* value) = 0; + }; #endif +/************************** END meta.h **************************/ +/************************** BEGIN misc.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -366,7 +381,7 @@ struct Meta that work under terms of your choice, so long as this FAUST architecture section is not modified. ************************************************************************/ - + #ifndef __misc__ #define __misc__ @@ -374,6 +389,8 @@ struct Meta #include #include #include +#include +#include using std::max; @@ -395,27 +412,65 @@ static int int2pow2(int x) { int r = 0; while ((1<declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.0"); - m->declare("filename", "osc_saw4"); + m->declare("basics.lib/version", "0.1"); + m->declare("filename", "osc_saw4.dsp"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); @@ -502,15 +556,13 @@ class osc_saw4 : public dsp { virtual int getNumInputs() { return 1; - } virtual int getNumOutputs() { return 1; - } virtual int getInputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -519,14 +571,12 @@ class osc_saw4 : public dsp { rate = -1; break; } - } return rate; - } virtual int getOutputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -535,73 +585,58 @@ class osc_saw4 : public dsp { rate = -1; break; } - } return rate; - } - static void classInit(int samplingFreq) { - + static void classInit(int sample_rate) { } - virtual void instanceConstants(int samplingFreq) { - fSamplingFreq = samplingFreq; - fConst0 = std::min(192000.0f, std::max(1.0f, float(fSamplingFreq))); + virtual void instanceConstants(int sample_rate) { + fSampleRate = sample_rate; + fConst0 = std::min(192000.0f, std::max(1.0f, float(fSampleRate))); fConst1 = (0.00520833349f * osc_saw4_faustpower3_f(fConst0)); fConst2 = (1.0f / fConst0); - } virtual void instanceResetUserInterface() { fHslider0 = FAUSTFLOAT(0.0f); - } virtual void instanceClear() { for (int l0 = 0; (l0 < 4); l0 = (l0 + 1)) { iVec0[l0] = 0; - } for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { fVec1[l1] = 0.0f; - } for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { fRec0[l2] = 0.0f; - } for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { fVec2[l3] = 0.0f; - } for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { fVec3[l4] = 0.0f; - } for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { fVec4[l5] = 0.0f; - } IOTA = 0; for (int l6 = 0; (l6 < 8192); l6 = (l6 + 1)) { fVec5[l6] = 0.0f; - } for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) { fRec1[l7] = 0.0f; - } - } - virtual void init(int samplingFreq) { - classInit(samplingFreq); - instanceInit(samplingFreq); + virtual void init(int sample_rate) { + classInit(sample_rate); + instanceInit(sample_rate); } - - virtual void instanceInit(int samplingFreq) { - instanceConstants(samplingFreq); + virtual void instanceInit(int sample_rate) { + instanceConstants(sample_rate); instanceResetUserInterface(); instanceClear(); } @@ -611,15 +646,13 @@ class osc_saw4 : public dsp { } virtual int getSampleRate() { - return fSamplingFreq; - + return fSampleRate; } virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("osc_saw4"); ui_interface->addHorizontalSlider("phase", &fHslider0, 0.0f, 0.0f, 1.0f, 0.00100000005f); ui_interface->closeBox(); - } virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { @@ -642,10 +675,9 @@ class osc_saw4 : public dsp { fVec4[0] = fTemp6; fVec5[(IOTA & 8191)] = ((float(iVec0[3]) * (fTemp6 - fVec4[1])) / fTemp1); fRec1[0] = (fSlow0 + (0.999000013f * fRec1[1])); - output0[i] = FAUSTFLOAT(((fTemp0 == 0.0f)?0.0f:(fConst1 * fVec5[((IOTA - std::max(0, std::min(8191, int((fConst0 * (fRec1[0] / fTemp0)))))) & 8191)]))); + output0[i] = FAUSTFLOAT(((fTemp0 == 0.0f) ? 0.0f : (fConst1 * fVec5[((IOTA - std::max(0, std::min(8191, int((fConst0 * (fRec1[0] / fTemp0)))))) & 8191)]))); for (int j0 = 3; (j0 > 0); j0 = (j0 - 1)) { iVec0[j0] = iVec0[(j0 - 1)]; - } fVec1[1] = fVec1[0]; fRec0[1] = fRec0[0]; @@ -654,9 +686,7 @@ class osc_saw4 : public dsp { fVec4[1] = fVec4[0]; IOTA = (IOTA + 1); fRec1[1] = fRec1[0]; - } - } }; diff --git a/ceammc/ext/src/osc/osc_sin.h b/ceammc/ext/src/osc/osc_sin.h index 56785211c7..08fe14741c 100644 --- a/ceammc/ext/src/osc/osc_sin.h +++ b/ceammc/ext/src/osc/osc_sin.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "osc_sin" -Code generated with Faust 2.15.10 (https://faust.grame.fr) -Compilation options: cpp, -scal -ftz 0 +Code generated with Faust 2.22.1 (https://faust.grame.fr) +Compilation options: -lang cpp -scal -ftz 0 ------------------------------------------------------------ */ #ifndef __osc_sin_H__ @@ -14,6 +14,7 @@ Compilation options: cpp, -scal -ftz 0 #include #include +/************************** BEGIN dsp.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -96,23 +97,23 @@ class dsp { * - static class 'classInit': static tables initialization * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void init(int samplingRate) = 0; + virtual void init(int sample_rate) = 0; /** * Init instance state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceInit(int samplingRate) = 0; + virtual void instanceInit(int sample_rate) = 0; /** * Init instance constant state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceConstants(int samplingRate) = 0; + virtual void instanceConstants(int sample_rate) = 0; /* Init default control parameters values */ virtual void instanceResetUserInterface() = 0; @@ -149,8 +150,8 @@ class dsp { * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the number of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) * */ virtual void compute(double /*date_usec*/, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -169,16 +170,16 @@ class decorator_dsp : public dsp { public: - decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + decorator_dsp(dsp* dsp = nullptr):fDSP(dsp) {} virtual ~decorator_dsp() { delete fDSP; } virtual int getNumInputs() { return fDSP->getNumInputs(); } virtual int getNumOutputs() { return fDSP->getNumOutputs(); } virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } virtual int getSampleRate() { return fDSP->getSampleRate(); } - virtual void init(int samplingRate) { fDSP->init(samplingRate); } - virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } - virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void init(int sample_rate) { fDSP->init(sample_rate); } + virtual void instanceInit(int sample_rate) { fDSP->instanceInit(sample_rate); } + virtual void instanceConstants(int sample_rate) { fDSP->instanceConstants(sample_rate); } virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } @@ -233,6 +234,8 @@ class dsp_factory { #endif #endif +/************************** END dsp.h **************************/ +/************************** BEGIN UI.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -272,45 +275,54 @@ class dsp_factory { struct Soundfile; -class UI +template +class UIReal { - + public: - - UI() {} - - virtual ~UI() {} - + + UIReal() {} + virtual ~UIReal() {} + // -- widget's layouts - + virtual void openTabBox(const char* label) = 0; virtual void openHorizontalBox(const char* label) = 0; virtual void openVerticalBox(const char* label) = 0; virtual void closeBox() = 0; - + // -- active widgets - - virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - + + virtual void addButton(const char* label, REAL* zone) = 0; + virtual void addCheckButton(const char* label, REAL* zone) = 0; + virtual void addVerticalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addHorizontalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addNumEntry(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + // -- passive widgets - - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - + + virtual void addHorizontalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + virtual void addVerticalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + // -- soundfiles - + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; - + // -- metadata declarations + + virtual void declare(REAL* zone, const char* key, const char* val) {} +}; - virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +struct UI : public UIReal +{ + + UI() {} + virtual ~UI() {} }; #endif +/************************** END UI.h **************************/ +/************************** BEGIN meta.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -339,11 +351,14 @@ class UI struct Meta { - virtual void declare(const char* key, const char* value) = 0; virtual ~Meta() {}; + virtual void declare(const char* key, const char* value) = 0; + }; #endif +/************************** END meta.h **************************/ +/************************** BEGIN misc.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -366,7 +381,7 @@ struct Meta that work under terms of your choice, so long as this FAUST architecture section is not modified. ************************************************************************/ - + #ifndef __misc__ #define __misc__ @@ -374,6 +389,8 @@ struct Meta #include #include #include +#include +#include using std::max; @@ -395,27 +412,65 @@ static int int2pow2(int x) { int r = 0; while ((1< #include - class osc_sinSIG0 { private: @@ -457,27 +511,23 @@ class osc_sinSIG0 { int getNumInputsosc_sinSIG0() { return 0; - } int getNumOutputsosc_sinSIG0() { return 1; - } int getInputRateosc_sinSIG0(int channel) { int rate; - switch (channel) { + switch ((channel)) { default: { rate = -1; break; } - } return rate; - } int getOutputRateosc_sinSIG0(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 0; break; @@ -486,40 +536,35 @@ class osc_sinSIG0 { rate = -1; break; } - } return rate; - } - void instanceInitosc_sinSIG0(int samplingFreq) { + void instanceInitosc_sinSIG0(int sample_rate) { for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { iRec0[l0] = 0; - } - } - void fillosc_sinSIG0(int count, float* output) { + void fillosc_sinSIG0(int count, float* table) { for (int i = 0; (i < count); i = (i + 1)) { iRec0[0] = (iRec0[1] + 1); - output[i] = std::sin((9.58738019e-05f * float((iRec0[0] + -1)))); + table[i] = std::sin((9.58738019e-05f * float((iRec0[0] + -1)))); iRec0[1] = iRec0[0]; - } - } }; -osc_sinSIG0* newosc_sinSIG0() { return (osc_sinSIG0*)new osc_sinSIG0(); } -void deleteosc_sinSIG0(osc_sinSIG0* dsp) { delete dsp; } +static osc_sinSIG0* newosc_sinSIG0() { return (osc_sinSIG0*)new osc_sinSIG0(); } +static void deleteosc_sinSIG0(osc_sinSIG0* dsp) { delete dsp; } static float ftbl0osc_sinSIG0[65536]; #ifndef FAUSTCLASS #define FAUSTCLASS osc_sin #endif + #ifdef __APPLE__ #define exp10f __exp10f #define exp10 __exp10 @@ -529,7 +574,7 @@ class osc_sin : public dsp { private: - int fSamplingFreq; + int fSampleRate; float fConst0; float fRec1[2]; @@ -537,8 +582,8 @@ class osc_sin : public dsp { void metadata(Meta* m) { m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.0"); - m->declare("filename", "osc_sin"); + m->declare("basics.lib/version", "0.1"); + m->declare("filename", "osc_sin.dsp"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); @@ -551,15 +596,13 @@ class osc_sin : public dsp { virtual int getNumInputs() { return 1; - } virtual int getNumOutputs() { return 1; - } virtual int getInputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -568,14 +611,12 @@ class osc_sin : public dsp { rate = -1; break; } - } return rate; - } virtual int getOutputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -584,45 +625,37 @@ class osc_sin : public dsp { rate = -1; break; } - } return rate; - } - static void classInit(int samplingFreq) { + static void classInit(int sample_rate) { osc_sinSIG0* sig0 = newosc_sinSIG0(); - sig0->instanceInitosc_sinSIG0(samplingFreq); + sig0->instanceInitosc_sinSIG0(sample_rate); sig0->fillosc_sinSIG0(65536, ftbl0osc_sinSIG0); deleteosc_sinSIG0(sig0); - } - virtual void instanceConstants(int samplingFreq) { - fSamplingFreq = samplingFreq; - fConst0 = (1.0f / std::min(192000.0f, std::max(1.0f, float(fSamplingFreq)))); - + virtual void instanceConstants(int sample_rate) { + fSampleRate = sample_rate; + fConst0 = (1.0f / std::min(192000.0f, std::max(1.0f, float(fSampleRate)))); } virtual void instanceResetUserInterface() { - } virtual void instanceClear() { for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { fRec1[l1] = 0.0f; - } - } - virtual void init(int samplingFreq) { - classInit(samplingFreq); - instanceInit(samplingFreq); + virtual void init(int sample_rate) { + classInit(sample_rate); + instanceInit(sample_rate); } - - virtual void instanceInit(int samplingFreq) { - instanceConstants(samplingFreq); + virtual void instanceInit(int sample_rate) { + instanceConstants(sample_rate); instanceResetUserInterface(); instanceClear(); } @@ -632,14 +665,12 @@ class osc_sin : public dsp { } virtual int getSampleRate() { - return fSamplingFreq; - + return fSampleRate; } virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("osc_sin"); ui_interface->closeBox(); - } virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { @@ -650,9 +681,7 @@ class osc_sin : public dsp { fRec1[0] = (fTemp0 - std::floor(fTemp0)); output0[i] = FAUSTFLOAT(ftbl0osc_sinSIG0[int((65536.0f * fRec1[0]))]); fRec1[1] = fRec1[0]; - } - } }; diff --git a/ceammc/ext/src/osc/osc_sinfb.h b/ceammc/ext/src/osc/osc_sinfb.h index db3ee3eacc..2aa402504b 100644 --- a/ceammc/ext/src/osc/osc_sinfb.h +++ b/ceammc/ext/src/osc/osc_sinfb.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "osc_sinfb" -Code generated with Faust 2.15.10 (https://faust.grame.fr) -Compilation options: cpp, -scal -ftz 0 +Code generated with Faust 2.22.1 (https://faust.grame.fr) +Compilation options: -lang cpp -scal -ftz 0 ------------------------------------------------------------ */ #ifndef __osc_sinfb_H__ @@ -14,6 +14,7 @@ Compilation options: cpp, -scal -ftz 0 #include #include +/************************** BEGIN dsp.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -96,23 +97,23 @@ class dsp { * - static class 'classInit': static tables initialization * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void init(int samplingRate) = 0; + virtual void init(int sample_rate) = 0; /** * Init instance state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceInit(int samplingRate) = 0; + virtual void instanceInit(int sample_rate) = 0; /** * Init instance constant state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceConstants(int samplingRate) = 0; + virtual void instanceConstants(int sample_rate) = 0; /* Init default control parameters values */ virtual void instanceResetUserInterface() = 0; @@ -149,8 +150,8 @@ class dsp { * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the number of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) * */ virtual void compute(double /*date_usec*/, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -169,16 +170,16 @@ class decorator_dsp : public dsp { public: - decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + decorator_dsp(dsp* dsp = nullptr):fDSP(dsp) {} virtual ~decorator_dsp() { delete fDSP; } virtual int getNumInputs() { return fDSP->getNumInputs(); } virtual int getNumOutputs() { return fDSP->getNumOutputs(); } virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } virtual int getSampleRate() { return fDSP->getSampleRate(); } - virtual void init(int samplingRate) { fDSP->init(samplingRate); } - virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } - virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void init(int sample_rate) { fDSP->init(sample_rate); } + virtual void instanceInit(int sample_rate) { fDSP->instanceInit(sample_rate); } + virtual void instanceConstants(int sample_rate) { fDSP->instanceConstants(sample_rate); } virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } @@ -233,6 +234,8 @@ class dsp_factory { #endif #endif +/************************** END dsp.h **************************/ +/************************** BEGIN UI.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -272,45 +275,54 @@ class dsp_factory { struct Soundfile; -class UI +template +class UIReal { - + public: - - UI() {} - - virtual ~UI() {} - + + UIReal() {} + virtual ~UIReal() {} + // -- widget's layouts - + virtual void openTabBox(const char* label) = 0; virtual void openHorizontalBox(const char* label) = 0; virtual void openVerticalBox(const char* label) = 0; virtual void closeBox() = 0; - + // -- active widgets - - virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - + + virtual void addButton(const char* label, REAL* zone) = 0; + virtual void addCheckButton(const char* label, REAL* zone) = 0; + virtual void addVerticalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addHorizontalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addNumEntry(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + // -- passive widgets - - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - + + virtual void addHorizontalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + virtual void addVerticalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + // -- soundfiles - + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; - + // -- metadata declarations + + virtual void declare(REAL* zone, const char* key, const char* val) {} +}; - virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +struct UI : public UIReal +{ + + UI() {} + virtual ~UI() {} }; #endif +/************************** END UI.h **************************/ +/************************** BEGIN meta.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -339,11 +351,14 @@ class UI struct Meta { - virtual void declare(const char* key, const char* value) = 0; virtual ~Meta() {}; + virtual void declare(const char* key, const char* value) = 0; + }; #endif +/************************** END meta.h **************************/ +/************************** BEGIN misc.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -366,7 +381,7 @@ struct Meta that work under terms of your choice, so long as this FAUST architecture section is not modified. ************************************************************************/ - + #ifndef __misc__ #define __misc__ @@ -374,6 +389,8 @@ struct Meta #include #include #include +#include +#include using std::max; @@ -395,27 +412,65 @@ static int int2pow2(int x) { int r = 0; while ((1< #include - class osc_sinfbSIG0 { private: @@ -457,27 +511,23 @@ class osc_sinfbSIG0 { int getNumInputsosc_sinfbSIG0() { return 0; - } int getNumOutputsosc_sinfbSIG0() { return 1; - } int getInputRateosc_sinfbSIG0(int channel) { int rate; - switch (channel) { + switch ((channel)) { default: { rate = -1; break; } - } return rate; - } int getOutputRateosc_sinfbSIG0(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 0; break; @@ -486,35 +536,28 @@ class osc_sinfbSIG0 { rate = -1; break; } - } return rate; - } - void instanceInitosc_sinfbSIG0(int samplingFreq) { + void instanceInitosc_sinfbSIG0(int sample_rate) { for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { iRec1[l0] = 0; - } - } - void fillosc_sinfbSIG0(int count, float* output) { + void fillosc_sinfbSIG0(int count, float* table) { for (int i = 0; (i < count); i = (i + 1)) { iRec1[0] = (iRec1[1] + 1); - output[i] = std::sin((9.58738019e-05f * float((iRec1[0] + -1)))); + table[i] = std::sin((9.58738019e-05f * float((iRec1[0] + -1)))); iRec1[1] = iRec1[0]; - } - } }; -osc_sinfbSIG0* newosc_sinfbSIG0() { return (osc_sinfbSIG0*)new osc_sinfbSIG0(); } -void deleteosc_sinfbSIG0(osc_sinfbSIG0* dsp) { delete dsp; } - +static osc_sinfbSIG0* newosc_sinfbSIG0() { return (osc_sinfbSIG0*)new osc_sinfbSIG0(); } +static void deleteosc_sinfbSIG0(osc_sinfbSIG0* dsp) { delete dsp; } class osc_sinfbSIG1 { @@ -526,27 +569,23 @@ class osc_sinfbSIG1 { int getNumInputsosc_sinfbSIG1() { return 0; - } int getNumOutputsosc_sinfbSIG1() { return 1; - } int getInputRateosc_sinfbSIG1(int channel) { int rate; - switch (channel) { + switch ((channel)) { default: { rate = -1; break; } - } return rate; - } int getOutputRateosc_sinfbSIG1(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 0; break; @@ -555,34 +594,28 @@ class osc_sinfbSIG1 { rate = -1; break; } - } return rate; - } - void instanceInitosc_sinfbSIG1(int samplingFreq) { + void instanceInitosc_sinfbSIG1(int sample_rate) { for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { iRec4[l3] = 0; - } - } - void fillosc_sinfbSIG1(int count, float* output) { + void fillosc_sinfbSIG1(int count, float* table) { for (int i = 0; (i < count); i = (i + 1)) { iRec4[0] = (iRec4[1] + 1); - output[i] = std::cos((9.58738019e-05f * float((iRec4[0] + -1)))); + table[i] = std::cos((9.58738019e-05f * float((iRec4[0] + -1)))); iRec4[1] = iRec4[0]; - } - } }; -osc_sinfbSIG1* newosc_sinfbSIG1() { return (osc_sinfbSIG1*)new osc_sinfbSIG1(); } -void deleteosc_sinfbSIG1(osc_sinfbSIG1* dsp) { delete dsp; } +static osc_sinfbSIG1* newosc_sinfbSIG1() { return (osc_sinfbSIG1*)new osc_sinfbSIG1(); } +static void deleteosc_sinfbSIG1(osc_sinfbSIG1* dsp) { delete dsp; } static float ftbl0osc_sinfbSIG0[65536]; static float ftbl1osc_sinfbSIG1[65536]; @@ -590,6 +623,7 @@ static float ftbl1osc_sinfbSIG1[65536]; #ifndef FAUSTCLASS #define FAUSTCLASS osc_sinfb #endif + #ifdef __APPLE__ #define exp10f __exp10f #define exp10 __exp10 @@ -599,7 +633,7 @@ class osc_sinfb : public dsp { private: - int fSamplingFreq; + int fSampleRate; float fConst0; float fRec2[2]; FAUSTFLOAT fHslider0; @@ -610,8 +644,8 @@ class osc_sinfb : public dsp { void metadata(Meta* m) { m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.0"); - m->declare("filename", "osc_sinfb"); + m->declare("basics.lib/version", "0.1"); + m->declare("filename", "osc_sinfb.dsp"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); @@ -626,15 +660,13 @@ class osc_sinfb : public dsp { virtual int getNumInputs() { return 1; - } virtual int getNumOutputs() { return 1; - } virtual int getInputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -643,14 +675,12 @@ class osc_sinfb : public dsp { rate = -1; break; } - } return rate; - } virtual int getOutputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -659,58 +689,48 @@ class osc_sinfb : public dsp { rate = -1; break; } - } return rate; - } - static void classInit(int samplingFreq) { + static void classInit(int sample_rate) { osc_sinfbSIG0* sig0 = newosc_sinfbSIG0(); - sig0->instanceInitosc_sinfbSIG0(samplingFreq); + sig0->instanceInitosc_sinfbSIG0(sample_rate); sig0->fillosc_sinfbSIG0(65536, ftbl0osc_sinfbSIG0); osc_sinfbSIG1* sig1 = newosc_sinfbSIG1(); - sig1->instanceInitosc_sinfbSIG1(samplingFreq); + sig1->instanceInitosc_sinfbSIG1(sample_rate); sig1->fillosc_sinfbSIG1(65536, ftbl1osc_sinfbSIG1); deleteosc_sinfbSIG0(sig0); deleteosc_sinfbSIG1(sig1); - } - virtual void instanceConstants(int samplingFreq) { - fSamplingFreq = samplingFreq; - fConst0 = (1.0f / std::min(192000.0f, std::max(1.0f, float(fSamplingFreq)))); - + virtual void instanceConstants(int sample_rate) { + fSampleRate = sample_rate; + fConst0 = (1.0f / std::min(192000.0f, std::max(1.0f, float(fSampleRate)))); } virtual void instanceResetUserInterface() { fHslider0 = FAUSTFLOAT(0.0f); - } virtual void instanceClear() { for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { fRec2[l1] = 0.0f; - } for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { fRec3[l2] = 0.0f; - } for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { fRec0[l4] = 0.0f; - } - } - virtual void init(int samplingFreq) { - classInit(samplingFreq); - instanceInit(samplingFreq); + virtual void init(int sample_rate) { + classInit(sample_rate); + instanceInit(sample_rate); } - - virtual void instanceInit(int samplingFreq) { - instanceConstants(samplingFreq); + virtual void instanceInit(int sample_rate) { + instanceConstants(sample_rate); instanceResetUserInterface(); instanceClear(); } @@ -720,15 +740,13 @@ class osc_sinfb : public dsp { } virtual int getSampleRate() { - return fSamplingFreq; - + return fSampleRate; } virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("osc_sinfb"); ui_interface->addHorizontalSlider("feedback", &fHslider0, 0.0f, 0.0f, 6.28318548f, 0.100000001f); ui_interface->closeBox(); - } virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { @@ -746,9 +764,7 @@ class osc_sinfb : public dsp { fRec2[1] = fRec2[0]; fRec3[1] = fRec3[0]; fRec0[1] = fRec0[0]; - } - } }; diff --git a/ceammc/ext/src/osc/osc_square.h b/ceammc/ext/src/osc/osc_square.h index 940016ca44..8c2ba46ba3 100644 --- a/ceammc/ext/src/osc/osc_square.h +++ b/ceammc/ext/src/osc/osc_square.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "osc_square" -Code generated with Faust 2.15.10 (https://faust.grame.fr) -Compilation options: cpp, -scal -ftz 0 +Code generated with Faust 2.22.1 (https://faust.grame.fr) +Compilation options: -lang cpp -scal -ftz 0 ------------------------------------------------------------ */ #ifndef __osc_square_H__ @@ -14,6 +14,7 @@ Compilation options: cpp, -scal -ftz 0 #include #include +/************************** BEGIN dsp.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -96,23 +97,23 @@ class dsp { * - static class 'classInit': static tables initialization * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void init(int samplingRate) = 0; + virtual void init(int sample_rate) = 0; /** * Init instance state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceInit(int samplingRate) = 0; + virtual void instanceInit(int sample_rate) = 0; /** * Init instance constant state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceConstants(int samplingRate) = 0; + virtual void instanceConstants(int sample_rate) = 0; /* Init default control parameters values */ virtual void instanceResetUserInterface() = 0; @@ -149,8 +150,8 @@ class dsp { * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the number of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) * */ virtual void compute(double /*date_usec*/, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -169,16 +170,16 @@ class decorator_dsp : public dsp { public: - decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + decorator_dsp(dsp* dsp = nullptr):fDSP(dsp) {} virtual ~decorator_dsp() { delete fDSP; } virtual int getNumInputs() { return fDSP->getNumInputs(); } virtual int getNumOutputs() { return fDSP->getNumOutputs(); } virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } virtual int getSampleRate() { return fDSP->getSampleRate(); } - virtual void init(int samplingRate) { fDSP->init(samplingRate); } - virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } - virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void init(int sample_rate) { fDSP->init(sample_rate); } + virtual void instanceInit(int sample_rate) { fDSP->instanceInit(sample_rate); } + virtual void instanceConstants(int sample_rate) { fDSP->instanceConstants(sample_rate); } virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } @@ -233,6 +234,8 @@ class dsp_factory { #endif #endif +/************************** END dsp.h **************************/ +/************************** BEGIN UI.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -272,45 +275,54 @@ class dsp_factory { struct Soundfile; -class UI +template +class UIReal { - + public: - - UI() {} - - virtual ~UI() {} - + + UIReal() {} + virtual ~UIReal() {} + // -- widget's layouts - + virtual void openTabBox(const char* label) = 0; virtual void openHorizontalBox(const char* label) = 0; virtual void openVerticalBox(const char* label) = 0; virtual void closeBox() = 0; - + // -- active widgets - - virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - + + virtual void addButton(const char* label, REAL* zone) = 0; + virtual void addCheckButton(const char* label, REAL* zone) = 0; + virtual void addVerticalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addHorizontalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addNumEntry(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + // -- passive widgets - - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - + + virtual void addHorizontalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + virtual void addVerticalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + // -- soundfiles - + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; - + // -- metadata declarations + + virtual void declare(REAL* zone, const char* key, const char* val) {} +}; - virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +struct UI : public UIReal +{ + + UI() {} + virtual ~UI() {} }; #endif +/************************** END UI.h **************************/ +/************************** BEGIN meta.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -339,11 +351,14 @@ class UI struct Meta { - virtual void declare(const char* key, const char* value) = 0; virtual ~Meta() {}; + virtual void declare(const char* key, const char* value) = 0; + }; #endif +/************************** END meta.h **************************/ +/************************** BEGIN misc.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -366,7 +381,7 @@ struct Meta that work under terms of your choice, so long as this FAUST architecture section is not modified. ************************************************************************/ - + #ifndef __misc__ #define __misc__ @@ -374,6 +389,8 @@ struct Meta #include #include #include +#include +#include using std::max; @@ -395,27 +412,65 @@ static int int2pow2(int x) { int r = 0; while ((1<declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.0"); - m->declare("filename", "osc_square"); + m->declare("basics.lib/version", "0.1"); + m->declare("filename", "osc_square.dsp"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); @@ -493,15 +548,13 @@ class osc_square : public dsp { virtual int getNumInputs() { return 1; - } virtual int getNumOutputs() { return 1; - } virtual int getInputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -510,14 +563,12 @@ class osc_square : public dsp { rate = -1; break; } - } return rate; - } virtual int getOutputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -526,61 +577,49 @@ class osc_square : public dsp { rate = -1; break; } - } return rate; - } - static void classInit(int samplingFreq) { - + static void classInit(int sample_rate) { } - virtual void instanceConstants(int samplingFreq) { - fSamplingFreq = samplingFreq; - fConst0 = std::min(192000.0f, std::max(1.0f, float(fSamplingFreq))); + virtual void instanceConstants(int sample_rate) { + fSampleRate = sample_rate; + fConst0 = std::min(192000.0f, std::max(1.0f, float(fSampleRate))); fConst1 = (0.25f * fConst0); fConst2 = (1.0f / fConst0); fConst3 = (0.5f * fConst0); - } virtual void instanceResetUserInterface() { - } virtual void instanceClear() { for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { iVec0[l0] = 0; - } for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { fVec1[l1] = 0.0f; - } for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { fRec0[l2] = 0.0f; - } for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { fVec2[l3] = 0.0f; - } IOTA = 0; for (int l4 = 0; (l4 < 4096); l4 = (l4 + 1)) { fVec3[l4] = 0.0f; - } - } - virtual void init(int samplingFreq) { - classInit(samplingFreq); - instanceInit(samplingFreq); + virtual void init(int sample_rate) { + classInit(sample_rate); + instanceInit(sample_rate); } - - virtual void instanceInit(int samplingFreq) { - instanceConstants(samplingFreq); + virtual void instanceInit(int sample_rate) { + instanceConstants(sample_rate); instanceResetUserInterface(); instanceClear(); } @@ -590,14 +629,12 @@ class osc_square : public dsp { } virtual int getSampleRate() { - return fSamplingFreq; - + return fSampleRate; } virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("osc_square"); ui_interface->closeBox(); - } virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { @@ -618,15 +655,13 @@ class osc_square : public dsp { float fTemp6 = std::max(0.0f, std::min(2047.0f, (fConst3 / fTemp1))); int iTemp7 = int(fTemp6); float fTemp8 = std::floor(fTemp6); - output0[i] = FAUSTFLOAT(((fTemp0 == 0.0f)?0.0f:(fConst1 * ((fTemp5 - (fVec3[((IOTA - iTemp7) & 4095)] * (fTemp8 + (1.0f - fTemp6)))) - ((fTemp6 - fTemp8) * fVec3[((IOTA - (iTemp7 + 1)) & 4095)]))))); + output0[i] = FAUSTFLOAT(((fTemp0 == 0.0f) ? 0.0f : (fConst1 * ((fTemp5 - (fVec3[((IOTA - iTemp7) & 4095)] * (fTemp8 + (1.0f - fTemp6)))) - ((fTemp6 - fTemp8) * fVec3[((IOTA - (iTemp7 + 1)) & 4095)]))))); iVec0[1] = iVec0[0]; fVec1[1] = fVec1[0]; fRec0[1] = fRec0[0]; fVec2[1] = fVec2[0]; IOTA = (IOTA + 1); - } - } }; diff --git a/ceammc/ext/src/osc/osc_tri.h b/ceammc/ext/src/osc/osc_tri.h index 9f22f3c0ee..5d4e90ac16 100644 --- a/ceammc/ext/src/osc/osc_tri.h +++ b/ceammc/ext/src/osc/osc_tri.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "osc_tri" -Code generated with Faust 2.15.10 (https://faust.grame.fr) -Compilation options: cpp, -scal -ftz 0 +Code generated with Faust 2.22.1 (https://faust.grame.fr) +Compilation options: -lang cpp -scal -ftz 0 ------------------------------------------------------------ */ #ifndef __osc_tri_H__ @@ -14,6 +14,7 @@ Compilation options: cpp, -scal -ftz 0 #include #include +/************************** BEGIN dsp.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -96,23 +97,23 @@ class dsp { * - static class 'classInit': static tables initialization * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void init(int samplingRate) = 0; + virtual void init(int sample_rate) = 0; /** * Init instance state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceInit(int samplingRate) = 0; + virtual void instanceInit(int sample_rate) = 0; /** * Init instance constant state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceConstants(int samplingRate) = 0; + virtual void instanceConstants(int sample_rate) = 0; /* Init default control parameters values */ virtual void instanceResetUserInterface() = 0; @@ -149,8 +150,8 @@ class dsp { * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the number of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) * */ virtual void compute(double /*date_usec*/, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -169,16 +170,16 @@ class decorator_dsp : public dsp { public: - decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + decorator_dsp(dsp* dsp = nullptr):fDSP(dsp) {} virtual ~decorator_dsp() { delete fDSP; } virtual int getNumInputs() { return fDSP->getNumInputs(); } virtual int getNumOutputs() { return fDSP->getNumOutputs(); } virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } virtual int getSampleRate() { return fDSP->getSampleRate(); } - virtual void init(int samplingRate) { fDSP->init(samplingRate); } - virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } - virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void init(int sample_rate) { fDSP->init(sample_rate); } + virtual void instanceInit(int sample_rate) { fDSP->instanceInit(sample_rate); } + virtual void instanceConstants(int sample_rate) { fDSP->instanceConstants(sample_rate); } virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } @@ -233,6 +234,8 @@ class dsp_factory { #endif #endif +/************************** END dsp.h **************************/ +/************************** BEGIN UI.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -272,45 +275,54 @@ class dsp_factory { struct Soundfile; -class UI +template +class UIReal { - + public: - - UI() {} - - virtual ~UI() {} - + + UIReal() {} + virtual ~UIReal() {} + // -- widget's layouts - + virtual void openTabBox(const char* label) = 0; virtual void openHorizontalBox(const char* label) = 0; virtual void openVerticalBox(const char* label) = 0; virtual void closeBox() = 0; - + // -- active widgets - - virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - + + virtual void addButton(const char* label, REAL* zone) = 0; + virtual void addCheckButton(const char* label, REAL* zone) = 0; + virtual void addVerticalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addHorizontalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addNumEntry(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + // -- passive widgets - - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - + + virtual void addHorizontalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + virtual void addVerticalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + // -- soundfiles - + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; - + // -- metadata declarations + + virtual void declare(REAL* zone, const char* key, const char* val) {} +}; - virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +struct UI : public UIReal +{ + + UI() {} + virtual ~UI() {} }; #endif +/************************** END UI.h **************************/ +/************************** BEGIN meta.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -339,11 +351,14 @@ class UI struct Meta { - virtual void declare(const char* key, const char* value) = 0; virtual ~Meta() {}; + virtual void declare(const char* key, const char* value) = 0; + }; #endif +/************************** END meta.h **************************/ +/************************** BEGIN misc.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -366,7 +381,7 @@ struct Meta that work under terms of your choice, so long as this FAUST architecture section is not modified. ************************************************************************/ - + #ifndef __misc__ #define __misc__ @@ -374,6 +389,8 @@ struct Meta #include #include #include +#include +#include using std::max; @@ -395,27 +412,65 @@ static int int2pow2(int x) { int r = 0; while ((1<declare("filename", "osc_tri"); + m->declare("filename", "osc_tri.dsp"); + m->declare("filters.lib/lowpass0_highpass1", "Copyright (C) 2003-2019 by Julius O. Smith III "); m->declare("filters.lib/name", "Faust Filters Library"); - m->declare("filters.lib/version", "0.0"); + m->declare("filters.lib/pole:author", "Julius O. Smith III"); + m->declare("filters.lib/pole:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/pole:license", "MIT-style STK-4.3 license"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); @@ -495,15 +553,13 @@ class osc_tri : public dsp { virtual int getNumInputs() { return 1; - } virtual int getNumOutputs() { return 1; - } virtual int getInputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -512,14 +568,12 @@ class osc_tri : public dsp { rate = -1; break; } - } return rate; - } virtual int getOutputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -528,66 +582,53 @@ class osc_tri : public dsp { rate = -1; break; } - } return rate; - } - static void classInit(int samplingFreq) { - + static void classInit(int sample_rate) { } - virtual void instanceConstants(int samplingFreq) { - fSamplingFreq = samplingFreq; - fConst0 = std::min(192000.0f, std::max(1.0f, float(fSamplingFreq))); + virtual void instanceConstants(int sample_rate) { + fSampleRate = sample_rate; + fConst0 = std::min(192000.0f, std::max(1.0f, float(fSampleRate))); fConst1 = (4.0f / fConst0); fConst2 = (0.25f * fConst0); fConst3 = (1.0f / fConst0); fConst4 = (0.5f * fConst0); - } virtual void instanceResetUserInterface() { - } virtual void instanceClear() { for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { iVec0[l0] = 0; - } for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { fVec1[l1] = 0.0f; - } for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { fRec1[l2] = 0.0f; - } for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { fVec2[l3] = 0.0f; - } IOTA = 0; for (int l4 = 0; (l4 < 4096); l4 = (l4 + 1)) { fVec3[l4] = 0.0f; - } for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { fRec0[l5] = 0.0f; - } - } - virtual void init(int samplingFreq) { - classInit(samplingFreq); - instanceInit(samplingFreq); + virtual void init(int sample_rate) { + classInit(sample_rate); + instanceInit(sample_rate); } - - virtual void instanceInit(int samplingFreq) { - instanceConstants(samplingFreq); + virtual void instanceInit(int sample_rate) { + instanceConstants(sample_rate); instanceResetUserInterface(); instanceClear(); } @@ -597,14 +638,12 @@ class osc_tri : public dsp { } virtual int getSampleRate() { - return fSamplingFreq; - + return fSampleRate; } virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("osc_tri"); ui_interface->closeBox(); - } virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { @@ -633,9 +672,7 @@ class osc_tri : public dsp { fVec2[1] = fVec2[0]; IOTA = (IOTA + 1); fRec0[1] = fRec0[0]; - } - } }; diff --git a/ceammc/ext/src/proto/CMakeLists.txt b/ceammc/ext/src/proto/CMakeLists.txt index e33e19b918..1f8c13f49a 100644 --- a/ceammc/ext/src/proto/CMakeLists.txt +++ b/ceammc/ext/src/proto/CMakeLists.txt @@ -7,6 +7,7 @@ macro(ceammc_proto_extension name) endmacro() ceammc_proto_extension(firmata) +ceammc_proto_extension(sp_alpaca) add_library(ceammc_proto STATIC mod_proto.cpp ${PROTO_SOURCES}) target_link_libraries(ceammc_proto proto_firmata) diff --git a/ceammc/ext/src/proto/extra/hw_alpaca b/ceammc/ext/src/proto/extra/hw_alpaca new file mode 160000 index 0000000000..6cd0d22841 --- /dev/null +++ b/ceammc/ext/src/proto/extra/hw_alpaca @@ -0,0 +1 @@ +Subproject commit 6cd0d228414cdf8b57fd5d40b4bdf40426ae17b7 diff --git a/ceammc/ext/src/proto/mod_proto.cpp b/ceammc/ext/src/proto/mod_proto.cpp index 33f550d3b9..0b4599a44a 100644 --- a/ceammc/ext/src/proto/mod_proto.cpp +++ b/ceammc/ext/src/proto/mod_proto.cpp @@ -1,7 +1,9 @@ #include "mod_proto.h" #include "proto_firmata.h" +#include "proto_sp_alpaca.h" void ceammc_proto_setup() { proto_firmata_setup(); + setup_proto_sp_alpaca(); } diff --git a/ceammc/ext/src/proto/proto_sp_alpaca.cpp b/ceammc/ext/src/proto/proto_sp_alpaca.cpp new file mode 100644 index 0000000000..702cbd6454 --- /dev/null +++ b/ceammc/ext/src/proto/proto_sp_alpaca.cpp @@ -0,0 +1,611 @@ +/***************************************************************************** + * Copyright 2019 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#include "proto_sp_alpaca.h" +#include "ceammc_factory.h" +#include "ceammc_format.h" + +#include +#include +#include + +#include "extra/hw_alpaca/constants.h" + +using namespace alpaca; + +static t_symbol* SYM_ANALOG; +static t_symbol* SYM_ANALOG_RAW; +static t_symbol* SYM_DIGITAL; +static t_symbol* SYM_EMPTY; +static t_symbol* SYM_MODE; +static t_symbol* SYM_MODE_ANALOG; +static t_symbol* SYM_MODE_ANALOG_RAW; +static t_symbol* SYM_MODE_DIGITAL1; +static t_symbol* SYM_MODE_DIGITAL2; +static t_symbol* SYM_MODE_DIGITAL_BOTH; +static t_symbol* SYM_MODE_NONE; +static t_symbol* SYM_NO_TARGET; +static t_symbol* SYM_OK; +static t_symbol* SYM_RESPONSE; +static t_symbol* SYM_UNKNOWN_COMMAND; +static t_symbol* SYM_UNKNOWN_TARGET; +static t_symbol* SYM_VERSION; + +enum StateType { + STATE_START = 0, + STATE_CMD, + STATE_DIGITAL_VALUE, + STATE_ANALOG_VALUE, + STATE_ANALOG_VALUE_RAW, + STATE_RESPONSE, + STATE_END +}; + +typedef std::function TransitionFn; +typedef std::function ValidatorFn; +typedef std::tuple FSMRow; + +static std::vector fsm({{ + // start->cmd + { STATE_START, + [](uint8_t v) { return v == CMD_START; }, + STATE_CMD, + [](ProtoSpAlpaca* p, uint8_t) { return p->fsm_clear(); } }, + + // cmd->digital + { STATE_CMD, + [](uint8_t v) { return (0xF0 & v) == CMD_SEND_DIGITAL; }, + STATE_DIGITAL_VALUE, + [](ProtoSpAlpaca* p, uint8_t v) { return p->fsm_add(0x0F & v); } }, + + // digital->end + { STATE_DIGITAL_VALUE, + [](uint8_t v) { return v == CMD_END; }, + STATE_END, + [](ProtoSpAlpaca* p, uint8_t v) { return p->fsm_output_digital(); } }, + + // cmd->analog + { STATE_CMD, + [](uint8_t v) { return (0xF0 & v) == CMD_SEND_ANALOG; }, + STATE_ANALOG_VALUE, + [](ProtoSpAlpaca* p, uint8_t v) { return p->fsm_add(0x0F & v); } }, + + // analog->end + { + STATE_ANALOG_VALUE, + [](uint8_t v) { return v == CMD_END; }, + STATE_END, + [](ProtoSpAlpaca* p, uint8_t v) { return p->fsm_output_analog(); } }, + + // analog->analog + { STATE_ANALOG_VALUE, + nullptr, + STATE_ANALOG_VALUE, + [](ProtoSpAlpaca* p, uint8_t v) { return p->fsm_add(0x7F & v); } }, + + // cmd->analog_raw + { STATE_CMD, + [](uint8_t v) { return (0xF0 & v) == CMD_SEND_ANALOG_RAW; }, + STATE_ANALOG_VALUE_RAW, + [](ProtoSpAlpaca* p, uint8_t v) { return p->fsm_add(0x0F & v); } }, + + // analog_raw->end + { STATE_ANALOG_VALUE_RAW, + [](uint8_t v) { return v == CMD_END; }, + STATE_END, + [](ProtoSpAlpaca* p, uint8_t v) { return p->fsm_output_analog_raw(); } }, + + // analog_raw->analog_raw + { STATE_ANALOG_VALUE_RAW, + nullptr, + STATE_ANALOG_VALUE_RAW, + [](ProtoSpAlpaca* p, uint8_t v) { return p->fsm_add(0x7F & v); } }, + + // cmd->response + { STATE_CMD, + [](uint8_t v) { return (0xF0 & v) == CMD_RESPONSE; }, + STATE_RESPONSE, + [](ProtoSpAlpaca* p, uint8_t v) { return p->fsm_add(0x0F & v); } }, + + // response->response + { STATE_RESPONSE, + [](uint8_t v) { return v <= 0x7F; }, + STATE_RESPONSE, + [](ProtoSpAlpaca* p, uint8_t v) { return p->fsm_add(0x7F & v); } }, + + // response->end + { STATE_RESPONSE, + [](uint8_t v) { return v == CMD_END; }, + STATE_END, + [](ProtoSpAlpaca* p, uint8_t v) { return p->fsm_output_response(); } }, +}}); + +ProtoSpAlpaca::ProtoSpAlpaca(const PdArgs& args) + : BaseObject(args) + , state_(STATE_START) +{ + createOutlet(); +} + +void ProtoSpAlpaca::onFloat(t_float f) +{ + parse(f); +} + +bool ProtoSpAlpaca::fsm_clear() +{ + in_cmd_.clear(); + return true; +} + +bool ProtoSpAlpaca::fsm_add(uint8_t v) +{ + if (in_cmd_.size() >= PROTO_ALPACA_MAX_CMD_SIZE) + return false; + + in_cmd_.push_back(v); + return true; +} + +bool ProtoSpAlpaca::fsm_output_digital() +{ + if (in_cmd_.empty()) + return false; + + const uint8_t n = in_cmd_[0] >> 1; + const uint8_t x = in_cmd_[0] & 1; + anyTo(0, SYM_DIGITAL, { t_float(n), t_float(x) }); + return true; +} + +bool ProtoSpAlpaca::fsm_output_analog() +{ + if (in_cmd_.size() != 3) + return false; + + const uint8_t n = in_cmd_[0] >> 1; + const uint16_t v = (uint16_t(in_cmd_[2]) << 7) | in_cmd_[1]; + anyTo(0, SYM_ANALOG, { t_float(n), t_float(v) }); + return true; +} + +bool ProtoSpAlpaca::fsm_output_analog_raw() +{ + if (in_cmd_.size() != 5) + return false; + + const uint8_t n = in_cmd_[0] >> 1; + const uint16_t v1 = (uint16_t(in_cmd_[2]) << 7) | in_cmd_[1]; + const uint16_t v2 = (uint16_t(in_cmd_[4]) << 7) | in_cmd_[3]; + anyTo(0, SYM_ANALOG_RAW, { t_float(n), t_float(v1), t_float(v2) }); + return true; +} + +bool ProtoSpAlpaca::fsm_output_response() +{ + if (in_cmd_.empty()) + return false; + + switch (in_cmd_[0]) { + case 0: { + size_t argc = 0; + auto argv = &in_cmd_[2]; + if (in_cmd_.size() > 1) { + argc = in_cmd_[1]; + if (in_cmd_.size() != argc + 2) { // target, nargs, .... + OBJ_ERR << "invalid response format..."; + return false; + } + + if (argc == 2 && argv[0] == CMD_DEVICE_VERSION) + anyTo(0, SYM_VERSION, argv[1]); + else if (argc == 3 && argv[0] == CMD_DEVICE_MODE) { + t_symbol* s = SYM_MODE_NONE; + switch (argv[2]) { + case MODE_ANALOG: + s = SYM_MODE_ANALOG; + break; + case MODE_ANALOG_RAW: + s = SYM_MODE_ANALOG_RAW; + break; + case MODE_DIGITAL1: + s = SYM_MODE_DIGITAL1; + break; + case MODE_DIGITAL2: + s = SYM_MODE_DIGITAL2; + break; + case MODE_DIGITAL_BOTH: + s = SYM_MODE_DIGITAL_BOTH; + break; + default: + break; + } + + AtomList l(Atom(argv[1]), s); + anyTo(0, SYM_MODE, l); + } + } + + anyTo(0, SYM_RESPONSE, SYM_OK); + } break; + case 1: + anyTo(0, SYM_RESPONSE, SYM_EMPTY); + break; + case 2: + anyTo(0, SYM_RESPONSE, SYM_NO_TARGET); + break; + case 3: + anyTo(0, SYM_RESPONSE, SYM_UNKNOWN_TARGET); + break; + case 4: + anyTo(0, SYM_RESPONSE, SYM_UNKNOWN_COMMAND); + break; + default: + LIB_ERR << "unknown response code: " << int(in_cmd_[0]); + break; + } + return true; +} + +void ProtoSpAlpaca::m_clear(t_symbol* s, const AtomList& l) +{ + floatTo(0, CMD_START); + floatTo(0, CMD_TARGET | CMD_TARGET_MATRIX); + floatTo(0, CMD_MATRIX_CLEAR); + floatTo(0, CMD_END); +} + +void ProtoSpAlpaca::m_col(t_symbol* s, const AtomList& l) +{ + // args example: 2 0 1 1 0 1 1 + // 3rd col with values 0 1 1 0 1 1 + if (l.size() < 2) { + METHOD_ERR(s) << "COL_IDX VALUE [VALUE..] expected: " << l; + return; + } + + int col = l.intAt(0, 0); + if (col < 0 || col > 7) { + METHOD_ERR(s) << "invalid column index range: " << col << "; 0 <= x < 8 expected"; + return; + } + + floatTo(0, CMD_START); + floatTo(0, CMD_TARGET | CMD_TARGET_MATRIX); + floatTo(0, CMD_MATRIX_COL | col); + + // pack first 4 elements of list in format 0 1 1 0 to bits + int top_part = 0; + const size_t LEFT_OFF = 1; + const size_t LEFT_N = std::min(4 + LEFT_OFF, l.size()); + for (size_t i = LEFT_OFF; i < LEFT_N; i++) { + auto v = l[i].asFloat(0); + if (v != 0) + top_part |= (1 << (i - LEFT_OFF)); + } + + floatTo(0, top_part); + + // pack 4 elements of list in format 0 1 1 0 to bits + int bottom_part = 0; + const size_t RIGHT_OFF = 5; + const size_t RIGHT_N = std::min(4 + RIGHT_OFF, l.size()); + for (size_t i = RIGHT_OFF; i < RIGHT_N; i++) { + auto v = l[i].asFloat(0); + if (v != 0) + bottom_part |= (1 << (i - RIGHT_OFF)); + } + + floatTo(0, bottom_part); + floatTo(0, CMD_END); +} + +void ProtoSpAlpaca::m_row(t_symbol* s, const AtomList& l) +{ + // args example: 2 0 1 1 0 1 1 + // 3rd row with values 0 1 1 0 1 1 + if (l.size() < 2) { + METHOD_ERR(s) << "ROW_IDX VALUE [VALUE..] expected: " << l; + return; + } + + int row = l.intAt(0, 0); + if (row < 0 || row > 5) { + METHOD_ERR(s) << "invalid row index range: " << row << "; 0 <= x < 6 expected"; + return; + } + + floatTo(0, CMD_START); + floatTo(0, CMD_TARGET | CMD_TARGET_MATRIX); + floatTo(0, CMD_MATRIX_ROW | row); + + // pack first 4 elements of list in format 0 1 1 0 to bits + int left_part = 0; + const size_t LEFT_OFF = 1; + const size_t LEFT_N = std::min(4 + LEFT_OFF, l.size()); + for (size_t i = LEFT_OFF; i < LEFT_N; i++) { + auto v = l[i].asFloat(0); + if (v != 0) + left_part |= (1 << (i - LEFT_OFF)); + } + + floatTo(0, left_part); + + // pack 4 elements of list in format 0 1 1 0 to bits + int right_part = 0; + const size_t RIGHT_OFF = 5; + const size_t RIGHT_N = std::min(4 + RIGHT_OFF, l.size()); + for (size_t i = RIGHT_OFF; i < RIGHT_N; i++) { + auto v = l[i].asFloat(0); + if (v != 0) + right_part |= (1 << (i - RIGHT_OFF)); + } + + floatTo(0, right_part); + floatTo(0, CMD_END); +} + +void ProtoSpAlpaca::m_fill(t_symbol* s, const AtomList& l) +{ + floatTo(0, CMD_START); + floatTo(0, CMD_TARGET | CMD_TARGET_MATRIX); + floatTo(0, CMD_MATRIX_FILL); + floatTo(0, CMD_END); +} + +void ProtoSpAlpaca::m_get_version(t_symbol* s, const AtomList& l) +{ + floatTo(0, CMD_START); + floatTo(0, CMD_TARGET | CMD_TARGET_DEVICE); + floatTo(0, CMD_DEVICE_VERSION); + floatTo(0, CMD_END); +} + +void ProtoSpAlpaca::m_invert(t_symbol* s, const AtomList& l) +{ + floatTo(0, CMD_START); + floatTo(0, CMD_TARGET | CMD_TARGET_MATRIX); + floatTo(0, CMD_MATRIX_INVERT); + floatTo(0, CMD_END); +} + +void ProtoSpAlpaca::m_str(t_symbol* s, const AtomList& l) +{ + auto str = to_string(l); + if (str.empty()) { + METHOD_ERR(s) << "empty string"; + return; + } + + if (str.size() > 2) { + METHOD_ERR(s) << "max string length is 2: " << str; + return; + } + + m_clear(s, l); + + drawChar(toupper(str[0]), 0); + if (str.size() > 1) + drawChar(toupper(str[1]), 4); +} + +void ProtoSpAlpaca::m_sync(t_symbol* s, const AtomList& l) +{ + floatTo(0, CMD_START); + floatTo(0, CMD_TARGET | CMD_TARGET_DEVICE); + floatTo(0, CMD_DEVICE_SYNC); + floatTo(0, CMD_END); +} + +void ProtoSpAlpaca::m_mode(t_symbol* s, const AtomList& l) +{ + if (!checkArgs(l, ARG_INT, ARG_SYMBOL, s)) + return; + + const int ch = l.intAt(0, 0); + if (ch < 0 || ch > 1) { + METHOD_ERR(s) << "invalid channel: " << ch << "; 0 or 1 expected"; + return; + } + + t_symbol* mode = l.symbolAt(1, &s_); + if (mode == SYM_MODE_NONE) { + floatTo(0, CMD_START); + floatTo(0, CMD_TARGET | ch); + floatTo(0, CMD_JACK_SET_MODE | MODE_NONE); + floatTo(0, CMD_END); + } else if (mode == SYM_MODE_ANALOG) { + floatTo(0, CMD_START); + floatTo(0, CMD_TARGET | ch); + floatTo(0, CMD_JACK_SET_MODE | MODE_ANALOG); + floatTo(0, CMD_END); + } else if (mode == SYM_MODE_ANALOG_RAW) { + floatTo(0, CMD_START); + floatTo(0, CMD_TARGET | ch); + floatTo(0, CMD_JACK_SET_MODE | MODE_ANALOG_RAW); + floatTo(0, CMD_END); + } else if (mode == SYM_MODE_DIGITAL1) { + floatTo(0, CMD_START); + floatTo(0, CMD_TARGET | ch); + floatTo(0, CMD_JACK_SET_MODE | MODE_DIGITAL1); + floatTo(0, CMD_END); + } else if (mode == SYM_MODE_DIGITAL2) { + floatTo(0, CMD_START); + floatTo(0, CMD_TARGET | ch); + floatTo(0, CMD_JACK_SET_MODE | MODE_DIGITAL2); + floatTo(0, CMD_END); + } else if (mode == SYM_MODE_DIGITAL_BOTH) { + floatTo(0, CMD_START); + floatTo(0, CMD_TARGET | ch); + floatTo(0, CMD_JACK_SET_MODE | MODE_DIGITAL_BOTH); + floatTo(0, CMD_END); + } else { + METHOD_ERR(s) << "unknown mode: " << mode->s_name; + } +} + +void ProtoSpAlpaca::m_brightness(t_symbol* s, const AtomList& l) +{ + if (!checkArgs(l, ARG_FLOAT, s)) + return; + + const float v = l.floatAt(0, 0); + if (v < 0 || v > 1) { + METHOD_ERR(s) << "brightness should be in range [0-1]; given value: " << v; + return; + } + + floatTo(0, CMD_START); + floatTo(0, CMD_TARGET | CMD_TARGET_MATRIX); + floatTo(0, CMD_MATRIX_SET_BRIGHTNESS); + floatTo(0, int(v * 127)); + floatTo(0, CMD_END); +} + +void ProtoSpAlpaca::m_pixel(t_symbol* s, const AtomList& l) +{ + if (!checkArgs(l, ARG_INT, ARG_INT, ARG_INT)) { + METHOD_ERR(s) << " X Y 1|0 args expected: " << l; + return; + } + + int x = l.intAt(0, 0); + int y = l.intAt(1, 0); + int state = l.intAt(2, 1); + + if (x < 0 || x > 7) { + METHOD_ERR(s) << "x coordinate should be in [0-7] range: " << x; + return; + } + + if (y < 0 || y > 5) { + METHOD_ERR(s) << "y coordinate should be in [0-5] range: " << y; + return; + } + + if (!(state == 0 || state == 1)) { + METHOD_ERR(s) << "pixel state (0 or 1) expected: " << state; + return; + } + + floatTo(0, CMD_START); + floatTo(0, CMD_TARGET | CMD_TARGET_MATRIX); + floatTo(0, state ? CMD_MATRIX_SET_PIXEL : CMD_MATRIX_CLEAR_PIXEL); + floatTo(0, (0x7 & x) | ((0x7 & y) << 4)); + floatTo(0, CMD_END); +} + +void ProtoSpAlpaca::m_char(t_symbol* s, const AtomList& l) +{ + if (l.empty() || l.size() > 2) { + METHOD_ERR(s) << "CHAR [OFFSET] expected"; + return; + } + + auto str = to_string(l[0]); + + if (str.size() != 1) { + METHOD_ERR(s) << "single character expected: " << str; + return; + } + + if (l.size() == 2 && !l[1].isFloat()) { + METHOD_ERR(s) << "offset value expected: " << l[1]; + return; + } + + drawChar(toupper(str[0]), l.size() == 2 ? l[1].asFloat() : 0); +} + +void ProtoSpAlpaca::parse(uint8_t v) +{ + if (in_cmd_.size() >= PROTO_ALPACA_MAX_CMD_SIZE) { + OBJ_ERR << "max command size exceeded: " << PROTO_ALPACA_MAX_CMD_SIZE; + in_cmd_.clear(); + state_ = STATE_START; + return; + } + + for (auto& row : fsm) { + if (std::get<0>(row) == state_) { + auto check_fn = std::get<1>(row); + if (check_fn && !check_fn(v)) + continue; + + auto fn = std::get<3>(row); + if (fn(this, v)) { + state_ = std::get<2>(row); + + // next loop + if (state_ == STATE_END) + state_ = STATE_START; + } else { + OBJ_ERR << "transition error"; + state_ = STATE_START; + } + + return; + } + } + + OBJ_ERR << "invalid value: " << int(v); + state_ = STATE_START; +} + +void ProtoSpAlpaca::drawChar(int ch, int offset) +{ + floatTo(0, CMD_START); + floatTo(0, CMD_TARGET | CMD_TARGET_MATRIX); + floatTo(0, CMD_MATRIX_CHAR); + + floatTo(0, 0x3F & ch); + floatTo(0, 0x3F & (ch >> 6)); + if (offset > 0) + floatTo(0, offset); + floatTo(0, CMD_END); +} + +void setup_proto_sp_alpaca() +{ + SYM_ANALOG = gensym("analog"); + SYM_ANALOG_RAW = gensym("analog_raw"); + SYM_DIGITAL = gensym("digital"); + SYM_EMPTY = gensym("empty"); + SYM_MODE = gensym("mode"); + SYM_MODE_ANALOG = gensym("analog"); + SYM_MODE_ANALOG_RAW = gensym("analog_raw"); + SYM_MODE_DIGITAL1 = gensym("digital1"); + SYM_MODE_DIGITAL2 = gensym("digital2"); + SYM_MODE_DIGITAL_BOTH = gensym("digital"); + SYM_MODE_NONE = gensym("none"); + SYM_NO_TARGET = gensym("no_target"); + SYM_OK = gensym("ok"); + SYM_RESPONSE = gensym("response"); + SYM_UNKNOWN_COMMAND = gensym("unknown_command"); + SYM_UNKNOWN_TARGET = gensym("unknown_target"); + SYM_VERSION = gensym("version"); + + ObjectFactory obj("proto.sp.alpaca"); + obj.addMethod("brightness", &ProtoSpAlpaca::m_brightness); + obj.addMethod("char", &ProtoSpAlpaca::m_char); + obj.addMethod("clear", &ProtoSpAlpaca::m_clear); + obj.addMethod("col", &ProtoSpAlpaca::m_col); + obj.addMethod("fill", &ProtoSpAlpaca::m_fill); + obj.addMethod("invert", &ProtoSpAlpaca::m_invert); + obj.addMethod("mode", &ProtoSpAlpaca::m_mode); + obj.addMethod("pixel", &ProtoSpAlpaca::m_pixel); + obj.addMethod("row", &ProtoSpAlpaca::m_row); + obj.addMethod("str", &ProtoSpAlpaca::m_str); + obj.addMethod("sync", &ProtoSpAlpaca::m_sync); + obj.addMethod("version?", &ProtoSpAlpaca::m_get_version); +} diff --git a/ceammc/ext/src/proto/proto_sp_alpaca.h b/ceammc/ext/src/proto/proto_sp_alpaca.h new file mode 100644 index 0000000000..f3c680c8b0 --- /dev/null +++ b/ceammc/ext/src/proto/proto_sp_alpaca.h @@ -0,0 +1,63 @@ +/***************************************************************************** + * Copyright 2019 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#ifndef PROTO_SP_ALPACA_H +#define PROTO_SP_ALPACA_H + +#include "ceammc_object.h" + +#include +#include + +using namespace ceammc; + +static const size_t PROTO_ALPACA_MAX_CMD_SIZE = 16; + +class ProtoSpAlpaca : public BaseObject { + typedef boost::container::static_vector StaticVector; + + StaticVector in_cmd_; + int state_; + +public: + ProtoSpAlpaca(const PdArgs& args); + void onFloat(t_float f) override; + + bool fsm_clear(); + bool fsm_add(uint8_t v); + bool fsm_output_digital(); + bool fsm_output_analog(); + bool fsm_output_analog_raw(); + bool fsm_output_response(); + + void m_brightness(t_symbol* s, const AtomList& l); + void m_char(t_symbol* s, const AtomList& l); + void m_clear(t_symbol* s, const AtomList& l); + void m_col(t_symbol* s, const AtomList& l); + void m_fill(t_symbol* s, const AtomList& l); + void m_get_version(t_symbol* s, const AtomList& l); + void m_invert(t_symbol* s, const AtomList& l); + void m_mode(t_symbol* s, const AtomList& l); + void m_pixel(t_symbol* s, const AtomList& l); + void m_row(t_symbol* s, const AtomList& l); + void m_str(t_symbol* s, const AtomList& l); + void m_sync(t_symbol* s, const AtomList& l); + +private: + void parse(uint8_t v); + void drawChar(int ch, int offset = 0); +}; + +void setup_proto_sp_alpaca(); + +#endif // PROTO_SP_ALPACA_H diff --git a/ceammc/ext/src/spat/CMakeLists.txt b/ceammc/ext/src/spat/CMakeLists.txt index a54c9bf93a..9c1625b781 100644 --- a/ceammc/ext/src/spat/CMakeLists.txt +++ b/ceammc/ext/src/spat/CMakeLists.txt @@ -1,3 +1,7 @@ +include_directories(${PROJECT_SOURCE_DIR}/ceammc/extra/HoaLibrary-Light/Sources) +include_directories(${PROJECT_SOURCE_DIR}/ceammc/extra/fmt/include) +include_directories(${EIGEN3_DIR}) + set(SPAT_SOURCES pan_base.cpp pan_linear.cpp @@ -7,6 +11,24 @@ set(SPAT_SOURCES pan_linsig.cpp ) +set(HOA_SOURCES + hoa_2d_scope.cpp + hoa_common.h + hoa_connections.cpp + hoa_decoder.cpp + hoa_encoder.cpp + hoa_map.cpp + hoa_optim.cpp + hoa_process.cpp + hoa_process_inlet.cpp + hoa_process_instance.cpp + hoa_process_props.cpp + hoa_projector.cpp + hoa_recomposer.cpp + hoa_rotate.cpp + hoa_wider.cpp +) + macro(ceammc_spat_obj_ext name) list(APPEND SPAT_SOURCES "spat_${name}.cpp") ceammc_faust_gen_obj(spat ${name} JSON) @@ -15,8 +37,9 @@ endmacro() ceammc_spat_obj_ext(pan4) ceammc_spat_obj_ext(pan8) -add_library(ceammc_spat STATIC mod_spat.cpp ${SPAT_SOURCES}) +add_library(ceammc_spat STATIC mod_spat.cpp ${SPAT_SOURCES} ${HOA_SOURCES}) set_target_properties(ceammc_spat PROPERTIES COMPILE_DEFINITIONS "FAUST_MACRO") +set_property(TARGET ceammc_spat PROPERTY CXX_STANDARD 14) if(UNIX) set_target_properties(ceammc_spat PROPERTIES COMPILE_FLAGS "-fPIC") endif() diff --git a/ceammc/ext/src/spat/Hoa_Scope.hpp b/ceammc/ext/src/spat/Hoa_Scope.hpp new file mode 100644 index 0000000000..85bb112f16 --- /dev/null +++ b/ceammc/ext/src/spat/Hoa_Scope.hpp @@ -0,0 +1,458 @@ +/* +// Copyright (c) 2012-2016 CICM - Universite Paris 8 - Labex Arts H2H. +// Authors : +// 2012: Pierre Guillot, Eliott Paris & Julien Colafrancesco. +// 2012-2015: Pierre Guillot & Eliott Paris. +// 2015: Pierre Guillot & Eliott Paris & Thomas Le Meur (Light version) +// 2016: Pierre Guillot & Eliott Paris. +// For information on usage and redistribution, and for a DISCLAIMER OF ALL +// WARRANTIES, see the file, "LICENSE.txt," in this distribution. +*/ + +#ifndef DEF_HOA_SCOPE_LIGHT +#define DEF_HOA_SCOPE_LIGHT + +#define hoa_noexcept noexcept +#define hoa_override override + +#include "Hoa_Encoder.hpp" +#include "Hoa_Planewaves.hpp" + +namespace hoa +{ + //! The scope class offers a representation a the sound field in the harmonics domain. + /** The scope discretize a circle for the 2d or a sphere for the 3d by a set of point and uses a decoder to project the harmonics on it. This class should be used for graphical interfaces outside the digital signal processing. If the number of points for the discretization is very large, then you should prefer to record snapshot of the harmonics and to call the process method at an interval adapted to a graphical rendering. + */ + template class Scope : public ProcessorHarmonics + { + public: + + //! The scope constructor. + /** The scope constructor allocates and initialize the member values to computes harmonics projection depending on a order of decomposition and a number of points. The order must be at least 1. + @param order The order. + @param numberOfPoints The number of points. + */ + Scope(size_t order, size_t numberOfPoints); + + //! The Scope destructor. + /** The Scope destructor free the memory. + */ + virtual ~Scope() hoa_noexcept = 0; + + //! Set the offset. + /** Set the rotation of the spherical harmonics in radian. + */ + virtual inline void setViewRotation(const T x_axe, const T y_axe, const T z_axe) hoa_noexcept = 0; + + //! Compute the values of the summation of every harmonic to the representation of the sound field + /** Compute the values of the summation of every harmonic to the representation of the sound field + */ + virtual void computeRendering() hoa_noexcept = 0; + + //! This method performs the spherical/circular harmonics projection with single precision. + /** You should use this method to compute the projection of the spherical/circular harmonics over an ambisonic sphere. The inputs array contains the spherical/circular harmonics samples and the minimum size must be the number of harmonics. + @param inputs The inputs array. + @param outputs The dummy outputs array (null). + */ + virtual inline void process(const T* inputs, T* outputs) hoa_noexcept hoa_override = 0; + + //! This method performs the spherical harmonics projection with single precision. + /** You should use this method to compute the projection of the spherical harmonics over an ambisonic sphere. The inputs array contains the spherical harmonics samples and the minimum size must be the number of harmonics. + + @param inputs The inputs array. + */ + virtual inline void process(const T* inputs) hoa_noexcept = 0; + + }; + +#ifndef DOXYGEN_SHOULD_SKIP_THIS + + template class Scope : public Encoder, protected ProcessorPlanewaves + { + private: + T* m_matrix; + T* m_vector; + T m_maximum; + public: + + //! The scope constructor. + /** The scope constructor allocates and initialize the member values to computes circular harmonics projection on a circle depending on a order of decomposition and a circle discretization. The circle is discretized by the number of points. The order must be at least 1. The number of points and column should be at least 3 (but it's very low). + @param order The order. + @param numberOfPoints The number of points. + */ + Scope(size_t order, size_t numberOfPoints) hoa_noexcept : + Encoder(order), + ProcessorPlanewaves(numberOfPoints) + { + m_matrix = Signal::alloc(ProcessorPlanewaves::getNumberOfPlanewaves() * Encoder::getNumberOfHarmonics()); + m_vector = Signal::alloc(ProcessorPlanewaves::getNumberOfPlanewaves()); + computeRendering(); + } + + //! The scope destructor. + /** The scope destructor free the memory. + */ + ~Scope() hoa_noexcept + { + Signal::free(m_matrix); + Signal::free(m_vector); + } + + //! Set the offset. + /** Set the rotation of the spherical harmonics in radian. + */ + inline void setViewRotation(const T x_axe, const T y_axe, const T z_axe) hoa_noexcept + { + ProcessorPlanewaves::setPlanewavesRotation(x_axe, y_axe, z_axe); + } + + //! Get the value of the z rotation. + /** Get the value of the z rotation. The value is in radian, between 0 and 2π. + */ + inline T getViewRotationZ() const hoa_noexcept + { + return ProcessorPlanewaves::getPlanewavesRotationZ(); + } + + //! Compute the values of the summation of every harmonic to the representation of the sound field + /** Compute the values of the summation of every harmonic to the representation of the sound field + */ + void computeRendering() hoa_noexcept + { + const T factor = 1. / (T)(Encoder::getDecompositionOrder() + 1.); + for(size_t i = 0; i < ProcessorPlanewaves::getNumberOfPlanewaves(); i++) + { + Encoder::setAzimuth(ProcessorPlanewaves::getPlanewaveAzimuth(i)); + Encoder::process(&factor, m_matrix + i * Encoder::getNumberOfHarmonics()); + m_matrix[i * Encoder::getNumberOfHarmonics()] = factor * 0.5; + } + for(size_t i = 0; i < ProcessorPlanewaves::getNumberOfPlanewaves(); i++) + { + m_vector[i] = 0.; + } + m_maximum = 0; + } + + //! Retrieve the number of points. + /** Retrieve the number of points used to discretize the ambisonic circle. + @return This method returns the number of points used to discretize the circle. + */ + inline size_t getNumberOfPoints() const hoa_noexcept + { + return ProcessorPlanewaves::getNumberOfPlanewaves(); + } + + //! Retrieve the value of a point of the circular harmonics projection. + /** Retrieve the result value of the circular harmonics projection for a given point defined by an index. The absolute of the value can be used as the radius of the point for a 2 dimentionnal representation. For the index, 0 is the 0 azimtuh of the circle. The maximum index must be the number of points - 1. + @param index The point index of the point. + @return This method returns the value of a point of the ambisonic circle. + */ + inline T getPointValue(const size_t index) const hoa_noexcept + { + return m_vector[index]; + } + + //! Retrieve the radius of a point of the circular harmonics projection. + /** Retrieve the radius of the circular harmonics projection for a given point defined by an index. This the absolute of the result of the projection. For the index, 0 is the 0 azimtuh of the circle. The maximum index must be the number of points - 1. + @param pointIndex The point index of the point. + @return This method returns the radius of a point of the ambisonic circle. + */ + inline T getPointRadius(const size_t index) const hoa_noexcept + { + return fabs(m_vector[index]); + } + + //! Retrieve the azimuth of a point of the circular harmonics projection. + /** Retrieve the azimuth of the circular harmonics projection for a given point defined by an index.The maximum index must be the number of points - 1. + @param pointIndex The point index of the point. + @return This method returns the azimuth of a point of the ambisonic circle. + */ + inline T getPointAzimuth(const size_t index) const hoa_noexcept + { + return ProcessorPlanewaves::getPlanewaveAzimuth(index); + } + + //! Retrieve the abscissa of a point of the circular harmonics projection. + /** Retrieve the abscissa of the circular harmonics projection for a given point defined by an index.The maximum index must be the number of points - 1. + + @param pointIndex The point index of the point. + @return This method returns the abscissa of a point of the ambisonic circle. + + @see getOrdinate + */ + inline double getPointAbscissa(const size_t index) const hoa_noexcept + { + return fabs(m_vector[index]) * ProcessorPlanewaves::getPlanewaveAbscissa(index); + } + + //! Retrieve the ordinate of a point of the circular harmonics projection. + /** Retrieve the ordinate of the circular harmonics projection for a given point defined by an index.The maximum index must be the number of points - 1. + + @param pointIndex The point index of the point. + @return This method returns the ordinate of a point of the ambisonic circle. + + @see getAbscissa + */ + inline double getPointOrdinate(const size_t index) const hoa_noexcept + { + return fabs(m_vector[index]) * ProcessorPlanewaves::getPlanewaveOrdinate(index); + } + + //! This method performs the circular harmonics projection. + /** You should use this method to compute the projection of the circular harmonics over an ambisonics circle. The inputs array contains the circular harmonics samples and the minimum size must be the number of harmonics. + @param inputs The inputs array. + */ + inline void process(const T* inputs, T* outputs) hoa_noexcept hoa_override + { + Signal::mul(Encoder::getNumberOfHarmonics(), ProcessorPlanewaves::getNumberOfPlanewaves(), inputs, m_matrix, m_vector); + m_maximum = fabs(Signal::max(ProcessorPlanewaves::getNumberOfPlanewaves(), m_vector)); + if(m_maximum > 1.) + { + Signal::scale(ProcessorPlanewaves::getNumberOfPlanewaves(), (1. / m_maximum), m_vector); + } + } + + //! This method performs the circular harmonics projection. + /** You should use this method to compute the projection of the circular harmonics over an ambisonics circle. The inputs array contains the circular harmonics samples and the minimum size must be the number of harmonics. + @param inputs The inputs array. + */ + inline void process(const T* inputs) hoa_noexcept + { + Signal::mul(Encoder::getNumberOfHarmonics(), ProcessorPlanewaves::getNumberOfPlanewaves(), inputs, m_matrix, m_vector); + m_maximum = fabs(Signal::max(ProcessorPlanewaves::getNumberOfPlanewaves(), m_vector)); + if(m_maximum > 1.) + { + Signal::scale(ProcessorPlanewaves::getNumberOfPlanewaves(), (1. / m_maximum), m_vector); + } + } + }; + + template class Scope : public Encoder, protected ProcessorPlanewaves + { + private: + const size_t m_number_of_rows; + const size_t m_number_of_columns; + T* m_matrix; + T* m_vector; + T m_maximum; + public: + + //! The Scope constructor. + /** The Scope constructor allocates and initialize the member values to computes spherical harmonics projection on a sphere depending on a order of decomposition and a sphere discretization. The sphere discretization is done by a set of points defined by rows and columns then the precision will be lower at the elevation center (0 radian) than at the top (1/2 Pi) or the bottom (-1/2 Pi) of the sphere. The number of row discretize the elevation then it set how many points are used between the bottom and the top. The number of column discretize the azimuth circle then it set how many points are used to make the turn from the front (O radian). Then the sphere is discretized by number of rows * number of columns points. The order must be at least 1. The number of rows and column should be at least 3 (but it's very low). + + @param order The order. + @param numberOfRow The number of rows. + @param numberOfColumn The number of columns. + */ + Scope(size_t order, size_t numberOfRow, size_t numberOfColumn) hoa_noexcept : + Encoder(order), + ProcessorPlanewaves(numberOfRow * numberOfColumn), + m_number_of_rows(numberOfRow), + m_number_of_columns(numberOfColumn) + { + for(size_t i = 0; i < m_number_of_rows; i++) + { + const T elevation = (T)i * HOA_PI / (T)(m_number_of_rows - 1) - HOA_PI2; + for(size_t j = 0; j < m_number_of_columns; j++) + { + ProcessorPlanewaves::setPlanewaveAzimuth(i * m_number_of_columns + j, (T)j * HOA_2PI / (T)m_number_of_columns); + ProcessorPlanewaves::setPlanewaveElevation(i * m_number_of_columns + j, elevation); + } + } + + m_matrix = Signal::alloc(ProcessorPlanewaves::getNumberOfPlanewaves() * Encoder::getNumberOfHarmonics()); + m_vector = Signal::alloc(ProcessorPlanewaves::getNumberOfPlanewaves()); + computeRendering(); + } + + //! The scope destructor. + /** The scope destructor free the memory. + */ + ~Scope() hoa_noexcept + { + Signal::free(m_matrix); + Signal::free(m_vector); + } + + //! Retrieve the number of rows. + /** Retrieve the number of rows used to discretize the ambisonic sphere. + + @return This method returns the number of rows used to discretize the sphere. + */ + inline size_t getNumberOfRows() const hoa_noexcept + { + return m_number_of_rows; + } + + //! Retrieve the number of column. + /** Retrieve the number of column used to discretize the ambisonic sphere. + + @return This method returns the number of column used to discretize the sphere. + */ + inline size_t getNumberOfColumns() const hoa_noexcept + { + return m_number_of_columns; + } + + //! Retrieve the value of a point of the spherical harmonics projection. + /** Retrieve the result value of the spherical harmonics projection for a given point defined by a row index and a column index. The absolute of the value can be used as the radius of the point for a 3 dimensional representation. For the row index, 0 is the bottom of the sphere, number of rows / 2 is at the center of the elevation and number of rows - 1 is at the top of the sphere. For the column index, 0 is the front (0 radian) and number of columns / 2 is the rear of the sphere. The maximum row index must be the number of row - 1 and the maximum column index must be the number of columns - 1. + + @param rowIndex The row index of the point. + @param columnIndex The column index of the point. + @return This method returns the value of a point of the ambisonic sphere. + @see getradius + @see getAzimuth + @see getElevation + */ + inline T getPointValue(const size_t rowIndex, const size_t columnIndex) const hoa_noexcept + { + return m_vector[rowIndex * m_number_of_columns + columnIndex]; + } + + //! Retrieve the radius of a point of the spherical harmonics projection. + /** Retrieve the radius of the spherical harmonics projection for a given point defined by a row index and a column index. This the absolute of the result of the projection. For the row index, 0 is the bottom of the sphere, number of rows / 2 is at the center of the elevation and number of rows - 1 is at the top of the sphere. For the column index, 0 is the front (0 radian) and number of columns / 2 is the rear of the sphere. The maximum row index must be the number of row - 1 and the maximum column index must be the number of columns - 1. + + @param rowIndex The row index of the point. + @param columnIndex The column index of the point. + @return This method returns the radius of a point of the ambisonic sphere. + @see getAzimuth + @see getElevation + @see getValue + */ + inline T getPointRadius(const size_t rowIndex, const size_t columnIndex) const hoa_noexcept + { + return fabs(m_vector[rowIndex * m_number_of_columns + columnIndex]); + } + + //! Retrieve the azimuth of a point of the spherical harmonics projection. + /** Retrieve the azimuth of the spherical harmonics projection for a given point defined by a row index and a column index. For the column index, 0 is the front (0 radian) and number of columns / 2 is the rear of the sphere. The maximum column index must be the number of columns - 1. + + @param rowIndex The row index of the point. + @param columnIndex The column index of the point. + @return This method returns the azimuth of a point of the ambisonic sphere. + @see getValue + @see getRadius + @see getElevation + */ + inline T getPointAzimuth(const size_t columnIndex) const hoa_noexcept + { + return (T)columnIndex * HOA_2PI / (T)m_number_of_columns; + } + + //! Retrieve the elevation of a point of the spherical harmonics projection. + /** Retrieve the elevation of the spherical harmonics projection for a given point defined by a row index. For the row index, 0 is the bottom of the sphere, number of rows / 2 is at the center of the elevation and number of rows - 1 is at the top of the sphere. The maximum row index must be the number of row - 1. + + @param rowIndex The row index of the point. + @param columnIndex The column index of the point. + @return This method returns the elevation of a point of the ambisonic sphere. + @see getValue + @see getRadius + @see getAzimuth + */ + inline T getPointElevation(const size_t rowIndex) const hoa_noexcept + { + return (T)rowIndex * HOA_PI / (T)(m_number_of_rows - 1) - HOA_PI2; + } + + //! Set the offset. + /** Set the rotation of the spherical harmonics in radian. + */ + inline void setViewRotation(const T x_axe, const T y_axe, const T z_axe) hoa_noexcept + { + ProcessorPlanewaves::setPlanewavesRotation(x_axe, y_axe, z_axe); + } + + //! Get the value of the x rotation. + /** Get the value of the x rotation. The value is in radian, between 0 and 2π. + */ + inline T getViewRotationX() const hoa_noexcept + { + return ProcessorPlanewaves::getPlanewavesRotationX(); + } + + //! Get the value of the y rotation. + /** Get the value of the y rotation. The value is in radian, between 0 and 2π. + */ + inline T getViewRotationY() const hoa_noexcept + { + return ProcessorPlanewaves::getPlanewavesRotationY(); + } + + //! Get the value of the z rotation. + /** Get the value of the z rotation. The value is in radian, between 0 and 2π. + */ + inline T getViewRotationZ() const hoa_noexcept + { + return ProcessorPlanewaves::getPlanewavesRotationZ(); + } + + //! Compute the values of the summation of every harmonic to the representation of the sound field + /** Compute the values of the summation of every harmonic to the representation of the sound field + */ + void computeRendering() hoa_noexcept + { + const T factor = 12.5 / (T)(Encoder::getNumberOfHarmonics()); + for(size_t i = 0; i < ProcessorPlanewaves::getNumberOfPlanewaves(); i++) + { + Encoder::setAzimuth(ProcessorPlanewaves::getPlanewaveAzimuth(i)); + Encoder::setElevation(ProcessorPlanewaves::getPlanewaveElevation(i)); + Encoder::process(&factor, m_matrix + i * Encoder::getNumberOfHarmonics()); + for(size_t j = 0; j < Encoder::getNumberOfHarmonics(); j++) + { + const size_t l = Encoder::getHarmonicDegree(j); + if(Encoder::getHarmonicOrder(j) == 0) + { + m_matrix[i * Encoder::getNumberOfHarmonics() + j] *= (2. * l + 1.); + } + else + { + m_matrix[i * Encoder::getNumberOfHarmonics() + j] *= T(2. * l + 1.) * 4. * HOA_PI; + } + } + } + for(size_t i = 0; i < ProcessorPlanewaves::getNumberOfPlanewaves(); i++) + { + m_vector[i] = 0.; + } + m_maximum = 0; + } + + //! This method performs the spherical harmonics projection with single precision. + /** You should use this method to compute the projection of the spherical harmonics over an ambisonic sphere. The inputs array contains the spherical harmonics samples and the minimum size must be the number of harmonics. + + @param inputs The inputs array. + */ + inline void process(const T* inputs, T* outputs) hoa_noexcept hoa_override + { + Signal::mul(Encoder::getNumberOfHarmonics(), ProcessorPlanewaves::getNumberOfPlanewaves(), inputs, m_matrix, m_vector); + m_maximum = fabs(Signal::max(ProcessorPlanewaves::getNumberOfPlanewaves(), m_vector)); + if(m_maximum > 1.) + { + Signal::scale(ProcessorPlanewaves::getNumberOfPlanewaves(), (1. / m_maximum), m_vector); + } + } + + //! This method performs the spherical harmonics projection with single precision. + /** You should use this method to compute the projection of the spherical harmonics over an ambisonic sphere. The inputs array contains the spherical harmonics samples and the minimum size must be the number of harmonics. + + @param inputs The inputs array. + */ + inline void process(const T* inputs) hoa_noexcept + { + Signal::mul(Encoder::getNumberOfHarmonics(), ProcessorPlanewaves::getNumberOfPlanewaves(), inputs, m_matrix, m_vector); + m_maximum = fabs(Signal::max(ProcessorPlanewaves::getNumberOfPlanewaves(), m_vector)); + if(m_maximum > 1.) + { + Signal::scale(ProcessorPlanewaves::getNumberOfPlanewaves(), (1. / m_maximum), m_vector); + } + } + }; + +#endif + +} + +#endif + + + diff --git a/ceammc/ext/src/spat/Hoa_Tools.hpp b/ceammc/ext/src/spat/Hoa_Tools.hpp new file mode 100644 index 0000000000..504720e5ff --- /dev/null +++ b/ceammc/ext/src/spat/Hoa_Tools.hpp @@ -0,0 +1,507 @@ +/* +// Copyright (c) 2012-2016 CICM - Universite Paris 8 - Labex Arts H2H. +// Authors : +// 2012: Pierre Guillot, Eliott Paris & Julien Colafrancesco. +// 2012-2015: Pierre Guillot & Eliott Paris. +// 2015: Pierre Guillot & Eliott Paris & Thomas Le Meur (Light version) +// 2016: Pierre Guillot & Eliott Paris. +// For information on usage and redistribution, and for a DISCLAIMER OF ALL +// WARRANTIES, see the file, "LICENSE.txt," in this distribution. +*/ + +#ifndef DEF_HOA_TOOLS_LIGHT +#define DEF_HOA_TOOLS_LIGHT + +#include "Hoa_Math.hpp" +#include "Hoa_Signal.hpp" + +namespace hoa +{ + template class Line + { + private: + T m_value_old; + T m_value_new; + T m_value_step; + size_t m_counter; + size_t m_ramp; + + public: + //! The line constructor. + /** The line constructor allocates and initialize the base classes. + */ + Line() + { + ; + } + + //! The destructor. + /** The destructor free the memory. + */ + ~Line() + { + ; + } + + //! Get the ramp value. + /** Get the ramp value. + @return The ramp value. + */ + inline size_t getRamp() const + { + return m_ramp; + } + + //! Get the current value. + /** Get the current value. + @return The current value. + */ + inline T getValue() const + { + return m_value_new; + } + + //! Set the ramp value. + /** Set the ramp value. + @param ramp The new value of the ramp. + */ + inline void setRamp(const size_t ramp) + { + m_ramp = std::max(ramp, (size_t)1); + } + + //! Set, linearly, the current value. + /** Set, linearly, the current value. + @param value The new value of the current value. + */ + inline void setValue(const T value) + { + m_value_new = value; + m_value_step = (m_value_new - m_value_old) / (T)m_ramp; + m_counter = 0; + } + + //! Set, directly, the current value. + /** Set, directly, the current value. + @param value The new value of the current value. + */ + inline void setValueDirect(const T value) + { + m_value_old = m_value_new = value; + m_value_step = 0.; + m_counter = 0; + } + + //! This method performs the count of the virtual points of the line. + /** This method performs the count of the virtual points of the line. + @return The old value of the counter. + */ + inline T process() + { + m_value_old += m_value_step; + if(m_counter++ >= m_ramp) + { + m_value_old = m_value_new; + m_value_step = 0.; + m_counter = 0; + } + return m_value_old; + } + }; + + template class PolarLines; + + template class PolarLines + { + + private: + const size_t m_number_of_sources; + T* m_values_old; + T* m_values_new; + T* m_values_step; + size_t m_counter; + size_t m_ramp; + + public: + //! The line constructor. + /** The line constructor allocates and initialize the base classes. + @param numberOfSources The number of sources. + */ + PolarLines(size_t numberOfSources) : + m_number_of_sources(numberOfSources) + { + m_values_old = Signal::alloc(m_number_of_sources * 2); + m_values_new = Signal::alloc(m_number_of_sources * 2); + m_values_step = Signal::alloc(m_number_of_sources * 2); + } + + //! The destructor. + /** The destructor free the memory. + */ + ~PolarLines() + { + Signal::free(m_values_old); + Signal::free(m_values_new); + Signal::free(m_values_step); + } + + //! Get the number of sources. + /** Get the number of sources. + @return The number of sources. + */ + inline size_t getNumberOfSources() const + { + return m_number_of_sources; + } + + //! Get the ramp value. + /** Get the ramp value. + @return The ramp value. + */ + inline size_t getRamp() const + { + return m_ramp; + } + + //! Get the radius of a source. + /** Get the radius of a source. + @param index The index of the source. + @return The radius of a source. + */ + inline T getRadius(const size_t index) const + { + return m_values_new[index]; + } + + //! Get the azimuth of a source. + /** Get the azimuth of a source. + @param index The index of the source. + @return The azimuth of a source. + */ + inline T getAzimuth(const size_t index) const + { + return m_values_new[m_number_of_sources +index]; + } + + //! Set the ramp value. + /** Set the ramp value. + @param ramp The new value of the ramp. + */ + inline void setRamp(const size_t ramp) + { + m_ramp = std::max(ramp, (size_t)1); + } + + //! Set, linearly, the radius of a source. + /** Set, linearly, the radius of a source. + @param index The index of the source. + @param radi The new value of the radius. + */ + inline void setRadius(const size_t index, const T radi) + { + m_values_new[index] = radi; + m_values_step[index] = (m_values_new[index] - m_values_old[index]) / (T)m_ramp; + m_counter = 0; + } + + //! Set, linearly, the azimuth of a source. + /** Set, linearly, the azimuth of a source. + @param index The index of the source. + @param azim The new value of the azimuth. + */ + inline void setAzimuth(const size_t index, const T azim) + { + m_values_new[index + m_number_of_sources] = math::wrap_two_pi(azim); + m_values_old[index + m_number_of_sources] = math::wrap_two_pi(m_values_old[index + m_number_of_sources]); + + T distance; + if(m_values_old[index + m_number_of_sources] > m_values_new[index + m_number_of_sources]) + distance = (m_values_old[index + m_number_of_sources] - m_values_new[index + m_number_of_sources]); + else + distance = (m_values_new[index + m_number_of_sources] - m_values_old[index + m_number_of_sources]); + + if(distance <= HOA_PI) + { + m_values_step[index + m_number_of_sources] = (m_values_new[index + m_number_of_sources] - m_values_old[index + m_number_of_sources]) / (T)m_ramp; + } + else + { + if(m_values_new[index + m_number_of_sources] > m_values_old[index + m_number_of_sources]) + { + m_values_step[index + m_number_of_sources] = ((m_values_new[index + m_number_of_sources] - HOA_2PI) - m_values_old[index + m_number_of_sources]) / (T)m_ramp; + } + else + { + m_values_step[index + m_number_of_sources] = ((m_values_new[index + m_number_of_sources] + HOA_2PI) - m_values_old[index + m_number_of_sources]) / (T)m_ramp; + } + } + m_counter = 0; + } + + //! Set, directly, the radius of a source. + /** Set, directly, the radius of a source. + @param index The index of the source. + @param radi The new value of the radius. + */ + inline void setRadiusDirect(const size_t index, const T radi) + { + m_values_old[index] = m_values_new[index] = radi; + m_values_step[index] = 0.; + m_counter = 0; + } + + //! Set, directly, the azimuth of a source. + /** Set, directly, the azimuth of a source. + @param index The index of the source. + @param azim The new value of the azimuth. + */ + inline void setAzimuthDirect(size_t index, const T azim) + { + m_values_old[index + m_number_of_sources] = m_values_new[index + m_number_of_sources] = azim; + m_values_step[index + m_number_of_sources] = 0.; + m_counter = 0; + } + + //! This method performs the count of the virtual points of the line. + /** This method performs the count of the virtual points of the line. + */ + void process(T* vector) + { + Signal::add(m_number_of_sources * 2, m_values_step, m_values_old); + if(m_counter++ >= m_ramp) + { + Signal::copy(m_number_of_sources * 2, m_values_new, m_values_old); + Signal::clear(m_number_of_sources * 2, m_values_step); + m_counter = 0; + } + Signal::copy(m_number_of_sources * 2, m_values_old, vector); + } + }; + + template class PolarLines + { + + private: + const size_t m_number_of_sources; + T* m_values_old; + T* m_values_new; + T* m_values_step; + size_t m_counter; + size_t m_ramp; + + public: + //! The line constructor. + /** The line constructor allocates and initialize the base classes. + @param numberOfSources The number of sources. + */ + PolarLines(size_t numberOfSources) : + m_number_of_sources(numberOfSources) + { + m_values_old = Signal::alloc(m_number_of_sources * 3); + m_values_new = Signal::alloc(m_number_of_sources * 3); + m_values_step = Signal::alloc(m_number_of_sources * 3); + } + + //! The destructor. + /** The destructor free the memory. + */ + ~PolarLines() + { + Signal::free(m_values_old); + Signal::free(m_values_new); + Signal::free(m_values_step); + } + + //! Get the number of sources. + /** Get the number of sources. + @return The number of sources. + */ + inline size_t getNumberOfSources() const + { + return m_number_of_sources; + } + + //! Get the ramp value. + /** Get the ramp value. + @return The ramp value. + */ + inline size_t getRamp() const + { + return m_ramp; + } + + //! Get the radius of a source. + /** Get the radius of a source. + @param index The index of the source. + @return The radius of a source. + */ + inline T getRadius(const size_t index) const + { + return m_values_new[index]; + } + + //! Get the azimuth of a source. + /** Get the azimuth of a source. + @param index The index of the source. + @return The azimuth of a source. + */ + inline T getAzimuth(const size_t index) const + { + return m_values_new[m_number_of_sources + index]; + } + + //! Get the elevation of a source. + /** Get the elevation of a source. + @param index The index of the source. + @return The elevation of a source. + */ + inline T getElevation(const size_t index) const + { + return m_values_new[m_number_of_sources * 2 + index]; + } + + //! Set the ramp value. + /** Set the ramp value. + @param ramp The new value of the ramp. + */ + inline void setRamp(const size_t ramp) + { + m_ramp = std::max(ramp, (size_t)1); + } + + //! Set, linearly, the radius of a source. + /** Set, linearly, the radius of a source. + @param index The index of the source. + @param radi The new value of the radius. + */ + inline void setRadius(const size_t index, const T radi) + { + m_values_new[index] = radi; + m_values_step[index] = (m_values_new[index] - m_values_old[index]) / (T)m_ramp; + m_counter = 0; + } + + //! Set, linearly, the azimuth of a source. + /** Set, linearly, the azimuth of a source. + @param index The index of the source. + @param azim The new value of the azimuth. + */ + inline void setAzimuth(const size_t index, const T azim) + { + m_values_new[index + m_number_of_sources] = math::wrap_two_pi(azim); + m_values_old[index + m_number_of_sources] = math::wrap_two_pi(m_values_old[index + m_number_of_sources]); + + T distance; + if(m_values_old[index + m_number_of_sources] > m_values_new[index + m_number_of_sources]) + distance = (m_values_old[index + m_number_of_sources] - m_values_new[index + m_number_of_sources]); + else + distance = (m_values_new[index + m_number_of_sources] - m_values_old[index + m_number_of_sources]); + + if(distance <= HOA_PI) + { + m_values_step[index + m_number_of_sources] = (m_values_new[index + m_number_of_sources] - m_values_old[index + m_number_of_sources]) / (T)m_ramp; + } + else + { + if(m_values_new[index + m_number_of_sources] > m_values_old[index + m_number_of_sources]) + { + m_values_step[index + m_number_of_sources] = ((m_values_new[index + m_number_of_sources] - HOA_2PI) - m_values_old[index + m_number_of_sources]) / (T)m_ramp; + } + else + { + m_values_step[index + m_number_of_sources] = ((m_values_new[index + m_number_of_sources] + HOA_2PI) - m_values_old[index + m_number_of_sources]) / (T)m_ramp; + } + } + m_counter = 0; + } + + //! Set, linearly, the elevation of a source. + /** Set, linearly, the elevation of a source. + @param index The index of the source. + @param elev The new value of the elevation. + */ + inline void setElevation(const size_t index, const T elev) + { + m_values_new[index + m_number_of_sources * 2] = math::wrap_pi(elev); + m_values_old[index + m_number_of_sources * 2] = math::wrap_pi(m_values_old[index + m_number_of_sources * 2]); + + T distance; + if(m_values_old[index + m_number_of_sources * 2] > m_values_new[index + m_number_of_sources * 2]) + distance = (m_values_old[index + m_number_of_sources * 2] - m_values_new[index + m_number_of_sources * 2]); + else + distance = (m_values_new[index + m_number_of_sources * 2] - m_values_old[index + m_number_of_sources * 2]); + + if(distance <= HOA_PI) + { + m_values_step[index + m_number_of_sources * 2] = (m_values_new[index + m_number_of_sources * 2] - m_values_old[index + m_number_of_sources * 2]) / (T)m_ramp; + } + else + { + if(m_values_new[index + m_number_of_sources * 2] > m_values_old[index + m_number_of_sources * 2]) + { + m_values_step[index + m_number_of_sources * 2] = ((m_values_new[index + m_number_of_sources * 2] - HOA_2PI) - m_values_old[index + m_number_of_sources * 2]) / (T)m_ramp; + } + else + { + m_values_step[index + m_number_of_sources * 2] = ((m_values_new[index + m_number_of_sources * 2] + HOA_2PI) - m_values_old[index + m_number_of_sources * 2]) / (T)m_ramp; + } + } + m_counter = 0; + } + + //! Set, directly, the radius of a source. + /** Set, directly, the radius of a source. + @param index The index of the source. + @param radi The new value of the radius. + */ + inline void setRadiusDirect(const size_t index, const T radi) + { + m_values_old[index] = m_values_new[index] = radi; + m_values_step[index] = 0.; + m_counter = 0; + } + + //! Set, directly, the azimuth of a source. + /** Set, directly, the azimuth of a source. + @param index The index of the source. + @param azim The new value of the azimuth. + */ + inline void setAzimuthDirect(const size_t index, const T azim) + { + m_values_old[index + m_number_of_sources] = m_values_new[index + m_number_of_sources] = azim; + m_values_step[index + m_number_of_sources] = 0.; + m_counter = 0; + } + + //! Set, directly, the elevation of a source. + /** Set, directly, the elevation of a source. + @param index The index of the source. + @param elev The new value of the elevation. + */ + inline void setElevationDirect(const size_t index, const T elev) + { + m_values_old[index + m_number_of_sources * 2] = m_values_new[index + m_number_of_sources * 2] = elev; + m_values_step[index + m_number_of_sources * 2] = 0.; + m_counter = 0; + } + + //! This method performs the count of the virtual points of the line. + /** This method performs the count of the virtual points of the line. + */ + void process(T* vector) + { + Signal::add(m_number_of_sources * 3, m_values_step, m_values_old); + if(m_counter++ >= m_ramp) + { + Signal::copy(m_number_of_sources * 3, m_values_new, m_values_old); + Signal::clear(m_number_of_sources * 3, m_values_step); + m_counter = 0; + } + Signal::copy(m_number_of_sources * 3, m_values_old, vector); + } + }; +} + +#endif + + diff --git a/ceammc/ext/src/spat/hoa_2d_scope.cpp b/ceammc/ext/src/spat/hoa_2d_scope.cpp new file mode 100644 index 0000000000..f607b285ba --- /dev/null +++ b/ceammc/ext/src/spat/hoa_2d_scope.cpp @@ -0,0 +1,303 @@ +/***************************************************************************** + * Copyright 2019 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#include "hoa_2d_scope.h" +#include "ceammc_convert.h" +#include "ceammc_ui.h" + +static const int MIN_SIZE = 20; +static const int HOA_DISPLAY_NPOINTS = 65; +static const float HOA_CONTRAST_DARKER = 0.2; +static const float HOA_CONTRAST_LIGHTER = 0.2; + +Hoa2dScope::Hoa2dScope() + : prop_order_(3) + , nharm_(0) + , prop_gain_(1) + , prop_view_(0) + , prop_refresh_(100) + , clock_(this, &Hoa2dScope::tick) + , start_clock_(false) + , harm_layer_(asEBox(), gensym("harm_layer")) +{ +} + +void Hoa2dScope::init(t_symbol* s, const AtomList& lst, bool usePresets) +{ + UIDspObject::init(s, lst, usePresets); + + // first positional argument handling + if (!lst.empty() && lst[0].isFloat()) + propSetOrder(clip(lst[0].asFloat(), HOA_MIN_ORDER, HOA_MAX_ORDER)); + + dspSetup(nharm_, 0); +} + +void Hoa2dScope::okSize(t_rect* newrect) +{ + newrect->width = pd_clip_min(newrect->width, MIN_SIZE); + newrect->height = pd_clip_min(newrect->height, MIN_SIZE); +} + +void Hoa2dScope::paint() +{ + drawBackground(); + drawHarmonics(); +} + +float Hoa2dScope::propOrder() const +{ + return prop_order_; +} + +void Hoa2dScope::propSetOrder(float v) +{ + auto order = clip(v, HOA_MIN_ORDER, HOA_MAX_ORDER); + + if (!scope_ || (order != scope_->getDecompositionOrder())) { + int dspState = canvas_suspend_dsp(); + scope_.reset(new Scope2d(order, HOA_DISPLAY_NPOINTS)); + prop_order_ = scope_->getDecompositionOrder(); + nharm_ = scope_->getNumberOfHarmonics(); + + in_buf_.resize(nharm_ * HOA_DEFAULT_BLOCK_SIZE); + + eobj_resize_inputs(asEBox(), nharm_); + canvas_update_dsp(); + canvas_resume_dsp(dspState); + } +} + +float Hoa2dScope::propView() const +{ + return prop_view_; +} + +void Hoa2dScope::propSetView(float angle) +{ + int dspState = canvas_suspend_dsp(); + prop_view_ = wrapFloatMax(angle, 360); + scope_->setViewRotation(0., 0., convert::degree2rad(prop_view_)); + scope_->computeRendering(); + canvas_resume_dsp(dspState); + + harm_layer_.invalidate(); + bg_layer_.invalidate(); + redraw(); +} + +void Hoa2dScope::tick() +{ + scope_->process(&in_buf_[0]); + + harm_layer_.invalidate(); + redrawInnerArea(); + if (canvas_dspstate) + clock_.delay(prop_refresh_); +} + +void Hoa2dScope::dspOn(double samplerate, long blocksize) +{ + in_buf_.resize(scope_->getNumberOfHarmonics() * blocksize); + + UIDspObject::dspOn(samplerate, blocksize); + start_clock_ = true; +} + +void Hoa2dScope::dspProcess(t_sample** ins, long n_ins, t_sample** outs, long n_outs, long sampleframes) +{ + for (long i = 0; i < n_ins; i++) + Signal::copy(size_t(sampleframes), ins[i], 1, &in_buf_[i], size_t(n_ins)); + + Signal::scale(size_t(n_ins * sampleframes), prop_gain_, &in_buf_[0]); + + if (start_clock_) { + start_clock_ = false; + clock_.delay(0); + } +} + +void Hoa2dScope::drawBackground() +{ + const auto r = rect(); + UIPainter p = bg_layer_.painter(r); + + if (!p) + return; + + t_rgba black = rgba_addContrast(prop_color_background, -HOA_CONTRAST_DARKER); + t_rgba white = rgba_addContrast(prop_color_background, HOA_CONTRAST_LIGHTER); + + const float center = width() / 2; + const float radius = center * 0.95; + + p.setMatrix({ 1, 0, 0, -1, center, center }); + + double angle, x1, x2, y1, y2, cosa, sina; + for (int i = 0; i < (prop_order_ * 2 + 2); i++) { + angle = ((double)(i - 0.5) / (prop_order_ * 2 + 2) * HOA_2PI); + cosa = cos(angle); + sina = sin(angle); + x1 = cosa * radius * 0.2; + y1 = sina * radius * 0.2; + x2 = cosa * radius; + y2 = sina * radius; + + p.moveTo(x1, y1); + p.drawLineTo(x2, y2); + p.setLineWidth(3); + p.setColor(white); + p.strokePreserve(); + + p.setColor(black); + p.setLineWidth(1); + p.stroke(); + } + + for (int i = 5; i > 0; i--) { + p.setLineWidth(3); + p.setColor(white); + p.drawCircle(0, 0, i * 0.2 * radius); + p.strokePreserve(); + + p.setLineWidth(1); + p.setColor(black); + p.drawCircle(0, 0, i * 0.2 * radius); + p.stroke(); + } +} + +void Hoa2dScope::drawHarmonics() +{ + const t_rect r = rect(); + UIPainter p = harm_layer_.painter(r); + if (!p) + return; + + const float center = width() * 0.5; + const float radius = center * 0.95; + + p.rotate(HOA_PI); + p.setLineWidth(1); + p.setMatrix({ 1, 0, 0, -1, center, center }); + + // positive harmonics + char pathLength = 0; + t_pt start_pt; + + p.setColor(prop_ph_color_); + p.setSmooth(ESMOOTH_BEZIER); + + int prev_x = -1; + int prev_y = -1; + + for (size_t i = 0; i < scope_->getNumberOfPoints(); i++) { + if (scope_->getPointValue(i) >= 0) { + if (!pathLength) { + start_pt.x = scope_->getPointAbscissa(i) * radius; + start_pt.y = scope_->getPointOrdinate(i) * radius; + p.moveTo(start_pt.x, start_pt.y); + pathLength++; + } else { + int x = scope_->getPointAbscissa(i) * radius; + int y = scope_->getPointOrdinate(i) * radius; + if (prev_x != x || prev_y != y) { + p.drawLineTo(x, y); + prev_x = x; + prev_y = y; + } + } + } + } + + p.closePath(); + if (pathLength) { + p.drawLineTo(start_pt.x, start_pt.y); + p.stroke(); + } + + // negative harmonics + pathLength = 0; + p.setColor(prop_nh_color_); + + prev_x = -1; + prev_y = -1; + + for (size_t i = 0; i < scope_->getNumberOfPoints(); i++) { + if (scope_->getPointValue(i) < 0) { + if (!pathLength) { + start_pt.x = scope_->getPointAbscissa(i) * radius; + start_pt.y = scope_->getPointOrdinate(i) * radius; + p.moveTo(start_pt.x, start_pt.y); + pathLength++; + } else { + int x = scope_->getPointAbscissa(i) * radius; + int y = scope_->getPointOrdinate(i) * radius; + if (prev_x != x || prev_y != y) { + p.drawLineTo(x, y); + prev_x = x; + prev_y = y; + } + } + } + } + + p.closePath(); + if (pathLength) { + p.drawLineTo(start_pt.x, start_pt.y); + p.stroke(); + } + + p.setSmooth(ESMOOTH_NONE); +} + +void Hoa2dScope::setup() +{ + static t_symbol* SYM_REFRESH = gensym("refresh"); + static t_symbol* SYM_MSEC = gensym("msec"); + + UIObjectFactory obj("hoa.scope~", EBOX_IGNORELOCKCLICK | EBOX_GROWLINK); + obj.setDefaultSize(120, 120); + + // hide some properties + obj.hideProperty("send"); + obj.hideProperty("receive"); + + // @order + obj.addIntProperty("order", _("Ambisonic Order"), HOA_DEFAULT_ORDER, &Hoa2dScope::prop_order_, "Ambisonic"); + obj.setPropertyAccessor("order", &Hoa2dScope::propOrder, &Hoa2dScope::propSetOrder); + obj.setPropertyRange("order", HOA_MIN_ORDER, HOA_MAX_ORDER); + + // @view + obj.addFloatProperty("view", _("View rotation"), 0, &Hoa2dScope::prop_view_, "Ambisonic"); + // obj.setPropertyRange("view", 0, 360); + obj.setPropertyAccessor("view", &Hoa2dScope::propView, &Hoa2dScope::propSetView); + + // @gain + obj.addFloatProperty("gain", _("Gain"), 1.f, &Hoa2dScope::prop_gain_, "Main"); + obj.setPropertyMin("gain", 0); + + // @refresh + obj.addIntProperty(SYM_REFRESH->s_name, _("Refresh time (ms)"), 100, &Hoa2dScope::prop_refresh_, _("Main")); + obj.setPropertyRange(SYM_REFRESH->s_name, 20, 1000); + obj.setPropertyUnits(SYM_REFRESH, SYM_MSEC); + + // @ph_color + obj.addColorProperty("ph_color", _("Positive Harmonics Color"), "1. 0. 0. 1.", &Hoa2dScope::prop_ph_color_); + obj.addColorProperty("nh_color", _("Negative Harmonics Color"), "0. 0. 1. 1.", &Hoa2dScope::prop_nh_color_); +} + +void setup_spat_hoa_scope2d() +{ + Hoa2dScope::setup(); +} diff --git a/ceammc/ext/src/spat/hoa_2d_scope.h b/ceammc/ext/src/spat/hoa_2d_scope.h new file mode 100644 index 0000000000..a85c1e35f4 --- /dev/null +++ b/ceammc/ext/src/spat/hoa_2d_scope.h @@ -0,0 +1,69 @@ +/***************************************************************************** + * Copyright 2019 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#ifndef HOA_2D_SCOPE_H +#define HOA_2D_SCOPE_H + +#include + +#include "ceammc_clock.h" +#include "ceammc_ui_dsp_object.h" +#include "hoa_common.h" +using namespace ceammc; + +class Hoa2dScope : public UIDspObject { + size_t nharm_; + std::unique_ptr scope_; + Buffer in_buf_; + int prop_order_; + float prop_gain_; + float prop_view_; + int prop_refresh_; + t_rgba prop_ph_color_; + t_rgba prop_nh_color_; + + ClockMemberFunction clock_; + bool start_clock_; + + UILayer harm_layer_; + +public: + Hoa2dScope(); + + void init(t_symbol* s, const AtomList& lst, bool usePresets); + + void okSize(t_rect* newrect); + void paint(); + + float propOrder() const; + void propSetOrder(float v); + float propView() const; + void propSetView(float angle); + + void tick(); + + // dsp + void dspOn(double samplerate, long blocksize); + void dspProcess(t_sample** ins, long n_ins, t_sample** outs, long n_outs, long sampleframes); + +public: + static void setup(); + +private: + void drawBackground(); + void drawHarmonics(); +}; + +void setup_spat_hoa_scope2d(); + +#endif // HOA_2D_SCOPE_H diff --git a/ceammc/ext/src/spat/hoa_common.h b/ceammc/ext/src/spat/hoa_common.h new file mode 100644 index 0000000000..50cff710f1 --- /dev/null +++ b/ceammc/ext/src/spat/hoa_common.h @@ -0,0 +1,95 @@ +/***************************************************************************** + * Copyright 2019 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#ifndef HOA_COMMON_H +#define HOA_COMMON_H + +#include + +// MSYS temp define hack +#ifdef _WIN32 +#ifndef _WINDOWS +#define _WINDOWS 1 +#endif +#endif +#include "Hoa.hpp" +// temporal fix: this file not exists in newest Hoa-Library-Light +#include "Hoa_Scope.hpp" +#include "Hoa_Tools.hpp" +#include "m_pd.h" + +#include "ceammc_sound_external.h" +using namespace ceammc; + +static const int HOA_MIN_ORDER = 1; +static const int HOA_MAX_ORDER = 63; +static const int HOA_DEFAULT_ORDER = 1; +static const int HOA_DEFAULT_BLOCK_SIZE = 64; + +typedef hoa::Optim Optim2d; +typedef hoa::Decoder Decoder2d; +typedef hoa::DecoderBinaural DecoderBinaural2d; +typedef hoa::DecoderIrregular DecoderIrregular2d; +typedef hoa::DecoderRegular DecoderRegular2d; +typedef hoa::Encoder Encoder2d; +typedef hoa::MultiEncoder MultiEncoder2d; +typedef hoa::PolarLines PolarLines2d; +typedef hoa::Rotate Rotate2d; +typedef hoa::Wider Wider2d; +typedef hoa::Scope Scope2d; + +typedef hoa::Signal Signal; +typedef std::vector Buffer; + +class HoaBase : public SoundExternal { +private: + IntPropertyClosedRange* order_; + +public: + HoaBase(const PdArgs& args) + : SoundExternal(args) + , order_(nullptr) + { + order_ = new IntPropertyClosedRange("@order", + positionalFloatArgument(0, HOA_DEFAULT_ORDER), HOA_MIN_ORDER, HOA_MAX_ORDER); + order_->info().setType(PropertyInfoType::INTEGER); + order_->info().setRange(HOA_MIN_ORDER, HOA_MAX_ORDER); + order_->info().setDefault(HOA_DEFAULT_ORDER); + createProperty(order_); + } + + void parseProperties() override + { + SoundExternal::parseProperties(); + order_->setReadonly(true); + } + + int order() const { return order_->value(); } + + void createSignalInlets(size_t n) + { + for (size_t i = numInputChannels(); i < n; i++) + createSignalInlet(); + } + + void createSignalOutlets(size_t n) + { + for (size_t i = 0; i < n; i++) + createSignalOutlet(); + } + +protected: + IntPropertyClosedRange* prop_order() { return order_; } +}; + +#endif // HOA_COMMON_H diff --git a/ceammc/ext/src/spat/hoa_connections.cpp b/ceammc/ext/src/spat/hoa_connections.cpp new file mode 100644 index 0000000000..783bd1537d --- /dev/null +++ b/ceammc/ext/src/spat/hoa_connections.cpp @@ -0,0 +1,212 @@ +/***************************************************************************** + * Copyright 2019 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#include "hoa_connections.h" +#include "ceammc_factory.h" + +#include + +HoaXlet::HoaXlet(const PdArgs& args) + : BaseObject(args) + , extra_(nullptr) +{ + extra_ = new IntPropertyMinEq("@index", positionalFloatArgument(0, 1), 1); + createProperty(extra_); +} + +HoaIn::HoaIn(const PdArgs& args) + : HoaXlet(args) +{ + createOutlet(); +} + +void HoaIn::onBang() +{ + bangTo(0); +} + +void HoaIn::onFloat(t_float v) +{ + floatTo(0, v); +} + +void HoaIn::onSymbol(t_symbol* s) +{ + symbolTo(0, s); +} + +void HoaIn::onList(const AtomList& l) +{ + listTo(0, l); +} + +void HoaIn::onAny(t_symbol* s, const AtomList& l) +{ + anyTo(0, s, l); +} + +HoaIn* HoaIn::fromObject(void* obj) +{ + if (!isA(obj)) + return nullptr; + + return reinterpret_cast::ObjectProxy*>(obj)->impl; +} + +bool HoaIn::isA(void* obj) +{ + return obj != nullptr + && ((t_object*)obj)->te_g.g_pd == ObjectFactory::classPointer(); +} + +HoaOut::HoaOut(const PdArgs& args) + : HoaXlet(args) + , outlet_(nullptr) +{ +} + +void HoaOut::onBang() +{ + if (outlet_) + outlet_bang(outlet_); +} + +void HoaOut::onFloat(t_float v) +{ + if (outlet_) + outlet_float(outlet_, v); +} + +void HoaOut::onSymbol(t_symbol* s) +{ + if (outlet_) + outlet_symbol(outlet_, s); +} + +void HoaOut::onList(const AtomList& l) +{ + if (outlet_) + outlet_list(outlet_, &s_list, l.size(), l.toPdData()); +} + +void HoaOut::onAny(t_symbol* s, const AtomList& l) +{ + if (outlet_) + outlet_anything(outlet_, s, l.size(), l.toPdData()); +} + +bool HoaOut::processAnyProps(t_symbol* sel, const AtomList& lst) +{ + return false; +} + +void HoaOut::setOutlet(t_outlet* x) +{ + outlet_ = x; +} + +HoaOut* HoaOut::fromObject(void* obj) +{ + if (!isA(obj)) + return nullptr; + + return reinterpret_cast::ObjectProxy*>(obj)->impl; +} + +bool HoaOut::isA(void* obj) +{ + return obj != nullptr + && ((t_object*)obj)->te_g.g_pd == ObjectFactory::classPointer(); +} + +HoaXletTilde::HoaXletTilde(const PdArgs& args) + : SoundExternal(args) + , extra_(nullptr) + , signal_(nullptr) +{ + extra_ = new IntPropertyMinEq("@extra", positionalFloatArgument(0, 0), 0); + createProperty(extra_); +} + +void HoaXletTilde::setSignal(t_sample* sig) +{ + signal_ = sig; +} + +void HoaXletTilde::processBlock(const t_sample** in, t_sample** out) +{ +} + +HoaInTilde::HoaInTilde(const PdArgs& args) + : HoaXletTilde(args) +{ + createSignalOutlet(); +} + +void HoaInTilde::setupDSP(t_signal** sp) +{ + if (signal_) + dsp_add_copy(signal_, sp[0]->s_vec, sp[0]->s_n); + else + dsp_add_zero(sp[0]->s_vec, sp[0]->s_n); +} + +HoaInTilde* HoaInTilde::fromObject(void* obj) +{ + if (!isA(obj)) + return nullptr; + + return reinterpret_cast::ObjectProxy*>(obj)->impl; +} + +bool HoaInTilde::isA(void* obj) +{ + return obj != nullptr + && ((t_object*)obj)->te_g.g_pd == ObjectFactory::classPointer(); +} + +HoaOutTilde::HoaOutTilde(const PdArgs& args) + : HoaXletTilde(args) +{ +} + +void HoaOutTilde::setupDSP(t_signal** sp) +{ + if (signal_) + dsp_add_plus(sp[0]->s_vec, signal_, signal_, sp[0]->s_n); + else + OBJ_LOG << "empty signal..."; +} + +HoaOutTilde* HoaOutTilde::fromObject(void* obj) +{ + if (!isA(obj)) + return nullptr; + + return reinterpret_cast::ObjectProxy*>(obj)->impl; +} + +bool HoaOutTilde::isA(void* obj) +{ + return obj != nullptr + && ((t_object*)obj)->te_g.g_pd == ObjectFactory::classPointer(); +} + +void setup_spat_hoa_connections() +{ + ObjectFactory hoa_in("hoa.in", OBJECT_FACTORY_NO_DEFAULT_INLET); + ObjectFactory hoa_out("hoa.out"); + + SoundExternalFactory hoa_in_tilde("hoa.in~", OBJECT_FACTORY_NO_DEFAULT_INLET); + SoundExternalFactory hoa_out_tilde("hoa.out~"); +} diff --git a/ceammc/ext/src/spat/hoa_connections.h b/ceammc/ext/src/spat/hoa_connections.h new file mode 100644 index 0000000000..b380bba024 --- /dev/null +++ b/ceammc/ext/src/spat/hoa_connections.h @@ -0,0 +1,100 @@ +/***************************************************************************** + * Copyright 2019 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#ifndef HOA_CONNECTIONS_H +#define HOA_CONNECTIONS_H + +#include "ceammc_object.h" +#include "ceammc_sound_external.h" + +using namespace ceammc; + +class HoaXlet : public BaseObject { + IntPropertyMinEq* extra_; + +public: + HoaXlet(const PdArgs& args); + int extra() const { return extra_->value(); } +}; + +class HoaIn : public HoaXlet { +public: + HoaIn(const PdArgs& args); + void onBang() final; + void onFloat(t_float v) final; + void onSymbol(t_symbol* s) final; + void onList(const AtomList& l) final; + void onAny(t_symbol* s, const AtomList& l) final; + +public: + static HoaIn* fromObject(void* obj); + static bool isA(void* obj); +}; + +class HoaOut : public HoaXlet { + t_outlet* outlet_; + +public: + HoaOut(const PdArgs& args); + void onBang() final; + void onFloat(t_float v) final; + void onSymbol(t_symbol* s) final; + void onList(const AtomList& l) final; + void onAny(t_symbol* s, const AtomList& l) final; + + bool processAnyProps(t_symbol* sel, const AtomList& lst) override; + + void setOutlet(t_outlet* x); + +public: + static HoaOut* fromObject(void* obj); + static bool isA(void* obj); +}; + +class HoaXletTilde : public SoundExternal { + IntPropertyMinEq* extra_; + +protected: + t_sample* signal_; + +public: + HoaXletTilde(const PdArgs& args); + int extra() const { return extra_->value(); } + void setSignal(t_sample* sig); + + void processBlock(const t_sample** in, t_sample** out) final; +}; + +class HoaInTilde : public HoaXletTilde { +public: + HoaInTilde(const PdArgs& args); + void setupDSP(t_signal** sp) final; + +public: + static HoaInTilde* fromObject(void* obj); + static bool isA(void* obj); +}; + +class HoaOutTilde : public HoaXletTilde { +public: + HoaOutTilde(const PdArgs& args); + void setupDSP(t_signal** sp) final; + +public: + static HoaOutTilde* fromObject(void* obj); + static bool isA(void* obj); +}; + +void setup_spat_hoa_connections(); + +#endif // HOA_CONNECTIONS_H diff --git a/ceammc/ext/src/spat/hoa_decoder.cpp b/ceammc/ext/src/spat/hoa_decoder.cpp new file mode 100644 index 0000000000..890d9b09ec --- /dev/null +++ b/ceammc/ext/src/spat/hoa_decoder.cpp @@ -0,0 +1,368 @@ +/***************************************************************************** + * Copyright 2019 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#include "hoa_decoder.h" +#include "ceammc_convert.h" +#include "ceammc_factory.h" + +static t_symbol* SYM_REGULAR; +static t_symbol* SYM_IRREGULAR; +static t_symbol* SYM_BINAURAL; +static t_symbol* SYM_PROP_MODE; + +template +constexpr bool is_in(T t, T v) +{ + return t == v; +} + +template +constexpr bool is_in(T t, T v, Args... args) +{ + return t == v || is_in(t, args...); +} + +HoaDecoder::HoaDecoder(const PdArgs& args) + : HoaBase(args) + , mode_(nullptr) + , plane_waves_(nullptr) + , crop_size_(0) +{ + mode_ = new SymbolEnumProperty("@mode", SYM_REGULAR); + mode_->appendEnum(SYM_IRREGULAR); + mode_->appendEnum(SYM_BINAURAL); + createProperty(mode_); + createProperty(new SymbolEnumAlias("@regular", mode_, SYM_REGULAR)); + createProperty(new SymbolEnumAlias("@irregular", mode_, SYM_IRREGULAR)); + createProperty(new SymbolEnumAlias("@binaural", mode_, SYM_BINAURAL)); + + plane_waves_ = new IntProperty("@nwaves", 0); + createProperty(plane_waves_); + + Property* pcrop = createCbProperty("@crop", &HoaDecoder::propCropSize, &HoaDecoder::propSetCropSize); + auto& pinfo = pcrop->info(); + pinfo.setDefault(0); + pinfo.setMin(0); + pinfo.setMax(512); + pinfo.setUnits(PropertyInfoUnits::SAMP); + pinfo.setType(PropertyInfoType::INTEGER); + + createCbProperty("@nharm", &HoaDecoder::propNumHarmonics); + property("@nharm")->info().setType(PropertyInfoType::INTEGER); + createCbProperty("@pw_x", &HoaDecoder::propPlaneWavesX); + createCbProperty("@pw_y", &HoaDecoder::propPlaneWavesY); + createCbProperty("@pw_z", &HoaDecoder::propPlaneWavesZ); + + property("@pw_x")->info().setUnits(PropertyInfoUnits::RAD); + property("@pw_y")->info().setUnits(PropertyInfoUnits::RAD); + property("@pw_z")->info().setUnits(PropertyInfoUnits::RAD); + + createCbProperty("@angles", &HoaDecoder::propAngles, &HoaDecoder::propSetAngles); + property("@angles")->info().setType(PropertyInfoType::LIST); + property("@angles")->info().setUnits(PropertyInfoUnits::DEG); + + createCbProperty("@offset", &HoaDecoder::propOffset, &HoaDecoder::propSetOffset); + property("@offset")->info().setType(PropertyInfoType::FLOAT); + property("@offset")->info().setUnits(PropertyInfoUnits::DEG); +} + +void HoaDecoder::parseMode() +{ + auto pos_arg = positionalSymbolArgument(1, nullptr); + if (pos_arg != nullptr) + mode_->setValue(pos_arg); + + mode_->setReadonly(true); +} + +void HoaDecoder::parsePlainWavesNum() +{ + const int NWAVES_ARG_IDX = 2; + + // num of plane waves ignored in binaural mode + if (mode_->value() == SYM_BINAURAL) { + plane_waves_->setValue(2); + } else if (mode_->value() == SYM_REGULAR) { + const int MIN_PW_COUNT = 2 * order() + 1; + const int DEFAULT = 2 * order() + 2; + + // property was not specified, try positional arg + if (plane_waves_->value() == 0) + plane_waves_->setValue(positionalFloatArgument(NWAVES_ARG_IDX, DEFAULT)); + + const auto N = plane_waves_->value(); + + if (N >= MIN_PW_COUNT) { + plane_waves_->setValue(N); + } else { + OBJ_ERR << "minimal number of plane waves for regular mode should be >= " + << MIN_PW_COUNT << ", setting to this value"; + plane_waves_->setValue(MIN_PW_COUNT); + } + } else if (mode_->value() == SYM_IRREGULAR) { + const int MIN_PW_COUNT = 1; + const int DEFAULT = 5; + + // property was not specified, try positional arg + if (plane_waves_->value() == 0) + plane_waves_->setValue(positionalFloatArgument(NWAVES_ARG_IDX, DEFAULT)); + + const auto N = plane_waves_->value(); + + if (N >= MIN_PW_COUNT) { + plane_waves_->setValue(N); + } else { + OBJ_ERR << "minimal number of plane waves for irregular mode should be >= " + << MIN_PW_COUNT << ", setting to this value"; + plane_waves_->setValue(MIN_PW_COUNT); + } + } else { + OBJ_ERR << "unknown mode: " << mode_->value(); + } + + plane_waves_->setReadonly(true); +} + +void HoaDecoder::parseProperties() +{ + HoaBase::parseProperties(); + + parseMode(); + parsePlainWavesNum(); + + initDecoder(); + + if (!init_offset_.empty()) + propSetOffset(init_offset_); + + if (!init_angles_.empty()) + propSetAngles(init_angles_); + + createSignalInlets(decoder_->getNumberOfHarmonics()); + createSignalOutlets(decoder_->getNumberOfPlanewaves()); + + in_buf_.resize(numInputChannels() * HOA_DEFAULT_BLOCK_SIZE); + out_buf_.resize(numOutputChannels() * HOA_DEFAULT_BLOCK_SIZE); +} + +void HoaDecoder::processBlock(const t_sample** in, t_sample** out) +{ + // not used +} + +void HoaDecoder::processCommon() +{ + const size_t NINS = numInputChannels(); + const size_t NOUTS = numOutputChannels(); + const size_t BS = blockSize(); + + t_sample** in = inputBlocks(); + t_sample** out = outputBlocks(); + + for (size_t i = 0; i < NINS; i++) { + Signal::copy(BS, &in[i][0], 1, &in_buf_[i], NINS); + } + + for (size_t i = 0; i < BS; i++) { + decoder_->process(&in_buf_[NINS * i], &out_buf_[NOUTS * i]); + } + + for (size_t i = 0; i < NOUTS; i++) { + Signal::copy(BS, &out_buf_[i], NOUTS, &out[i][0], 1); + } +} + +void HoaDecoder::processBinaural() +{ + t_sample** in_blocks = inputBlocks(); + t_sample** out_blocks = outputBlocks(); + DecoderBinaural2d* p = static_cast(decoder_.get()); + p->processBlock((const t_sample**)in_blocks, out_blocks); +} + +void HoaDecoder::setupDSP(t_signal** sp) +{ + SoundExternal::signalInit(sp); + + decoder_->prepare(blockSize()); + + if (mode_->value() == SYM_BINAURAL) { + dsp_add(dspPerformBinaural, 1, static_cast(this)); + } else { + dsp_add(dspPerformCommon, 1, static_cast(this)); + } +} + +void HoaDecoder::blockSizeChanged(size_t bs) +{ + in_buf_.resize(numInputChannels() * bs); + out_buf_.resize(numOutputChannels() * bs); +} + +void HoaDecoder::initDecoder() +{ + t_symbol* mode = mode_->value(); + if (mode == SYM_REGULAR) { + decoder_.reset(new DecoderRegular2d(order(), plane_waves_->value())); + decoder_->setPlanewavesRotation(0, 0, 0); + } else if (mode == SYM_IRREGULAR) { + decoder_.reset(new DecoderIrregular2d(order(), plane_waves_->value())); + } else if (mode == SYM_BINAURAL) { + DecoderBinaural2d* x = new DecoderBinaural2d(order()); + x->setCropSize(crop_size_); + // to assure limits + crop_size_ = x->getCropSize(); + decoder_.reset(x); + } else { + OBJ_ERR << "unknown mode: " << mode; + } +} + +AtomList HoaDecoder::propCropSize() const +{ + if (mode_->value() == SYM_BINAURAL) { + DecoderBinaural2d* p = static_cast(decoder_.get()); + return Atom(p->getCropSize()); + } else + return Atom(crop_size_); +} + +void HoaDecoder::propSetCropSize(const AtomList& lst) +{ + if (!checkArgs(lst, ARG_FLOAT)) { + OBJ_ERR << "crop size value expected: " << lst; + return; + } + + int v = lst.floatAt(0, 0); + if (v < 0) { + OBJ_ERR << "crop size should be >= 0"; + return; + } + + crop_size_ = v; + + if (mode_->value() == SYM_BINAURAL) { + DecoderBinaural2d* p = static_cast(decoder_.get()); + p->setCropSize(crop_size_); + // to assure limits + crop_size_ = p->getCropSize(); + } +} + +AtomList HoaDecoder::propPlaneWavesX() const +{ + auto N = decoder_->getNumberOfPlanewaves(); + AtomList res; + res.reserve(N); + for (size_t i = 0; i < N; i++) + res.append(decoder_->getPlanewaveAbscissa(i, true)); + + return res; +} + +AtomList HoaDecoder::propPlaneWavesY() const +{ + auto N = decoder_->getNumberOfPlanewaves(); + AtomList res; + res.reserve(N); + for (size_t i = 0; i < N; i++) + res.append(decoder_->getPlanewaveOrdinate(i, true)); + + return res; +} + +AtomList HoaDecoder::propPlaneWavesZ() const +{ + auto N = decoder_->getNumberOfPlanewaves(); + AtomList res; + res.reserve(N); + for (size_t i = 0; i < N; i++) + res.append(decoder_->getPlanewaveHeight(i, true)); + + return res; +} + +AtomList HoaDecoder::propNumHarmonics() const +{ + return Atom(decoder_->getNumberOfHarmonics()); +} + +AtomList HoaDecoder::propAngles() const +{ + auto N = decoder_->getNumberOfPlanewaves(); + AtomList res; + res.reserve(N); + for (size_t i = 0; i < N; i++) + res.append(Atom(convert::rad2degree(decoder_->getPlanewaveAzimuth(i, true)))); + + return res; +} + +void HoaDecoder::propSetAngles(const AtomList& lst) +{ + if (lst.empty()) { + OBJ_ERR << "angle list in degrees expected"; + return; + } + + if (decoder_) { + if (mode_->value() != SYM_IRREGULAR) { + OBJ_ERR << "not in irregular mode: can not set angles"; + return; + } + + auto N = std::min(decoder_->getNumberOfPlanewaves(), lst.size()); + for (size_t i = 0; i < N; i++) + decoder_->setPlanewaveAzimuth(i, convert::degree2rad(lst[i].asFloat())); + } else { + // on init stage + init_angles_ = lst; + } +} + +AtomList HoaDecoder::propOffset() const +{ + return Atom(convert::rad2degree(decoder_->getPlanewavesRotationZ())); +} + +void HoaDecoder::propSetOffset(const AtomList& lst) +{ + if (!checkArgs(lst, ARG_FLOAT)) { + OBJ_ERR << "offset angle in degrees expected: " << lst; + return; + } + + if (decoder_) { + if (mode_->value() == SYM_BINAURAL) { + OBJ_ERR << "can not set offset in binaural mode"; + return; + } + + decoder_->setPlanewavesRotation(0, 0, convert::degree2rad(lst[0].asFloat())); + } else { + // on init stage + init_offset_ = lst; + } +} + +void setup_spat_hoa_decoder() +{ + SYM_REGULAR = gensym("regular"); + SYM_IRREGULAR = gensym("irregular"); + SYM_BINAURAL = gensym("binaural"); + SYM_PROP_MODE = gensym("@mode"); + + SoundExternalFactory obj("hoa.2d.decoder~"); + obj.addAlias("hoa.decoder~"); +} diff --git a/ceammc/ext/src/spat/hoa_decoder.h b/ceammc/ext/src/spat/hoa_decoder.h new file mode 100644 index 0000000000..e0b743be3e --- /dev/null +++ b/ceammc/ext/src/spat/hoa_decoder.h @@ -0,0 +1,80 @@ +/***************************************************************************** + * Copyright 2019 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#ifndef HOA_DECODER_H +#define HOA_DECODER_H + +#include "hoa_common.h" + +#include + +class HoaDecoder : public HoaBase { + SymbolEnumProperty* mode_; + IntProperty* plane_waves_; + std::unique_ptr decoder_; + Buffer in_buf_; + Buffer out_buf_; + size_t crop_size_; + // decoder_ is not available while parsing properties + // this members store initial values + AtomList init_offset_; + AtomList init_angles_; + +public: + HoaDecoder(const PdArgs& args); + + void parseProperties() override; + void processBlock(const t_sample** in, t_sample** out) override; + void setupDSP(t_signal** sp) override; + void blockSizeChanged(size_t bs) override; + + AtomList propPlaneWavesX() const; + AtomList propPlaneWavesY() const; + AtomList propPlaneWavesZ() const; + AtomList propNumHarmonics() const; + + AtomList propCropSize() const; + void propSetCropSize(const AtomList& lst); + + AtomList propAngles() const; + void propSetAngles(const AtomList& lst); + + AtomList propOffset() const; + void propSetOffset(const AtomList& lst); + +private: + void processCommon(); + void processBinaural(); + + inline static t_int* dspPerformCommon(t_int* w) + { + HoaDecoder* ext = reinterpret_cast(w[1]); + ext->processCommon(); + return (w + 2); + } + + inline static t_int* dspPerformBinaural(t_int* w) + { + HoaDecoder* ext = reinterpret_cast(w[1]); + ext->processBinaural(); + return (w + 2); + } + + void initDecoder(); + void parseMode(); + void parsePlainWavesNum(); +}; + +void setup_spat_hoa_decoder(); + +#endif // HOA_DECODER_H diff --git a/ceammc/ext/src/spat/hoa_encoder.cpp b/ceammc/ext/src/spat/hoa_encoder.cpp new file mode 100644 index 0000000000..8684b01619 --- /dev/null +++ b/ceammc/ext/src/spat/hoa_encoder.cpp @@ -0,0 +1,59 @@ +/***************************************************************************** + * Copyright 2019 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#include "hoa_encoder.h" + +#include "ceammc_factory.h" +#include "hoa_common.h" + +HoaEncoder::HoaEncoder(const PdArgs& args) + : HoaBase(args) +{ +} + +void HoaEncoder::parseProperties() +{ + HoaBase::parseProperties(); + encoder_.reset(new Encoder2d(order())); + + createSignalInlets(2); + createSignalOutlets(encoder_->getNumberOfHarmonics()); + + signals_.resize(encoder_->getNumberOfHarmonics() * HOA_DEFAULT_BLOCK_SIZE); +} + +void HoaEncoder::processBlock(const t_sample** in, t_sample** out) +{ + const size_t BS = blockSize(); + const size_t NOUTS = numOutputChannels(); + + for (size_t i = 0; i < BS; i++) { + encoder_->setAzimuth(in[1][i]); + encoder_->process(in[0] + i, &signals_[NOUTS * i]); + } + + for (size_t i = 0; i < NOUTS; i++) { + Signal::copy(BS, &signals_[i], NOUTS, out[i], 1); + } +} + +void HoaEncoder::blockSizeChanged(size_t bs) +{ + signals_.resize(encoder_->getNumberOfHarmonics() * bs); +} + +void setup_spat_hoa_encoder() +{ + SoundExternalFactory obj("hoa.2d.encoder~"); + obj.addAlias("hoa.encoder~"); +} diff --git a/ceammc/ext/src/spat/hoa_encoder.h b/ceammc/ext/src/spat/hoa_encoder.h new file mode 100644 index 0000000000..3b19fd8811 --- /dev/null +++ b/ceammc/ext/src/spat/hoa_encoder.h @@ -0,0 +1,35 @@ +/***************************************************************************** + * Copyright 2019 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#ifndef HOA_ENCODER_H +#define HOA_ENCODER_H + +#include + +#include "hoa_common.h" + +class HoaEncoder : public HoaBase { + std::unique_ptr encoder_; + Buffer signals_; + +public: + HoaEncoder(const PdArgs& args); + + void processBlock(const t_sample** in, t_sample** out) override; + void parseProperties() override; + void blockSizeChanged(size_t bs) override; +}; + +void setup_spat_hoa_encoder(); + +#endif // HOA_ENCODER_H diff --git a/ceammc/ext/src/spat/hoa_map.cpp b/ceammc/ext/src/spat/hoa_map.cpp new file mode 100644 index 0000000000..4c88f152d9 --- /dev/null +++ b/ceammc/ext/src/spat/hoa_map.cpp @@ -0,0 +1,173 @@ +/***************************************************************************** + * Copyright 2019 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#include + +#include "ceammc_convert.h" +#include "ceammc_factory.h" +#include "hoa_map.h" + +HoaMap::HoaMap(const PdArgs& args) + : HoaBase(args) + , nins_(nullptr) + , ramp_(nullptr) +{ + nins_ = new IntPropertyMinEq("@nsrc", positionalFloatArgument(1, 1), 1); + createProperty(nins_); + + ramp_ = new RampProperty( + this, [](HoaMap* map, const AtomList& l) { + map->lines_->setRamp(l.floatAt(0, 0) / 1000. * sys_getsr()); + }, + "@ramp", 100, 0); + + createProperty(ramp_); +} + +void HoaMap::parseProperties() +{ + HoaBase::parseProperties(); + + nins_->setReadonly(true); + + map_.reset(new MultiEncoder2d(order(), nins_->value())); + lines_.reset(new PolarLines2d(map_->getNumberOfSources())); + lines_->setRamp(ramp_->value() / 1000. * sys_getsr()); + + for (size_t i = 0; i < map_->getNumberOfSources(); i++) { + lines_->setRadiusDirect(i, 1); + lines_->setAzimuthDirect(i, 0.); + } + + const size_t NINS = (nins_->value() == 1) ? 3 : nins_->value(); + createSignalInlets(NINS); + createSignalOutlets(map_->getNumberOfHarmonics()); + + in_buf_.resize(numInputChannels() * HOA_DEFAULT_BLOCK_SIZE); + out_buf_.resize(numOutputChannels() * HOA_DEFAULT_BLOCK_SIZE); + + lines_vec_.resize(map_->getNumberOfSources() * 2); +} + +void HoaMap::setupDSP(t_signal** sp) +{ + signalInit(sp); + + lines_->setRamp(ramp_->value() / 1000. * samplerate()); + + if (map_->getNumberOfSources() == 1) { + dsp_add(dspPerformIn1In2, 1, static_cast(this)); + } else { + dsp_add(dspPerformMultiSource, 1, static_cast(this)); + } +} + +void HoaMap::blockSizeChanged(size_t bs) +{ + in_buf_.resize(numInputChannels() * bs); + out_buf_.resize(numOutputChannels() * bs); +} + +void HoaMap::processBlock(const t_sample** in, t_sample** out) +{ +} + +void HoaMap::processMultiSource() +{ + const size_t NSRC = map_->getNumberOfSources(); + const size_t NINS = numInputChannels(); + const size_t NOUTS = numOutputChannels(); + const size_t BS = blockSize(); + + t_sample** in = inputBlocks(); + t_sample** out = outputBlocks(); + + for (size_t i = 0; i < NINS; i++) + Signal::copy(BS, &in[i][0], 1, &in_buf_[i], NINS); + + for (size_t i = 0; i < BS; i++) { + lines_->process(lines_vec_.data()); + + for (size_t j = 0; j < NSRC; j++) + map_->setRadius(j, lines_vec_[j]); + + for (size_t j = 0; j < NSRC; j++) + map_->setAzimuth(j, lines_vec_[j + NSRC]); + + map_->process(&in_buf_[NINS * i], &out_buf_[NOUTS * i]); + } + + for (size_t i = 0; i < NOUTS; i++) + Signal::copy(BS, &out_buf_[i], NOUTS, &out[i][0], 1); +} + +void HoaMap::processIn1In2() +{ + const size_t NOUTS = numOutputChannels(); + const size_t BS = blockSize(); + + t_sample** in = inputBlocks(); + t_sample** out = outputBlocks(); + + for (size_t i = 0; i < BS; i++) { + map_->setRadius(0, in[1][i]); + map_->setAzimuth(0, in[2][i]); + map_->process(&in[0][i], &out_buf_[NOUTS * i]); + } + + for (size_t i = 0; i < NOUTS; i++) + Signal::copy(BS, &out_buf_[i], NOUTS, &out[i][0], 1); +} + +void HoaMap::m_polar(t_symbol* s, const AtomList& l) +{ + if (!checkArgs(l, ARG_INT, ARG_FLOAT, ARG_FLOAT)) { + METHOD_ERR(s) << "IDX RADIUS ANGLE expected: " << l; + return; + } + + int idx = l[0].asInt(); + if (idx < 0 || idx >= (int)map_->getNumberOfSources()) { + METHOD_ERR(s) << "invalid source index: " << idx; + return; + } + + lines_->setRadius(idx, l[1].asFloat()); + lines_->setAzimuth(idx, l[2].asFloat() - M_PI_2); +} + +void HoaMap::m_mute(t_symbol* s, const AtomList& l) +{ + if (!checkArgs(l, ARG_NATURAL, ARG_BOOL)) { + METHOD_ERR(s) << "SRC_IDX STATE expected: " << l; + return; + } + + int idx = l[0].asInt(); + if (idx < 0 || idx >= (int)map_->getNumberOfSources()) { + METHOD_ERR(s) << "invalid source index: " << idx; + return; + } + + bool mute = l[1].asInt(); + map_->setMute(idx, mute); +} + +void setup_spat_hoa_map() +{ + SoundExternalFactory obj("hoa.2d.map~"); + obj.addAlias("hoa.map~"); + + obj.addMethod("polar", &HoaMap::m_polar); + obj.addMethod("mute", &HoaMap::m_mute); +} diff --git a/ceammc/ext/src/spat/hoa_map.h b/ceammc/ext/src/spat/hoa_map.h new file mode 100644 index 0000000000..98c891881a --- /dev/null +++ b/ceammc/ext/src/spat/hoa_map.h @@ -0,0 +1,67 @@ +/***************************************************************************** + * Copyright 2019 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#ifndef HOA_MAP_H +#define HOA_MAP_H + +#include "ceammc_property_extra.h" +#include "hoa_common.h" + +class HoaMap; +typedef LambdaCallProperty RampProperty; + +class HoaMap : public HoaBase { + IntPropertyMinEq* nins_; + RampProperty* ramp_; + + std::unique_ptr map_; + std::unique_ptr lines_; + + Buffer in_buf_; + Buffer out_buf_; + + std::vector lines_vec_; + +public: + HoaMap(const PdArgs& args); + + void parseProperties() final; + void setupDSP(t_signal** sp) final; + void blockSizeChanged(size_t bs) override; + void processBlock(const t_sample** in, t_sample** out) final; + + void processMultiSource(); + void processIn1In2(); + + void m_polar(t_symbol* s, const AtomList& l); + void m_mute(t_symbol* s, const AtomList& l); + +private: + static t_int* dspPerformMultiSource(t_int* w) + { + HoaMap* ext = reinterpret_cast(w[1]); + ext->processMultiSource(); + return (w + 2); + } + + static t_int* dspPerformIn1In2(t_int* w) + { + HoaMap* ext = reinterpret_cast(w[1]); + ext->processIn1In2(); + return (w + 2); + } +}; + +void setup_spat_hoa_map(); + +#endif // HOA_MAP_H diff --git a/ceammc/ext/src/spat/hoa_optim.cpp b/ceammc/ext/src/spat/hoa_optim.cpp new file mode 100644 index 0000000000..6297384bd2 --- /dev/null +++ b/ceammc/ext/src/spat/hoa_optim.cpp @@ -0,0 +1,123 @@ +/***************************************************************************** + * Copyright 2019 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#include "hoa_optim.h" +#include "ceammc_factory.h" + +#include + +static t_symbol* SYM_BASIC; +static t_symbol* SYM_MAXRE; +static t_symbol* SYM_INPHASE; + +template +class LambdaProperty : public Prop { + std::function fn_; + Owner* this_; + +public: + template + LambdaProperty(Owner* obj, const Fn& fn, Args... args) + : Prop(args...) + , this_(obj) + , fn_(fn) + { + static_assert(std::is_base_of::value, "not a Property subclass"); + } + + bool set(const AtomList& l) override + { + bool ok = Prop::set(l); + + if (ok) + fn_(this_, Prop::get()); + + return ok; + } +}; + +using HoaSymbolEnumCallback = LambdaProperty; + +HoaOptim::HoaOptim(const PdArgs& args) + : HoaBase(args) + , mode_(nullptr) +{ + mode_ = new HoaSymbolEnumCallback( + this, + [](HoaOptim* this_, const AtomList&) { this_->adjustMode(); }, + std::string("@mode"), + SYM_BASIC); + + mode_->appendEnum(SYM_MAXRE); + mode_->appendEnum(SYM_INPHASE); + createProperty(mode_); + + createProperty(new SymbolEnumAlias("@basic", mode_, SYM_BASIC)); + createProperty(new SymbolEnumAlias("@maxre", mode_, SYM_MAXRE)); + createProperty(new SymbolEnumAlias("@inphase", mode_, SYM_INPHASE)); +} + +void HoaOptim::parseProperties() +{ + HoaBase::parseProperties(); + + if (positionalSymbolArgument(1, nullptr)) + mode_->setValue(positionalSymbolArgument(1)); + + optim_.reset(new Optim2d(order())); + + adjustMode(); + + const size_t N = optim_->getNumberOfHarmonics(); + in_buf_.resize(N * HOA_DEFAULT_BLOCK_SIZE); + out_buf_.resize(N * HOA_DEFAULT_BLOCK_SIZE); + + createSignalInlets(N); + createSignalOutlets(N); +} + +void HoaOptim::processBlock(const t_sample** in, t_sample** out) +{ + const size_t NOUTS = numOutputChannels(); + const size_t NINS = numInputChannels(); + const size_t BS = blockSize(); + + for (size_t i = 0; i < NINS; i++) + Signal::copy(BS, &in[i][0], 1, &in_buf_[i], NINS); + + for (size_t i = 0; i < BS; i++) + optim_->process(&in_buf_[NINS * i], &out_buf_[NOUTS * i]); + + for (size_t i = 0; i < NOUTS; i++) + Signal::copy(BS, &out_buf_[i], NOUTS, &out[i][0], 1); +} + +void HoaOptim::adjustMode() +{ + if (mode_->value() == SYM_BASIC) + optim_->setMode(Optim2d::Basic); + else if (mode_->value() == SYM_MAXRE) + optim_->setMode(Optim2d::MaxRe); + else if (mode_->value() == SYM_INPHASE) + optim_->setMode(Optim2d::InPhase); +} + +void setup_spat_hoa_optim() +{ + SYM_BASIC = gensym("basic"); + SYM_MAXRE = gensym("maxre"); + SYM_INPHASE = gensym("inphase"); + + SoundExternalFactory obj("hoa.2d.optim~"); + obj.addAlias("hoa.optim~"); +} diff --git a/ceammc/ext/src/spat/hoa_optim.h b/ceammc/ext/src/spat/hoa_optim.h new file mode 100644 index 0000000000..85fe4c1739 --- /dev/null +++ b/ceammc/ext/src/spat/hoa_optim.h @@ -0,0 +1,38 @@ +/***************************************************************************** + * Copyright 2019 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#ifndef HOA_OPTIM_H +#define HOA_OPTIM_H + +#include "hoa_common.h" + +#include + +class HoaOptim : public HoaBase { + Buffer in_buf_; + Buffer out_buf_; + std::unique_ptr optim_; + SymbolEnumProperty* mode_; + +public: + HoaOptim(const PdArgs& args); + + void parseProperties() override; + void processBlock(const t_sample** in, t_sample** out) override; + + void adjustMode(); +}; + +void setup_spat_hoa_optim(); + +#endif // HOA_OPTIM_H diff --git a/ceammc/ext/src/spat/hoa_process.cpp b/ceammc/ext/src/spat/hoa_process.cpp new file mode 100644 index 0000000000..f8d1433661 --- /dev/null +++ b/ceammc/ext/src/spat/hoa_process.cpp @@ -0,0 +1,647 @@ +/***************************************************************************** + * Copyright 2019 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#include "hoa_process.h" +#include "ceammc_factory.h" +#include "ceammc_property_extra.h" +#include "fmt/format.h" + +#include +#include + +static const t_float YOFF = 30; + +t_symbol* HoaProcess::SYM_SWITCH; +t_symbol* HoaProcess::SYM_BLOCK; +t_symbol* HoaProcess::SYM_OBJ; +t_symbol* HoaProcess::SYM_HARMONICS; +t_symbol* HoaProcess::SYM_PLANEWAVES; +t_symbol* HoaProcess::SYM_2D; +t_symbol* HoaProcess::SYM_CANVAS; +t_symbol* HoaProcess::SYM_DSP; + +HoaProcess::HoaProcess(const PdArgs& args) + : SoundExternal(args) + , canvas_yoff_(10) + , domain_(nullptr) + , num_(nullptr) + , clock_(this, &HoaProcess::clockTick) +{ + domain_ = new SymbolEnumProperty("@domain", SYM_HARMONICS); + domain_->appendEnum(SYM_PLANEWAVES); + createProperty(domain_); + + num_ = new IntPropertyMinEq("@n", 0, 0); + createProperty(num_); +} + +void HoaProcess::parseProperties() +{ + try { + // handle position patch name + t_symbol* patch = positionalArguments().symbolAt(1, nullptr); + + // hangle positional mode arg + if (positionalSymbolArgument(2, nullptr)) + domain_->setValue(positionalSymbolArgument(2)); + + const auto ARG0 = positionalFloatArgument(0, -1); + + if (domain_->value() == SYM_HARMONICS) { + if (ARG0 > 0) + num_->setValue(ARG0); + else + throw std::invalid_argument("order required"); + } else if (domain_->value() == SYM_PLANEWAVES) { + if (ARG0 > 0) + num_->setValue(ARG0); + else + throw std::invalid_argument("number of planewaves required"); + } + + if (!init()) + throw std::runtime_error("can't init canvas"); + + if (!patch) + throw std::invalid_argument("bad argument, second argument must be a patch name"); + + AtomList patch_args = args().slice(3); + + if (domain_->value() == SYM_HARMONICS) { + if (!loadHarmonics(patch, patch_args)) { + throw std::runtime_error(fmt::format("can't load the patch {0}.pd", patch->s_name)); + } + } else { + if (!loadPlaneWaves(patch, patch_args)) { + throw std::runtime_error(fmt::format("can't load the patch {0}.pd", patch->s_name)); + } + } + + allocSignals(); + allocInlets(); + allocOutlets(); + } catch (std::exception& e) { + if (!args().empty()) + OBJ_ERR << e.what(); + else + OBJ_LOG << e.what(); // object without args - used in help + } + + // set prop readonly + num_->setReadonly(true); + domain_->setReadonly(true); + clock_.delay(5); +} + +bool HoaProcess::init() +{ + // canvas_ = canvas_new(NULL, gensym(""), 0, NULL); + // if (!canvas_) { + // OBJ_ERR << "can't create canvas"; + // return false; + // } + + // pd_popsym((t_pd*)canvas_); + // canvas_vis(canvas_, 0); + + return true; +} + +void HoaProcess::clockTick() +{ + for (auto& in : instances_) + in.loadBang(); +} + +size_t HoaProcess::calcHarmDegree2d(size_t index) +{ + return (index + index % 2) / 2ul; +} + +size_t HoaProcess::calcHarmDegree3d(size_t index) +{ + return (size_t)sqrt(double(index)); +} + +long HoaProcess::calcAzimuthalOrder2d(size_t index) +{ + return (long)((long)(index + index % 2l) / 2l) * (1l - (long)(index % 2) * 2l); +} + +long HoaProcess::calcAzimuthalOrder3d(size_t index) +{ + return (long)(index) - ((long)(sqrt((double)(index))) * ((long)(sqrt((double)(index))) + 1)); +} + +size_t HoaProcess::harmToIndex2d(size_t degree, long order) +{ + return std::abs(order) * 2 - (long)(order < 0); +} + +size_t HoaProcess::harmToIndex3d(size_t degree, long order) +{ + return (size_t)((long)(degree * (degree + 1)) + order); +} + +size_t HoaProcess::calcNumHarm2d(size_t order) +{ + return 2 * order + 1; +} + +size_t HoaProcess::calcNumHarm3d(size_t order) +{ + return (order + 1) * (order + 1); +} + +void HoaProcess::allocSignals() +{ + auto info = calcNumChannels(); + + for (size_t i = numInputChannels(); i < info.in.num_chan; i++) + createSignalInlet(); + + for (size_t i = 0; i < info.out.num_chan; i++) + createSignalOutlet(); +} + +void HoaProcess::allocInlets() +{ + size_t ninlets = 0; + + for (auto& in : instances_) + ninlets = std::max(ninlets, in.numControlInputs()); + + if (ninlets) { + ins_.resize(ninlets); + for (size_t i = 0; i < ninlets; i++) { + ins_[i].x_index = i + 1; + ins_[i].x_pd = process_inlet_class(); + ins_[i].x_owner = this; + inlet_new(owner(), &(ins_[i].x_pd), 0, 0); + } + } +} + +void HoaProcess::allocOutlets() +{ + size_t noutlets = 0; + for (auto& in : instances_) + noutlets = std::max(noutlets, in.numControlOutputs()); + + for (size_t i = 0; i < noutlets; i++) { + t_outlet* outlet = createOutlet(); + + for (auto& in : instances_) + in.setOutlet(outlet, i + 1); + } +} + +HoaProcess::InOutInfo HoaProcess::calcNumChannels() const +{ + bool hasin = false, hasout = false; + size_t nextra_ins = 0, nextra_outs = 0; + + for (auto& in : instances_) { + hasin = std::max(hasin, in.hasStaticInputSignal()); + hasout = std::max(hasout, in.hasStaticOutputSignal()); + nextra_ins = std::max(nextra_ins, in.numExtraSignalInputs()); + nextra_outs = std::max(nextra_outs, in.numExtraSignalOutputs()); + } + + const size_t N = instances_.size(); + const size_t NSTATIC_IN = N * (hasin ? 1 : 0); + const size_t NSTATIC_OUT = N * (hasout ? 1 : 0); + + return { + { NSTATIC_IN + nextra_ins, NSTATIC_IN, nextra_ins, hasin }, + { NSTATIC_OUT + nextra_outs, NSTATIC_OUT, nextra_outs, hasout } + }; +} + +void HoaProcess::sendToN(std::function fn, size_t inst_idx) +{ + if (inst_idx >= instances_.size()) { + OBJ_ERR << "invalid instance index: " << inst_idx; + return; + } + + fn(&instances_[inst_idx]); +} + +void HoaProcess::sendToAll(std::function fn) +{ + for (auto& inst : instances_) + fn(&inst); +} + +void HoaProcess::sendToRange(std::function fn, size_t from, size_t to) +{ + if (from > to) { + OBJ_ERR << "start index should be less equal then last: " << from << ' ' << to; + return; + } + + if (from >= instances_.size()) { + OBJ_ERR << "invalid instance start index: " << from; + return; + } + + const size_t N = std::min(to + 1, instances_.size()); + + for (size_t i = from; i < N; i++) + fn(&instances_[i]); +} + +void HoaProcess::sendToLessThen(std::function fn, size_t inst_idx) +{ + const size_t N = std::min(inst_idx, instances_.size()); + + for (size_t i = 0; i < N; i++) + fn(&instances_[i]); +} + +void HoaProcess::sendToGreaterThen(std::function fn, size_t inst_idx) +{ + if ((inst_idx + 1) >= instances_.size()) { + OBJ_ERR << "invalid instance index: " << inst_idx; + return; + } + + for (size_t i = inst_idx + 1; i < instances_.size(); i++) + fn(&instances_[i]); +} + +void HoaProcess::sendToGreaterEq(std::function fn, size_t inst_idx) +{ + if (inst_idx >= instances_.size()) { + OBJ_ERR << "invalid instance index: " << inst_idx; + return; + } + + for (size_t i = inst_idx; i < instances_.size(); i++) + fn(&instances_[i]); +} + +void HoaProcess::sendBangToInstance(size_t inst_idx, size_t inlet_idx) +{ + sendToN([=](ProcessInstance* p) { p->bangTo(inlet_idx); }, inst_idx); +} + +void HoaProcess::sendBangToAll(size_t inlet_idx) +{ + sendToAll([=](ProcessInstance* p) { p->bangTo(inlet_idx); }); +} + +void HoaProcess::sendBangToRange(size_t from, size_t to, size_t inlet_idx) +{ + sendToRange([=](ProcessInstance* p) { p->bangTo(inlet_idx); }, from, to); +} + +void HoaProcess::sendBangToLessThen(size_t inst_idx, size_t inlet_idx) +{ + sendToLessThen([=](ProcessInstance* p) { p->bangTo(inlet_idx); }, inst_idx); +} + +void HoaProcess::sendBangToGreaterEq(size_t inst_idx, size_t inlet_idx) +{ + sendToGreaterEq([=](ProcessInstance* p) { p->bangTo(inlet_idx); }, inst_idx); +} + +void HoaProcess::sendFloatToInstance(size_t inst_idx, size_t inlet_idx, t_float v) +{ + sendToN([=](ProcessInstance* p) { p->floatTo(inlet_idx, v); }, inst_idx); +} + +void HoaProcess::sendFloatToAll(size_t inlet_idx, t_float v) +{ + sendToAll([=](ProcessInstance* p) { p->floatTo(inlet_idx, v); }); +} + +void HoaProcess::sendFloatToLessThen(size_t inst_idx, size_t inlet_idx, t_float v) +{ + sendToLessThen([=](ProcessInstance* p) { p->floatTo(inlet_idx, v); }, inst_idx); +} + +void HoaProcess::sendFloatToGreaterEq(size_t inst_idx, size_t inlet_idx, t_float v) +{ + sendToGreaterEq([=](ProcessInstance* p) { p->floatTo(inlet_idx, v); }, inst_idx); +} + +void HoaProcess::sendFloatToRange(size_t from, size_t to, size_t inlet_idx, t_float v) +{ + sendToRange([=](ProcessInstance* p) { p->floatTo(inlet_idx, v); }, from, to); +} + +void HoaProcess::sendSymbolToInstance(size_t inst_idx, size_t inlet_idx, t_symbol* s) +{ + sendToN([=](ProcessInstance* p) { p->symbolTo(inlet_idx, s); }, inst_idx); +} + +void HoaProcess::sendSymbolToAll(size_t inlet_idx, t_symbol* s) +{ + sendToAll([=](ProcessInstance* p) { p->symbolTo(inlet_idx, s); }); +} + +void HoaProcess::sendSymbolToLessThen(size_t inst_idx, size_t inlet_idx, t_symbol* s) +{ + sendToLessThen([=](ProcessInstance* p) { p->symbolTo(inlet_idx, s); }, inst_idx); +} + +void HoaProcess::sendSymbolToGreaterEq(size_t inst_idx, size_t inlet_idx, t_symbol* s) +{ + sendToGreaterEq([=](ProcessInstance* p) { p->symbolTo(inlet_idx, s); }, inst_idx); +} + +void HoaProcess::sendSymbolToRange(size_t from, size_t to, size_t inlet_idx, t_symbol* s) +{ + sendToRange([=](ProcessInstance* p) { p->symbolTo(inlet_idx, s); }, from, to); +} + +void HoaProcess::sendListToInstance(size_t inst_idx, size_t inlet_idx, const AtomList& l) +{ + sendToN([&l, &inlet_idx](ProcessInstance* p) { p->listTo(inlet_idx, l); }, inst_idx); +} + +void HoaProcess::sendListToAll(size_t inlet_idx, const AtomList& l) +{ + sendToAll([&l, &inlet_idx](ProcessInstance* p) { p->listTo(inlet_idx, l); }); +} + +void HoaProcess::sendListToLessThen(size_t inst_idx, size_t inlet_idx, const AtomList& l) +{ + sendToLessThen([&l, &inlet_idx](ProcessInstance* p) { p->listTo(inlet_idx, l); }, inst_idx); +} + +void HoaProcess::sendListToGreaterEq(size_t inst_idx, size_t inlet_idx, const AtomList& l) +{ + sendToGreaterEq([&l, &inlet_idx](ProcessInstance* p) { p->listTo(inlet_idx, l); }, inst_idx); +} + +void HoaProcess::sendListToRange(size_t from, size_t to, size_t inlet_idx, const AtomList& l) +{ + sendToRange([=](ProcessInstance* p) { p->listTo(inlet_idx, l); }, from, to); +} + +void HoaProcess::sendListToSpread(size_t from, size_t inlet_idx, const AtomList& l) +{ + const auto N = std::min(l.size() + from, instances_.size()); + + for (size_t i = from; i < N; i++) { + const auto& a = l[i - from]; + ProcessInstance& inst = instances_[i]; + if (a.isFloat()) + inst.floatTo(inlet_idx, a.asFloat()); + else if (a.isSymbol()) + inst.symbolTo(inlet_idx, a.asSymbol()); + } +} + +void HoaProcess::sendAnyToInstance(size_t inst_idx, size_t inlet_idx, t_symbol* s, const AtomList& l) +{ + sendToN([&l, &inlet_idx, s](ProcessInstance* p) { p->anyTo(inlet_idx, s, l); }, inst_idx); +} + +void HoaProcess::sendAnyToAll(size_t inlet_idx, t_symbol* s, const AtomList& l) +{ + sendToAll([&l, &inlet_idx, s](ProcessInstance* p) { p->anyTo(inlet_idx, s, l); }); +} + +void HoaProcess::sendAnyToLessThen(size_t inst_idx, size_t inlet_idx, t_symbol* s, const AtomList& l) +{ + sendToLessThen([&l, &inlet_idx, s](ProcessInstance* p) { p->anyTo(inlet_idx, s, l); }, inst_idx); +} + +void HoaProcess::sendAnyToGreaterEq(size_t inst_idx, size_t inlet_idx, t_symbol* s, const AtomList& l) +{ + sendToGreaterEq([&l, &inlet_idx, s](ProcessInstance* p) { p->anyTo(inlet_idx, s, l); }, inst_idx); +} + +void HoaProcess::sendAnyToRange(size_t from, size_t to, size_t inlet_idx, t_symbol* s, const AtomList& l) +{ + sendToRange([=](ProcessInstance* p) { p->anyTo(inlet_idx, s, l); }, from, to); +} + +void HoaProcess::sendAnyToSpread(size_t from, size_t inlet_idx, t_symbol* s, const AtomList& l) +{ + const auto N = std::min(l.size() + from, instances_.size()); + + for (size_t i = from; i < N; i++) + instances_[i].anyTo(inlet_idx, s, l[i - from]); +} + +bool HoaProcess::loadHarmonics(t_symbol* name, const AtomList& patch_args) +{ + const size_t NINSTANCE = calcNumHarm2d(num_->value()); + + instances_.assign(NINSTANCE, ProcessInstance()); + + AtomList load_args; + load_args.append(Atom(SYM_2D)); + load_args.append(Atom(SYM_HARMONICS)); + load_args.append(Atom(num_->value())); // decomposition order + load_args.append(Atom()); // harmonic index (0, 1, 1, 2, 2..) + load_args.append(Atom()); // harmonic order (0, -1, 1, -2, 2..) + load_args.append(patch_args); + + for (size_t i = 0; i < NINSTANCE; i++) { + load_args[3].setFloat(calcHarmDegree2d(i), true); + load_args[4].setFloat(calcAzimuthalOrder2d(i), true); + + if (!instances_[i].init(name, load_args)) { + instances_.clear(); + return false; + } + } + + return true; +} + +bool HoaProcess::loadPlaneWaves(t_symbol* name, const AtomList& patch_args) +{ + const size_t NINSTANCE = num_->value(); + instances_.assign(NINSTANCE, ProcessInstance()); + + AtomList load_args; + load_args.append(Atom(SYM_2D)); + load_args.append(Atom(SYM_PLANEWAVES)); + load_args.append(Atom(NINSTANCE)); // number of channels + load_args.append(Atom()); // channel index + load_args.append(Atom()); // channel index + load_args.append(patch_args); + + for (size_t i = 0; i < NINSTANCE; i++) { + load_args[3].setFloat(i, true); + load_args[4].setFloat(i, true); + + if (!instances_[i].init(name, load_args)) { + instances_.clear(); + return false; + } + } + + return true; +} + +void HoaProcess::processBlock(const t_sample** in, t_sample** out) +{ + const size_t NINS = std::min(numInputChannels(), in_buf_.size()); + const size_t NOUTS = std::min(numOutputChannels(), out_buf_.size()); + const size_t BS = blockSize(); + + std::fill(out_buf_.begin(), out_buf_.end(), 0); + + for (size_t i = 0; i < NINS; i++) { + memcpy(&in_buf_[i * BS], in[i], BS * sizeof(t_sample)); + } + + for (auto& i : instances_) + i.dspCalc(); + + for (size_t i = 0; i < NOUTS; i++) { + memcpy(out[i], &out_buf_[i * BS], BS * sizeof(t_sample)); + } +} + +void HoaProcess::setupDSP(t_signal** sp) +{ + SoundExternal::setupDSP(sp); + + const size_t BS = (size_t)sp[0]->s_n; + const size_t NINST = instances_.size(); + auto info = calcNumChannels(); + + if (info.in.num_chan > 0) { + in_buf_.resize(info.in.num_chan * BS); + + if (info.in.has_static_ch) { + for (size_t i = 0; i < NINST; i++) { + instances_[i].setInletBuffer(&in_buf_[i * BS], 0); + } + } + + if (info.in.num_extra_chan) { + size_t offset = info.in.num_static_chan; + for (size_t j = 0; j < info.in.num_extra_chan; ++j) { + t_sample* inbuf = &in_buf_[(offset + j) * BS]; + + for (size_t i = 0; i < NINST; ++i) { + instances_[i].setInletBuffer(inbuf, j + 1); + } + } + } + } + + if (info.out.num_chan > 0) { + out_buf_.resize(info.out.num_chan * BS); + + if (info.out.has_static_ch) { + for (size_t i = 0; i < NINST; ++i) { + size_t nsamples = i * BS; + instances_[i].setOutletBuffer(&out_buf_[nsamples], 0); + } + } + + if (info.out.num_extra_chan > 0) { + size_t offset = info.out.num_static_chan; + for (size_t j = 0; j < info.out.num_extra_chan; ++j) { + t_sample* outbuf = &out_buf_[(offset + j) * BS]; + + for (size_t i = 0; i < NINST; ++i) { + instances_[i].setOutletBuffer(outbuf, j + 1); + } + } + } + } + + for (auto& i : instances_) + i.canvas().setupDsp(); +} + +void HoaProcess::onClick(t_floatarg xpos, t_floatarg ypos, t_floatarg shift, t_floatarg ctrl, t_floatarg alt) +{ + if (instances_.size() > 0) + instances_.front().show(); +} + +void HoaProcess::m_open(t_symbol* m, const AtomList& lst) +{ + if (!checkArgs(lst, ARG_FLOAT, m)) + return; + + t_float v = lst.floatAt(0, 0); + size_t idx = 0; + + if (v < 0) { // open all + for (auto& in : instances_) + in.show(); + } else { + idx = v; + if (idx >= instances_.size()) { + METHOD_ERR(m) << "invalid index: " << idx << ", should be < " << instances_.size(); + return; + } + + instances_[idx].show(); + } +} + +void HoaProcess::m_dsp_on(t_symbol* m, const AtomList& lst) +{ + static t_symbol* SYM_ALL = gensym("all"); + auto usage = [this, m]() { + METHOD_DBG(m) << "usage: \n" + "\t all 1|0 - to switch on/off all instances or\n" + "\t INST_IDX 1|0 - to switch on/off specified instance"; + }; + + if (lst.size() != 2) { + usage(); + return; + } + + if (lst.size() == 2 && lst[0].isSymbol() && lst[1].isFloat()) { + if (lst[0].asSymbol() == SYM_ALL) { + bool v = (lst[1].asInt() != 0); + for (auto& i : instances_) + i.dspOn(v); + } else + usage(); + } else if (lst.size() == 2 && lst[0].isFloat() && lst[1].isFloat()) { + auto idx = lst[0].asInt(); + auto v = lst[1].asInt(); + if (idx < 0 || idx >= instances_.size()) { + METHOD_ERR(m) << "invalid instance index: " << idx; + return; + } + + instances_[idx].dspOn(v != 0); + } else + usage(); +} + +void setup_spat_hoa_process() +{ + HoaProcess::SYM_SWITCH = gensym("switch~"); + HoaProcess::SYM_BLOCK = gensym("block~"); + HoaProcess::SYM_CANVAS = gensym("canvas"); + HoaProcess::SYM_OBJ = gensym("obj"); + HoaProcess::SYM_HARMONICS = gensym("harmonics"); + HoaProcess::SYM_PLANEWAVES = gensym("planewaves"); + HoaProcess::SYM_2D = gensym("2d"); + HoaProcess::SYM_DSP = gensym("dsp"); + + SoundExternalFactory obj("hoa.process~"); + obj.useClick(); + obj.addMethod("open", &HoaProcess::m_open); + obj.addMethod("on", &HoaProcess::m_dsp_on); +} diff --git a/ceammc/ext/src/spat/hoa_process.h b/ceammc/ext/src/spat/hoa_process.h new file mode 100644 index 0000000000..a8d433d302 --- /dev/null +++ b/ceammc/ext/src/spat/hoa_process.h @@ -0,0 +1,145 @@ +/***************************************************************************** + * Copyright 2019 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#ifndef HOA_PROCESS_H +#define HOA_PROCESS_H + +#include "ceammc_clock.h" +#include "hoa_common.h" +#include "hoa_connections.h" +#include "hoa_process_inlet.h" +#include "hoa_process_instance.h" + +#include + +typedef void (*t_bangmethod)(t_pd* x); + +class HoaProcess : public SoundExternal { + std::vector instances_; + std::vector ins_; + + t_float canvas_yoff_; + + Buffer in_buf_; + Buffer out_buf_; + + SymbolEnumProperty* domain_; + IntPropertyMinEq* num_; + + // used to send loadbang to instances + ClockMemberFunction clock_; + +public: + HoaProcess(const PdArgs& args); + + void parseProperties() override; + void processBlock(const t_sample** in, t_sample** out) override; + void setupDSP(t_signal** sp) final; + + void onClick(t_floatarg xpos, t_floatarg ypos, t_floatarg shift, t_floatarg ctrl, t_floatarg alt) override; + void m_open(t_symbol* m, const AtomList& lst); + void m_dsp_on(t_symbol* m, const AtomList& lst); + +private: + bool init(); + void clockTick(); + + bool loadHarmonics(t_symbol* name, const AtomList& patch_args); + bool loadPlaneWaves(t_symbol* name, const AtomList& patch_args); + + void allocSignals(); + void allocInlets(); + void allocOutlets(); + + struct ChannelInfo { + size_t num_chan; + size_t num_static_chan; + size_t num_extra_chan; + bool has_static_ch; + }; + + struct InOutInfo { + ChannelInfo in, out; + }; + + InOutInfo calcNumChannels() const; + +public: + void sendToN(std::function fn, size_t inst_idx); + void sendToAll(std::function fn); + void sendToRange(std::function fn, size_t from, size_t to); + void sendToLessThen(std::function fn, size_t inst_idx); + void sendToGreaterThen(std::function fn, size_t inst_idx); + void sendToGreaterEq(std::function fn, size_t inst_idx); + + void sendBangToInstance(size_t inst_idx, size_t inlet_idx); + void sendBangToAll(size_t inlet_idx); + void sendBangToRange(size_t from, size_t to, size_t inlet_idx); + void sendBangToLessThen(size_t inst_idx, size_t inlet_idx); + void sendBangToGreaterEq(size_t inst_idx, size_t inlet_idx); + + void sendFloatToInstance(size_t inst_idx, size_t inlet_idx, t_float v); + void sendFloatToAll(size_t inlet_idx, t_float v); + void sendFloatToLessThen(size_t inst_idx, size_t inlet_idx, t_float v); + void sendFloatToGreaterEq(size_t inst_idx, size_t inlet_idx, t_float v); + void sendFloatToRange(size_t from, size_t to, size_t inlet_idx, t_float v); + + void sendSymbolToInstance(size_t inst_idx, size_t inlet_idx, t_symbol* s); + void sendSymbolToAll(size_t inlet_idx, t_symbol* s); + void sendSymbolToLessThen(size_t inst_idx, size_t inlet_idx, t_symbol* s); + void sendSymbolToGreaterEq(size_t inst_idx, size_t inlet_idx, t_symbol* s); + void sendSymbolToRange(size_t from, size_t to, size_t inlet_idx, t_symbol* s); + + void sendListToInstance(size_t inst_idx, size_t inlet_idx, const AtomList& l); + void sendListToAll(size_t inlet_idx, const AtomList& l); + void sendListToLessThen(size_t inst_idx, size_t inlet_idx, const AtomList& l); + void sendListToGreaterEq(size_t inst_idx, size_t inlet_idx, const AtomList& l); + void sendListToRange(size_t from, size_t to, size_t inlet_idx, const AtomList& l); + void sendListToSpread(size_t from, size_t inlet_idx, const AtomList& l); + + void sendAnyToInstance(size_t inst_idx, size_t inlet_idx, t_symbol* s, const AtomList& l); + void sendAnyToAll(size_t inlet_idx, t_symbol* s, const AtomList& l); + void sendAnyToLessThen(size_t inst_idx, size_t inlet_idx, t_symbol* s, const AtomList& l); + void sendAnyToGreaterEq(size_t inst_idx, size_t inlet_idx, t_symbol* s, const AtomList& l); + void sendAnyToRange(size_t from, size_t to, size_t inlet_idx, t_symbol* s, const AtomList& l); + void sendAnyToSpread(size_t inst_idx, size_t inlet_idx, t_symbol* s, const AtomList& l); + +public: + static t_symbol* SYM_SWITCH; + static t_symbol* SYM_BLOCK; + static t_symbol* SYM_OBJ; + static t_symbol* SYM_HARMONICS; + static t_symbol* SYM_PLANEWAVES; + static t_symbol* SYM_2D; + static t_symbol* SYM_CANVAS; + static t_symbol* SYM_DSP; + + static size_t calcHarmDegree2d(size_t index); + static size_t calcHarmDegree3d(size_t index); + static long calcAzimuthalOrder2d(size_t index); + static long calcAzimuthalOrder3d(size_t index); + static size_t calcNumHarm2d(size_t order); + static size_t calcNumHarm3d(size_t order); + + static size_t harmToIndex2d(size_t degree, long order); + static size_t harmToIndex3d(size_t degree, long order); + +public: + // only for tests + Buffer& inputBuffer() { return in_buf_; } + Buffer& outputBuffer() { return out_buf_; } +}; + +void setup_spat_hoa_process(); + +#endif // HOA_PROCESS_H diff --git a/ceammc/ext/src/spat/hoa_process_inlet.cpp b/ceammc/ext/src/spat/hoa_process_inlet.cpp new file mode 100644 index 0000000000..d260562a1b --- /dev/null +++ b/ceammc/ext/src/spat/hoa_process_inlet.cpp @@ -0,0 +1,362 @@ +/***************************************************************************** + * Copyright 2019 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#include "hoa_process_inlet.h" +#include "ceammc_maybe.h" +#include "hoa_process.h" + +#include +#include +#include +#include +#include +#include + +enum class TargetType { + NONE = 0, + ERROR, + ALL, + EQ, + GT, + LT, + RANGE, + SPREAD +}; + +struct t_target { + uint8_t from; + uint8_t to; + TargetType type; +}; + +enum { + PARSE_ERROR_NAN = -1, + PARSE_ERROR_TOOBIG = -2, + PARSE_ERROR_EMPTY = -3, + PARSE_ERROR_NEGATIVE = -4 +}; + +static long parseByte(const char* str) +{ + if (strlen(str) < 1) + return PARSE_ERROR_EMPTY; + + char* end = nullptr; + long v = strtol(str, &end, 10); + + if (str == end) + return PARSE_ERROR_NAN; + + if ((errno == ERANGE) || v > std::numeric_limits::max()) + return PARSE_ERROR_TOOBIG; + + if (v < 0) + return PARSE_ERROR_NEGATIVE; + + return v; +} + +/** + * @brief parseTarget parse target string + * + * @example #* - send to all instances + * @example #*2 - send to all instances with id >= 1 + * @example #: send list values spreaded amoung all instances + * @example #:1 send list values spreaded amoung instances with id >= 1 + * @example #1 - send to second instance + * @example #<2 - send to first and second instances + * @example #>2 - send to instances with id > 2 + * @example #2-4 send to instances with id in [2, 4] range + */ +static Maybe parseTarget(t_symbol* s) +{ + const char* str = s->s_name; + + if (str[0] != '#') + return Maybe({ 0, 0, TargetType::NONE }); + + Maybe err({ 0, 0, TargetType::ERROR }); + + if (strlen(str) < 2) + return err; + + switch (str[1]) { + case '*': { + + auto val = parseByte(str + 2); + switch (val) { + case PARSE_ERROR_NEGATIVE: + case PARSE_ERROR_NAN: + return err; + case PARSE_ERROR_EMPTY: + case PARSE_ERROR_TOOBIG: + return Maybe({ 0, 0, TargetType::ALL }); + default: + return Maybe({ static_cast(val), 0, TargetType::ALL }); + } + + } break; + case '<': { // #({ static_cast(val), 0, TargetType::LT }); + + } break; + case '>': { // #>INT + + auto val = parseByte(str + 2); + if (val < 0) + return err; + else + return Maybe({ static_cast(val), 0, TargetType::GT }); + + } break; + case ':': { // #:INT + + auto val = parseByte(str + 2); + switch (val) { + case PARSE_ERROR_NEGATIVE: + case PARSE_ERROR_NAN: + return err; + case PARSE_ERROR_EMPTY: + case PARSE_ERROR_TOOBIG: + return Maybe({ 0, 0, TargetType::SPREAD }); + default: + return Maybe({ static_cast(val), 0, TargetType::SPREAD }); + } + + } break; + default: { + if (isdigit(str[1])) { + auto range_start = str + 1; + char* end = nullptr; + long from = strtol(range_start, &end, 10); + if ((range_start == end) || (errno == ERANGE)) + return err; + + if (from < 0 || from > std::numeric_limits::max()) + return err; + + if (end[0] == '\0') // #INT + return Maybe({ static_cast(from), 0, TargetType::EQ }); + else if (end[0] == '-') { // #FROM-TO + const long to = parseByte(end + 1); + + if (to < 0) + return err; + else + return Maybe({ static_cast(from), static_cast(to), TargetType::RANGE }); + + } else // #INT-??? + return err; + } + + return err; + } break; + } +} + +static t_class* hoa_process_inlet_class = nullptr; + +t_class* process_inlet_class() +{ + return hoa_process_inlet_class; +} + +static void hoa_process_inlet_bang(ProcessInlet* x) +{ + HoaProcess* obj = x->x_owner; + obj->sendBangToAll(x->x_index); +} + +static void hoa_process_inlet_float(ProcessInlet* x, t_float f) +{ + HoaProcess* obj = x->x_owner; + obj->sendFloatToAll(x->x_index, f); +} + +static void hoa_process_inlet_symbol(ProcessInlet* x, t_symbol* s) +{ + HoaProcess* obj = x->x_owner; + obj->sendSymbolToAll(x->x_index, s); +} + +static void hoa_process_inlet_list(ProcessInlet* x, t_symbol* s, int argc, t_atom* argv) +{ + HoaProcess* obj = x->x_owner; + obj->sendListToAll(x->x_index, AtomList(argc, argv)); +} + +auto is_float = [](const t_atom& a) { return a.a_type == A_FLOAT; }; +auto is_symbol = [](const t_atom& a) { return a.a_type == A_SYMBOL; }; +auto is_sym_bang = [](const t_atom& a) { return is_symbol(a) && a.a_w.w_symbol == &s_bang; }; +auto is_sym_float = [](const t_atom& a) { return is_symbol(a) && a.a_w.w_symbol == &s_float; }; +auto is_sym_symbol = [](const t_atom& a) { return is_symbol(a) && a.a_w.w_symbol == &s_symbol; }; +auto is_sym_list = [](const t_atom& a) { return is_symbol(a) && a.a_w.w_symbol == &s_list; }; + +struct MsgCallbacks { + std::function fn_bang; + std::function fn_float; + std::function fn_symbol; + std::function fn_list; + std::function fn_any; +}; + +static void message_handler(size_t idx, size_t inlet, int argc, t_atom* argv, const MsgCallbacks& cb) +{ + /** BANG */ + if ((argc == 0) || (argc == 1 && is_sym_bang(argv[0]))) + cb.fn_bang(idx, inlet); + /** FLOAT */ + else if (argc == 1 && is_float(argv[0])) + cb.fn_float(idx, inlet, argv[0].a_w.w_float); + else if (argc == 2 && is_sym_float(argv[0]) && is_float(argv[1])) + cb.fn_float(idx, inlet, argv[1].a_w.w_float); + /** SYMBOL */ + else if (argc == 2 && is_sym_symbol(argv[0]) && is_symbol(argv[1])) + cb.fn_symbol(idx, inlet, argv[1].a_w.w_symbol); + /** LIST */ + else if (argc > 0 && is_sym_list(argv[0])) + cb.fn_list(idx, inlet, AtomList(argc - 1, &argv[1])); + else if (argc > 1 && is_float(argv[0])) + cb.fn_list(idx, inlet, AtomList(argc, argv)); + /** ANY */ + else if (argc > 0 && is_symbol(argv[0])) + cb.fn_any(idx, inlet, argv[0].a_w.w_symbol, AtomList(argc - 1, &argv[1])); + else { + pd_error(nullptr, "unknown message format:"); + postatom(argc, argv); + } +} + +static void hoa_process_inlet_anything(ProcessInlet* x, t_symbol* s, int argc, t_atom* argv) +{ + HoaProcess* obj = x->x_owner; + + auto maybe_target = parseTarget(s); + + if (!maybe_target) { + obj->sendAnyToAll(x->x_index, s, AtomList(argc, argv)); + } else { + assert(argc >= 0); + + switch (maybe_target.value().type) { + case TargetType::EQ: { + + MsgCallbacks cb { + [obj](size_t idx, size_t inlet) { obj->sendBangToInstance(idx, inlet); }, + [obj](size_t idx, size_t inlet, t_float f) { obj->sendFloatToInstance(idx, inlet, f); }, + [obj](size_t idx, size_t inlet, t_symbol* s) { obj->sendSymbolToInstance(idx, inlet, s); }, + [obj](size_t idx, size_t inlet, const AtomList& l) { obj->sendListToInstance(idx, inlet, l); }, + [obj](size_t idx, size_t inlet, t_symbol* s, const AtomList& l) { obj->sendAnyToInstance(idx, inlet, s, l); } + }; + + message_handler(maybe_target.value().from, x->x_index, argc, argv, cb); + } break; + case TargetType::GT: { + + MsgCallbacks cb { + [obj](size_t idx, size_t inlet) { obj->sendBangToGreaterEq(idx + 1, inlet); }, + [obj](size_t idx, size_t inlet, t_float f) { obj->sendFloatToGreaterEq(idx + 1, inlet, f); }, + [obj](size_t idx, size_t inlet, t_symbol* s) { obj->sendSymbolToGreaterEq(idx + 1, inlet, s); }, + [obj](size_t idx, size_t inlet, const AtomList& l) { obj->sendListToGreaterEq(idx + 1, inlet, l); }, + [obj](size_t idx, size_t inlet, t_symbol* s, const AtomList& l) { obj->sendAnyToGreaterEq(idx + 1, inlet, s, l); } + }; + + message_handler(maybe_target.value().from, x->x_index, argc, argv, cb); + + } break; + case TargetType::LT: { + + MsgCallbacks cb { + [obj](size_t idx, size_t inlet) { obj->sendBangToLessThen(idx, inlet); }, + [obj](size_t idx, size_t inlet, t_float f) { obj->sendFloatToLessThen(idx, inlet, f); }, + [obj](size_t idx, size_t inlet, t_symbol* s) { obj->sendSymbolToLessThen(idx, inlet, s); }, + [obj](size_t idx, size_t inlet, const AtomList& l) { obj->sendListToLessThen(idx, inlet, l); }, + [obj](size_t idx, size_t inlet, t_symbol* s, const AtomList& l) { obj->sendAnyToLessThen(idx, inlet, s, l); } + }; + + message_handler(maybe_target.value().from, x->x_index, argc, argv, cb); + + } break; + case TargetType::RANGE: { + + size_t to = maybe_target.value().to; + + MsgCallbacks cb { + [obj, to](size_t from, size_t inlet) { obj->sendBangToRange(from, to, inlet); }, + [obj, to](size_t from, size_t inlet, t_float f) { obj->sendFloatToRange(from, to, inlet, f); }, + [obj, to](size_t from, size_t inlet, t_symbol* s) { obj->sendSymbolToRange(from, to, inlet, s); }, + [obj, to](size_t from, size_t inlet, const AtomList& l) { obj->sendListToRange(from, to, inlet, l); }, + [obj, to](size_t from, size_t inlet, t_symbol* s, const AtomList& l) { obj->sendAnyToRange(from, to, inlet, s, l); } + }; + + message_handler(maybe_target.value().from, x->x_index, argc, argv, cb); + + } break; + case TargetType::ALL: { + + MsgCallbacks cb { + [obj](size_t idx, size_t inlet) { obj->sendBangToGreaterEq(idx, inlet); }, + [obj](size_t idx, size_t inlet, t_float f) { obj->sendFloatToGreaterEq(idx, inlet, f); }, + [obj](size_t idx, size_t inlet, t_symbol* s) { obj->sendSymbolToGreaterEq(idx, inlet, s); }, + [obj](size_t idx, size_t inlet, const AtomList& l) { obj->sendListToGreaterEq(idx, inlet, l); }, + [obj](size_t idx, size_t inlet, t_symbol* s, const AtomList& l) { obj->sendAnyToGreaterEq(idx, inlet, s, l); } + }; + + message_handler(maybe_target.value().from, x->x_index, argc, argv, cb); + + } break; + case TargetType::SPREAD: { + + MsgCallbacks cb { + [obj](size_t idx, size_t inlet) { obj->sendBangToGreaterEq(idx, inlet); }, + [obj](size_t idx, size_t inlet, t_float f) { obj->sendFloatToGreaterEq(idx, inlet, f); }, + [obj](size_t idx, size_t inlet, t_symbol* s) { obj->sendSymbolToGreaterEq(idx, inlet, s); }, + [obj](size_t idx, size_t inlet, const AtomList& l) { obj->sendListToSpread(idx, inlet, l); }, + [obj](size_t idx, size_t inlet, t_symbol* s, const AtomList& l) { obj->sendAnyToSpread(idx, inlet, s, l); } + }; + + message_handler(maybe_target.value().from, x->x_index, argc, argv, cb); + + } break; + case TargetType::NONE: { + obj->sendAnyToAll(x->x_index, s, AtomList(argc, argv)); + } break; + + default: + case TargetType::ERROR: { + pd_error(x, "[hoa.process~] invalid instance target: %s", s->s_name); + } break; + } + } +} + +void setup_spat_hoa_process_inlet() +{ + t_class* c = class_new(gensym("hoa.2d.process.inlet"), + 0, 0, sizeof(ProcessInlet), CLASS_PD, A_CANT, A_NULL); + + if (c) { + class_addbang(c, (t_method)hoa_process_inlet_bang); + class_addfloat(c, (t_method)hoa_process_inlet_float); + class_addsymbol(c, (t_method)hoa_process_inlet_symbol); + class_addlist(c, (t_method)hoa_process_inlet_list); + class_addanything(c, (t_method)hoa_process_inlet_anything); + } + + hoa_process_inlet_class = c; +} diff --git a/ceammc/ext/src/spat/hoa_process_inlet.h b/ceammc/ext/src/spat/hoa_process_inlet.h new file mode 100644 index 0000000000..26474512ee --- /dev/null +++ b/ceammc/ext/src/spat/hoa_process_inlet.h @@ -0,0 +1,31 @@ +/***************************************************************************** + * Copyright 2019 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#ifndef HOA_PROCESS_INLET_H +#define HOA_PROCESS_INLET_H + +#include "m_pd.h" + +class HoaProcess; + +struct ProcessInlet { + t_class* x_pd; + size_t x_index; + HoaProcess* x_owner; +}; + +t_class* process_inlet_class(); + +void setup_spat_hoa_process_inlet(); + +#endif // HOA_PROCESS_INLET_H diff --git a/ceammc/ext/src/spat/hoa_process_instance.cpp b/ceammc/ext/src/spat/hoa_process_instance.cpp new file mode 100644 index 0000000000..441eed05e7 --- /dev/null +++ b/ceammc/ext/src/spat/hoa_process_instance.cpp @@ -0,0 +1,255 @@ +/***************************************************************************** + * Copyright 2019 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#include "hoa_process_instance.h" +#include "hoa_process.h" + +#include "ceammc_canvas.h" +#include "fmt/format.h" + +#include + +extern "C" { +#include "g_canvas.h" +#include "m_imp.h" +} + +void ProcessInstance::setOutlet(t_outlet* outl, size_t idx) +{ + for (auto& out : f_outs) { + if (out->extra() == idx) + out->setOutlet(outl); + } +} + +void ProcessInstance::setInletBuffer(t_sample* s, size_t idx) +{ + for (auto& in : f_ins_sig) { + if (in->extra() == idx) + in->setSignal(s); + } +} + +void ProcessInstance::setOutletBuffer(t_sample* s, size_t idx) +{ + for (auto& out : f_outs_sig) { + if (out->extra() == idx) + out->setSignal(s); + } +} + +void ProcessInstance::doScanCanvas(t_canvas* cnv) +{ + for (t_gobj* y = cnv->gl_list; y; y = y->g_next) { + const t_symbol* name = y->g_pd->c_name; + if (name == HoaProcess::SYM_CANVAS) { + // recursive load + doScanCanvas((t_canvas*)y); + } else if (HoaIn::isA(y)) { + f_ins.emplace_front(HoaIn::fromObject(y)); + } else if (HoaOut::isA(y)) { + f_outs.emplace_front(HoaOut::fromObject(y)); + } else if (HoaInTilde::isA(y)) { + f_ins_sig.emplace_front(HoaInTilde::fromObject(y)); + } else if (HoaOutTilde::isA(y)) { + f_outs_sig.emplace_front(HoaOutTilde::fromObject(y)); + } + } +} + +void ProcessInstance::createSwitch() +{ + if (!canvas_) + return; + + Canvas cnv(canvas_); + + // find [switch~] + switch_ = cnv.findIf([](t_object* x) { return pd::object_name(x) == HoaProcess::SYM_BLOCK; }); + if (switch_) + return; + + // create [switch~] object on instance canvas + cnv.createPdObject(10, 10, HoaProcess::SYM_SWITCH); + + // find [switch~] again + switch_ = cnv.findIf([](t_object* x) { return pd::object_name(x) == HoaProcess::SYM_BLOCK; }); + + if (!switch_) { + LIB_ERR << "[hoa.process~] can't create [switch~] for instance"; + return; + } + + dspOn(true); +} + +void ProcessInstance::dspOn(bool state) +{ + if (switch_) + dsp_state_ = state; +} + +void ProcessInstance::dspCalc() +{ + if (switch_ && dsp_state_) + pd::object_bang(switch_); +} + +bool ProcessInstance::init(t_symbol* name, const AtomList& args) +{ + pd_this->pd_newest = nullptr; + typedmess(&pd_objectmaker, name, (int)args.size(), args.toPdData()); + if (!pd_this->pd_newest) { + LIB_ERR << fmt::format("can't create subpatch '{}'", name->s_name); + return false; + } + + if (*pd_this->pd_newest != canvas_class) { + LIB_ERR << fmt::format("can't init instance '{}' because it's not an abstraction", name->s_name); + pd_free(pd_this->pd_newest); + pd_this->pd_newest = nullptr; + return false; + } + + t_canvas* new_c = (t_canvas*)pd_this->pd_newest; + pd_this->pd_newest = nullptr; + + new_c->gl_owner = 0; + new_c->gl_isclone = 1; + + setCanvas(new_c); + setArgs(args); + scanCanvas(); + createSwitch(); + return true; +} + +ProcessInstance::ProcessInstance() + : canvas_(nullptr) + , switch_(nullptr) + , dsp_state_(true) +{ +} + +ProcessInstance::~ProcessInstance() +{ + canvas_.free(); +} + +void ProcessInstance::setCanvas(t_canvas* c) +{ + canvas_ = Canvas(c); +} + +void ProcessInstance::loadBang() +{ + canvas_.loadBang(); +} + +void ProcessInstance::show() +{ + canvas_.show(); +} + +void ProcessInstance::scanCanvas() +{ + doScanCanvas(canvas_.pd_canvas()); +} + +void ProcessInstance::bangTo(size_t inlet_idx) +{ + for (auto& in : f_ins) { + if (in->extra() == inlet_idx) + in->onBang(); + } +} + +void ProcessInstance::floatTo(size_t inlet_idx, t_float v) +{ + for (auto& in : f_ins) { + if (in->extra() == inlet_idx) + in->onFloat(v); + } +} + +void ProcessInstance::symbolTo(size_t inlet_idx, t_symbol* s) +{ + for (auto& in : f_ins) { + if (in->extra() == inlet_idx) + in->onSymbol(s); + } +} + +void ProcessInstance::listTo(size_t inlet_idx, const AtomList& l) +{ + for (auto& in : f_ins) { + if (in->extra() == inlet_idx) + in->onList(l); + } +} + +void ProcessInstance::anyTo(size_t inlet_idx, t_symbol* s, const AtomList& l) +{ + for (auto& in : f_ins) { + if (in->extra() == inlet_idx) + in->onAny(s, l); + } +} + +bool ProcessInstance::hasStaticInputSignal() const +{ + auto fx = [](const HoaInTilde* in) { return in->extra() == 0; }; + return std::find_if(f_ins_sig.begin(), f_ins_sig.end(), fx) != f_ins_sig.end(); +} + +bool ProcessInstance::hasStaticOutputSignal() const +{ + auto fx = [](const HoaOutTilde* out) { return out->extra() == 0; }; + return std::find_if(f_outs_sig.begin(), f_outs_sig.end(), fx) != f_outs_sig.end(); +} + +size_t ProcessInstance::numExtraSignalInputs() const +{ + size_t index = 0; + for (auto& in : f_ins_sig) + index = std::max(index, (size_t)in->extra()); + + return index; +} + +size_t ProcessInstance::numExtraSignalOutputs() const +{ + size_t index = 0; + for (auto& out : f_outs_sig) + index = std::max(index, (size_t)out->extra()); + + return index; +} + +size_t ProcessInstance::numControlInputs() const +{ + size_t index = 0; + for (auto& in : f_ins) + index = std::max(index, (size_t)in->extra()); + + return index; +} + +size_t ProcessInstance::numControlOutputs() const +{ + size_t index = 0; + for (auto& out : f_outs) + index = std::max(index, (size_t)out->extra()); + + return index; +} diff --git a/ceammc/ext/src/spat/hoa_process_instance.h b/ceammc/ext/src/spat/hoa_process_instance.h new file mode 100644 index 0000000000..aad82c77d8 --- /dev/null +++ b/ceammc/ext/src/spat/hoa_process_instance.h @@ -0,0 +1,72 @@ +/***************************************************************************** + * Copyright 2019 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#ifndef HOA_PROCESS_INSTANCE_H +#define HOA_PROCESS_INSTANCE_H + +#include + +#include "ceammc_canvas.h" +#include "hoa_connections.h" + +class ProcessInstance { + Canvas canvas_; + t_object* switch_; + std::forward_list f_ins; + std::forward_list f_outs; + std::forward_list f_ins_sig; + std::forward_list f_outs_sig; + AtomList args_; + bool dsp_state_; + +public: + ProcessInstance(); + ~ProcessInstance(); + +public: + void setCanvas(t_canvas* c); + const Canvas& canvas() const { return canvas_; } + Canvas& canvas() { return canvas_; } + + void loadBang(); + void show(); + void scanCanvas(); + void createSwitch(); + void dspOn(bool state); + void dspCalc(); + bool init(t_symbol* name, const AtomList& args); + + void bangTo(size_t inlet_idx); + void floatTo(size_t inlet_idx, t_float v); + void symbolTo(size_t inlet_idx, t_symbol* s); + void listTo(size_t inlet_idx, const AtomList& l); + void anyTo(size_t inlet_idx, t_symbol* s, const AtomList& l); + + bool hasStaticInputSignal() const; + bool hasStaticOutputSignal() const; + size_t numExtraSignalInputs() const; + size_t numExtraSignalOutputs() const; + size_t numControlInputs() const; + size_t numControlOutputs() const; + void setOutlet(t_outlet* outl, size_t idx); + void setInletBuffer(t_sample* s, size_t idx); + void setOutletBuffer(t_sample* s, size_t idx); + + const AtomList& args() const { return args_; } + void setArgs(const AtomList& args) { args_ = args; } + +private: + void doScanCanvas(t_canvas* cnv); +}; + +#endif // HOA_PROCESS_INSTANCE_H diff --git a/ceammc/ext/src/spat/hoa_process_props.cpp b/ceammc/ext/src/spat/hoa_process_props.cpp new file mode 100644 index 0000000000..1a15d57806 --- /dev/null +++ b/ceammc/ext/src/spat/hoa_process_props.cpp @@ -0,0 +1,441 @@ +/***************************************************************************** + * Copyright 2019 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#include "hoa_process_props.h" +#include "ceammc_canvas.h" +#include "ceammc_factory.h" +#include "ceammc_format.h" +#include "datatype_property.h" +#include "hoa_process.h" + +#include +#include + +static t_symbol* SYM_2D; +static t_symbol* SYM_3D; +static t_symbol* SYM_HARMONICS; +static t_symbol* SYM_PLANEWAVES; + +HoaProcessProps::HoaProcessProps(const PdArgs& args) + : BaseObject(args) + , args_ { &s_, &s_, 0, 0, 0, 0, 0 } +{ + // init prop_canvas_id_ + char buf[30]; + snprintf(buf, sizeof(buf), "%p:", (void*)canvas()); + prop_canvas_id_ = buf; + + createOutlet(); + + { + Property* p = createCbProperty("@pmode", &HoaProcessProps::propPMode); + p->info().setType(PropertyInfoType::SYMBOL); + p->info().addEnum(SYM_2D); + p->info().addEnum(SYM_3D); + } + + { + Property* p = createCbProperty("@ptype", &HoaProcessProps::propPType); + p->info().setType(PropertyInfoType::SYMBOL); + p->info().addEnum(SYM_HARMONICS); + p->info().addEnum(SYM_PLANEWAVES); + } + + { + Property* p = createCbProperty("@order", &HoaProcessProps::propOrder); + p->info().setType(PropertyInfoType::INTEGER); + } + + { + Property* p = createCbProperty("@total", &HoaProcessProps::propTotal); + p->info().setType(PropertyInfoType::INTEGER); + } + + { + Property* p = createCbProperty("@index", &HoaProcessProps::propIndex); + p->info().setType(PropertyInfoType::INTEGER); + } + + { + Property* p = createCbProperty("@hdegree", &HoaProcessProps::propHarmDegree); + p->info().setType(PropertyInfoType::INTEGER); + } + + { + Property* p = createCbProperty("@horder", &HoaProcessProps::propHarmOrder); + p->info().setType(PropertyInfoType::INTEGER); + } + + auto cnv_args = canvas_info_args(canvas()); + if (!cnv_args.empty()) + args_ = processHoaProps(cnv_args); +} + +AtomList HoaProcessProps::propPMode() const +{ + return Atom(args_.mode); +} + +AtomList HoaProcessProps::propPType() const +{ + return Atom(args_.type); +} + +AtomList HoaProcessProps::propOrder() const +{ + return Atom(args_.order); +} + +AtomList HoaProcessProps::propTotal() const +{ + return Atom(args_.total); +} + +AtomList HoaProcessProps::propIndex() const +{ + return Atom(args_.index); +} + +AtomList HoaProcessProps::propHarmDegree() const +{ + return Atom(args_.harm_degree); +} + +AtomList HoaProcessProps::propHarmOrder() const +{ + return Atom(args_.harm_order); +} + +static void propToList(DataTypeProperty* prop, AtomList& out) +{ + switch (prop->propertyType()) { + case DataTypeProperty::T_BOOL: { + bool b = false; + if (prop->getBool(b)) + out.append(Atom(b ? 1.f : 0.f)); + } break; + case DataTypeProperty::T_FLOAT: { + t_float f = 0; + if (prop->getFloat(f)) + out.append(Atom(f)); + } break; + case DataTypeProperty::T_INT: { + long i = 0; + if (prop->getInt(i)) + out.append(Atom(i)); + } break; + case DataTypeProperty::T_SYMBOL: { + t_symbol* s = &s_; + if (prop->getSymbol(&s)) + out.append(Atom(s)); + } break; + case DataTypeProperty::T_LIST: { + AtomList l; + if (prop->getList(l)) + out.append(l); + } break; + default: + break; + } +} + +static bool isPropQuery(t_symbol* s) +{ + if (s->s_name[0] != '@') + return false; + else + return s->s_name[strlen(s->s_name) - 1] == '?'; +} + +static std::string canonicPropName(t_symbol* s) +{ + const size_t N = strlen(s->s_name); + + if (s->s_name[N - 1] != '?') + return s->s_name; + else + return std::string(s->s_name, N - 1); +} + +// calc @prop == @prop? +static bool prop_equal(const char* a, const char* b) +{ + while (!((*a == '\0' && *b == '?') + || (*a == '?' && *b == '\0') + || (*a == '\0' && *b == '\0'))) { + + if (*a != *b) + return false; + + ++a; + ++b; + } + + return true; +} + +bool HoaProcessProps::eachProperty(const AtomList& lst, + std::function is_valid, + std::function inner_process, + std::function declared_process) +{ + std::vector all_declared_keys; + PropertyStorage::storage().keys(all_declared_keys); + int cnt = 0; // success count + + // split list to list of properties + for (auto& args : lst.properties()) { + assert(args[0].isProperty()); + + t_symbol* p = args[0].asSymbol(); + + // may skip some properties + if (!is_valid(p)) + continue; + + // search inner property + for (auto& inner_prop : properties()) { + // found inner property + if (prop_equal(inner_prop.first->s_name, p->s_name)) { + inner_process(inner_prop.second, inner_prop.first, args.slice(1)); + cnt++; + goto continue_label; + } + } + + // search declared property + { // @prop? -> @prop + const std::string prop_name = canonicPropName(p); + + // @prop -> @0xDEADBEEF:@prop (inner property name) + const std::string full_name = prop_canvas_id_ + prop_name; + + // not using gensym for guessing key name + for (auto k : all_declared_keys) { + // using slower O(n) string compare instead of quick t_symbol* compare O(1) + // to prevent increasing t_symbol table + if (full_name != k->s_name) + continue; + + // key found + auto prop = PropertyStorage::storage().acquire(k); + if (!prop) // but not acquired + break; // break inner loop, check other prop request + + declared_process(prop, prop_name, args.slice(1)); + + PropertyStorage::storage().release(k); + cnt++; + goto continue_label; + } + + OBJ_ERR << "property is not found: " << prop_name; + } + + continue_label: + continue; + } + + return cnt > 0; +} + +bool HoaProcessProps::processAnyProps(t_symbol* sel, const AtomList& lst) +{ + if (sel->s_name[0] != '@') + return false; + + if (isPropQuery(sel)) { + AtomList out; + + eachProperty( + AtomList(sel) + lst, + [this](t_symbol* s) { + if (!isPropQuery(s)) { + OBJ_ERR << "property query expected: " << s->s_name; + return false; + } else + return true; + }, + [this, &out](Property* prop, t_symbol* name, const AtomList&) { + out.append(name); + out.append(prop->get()); + }, + [this, &out](DataTypeProperty* prop, const std::string& name, const AtomList&) { + out.append(gensym(name.c_str())); + propToList(prop, out); + }); + + anyTo(0, out); + } else { + eachProperty( + AtomList(sel) + lst, + [this](t_symbol* s) { + bool ok = Atom(s).isProperty() && !isPropQuery(s); + if (!ok) { + OBJ_ERR << "set property expected: " << s; + return false; + } else + return true; + }, + [](Property*, t_symbol*, const AtomList&) {}, + [this](DataTypeProperty* prop, const std::string&, const AtomList& args) { + // per instance args + if (args.size() > 1) { + switch (prop->propertyType()) { + case DataTypeProperty::T_BOOL: + case DataTypeProperty::T_FLOAT: + case DataTypeProperty::T_INT: + case DataTypeProperty::T_SYMBOL: { + size_t idx = this->args_.index; + if (idx >= args.size()) { + OBJ_ERR << "invalid list size: " << idx << ", index not exists: " << idx; + } else { + prop->setFromPdArgs(args.slice(idx, idx + 1)); + } + } break; + case DataTypeProperty::T_LIST: + default: + prop->setFromPdArgs(args); + break; + } + } else { + prop->setFromPdArgs(args); + } + }); + } + + return true; +} + +void HoaProcessProps::onBang() +{ + bangTo(0); +} + +void HoaProcessProps::onFloat(t_float f) +{ + floatTo(0, f); +} + +void HoaProcessProps::onSymbol(t_symbol* s) +{ + symbolTo(0, s); +} + +void HoaProcessProps::onList(const AtomList& lst) +{ + if (lst.size() != args_.total) { + OBJ_ERR << "invalid list size: " << lst.size() << ", expected: " << args_.total; + return; + } + + auto idx = args_.index; + if (idx >= lst.size()) { + OBJ_ERR << "invalid index: " << idx; + return; + } + + atomTo(0, lst[idx]); +} + +HoaProcessPropsData processHoaProps(const AtomList& lst) +{ + if (lst.size() < 5) { + std::ostringstream os; + os << "at least 5 arguments required: " << lst; + throw std::runtime_error(os.str()); + } + + auto mode = lst[0].asSymbol(); + auto type = lst[1].asSymbol(); + auto order = lst[2]; + auto idx0 = lst[3]; + auto idx1 = lst[4]; + + if (mode != SYM_2D && mode != SYM_3D) { + std::ostringstream os; + os << "invalid mode: " << mode << ", expecting " << SYM_2D << " or " << SYM_3D; + throw std::runtime_error(os.str()); + } + + if (type != SYM_HARMONICS && type != SYM_PLANEWAVES) { + std::ostringstream os; + os << "invalid type: " << type << ", expecting " << SYM_HARMONICS << " or " << SYM_PLANEWAVES; + throw std::runtime_error(os.str()); + } + + if (!order.isFloat()) { + std::ostringstream os; + os << "order value expected: " << order; + throw std::runtime_error(os.str()); + } + + if (order.asFloat() < 1) { + std::ostringstream os; + os << "order value should be >= 1: " << order; + throw std::runtime_error(os.str()); + } + + if (!idx0.isFloat() || !idx1.isFloat()) { + std::ostringstream os; + os << "integer values expected: " << idx0 << " " << idx1; + throw std::runtime_error(os.str()); + } + + HoaProcessPropsData res; + res.mode = mode; + res.type = type; + res.order = order.asInt(); + + // total + if (mode == SYM_2D && type == SYM_HARMONICS) { + res.total = HoaProcess::calcNumHarm2d(res.order); + } else if (mode == SYM_3D && type == SYM_HARMONICS) { + res.total = HoaProcess::calcNumHarm3d(res.order); + } else { + res.total = res.order; + } + + // index + if (mode == SYM_2D && type == SYM_HARMONICS) { + res.index = HoaProcess::harmToIndex2d(idx0.asInt(), idx1.asInt()); + } else if (mode == SYM_3D && type == SYM_HARMONICS) { + res.index = HoaProcess::harmToIndex3d(idx0.asInt(), idx1.asInt()); + } else { + res.index = idx0.asInt(); + } + + // harm degree + if (type == SYM_HARMONICS) + res.harm_degree = idx0.asInt(); + else + res.harm_degree = -1; + + // harm order + if (type == SYM_HARMONICS) + res.harm_order = idx1.asInt(); + else + res.harm_order = -1; + + return res; +} + +void setup_spat_hoa_process_props() +{ + SYM_2D = gensym("2d"); + SYM_3D = gensym("3d"); + SYM_HARMONICS = gensym("harmonics"); + SYM_PLANEWAVES = gensym("planewaves"); + + ObjectFactory obj("hoa.@process"); +} diff --git a/ceammc/ext/src/spat/hoa_process_props.h b/ceammc/ext/src/spat/hoa_process_props.h new file mode 100644 index 0000000000..98667063e5 --- /dev/null +++ b/ceammc/ext/src/spat/hoa_process_props.h @@ -0,0 +1,66 @@ +/***************************************************************************** + * Copyright 2019 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#ifndef HOA_PROCESS_PROPS_H +#define HOA_PROCESS_PROPS_H + +#include + +#include "ceammc_object.h" +#include "datatype_property.h" + +using namespace ceammc; + +struct HoaProcessPropsData { + t_symbol* mode; + t_symbol* type; + size_t order; + size_t total; + size_t index; + long harm_degree; + long harm_order; +}; + +HoaProcessPropsData processHoaProps(const AtomList& lst); + +class HoaProcessProps : public BaseObject { + HoaProcessPropsData args_; + std::string prop_canvas_id_; + +public: + HoaProcessProps(const PdArgs& args); + + AtomList propPMode() const; + AtomList propPType() const; + AtomList propOrder() const; + AtomList propTotal() const; + AtomList propIndex() const; + AtomList propHarmDegree() const; + AtomList propHarmOrder() const; + + bool processAnyProps(t_symbol* sel, const AtomList& lst) override; + void onBang() override; + void onFloat(t_float f) override; + void onSymbol(t_symbol* s) override; + void onList(const AtomList& lst) override; + +private: + bool eachProperty(const AtomList& lst, + std::function is_valid_fn, + std::function inner_process, + std::function declared_process); +}; + +void setup_spat_hoa_process_props(); + +#endif // HOA_PROCESS_PROPS_H diff --git a/ceammc/ext/src/spat/hoa_projector.cpp b/ceammc/ext/src/spat/hoa_projector.cpp new file mode 100644 index 0000000000..33cb65f243 --- /dev/null +++ b/ceammc/ext/src/spat/hoa_projector.cpp @@ -0,0 +1,86 @@ +/***************************************************************************** + * Copyright 2019 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#include "hoa_projector.h" +#include "ceammc_factory.h" + +HoaProjector::HoaProjector(const PdArgs& args) + : HoaBase(args) + , plane_waves_(nullptr) +{ + plane_waves_ = new IntProperty("@n", 0); + createProperty(plane_waves_); +} + +void HoaProjector::parseNumPlainWaves() +{ + const int MIN_PW_COUNT = 2 * order() + 1; + + auto pos_arg = positionalFloatArgument(1, 0); + if (pos_arg != 0) + plane_waves_->setValue(pos_arg); + + const auto N = plane_waves_->value(); + + if (N < MIN_PW_COUNT) { + // zero means auto calc + if (N != 0) + OBJ_ERR << "minimal number of plane waves should be >= " << MIN_PW_COUNT << ", setting to this value"; + + plane_waves_->setValue(MIN_PW_COUNT); + } + + plane_waves_->setReadonly(true); +} + +void HoaProjector::parseProperties() +{ + HoaBase::parseProperties(); + parseNumPlainWaves(); + + processor_.reset(new DecoderRegular2d(order(), plane_waves_->value())); + + createSignalInlets(processor_->getNumberOfHarmonics()); + createSignalOutlets(processor_->getNumberOfPlanewaves()); + + in_buf_.resize(numInputChannels() * HOA_DEFAULT_BLOCK_SIZE); + out_buf_.resize(numOutputChannels() * HOA_DEFAULT_BLOCK_SIZE); +} + +void HoaProjector::blockSizeChanged(size_t bs) +{ + in_buf_.resize(numInputChannels() * bs); + out_buf_.resize(numOutputChannels() * bs); +} + +void HoaProjector::processBlock(const t_sample** in, t_sample** out) +{ + const size_t NINS = numInputChannels(); + const size_t NOUTS = numOutputChannels(); + const size_t BS = blockSize(); + + for (size_t i = 0; i < NINS; i++) + Signal::copy(BS, &in[i][0], 1, &in_buf_[i], NINS); + + for (size_t i = 0; i < BS; i++) + processor_->process(&in_buf_[NINS * i], &out_buf_[NOUTS * i]); + + for (size_t i = 0; i < NOUTS; i++) + Signal::copy(BS, &out_buf_[i], NOUTS, &out[i][0], 1); +} + +void setup_spat_hoa_projector() +{ + SoundExternalFactory obj("hoa.2d.projector~"); + obj.addAlias("hoa.projector~"); +} diff --git a/ceammc/ext/src/spat/hoa_projector.h b/ceammc/ext/src/spat/hoa_projector.h new file mode 100644 index 0000000000..b84b738cbf --- /dev/null +++ b/ceammc/ext/src/spat/hoa_projector.h @@ -0,0 +1,37 @@ +/***************************************************************************** + * Copyright 2019 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#ifndef HOA_PROJECTOR_H +#define HOA_PROJECTOR_H + +#include "hoa_common.h" + +class HoaProjector : public HoaBase { + Buffer in_buf_; + Buffer out_buf_; + std::unique_ptr processor_; + IntProperty* plane_waves_; + +public: + HoaProjector(const PdArgs& args); + void parseProperties() override; + void blockSizeChanged(size_t bs) override; + void processBlock(const t_sample** in, t_sample** out) override; + +private: + void parseNumPlainWaves(); +}; + +void setup_spat_hoa_projector(); + +#endif // HOA_PROJECTOR_H diff --git a/ceammc/ext/src/spat/hoa_recomposer.cpp b/ceammc/ext/src/spat/hoa_recomposer.cpp new file mode 100644 index 0000000000..92403288f7 --- /dev/null +++ b/ceammc/ext/src/spat/hoa_recomposer.cpp @@ -0,0 +1,236 @@ +/***************************************************************************** + * Copyright 2019 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#include "hoa_recomposer.h" +#include "ceammc_factory.h" + +static t_symbol* SYM_FREE; +static t_symbol* SYM_FIXE; +static t_symbol* SYM_FISHEYE; + +HoaRecomposer::HoaRecomposer(const PdArgs& args) + : HoaBase(args) + , plane_waves_(nullptr) + , mode_(nullptr) + , ramp_(100) +{ + plane_waves_ = new IntProperty("@n", 0); + createProperty(plane_waves_); + + mode_ = new SymbolEnumProperty("@mode", SYM_FREE); + mode_->appendEnum(SYM_FIXE); + mode_->appendEnum(SYM_FISHEYE); + createProperty(mode_); + + createProperty(new SymbolEnumAlias("@free", mode_, SYM_FREE)); + createProperty(new SymbolEnumAlias("@fixe", mode_, SYM_FIXE)); + createProperty(new SymbolEnumAlias("@fisheye", mode_, SYM_FISHEYE)); + + createCbProperty("@ramp", &HoaRecomposer::propRamp, &HoaRecomposer::propSetRamp); + Property* pramp = property("@ramp"); + pramp->info().setType(PropertyInfoType::FLOAT); + pramp->info().setMin(0); +} + +void HoaRecomposer::parseProperties() +{ + HoaBase::parseProperties(); + parseNumPlaneWaves(); + mode_->setReadonly(true); + + processor_.reset(new MultiEncoder2d(order(), plane_waves_->value())); + + if (mode_->value() == SYM_FREE) { + lines_.reset(new PolarLines2d(plane_waves_->value())); + lines_->setRamp(ramp_ / 1000 * sys_getsr()); + + const size_t NSRC = processor_->getNumberOfSources(); + + for (size_t i = 0; i < NSRC; i++) { + lines_->setRadiusDirect(i, processor_->getWidening(i)); + lines_->setAzimuthDirect(i, processor_->getAzimuth(i)); + } + + line_buf_.resize(NSRC * 2); + } + + // one more inlet for fisheye + createSignalInlets(processor_->getNumberOfSources() + (mode_->value() == SYM_FISHEYE ? 1 : 0)); + createSignalOutlets(processor_->getNumberOfHarmonics()); + + in_buf_.resize(numInputChannels() * HOA_DEFAULT_BLOCK_SIZE); + out_buf_.resize(numOutputChannels() * HOA_DEFAULT_BLOCK_SIZE); +} + +void HoaRecomposer::blockSizeChanged(size_t bs) +{ + in_buf_.resize(numInputChannels() * bs); + out_buf_.resize(numOutputChannels() * bs); +} + +void HoaRecomposer::processBlock(const t_sample** in, t_sample** out) +{ +} + +void HoaRecomposer::setupDSP(t_signal** sp) +{ + signalInit(sp); + + if (mode_->value() == SYM_FIXE) { + dsp_add(dspPerformFixE, 1, static_cast(this)); + } else if (mode_->value() == SYM_FISHEYE) { + dsp_add(dspPerformFisheye, 1, static_cast(this)); + } else if (mode_->value() == SYM_FREE) { + lines_->setRamp(ramp_ / 1000 * sys_getsr()); + dsp_add(dspPerformFree, 1, static_cast(this)); + } else + OBJ_ERR << "unknown mode: " << mode_->value(); +} + +void HoaRecomposer::m_angles(t_symbol* s, const AtomList& lst) +{ + const size_t N = std::min(lst.size(), processor_->getNumberOfSources()); + for (size_t i = 0; i < N; i++) + lines_->setAzimuth(i, lst[i].asFloat()); +} + +void HoaRecomposer::m_wide(t_symbol* s, const AtomList& lst) +{ + const size_t N = std::min(lst.size(), processor_->getNumberOfSources()); + for (size_t i = 0; i < N; i++) + lines_->setRadius(i, lst[i].asFloat()); +} + +AtomList HoaRecomposer::propRamp() const +{ + return Atom(ramp_); +} + +void HoaRecomposer::propSetRamp(const AtomList& lst) +{ + if (!lst.isFloat()) { + OBJ_ERR << "ramp: float value expected: " << lst; + return; + } + + auto v = lst.floatAt(0, 0); + if (v < 0) { + OBJ_ERR << "ramp: >= 0 value expected: " << v; + return; + } + + ramp_ = v; + lines_->setRamp(ramp_ / 1000 * sys_getsr()); +} + +void HoaRecomposer::parseNumPlaneWaves() +{ + const int MIN_PW_COUNT = 2 * order() + 1; + + auto pos_arg = positionalFloatArgument(1, 0); + if (pos_arg != 0) + plane_waves_->setValue(pos_arg); + + const auto N = plane_waves_->value(); + + if (N < MIN_PW_COUNT) { + // zero means auto calc + if (N != 0) + OBJ_ERR << "minimal number of plane waves should be >= " << MIN_PW_COUNT << ", setting to this value"; + + plane_waves_->setValue(MIN_PW_COUNT); + } + + plane_waves_->setReadonly(true); +} + +void HoaRecomposer::processFixE() +{ + const size_t NINS = numInputChannels(); + const size_t NOUTS = numOutputChannels(); + const size_t BS = blockSize(); + + t_sample** in = inputBlocks(); + t_sample** out = outputBlocks(); + + for (size_t i = 0; i < NINS; i++) + Signal::copy(BS, &in[i][0], 1, &in_buf_[i], NINS); + + for (size_t i = 0; i < BS; i++) + processor_->process(&in_buf_[NINS * i], &out_buf_[NOUTS * i]); + + for (size_t i = 0; i < NOUTS; i++) + Signal::copy(BS, &out_buf_[i], NOUTS, &out[i][0], 1); +} + +void HoaRecomposer::processFree() +{ + const size_t NINS = numInputChannels(); + const size_t NOUTS = numOutputChannels(); + const size_t BS = blockSize(); + + t_sample** in = inputBlocks(); + t_sample** out = outputBlocks(); + + for (size_t i = 0; i < NINS; i++) + Signal::copy(BS, &in[i][0], 1, &in_buf_[i], NINS); + + for (size_t i = 0; i < BS; i++) { + lines_->process(line_buf_.data()); + + for (size_t j = 0; j < NINS; j++) + processor_->setWidening(j, line_buf_[j]); + + for (size_t j = 0; j < NINS; j++) + processor_->setAzimuth(j, line_buf_[j + NINS]); + + processor_->process(&in_buf_[NINS * i], &out_buf_[NOUTS * i]); + } + + for (size_t i = 0; i < NOUTS; i++) + Signal::copy(BS, &out_buf_[i], NOUTS, &out[i][0], 1); +} + +void HoaRecomposer::processFisheye() +{ + const size_t NPWS = numInputChannels() - 1; + const size_t NOUTS = numOutputChannels(); + const size_t BS = blockSize(); + + t_sample** in = inputBlocks(); + t_sample** out = outputBlocks(); + + for (size_t i = 0; i < NPWS; i++) + Signal::copy(BS, &in[i][0], 1, &in_buf_[i], NPWS); + + for (size_t i = 0; i < BS; i++) { + // set from last inlet + processor_->setFisheye(in[NPWS][i]); + processor_->process(&in_buf_[NPWS * i], &out_buf_[NOUTS * i]); + } + + for (size_t i = 0; i < NOUTS; i++) + Signal::copy(BS, &out_buf_[i], NOUTS, &out[i][0], 1); +} + +void setup_spat_hoa_recomposer() +{ + SYM_FREE = gensym("free"); + SYM_FIXE = gensym("fixe"); + SYM_FISHEYE = gensym("fisheye"); + + SoundExternalFactory obj("hoa.2d.recomposer~"); + obj.addAlias("hoa.recomposer~"); + obj.addMethod("angles", &HoaRecomposer::m_angles); + obj.addMethod("wide", &HoaRecomposer::m_wide); +} diff --git a/ceammc/ext/src/spat/hoa_recomposer.h b/ceammc/ext/src/spat/hoa_recomposer.h new file mode 100644 index 0000000000..493f670348 --- /dev/null +++ b/ceammc/ext/src/spat/hoa_recomposer.h @@ -0,0 +1,73 @@ +/***************************************************************************** + * Copyright 2019 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#ifndef HOA_RECOMPOSER_H +#define HOA_RECOMPOSER_H + +#include "hoa_common.h" + +class HoaRecomposer : public HoaBase { + Buffer in_buf_; + Buffer out_buf_; + Buffer line_buf_; + std::unique_ptr processor_; + std::unique_ptr lines_; + IntProperty* plane_waves_; + SymbolEnumProperty* mode_; + t_float ramp_; + +public: + HoaRecomposer(const PdArgs& args); + void parseProperties() override; + void blockSizeChanged(size_t bs) override; + void processBlock(const t_sample** in, t_sample** out) override; + void setupDSP(t_signal** sp) override; + + void m_angles(t_symbol* s, const AtomList& lst); + void m_wide(t_symbol* s, const AtomList& lst); + + AtomList propRamp() const; + void propSetRamp(const AtomList& lst); + +private: + void parseNumPlaneWaves(); + + void processFixE(); + void processFree(); + void processFisheye(); + + inline static t_int* dspPerformFixE(t_int* w) + { + HoaRecomposer* ext = reinterpret_cast(w[1]); + ext->processFixE(); + return (w + 2); + } + + inline static t_int* dspPerformFree(t_int* w) + { + HoaRecomposer* ext = reinterpret_cast(w[1]); + ext->processFree(); + return (w + 2); + } + + inline static t_int* dspPerformFisheye(t_int* w) + { + HoaRecomposer* ext = reinterpret_cast(w[1]); + ext->processFisheye(); + return (w + 2); + } +}; + +void setup_spat_hoa_recomposer(); + +#endif // HOA_RECOMPOSER_H diff --git a/ceammc/ext/src/spat/hoa_rotate.cpp b/ceammc/ext/src/spat/hoa_rotate.cpp new file mode 100644 index 0000000000..cd700dcf44 --- /dev/null +++ b/ceammc/ext/src/spat/hoa_rotate.cpp @@ -0,0 +1,69 @@ +/***************************************************************************** + * Copyright 2019 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#include "hoa_rotate.h" +#include "ceammc_factory.h" + +HoaRotate::HoaRotate(const PdArgs& args) + : HoaBase(args) +{ +} + +void HoaRotate::parseProperties() +{ + HoaBase::parseProperties(); + + rotate_.reset(new Rotate2d(order())); + + const size_t NHARM = rotate_->getNumberOfHarmonics(); + + createSignalInlets(NHARM + 1); + createSignalOutlets(NHARM); + + // alloc buffers + in_buf_.resize(NHARM * HOA_DEFAULT_BLOCK_SIZE); + out_buf_.resize(NHARM * HOA_DEFAULT_BLOCK_SIZE); +} + +void HoaRotate::processBlock(const t_sample** in, t_sample** out) +{ + const size_t NOUTS = numOutputChannels(); + const size_t NINS = numInputChannels() - 1; // last input is for Yaw + const size_t BS = blockSize(); + + for (size_t i = 0; i < NINS; i++) { + Signal::copy(BS, &in[i][0], 1, &in_buf_[i], NINS); + } + + for (size_t i = 0; i < BS; i++) { + rotate_->setYaw(in[NINS][i]); // read from last inlet + rotate_->process(&in_buf_[NINS * i], &out_buf_[NOUTS * i]); + } + + for (size_t i = 0; i < NOUTS; i++) { + Signal::copy(BS, &out_buf_[i], NOUTS, &out[i][0], 1); + } +} + +void HoaRotate::blockSizeChanged(size_t bs) +{ + const size_t SZ = rotate_->getNumberOfHarmonics() * bs; + in_buf_.resize(SZ); + out_buf_.resize(SZ); +} + +void setup_spat_hoa_rotate() +{ + SoundExternalFactory obj("hoa.2d.rotate~"); + obj.addAlias("hoa.rotate~"); +} diff --git a/ceammc/ext/src/spat/hoa_rotate.h b/ceammc/ext/src/spat/hoa_rotate.h new file mode 100644 index 0000000000..99827ebe44 --- /dev/null +++ b/ceammc/ext/src/spat/hoa_rotate.h @@ -0,0 +1,38 @@ +/***************************************************************************** + * Copyright 2019 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#ifndef HOA_ROTATE_H +#define HOA_ROTATE_H + +#include + +#include "ceammc_sound_external.h" +#include "hoa_common.h" +using namespace ceammc; + +class HoaRotate : public HoaBase { + Buffer in_buf_; + Buffer out_buf_; + std::unique_ptr rotate_; + +public: + HoaRotate(const PdArgs& args); + void parseProperties() override; + + void processBlock(const t_sample** in, t_sample** out) override; + void blockSizeChanged(size_t bs) override; +}; + +void setup_spat_hoa_rotate(); + +#endif // HOA_ROTATE_H diff --git a/ceammc/ext/src/spat/hoa_wider.cpp b/ceammc/ext/src/spat/hoa_wider.cpp new file mode 100644 index 0000000000..b62fbf5c68 --- /dev/null +++ b/ceammc/ext/src/spat/hoa_wider.cpp @@ -0,0 +1,58 @@ +/***************************************************************************** + * Copyright 2019 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#include "hoa_wider.h" +#include "ceammc_factory.h" + +HoaWider::HoaWider(const PdArgs& args) + : HoaBase(args) +{ +} + +void HoaWider::parseProperties() +{ + HoaBase::parseProperties(); + + wider_.reset(new Wider2d(order())); + + const size_t N = wider_->getNumberOfHarmonics(); + in_buf_.resize(N * HOA_DEFAULT_BLOCK_SIZE); + out_buf_.resize(N * HOA_DEFAULT_BLOCK_SIZE); + + createSignalInlets(N + 1); + createSignalOutlets(N); +} + +void HoaWider::processBlock(const t_sample** in, t_sample** out) +{ + const size_t NOUTS = numOutputChannels(); + const size_t NINS = numInputChannels() - 1; // last input is for Widening + const size_t BS = blockSize(); + + for (size_t i = 0; i < NINS; i++) + Signal::copy(BS, &in[i][0], 1, &in_buf_[i], NINS); + + for (size_t i = 0; i < BS; i++) { + wider_->setWidening(in[NINS][i]); // read from last inlet + wider_->process(&in_buf_[NINS * i], &out_buf_[NOUTS * i]); + } + + for (size_t i = 0; i < NOUTS; i++) + Signal::copy(BS, &out_buf_[i], NOUTS, &out[i][0], 1); +} + +void setup_spat_hoa_wider() +{ + SoundExternalFactory obj("hoa.2d.wider~"); + obj.addAlias("hoa.wider~"); +} diff --git a/ceammc/ext/src/spat/hoa_wider.h b/ceammc/ext/src/spat/hoa_wider.h new file mode 100644 index 0000000000..c5bded7c1e --- /dev/null +++ b/ceammc/ext/src/spat/hoa_wider.h @@ -0,0 +1,35 @@ +/***************************************************************************** + * Copyright 2019 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#ifndef HOA_WIDER_H +#define HOA_WIDER_H + +#include "hoa_common.h" + +#include + +class HoaWider : public HoaBase { + std::unique_ptr wider_; + Buffer in_buf_; + Buffer out_buf_; + +public: + HoaWider(const PdArgs& args); + + void parseProperties() override; + void processBlock(const t_sample** in, t_sample** out) override; +}; + +void setup_spat_hoa_wider(); + +#endif // HOA_WIDER_H diff --git a/ceammc/ext/src/spat/mod_spat.cpp b/ceammc/ext/src/spat/mod_spat.cpp index 9d206a49d3..23962276f1 100644 --- a/ceammc/ext/src/spat/mod_spat.cpp +++ b/ceammc/ext/src/spat/mod_spat.cpp @@ -5,16 +5,42 @@ #include "pan_spread.h" #include "pan_sqrt.h" -extern void setup_spat_pan8_tilde(); +extern void setup_spat_hoa_connections(); +extern void setup_spat_hoa_decoder(); +extern void setup_spat_hoa_encoder(); +extern void setup_spat_hoa_map(); +extern void setup_spat_hoa_optim(); +extern void setup_spat_hoa_process(); +extern void setup_spat_hoa_process_inlet(); +extern void setup_spat_hoa_process_props(); +extern void setup_spat_hoa_projector(); +extern void setup_spat_hoa_recomposer(); +extern void setup_spat_hoa_rotate(); +extern void setup_spat_hoa_scope2d(); +extern void setup_spat_hoa_wider(); extern void setup_spat_pan4_tilde(); +extern void setup_spat_pan8_tilde(); void ceammc_spat_setup() { - setup_spat_pan8_tilde(); - setup_spat_pan4_tilde(); + setup_pan_cosine(); setup_pan_linear(); setup_pan_linsig(); - setup_pan_cosine(); - setup_pan_sqrt(); setup_pan_spread(); + setup_pan_sqrt(); + setup_spat_hoa_connections(); + setup_spat_hoa_decoder(); + setup_spat_hoa_encoder(); + setup_spat_hoa_map(); + setup_spat_hoa_optim(); + setup_spat_hoa_process(); + setup_spat_hoa_process_inlet(); + setup_spat_hoa_process_props(); + setup_spat_hoa_projector(); + setup_spat_hoa_recomposer(); + setup_spat_hoa_rotate(); + setup_spat_hoa_scope2d(); + setup_spat_hoa_wider(); + setup_spat_pan4_tilde(); + setup_spat_pan8_tilde(); } diff --git a/ceammc/ext/src/spat/pan_cosine.cpp b/ceammc/ext/src/spat/pan_cosine.cpp index 82b845f3cb..92bc0af348 100644 --- a/ceammc/ext/src/spat/pan_cosine.cpp +++ b/ceammc/ext/src/spat/pan_cosine.cpp @@ -1,4 +1,3 @@ -#define _USE_MATH_DEFINES #include #include "pan_cosine.h" diff --git a/ceammc/ext/src/spat/pan_spread.cpp b/ceammc/ext/src/spat/pan_spread.cpp index c537bc0708..935cf8ddea 100644 --- a/ceammc/ext/src/spat/pan_spread.cpp +++ b/ceammc/ext/src/spat/pan_spread.cpp @@ -1,4 +1,3 @@ -#define _USE_MATH_DEFINES #include #include "ceammc_convert.h" diff --git a/ceammc/ext/src/spat/spat_pan4.h b/ceammc/ext/src/spat/spat_pan4.h index ccb0fa6a7e..fe5385c5bd 100644 --- a/ceammc/ext/src/spat/spat_pan4.h +++ b/ceammc/ext/src/spat/spat_pan4.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "spat.pan4" -Code generated with Faust 2.15.10 (https://faust.grame.fr) -Compilation options: cpp, -scal -ftz 0 +Code generated with Faust 2.22.1 (https://faust.grame.fr) +Compilation options: -lang cpp -scal -ftz 0 ------------------------------------------------------------ */ #ifndef __spat_pan4_H__ @@ -14,6 +14,7 @@ Compilation options: cpp, -scal -ftz 0 #include #include +/************************** BEGIN dsp.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -96,23 +97,23 @@ class dsp { * - static class 'classInit': static tables initialization * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void init(int samplingRate) = 0; + virtual void init(int sample_rate) = 0; /** * Init instance state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceInit(int samplingRate) = 0; + virtual void instanceInit(int sample_rate) = 0; /** * Init instance constant state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceConstants(int samplingRate) = 0; + virtual void instanceConstants(int sample_rate) = 0; /* Init default control parameters values */ virtual void instanceResetUserInterface() = 0; @@ -149,8 +150,8 @@ class dsp { * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the number of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) * */ virtual void compute(double /*date_usec*/, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -169,16 +170,16 @@ class decorator_dsp : public dsp { public: - decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + decorator_dsp(dsp* dsp = nullptr):fDSP(dsp) {} virtual ~decorator_dsp() { delete fDSP; } virtual int getNumInputs() { return fDSP->getNumInputs(); } virtual int getNumOutputs() { return fDSP->getNumOutputs(); } virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } virtual int getSampleRate() { return fDSP->getSampleRate(); } - virtual void init(int samplingRate) { fDSP->init(samplingRate); } - virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } - virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void init(int sample_rate) { fDSP->init(sample_rate); } + virtual void instanceInit(int sample_rate) { fDSP->instanceInit(sample_rate); } + virtual void instanceConstants(int sample_rate) { fDSP->instanceConstants(sample_rate); } virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } @@ -233,6 +234,8 @@ class dsp_factory { #endif #endif +/************************** END dsp.h **************************/ +/************************** BEGIN UI.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -272,45 +275,54 @@ class dsp_factory { struct Soundfile; -class UI +template +class UIReal { - + public: - - UI() {} - - virtual ~UI() {} - + + UIReal() {} + virtual ~UIReal() {} + // -- widget's layouts - + virtual void openTabBox(const char* label) = 0; virtual void openHorizontalBox(const char* label) = 0; virtual void openVerticalBox(const char* label) = 0; virtual void closeBox() = 0; - + // -- active widgets - - virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - + + virtual void addButton(const char* label, REAL* zone) = 0; + virtual void addCheckButton(const char* label, REAL* zone) = 0; + virtual void addVerticalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addHorizontalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addNumEntry(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + // -- passive widgets - - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - + + virtual void addHorizontalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + virtual void addVerticalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + // -- soundfiles - + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; - + // -- metadata declarations + + virtual void declare(REAL* zone, const char* key, const char* val) {} +}; - virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +struct UI : public UIReal +{ + + UI() {} + virtual ~UI() {} }; #endif +/************************** END UI.h **************************/ +/************************** BEGIN meta.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -339,11 +351,14 @@ class UI struct Meta { - virtual void declare(const char* key, const char* value) = 0; virtual ~Meta() {}; + virtual void declare(const char* key, const char* value) = 0; + }; #endif +/************************** END meta.h **************************/ +/************************** BEGIN misc.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -366,7 +381,7 @@ struct Meta that work under terms of your choice, so long as this FAUST architecture section is not modified. ************************************************************************/ - + #ifndef __misc__ #define __misc__ @@ -374,6 +389,8 @@ struct Meta #include #include #include +#include +#include using std::max; @@ -395,27 +412,65 @@ static int int2pow2(int x) { int r = 0; while ((1<declare("filename", "spat_pan4"); + m->declare("filename", "spat_pan4.dsp"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); @@ -484,15 +540,13 @@ class spat_pan4 : public dsp { virtual int getNumInputs() { return 1; - } virtual int getNumOutputs() { return 4; - } virtual int getInputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -501,14 +555,12 @@ class spat_pan4 : public dsp { rate = -1; break; } - } return rate; - } virtual int getOutputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -529,54 +581,43 @@ class spat_pan4 : public dsp { rate = -1; break; } - } return rate; - } - static void classInit(int samplingFreq) { - + static void classInit(int sample_rate) { } - virtual void instanceConstants(int samplingFreq) { - fSamplingFreq = samplingFreq; - + virtual void instanceConstants(int sample_rate) { + fSampleRate = sample_rate; } virtual void instanceResetUserInterface() { fVslider0 = FAUSTFLOAT(1.0f); fVslider1 = FAUSTFLOAT(0.0f); - } virtual void instanceClear() { for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { fRec0[l0] = 0.0f; - } for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { fRec1[l1] = 0.0f; - } for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { fRec2[l2] = 0.0f; - } for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { fRec3[l3] = 0.0f; - } - } - virtual void init(int samplingFreq) { - classInit(samplingFreq); - instanceInit(samplingFreq); + virtual void init(int sample_rate) { + classInit(sample_rate); + instanceInit(sample_rate); } - - virtual void instanceInit(int samplingFreq) { - instanceConstants(samplingFreq); + virtual void instanceInit(int sample_rate) { + instanceConstants(sample_rate); instanceResetUserInterface(); instanceClear(); } @@ -586,8 +627,7 @@ class spat_pan4 : public dsp { } virtual int getSampleRate() { - return fSamplingFreq; - + return fSampleRate; } virtual void buildUserInterface(UI* ui_interface) { @@ -596,7 +636,6 @@ class spat_pan4 : public dsp { ui_interface->addVerticalSlider("angle", &fVslider1, 0.0f, 0.0f, 6.28318548f, 9.99999975e-05f); ui_interface->addVerticalSlider("dist", &fVslider0, 1.0f, 0.0f, 1.0f, 9.99999975e-05f); ui_interface->closeBox(); - } virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { @@ -626,9 +665,7 @@ class spat_pan4 : public dsp { fRec1[1] = fRec1[0]; fRec2[1] = fRec2[0]; fRec3[1] = fRec3[0]; - } - } }; diff --git a/ceammc/ext/src/spat/spat_pan8.h b/ceammc/ext/src/spat/spat_pan8.h index 4bec31ce43..8c189b32b3 100644 --- a/ceammc/ext/src/spat/spat_pan8.h +++ b/ceammc/ext/src/spat/spat_pan8.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "spat.pan8" -Code generated with Faust 2.15.10 (https://faust.grame.fr) -Compilation options: cpp, -scal -ftz 0 +Code generated with Faust 2.22.1 (https://faust.grame.fr) +Compilation options: -lang cpp -scal -ftz 0 ------------------------------------------------------------ */ #ifndef __spat_pan8_H__ @@ -14,6 +14,7 @@ Compilation options: cpp, -scal -ftz 0 #include #include +/************************** BEGIN dsp.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -96,23 +97,23 @@ class dsp { * - static class 'classInit': static tables initialization * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void init(int samplingRate) = 0; + virtual void init(int sample_rate) = 0; /** * Init instance state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceInit(int samplingRate) = 0; + virtual void instanceInit(int sample_rate) = 0; /** * Init instance constant state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceConstants(int samplingRate) = 0; + virtual void instanceConstants(int sample_rate) = 0; /* Init default control parameters values */ virtual void instanceResetUserInterface() = 0; @@ -149,8 +150,8 @@ class dsp { * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the number of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) * */ virtual void compute(double /*date_usec*/, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -169,16 +170,16 @@ class decorator_dsp : public dsp { public: - decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + decorator_dsp(dsp* dsp = nullptr):fDSP(dsp) {} virtual ~decorator_dsp() { delete fDSP; } virtual int getNumInputs() { return fDSP->getNumInputs(); } virtual int getNumOutputs() { return fDSP->getNumOutputs(); } virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } virtual int getSampleRate() { return fDSP->getSampleRate(); } - virtual void init(int samplingRate) { fDSP->init(samplingRate); } - virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } - virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void init(int sample_rate) { fDSP->init(sample_rate); } + virtual void instanceInit(int sample_rate) { fDSP->instanceInit(sample_rate); } + virtual void instanceConstants(int sample_rate) { fDSP->instanceConstants(sample_rate); } virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } @@ -233,6 +234,8 @@ class dsp_factory { #endif #endif +/************************** END dsp.h **************************/ +/************************** BEGIN UI.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -272,45 +275,54 @@ class dsp_factory { struct Soundfile; -class UI +template +class UIReal { - + public: - - UI() {} - - virtual ~UI() {} - + + UIReal() {} + virtual ~UIReal() {} + // -- widget's layouts - + virtual void openTabBox(const char* label) = 0; virtual void openHorizontalBox(const char* label) = 0; virtual void openVerticalBox(const char* label) = 0; virtual void closeBox() = 0; - + // -- active widgets - - virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - + + virtual void addButton(const char* label, REAL* zone) = 0; + virtual void addCheckButton(const char* label, REAL* zone) = 0; + virtual void addVerticalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addHorizontalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addNumEntry(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + // -- passive widgets - - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - + + virtual void addHorizontalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + virtual void addVerticalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + // -- soundfiles - + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; - + // -- metadata declarations + + virtual void declare(REAL* zone, const char* key, const char* val) {} +}; - virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +struct UI : public UIReal +{ + + UI() {} + virtual ~UI() {} }; #endif +/************************** END UI.h **************************/ +/************************** BEGIN meta.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -339,11 +351,14 @@ class UI struct Meta { - virtual void declare(const char* key, const char* value) = 0; virtual ~Meta() {}; + virtual void declare(const char* key, const char* value) = 0; + }; #endif +/************************** END meta.h **************************/ +/************************** BEGIN misc.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -366,7 +381,7 @@ struct Meta that work under terms of your choice, so long as this FAUST architecture section is not modified. ************************************************************************/ - + #ifndef __misc__ #define __misc__ @@ -374,6 +389,8 @@ struct Meta #include #include #include +#include +#include using std::max; @@ -395,27 +412,65 @@ static int int2pow2(int x) { int r = 0; while ((1<declare("filename", "spat_pan8"); + m->declare("filename", "spat_pan8.dsp"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); @@ -488,15 +544,13 @@ class spat_pan8 : public dsp { virtual int getNumInputs() { return 1; - } virtual int getNumOutputs() { return 8; - } virtual int getInputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -505,14 +559,12 @@ class spat_pan8 : public dsp { rate = -1; break; } - } return rate; - } virtual int getOutputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -549,70 +601,55 @@ class spat_pan8 : public dsp { rate = -1; break; } - } return rate; - } - static void classInit(int samplingFreq) { - + static void classInit(int sample_rate) { } - virtual void instanceConstants(int samplingFreq) { - fSamplingFreq = samplingFreq; - + virtual void instanceConstants(int sample_rate) { + fSampleRate = sample_rate; } virtual void instanceResetUserInterface() { fVslider0 = FAUSTFLOAT(1.0f); fVslider1 = FAUSTFLOAT(0.0f); - } virtual void instanceClear() { for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { fRec0[l0] = 0.0f; - } for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { fRec1[l1] = 0.0f; - } for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { fRec2[l2] = 0.0f; - } for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { fRec3[l3] = 0.0f; - } for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { fRec4[l4] = 0.0f; - } for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { fRec5[l5] = 0.0f; - } for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { fRec6[l6] = 0.0f; - } for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) { fRec7[l7] = 0.0f; - } - } - virtual void init(int samplingFreq) { - classInit(samplingFreq); - instanceInit(samplingFreq); + virtual void init(int sample_rate) { + classInit(sample_rate); + instanceInit(sample_rate); } - - virtual void instanceInit(int samplingFreq) { - instanceConstants(samplingFreq); + virtual void instanceInit(int sample_rate) { + instanceConstants(sample_rate); instanceResetUserInterface(); instanceClear(); } @@ -622,8 +659,7 @@ class spat_pan8 : public dsp { } virtual int getSampleRate() { - return fSamplingFreq; - + return fSampleRate; } virtual void buildUserInterface(UI* ui_interface) { @@ -632,7 +668,6 @@ class spat_pan8 : public dsp { ui_interface->addVerticalSlider("angle", &fVslider1, 0.0f, 0.0f, 6.28318548f, 9.99999975e-05f); ui_interface->addVerticalSlider("dist", &fVslider0, 1.0f, 0.0f, 1.0f, 9.99999975e-05f); ui_interface->closeBox(); - } virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { @@ -682,9 +717,7 @@ class spat_pan8 : public dsp { fRec5[1] = fRec5[0]; fRec6[1] = fRec6[0]; fRec7[1] = fRec7[0]; - } - } }; diff --git a/ceammc/ext/src/synth/stk_synth_factory.h b/ceammc/ext/src/synth/stk_synth_factory.h new file mode 100644 index 0000000000..c7860ee1bf --- /dev/null +++ b/ceammc/ext/src/synth/stk_synth_factory.h @@ -0,0 +1,36 @@ +/***************************************************************************** + * Copyright 2020 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#ifndef STK_SYNTH_FACTORY_H +#define STK_SYNTH_FACTORY_H + +#include "ceammc_factory.h" + +namespace ceammc { + +template +class StkSynthFactory : public SoundExternalFactory { + bool rawpath_init_; + +public: + StkSynthFactory(const char* name, int flags = OBJECT_FACTORY_DEFAULT) + : SoundExternalFactory(name, flags) + , rawpath_init_(false) + { + SoundExternalFactory::addMethod("cc", &T::m_cc); + T::initRawWaves(SoundExternalFactory::classPointer()); + } +}; +} + +#endif // STK_SYNTH_FACTORY_H diff --git a/ceammc/ext/src/synth/stksynth.cpp b/ceammc/ext/src/synth/stksynth.cpp index dce411a812..e91c316b61 100644 --- a/ceammc/ext/src/synth/stksynth.cpp +++ b/ceammc/ext/src/synth/stksynth.cpp @@ -7,6 +7,34 @@ #include "stksynth_p.h" +extern "C" { +#include "m_imp.h" +} + +class RawpathInitializer { + bool done_; + RawpathInitializer() + : done_(false) + { + } + +public: + static RawpathInitializer& instance() + { + static RawpathInitializer instance_; + return instance_; + } + + void init(t_class* c) + { + if (done_) + return; + + stk::Stk::setRawwavePath(std::string(c->c_externdir->s_name) + "/stk/"); + done_ = true; + } +}; + StkBase::StkBase(const PdArgs& args, stk::Instrmnt* instr) : SoundExternal(args) , synth_(instr) @@ -49,10 +77,15 @@ StkSynth::StkSynth(const PdArgs& args, stk::Instrmnt* instr) , freq_(nullptr) , gate_(0) { - freq_ = new FloatPropertyMin("@freq", mtof(48), 0); + freq_ = new FloatPropertyMin("@freq", mtof(57), 0); + freq_->info().setUnits(PropertyInfoUnits::HZ); createProperty(freq_); - createCbProperty("@gate", &StkSynth::propGate, &StkSynth::propSetGate); + { + Property* p = createCbProperty("@gate", &StkSynth::propGate, &StkSynth::propSetGate); + p->info().setType(PropertyInfoType::FLOAT); + p->info().setRange(0, 1); + } } AtomList StkSynth::propGate() const @@ -90,6 +123,11 @@ void StkBase::m_cc(t_symbol* s, const AtomList& lst) synth_->controlChange(ctl_num, ctl_val); } +void StkBase::initRawWaves(t_class* c) +{ + RawpathInitializer::instance().init(c); +} + class FreqGetter : public stk::SineWave { public: FreqGetter(const stk::SineWave* ptr) diff --git a/ceammc/ext/src/synth/stksynth.h b/ceammc/ext/src/synth/stksynth.h index 2ffa63548e..842a09b38f 100644 --- a/ceammc/ext/src/synth/stksynth.h +++ b/ceammc/ext/src/synth/stksynth.h @@ -24,6 +24,9 @@ class StkBase : public SoundExternal { template T* synth() { return static_cast(synth_); } + +public: + static void initRawWaves(t_class* c); }; class StkSynth : public StkBase { diff --git a/ceammc/ext/src/synth/synth_birds.h b/ceammc/ext/src/synth/synth_birds.h index e54ad68a16..8f898c9dc1 100644 --- a/ceammc/ext/src/synth/synth_birds.h +++ b/ceammc/ext/src/synth/synth_birds.h @@ -1,8 +1,8 @@ /* ------------------------------------------------------------ author: "Pierre Cochard" name: "synth.birds" -Code generated with Faust 2.15.0 (https://faust.grame.fr) -Compilation options: cpp, -scal -ftz 0 +Code generated with Faust 2.22.1 (https://faust.grame.fr) +Compilation options: -lang cpp -scal -ftz 0 ------------------------------------------------------------ */ #ifndef __synth_birds_H__ @@ -15,6 +15,7 @@ Compilation options: cpp, -scal -ftz 0 #include #include +/************************** BEGIN dsp.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -97,23 +98,23 @@ class dsp { * - static class 'classInit': static tables initialization * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void init(int samplingRate) = 0; + virtual void init(int sample_rate) = 0; /** * Init instance state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceInit(int samplingRate) = 0; + virtual void instanceInit(int sample_rate) = 0; /** * Init instance constant state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceConstants(int samplingRate) = 0; + virtual void instanceConstants(int sample_rate) = 0; /* Init default control parameters values */ virtual void instanceResetUserInterface() = 0; @@ -150,8 +151,8 @@ class dsp { * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the number of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) * */ virtual void compute(double /*date_usec*/, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -170,16 +171,16 @@ class decorator_dsp : public dsp { public: - decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + decorator_dsp(dsp* dsp = nullptr):fDSP(dsp) {} virtual ~decorator_dsp() { delete fDSP; } virtual int getNumInputs() { return fDSP->getNumInputs(); } virtual int getNumOutputs() { return fDSP->getNumOutputs(); } virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } virtual int getSampleRate() { return fDSP->getSampleRate(); } - virtual void init(int samplingRate) { fDSP->init(samplingRate); } - virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } - virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void init(int sample_rate) { fDSP->init(sample_rate); } + virtual void instanceInit(int sample_rate) { fDSP->instanceInit(sample_rate); } + virtual void instanceConstants(int sample_rate) { fDSP->instanceConstants(sample_rate); } virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } @@ -234,6 +235,8 @@ class dsp_factory { #endif #endif +/************************** END dsp.h **************************/ +/************************** BEGIN UI.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -273,45 +276,54 @@ class dsp_factory { struct Soundfile; -class UI +template +class UIReal { - + public: - - UI() {} - - virtual ~UI() {} - + + UIReal() {} + virtual ~UIReal() {} + // -- widget's layouts - + virtual void openTabBox(const char* label) = 0; virtual void openHorizontalBox(const char* label) = 0; virtual void openVerticalBox(const char* label) = 0; virtual void closeBox() = 0; - + // -- active widgets - - virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - + + virtual void addButton(const char* label, REAL* zone) = 0; + virtual void addCheckButton(const char* label, REAL* zone) = 0; + virtual void addVerticalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addHorizontalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addNumEntry(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + // -- passive widgets - - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - + + virtual void addHorizontalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + virtual void addVerticalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + // -- soundfiles - + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; - + // -- metadata declarations + + virtual void declare(REAL* zone, const char* key, const char* val) {} +}; + +struct UI : public UIReal +{ - virtual void declare(FAUSTFLOAT*, const char*, const char*) {} + UI() {} + virtual ~UI() {} }; #endif +/************************** END UI.h **************************/ +/************************** BEGIN meta.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -340,11 +352,14 @@ class UI struct Meta { - virtual void declare(const char* key, const char* value) = 0; virtual ~Meta() {}; + virtual void declare(const char* key, const char* value) = 0; + }; #endif +/************************** END meta.h **************************/ +/************************** BEGIN misc.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -367,7 +382,7 @@ struct Meta that work under terms of your choice, so long as this FAUST architecture section is not modified. ************************************************************************/ - + #ifndef __misc__ #define __misc__ @@ -375,6 +390,8 @@ struct Meta #include #include #include +#include +#include using std::max; @@ -396,27 +413,65 @@ static int int2pow2(int x) { int r = 0; while ((1< #include - class synth_birdsSIG0 { private: @@ -458,27 +512,23 @@ class synth_birdsSIG0 { int getNumInputssynth_birdsSIG0() { return 0; - } int getNumOutputssynth_birdsSIG0() { return 1; - } int getInputRatesynth_birdsSIG0(int channel) { int rate; - switch (channel) { + switch ((channel)) { default: { rate = -1; break; } - } return rate; - } int getOutputRatesynth_birdsSIG0(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 0; break; @@ -487,47 +537,41 @@ class synth_birdsSIG0 { rate = -1; break; } - } return rate; - } - void instanceInitsynth_birdsSIG0(int samplingFreq) { + void instanceInitsynth_birdsSIG0(int sample_rate) { for (int l16 = 0; (l16 < 2); l16 = (l16 + 1)) { iRec14[l16] = 0; - } - } - void fillsynth_birdsSIG0(int count, float* output) { + void fillsynth_birdsSIG0(int count, float* table) { for (int i = 0; (i < count); i = (i + 1)) { iRec14[0] = (iRec14[1] + 1); - output[i] = std::sin((9.58738019e-05f * float((iRec14[0] + -1)))); + table[i] = std::sin((9.58738019e-05f * float((iRec14[0] + -1)))); iRec14[1] = iRec14[0]; - } - } + }; -synth_birdsSIG0* newsynth_birdsSIG0() { return (synth_birdsSIG0*)new synth_birdsSIG0(); } -void deletesynth_birdsSIG0(synth_birdsSIG0* dsp) { delete dsp; } +static synth_birdsSIG0* newsynth_birdsSIG0() { return (synth_birdsSIG0*)new synth_birdsSIG0(); } +static void deletesynth_birdsSIG0(synth_birdsSIG0* dsp) { delete dsp; } static float ftbl0synth_birdsSIG0[65537]; static float synth_birds_faustpower2_f(float value) { return (value * value); - } static float synth_birds_faustpower3_f(float value) { return ((value * value) * value); - } #ifndef FAUSTCLASS #define FAUSTCLASS synth_birds #endif + #ifdef __APPLE__ #define exp10f __exp10f #define exp10 __exp10 @@ -537,16 +581,17 @@ class synth_birds : public dsp { private: - int fSamplingFreq; + int fSampleRate; float fConst0; float fConst1; float fConst2; float fConst3; + int iVec0[3]; float fConst4; float fConst5; - int iVec0[3]; float fConst6; float fConst7; + float fConst8; FAUSTFLOAT fHslider0; float fRec8[2]; int iRec7[2]; @@ -559,11 +604,10 @@ class synth_birds : public dsp { float fRec5[2]; int iVec2[2]; int iRec4[2]; - float fConst8; + float fConst9; float fRec13[4]; float fRec12[2]; int iRec3[2]; - float fConst9; float fConst10; float fConst11; float fConst12; @@ -580,16 +624,16 @@ class synth_birds : public dsp { float fConst23; float fConst24; float fConst25; + float fConst26; float fRec2[2]; float fRec1[2]; - float fConst26; float fConst27; + float fRec17[4]; + float fRec16[2]; float fConst28; float fConst29; - float fRec18[4]; - float fRec17[2]; float fConst30; - int iRec21[2]; + int iRec22[2]; float fConst31; float fConst32; float fConst33; @@ -598,30 +642,30 @@ class synth_birds : public dsp { float fConst36; float fConst37; float fConst38; + float fRec21[2]; float fRec20[2]; - float fRec19[2]; float fVec3[2]; - float fRec22[2]; + float fRec19[2]; float fVec4[2]; float fVec5[2]; int IOTA; float fVec6[4096]; - float fRec16[2]; float fConst39; - int iRec25[2]; + float fRec18[2]; float fConst40; + int iRec25[2]; float fConst41; float fConst42; float fConst43; + float fConst44; float fRec24[2]; float fRec23[2]; - float fConst44; - int iRec28[2]; float fConst45; + int iRec28[2]; float fConst46; + float fConst47; float fRec30[4]; float fRec29[2]; - float fConst47; float fConst48; float fConst49; float fConst50; @@ -641,11 +685,11 @@ class synth_birds : public dsp { float fConst64; float fConst65; float fConst66; + float fConst67; float fRec27[2]; float fRec26[2]; float fRec15[2]; float fVec7[2]; - float fConst67; float fRec0[2]; public: @@ -653,10 +697,23 @@ class synth_birds : public dsp { void metadata(Meta* m) { m->declare("author", "Pierre Cochard"); m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.0"); - m->declare("filename", "synth_birds"); + m->declare("basics.lib/version", "0.1"); + m->declare("filename", "synth_birds.dsp"); + m->declare("filters.lib/lowpass0_highpass1", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/lowpass0_highpass1:author", "Julius O. Smith III"); + m->declare("filters.lib/lowpass:author", "Julius O. Smith III"); + m->declare("filters.lib/lowpass:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/lowpass:license", "MIT-style STK-4.3 license"); m->declare("filters.lib/name", "Faust Filters Library"); - m->declare("filters.lib/version", "0.0"); + m->declare("filters.lib/pole:author", "Julius O. Smith III"); + m->declare("filters.lib/pole:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/pole:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/tf1:author", "Julius O. Smith III"); + m->declare("filters.lib/tf1:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/tf1:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/tf1s:author", "Julius O. Smith III"); + m->declare("filters.lib/tf1s:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/tf1s:license", "MIT-style STK-4.3 license"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); @@ -673,27 +730,23 @@ class synth_birds : public dsp { virtual int getNumInputs() { return 0; - } virtual int getNumOutputs() { return 2; - } virtual int getInputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { default: { rate = -1; break; } - } return rate; - } virtual int getOutputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -706,52 +759,49 @@ class synth_birds : public dsp { rate = -1; break; } - } return rate; - } - static void classInit(int samplingFreq) { + static void classInit(int sample_rate) { synth_birdsSIG0* sig0 = newsynth_birdsSIG0(); - sig0->instanceInitsynth_birdsSIG0(samplingFreq); + sig0->instanceInitsynth_birdsSIG0(sample_rate); sig0->fillsynth_birdsSIG0(65537, ftbl0synth_birdsSIG0); deletesynth_birdsSIG0(sig0); - } - virtual void instanceConstants(int samplingFreq) { - fSamplingFreq = samplingFreq; - fConst0 = std::min(192000.0f, std::max(1.0f, float(fSamplingFreq))); + virtual void instanceConstants(int sample_rate) { + fSampleRate = sample_rate; + fConst0 = std::min(192000.0f, std::max(1.0f, float(fSampleRate))); fConst1 = (1.0f / std::tan((7853.98145f / fConst0))); fConst2 = (1.0f / (fConst1 + 1.0f)); - fConst3 = (1.0f / std::tan((9424.77832f / fConst0))); - fConst4 = (1.0f / (fConst3 + 1.0f)); - fConst5 = (1.0f - fConst3); - fConst6 = (0.00100000005f * fConst0); - fConst7 = (60.0f * fConst0); - fConst8 = (0.00251000002f * fConst0); - fConst9 = (0.00218875497f * fConst0); - fConst10 = (0.00208835304f * fConst0); - fConst11 = (0.00182730902f * fConst0); - fConst12 = (0.00174698804f * fConst0); - fConst13 = (0.00152610498f * fConst0); - fConst14 = (0.00134538196f * fConst0); - fConst15 = (0.001064257f * fConst0); - fConst16 = (0.000983936014f * fConst0); - fConst17 = (0.000682730984f * fConst0); - fConst18 = (3319.99805f / fConst0); - fConst19 = (0.000582328998f * fConst0); - fConst20 = (9959.96094f / fConst0); - fConst21 = (0.000461846997f * fConst0); - fConst22 = (7702.39551f / fConst0); - fConst23 = (6.0241e-05f * fConst0); - fConst24 = (2490.00269f / fConst0); - fConst25 = (16599.9902f / fConst0); - fConst26 = (1.0f / fConst0); - fConst27 = (359.25119f / fConst0); - fConst28 = (0.0416666679f * synth_birds_faustpower2_f(fConst0)); - fConst29 = (0.5f * fConst0); + fConst3 = (1.0f - fConst1); + fConst4 = (1.0f / std::tan((9424.77832f / fConst0))); + fConst5 = (1.0f / (fConst4 + 1.0f)); + fConst6 = (1.0f - fConst4); + fConst7 = (0.00100000005f * fConst0); + fConst8 = (60.0f * fConst0); + fConst9 = (0.00251000002f * fConst0); + fConst10 = (0.00218875497f * fConst0); + fConst11 = (0.00208835304f * fConst0); + fConst12 = (0.00182730902f * fConst0); + fConst13 = (0.00174698804f * fConst0); + fConst14 = (0.00152610498f * fConst0); + fConst15 = (0.00134538196f * fConst0); + fConst16 = (0.001064257f * fConst0); + fConst17 = (0.000983936014f * fConst0); + fConst18 = (0.000682730984f * fConst0); + fConst19 = (3319.99805f / fConst0); + fConst20 = (0.000582328998f * fConst0); + fConst21 = (9959.96094f / fConst0); + fConst22 = (0.000461846997f * fConst0); + fConst23 = (7702.39551f / fConst0); + fConst24 = (6.0241e-05f * fConst0); + fConst25 = (2490.00269f / fConst0); + fConst26 = (16599.9902f / fConst0); + fConst27 = (1.0f / fConst0); + fConst28 = (359.25119f / fConst0); + fConst29 = (0.0416666679f * synth_birds_faustpower2_f(fConst0)); fConst30 = (0.00170000002f * fConst0); fConst31 = (0.001646586f * fConst0); fConst32 = (0.001305221f * fConst0); @@ -761,207 +811,166 @@ class synth_birds : public dsp { fConst36 = (0.000863454014f * fConst0); fConst37 = (646830.5f / fConst0); fConst38 = (567.48822f / fConst0); - fConst39 = (0.000549999997f * fConst0); - fConst40 = (0.000502068026f * fConst0); - fConst41 = (0.000240964f * fConst0); - fConst42 = (3829.8916f / fConst0); - fConst43 = (2299.09863f / fConst0); - fConst44 = (0.000943000021f * fConst0); - fConst45 = (0.000829679018f * fConst0); - fConst46 = (0.000943333027f * fConst0); - fConst47 = (8798.63477f / fConst0); - fConst48 = (0.000806947995f * fConst0); - fConst49 = (43992.7852f / fConst0); - fConst50 = (0.00071602402f * fConst0); - fConst51 = (10998.1963f / fConst0); - fConst52 = (0.000659196987f * fConst0); - fConst53 = (17597.2695f / fConst0); - fConst54 = (0.000613734999f * fConst0); - fConst55 = (21996.3926f / fConst0); - fConst56 = (0.000488715013f * fConst0); - fConst57 = (7998.72021f / fConst0); - fConst58 = (0.000431888009f * fConst0); - fConst59 = (7637.21484f / fConst0); - fConst60 = (0.000318233011f * fConst0); - fConst61 = (8798.55664f / fConst0); - fConst62 = (0.000193212996f * fConst0); - fConst63 = (7.99872017f / fConst0); - fConst64 = (0.000147750994f * fConst0); - fConst65 = (21996.3926f / fConst0); - fConst66 = (6768.14355f / fConst0); - fConst67 = (1.0f - fConst1); - + fConst39 = (0.5f * fConst0); + fConst40 = (0.000549999997f * fConst0); + fConst41 = (0.000502068026f * fConst0); + fConst42 = (0.000240964f * fConst0); + fConst43 = (3829.8916f / fConst0); + fConst44 = (2299.09863f / fConst0); + fConst45 = (0.000943000021f * fConst0); + fConst46 = (0.000829679018f * fConst0); + fConst47 = (0.000943333027f * fConst0); + fConst48 = (8798.63477f / fConst0); + fConst49 = (0.000806947995f * fConst0); + fConst50 = (43992.7852f / fConst0); + fConst51 = (0.00071602402f * fConst0); + fConst52 = (10998.1963f / fConst0); + fConst53 = (0.000659196987f * fConst0); + fConst54 = (17597.2695f / fConst0); + fConst55 = (0.000613734999f * fConst0); + fConst56 = (21996.3926f / fConst0); + fConst57 = (0.000488715013f * fConst0); + fConst58 = (7998.72021f / fConst0); + fConst59 = (0.000431888009f * fConst0); + fConst60 = (7637.21484f / fConst0); + fConst61 = (0.000318233011f * fConst0); + fConst62 = (8798.55664f / fConst0); + fConst63 = (0.000193212996f * fConst0); + fConst64 = (7.99872017f / fConst0); + fConst65 = (0.000147750994f * fConst0); + fConst66 = (21996.3926f / fConst0); + fConst67 = (6768.14355f / fConst0); } virtual void instanceResetUserInterface() { fHslider0 = FAUSTFLOAT(240.0f); fHslider1 = FAUSTFLOAT(50.0f); - } virtual void instanceClear() { for (int l0 = 0; (l0 < 3); l0 = (l0 + 1)) { iVec0[l0] = 0; - } for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { fRec8[l1] = 0.0f; - } for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { iRec7[l2] = 0; - } for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { iRec9[l3] = 0; - } for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { fRec10[l4] = 0.0f; - } for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { iVec1[l5] = 0; - } for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { fRec6[l6] = 0.0f; - } for (int l7 = 0; (l7 < 4); l7 = (l7 + 1)) { fRec11[l7] = 0.0f; - } for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { fRec5[l8] = 0.0f; - } for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { iVec2[l9] = 0; - } for (int l10 = 0; (l10 < 2); l10 = (l10 + 1)) { iRec4[l10] = 0; - } for (int l11 = 0; (l11 < 4); l11 = (l11 + 1)) { fRec13[l11] = 0.0f; - } for (int l12 = 0; (l12 < 2); l12 = (l12 + 1)) { fRec12[l12] = 0.0f; - } for (int l13 = 0; (l13 < 2); l13 = (l13 + 1)) { iRec3[l13] = 0; - } for (int l14 = 0; (l14 < 2); l14 = (l14 + 1)) { fRec2[l14] = 0.0f; - } for (int l15 = 0; (l15 < 2); l15 = (l15 + 1)) { fRec1[l15] = 0.0f; - } for (int l17 = 0; (l17 < 4); l17 = (l17 + 1)) { - fRec18[l17] = 0.0f; - + fRec17[l17] = 0.0f; } for (int l18 = 0; (l18 < 2); l18 = (l18 + 1)) { - fRec17[l18] = 0.0f; - + fRec16[l18] = 0.0f; } for (int l19 = 0; (l19 < 2); l19 = (l19 + 1)) { - iRec21[l19] = 0; - + iRec22[l19] = 0; } for (int l20 = 0; (l20 < 2); l20 = (l20 + 1)) { - fRec20[l20] = 0.0f; - + fRec21[l20] = 0.0f; } for (int l21 = 0; (l21 < 2); l21 = (l21 + 1)) { - fRec19[l21] = 0.0f; - + fRec20[l21] = 0.0f; } for (int l22 = 0; (l22 < 2); l22 = (l22 + 1)) { fVec3[l22] = 0.0f; - } for (int l23 = 0; (l23 < 2); l23 = (l23 + 1)) { - fRec22[l23] = 0.0f; - + fRec19[l23] = 0.0f; } for (int l24 = 0; (l24 < 2); l24 = (l24 + 1)) { fVec4[l24] = 0.0f; - } for (int l25 = 0; (l25 < 2); l25 = (l25 + 1)) { fVec5[l25] = 0.0f; - } IOTA = 0; for (int l26 = 0; (l26 < 4096); l26 = (l26 + 1)) { fVec6[l26] = 0.0f; - } for (int l27 = 0; (l27 < 2); l27 = (l27 + 1)) { - fRec16[l27] = 0.0f; - + fRec18[l27] = 0.0f; } for (int l28 = 0; (l28 < 2); l28 = (l28 + 1)) { iRec25[l28] = 0; - } for (int l29 = 0; (l29 < 2); l29 = (l29 + 1)) { fRec24[l29] = 0.0f; - } for (int l30 = 0; (l30 < 2); l30 = (l30 + 1)) { fRec23[l30] = 0.0f; - } for (int l31 = 0; (l31 < 2); l31 = (l31 + 1)) { iRec28[l31] = 0; - } for (int l32 = 0; (l32 < 4); l32 = (l32 + 1)) { fRec30[l32] = 0.0f; - } for (int l33 = 0; (l33 < 2); l33 = (l33 + 1)) { fRec29[l33] = 0.0f; - } for (int l34 = 0; (l34 < 2); l34 = (l34 + 1)) { fRec27[l34] = 0.0f; - } for (int l35 = 0; (l35 < 2); l35 = (l35 + 1)) { fRec26[l35] = 0.0f; - } for (int l36 = 0; (l36 < 2); l36 = (l36 + 1)) { fRec15[l36] = 0.0f; - } for (int l37 = 0; (l37 < 2); l37 = (l37 + 1)) { fVec7[l37] = 0.0f; - } for (int l38 = 0; (l38 < 2); l38 = (l38 + 1)) { fRec0[l38] = 0.0f; - } - } - virtual void init(int samplingFreq) { - classInit(samplingFreq); - instanceInit(samplingFreq); + virtual void init(int sample_rate) { + classInit(sample_rate); + instanceInit(sample_rate); } - virtual void instanceInit(int samplingFreq) { - instanceConstants(samplingFreq); + virtual void instanceInit(int sample_rate) { + instanceConstants(sample_rate); instanceResetUserInterface(); instanceClear(); } @@ -969,9 +978,9 @@ class synth_birds : public dsp { virtual synth_birds* clone() { return new synth_birds(); } + virtual int getSampleRate() { - return fSamplingFreq; - + return fSampleRate; } virtual void buildUserInterface(UI* ui_interface) { @@ -984,7 +993,6 @@ class synth_birds : public dsp { ui_interface->declare(&fHslider0, "style", "knob"); ui_interface->addHorizontalSlider("speed", &fHslider0, 240.0f, 120.0f, 480.0f, 0.100000001f); ui_interface->closeBox(); - } virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { @@ -995,7 +1003,7 @@ class synth_birds : public dsp { for (int i = 0; (i < count); i = (i + 1)) { iVec0[0] = 1; fRec8[0] = (fSlow0 + (0.999000013f * fRec8[1])); - iRec7[0] = ((iVec0[1] + iRec7[1]) % int((fConst7 / fRec8[0]))); + iRec7[0] = ((iVec0[1] + iRec7[1]) % int((fConst8 / fRec8[0]))); iRec9[0] = ((1103515245 * iRec9[1]) + 12345); fRec10[0] = (fSlow1 + (0.999000013f * fRec10[1])); int iTemp0 = ((iRec7[0] == 0) * (std::fabs((4.65661287e-10f * float(iRec9[0]))) <= fRec10[0])); @@ -1003,32 +1011,32 @@ class synth_birds : public dsp { fRec6[0] = ((fRec6[1] + float((float((iTemp0 - iVec1[1])) > 0.0f))) - (0.020833334f * float((fRec6[1] > 0.0f)))); int iTemp1 = (fRec6[0] > 0.0f); fRec11[0] = std::fmod(float((int((2994.2312f * (fRec11[2] + fRec11[3]))) + 38125)), 2900.0f); - fRec5[0] = (iTemp1?(fRec11[0] + 100.0f):fRec5[1]); - int iTemp2 = int((fConst6 * std::fabs((fRec5[0] + -1.0f)))); + fRec5[0] = (iTemp1 ? (fRec11[0] + 100.0f) : fRec5[1]); + int iTemp2 = int((fConst7 * std::fabs((fRec5[0] + -1.0f)))); iVec2[0] = iTemp2; iRec4[0] = ((iTemp2 == iVec2[1]) * (iRec4[1] + 1)); float fTemp3 = float(iRec4[0]); fRec13[0] = std::fmod(float((int((2994.2312f * (fRec13[2] + fRec13[3]))) + 38125)), 2000.0f); - fRec12[0] = (iTemp1?fRec13[0]:fRec12[1]); + fRec12[0] = (iTemp1 ? fRec13[0] : fRec12[1]); float fTemp4 = std::fabs((fRec12[0] + -1.0f)); - iRec3[0] = ((fTemp3 < (fConst8 * fTemp4))?iRec4[0]:iRec3[1]); + iRec3[0] = ((fTemp3 < (fConst9 * fTemp4)) ? iRec4[0] : iRec3[1]); float fTemp5 = float(iRec3[0]); - int iTemp6 = (fTemp5 < (fConst16 * fTemp4)); - float fTemp7 = (fConst17 * fTemp4); + int iTemp6 = (fTemp5 < (fConst17 * fTemp4)); + float fTemp7 = (fConst18 * fTemp4); int iTemp8 = (fTemp5 < fTemp7); - float fTemp9 = (fConst19 * fTemp4); + float fTemp9 = (fConst20 * fTemp4); int iTemp10 = (fTemp5 < fTemp9); - float fTemp11 = (fConst21 * fTemp4); + float fTemp11 = (fConst22 * fTemp4); int iTemp12 = (fTemp5 < fTemp11); - float fTemp13 = (fConst23 * fTemp4); + float fTemp13 = (fConst24 * fTemp4); int iTemp14 = (fTemp5 < fTemp13); - fRec2[0] = ((0.999000013f * fRec2[1]) + (0.00100000005f * ((fTemp5 < (fConst9 * fTemp4))?((fTemp5 < (fConst10 * fTemp4))?((fTemp5 < (fConst11 * fTemp4))?((fTemp5 < (fConst12 * fTemp4))?((fTemp5 < (fConst13 * fTemp4))?((fTemp5 < (fConst14 * fTemp4))?((fTemp5 < (fConst15 * fTemp4))?(iTemp6?(iTemp8?(iTemp10?(iTemp12?(iTemp14?((iRec3[0] < 0)?0.0f:(iTemp14?(fConst25 * (fTemp5 / fTemp4)):1.0f)):(iTemp12?((fConst24 * ((0.0f - (fTemp5 - fTemp13)) / fTemp4)) + 1.0f):0.0f)):(iTemp10?(fConst22 * ((fTemp5 - fTemp11) / fTemp4)):0.927999973f)):(iTemp8?((fConst20 * ((0.0f - (0.428000003f * (fTemp5 - fTemp9))) / fTemp4)) + 0.927999973f):0.5f)):(iTemp6?((fConst18 * ((0.0f - (0.5f * (fTemp5 - fTemp7))) / fTemp4)) + 0.5f):0.0f)):0.0f):0.0f):0.0f):0.0f):0.0f):0.0f):0.0f):0.0f))); - fRec1[0] = (0.0f - (fConst4 * ((fConst5 * fRec1[1]) - (fRec2[0] + fRec2[1])))); - fRec18[0] = std::fmod(float((int((2994.2312f * (fRec18[2] + fRec18[3]))) + 38125)), 22.0f); - fRec17[0] = (iTemp1?(fRec18[0] + 72.0f):fRec17[1]); - float fTemp15 = std::pow(2.0f, (0.0833333358f * (std::fabs((fRec17[0] + -1.0f)) + -69.0f))); - iRec21[0] = ((fTemp3 < (fConst30 * fTemp4))?iRec4[0]:iRec21[1]); - float fTemp16 = float(iRec21[0]); + fRec2[0] = ((0.999000013f * fRec2[1]) + (0.00100000005f * ((fTemp5 < (fConst10 * fTemp4)) ? ((fTemp5 < (fConst11 * fTemp4)) ? ((fTemp5 < (fConst12 * fTemp4)) ? ((fTemp5 < (fConst13 * fTemp4)) ? ((fTemp5 < (fConst14 * fTemp4)) ? ((fTemp5 < (fConst15 * fTemp4)) ? ((fTemp5 < (fConst16 * fTemp4)) ? (iTemp6 ? (iTemp8 ? (iTemp10 ? (iTemp12 ? (iTemp14 ? ((iRec3[0] < 0) ? 0.0f : (iTemp14 ? (fConst26 * (fTemp5 / fTemp4)) : 1.0f)) : (iTemp12 ? ((fConst25 * ((0.0f - (fTemp5 - fTemp13)) / fTemp4)) + 1.0f) : 0.0f)) : (iTemp10 ? (fConst23 * ((fTemp5 - fTemp11) / fTemp4)) : 0.927999973f)) : (iTemp8 ? ((fConst21 * ((0.0f - (0.428000003f * (fTemp5 - fTemp9))) / fTemp4)) + 0.927999973f) : 0.5f)) : (iTemp6 ? ((fConst19 * ((0.0f - (0.5f * (fTemp5 - fTemp7))) / fTemp4)) + 0.5f) : 0.0f)) : 0.0f) : 0.0f) : 0.0f) : 0.0f) : 0.0f) : 0.0f) : 0.0f) : 0.0f))); + fRec1[0] = (0.0f - (fConst5 * ((fConst6 * fRec1[1]) - (fRec2[0] + fRec2[1])))); + fRec17[0] = std::fmod(float((int((2994.2312f * (fRec17[2] + fRec17[3]))) + 38125)), 22.0f); + fRec16[0] = (iTemp1 ? (fRec17[0] + 72.0f) : fRec16[1]); + float fTemp15 = std::pow(2.0f, (0.0833333358f * (std::fabs((fRec16[0] + -1.0f)) + -69.0f))); + iRec22[0] = ((fTemp3 < (fConst30 * fTemp4)) ? iRec4[0] : iRec22[1]); + float fTemp16 = float(iRec22[0]); int iTemp17 = (fTemp16 < (fConst31 * fTemp4)); float fTemp18 = (fConst32 * fTemp4); int iTemp19 = (fTemp16 < fTemp18); @@ -1036,70 +1044,70 @@ class synth_birds : public dsp { int iTemp21 = (fTemp16 < fTemp20); float fTemp22 = (fConst36 * fTemp4); int iTemp23 = (fTemp16 < fTemp22); - fRec20[0] = ((0.999000013f * fRec20[1]) + (0.00100000005f * (iTemp17?(iTemp19?(iTemp21?(iTemp23?((iRec21[0] < 0)?0.0f:(iTemp23?(fConst38 * (fTemp16 / fTemp4)):0.49000001f)):(iTemp21?((fConst37 * ((0.0f - (0.49000001f * (fTemp16 - fTemp22))) / fTemp4)) + 0.49000001f):0.0f)):(iTemp19?(fConst35 * ((fTemp16 - fTemp20) / fTemp4)):1.0f)):(iTemp17?((fConst33 * ((0.0f - (fTemp16 - fTemp18)) / fTemp4)) + 1.0f):0.0f)):0.0f))); - fRec19[0] = (0.0f - (fConst4 * ((fConst5 * fRec19[1]) - (fRec20[0] + fRec20[1])))); - float fTemp24 = (fRec19[0] + 1.0f); + fRec21[0] = ((0.999000013f * fRec21[1]) + (0.00100000005f * (iTemp17 ? (iTemp19 ? (iTemp21 ? (iTemp23 ? ((iRec22[0] < 0) ? 0.0f : (iTemp23 ? (fConst38 * (fTemp16 / fTemp4)) : 0.49000001f)) : (iTemp21 ? ((fConst37 * ((0.0f - (0.49000001f * (fTemp16 - fTemp22))) / fTemp4)) + 0.49000001f) : 0.0f)) : (iTemp19 ? (fConst35 * ((fTemp16 - fTemp20) / fTemp4)) : 1.0f)) : (iTemp17 ? ((fConst33 * ((0.0f - (fTemp16 - fTemp18)) / fTemp4)) + 1.0f) : 0.0f)) : 0.0f))); + fRec20[0] = (0.0f - (fConst5 * ((fConst6 * fRec20[1]) - (fRec21[0] + fRec21[1])))); + float fTemp24 = (fRec20[0] + 1.0f); float fTemp25 = std::max((27.7199993f * (fTemp15 * fTemp24)), 23.4489498f); - float fTemp26 = std::max(0.0f, std::min(2047.0f, (fConst29 / fTemp25))); - float fTemp27 = std::floor(fTemp26); - float fTemp28 = std::max(20.0f, std::fabs(fTemp25)); - fVec3[0] = fTemp28; - float fTemp29 = (fRec22[1] + (fConst26 * fVec3[1])); - fRec22[0] = (fTemp29 - std::floor(fTemp29)); - float fTemp30 = (2.0f * fRec22[0]); - float fTemp31 = synth_birds_faustpower3_f((fTemp30 + -1.0f)); - fVec4[0] = (fTemp31 + (1.0f - fTemp30)); - float fTemp32 = ((fTemp31 + (1.0f - (fTemp30 + fVec4[1]))) / fTemp28); - fVec5[0] = fTemp32; - float fTemp33 = ((float(iVec0[2]) * (fTemp32 - fVec5[1])) / fTemp28); - fVec6[(IOTA & 4095)] = fTemp33; - int iTemp34 = int(fTemp26); - fRec16[0] = ((0.999000013f * fRec16[1]) - (fConst28 * ((((fTemp27 + (1.0f - fTemp26)) * fVec6[((IOTA - iTemp34) & 4095)]) - fTemp33) + (fVec6[((IOTA - (iTemp34 + 1)) & 4095)] * (fTemp26 - fTemp27))))); - iRec25[0] = ((fTemp3 < (fConst39 * fTemp4))?iRec4[0]:iRec25[1]); + float fTemp26 = std::max(20.0f, std::fabs(fTemp25)); + fVec3[0] = fTemp26; + float fTemp27 = (fRec19[1] + (fConst27 * fVec3[1])); + fRec19[0] = (fTemp27 - std::floor(fTemp27)); + float fTemp28 = (2.0f * fRec19[0]); + float fTemp29 = synth_birds_faustpower3_f((fTemp28 + -1.0f)); + fVec4[0] = (fTemp29 + (1.0f - fTemp28)); + float fTemp30 = ((fTemp29 + (1.0f - (fTemp28 + fVec4[1]))) / fTemp26); + fVec5[0] = fTemp30; + float fTemp31 = ((float(iVec0[2]) * (fTemp30 - fVec5[1])) / fTemp26); + fVec6[(IOTA & 4095)] = fTemp31; + float fTemp32 = std::max(0.0f, std::min(2047.0f, (fConst39 / fTemp25))); + int iTemp33 = int(fTemp32); + float fTemp34 = std::floor(fTemp32); + fRec18[0] = ((0.999000013f * fRec18[1]) + (fConst29 * ((fTemp31 - (fVec6[((IOTA - iTemp33) & 4095)] * (fTemp34 + (1.0f - fTemp32)))) - ((fTemp32 - fTemp34) * fVec6[((IOTA - (iTemp33 + 1)) & 4095)])))); + iRec25[0] = ((fTemp3 < (fConst40 * fTemp4)) ? iRec4[0] : iRec25[1]); float fTemp35 = float(iRec25[0]); - int iTemp36 = (fTemp35 < (fConst40 * fTemp4)); - float fTemp37 = (fConst41 * fTemp4); + int iTemp36 = (fTemp35 < (fConst41 * fTemp4)); + float fTemp37 = (fConst42 * fTemp4); int iTemp38 = (fTemp35 < fTemp37); - fRec24[0] = ((0.00100000005f * (iTemp36?(iTemp38?((iRec25[0] < 0)?0.0f:(iTemp38?(fConst43 * (fTemp35 / fTemp4)):0.55400002f)):(iTemp36?((fConst42 * ((0.0f - (0.55400002f * (fTemp35 - fTemp37))) / fTemp4)) + 0.55400002f):0.0f)):0.0f)) + (0.999000013f * fRec24[1])); - fRec23[0] = (fConst4 * ((fRec24[0] + fRec24[1]) - (fConst5 * fRec23[1]))); - iRec28[0] = ((fTemp3 < (fConst44 * fTemp4))?iRec4[0]:iRec28[1]); + fRec24[0] = ((0.999000013f * fRec24[1]) + (0.00100000005f * (iTemp36 ? (iTemp38 ? ((iRec25[0] < 0) ? 0.0f : (iTemp38 ? (fConst44 * (fTemp35 / fTemp4)) : 0.55400002f)) : (iTemp36 ? ((fConst43 * ((0.0f - (0.55400002f * (fTemp35 - fTemp37))) / fTemp4)) + 0.55400002f) : 0.0f)) : 0.0f))); + fRec23[0] = (0.0f - (fConst5 * ((fConst6 * fRec23[1]) - (fRec24[0] + fRec24[1])))); + iRec28[0] = ((fTemp3 < (fConst45 * fTemp4)) ? iRec4[0] : iRec28[1]); float fTemp39 = float(iRec28[0]); - float fTemp40 = (fConst45 * fTemp4); + float fTemp40 = (fConst46 * fTemp4); int iTemp41 = (fTemp39 < fTemp40); fRec30[0] = std::fmod(float((int((2994.2312f * (fRec30[2] + fRec30[3]))) + 38125)), 1000.0f); - fRec29[0] = (iTemp1?fRec30[0]:fRec29[1]); + fRec29[0] = (iTemp1 ? fRec30[0] : fRec29[1]); float fTemp42 = std::fabs((fRec29[0] + -1.0f)); float fTemp43 = (0.00100000005f * fTemp42); - float fTemp44 = (fConst48 * fTemp4); + float fTemp44 = (fConst49 * fTemp4); int iTemp45 = (fTemp39 < fTemp44); float fTemp46 = (fTemp43 + -1.0f); - float fTemp47 = (fConst50 * fTemp4); + float fTemp47 = (fConst51 * fTemp4); int iTemp48 = (fTemp39 < fTemp47); float fTemp49 = (1.0f - fTemp43); - float fTemp50 = (fConst52 * fTemp4); + float fTemp50 = (fConst53 * fTemp4); int iTemp51 = (fTemp39 < fTemp50); - float fTemp52 = (fConst54 * fTemp4); + float fTemp52 = (fConst55 * fTemp4); int iTemp53 = (fTemp39 < fTemp52); - float fTemp54 = (fConst56 * fTemp4); + float fTemp54 = (fConst57 * fTemp4); int iTemp55 = (fTemp39 < fTemp54); - float fTemp56 = (fConst58 * fTemp4); + float fTemp56 = (fConst59 * fTemp4); int iTemp57 = (fTemp39 < fTemp56); - float fTemp58 = (fConst60 * fTemp4); + float fTemp58 = (fConst61 * fTemp4); int iTemp59 = (fTemp39 < fTemp58); - float fTemp60 = (fConst62 * fTemp4); + float fTemp60 = (fConst63 * fTemp4); int iTemp61 = (fTemp39 < fTemp60); - float fTemp62 = (fConst64 * fTemp4); + float fTemp62 = (fConst65 * fTemp4); int iTemp63 = (fTemp39 < fTemp62); - fRec27[0] = ((0.999000013f * fRec27[1]) + (0.00100000005f * (iTemp41?(iTemp45?(iTemp48?(iTemp51?(iTemp53?(iTemp55?(iTemp57?(iTemp59?(iTemp61?(iTemp63?((iRec28[0] < 0)?0.0f:(iTemp63?(fConst66 * (fTemp39 / fTemp4)):1.0f)):(iTemp61?((fConst65 * ((0.0f - (fTemp39 - fTemp62)) / fTemp4)) + 1.0f):0.0f)):(iTemp59?(fConst63 * ((fTemp42 * (fTemp39 - fTemp60)) / fTemp4)):fTemp43)):(iTemp57?(fTemp43 + (fConst61 * ((0.0f - (0.00100000005f * (fTemp42 * (fTemp39 - fTemp58)))) / fTemp4))):0.0f)):(iTemp55?(fConst59 * ((fTemp39 - fTemp56) / fTemp4)):0.433999985f)):(iTemp53?((fConst57 * (((fTemp39 - fTemp54) * (fTemp43 + -0.433999985f)) / fTemp4)) + 0.433999985f):fTemp43)):(iTemp51?(fTemp43 + (fConst55 * ((fTemp49 * (fTemp39 - fTemp52)) / fTemp4))):1.0f)):(iTemp48?((fConst53 * ((fTemp46 * (fTemp39 - fTemp50)) / fTemp4)) + 1.0f):fTemp43)):(iTemp45?(fTemp43 + (fConst51 * (((fTemp39 - fTemp47) * fTemp49) / fTemp4))):1.0f)):(iTemp41?((fConst49 * (((fTemp39 - fTemp44) * fTemp46) / fTemp4)) + 1.0f):fTemp43)):((fTemp39 < (fConst46 * fTemp4))?(fTemp43 + (fConst47 * ((0.0f - (0.00100000005f * (fTemp42 * (fTemp39 - fTemp40)))) / fTemp4))):0.0f)))); - fRec26[0] = (0.0f - (fConst4 * ((fConst5 * fRec26[1]) - (fRec27[0] + fRec27[1])))); - float fTemp64 = ((fConst26 * ((((fConst27 * ((fRec16[0] * (fRec23[0] + 1.0f)) * fTemp24)) + 440.0f) * (fRec26[0] + 1.0f)) * fTemp15)) + fRec15[1]); + fRec27[0] = ((0.999000013f * fRec27[1]) + (0.00100000005f * (iTemp41 ? (iTemp45 ? (iTemp48 ? (iTemp51 ? (iTemp53 ? (iTemp55 ? (iTemp57 ? (iTemp59 ? (iTemp61 ? (iTemp63 ? ((iRec28[0] < 0) ? 0.0f : (iTemp63 ? (fConst67 * (fTemp39 / fTemp4)) : 1.0f)) : (iTemp61 ? ((fConst66 * ((0.0f - (fTemp39 - fTemp62)) / fTemp4)) + 1.0f) : 0.0f)) : (iTemp59 ? (fConst64 * ((fTemp42 * (fTemp39 - fTemp60)) / fTemp4)) : fTemp43)) : (iTemp57 ? (fTemp43 + (fConst62 * ((0.0f - (0.00100000005f * (fTemp42 * (fTemp39 - fTemp58)))) / fTemp4))) : 0.0f)) : (iTemp55 ? (fConst60 * ((fTemp39 - fTemp56) / fTemp4)) : 0.433999985f)) : (iTemp53 ? ((fConst58 * (((fTemp39 - fTemp54) * (fTemp43 + -0.433999985f)) / fTemp4)) + 0.433999985f) : fTemp43)) : (iTemp51 ? (fTemp43 + (fConst56 * ((fTemp49 * (fTemp39 - fTemp52)) / fTemp4))) : 1.0f)) : (iTemp48 ? ((fConst54 * ((fTemp46 * (fTemp39 - fTemp50)) / fTemp4)) + 1.0f) : fTemp43)) : (iTemp45 ? (fTemp43 + (fConst52 * (((fTemp39 - fTemp47) * fTemp49) / fTemp4))) : 1.0f)) : (iTemp41 ? ((fConst50 * (((fTemp39 - fTemp44) * fTemp46) / fTemp4)) + 1.0f) : fTemp43)) : ((fTemp39 < (fConst47 * fTemp4)) ? (fTemp43 + (fConst48 * ((0.0f - (0.00100000005f * (fTemp42 * (fTemp39 - fTemp40)))) / fTemp4))) : 0.0f)))); + fRec26[0] = (0.0f - (fConst5 * ((fConst6 * fRec26[1]) - (fRec27[0] + fRec27[1])))); + float fTemp64 = (fRec15[1] + (fConst27 * ((fTemp15 * ((fConst28 * ((fRec18[0] * fTemp24) * (fRec23[0] + 1.0f))) + 440.0f)) * (fRec26[0] + 1.0f)))); fRec15[0] = (fTemp64 - std::floor(fTemp64)); float fTemp65 = (65536.0f * fRec15[0]); int iTemp66 = int(fTemp65); float fTemp67 = ftbl0synth_birdsSIG0[iTemp66]; float fTemp68 = (fRec1[0] * (fTemp67 + ((fTemp65 - std::floor(fTemp65)) * (ftbl0synth_birdsSIG0[(iTemp66 + 1)] - fTemp67)))); fVec7[0] = fTemp68; - fRec0[0] = (fConst2 * ((fTemp68 + fVec7[1]) - (fConst67 * fRec0[1]))); + fRec0[0] = (0.0f - (fConst2 * ((fConst3 * fRec0[1]) - (fTemp68 + fVec7[1])))); float fTemp69 = (0.800000012f * fRec0[0]); output0[i] = FAUSTFLOAT(fTemp69); output1[i] = FAUSTFLOAT(fTemp69); @@ -1113,40 +1121,36 @@ class synth_birds : public dsp { fRec6[1] = fRec6[0]; for (int j0 = 3; (j0 > 0); j0 = (j0 - 1)) { fRec11[j0] = fRec11[(j0 - 1)]; - } fRec5[1] = fRec5[0]; iVec2[1] = iVec2[0]; iRec4[1] = iRec4[0]; for (int j1 = 3; (j1 > 0); j1 = (j1 - 1)) { fRec13[j1] = fRec13[(j1 - 1)]; - } fRec12[1] = fRec12[0]; iRec3[1] = iRec3[0]; fRec2[1] = fRec2[0]; fRec1[1] = fRec1[0]; for (int j2 = 3; (j2 > 0); j2 = (j2 - 1)) { - fRec18[j2] = fRec18[(j2 - 1)]; - + fRec17[j2] = fRec17[(j2 - 1)]; } - fRec17[1] = fRec17[0]; - iRec21[1] = iRec21[0]; + fRec16[1] = fRec16[0]; + iRec22[1] = iRec22[0]; + fRec21[1] = fRec21[0]; fRec20[1] = fRec20[0]; - fRec19[1] = fRec19[0]; fVec3[1] = fVec3[0]; - fRec22[1] = fRec22[0]; + fRec19[1] = fRec19[0]; fVec4[1] = fVec4[0]; fVec5[1] = fVec5[0]; IOTA = (IOTA + 1); - fRec16[1] = fRec16[0]; + fRec18[1] = fRec18[0]; iRec25[1] = iRec25[0]; fRec24[1] = fRec24[0]; fRec23[1] = fRec23[0]; iRec28[1] = iRec28[0]; for (int j3 = 3; (j3 > 0); j3 = (j3 - 1)) { fRec30[j3] = fRec30[(j3 - 1)]; - } fRec29[1] = fRec29[0]; fRec27[1] = fRec27[0]; @@ -1154,12 +1158,9 @@ class synth_birds : public dsp { fRec15[1] = fRec15[0]; fVec7[1] = fVec7[0]; fRec0[1] = fRec0[0]; - } - } - }; // clang-format on #endif diff --git a/ceammc/ext/src/synth/synth_bthree.cpp b/ceammc/ext/src/synth/synth_bthree.cpp index 30debb5925..16e97cfba1 100644 --- a/ceammc/ext/src/synth/synth_bthree.cpp +++ b/ceammc/ext/src/synth/synth_bthree.cpp @@ -12,7 +12,7 @@ * this file belongs to. *****************************************************************************/ #include "synth_bthree.h" -#include "ceammc_factory.h" +#include "stk_synth_factory.h" #include "BeeThree.h" #include "stksynth_p.h" @@ -31,5 +31,5 @@ SynthBThree::SynthBThree(const PdArgs& args) void setup_synth_bthree() { - SoundExternalFactory obj("synth.bee3~", OBJECT_FACTORY_DEFAULT); + StkSynthFactory obj("synth.bee3~"); } diff --git a/ceammc/ext/src/synth/synth_church_bell.h b/ceammc/ext/src/synth/synth_church_bell.h index 98fb6fef8b..6c445335af 100644 --- a/ceammc/ext/src/synth/synth_church_bell.h +++ b/ceammc/ext/src/synth/synth_church_bell.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "synth.church_bell" -Code generated with Faust 2.15.0 (https://faust.grame.fr) -Compilation options: cpp, -scal -ftz 0 +Code generated with Faust 2.22.1 (https://faust.grame.fr) +Compilation options: -lang cpp -scal -ftz 0 ------------------------------------------------------------ */ #ifndef __synth_church_bell_H__ @@ -14,6 +14,7 @@ Compilation options: cpp, -scal -ftz 0 #include #include +/************************** BEGIN dsp.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -96,23 +97,23 @@ class dsp { * - static class 'classInit': static tables initialization * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void init(int samplingRate) = 0; + virtual void init(int sample_rate) = 0; /** * Init instance state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceInit(int samplingRate) = 0; + virtual void instanceInit(int sample_rate) = 0; /** * Init instance constant state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceConstants(int samplingRate) = 0; + virtual void instanceConstants(int sample_rate) = 0; /* Init default control parameters values */ virtual void instanceResetUserInterface() = 0; @@ -149,8 +150,8 @@ class dsp { * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the number of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) * */ virtual void compute(double /*date_usec*/, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -169,16 +170,16 @@ class decorator_dsp : public dsp { public: - decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + decorator_dsp(dsp* dsp = nullptr):fDSP(dsp) {} virtual ~decorator_dsp() { delete fDSP; } virtual int getNumInputs() { return fDSP->getNumInputs(); } virtual int getNumOutputs() { return fDSP->getNumOutputs(); } virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } virtual int getSampleRate() { return fDSP->getSampleRate(); } - virtual void init(int samplingRate) { fDSP->init(samplingRate); } - virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } - virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void init(int sample_rate) { fDSP->init(sample_rate); } + virtual void instanceInit(int sample_rate) { fDSP->instanceInit(sample_rate); } + virtual void instanceConstants(int sample_rate) { fDSP->instanceConstants(sample_rate); } virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } @@ -233,6 +234,8 @@ class dsp_factory { #endif #endif +/************************** END dsp.h **************************/ +/************************** BEGIN UI.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -272,45 +275,54 @@ class dsp_factory { struct Soundfile; -class UI +template +class UIReal { - + public: - - UI() {} - - virtual ~UI() {} - + + UIReal() {} + virtual ~UIReal() {} + // -- widget's layouts - + virtual void openTabBox(const char* label) = 0; virtual void openHorizontalBox(const char* label) = 0; virtual void openVerticalBox(const char* label) = 0; virtual void closeBox() = 0; - + // -- active widgets - - virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - + + virtual void addButton(const char* label, REAL* zone) = 0; + virtual void addCheckButton(const char* label, REAL* zone) = 0; + virtual void addVerticalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addHorizontalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addNumEntry(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + // -- passive widgets - - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - + + virtual void addHorizontalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + virtual void addVerticalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + // -- soundfiles - + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; - + // -- metadata declarations + + virtual void declare(REAL* zone, const char* key, const char* val) {} +}; - virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +struct UI : public UIReal +{ + + UI() {} + virtual ~UI() {} }; #endif +/************************** END UI.h **************************/ +/************************** BEGIN meta.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -339,11 +351,14 @@ class UI struct Meta { - virtual void declare(const char* key, const char* value) = 0; virtual ~Meta() {}; + virtual void declare(const char* key, const char* value) = 0; + }; #endif +/************************** END meta.h **************************/ +/************************** BEGIN misc.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -366,7 +381,7 @@ struct Meta that work under terms of your choice, so long as this FAUST architecture section is not modified. ************************************************************************/ - + #ifndef __misc__ #define __misc__ @@ -374,6 +389,8 @@ struct Meta #include #include #include +#include +#include using std::max; @@ -395,27 +412,65 @@ static int int2pow2(int x) { int r = 0; while ((1< #include -static float fsynth_church_bellSIG0Wave0[350] = {0.525285006f,0.814173996f,0.483260989f,0.296745002f,0.975055993f,0.472243994f,0.409500986f,0.425363988f,0.687559009f,0.28838101f,0.309285015f,0.123053998f,0.286332995f,0.576705992f,0.908321977f,0.626973987f,0.0801851973f,0.309834987f,0.451429993f,0.132844999f,0.470634997f,0.417008013f,0.265112013f,0.075280197f,0.463470012f,0.471810013f,0.275323987f,0.547026992f,0.512519002f,0.394077986f,0.595404029f,0.941305995f,0.392500997f,0.381435007f,0.391232014f,0.118923999f,0.339495003f,0.101420999f,0.241754994f,0.0873254985f,0.37894401f,0.637705028f,0.171946004f,0.149858996f,0.233290002f,0.541809976f,1.0f,0.115553997f,0.244172007f,0.574329019f,0.606171012f,0.93839699f,0.392554998f,0.277359009f,0.86857003f,0.432489008f,0.408856004f,0.407932013f,0.299814999f,0.256659001f,0.549571991f,0.406347007f,0.312330991f,0.62757802f,0.670167029f,0.524648011f,0.406926006f,0.637524009f,0.555836976f,1.0f,0.818979025f,0.705347002f,0.678140998f,0.427381992f,0.674404025f,0.636105001f,0.643634975f,0.699136019f,0.836201012f,0.613084972f,0.31901899f,0.725259006f,0.545518994f,0.479860991f,0.498360008f,0.488653988f,0.861671984f,0.314287007f,0.671051979f,0.531904995f,0.421781003f,0.81506598f,0.772032022f,0.488721997f,0.0896674022f,0.291285992f,0.65872997f,0.635631979f,0.679356992f,0.459497005f,0.360240012f,0.58228898f,0.650605023f,0.490949988f,0.381909996f,0.157260999f,0.479624003f,0.477490991f,0.174435005f,0.0130939996f,0.879113019f,0.608069003f,0.268877f,0.604479015f,0.245130002f,0.170506999f,0.292887986f,0.545849025f,0.476646006f,0.922316015f,0.669192016f,0.578094006f,0.578796983f,0.311396003f,0.601209998f,0.54995501f,1.0f,0.66573f,0.980114996f,0.537847996f,0.0740531012f,0.252472013f,0.25575f,0.223974004f,0.0865103006f,0.138209f,0.198623002f,0.0453034006f,0.432453007f,0.292407006f,0.394410014f,0.857658982f,0.271667987f,0.201545f,0.583993971f,0.0602377988f,0.190617993f,0.849505007f,0.975542009f,0.173140004f,0.206471995f,0.344792992f,0.761011004f,0.558125019f,0.117245004f,0.0338485017f,0.337597013f,0.336645991f,0.174253002f,0.230169997f,0.934872985f,0.593647003f,0.393225014f,0.683704019f,0.056609299f,0.0405011997f,0.148972005f,0.338721991f,0.283419013f,0.394006997f,0.237474993f,0.26996401f,0.428312987f,0.177498996f,0.462585002f,0.443962991f,0.981792986f,0.408239007f,0.676527023f,0.402864993f,0.0163302999f,0.0515113994f,0.341390014f,0.311134994f,0.613276005f,0.805884004f,0.953289986f,0.406091005f,0.578705013f,0.386785001f,0.434103012f,0.775259972f,1.0f,0.635909021f,0.78205198f,0.0137182996f,0.0387725011f,0.618964016f,0.857070982f,0.131522f,0.184988007f,0.299495012f,0.789211988f,0.603114009f,0.0704988986f,0.0129338996f,0.252481014f,0.254121006f,0.189206004f,0.357713014f,0.950308025f,0.552573025f,0.466453999f,0.777360022f,0.0307886004f,0.0251943003f,0.378886014f,0.740186989f,0.247637004f,0.235201001f,0.493045002f,0.517849982f,0.883953989f,0.429473013f,0.409433007f,0.415266007f,0.940198004f,0.282334f,0.437889993f,0.375384986f,0.0157366004f,0.0171763003f,0.485554993f,0.461014986f,0.858958006f,0.907990992f,0.935190976f,0.375510007f,1.0f,0.585493028f,0.269980997f,0.423052996f,0.666067004f,0.435090005f,0.79025197f,0.00889586005f,0.0208844002f,0.449734986f,0.790808022f,0.159856007f,0.0895989984f,0.161546007f,0.528168023f,0.380641997f,0.0206275992f,0.0072642602f,0.0315352008f,0.0315840989f,0.197649002f,0.475057006f,0.517232001f,0.360922009f,0.421204001f,0.631340027f,0.00952139031f,0.0161049999f,0.499615014f,0.922958016f,0.214983001f,0.0655141026f,0.503970027f,0.514847994f,1.0f,0.483619004f,0.254027009f,0.228371993f,0.436105013f,0.233125001f,0.152242005f,0.279513001f,0.00906739011f,0.0132331997f,0.45125699f,0.388565987f,0.737226009f,0.479378015f,0.233036995f,0.103767f,0.845609009f,0.644127011f,0.261359006f,0.371457011f,0.527229011f,0.381372988f,0.334491998f,0.00833749026f,0.00861981977f,0.255919009f,0.254197001f,0.0872332975f,0.0461511984f,0.113017999f,0.345986009f,0.236343995f,0.0107800001f,0.00816505961f,0.405180991f,0.387180001f,0.343681008f,0.816492975f,0.25908199f,0.211906001f,0.432455003f,0.696886003f,0.00576223992f,0.0131310001f,0.455969006f,0.81160903f,0.426544011f,0.128489003f,0.215937003f,0.233934f,0.723070025f,0.351622999f,0.394230992f,0.323765993f,0.168803006f,0.276932001f,0.264683992f,0.227703005f,0.0068093501f,0.0170703009f,0.603017986f,0.476460993f,0.585924983f,0.716960013f,1.0f,0.576526999f,0.475524008f,0.447322011f,0.356902003f,0.597572982f,0.697246015f,0.505333006f,0.285421014f,0.0147193f,0.0141618f,0.136188f,0.0336536989f,0.216436997f}; - +const static float fsynth_church_bellSIG0Wave0[350] = {0.525285006f,0.814173996f,0.483260989f,0.296745002f,0.975055993f,0.472243994f,0.409500986f,0.425363988f,0.687559009f,0.28838101f,0.309285015f,0.123053998f,0.286332995f,0.576705992f,0.908321977f,0.626973987f,0.0801851973f,0.309834987f,0.451429993f,0.132844999f,0.470634997f,0.417008013f,0.265112013f,0.075280197f,0.463470012f,0.471810013f,0.275323987f,0.547026992f,0.512519002f,0.394077986f,0.595404029f,0.941305995f,0.392500997f,0.381435007f,0.391232014f,0.118923999f,0.339495003f,0.101420999f,0.241754994f,0.0873254985f,0.37894401f,0.637705028f,0.171946004f,0.149858996f,0.233290002f,0.541809976f,1.0f,0.115553997f,0.244172007f,0.574329019f,0.606171012f,0.93839699f,0.392554998f,0.277359009f,0.86857003f,0.432489008f,0.408856004f,0.407932013f,0.299814999f,0.256659001f,0.549571991f,0.406347007f,0.312330991f,0.62757802f,0.670167029f,0.524648011f,0.406926006f,0.637524009f,0.555836976f,1.0f,0.818979025f,0.705347002f,0.678140998f,0.427381992f,0.674404025f,0.636105001f,0.643634975f,0.699136019f,0.836201012f,0.613084972f,0.31901899f,0.725259006f,0.545518994f,0.479860991f,0.498360008f,0.488653988f,0.861671984f,0.314287007f,0.671051979f,0.531904995f,0.421781003f,0.81506598f,0.772032022f,0.488721997f,0.0896674022f,0.291285992f,0.65872997f,0.635631979f,0.679356992f,0.459497005f,0.360240012f,0.58228898f,0.650605023f,0.490949988f,0.381909996f,0.157260999f,0.479624003f,0.477490991f,0.174435005f,0.0130939996f,0.879113019f,0.608069003f,0.268877f,0.604479015f,0.245130002f,0.170506999f,0.292887986f,0.545849025f,0.476646006f,0.922316015f,0.669192016f,0.578094006f,0.578796983f,0.311396003f,0.601209998f,0.54995501f,1.0f,0.66573f,0.980114996f,0.537847996f,0.0740531012f,0.252472013f,0.25575f,0.223974004f,0.0865103006f,0.138209f,0.198623002f,0.0453034006f,0.432453007f,0.292407006f,0.394410014f,0.857658982f,0.271667987f,0.201545f,0.583993971f,0.0602377988f,0.190617993f,0.849505007f,0.975542009f,0.173140004f,0.206471995f,0.344792992f,0.761011004f,0.558125019f,0.117245004f,0.0338485017f,0.337597013f,0.336645991f,0.174253002f,0.230169997f,0.934872985f,0.593647003f,0.393225014f,0.683704019f,0.056609299f,0.0405011997f,0.148972005f,0.338721991f,0.283419013f,0.394006997f,0.237474993f,0.26996401f,0.428312987f,0.177498996f,0.462585002f,0.443962991f,0.981792986f,0.408239007f,0.676527023f,0.402864993f,0.0163302999f,0.0515113994f,0.341390014f,0.311134994f,0.613276005f,0.805884004f,0.953289986f,0.406091005f,0.578705013f,0.386785001f,0.434103012f,0.775259972f,1.0f,0.635909021f,0.78205198f,0.0137182996f,0.0387725011f,0.618964016f,0.857070982f,0.131522f,0.184988007f,0.299495012f,0.789211988f,0.603114009f,0.0704988986f,0.0129338996f,0.252481014f,0.254121006f,0.189206004f,0.357713014f,0.950308025f,0.552573025f,0.466453999f,0.777360022f,0.0307886004f,0.0251943003f,0.378886014f,0.740186989f,0.247637004f,0.235201001f,0.493045002f,0.517849982f,0.883953989f,0.429473013f,0.409433007f,0.415266007f,0.940198004f,0.282334f,0.437889993f,0.375384986f,0.0157366004f,0.0171763003f,0.485554993f,0.461014986f,0.858958006f,0.907990992f,0.935190976f,0.375510007f,1.0f,0.585493028f,0.269980997f,0.423052996f,0.666067004f,0.435090005f,0.79025197f,0.00889586005f,0.0208844002f,0.449734986f,0.790808022f,0.159856007f,0.0895989984f,0.161546007f,0.528168023f,0.380641997f,0.0206275992f,0.0072642602f,0.0315352008f,0.0315840989f,0.197649002f,0.475057006f,0.517232001f,0.360922009f,0.421204001f,0.631340027f,0.00952139031f,0.0161049999f,0.499615014f,0.922958016f,0.214983001f,0.0655141026f,0.503970027f,0.514847994f,1.0f,0.483619004f,0.254027009f,0.228371993f,0.436105013f,0.233125001f,0.152242005f,0.279513001f,0.00906739011f,0.0132331997f,0.45125699f,0.388565987f,0.737226009f,0.479378015f,0.233036995f,0.103767f,0.845609009f,0.644127011f,0.261359006f,0.371457011f,0.527229011f,0.381372988f,0.334491998f,0.00833749026f,0.00861981977f,0.255919009f,0.254197001f,0.0872332975f,0.0461511984f,0.113017999f,0.345986009f,0.236343995f,0.0107800001f,0.00816505961f,0.405180991f,0.387180001f,0.343681008f,0.816492975f,0.25908199f,0.211906001f,0.432455003f,0.696886003f,0.00576223992f,0.0131310001f,0.455969006f,0.81160903f,0.426544011f,0.128489003f,0.215937003f,0.233934f,0.723070025f,0.351622999f,0.394230992f,0.323765993f,0.168803006f,0.276932001f,0.264683992f,0.227703005f,0.0068093501f,0.0170703009f,0.603017986f,0.476460993f,0.585924983f,0.716960013f,1.0f,0.576526999f,0.475524008f,0.447322011f,0.356902003f,0.597572982f,0.697246015f,0.505333006f,0.285421014f,0.0147193f,0.0141618f,0.136188f,0.0336536989f,0.216436997f}; class synth_church_bellSIG0 { private: @@ -458,27 +512,23 @@ class synth_church_bellSIG0 { int getNumInputssynth_church_bellSIG0() { return 0; - } int getNumOutputssynth_church_bellSIG0() { return 1; - } int getInputRatesynth_church_bellSIG0(int channel) { int rate; - switch (channel) { + switch ((channel)) { default: { rate = -1; break; } - } return rate; - } int getOutputRatesynth_church_bellSIG0(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 0; break; @@ -487,39 +537,35 @@ class synth_church_bellSIG0 { rate = -1; break; } - } return rate; - } - void instanceInitsynth_church_bellSIG0(int samplingFreq) { + void instanceInitsynth_church_bellSIG0(int sample_rate) { fsynth_church_bellSIG0Wave0_idx = 0; - } - void fillsynth_church_bellSIG0(int count, float* output) { + void fillsynth_church_bellSIG0(int count, float* table) { for (int i = 0; (i < count); i = (i + 1)) { - output[i] = fsynth_church_bellSIG0Wave0[fsynth_church_bellSIG0Wave0_idx]; + table[i] = fsynth_church_bellSIG0Wave0[fsynth_church_bellSIG0Wave0_idx]; fsynth_church_bellSIG0Wave0_idx = ((1 + fsynth_church_bellSIG0Wave0_idx) % 350); - } - } + }; -synth_church_bellSIG0* newsynth_church_bellSIG0() { return (synth_church_bellSIG0*)new synth_church_bellSIG0(); } -void deletesynth_church_bellSIG0(synth_church_bellSIG0* dsp) { delete dsp; } +static synth_church_bellSIG0* newsynth_church_bellSIG0() { return (synth_church_bellSIG0*)new synth_church_bellSIG0(); } +static void deletesynth_church_bellSIG0(synth_church_bellSIG0* dsp) { delete dsp; } -static float ftbl0synth_church_bellSIG0[350]; static float synth_church_bell_faustpower2_f(float value) { return (value * value); - } +static float ftbl0synth_church_bellSIG0[350]; #ifndef FAUSTCLASS #define FAUSTCLASS synth_church_bell #endif + #ifdef __APPLE__ #define exp10f __exp10f #define exp10 __exp10 @@ -529,9 +575,8 @@ class synth_church_bell : public dsp { private: - FAUSTFLOAT fEntry0; FAUSTFLOAT fHslider0; - int fSamplingFreq; + int fSampleRate; float fConst0; float fConst1; FAUSTFLOAT fHslider1; @@ -546,228 +591,245 @@ class synth_church_bell : public dsp { float fRec2[3]; float fConst9; float fRec1[3]; - FAUSTFLOAT fButton0; - float fVec0[2]; float fConst10; FAUSTFLOAT fHslider2; - float fVec1[2]; - float fRec4[2]; + FAUSTFLOAT fButton0; + float fVec0[2]; + int iRec4[2]; float fConst11; float fConst12; float fConst13; + float fRec0[3]; + FAUSTFLOAT fEntry0; float fConst14; float fConst15; - float fRec0[3]; float fConst16; + float fRec5[3]; float fConst17; float fConst18; - float fRec5[3]; float fConst19; + float fRec6[3]; float fConst20; float fConst21; - float fRec6[3]; float fConst22; + float fRec7[3]; float fConst23; float fConst24; - float fRec7[3]; float fConst25; + float fRec8[3]; float fConst26; float fConst27; - float fRec8[3]; float fConst28; + float fRec9[3]; float fConst29; float fConst30; - float fRec9[3]; float fConst31; + float fRec10[3]; float fConst32; float fConst33; - float fRec10[3]; float fConst34; + float fRec11[3]; float fConst35; float fConst36; - float fRec11[3]; float fConst37; + float fRec12[3]; float fConst38; float fConst39; - float fRec12[3]; float fConst40; + float fRec13[3]; float fConst41; float fConst42; - float fRec13[3]; float fConst43; + float fRec14[3]; float fConst44; float fConst45; - float fRec14[3]; float fConst46; + float fRec15[3]; float fConst47; float fConst48; - float fRec15[3]; float fConst49; + float fRec16[3]; float fConst50; float fConst51; - float fRec16[3]; float fConst52; + float fRec17[3]; float fConst53; float fConst54; - float fRec17[3]; float fConst55; + float fRec18[3]; float fConst56; float fConst57; - float fRec18[3]; float fConst58; + float fRec19[3]; float fConst59; float fConst60; - float fRec19[3]; float fConst61; + float fRec20[3]; float fConst62; float fConst63; - float fRec20[3]; float fConst64; + float fRec21[3]; float fConst65; float fConst66; - float fRec21[3]; float fConst67; + float fRec22[3]; float fConst68; float fConst69; - float fRec22[3]; float fConst70; + float fRec23[3]; float fConst71; float fConst72; - float fRec23[3]; float fConst73; + float fRec24[3]; float fConst74; float fConst75; - float fRec24[3]; float fConst76; + float fRec25[3]; float fConst77; float fConst78; - float fRec25[3]; float fConst79; + float fRec26[3]; float fConst80; float fConst81; - float fRec26[3]; float fConst82; + float fRec27[3]; float fConst83; float fConst84; - float fRec27[3]; float fConst85; + float fRec28[3]; float fConst86; float fConst87; - float fRec28[3]; float fConst88; + float fRec29[3]; float fConst89; float fConst90; - float fRec29[3]; float fConst91; + float fRec30[3]; float fConst92; float fConst93; - float fRec30[3]; float fConst94; + float fRec31[3]; float fConst95; float fConst96; - float fRec31[3]; float fConst97; + float fRec32[3]; float fConst98; float fConst99; - float fRec32[3]; float fConst100; + float fRec33[3]; float fConst101; float fConst102; - float fRec33[3]; float fConst103; + float fRec34[3]; float fConst104; float fConst105; - float fRec34[3]; float fConst106; + float fRec35[3]; float fConst107; float fConst108; - float fRec35[3]; float fConst109; + float fRec36[3]; float fConst110; float fConst111; - float fRec36[3]; float fConst112; + float fRec37[3]; float fConst113; float fConst114; - float fRec37[3]; float fConst115; + float fRec38[3]; float fConst116; float fConst117; - float fRec38[3]; float fConst118; + float fRec39[3]; float fConst119; float fConst120; - float fRec39[3]; float fConst121; + float fRec40[3]; float fConst122; float fConst123; - float fRec40[3]; float fConst124; + float fRec41[3]; float fConst125; float fConst126; - float fRec41[3]; float fConst127; + float fRec42[3]; float fConst128; float fConst129; - float fRec42[3]; float fConst130; + float fRec43[3]; float fConst131; float fConst132; - float fRec43[3]; float fConst133; + float fRec44[3]; float fConst134; float fConst135; - float fRec44[3]; float fConst136; + float fRec45[3]; float fConst137; float fConst138; - float fRec45[3]; float fConst139; + float fRec46[3]; float fConst140; float fConst141; - float fRec46[3]; float fConst142; + float fRec47[3]; float fConst143; float fConst144; - float fRec47[3]; float fConst145; + float fRec48[3]; float fConst146; float fConst147; - float fRec48[3]; float fConst148; + float fRec49[3]; float fConst149; float fConst150; - float fRec49[3]; float fConst151; + float fRec50[3]; float fConst152; float fConst153; - float fRec50[3]; float fConst154; + float fRec51[3]; float fConst155; float fConst156; - float fRec51[3]; float fConst157; + float fRec52[3]; float fConst158; float fConst159; - float fRec52[3]; float fConst160; - float fConst161; - float fConst162; float fRec53[3]; public: void metadata(Meta* m) { m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.0"); + m->declare("basics.lib/version", "0.1"); + m->declare("envelopes.lib/ar:author", "Yann Orlarey, Stéphane Letz"); m->declare("envelopes.lib/author", "GRAME"); m->declare("envelopes.lib/copyright", "GRAME"); m->declare("envelopes.lib/license", "LGPL with exception"); m->declare("envelopes.lib/name", "Faust Envelope Library"); m->declare("envelopes.lib/version", "0.0"); - m->declare("filename", "synth_church_bell"); + m->declare("filename", "synth_church_bell.dsp"); + m->declare("filters.lib/fir:author", "Julius O. Smith III"); + m->declare("filters.lib/fir:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/fir:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/highpass:author", "Julius O. Smith III"); + m->declare("filters.lib/highpass:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/iir:author", "Julius O. Smith III"); + m->declare("filters.lib/iir:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/iir:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/lowpass0_highpass1", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/lowpass0_highpass1:author", "Julius O. Smith III"); + m->declare("filters.lib/lowpass:author", "Julius O. Smith III"); + m->declare("filters.lib/lowpass:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/lowpass:license", "MIT-style STK-4.3 license"); m->declare("filters.lib/name", "Faust Filters Library"); - m->declare("filters.lib/version", "0.0"); + m->declare("filters.lib/tf2:author", "Julius O. Smith III"); + m->declare("filters.lib/tf2:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/tf2:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/tf2s:author", "Julius O. Smith III"); + m->declare("filters.lib/tf2s:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/tf2s:license", "MIT-style STK-4.3 license"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); @@ -780,27 +842,23 @@ class synth_church_bell : public dsp { virtual int getNumInputs() { return 0; - } virtual int getNumOutputs() { return 1; - } virtual int getInputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { default: { rate = -1; break; } - } return rate; - } virtual int getOutputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -809,23 +867,20 @@ class synth_church_bell : public dsp { rate = -1; break; } - } return rate; - } - static void classInit(int samplingFreq) { + static void classInit(int sample_rate) { synth_church_bellSIG0* sig0 = newsynth_church_bellSIG0(); - sig0->instanceInitsynth_church_bellSIG0(samplingFreq); + sig0->instanceInitsynth_church_bellSIG0(sample_rate); sig0->fillsynth_church_bellSIG0(350, ftbl0synth_church_bellSIG0); deletesynth_church_bellSIG0(sig0); - } - virtual void instanceConstants(int samplingFreq) { - fSamplingFreq = samplingFreq; - fConst0 = std::min(192000.0f, std::max(1.0f, float(fSamplingFreq))); + virtual void instanceConstants(int sample_rate) { + fSampleRate = sample_rate; + fConst0 = std::min(192000.0f, std::max(1.0f, float(fSampleRate))); fConst1 = (3.14159274f / fConst0); fConst2 = std::tan((31.415926f / fConst0)); fConst3 = (1.0f / fConst2); @@ -835,405 +890,341 @@ class synth_church_bell : public dsp { fConst7 = (((fConst3 + -1.41421354f) / fConst2) + 1.0f); fConst8 = (2.0f * (1.0f - fConst6)); fConst9 = (0.0f - (2.0f / fConst5)); - fConst10 = (0.00400000019f * fConst0); - fConst11 = (0.00200000009f * fConst0); - fConst12 = (500.0f / fConst0); - fConst13 = std::pow(0.00100000005f, (0.0448570587f / fConst0)); - fConst14 = (std::cos((2839.48462f / fConst0)) * (0.0f - (2.0f * fConst13))); - fConst15 = synth_church_bell_faustpower2_f(fConst13); - fConst16 = std::pow(0.00100000005f, (0.0449536517f / fConst0)); - fConst17 = (std::cos((2858.84937f / fConst0)) * (0.0f - (2.0f * fConst16))); - fConst18 = synth_church_bell_faustpower2_f(fConst16); - fConst19 = std::pow(0.00100000005f, (0.0609094799f / fConst0)); - fConst20 = (std::cos((5432.7124f / fConst0)) * (0.0f - (2.0f * fConst19))); - fConst21 = synth_church_bell_faustpower2_f(fConst19); - fConst22 = std::pow(0.00100000005f, (0.0612352863f / fConst0)); - fConst23 = (std::cos((5475.18018f / fConst0)) * (0.0f - (2.0f * fConst22))); - fConst24 = synth_church_bell_faustpower2_f(fConst22); - fConst25 = std::pow(0.00100000005f, (0.0721585602f / fConst0)); - fConst26 = (std::cos((6738.52783f / fConst0)) * (0.0f - (2.0f * fConst25))); - fConst27 = synth_church_bell_faustpower2_f(fConst25); - fConst28 = std::pow(0.00100000005f, (0.0722505748f / fConst0)); - fConst29 = (std::cos((6748.01514f / fConst0)) * (0.0f - (2.0f * fConst28))); - fConst30 = synth_church_bell_faustpower2_f(fConst28); - fConst31 = std::pow(0.00100000005f, (0.0874899849f / fConst0)); - fConst32 = (std::cos((8119.32031f / fConst0)) * (0.0f - (2.0f * fConst31))); - fConst33 = synth_church_bell_faustpower2_f(fConst31); - fConst34 = std::pow(0.00100000005f, (0.0875099227f / fConst0)); - fConst35 = (std::cos((8120.89111f / fConst0)) * (0.0f - (2.0f * fConst34))); - fConst36 = synth_church_bell_faustpower2_f(fConst34); - fConst37 = std::pow(0.00100000005f, (0.107014902f / fConst0)); - fConst38 = (std::cos((9453.68066f / fConst0)) * (0.0f - (2.0f * fConst37))); - fConst39 = synth_church_bell_faustpower2_f(fConst37); - fConst40 = std::pow(0.00100000005f, (0.110012196f / fConst0)); - fConst41 = (std::cos((9628.41602f / fConst0)) * (0.0f - (2.0f * fConst40))); - fConst42 = synth_church_bell_faustpower2_f(fConst40); - fConst43 = std::pow(0.00100000005f, (0.123582378f / fConst0)); - fConst44 = (std::cos((10343.3799f / fConst0)) * (0.0f - (2.0f * fConst43))); - fConst45 = synth_church_bell_faustpower2_f(fConst43); - fConst46 = std::pow(0.00100000005f, (0.123685889f / fConst0)); - fConst47 = (std::cos((10348.4062f / fConst0)) * (0.0f - (2.0f * fConst46))); - fConst48 = synth_church_bell_faustpower2_f(fConst46); - fConst49 = std::pow(0.00100000005f, (0.127769172f / fConst0)); - fConst50 = (std::cos((10542.1172f / fConst0)) * (0.0f - (2.0f * fConst49))); - fConst51 = synth_church_bell_faustpower2_f(fConst49); - fConst52 = std::pow(0.00100000005f, (0.127809823f / fConst0)); - fConst53 = (std::cos((10544.002f / fConst0)) * (0.0f - (2.0f * fConst52))); - fConst54 = synth_church_bell_faustpower2_f(fConst52); - fConst55 = std::pow(0.00100000005f, (0.157417208f / fConst0)); - fConst56 = (std::cos((11728.3818f / fConst0)) * (0.0f - (2.0f * fConst55))); - fConst57 = synth_church_bell_faustpower2_f(fConst55); - fConst58 = std::pow(0.00100000005f, (0.160256028f / fConst0)); - fConst59 = (std::cos((11825.457f / fConst0)) * (0.0f - (2.0f * fConst58))); - fConst60 = synth_church_bell_faustpower2_f(fConst58); - fConst61 = std::pow(0.00100000005f, (0.18117331f / fConst0)); - fConst62 = (std::cos((12473.3799f / fConst0)) * (0.0f - (2.0f * fConst61))); - fConst63 = synth_church_bell_faustpower2_f(fConst61); - fConst64 = std::pow(0.00100000005f, (0.182209119f / fConst0)); - fConst65 = (std::cos((12502.7217f / fConst0)) * (0.0f - (2.0f * fConst64))); - fConst66 = synth_church_bell_faustpower2_f(fConst64); - fConst67 = std::pow(0.00100000005f, (0.2133362f / fConst0)); - fConst68 = (std::cos((13288.4971f / fConst0)) * (0.0f - (2.0f * fConst67))); - fConst69 = synth_church_bell_faustpower2_f(fConst67); - fConst70 = std::pow(0.00100000005f, (0.298688531f / fConst0)); - fConst71 = (std::cos((14808.2744f / fConst0)) * (0.0f - (2.0f * fConst70))); - fConst72 = synth_church_bell_faustpower2_f(fConst70); - fConst73 = std::pow(0.00100000005f, (0.341466933f / fConst0)); - fConst74 = (std::cos((15358.1152f / fConst0)) * (0.0f - (2.0f * fConst73))); - fConst75 = synth_church_bell_faustpower2_f(fConst73); - fConst76 = std::pow(0.00100000005f, (0.342488438f / fConst0)); - fConst77 = (std::cos((15370.0537f / fConst0)) * (0.0f - (2.0f * fConst76))); - fConst78 = synth_church_bell_faustpower2_f(fConst76); - fConst79 = std::pow(0.00100000005f, (0.391345769f / fConst0)); - fConst80 = (std::cos((15888.7305f / fConst0)) * (0.0f - (2.0f * fConst79))); - fConst81 = synth_church_bell_faustpower2_f(fConst79); - fConst82 = std::pow(0.00100000005f, (0.392745376f / fConst0)); - fConst83 = (std::cos((15902.2393f / fConst0)) * (0.0f - (2.0f * fConst82))); - fConst84 = synth_church_bell_faustpower2_f(fConst82); - fConst85 = std::pow(0.00100000005f, (0.499480247f / fConst0)); - fConst86 = (std::cos((16768.9414f / fConst0)) * (0.0f - (2.0f * fConst85))); - fConst87 = synth_church_bell_faustpower2_f(fConst85); - fConst88 = std::pow(0.00100000005f, (0.500184536f / fConst0)); - fConst89 = (std::cos((16773.7793f / fConst0)) * (0.0f - (2.0f * fConst88))); - fConst90 = synth_church_bell_faustpower2_f(fConst88); - fConst91 = std::pow(0.00100000005f, (0.56877172f / fConst0)); - fConst92 = (std::cos((17203.7383f / fConst0)) * (0.0f - (2.0f * fConst91))); - fConst93 = synth_church_bell_faustpower2_f(fConst91); - fConst94 = std::pow(0.00100000005f, (0.580974996f / fConst0)); - fConst95 = (std::cos((17272.6641f / fConst0)) * (0.0f - (2.0f * fConst94))); - fConst96 = synth_church_bell_faustpower2_f(fConst94); - fConst97 = std::pow(0.00100000005f, (0.58267206f / fConst0)); - fConst98 = (std::cos((17282.0898f / fConst0)) * (0.0f - (2.0f * fConst97))); - fConst99 = synth_church_bell_faustpower2_f(fConst97); - fConst100 = std::pow(0.00100000005f, (0.58560729f / fConst0)); - fConst101 = (std::cos((17298.3008f / fConst0)) * (0.0f - (2.0f * fConst100))); - fConst102 = synth_church_bell_faustpower2_f(fConst100); - fConst103 = std::pow(0.00100000005f, (0.679538369f / fConst0)); - fConst104 = (std::cos((17763.7578f / fConst0)) * (0.0f - (2.0f * fConst103))); - fConst105 = synth_church_bell_faustpower2_f(fConst103); - fConst106 = std::pow(0.00100000005f, (0.701286793f / fConst0)); - fConst107 = (std::cos((17858.8242f / fConst0)) * (0.0f - (2.0f * fConst106))); - fConst108 = synth_church_bell_faustpower2_f(fConst106); - fConst109 = std::pow(0.00100000005f, (0.981793463f / fConst0)); - fConst110 = (std::cos((18802.8086f / fConst0)) * (0.0f - (2.0f * fConst109))); - fConst111 = synth_church_bell_faustpower2_f(fConst109); - fConst112 = std::pow(0.00100000005f, (0.991939485f / fConst0)); - fConst113 = (std::cos((18829.7012f / fConst0)) * (0.0f - (2.0f * fConst112))); - fConst114 = synth_church_bell_faustpower2_f(fConst112); - fConst115 = std::pow(0.00100000005f, (1.57685912f / fConst0)); - fConst116 = (std::cos((19934.0957f / fConst0)) * (0.0f - (2.0f * fConst115))); - fConst117 = synth_church_bell_faustpower2_f(fConst115); - fConst118 = std::pow(0.00100000005f, (2.61620831f / fConst0)); - fConst119 = (std::cos((20927.9707f / fConst0)) * (0.0f - (2.0f * fConst118))); - fConst120 = synth_church_bell_faustpower2_f(fConst118); - fConst121 = std::pow(0.00100000005f, (3.26228237f / fConst0)); - fConst122 = (std::cos((21302.0723f / fConst0)) * (0.0f - (2.0f * fConst121))); - fConst123 = synth_church_bell_faustpower2_f(fConst121); - fConst124 = std::pow(0.00100000005f, (3.42948842f / fConst0)); - fConst125 = (std::cos((21382.3086f / fConst0)) * (0.0f - (2.0f * fConst124))); - fConst126 = synth_church_bell_faustpower2_f(fConst124); - fConst127 = std::pow(0.00100000005f, (5.61909866f / fConst0)); - fConst128 = (std::cos((22094.3809f / fConst0)) * (0.0f - (2.0f * fConst127))); - fConst129 = synth_church_bell_faustpower2_f(fConst127); - fConst130 = std::pow(0.00100000005f, (6.26517916f / fConst0)); - fConst131 = (std::cos((22233.3027f / fConst0)) * (0.0f - (2.0f * fConst130))); - fConst132 = synth_church_bell_faustpower2_f(fConst130); - fConst133 = std::pow(0.00100000005f, (7.91042233f / fConst0)); - fConst134 = (std::cos((22511.334f / fConst0)) * (0.0f - (2.0f * fConst133))); - fConst135 = synth_church_bell_faustpower2_f(fConst133); - fConst136 = std::pow(0.00100000005f, (7.95560217f / fConst0)); - fConst137 = (std::cos((22517.8047f / fConst0)) * (0.0f - (2.0f * fConst136))); - fConst138 = synth_church_bell_faustpower2_f(fConst136); - fConst139 = std::pow(0.00100000005f, (21.1559925f / fConst0)); - fConst140 = (std::cos((23436.5332f / fConst0)) * (0.0f - (2.0f * fConst139))); - fConst141 = synth_church_bell_faustpower2_f(fConst139); - fConst142 = std::pow(0.00100000005f, (22.8584423f / fConst0)); - fConst143 = (std::cos((23495.0293f / fConst0)) * (0.0f - (2.0f * fConst142))); - fConst144 = synth_church_bell_faustpower2_f(fConst142); - fConst145 = std::pow(0.00100000005f, (27.0563507f / fConst0)); - fConst146 = (std::cos((23616.3574f / fConst0)) * (0.0f - (2.0f * fConst145))); - fConst147 = synth_church_bell_faustpower2_f(fConst145); - fConst148 = std::pow(0.00100000005f, (173.368958f / fConst0)); - fConst149 = (std::cos((24528.1738f / fConst0)) * (0.0f - (2.0f * fConst148))); - fConst150 = synth_church_bell_faustpower2_f(fConst148); - fConst151 = std::pow(0.00100000005f, (415.098541f / fConst0)); - fConst152 = (std::cos((24772.0234f / fConst0)) * (0.0f - (2.0f * fConst151))); - fConst153 = synth_church_bell_faustpower2_f(fConst151); - fConst154 = std::pow(0.00100000005f, (1631.8125f / fConst0)); - fConst155 = (std::cos((25018.0098f / fConst0)) * (0.0f - (2.0f * fConst154))); - fConst156 = synth_church_bell_faustpower2_f(fConst154); - fConst157 = std::pow(0.00100000005f, (1752.41809f / fConst0)); - fConst158 = (std::cos((25027.498f / fConst0)) * (0.0f - (2.0f * fConst157))); - fConst159 = synth_church_bell_faustpower2_f(fConst157); - fConst160 = std::pow(0.00100000005f, (13161720.0f / fConst0)); - fConst161 = (std::cos((25346.1816f / fConst0)) * (0.0f - (2.0f * fConst160))); - fConst162 = synth_church_bell_faustpower2_f(fConst160); - + fConst10 = (0.00200000009f * fConst0); + fConst11 = std::pow(0.00100000005f, (3.26228237f / fConst0)); + fConst12 = (std::cos((21302.0723f / fConst0)) * (0.0f - (2.0f * fConst11))); + fConst13 = synth_church_bell_faustpower2_f(fConst11); + fConst14 = std::pow(0.00100000005f, (2.61620831f / fConst0)); + fConst15 = (std::cos((20927.9707f / fConst0)) * (0.0f - (2.0f * fConst14))); + fConst16 = synth_church_bell_faustpower2_f(fConst14); + fConst17 = std::pow(0.00100000005f, (0.701286793f / fConst0)); + fConst18 = (std::cos((17858.8242f / fConst0)) * (0.0f - (2.0f * fConst17))); + fConst19 = synth_church_bell_faustpower2_f(fConst17); + fConst20 = std::pow(0.00100000005f, (0.679538369f / fConst0)); + fConst21 = (std::cos((17763.7578f / fConst0)) * (0.0f - (2.0f * fConst20))); + fConst22 = synth_church_bell_faustpower2_f(fConst20); + fConst23 = std::pow(0.00100000005f, (0.58560729f / fConst0)); + fConst24 = (std::cos((17298.3008f / fConst0)) * (0.0f - (2.0f * fConst23))); + fConst25 = synth_church_bell_faustpower2_f(fConst23); + fConst26 = std::pow(0.00100000005f, (0.58267206f / fConst0)); + fConst27 = (std::cos((17282.0898f / fConst0)) * (0.0f - (2.0f * fConst26))); + fConst28 = synth_church_bell_faustpower2_f(fConst26); + fConst29 = std::pow(0.00100000005f, (0.580974996f / fConst0)); + fConst30 = (std::cos((17272.6641f / fConst0)) * (0.0f - (2.0f * fConst29))); + fConst31 = synth_church_bell_faustpower2_f(fConst29); + fConst32 = std::pow(0.00100000005f, (0.56877172f / fConst0)); + fConst33 = (std::cos((17203.7383f / fConst0)) * (0.0f - (2.0f * fConst32))); + fConst34 = synth_church_bell_faustpower2_f(fConst32); + fConst35 = std::pow(0.00100000005f, (0.500184536f / fConst0)); + fConst36 = (std::cos((16773.7793f / fConst0)) * (0.0f - (2.0f * fConst35))); + fConst37 = synth_church_bell_faustpower2_f(fConst35); + fConst38 = std::pow(0.00100000005f, (0.499480247f / fConst0)); + fConst39 = (std::cos((16768.9414f / fConst0)) * (0.0f - (2.0f * fConst38))); + fConst40 = synth_church_bell_faustpower2_f(fConst38); + fConst41 = std::pow(0.00100000005f, (0.392745376f / fConst0)); + fConst42 = (std::cos((15902.2393f / fConst0)) * (0.0f - (2.0f * fConst41))); + fConst43 = synth_church_bell_faustpower2_f(fConst41); + fConst44 = std::pow(0.00100000005f, (0.391345769f / fConst0)); + fConst45 = (std::cos((15888.7305f / fConst0)) * (0.0f - (2.0f * fConst44))); + fConst46 = synth_church_bell_faustpower2_f(fConst44); + fConst47 = std::pow(0.00100000005f, (0.342488438f / fConst0)); + fConst48 = (std::cos((15370.0537f / fConst0)) * (0.0f - (2.0f * fConst47))); + fConst49 = synth_church_bell_faustpower2_f(fConst47); + fConst50 = std::pow(0.00100000005f, (0.341466933f / fConst0)); + fConst51 = (std::cos((15358.1152f / fConst0)) * (0.0f - (2.0f * fConst50))); + fConst52 = synth_church_bell_faustpower2_f(fConst50); + fConst53 = std::pow(0.00100000005f, (0.298688531f / fConst0)); + fConst54 = (std::cos((14808.2744f / fConst0)) * (0.0f - (2.0f * fConst53))); + fConst55 = synth_church_bell_faustpower2_f(fConst53); + fConst56 = std::pow(0.00100000005f, (0.2133362f / fConst0)); + fConst57 = (std::cos((13288.4971f / fConst0)) * (0.0f - (2.0f * fConst56))); + fConst58 = synth_church_bell_faustpower2_f(fConst56); + fConst59 = std::pow(0.00100000005f, (0.182209119f / fConst0)); + fConst60 = (std::cos((12502.7217f / fConst0)) * (0.0f - (2.0f * fConst59))); + fConst61 = synth_church_bell_faustpower2_f(fConst59); + fConst62 = std::pow(0.00100000005f, (0.18117331f / fConst0)); + fConst63 = (std::cos((12473.3799f / fConst0)) * (0.0f - (2.0f * fConst62))); + fConst64 = synth_church_bell_faustpower2_f(fConst62); + fConst65 = std::pow(0.00100000005f, (0.160256028f / fConst0)); + fConst66 = (std::cos((11825.457f / fConst0)) * (0.0f - (2.0f * fConst65))); + fConst67 = synth_church_bell_faustpower2_f(fConst65); + fConst68 = std::pow(0.00100000005f, (0.157417208f / fConst0)); + fConst69 = (std::cos((11728.3818f / fConst0)) * (0.0f - (2.0f * fConst68))); + fConst70 = synth_church_bell_faustpower2_f(fConst68); + fConst71 = std::pow(0.00100000005f, (0.127809823f / fConst0)); + fConst72 = (std::cos((10544.002f / fConst0)) * (0.0f - (2.0f * fConst71))); + fConst73 = synth_church_bell_faustpower2_f(fConst71); + fConst74 = std::pow(0.00100000005f, (0.127769172f / fConst0)); + fConst75 = (std::cos((10542.1172f / fConst0)) * (0.0f - (2.0f * fConst74))); + fConst76 = synth_church_bell_faustpower2_f(fConst74); + fConst77 = std::pow(0.00100000005f, (0.123685889f / fConst0)); + fConst78 = (std::cos((10348.4062f / fConst0)) * (0.0f - (2.0f * fConst77))); + fConst79 = synth_church_bell_faustpower2_f(fConst77); + fConst80 = std::pow(0.00100000005f, (0.123582378f / fConst0)); + fConst81 = (std::cos((10343.3799f / fConst0)) * (0.0f - (2.0f * fConst80))); + fConst82 = synth_church_bell_faustpower2_f(fConst80); + fConst83 = std::pow(0.00100000005f, (0.110012196f / fConst0)); + fConst84 = (std::cos((9628.41602f / fConst0)) * (0.0f - (2.0f * fConst83))); + fConst85 = synth_church_bell_faustpower2_f(fConst83); + fConst86 = std::pow(0.00100000005f, (0.107014902f / fConst0)); + fConst87 = (std::cos((9453.68066f / fConst0)) * (0.0f - (2.0f * fConst86))); + fConst88 = synth_church_bell_faustpower2_f(fConst86); + fConst89 = std::pow(0.00100000005f, (0.0875099227f / fConst0)); + fConst90 = (std::cos((8120.89111f / fConst0)) * (0.0f - (2.0f * fConst89))); + fConst91 = synth_church_bell_faustpower2_f(fConst89); + fConst92 = std::pow(0.00100000005f, (0.0874899849f / fConst0)); + fConst93 = (std::cos((8119.32031f / fConst0)) * (0.0f - (2.0f * fConst92))); + fConst94 = synth_church_bell_faustpower2_f(fConst92); + fConst95 = std::pow(0.00100000005f, (0.0722505748f / fConst0)); + fConst96 = (std::cos((6748.01514f / fConst0)) * (0.0f - (2.0f * fConst95))); + fConst97 = synth_church_bell_faustpower2_f(fConst95); + fConst98 = std::pow(0.00100000005f, (0.0721585602f / fConst0)); + fConst99 = (std::cos((6738.52783f / fConst0)) * (0.0f - (2.0f * fConst98))); + fConst100 = synth_church_bell_faustpower2_f(fConst98); + fConst101 = std::pow(0.00100000005f, (0.0612352863f / fConst0)); + fConst102 = (std::cos((5475.18018f / fConst0)) * (0.0f - (2.0f * fConst101))); + fConst103 = synth_church_bell_faustpower2_f(fConst101); + fConst104 = std::pow(0.00100000005f, (0.0609094799f / fConst0)); + fConst105 = (std::cos((5432.7124f / fConst0)) * (0.0f - (2.0f * fConst104))); + fConst106 = synth_church_bell_faustpower2_f(fConst104); + fConst107 = std::pow(0.00100000005f, (0.0449536517f / fConst0)); + fConst108 = (std::cos((2858.84937f / fConst0)) * (0.0f - (2.0f * fConst107))); + fConst109 = synth_church_bell_faustpower2_f(fConst107); + fConst110 = std::pow(0.00100000005f, (0.0448570587f / fConst0)); + fConst111 = (std::cos((2839.48462f / fConst0)) * (0.0f - (2.0f * fConst110))); + fConst112 = synth_church_bell_faustpower2_f(fConst110); + fConst113 = std::pow(0.00100000005f, (0.981793463f / fConst0)); + fConst114 = (std::cos((18802.8086f / fConst0)) * (0.0f - (2.0f * fConst113))); + fConst115 = synth_church_bell_faustpower2_f(fConst113); + fConst116 = std::pow(0.00100000005f, (0.991939485f / fConst0)); + fConst117 = (std::cos((18829.7012f / fConst0)) * (0.0f - (2.0f * fConst116))); + fConst118 = synth_church_bell_faustpower2_f(fConst116); + fConst119 = std::pow(0.00100000005f, (1.57685912f / fConst0)); + fConst120 = (std::cos((19934.0957f / fConst0)) * (0.0f - (2.0f * fConst119))); + fConst121 = synth_church_bell_faustpower2_f(fConst119); + fConst122 = std::pow(0.00100000005f, (3.42948842f / fConst0)); + fConst123 = (std::cos((21382.3086f / fConst0)) * (0.0f - (2.0f * fConst122))); + fConst124 = synth_church_bell_faustpower2_f(fConst122); + fConst125 = std::pow(0.00100000005f, (5.61909866f / fConst0)); + fConst126 = (std::cos((22094.3809f / fConst0)) * (0.0f - (2.0f * fConst125))); + fConst127 = synth_church_bell_faustpower2_f(fConst125); + fConst128 = std::pow(0.00100000005f, (6.26517916f / fConst0)); + fConst129 = (std::cos((22233.3027f / fConst0)) * (0.0f - (2.0f * fConst128))); + fConst130 = synth_church_bell_faustpower2_f(fConst128); + fConst131 = std::pow(0.00100000005f, (7.91042233f / fConst0)); + fConst132 = (std::cos((22511.334f / fConst0)) * (0.0f - (2.0f * fConst131))); + fConst133 = synth_church_bell_faustpower2_f(fConst131); + fConst134 = std::pow(0.00100000005f, (7.95560217f / fConst0)); + fConst135 = (std::cos((22517.8047f / fConst0)) * (0.0f - (2.0f * fConst134))); + fConst136 = synth_church_bell_faustpower2_f(fConst134); + fConst137 = std::pow(0.00100000005f, (21.1559925f / fConst0)); + fConst138 = (std::cos((23436.5332f / fConst0)) * (0.0f - (2.0f * fConst137))); + fConst139 = synth_church_bell_faustpower2_f(fConst137); + fConst140 = std::pow(0.00100000005f, (22.8584423f / fConst0)); + fConst141 = (std::cos((23495.0293f / fConst0)) * (0.0f - (2.0f * fConst140))); + fConst142 = synth_church_bell_faustpower2_f(fConst140); + fConst143 = std::pow(0.00100000005f, (27.0563507f / fConst0)); + fConst144 = (std::cos((23616.3574f / fConst0)) * (0.0f - (2.0f * fConst143))); + fConst145 = synth_church_bell_faustpower2_f(fConst143); + fConst146 = std::pow(0.00100000005f, (173.368958f / fConst0)); + fConst147 = (std::cos((24528.1738f / fConst0)) * (0.0f - (2.0f * fConst146))); + fConst148 = synth_church_bell_faustpower2_f(fConst146); + fConst149 = std::pow(0.00100000005f, (415.098541f / fConst0)); + fConst150 = (std::cos((24772.0234f / fConst0)) * (0.0f - (2.0f * fConst149))); + fConst151 = synth_church_bell_faustpower2_f(fConst149); + fConst152 = std::pow(0.00100000005f, (1631.8125f / fConst0)); + fConst153 = (std::cos((25018.0098f / fConst0)) * (0.0f - (2.0f * fConst152))); + fConst154 = synth_church_bell_faustpower2_f(fConst152); + fConst155 = std::pow(0.00100000005f, (1752.41809f / fConst0)); + fConst156 = (std::cos((25027.498f / fConst0)) * (0.0f - (2.0f * fConst155))); + fConst157 = synth_church_bell_faustpower2_f(fConst155); + fConst158 = std::pow(0.00100000005f, (13161720.0f / fConst0)); + fConst159 = (std::cos((25346.1816f / fConst0)) * (0.0f - (2.0f * fConst158))); + fConst160 = synth_church_bell_faustpower2_f(fConst158); } virtual void instanceResetUserInterface() { - fEntry0 = FAUSTFLOAT(0.0f); fHslider0 = FAUSTFLOAT(1.0f); fHslider1 = FAUSTFLOAT(6500.0f); - fButton0 = FAUSTFLOAT(0.0f); fHslider2 = FAUSTFLOAT(0.5f); - + fButton0 = FAUSTFLOAT(0.0f); + fEntry0 = FAUSTFLOAT(0.0f); } virtual void instanceClear() { for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { iRec3[l0] = 0; - } for (int l1 = 0; (l1 < 3); l1 = (l1 + 1)) { fRec2[l1] = 0.0f; - } for (int l2 = 0; (l2 < 3); l2 = (l2 + 1)) { fRec1[l2] = 0.0f; - } for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { fVec0[l3] = 0.0f; - } for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { - fVec1[l4] = 0.0f; - + iRec4[l4] = 0; } - for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { - fRec4[l5] = 0.0f; - + for (int l5 = 0; (l5 < 3); l5 = (l5 + 1)) { + fRec0[l5] = 0.0f; } for (int l6 = 0; (l6 < 3); l6 = (l6 + 1)) { - fRec0[l6] = 0.0f; - + fRec5[l6] = 0.0f; } for (int l7 = 0; (l7 < 3); l7 = (l7 + 1)) { - fRec5[l7] = 0.0f; - + fRec6[l7] = 0.0f; } for (int l8 = 0; (l8 < 3); l8 = (l8 + 1)) { - fRec6[l8] = 0.0f; - + fRec7[l8] = 0.0f; } for (int l9 = 0; (l9 < 3); l9 = (l9 + 1)) { - fRec7[l9] = 0.0f; - + fRec8[l9] = 0.0f; } for (int l10 = 0; (l10 < 3); l10 = (l10 + 1)) { - fRec8[l10] = 0.0f; - + fRec9[l10] = 0.0f; } for (int l11 = 0; (l11 < 3); l11 = (l11 + 1)) { - fRec9[l11] = 0.0f; - + fRec10[l11] = 0.0f; } for (int l12 = 0; (l12 < 3); l12 = (l12 + 1)) { - fRec10[l12] = 0.0f; - + fRec11[l12] = 0.0f; } for (int l13 = 0; (l13 < 3); l13 = (l13 + 1)) { - fRec11[l13] = 0.0f; - + fRec12[l13] = 0.0f; } for (int l14 = 0; (l14 < 3); l14 = (l14 + 1)) { - fRec12[l14] = 0.0f; - + fRec13[l14] = 0.0f; } for (int l15 = 0; (l15 < 3); l15 = (l15 + 1)) { - fRec13[l15] = 0.0f; - + fRec14[l15] = 0.0f; } for (int l16 = 0; (l16 < 3); l16 = (l16 + 1)) { - fRec14[l16] = 0.0f; - + fRec15[l16] = 0.0f; } for (int l17 = 0; (l17 < 3); l17 = (l17 + 1)) { - fRec15[l17] = 0.0f; - + fRec16[l17] = 0.0f; } for (int l18 = 0; (l18 < 3); l18 = (l18 + 1)) { - fRec16[l18] = 0.0f; - + fRec17[l18] = 0.0f; } for (int l19 = 0; (l19 < 3); l19 = (l19 + 1)) { - fRec17[l19] = 0.0f; - + fRec18[l19] = 0.0f; } for (int l20 = 0; (l20 < 3); l20 = (l20 + 1)) { - fRec18[l20] = 0.0f; - + fRec19[l20] = 0.0f; } for (int l21 = 0; (l21 < 3); l21 = (l21 + 1)) { - fRec19[l21] = 0.0f; - + fRec20[l21] = 0.0f; } for (int l22 = 0; (l22 < 3); l22 = (l22 + 1)) { - fRec20[l22] = 0.0f; - + fRec21[l22] = 0.0f; } for (int l23 = 0; (l23 < 3); l23 = (l23 + 1)) { - fRec21[l23] = 0.0f; - + fRec22[l23] = 0.0f; } for (int l24 = 0; (l24 < 3); l24 = (l24 + 1)) { - fRec22[l24] = 0.0f; - + fRec23[l24] = 0.0f; } for (int l25 = 0; (l25 < 3); l25 = (l25 + 1)) { - fRec23[l25] = 0.0f; - + fRec24[l25] = 0.0f; } for (int l26 = 0; (l26 < 3); l26 = (l26 + 1)) { - fRec24[l26] = 0.0f; - + fRec25[l26] = 0.0f; } for (int l27 = 0; (l27 < 3); l27 = (l27 + 1)) { - fRec25[l27] = 0.0f; - + fRec26[l27] = 0.0f; } for (int l28 = 0; (l28 < 3); l28 = (l28 + 1)) { - fRec26[l28] = 0.0f; - + fRec27[l28] = 0.0f; } for (int l29 = 0; (l29 < 3); l29 = (l29 + 1)) { - fRec27[l29] = 0.0f; - + fRec28[l29] = 0.0f; } for (int l30 = 0; (l30 < 3); l30 = (l30 + 1)) { - fRec28[l30] = 0.0f; - + fRec29[l30] = 0.0f; } for (int l31 = 0; (l31 < 3); l31 = (l31 + 1)) { - fRec29[l31] = 0.0f; - + fRec30[l31] = 0.0f; } for (int l32 = 0; (l32 < 3); l32 = (l32 + 1)) { - fRec30[l32] = 0.0f; - + fRec31[l32] = 0.0f; } for (int l33 = 0; (l33 < 3); l33 = (l33 + 1)) { - fRec31[l33] = 0.0f; - + fRec32[l33] = 0.0f; } for (int l34 = 0; (l34 < 3); l34 = (l34 + 1)) { - fRec32[l34] = 0.0f; - + fRec33[l34] = 0.0f; } for (int l35 = 0; (l35 < 3); l35 = (l35 + 1)) { - fRec33[l35] = 0.0f; - + fRec34[l35] = 0.0f; } for (int l36 = 0; (l36 < 3); l36 = (l36 + 1)) { - fRec34[l36] = 0.0f; - + fRec35[l36] = 0.0f; } for (int l37 = 0; (l37 < 3); l37 = (l37 + 1)) { - fRec35[l37] = 0.0f; - + fRec36[l37] = 0.0f; } for (int l38 = 0; (l38 < 3); l38 = (l38 + 1)) { - fRec36[l38] = 0.0f; - + fRec37[l38] = 0.0f; } for (int l39 = 0; (l39 < 3); l39 = (l39 + 1)) { - fRec37[l39] = 0.0f; - + fRec38[l39] = 0.0f; } for (int l40 = 0; (l40 < 3); l40 = (l40 + 1)) { - fRec38[l40] = 0.0f; - + fRec39[l40] = 0.0f; } for (int l41 = 0; (l41 < 3); l41 = (l41 + 1)) { - fRec39[l41] = 0.0f; - + fRec40[l41] = 0.0f; } for (int l42 = 0; (l42 < 3); l42 = (l42 + 1)) { - fRec40[l42] = 0.0f; - + fRec41[l42] = 0.0f; } for (int l43 = 0; (l43 < 3); l43 = (l43 + 1)) { - fRec41[l43] = 0.0f; - + fRec42[l43] = 0.0f; } for (int l44 = 0; (l44 < 3); l44 = (l44 + 1)) { - fRec42[l44] = 0.0f; - + fRec43[l44] = 0.0f; } for (int l45 = 0; (l45 < 3); l45 = (l45 + 1)) { - fRec43[l45] = 0.0f; - + fRec44[l45] = 0.0f; } for (int l46 = 0; (l46 < 3); l46 = (l46 + 1)) { - fRec44[l46] = 0.0f; - + fRec45[l46] = 0.0f; } for (int l47 = 0; (l47 < 3); l47 = (l47 + 1)) { - fRec45[l47] = 0.0f; - + fRec46[l47] = 0.0f; } for (int l48 = 0; (l48 < 3); l48 = (l48 + 1)) { - fRec46[l48] = 0.0f; - + fRec47[l48] = 0.0f; } for (int l49 = 0; (l49 < 3); l49 = (l49 + 1)) { - fRec47[l49] = 0.0f; - + fRec48[l49] = 0.0f; } for (int l50 = 0; (l50 < 3); l50 = (l50 + 1)) { - fRec48[l50] = 0.0f; - + fRec49[l50] = 0.0f; } for (int l51 = 0; (l51 < 3); l51 = (l51 + 1)) { - fRec49[l51] = 0.0f; - + fRec50[l51] = 0.0f; } for (int l52 = 0; (l52 < 3); l52 = (l52 + 1)) { - fRec50[l52] = 0.0f; - + fRec51[l52] = 0.0f; } for (int l53 = 0; (l53 < 3); l53 = (l53 + 1)) { - fRec51[l53] = 0.0f; - + fRec52[l53] = 0.0f; } for (int l54 = 0; (l54 < 3); l54 = (l54 + 1)) { - fRec52[l54] = 0.0f; - - } - for (int l55 = 0; (l55 < 3); l55 = (l55 + 1)) { - fRec53[l55] = 0.0f; - + fRec53[l54] = 0.0f; } - } - virtual void init(int samplingFreq) { - classInit(samplingFreq); - instanceInit(samplingFreq); + virtual void init(int sample_rate) { + classInit(sample_rate); + instanceInit(sample_rate); } - virtual void instanceInit(int samplingFreq) { - instanceConstants(samplingFreq); + virtual void instanceInit(int sample_rate) { + instanceConstants(sample_rate); instanceResetUserInterface(); instanceClear(); } @@ -1241,9 +1232,9 @@ class synth_church_bell : public dsp { virtual synth_church_bell* clone() { return new synth_church_bell(); } + virtual int getSampleRate() { - return fSamplingFreq; - + return fSampleRate; } virtual void buildUserInterface(UI* ui_interface) { @@ -1254,142 +1245,136 @@ class synth_church_bell : public dsp { ui_interface->addNumEntry("pos", &fEntry0, 0.0f, 0.0f, 6.0f, 1.0f); ui_interface->addHorizontalSlider("sharp", &fHslider2, 0.5f, 0.00999999978f, 5.0f, 0.00999999978f); ui_interface->closeBox(); - } virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { FAUSTFLOAT* output0 = outputs[0]; - int iSlow0 = (50 * int(float(fEntry0))); - float fSlow1 = ftbl0synth_church_bellSIG0[iSlow0]; - float fSlow2 = std::tan((fConst1 * float(fHslider1))); - float fSlow3 = (1.0f / fSlow2); - float fSlow4 = (((fSlow3 + 1.41421354f) / fSlow2) + 1.0f); - float fSlow5 = (float(fHslider0) / fSlow4); - float fSlow6 = (1.0f / fSlow4); - float fSlow7 = (((fSlow3 + -1.41421354f) / fSlow2) + 1.0f); - float fSlow8 = (2.0f * (1.0f - (1.0f / synth_church_bell_faustpower2_f(fSlow2)))); - float fSlow9 = float(fButton0); - float fSlow10 = float(fHslider2); - float fSlow11 = (fConst10 * fSlow10); - float fSlow12 = (fConst11 * fSlow10); - float fSlow13 = (fConst12 / fSlow10); - float fSlow14 = ftbl0synth_church_bellSIG0[(iSlow0 + 1)]; - float fSlow15 = ftbl0synth_church_bellSIG0[(iSlow0 + 2)]; - float fSlow16 = ftbl0synth_church_bellSIG0[(iSlow0 + 3)]; - float fSlow17 = ftbl0synth_church_bellSIG0[(iSlow0 + 4)]; - float fSlow18 = ftbl0synth_church_bellSIG0[(iSlow0 + 5)]; - float fSlow19 = ftbl0synth_church_bellSIG0[(iSlow0 + 6)]; - float fSlow20 = ftbl0synth_church_bellSIG0[(iSlow0 + 7)]; - float fSlow21 = ftbl0synth_church_bellSIG0[(iSlow0 + 8)]; - float fSlow22 = ftbl0synth_church_bellSIG0[(iSlow0 + 9)]; - float fSlow23 = ftbl0synth_church_bellSIG0[(iSlow0 + 10)]; - float fSlow24 = ftbl0synth_church_bellSIG0[(iSlow0 + 11)]; - float fSlow25 = ftbl0synth_church_bellSIG0[(iSlow0 + 12)]; - float fSlow26 = ftbl0synth_church_bellSIG0[(iSlow0 + 13)]; - float fSlow27 = ftbl0synth_church_bellSIG0[(iSlow0 + 14)]; - float fSlow28 = ftbl0synth_church_bellSIG0[(iSlow0 + 15)]; - float fSlow29 = ftbl0synth_church_bellSIG0[(iSlow0 + 16)]; - float fSlow30 = ftbl0synth_church_bellSIG0[(iSlow0 + 17)]; - float fSlow31 = ftbl0synth_church_bellSIG0[(iSlow0 + 18)]; - float fSlow32 = ftbl0synth_church_bellSIG0[(iSlow0 + 19)]; - float fSlow33 = ftbl0synth_church_bellSIG0[(iSlow0 + 20)]; - float fSlow34 = ftbl0synth_church_bellSIG0[(iSlow0 + 21)]; - float fSlow35 = ftbl0synth_church_bellSIG0[(iSlow0 + 22)]; - float fSlow36 = ftbl0synth_church_bellSIG0[(iSlow0 + 23)]; - float fSlow37 = ftbl0synth_church_bellSIG0[(iSlow0 + 24)]; - float fSlow38 = ftbl0synth_church_bellSIG0[(iSlow0 + 25)]; - float fSlow39 = ftbl0synth_church_bellSIG0[(iSlow0 + 26)]; - float fSlow40 = ftbl0synth_church_bellSIG0[(iSlow0 + 27)]; - float fSlow41 = ftbl0synth_church_bellSIG0[(iSlow0 + 28)]; - float fSlow42 = ftbl0synth_church_bellSIG0[(iSlow0 + 29)]; - float fSlow43 = ftbl0synth_church_bellSIG0[(iSlow0 + 30)]; - float fSlow44 = ftbl0synth_church_bellSIG0[(iSlow0 + 31)]; - float fSlow45 = ftbl0synth_church_bellSIG0[(iSlow0 + 32)]; - float fSlow46 = ftbl0synth_church_bellSIG0[(iSlow0 + 33)]; - float fSlow47 = ftbl0synth_church_bellSIG0[(iSlow0 + 34)]; - float fSlow48 = ftbl0synth_church_bellSIG0[(iSlow0 + 35)]; - float fSlow49 = ftbl0synth_church_bellSIG0[(iSlow0 + 36)]; - float fSlow50 = ftbl0synth_church_bellSIG0[(iSlow0 + 37)]; - float fSlow51 = ftbl0synth_church_bellSIG0[(iSlow0 + 38)]; - float fSlow52 = ftbl0synth_church_bellSIG0[(iSlow0 + 39)]; - float fSlow53 = ftbl0synth_church_bellSIG0[(iSlow0 + 40)]; - float fSlow54 = ftbl0synth_church_bellSIG0[(iSlow0 + 41)]; - float fSlow55 = ftbl0synth_church_bellSIG0[(iSlow0 + 42)]; - float fSlow56 = ftbl0synth_church_bellSIG0[(iSlow0 + 43)]; - float fSlow57 = ftbl0synth_church_bellSIG0[(iSlow0 + 44)]; - float fSlow58 = ftbl0synth_church_bellSIG0[(iSlow0 + 45)]; - float fSlow59 = ftbl0synth_church_bellSIG0[(iSlow0 + 46)]; - float fSlow60 = ftbl0synth_church_bellSIG0[(iSlow0 + 47)]; - float fSlow61 = ftbl0synth_church_bellSIG0[(iSlow0 + 48)]; - float fSlow62 = ftbl0synth_church_bellSIG0[(iSlow0 + 49)]; + float fSlow0 = std::tan((fConst1 * float(fHslider1))); + float fSlow1 = (1.0f / fSlow0); + float fSlow2 = (((fSlow1 + 1.41421354f) / fSlow0) + 1.0f); + float fSlow3 = (float(fHslider0) / fSlow2); + float fSlow4 = (1.0f / fSlow2); + float fSlow5 = (((fSlow1 + -1.41421354f) / fSlow0) + 1.0f); + float fSlow6 = (2.0f * (1.0f - (1.0f / synth_church_bell_faustpower2_f(fSlow0)))); + float fSlow7 = (1.0f / std::max(1.0f, (fConst10 * float(fHslider2)))); + float fSlow8 = float(fButton0); + int iSlow9 = (50 * int(float(fEntry0))); + float fSlow10 = ftbl0synth_church_bellSIG0[(iSlow9 + 36)]; + float fSlow11 = ftbl0synth_church_bellSIG0[(iSlow9 + 35)]; + float fSlow12 = ftbl0synth_church_bellSIG0[(iSlow9 + 31)]; + float fSlow13 = ftbl0synth_church_bellSIG0[(iSlow9 + 30)]; + float fSlow14 = ftbl0synth_church_bellSIG0[(iSlow9 + 29)]; + float fSlow15 = ftbl0synth_church_bellSIG0[(iSlow9 + 28)]; + float fSlow16 = ftbl0synth_church_bellSIG0[(iSlow9 + 27)]; + float fSlow17 = ftbl0synth_church_bellSIG0[(iSlow9 + 26)]; + float fSlow18 = ftbl0synth_church_bellSIG0[(iSlow9 + 25)]; + float fSlow19 = ftbl0synth_church_bellSIG0[(iSlow9 + 24)]; + float fSlow20 = ftbl0synth_church_bellSIG0[(iSlow9 + 23)]; + float fSlow21 = ftbl0synth_church_bellSIG0[(iSlow9 + 22)]; + float fSlow22 = ftbl0synth_church_bellSIG0[(iSlow9 + 21)]; + float fSlow23 = ftbl0synth_church_bellSIG0[(iSlow9 + 20)]; + float fSlow24 = ftbl0synth_church_bellSIG0[(iSlow9 + 19)]; + float fSlow25 = ftbl0synth_church_bellSIG0[(iSlow9 + 18)]; + float fSlow26 = ftbl0synth_church_bellSIG0[(iSlow9 + 17)]; + float fSlow27 = ftbl0synth_church_bellSIG0[(iSlow9 + 16)]; + float fSlow28 = ftbl0synth_church_bellSIG0[(iSlow9 + 15)]; + float fSlow29 = ftbl0synth_church_bellSIG0[(iSlow9 + 14)]; + float fSlow30 = ftbl0synth_church_bellSIG0[(iSlow9 + 13)]; + float fSlow31 = ftbl0synth_church_bellSIG0[(iSlow9 + 12)]; + float fSlow32 = ftbl0synth_church_bellSIG0[(iSlow9 + 11)]; + float fSlow33 = ftbl0synth_church_bellSIG0[(iSlow9 + 10)]; + float fSlow34 = ftbl0synth_church_bellSIG0[(iSlow9 + 9)]; + float fSlow35 = ftbl0synth_church_bellSIG0[(iSlow9 + 8)]; + float fSlow36 = ftbl0synth_church_bellSIG0[(iSlow9 + 7)]; + float fSlow37 = ftbl0synth_church_bellSIG0[(iSlow9 + 6)]; + float fSlow38 = ftbl0synth_church_bellSIG0[(iSlow9 + 5)]; + float fSlow39 = ftbl0synth_church_bellSIG0[(iSlow9 + 4)]; + float fSlow40 = ftbl0synth_church_bellSIG0[(iSlow9 + 3)]; + float fSlow41 = ftbl0synth_church_bellSIG0[(iSlow9 + 2)]; + float fSlow42 = ftbl0synth_church_bellSIG0[(iSlow9 + 1)]; + float fSlow43 = ftbl0synth_church_bellSIG0[iSlow9]; + float fSlow44 = ftbl0synth_church_bellSIG0[(iSlow9 + 32)]; + float fSlow45 = ftbl0synth_church_bellSIG0[(iSlow9 + 33)]; + float fSlow46 = ftbl0synth_church_bellSIG0[(iSlow9 + 34)]; + float fSlow47 = ftbl0synth_church_bellSIG0[(iSlow9 + 37)]; + float fSlow48 = ftbl0synth_church_bellSIG0[(iSlow9 + 38)]; + float fSlow49 = ftbl0synth_church_bellSIG0[(iSlow9 + 39)]; + float fSlow50 = ftbl0synth_church_bellSIG0[(iSlow9 + 40)]; + float fSlow51 = ftbl0synth_church_bellSIG0[(iSlow9 + 41)]; + float fSlow52 = ftbl0synth_church_bellSIG0[(iSlow9 + 42)]; + float fSlow53 = ftbl0synth_church_bellSIG0[(iSlow9 + 43)]; + float fSlow54 = ftbl0synth_church_bellSIG0[(iSlow9 + 44)]; + float fSlow55 = ftbl0synth_church_bellSIG0[(iSlow9 + 45)]; + float fSlow56 = ftbl0synth_church_bellSIG0[(iSlow9 + 46)]; + float fSlow57 = ftbl0synth_church_bellSIG0[(iSlow9 + 47)]; + float fSlow58 = ftbl0synth_church_bellSIG0[(iSlow9 + 48)]; + float fSlow59 = ftbl0synth_church_bellSIG0[(iSlow9 + 49)]; for (int i = 0; (i < count); i = (i + 1)) { iRec3[0] = ((1103515245 * iRec3[1]) + 12345); fRec2[0] = ((4.65661287e-10f * float(iRec3[0])) - (fConst4 * ((fConst7 * fRec2[2]) + (fConst8 * fRec2[1])))); - fRec1[0] = ((fConst4 * (((fConst6 * fRec2[0]) + (fConst9 * fRec2[1])) + (fConst6 * fRec2[2]))) - (fSlow6 * ((fSlow7 * fRec1[2]) + (fSlow8 * fRec1[1])))); - fVec0[0] = fSlow9; - fVec1[0] = fSlow10; - fRec4[0] = ((((fSlow9 - fVec0[1]) > 0.0f) > 0)?0.0f:std::min(fSlow11, ((fRec4[1] + (fConst10 * (fSlow10 - fVec1[1]))) + 1.0f))); - int iTemp0 = (fRec4[0] < fSlow12); - float fTemp1 = (fSlow5 * ((fRec1[2] + (fRec1[0] + (2.0f * fRec1[1]))) * (iTemp0?((fRec4[0] < 0.0f)?0.0f:(iTemp0?(fSlow13 * fRec4[0]):1.0f)):((fRec4[0] < fSlow11)?((fSlow13 * (0.0f - (fRec4[0] - fSlow12))) + 1.0f):0.0f)))); - fRec0[0] = (fTemp1 - ((fConst14 * fRec0[1]) + (fConst15 * fRec0[2]))); - fRec5[0] = (fTemp1 - ((fConst17 * fRec5[1]) + (fConst18 * fRec5[2]))); - fRec6[0] = (fTemp1 - ((fConst20 * fRec6[1]) + (fConst21 * fRec6[2]))); - fRec7[0] = (fTemp1 - ((fConst23 * fRec7[1]) + (fConst24 * fRec7[2]))); - fRec8[0] = (fTemp1 - ((fConst26 * fRec8[1]) + (fConst27 * fRec8[2]))); - fRec9[0] = (fTemp1 - ((fConst29 * fRec9[1]) + (fConst30 * fRec9[2]))); - fRec10[0] = (fTemp1 - ((fConst32 * fRec10[1]) + (fConst33 * fRec10[2]))); - fRec11[0] = (fTemp1 - ((fConst35 * fRec11[1]) + (fConst36 * fRec11[2]))); - fRec12[0] = (fTemp1 - ((fConst38 * fRec12[1]) + (fConst39 * fRec12[2]))); - fRec13[0] = (fTemp1 - ((fConst41 * fRec13[1]) + (fConst42 * fRec13[2]))); - fRec14[0] = (fTemp1 - ((fConst44 * fRec14[1]) + (fConst45 * fRec14[2]))); - fRec15[0] = (fTemp1 - ((fConst47 * fRec15[1]) + (fConst48 * fRec15[2]))); - fRec16[0] = (fTemp1 - ((fConst50 * fRec16[1]) + (fConst51 * fRec16[2]))); - fRec17[0] = (fTemp1 - ((fConst53 * fRec17[1]) + (fConst54 * fRec17[2]))); - fRec18[0] = (fTemp1 - ((fConst56 * fRec18[1]) + (fConst57 * fRec18[2]))); - fRec19[0] = (fTemp1 - ((fConst59 * fRec19[1]) + (fConst60 * fRec19[2]))); - fRec20[0] = (fTemp1 - ((fConst62 * fRec20[1]) + (fConst63 * fRec20[2]))); - fRec21[0] = (fTemp1 - ((fConst65 * fRec21[1]) + (fConst66 * fRec21[2]))); - fRec22[0] = (fTemp1 - ((fConst68 * fRec22[1]) + (fConst69 * fRec22[2]))); - fRec23[0] = (fTemp1 - ((fConst71 * fRec23[1]) + (fConst72 * fRec23[2]))); - fRec24[0] = (fTemp1 - ((fConst74 * fRec24[1]) + (fConst75 * fRec24[2]))); - fRec25[0] = (fTemp1 - ((fConst77 * fRec25[1]) + (fConst78 * fRec25[2]))); - fRec26[0] = (fTemp1 - ((fConst80 * fRec26[1]) + (fConst81 * fRec26[2]))); - fRec27[0] = (fTemp1 - ((fConst83 * fRec27[1]) + (fConst84 * fRec27[2]))); - fRec28[0] = (fTemp1 - ((fConst86 * fRec28[1]) + (fConst87 * fRec28[2]))); - fRec29[0] = (fTemp1 - ((fConst89 * fRec29[1]) + (fConst90 * fRec29[2]))); - fRec30[0] = (fTemp1 - ((fConst92 * fRec30[1]) + (fConst93 * fRec30[2]))); - fRec31[0] = (fTemp1 - ((fConst95 * fRec31[1]) + (fConst96 * fRec31[2]))); - fRec32[0] = (fTemp1 - ((fConst98 * fRec32[1]) + (fConst99 * fRec32[2]))); - fRec33[0] = (fTemp1 - ((fConst101 * fRec33[1]) + (fConst102 * fRec33[2]))); - fRec34[0] = (fTemp1 - ((fConst104 * fRec34[1]) + (fConst105 * fRec34[2]))); - fRec35[0] = (fTemp1 - ((fConst107 * fRec35[1]) + (fConst108 * fRec35[2]))); - fRec36[0] = (fTemp1 - ((fConst110 * fRec36[1]) + (fConst111 * fRec36[2]))); - fRec37[0] = (fTemp1 - ((fConst113 * fRec37[1]) + (fConst114 * fRec37[2]))); - fRec38[0] = (fTemp1 - ((fConst116 * fRec38[1]) + (fConst117 * fRec38[2]))); - fRec39[0] = (fTemp1 - ((fConst119 * fRec39[1]) + (fConst120 * fRec39[2]))); - fRec40[0] = (fTemp1 - ((fConst122 * fRec40[1]) + (fConst123 * fRec40[2]))); - fRec41[0] = (fTemp1 - ((fConst125 * fRec41[1]) + (fConst126 * fRec41[2]))); - fRec42[0] = (fTemp1 - ((fConst128 * fRec42[1]) + (fConst129 * fRec42[2]))); - fRec43[0] = (fTemp1 - ((fConst131 * fRec43[1]) + (fConst132 * fRec43[2]))); - fRec44[0] = (fTemp1 - ((fConst134 * fRec44[1]) + (fConst135 * fRec44[2]))); - fRec45[0] = (fTemp1 - ((fConst137 * fRec45[1]) + (fConst138 * fRec45[2]))); - fRec46[0] = (fTemp1 - ((fConst140 * fRec46[1]) + (fConst141 * fRec46[2]))); - fRec47[0] = (fTemp1 - ((fConst143 * fRec47[1]) + (fConst144 * fRec47[2]))); - fRec48[0] = (fTemp1 - ((fConst146 * fRec48[1]) + (fConst147 * fRec48[2]))); - fRec49[0] = (fTemp1 - ((fConst149 * fRec49[1]) + (fConst150 * fRec49[2]))); - fRec50[0] = (fTemp1 - ((fConst152 * fRec50[1]) + (fConst153 * fRec50[2]))); - fRec51[0] = (fTemp1 - ((fConst155 * fRec51[1]) + (fConst156 * fRec51[2]))); - fRec52[0] = (fTemp1 - ((fConst158 * fRec52[1]) + (fConst159 * fRec52[2]))); - fRec53[0] = (fTemp1 - ((fConst161 * fRec53[1]) + (fConst162 * fRec53[2]))); - output0[i] = FAUSTFLOAT((0.0199999996f * ((((((((((((((((((((((((((((((((((((((((((((((((((fSlow1 * (fRec0[0] - fRec0[2])) + (fSlow14 * (fRec5[0] - fRec5[2]))) + (fSlow15 * (fRec6[0] - fRec6[2]))) + (fSlow16 * (fRec7[0] - fRec7[2]))) + (fSlow17 * (fRec8[0] - fRec8[2]))) + (fSlow18 * (fRec9[0] - fRec9[2]))) + (fSlow19 * (fRec10[0] - fRec10[2]))) + (fSlow20 * (fRec11[0] - fRec11[2]))) + (fSlow21 * (fRec12[0] - fRec12[2]))) + (fSlow22 * (fRec13[0] - fRec13[2]))) + (fSlow23 * (fRec14[0] - fRec14[2]))) + (fSlow24 * (fRec15[0] - fRec15[2]))) + (fSlow25 * (fRec16[0] - fRec16[2]))) + (fSlow26 * (fRec17[0] - fRec17[2]))) + (fSlow27 * (fRec18[0] - fRec18[2]))) + (fSlow28 * (fRec19[0] - fRec19[2]))) + (fSlow29 * (fRec20[0] - fRec20[2]))) + (fSlow30 * (fRec21[0] - fRec21[2]))) + (fSlow31 * (fRec22[0] - fRec22[2]))) + (fSlow32 * (fRec23[0] - fRec23[2]))) + (fSlow33 * (fRec24[0] - fRec24[2]))) + (fSlow34 * (fRec25[0] - fRec25[2]))) + (fSlow35 * (fRec26[0] - fRec26[2]))) + (fSlow36 * (fRec27[0] - fRec27[2]))) + (fSlow37 * (fRec28[0] - fRec28[2]))) + (fSlow38 * (fRec29[0] - fRec29[2]))) + (fSlow39 * (fRec30[0] - fRec30[2]))) + (fSlow40 * (fRec31[0] - fRec31[2]))) + (fSlow41 * (fRec32[0] - fRec32[2]))) + (fSlow42 * (fRec33[0] - fRec33[2]))) + (fSlow43 * (fRec34[0] - fRec34[2]))) + (fSlow44 * (fRec35[0] - fRec35[2]))) + (fSlow45 * (fRec36[0] - fRec36[2]))) + (fSlow46 * (fRec37[0] - fRec37[2]))) + (fSlow47 * (fRec38[0] - fRec38[2]))) + (fSlow48 * (fRec39[0] - fRec39[2]))) + (fSlow49 * (fRec40[0] - fRec40[2]))) + ((fRec41[0] - fRec41[2]) * fSlow50)) + ((fRec42[0] - fRec42[2]) * fSlow51)) + (fSlow52 * (fRec43[0] - fRec43[2]))) + (fSlow53 * (fRec44[0] - fRec44[2]))) + (fSlow54 * (fRec45[0] - fRec45[2]))) + (fSlow55 * (fRec46[0] - fRec46[2]))) + (fSlow56 * (fRec47[0] - fRec47[2]))) + (fSlow57 * (fRec48[0] - fRec48[2]))) + (fSlow58 * (fRec49[0] - fRec49[2]))) + (fSlow59 * (fRec50[0] - fRec50[2]))) + (fSlow60 * (fRec51[0] - fRec51[2]))) + (fSlow61 * (fRec52[0] - fRec52[2]))) + (fSlow62 * (fRec53[0] - fRec53[2]))))); + fRec1[0] = ((fConst4 * (((fConst6 * fRec2[0]) + (fConst9 * fRec2[1])) + (fConst6 * fRec2[2]))) - (fSlow4 * ((fSlow5 * fRec1[2]) + (fSlow6 * fRec1[1])))); + fVec0[0] = fSlow8; + iRec4[0] = (((iRec4[1] + (iRec4[1] > 0)) * (fSlow8 <= fVec0[1])) + (fSlow8 > fVec0[1])); + float fTemp0 = (fSlow7 * float(iRec4[0])); + float fTemp1 = (fSlow3 * ((fRec1[2] + (fRec1[0] + (2.0f * fRec1[1]))) * std::max(0.0f, std::min(fTemp0, (2.0f - fTemp0))))); + fRec0[0] = (fTemp1 - ((fConst12 * fRec0[1]) + (fConst13 * fRec0[2]))); + fRec5[0] = (fTemp1 - ((fConst15 * fRec5[1]) + (fConst16 * fRec5[2]))); + fRec6[0] = (fTemp1 - ((fConst18 * fRec6[1]) + (fConst19 * fRec6[2]))); + fRec7[0] = (fTemp1 - ((fConst21 * fRec7[1]) + (fConst22 * fRec7[2]))); + fRec8[0] = (fTemp1 - ((fConst24 * fRec8[1]) + (fConst25 * fRec8[2]))); + fRec9[0] = (fTemp1 - ((fConst27 * fRec9[1]) + (fConst28 * fRec9[2]))); + fRec10[0] = (fTemp1 - ((fConst30 * fRec10[1]) + (fConst31 * fRec10[2]))); + fRec11[0] = (fTemp1 - ((fConst33 * fRec11[1]) + (fConst34 * fRec11[2]))); + fRec12[0] = (fTemp1 - ((fConst36 * fRec12[1]) + (fConst37 * fRec12[2]))); + fRec13[0] = (fTemp1 - ((fConst39 * fRec13[1]) + (fConst40 * fRec13[2]))); + fRec14[0] = (fTemp1 - ((fConst42 * fRec14[1]) + (fConst43 * fRec14[2]))); + fRec15[0] = (fTemp1 - ((fConst45 * fRec15[1]) + (fConst46 * fRec15[2]))); + fRec16[0] = (fTemp1 - ((fConst48 * fRec16[1]) + (fConst49 * fRec16[2]))); + fRec17[0] = (fTemp1 - ((fConst51 * fRec17[1]) + (fConst52 * fRec17[2]))); + fRec18[0] = (fTemp1 - ((fConst54 * fRec18[1]) + (fConst55 * fRec18[2]))); + fRec19[0] = (fTemp1 - ((fConst57 * fRec19[1]) + (fConst58 * fRec19[2]))); + fRec20[0] = (fTemp1 - ((fConst60 * fRec20[1]) + (fConst61 * fRec20[2]))); + fRec21[0] = (fTemp1 - ((fConst63 * fRec21[1]) + (fConst64 * fRec21[2]))); + fRec22[0] = (fTemp1 - ((fConst66 * fRec22[1]) + (fConst67 * fRec22[2]))); + fRec23[0] = (fTemp1 - ((fConst69 * fRec23[1]) + (fConst70 * fRec23[2]))); + fRec24[0] = (fTemp1 - ((fConst72 * fRec24[1]) + (fConst73 * fRec24[2]))); + fRec25[0] = (fTemp1 - ((fConst75 * fRec25[1]) + (fConst76 * fRec25[2]))); + fRec26[0] = (fTemp1 - ((fConst78 * fRec26[1]) + (fConst79 * fRec26[2]))); + fRec27[0] = (fTemp1 - ((fConst81 * fRec27[1]) + (fConst82 * fRec27[2]))); + fRec28[0] = (fTemp1 - ((fConst84 * fRec28[1]) + (fConst85 * fRec28[2]))); + fRec29[0] = (fTemp1 - ((fConst87 * fRec29[1]) + (fConst88 * fRec29[2]))); + fRec30[0] = (fTemp1 - ((fConst90 * fRec30[1]) + (fConst91 * fRec30[2]))); + fRec31[0] = (fTemp1 - ((fConst93 * fRec31[1]) + (fConst94 * fRec31[2]))); + fRec32[0] = (fTemp1 - ((fConst96 * fRec32[1]) + (fConst97 * fRec32[2]))); + fRec33[0] = (fTemp1 - ((fConst99 * fRec33[1]) + (fConst100 * fRec33[2]))); + fRec34[0] = (fTemp1 - ((fConst102 * fRec34[1]) + (fConst103 * fRec34[2]))); + fRec35[0] = (fTemp1 - ((fConst105 * fRec35[1]) + (fConst106 * fRec35[2]))); + fRec36[0] = (fTemp1 - ((fConst108 * fRec36[1]) + (fConst109 * fRec36[2]))); + fRec37[0] = (fTemp1 - ((fConst111 * fRec37[1]) + (fConst112 * fRec37[2]))); + fRec38[0] = (fTemp1 - ((fConst114 * fRec38[1]) + (fConst115 * fRec38[2]))); + fRec39[0] = (fTemp1 - ((fConst117 * fRec39[1]) + (fConst118 * fRec39[2]))); + fRec40[0] = (fTemp1 - ((fConst120 * fRec40[1]) + (fConst121 * fRec40[2]))); + fRec41[0] = (fTemp1 - ((fConst123 * fRec41[1]) + (fConst124 * fRec41[2]))); + fRec42[0] = (fTemp1 - ((fConst126 * fRec42[1]) + (fConst127 * fRec42[2]))); + fRec43[0] = (fTemp1 - ((fConst129 * fRec43[1]) + (fConst130 * fRec43[2]))); + fRec44[0] = (fTemp1 - ((fConst132 * fRec44[1]) + (fConst133 * fRec44[2]))); + fRec45[0] = (fTemp1 - ((fConst135 * fRec45[1]) + (fConst136 * fRec45[2]))); + fRec46[0] = (fTemp1 - ((fConst138 * fRec46[1]) + (fConst139 * fRec46[2]))); + fRec47[0] = (fTemp1 - ((fConst141 * fRec47[1]) + (fConst142 * fRec47[2]))); + fRec48[0] = (fTemp1 - ((fConst144 * fRec48[1]) + (fConst145 * fRec48[2]))); + fRec49[0] = (fTemp1 - ((fConst147 * fRec49[1]) + (fConst148 * fRec49[2]))); + fRec50[0] = (fTemp1 - ((fConst150 * fRec50[1]) + (fConst151 * fRec50[2]))); + fRec51[0] = (fTemp1 - ((fConst153 * fRec51[1]) + (fConst154 * fRec51[2]))); + fRec52[0] = (fTemp1 - ((fConst156 * fRec52[1]) + (fConst157 * fRec52[2]))); + fRec53[0] = (fTemp1 - ((fConst159 * fRec53[1]) + (fConst160 * fRec53[2]))); + output0[i] = FAUSTFLOAT((0.0199999996f * (((fRec0[0] - fRec0[2]) * fSlow10) + (((fRec5[0] - fRec5[2]) * fSlow11) + ((((((((((((((((fRec6[0] - fRec6[2]) * fSlow12) + (((fRec7[0] - fRec7[2]) * fSlow13) + (((fRec8[0] - fRec8[2]) * fSlow14) + (((fRec9[0] - fRec9[2]) * fSlow15) + (((fRec10[0] - fRec10[2]) * fSlow16) + (((fRec11[0] - fRec11[2]) * fSlow17) + (((fRec12[0] - fRec12[2]) * fSlow18) + (((fRec13[0] - fRec13[2]) * fSlow19) + (((fRec14[0] - fRec14[2]) * fSlow20) + (((fRec15[0] - fRec15[2]) * fSlow21) + (((fRec16[0] - fRec16[2]) * fSlow22) + (((fRec17[0] - fRec17[2]) * fSlow23) + (((fRec18[0] - fRec18[2]) * fSlow24) + (((fRec19[0] - fRec19[2]) * fSlow25) + (((fRec20[0] - fRec20[2]) * fSlow26) + (((fRec21[0] - fRec21[2]) * fSlow27) + (((fRec22[0] - fRec22[2]) * fSlow28) + (((fRec23[0] - fRec23[2]) * fSlow29) + (((fRec24[0] - fRec24[2]) * fSlow30) + (((fRec25[0] - fRec25[2]) * fSlow31) + (((fRec26[0] - fRec26[2]) * fSlow32) + (((fRec27[0] - fRec27[2]) * fSlow33) + (((fRec28[0] - fRec28[2]) * fSlow34) + (((fRec29[0] - fRec29[2]) * fSlow35) + (((fRec30[0] - fRec30[2]) * fSlow36) + (((fRec31[0] - fRec31[2]) * fSlow37) + (((fRec32[0] - fRec32[2]) * fSlow38) + (((fRec33[0] - fRec33[2]) * fSlow39) + (((fRec34[0] - fRec34[2]) * fSlow40) + (((fRec35[0] - fRec35[2]) * fSlow41) + (((fRec36[0] - fRec36[2]) * fSlow42) + (((fRec37[0] - fRec37[2]) * fSlow43) + ((((fRec38[0] - fRec38[2]) * fSlow44) + ((fRec39[0] - fRec39[2]) * fSlow45)) + ((fRec40[0] - fRec40[2]) * fSlow46)))))))))))))))))))))))))))))))))) + ((fRec41[0] - fRec41[2]) * fSlow47)) + ((fRec42[0] - fRec42[2]) * fSlow48)) + ((fRec43[0] - fRec43[2]) * fSlow49)) + ((fRec44[0] - fRec44[2]) * fSlow50)) + ((fRec45[0] - fRec45[2]) * fSlow51)) + ((fRec46[0] - fRec46[2]) * fSlow52)) + ((fRec47[0] - fRec47[2]) * fSlow53)) + ((fRec48[0] - fRec48[2]) * fSlow54)) + ((fRec49[0] - fRec49[2]) * fSlow55)) + ((fRec50[0] - fRec50[2]) * fSlow56)) + ((fRec51[0] - fRec51[2]) * fSlow57)) + ((fRec52[0] - fRec52[2]) * fSlow58)) + ((fRec53[0] - fRec53[2]) * fSlow59)))))); iRec3[1] = iRec3[0]; fRec2[2] = fRec2[1]; fRec2[1] = fRec2[0]; fRec1[2] = fRec1[1]; fRec1[1] = fRec1[0]; fVec0[1] = fVec0[0]; - fVec1[1] = fVec1[0]; - fRec4[1] = fRec4[0]; + iRec4[1] = iRec4[0]; fRec0[2] = fRec0[1]; fRec0[1] = fRec0[0]; fRec5[2] = fRec5[1]; @@ -1490,12 +1475,9 @@ class synth_church_bell : public dsp { fRec52[1] = fRec52[0]; fRec53[2] = fRec53[1]; fRec53[1] = fRec53[0]; - } - } - }; // clang-format on #endif diff --git a/ceammc/ext/src/synth/synth_dubdub.h b/ceammc/ext/src/synth/synth_dubdub.h index 747bfb0a37..1c247e8a8d 100644 --- a/ceammc/ext/src/synth/synth_dubdub.h +++ b/ceammc/ext/src/synth/synth_dubdub.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "synth.dubdub" -Code generated with Faust 2.15.0 (https://faust.grame.fr) -Compilation options: cpp, -scal -ftz 0 +Code generated with Faust 2.22.1 (https://faust.grame.fr) +Compilation options: -lang cpp -scal -ftz 0 ------------------------------------------------------------ */ #ifndef __synth_dubdub_H__ @@ -14,6 +14,7 @@ Compilation options: cpp, -scal -ftz 0 #include #include +/************************** BEGIN dsp.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -96,23 +97,23 @@ class dsp { * - static class 'classInit': static tables initialization * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void init(int samplingRate) = 0; + virtual void init(int sample_rate) = 0; /** * Init instance state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceInit(int samplingRate) = 0; + virtual void instanceInit(int sample_rate) = 0; /** * Init instance constant state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceConstants(int samplingRate) = 0; + virtual void instanceConstants(int sample_rate) = 0; /* Init default control parameters values */ virtual void instanceResetUserInterface() = 0; @@ -149,8 +150,8 @@ class dsp { * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the number of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) * */ virtual void compute(double /*date_usec*/, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -169,16 +170,16 @@ class decorator_dsp : public dsp { public: - decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + decorator_dsp(dsp* dsp = nullptr):fDSP(dsp) {} virtual ~decorator_dsp() { delete fDSP; } virtual int getNumInputs() { return fDSP->getNumInputs(); } virtual int getNumOutputs() { return fDSP->getNumOutputs(); } virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } virtual int getSampleRate() { return fDSP->getSampleRate(); } - virtual void init(int samplingRate) { fDSP->init(samplingRate); } - virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } - virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void init(int sample_rate) { fDSP->init(sample_rate); } + virtual void instanceInit(int sample_rate) { fDSP->instanceInit(sample_rate); } + virtual void instanceConstants(int sample_rate) { fDSP->instanceConstants(sample_rate); } virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } @@ -233,6 +234,8 @@ class dsp_factory { #endif #endif +/************************** END dsp.h **************************/ +/************************** BEGIN UI.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -272,45 +275,54 @@ class dsp_factory { struct Soundfile; -class UI +template +class UIReal { - + public: - - UI() {} - - virtual ~UI() {} - + + UIReal() {} + virtual ~UIReal() {} + // -- widget's layouts - + virtual void openTabBox(const char* label) = 0; virtual void openHorizontalBox(const char* label) = 0; virtual void openVerticalBox(const char* label) = 0; virtual void closeBox() = 0; - + // -- active widgets - - virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - + + virtual void addButton(const char* label, REAL* zone) = 0; + virtual void addCheckButton(const char* label, REAL* zone) = 0; + virtual void addVerticalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addHorizontalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addNumEntry(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + // -- passive widgets - - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - + + virtual void addHorizontalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + virtual void addVerticalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + // -- soundfiles - + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; - + // -- metadata declarations + + virtual void declare(REAL* zone, const char* key, const char* val) {} +}; - virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +struct UI : public UIReal +{ + + UI() {} + virtual ~UI() {} }; #endif +/************************** END UI.h **************************/ +/************************** BEGIN meta.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -339,11 +351,14 @@ class UI struct Meta { - virtual void declare(const char* key, const char* value) = 0; virtual ~Meta() {}; + virtual void declare(const char* key, const char* value) = 0; + }; #endif +/************************** END meta.h **************************/ +/************************** BEGIN misc.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -366,7 +381,7 @@ struct Meta that work under terms of your choice, so long as this FAUST architecture section is not modified. ************************************************************************/ - + #ifndef __misc__ #define __misc__ @@ -374,6 +389,8 @@ struct Meta #include #include #include +#include +#include using std::max; @@ -395,27 +412,65 @@ static int int2pow2(int x) { int r = 0; while ((1<declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.0"); + m->declare("basics.lib/version", "0.1"); m->declare("ceammc_ui.lib/name", "CEAMMC faust default UI elements"); m->declare("ceammc_ui.lib/version", "0.1.1"); m->declare("envelopes.lib/author", "GRAME"); @@ -490,9 +545,24 @@ class synth_dubdub : public dsp { m->declare("envelopes.lib/license", "LGPL with exception"); m->declare("envelopes.lib/name", "Faust Envelope Library"); m->declare("envelopes.lib/version", "0.0"); - m->declare("filename", "synth_dubdub"); + m->declare("filename", "synth_dubdub.dsp"); + m->declare("filters.lib/fir:author", "Julius O. Smith III"); + m->declare("filters.lib/fir:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/fir:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/iir:author", "Julius O. Smith III"); + m->declare("filters.lib/iir:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/iir:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/lowpass0_highpass1", "Copyright (C) 2003-2019 by Julius O. Smith III "); m->declare("filters.lib/name", "Faust Filters Library"); - m->declare("filters.lib/version", "0.0"); + m->declare("filters.lib/resonlp:author", "Julius O. Smith III"); + m->declare("filters.lib/resonlp:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/resonlp:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/tf2:author", "Julius O. Smith III"); + m->declare("filters.lib/tf2:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/tf2:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/tf2s:author", "Julius O. Smith III"); + m->declare("filters.lib/tf2s:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/tf2s:license", "MIT-style STK-4.3 license"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); @@ -511,27 +581,23 @@ class synth_dubdub : public dsp { virtual int getNumInputs() { return 0; - } virtual int getNumOutputs() { return 1; - } virtual int getInputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { default: { rate = -1; break; } - } return rate; - } virtual int getOutputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -540,24 +606,20 @@ class synth_dubdub : public dsp { rate = -1; break; } - } return rate; - } - static void classInit(int samplingFreq) { - + static void classInit(int sample_rate) { } - virtual void instanceConstants(int samplingFreq) { - fSamplingFreq = samplingFreq; - fConst0 = std::min(192000.0f, std::max(1.0f, float(fSamplingFreq))); + virtual void instanceConstants(int sample_rate) { + fSampleRate = sample_rate; + fConst0 = std::min(192000.0f, std::max(1.0f, float(fSampleRate))); fConst1 = std::exp((0.0f - (100.0f / fConst0))); fConst2 = (1.0f - fConst1); fConst3 = (1.0f / fConst0); fConst4 = (3.14159274f / fConst0); - } virtual void instanceResetUserInterface() { @@ -565,35 +627,29 @@ class synth_dubdub : public dsp { fHslider0 = FAUSTFLOAT(48.0f); fHslider1 = FAUSTFLOAT(3000.0f); fVslider0 = FAUSTFLOAT(0.10000000000000001f); - } virtual void instanceClear() { for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { fRec1[l0] = 0.0f; - } for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { fRec2[l1] = 0.0f; - } for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { fRec4[l2] = 0.0f; - } for (int l3 = 0; (l3 < 3); l3 = (l3 + 1)) { fRec0[l3] = 0.0f; - } - } - virtual void init(int samplingFreq) { - classInit(samplingFreq); - instanceInit(samplingFreq); + virtual void init(int sample_rate) { + classInit(sample_rate); + instanceInit(sample_rate); } - virtual void instanceInit(int samplingFreq) { - instanceConstants(samplingFreq); + virtual void instanceInit(int sample_rate) { + instanceConstants(sample_rate); instanceResetUserInterface(); instanceClear(); } @@ -601,9 +657,9 @@ class synth_dubdub : public dsp { virtual synth_dubdub* clone() { return new synth_dubdub(); } + virtual int getSampleRate() { - return fSamplingFreq; - + return fSampleRate; } virtual void buildUserInterface(UI* ui_interface) { @@ -613,7 +669,6 @@ class synth_dubdub : public dsp { ui_interface->addHorizontalSlider("pitch", &fHslider0, 48.0f, 24.0f, 84.0f, 0.00100000005f); ui_interface->addVerticalSlider("q", &fVslider0, 0.100000001f, 0.00999999978f, 100.0f, 0.100000001f); ui_interface->closeBox(); - } virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { @@ -631,8 +686,8 @@ class synth_dubdub : public dsp { float fTemp0 = (fSlow2 + (fRec2[1] + -1.0f)); int iTemp1 = (fTemp0 < 0.0f); float fTemp2 = (fSlow2 + fRec2[1]); - fRec2[0] = (iTemp1?fTemp2:fTemp0); - float fRec3 = (iTemp1?fTemp2:(fSlow2 + (fRec2[1] + (fSlow3 * fTemp0)))); + fRec2[0] = (iTemp1 ? fTemp2 : fTemp0); + float fRec3 = (iTemp1 ? fTemp2 : (fSlow2 + (fRec2[1] + (fSlow3 * fTemp0)))); fRec4[0] = (fSlow6 + (0.999000013f * fRec4[1])); float fTemp3 = (1.0f / fRec4[0]); float fTemp4 = ((fSlow5 * (fSlow5 + fTemp3)) + 1.0f); @@ -643,12 +698,9 @@ class synth_dubdub : public dsp { fRec4[1] = fRec4[0]; fRec0[2] = fRec0[1]; fRec0[1] = fRec0[0]; - } - } - }; // clang-format on #endif diff --git a/ceammc/ext/src/synth/synth_dx7.h b/ceammc/ext/src/synth/synth_dx7.h index 530dae3189..5a229c84d4 100644 --- a/ceammc/ext/src/synth/synth_dx7.h +++ b/ceammc/ext/src/synth/synth_dx7.h @@ -1,7 +1,7 @@ //---------------------------------------------------------- // name: "synth.dx7" // -// Code generated with Faust 2.15.0 (https://faust.grame.fr) +// Code generated with Faust 2.22.1 (https://faust.grame.fr) //---------------------------------------------------------- /* link with */ @@ -25,6 +25,7 @@ template <> inline float faustpower<2>(float x) { return x*x; } #include #include +/************************** BEGIN dsp.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -107,23 +108,23 @@ class dsp { * - static class 'classInit': static tables initialization * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void init(int samplingRate) = 0; + virtual void init(int sample_rate) = 0; /** * Init instance state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceInit(int samplingRate) = 0; + virtual void instanceInit(int sample_rate) = 0; /** * Init instance constant state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceConstants(int samplingRate) = 0; + virtual void instanceConstants(int sample_rate) = 0; /* Init default control parameters values */ virtual void instanceResetUserInterface() = 0; @@ -160,8 +161,8 @@ class dsp { * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the number of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) * */ virtual void compute(double /*date_usec*/, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -180,16 +181,16 @@ class decorator_dsp : public dsp { public: - decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + decorator_dsp(dsp* dsp = nullptr):fDSP(dsp) {} virtual ~decorator_dsp() { delete fDSP; } virtual int getNumInputs() { return fDSP->getNumInputs(); } virtual int getNumOutputs() { return fDSP->getNumOutputs(); } virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } virtual int getSampleRate() { return fDSP->getSampleRate(); } - virtual void init(int samplingRate) { fDSP->init(samplingRate); } - virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } - virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void init(int sample_rate) { fDSP->init(sample_rate); } + virtual void instanceInit(int sample_rate) { fDSP->instanceInit(sample_rate); } + virtual void instanceConstants(int sample_rate) { fDSP->instanceConstants(sample_rate); } virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } @@ -244,6 +245,8 @@ class dsp_factory { #endif #endif +/************************** END dsp.h **************************/ +/************************** BEGIN UI.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -283,45 +286,54 @@ class dsp_factory { struct Soundfile; -class UI +template +class UIReal { - + public: - - UI() {} - - virtual ~UI() {} - + + UIReal() {} + virtual ~UIReal() {} + // -- widget's layouts - + virtual void openTabBox(const char* label) = 0; virtual void openHorizontalBox(const char* label) = 0; virtual void openVerticalBox(const char* label) = 0; virtual void closeBox() = 0; - + // -- active widgets - - virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - + + virtual void addButton(const char* label, REAL* zone) = 0; + virtual void addCheckButton(const char* label, REAL* zone) = 0; + virtual void addVerticalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addHorizontalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addNumEntry(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + // -- passive widgets - - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - + + virtual void addHorizontalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + virtual void addVerticalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + // -- soundfiles - + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; - + // -- metadata declarations + + virtual void declare(REAL* zone, const char* key, const char* val) {} +}; - virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +struct UI : public UIReal +{ + + UI() {} + virtual ~UI() {} }; #endif +/************************** END UI.h **************************/ +/************************** BEGIN meta.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -350,11 +362,14 @@ class UI struct Meta { - virtual void declare(const char* key, const char* value) = 0; virtual ~Meta() {}; + virtual void declare(const char* key, const char* value) = 0; + }; #endif +/************************** END meta.h **************************/ +/************************** BEGIN misc.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -377,7 +392,7 @@ struct Meta that work under terms of your choice, so long as this FAUST architecture section is not modified. ************************************************************************/ - + #ifndef __misc__ #define __misc__ @@ -385,6 +400,8 @@ struct Meta #include #include #include +#include +#include using std::max; @@ -406,27 +423,65 @@ static int int2pow2(int x) { int r = 0; while ((1<declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.0"); + m->declare("basics.lib/version", "0.1"); m->declare("envelopes.lib/author", "GRAME"); m->declare("envelopes.lib/copyright", "GRAME"); m->declare("envelopes.lib/license", "LGPL with exception"); m->declare("envelopes.lib/name", "Faust Envelope Library"); m->declare("envelopes.lib/version", "0.0"); - m->declare("filename", "synth_dx7"); + m->declare("filename", "synth_dx7.dsp"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); @@ -655,30 +710,30 @@ class synth_dx7 : public dsp { virtual int getNumInputs() { return 0; } virtual int getNumOutputs() { return 1; } - static void classInit(int samplingFreq) { + static void classInit(int sample_rate) { SIG0 sig0; - sig0.init(samplingFreq); + sig0.init(sample_rate); sig0.fill(65536,ftbl0); } - virtual void instanceConstants(int samplingFreq) { - fSamplingFreq = samplingFreq; - fConst0 = min(192000.0f, max(1.0f, (float)fSamplingFreq)); + virtual void instanceConstants(int sample_rate) { + fSampleRate = sample_rate; + fConst0 = min(192000.0f, max(1.0f, (float)fSampleRate)); + iTempPerm0 = 0; iTempPerm1 = 0; - iTempPerm2 = 0; fConst1 = (1.0f / fConst0); - fTempPerm3 = 0; + fTempPerm2 = 0; fTempPerm4 = 0; - fTempPerm5 = 0; - fTempPerm6 = 0; - iTempPerm7 = 0; - iTempPerm8 = 0; + iTempPerm5 = 0; + iTempPerm6 = 0; + fTempPerm7 = 0; + fTempPerm8 = 0; fTempPerm9 = 0; iTempPerm10 = 0; iTempPerm11 = 0; fTempPerm12 = 0; - iTempPerm13 = 0; + fTempPerm13 = 0; iTempPerm14 = 0; - fTempPerm15 = 0; + iTempPerm15 = 0; fTempPerm16 = 0; fTempPerm17 = 0; iTempPerm18 = 0; @@ -698,8 +753,8 @@ class synth_dx7 : public dsp { fbutton0 = 0.0; fentry1 = 95.0f; fentry2 = 90.0f; - fentry3 = 1.0f; fslider0 = 0.80000000000000004f; + fentry3 = 1.0f; fentry4 = 0.0f; fentry5 = 90.0f; fentry6 = 0.0f; @@ -712,91 +767,91 @@ class synth_dx7 : public dsp { fentry12 = 90.0f; fentry13 = 90.0f; fentry14 = 90.0f; - fentry15 = 0.0f; - fentry16 = 1.0f; - fentry17 = 0.0f; - fentry18 = 1.0f; - fentry19 = 95.0f; - fentry20 = 90.0f; + fentry15 = 95.0f; + fentry16 = 90.0f; + fentry17 = 1.0f; + fentry18 = 0.0f; + fentry19 = 90.0f; + fentry20 = 0.0f; fentry21 = 1.0f; fentry22 = 0.0f; - fentry23 = 90.0f; + fentry23 = 1.0f; fentry24 = 0.0f; fentry25 = 90.0f; - fentry26 = 0.0f; + fentry26 = 90.0f; fentry27 = 90.0f; fentry28 = 90.0f; - fentry29 = 90.0f; - fentry30 = 95.0f; - fentry31 = 90.0f; - fentry32 = 1.0f; - fentry33 = 0.0f; - fentry34 = 90.0f; - fentry35 = 0.0f; - fentry36 = 1.0f; - fentry37 = 0.0f; - fentry38 = 1.0f; - fentry39 = 0.0f; + fentry29 = 95.0f; + fentry30 = 90.0f; + fentry31 = 1.0f; + fentry32 = 0.0f; + fentry33 = 90.0f; + fentry34 = 0.0f; + fentry35 = 1.0f; + fentry36 = 0.0f; + fentry37 = 1.0f; + fentry38 = 0.0f; + fentry39 = 90.0f; fentry40 = 90.0f; fentry41 = 90.0f; fentry42 = 90.0f; - fentry43 = 90.0f; - fentry44 = 95.0f; - fentry45 = 90.0f; - fentry46 = 1.0f; - fentry47 = 0.0f; - fentry48 = 90.0f; - fentry49 = 0.0f; - fentry50 = 1.0f; - fentry51 = 0.0f; - fentry52 = 1.0f; - fentry53 = 0.0f; + fentry43 = 95.0f; + fentry44 = 90.0f; + fentry45 = 1.0f; + fentry46 = 0.0f; + fentry47 = 90.0f; + fentry48 = 0.0f; + fentry49 = 1.0f; + fentry50 = 0.0f; + fentry51 = 1.0f; + fentry52 = 0.0f; + fentry53 = 90.0f; fentry54 = 90.0f; fentry55 = 90.0f; fentry56 = 90.0f; - fentry57 = 90.0f; - fentry58 = 1.0f; - fentry59 = 0.0f; - fentry60 = 1.0f; - fentry61 = 95.0f; - fentry62 = 90.0f; + fentry57 = 95.0f; + fentry58 = 90.0f; + fentry59 = 1.0f; + fentry60 = 0.0f; + fentry61 = 90.0f; + fentry62 = 0.0f; fentry63 = 1.0f; fentry64 = 0.0f; - fentry65 = 90.0f; + fentry65 = 1.0f; fentry66 = 0.0f; - fentry67 = 0.0f; + fentry67 = 90.0f; fentry68 = 90.0f; fentry69 = 90.0f; fentry70 = 90.0f; - fentry71 = 90.0f; - fentry72 = 1.0f; - fentry73 = 0.0f; - fentry74 = 1.0f; - fentry75 = 95.0f; - fentry76 = 90.0f; + fentry71 = 95.0f; + fentry72 = 90.0f; + fentry73 = 1.0f; + fentry74 = 0.0f; + fentry75 = 90.0f; + fentry76 = 0.0f; fentry77 = 1.0f; fentry78 = 0.0f; - fentry79 = 90.0f; + fentry79 = 1.0f; fentry80 = 0.0f; - fentry81 = 0.0f; + fentry81 = 90.0f; fentry82 = 90.0f; fentry83 = 90.0f; fentry84 = 90.0f; - fentry85 = 90.0f; + fentry85 = 0.0f; } virtual void instanceClear() { + for (int i=0; i<2; i++) fRec0[i] = 0; for (int i=0; i<2; i++) fRec2[i] = 0; + for (int i=0; i<2; i++) fRec1[i] = 0; for (int i=0; i<2; i++) fRec4[i] = 0; - for (int i=0; i<2; i++) fRec3[i] = 0; for (int i=0; i<2; i++) fRec5[i] = 0; - for (int i=0; i<2; i++) fRec1[i] = 0; - for (int i=0; i<2; i++) fRec6[i] = 0; for (int i=0; i<2; i++) fRec7[i] = 0; - for (int i=0; i<2; i++) fRec9[i] = 0; + for (int i=0; i<2; i++) fRec6[i] = 0; for (int i=0; i<2; i++) fRec8[i] = 0; + for (int i=0; i<2; i++) fRec9[i] = 0; + for (int i=0; i<2; i++) fRec11[i] = 0; for (int i=0; i<2; i++) fRec10[i] = 0; for (int i=0; i<2; i++) fRec12[i] = 0; - for (int i=0; i<2; i++) fRec11[i] = 0; for (int i=0; i<2; i++) fRec13[i] = 0; for (int i=0; i<2; i++) fRec15[i] = 0; for (int i=0; i<2; i++) fRec14[i] = 0; @@ -805,19 +860,19 @@ class synth_dx7 : public dsp { for (int i=0; i<2; i++) fRec19[i] = 0; for (int i=0; i<2; i++) fRec18[i] = 0; for (int i=0; i<2; i++) fRec20[i] = 0; - for (int i=0; i<2; i++) fRec21[i] = 0; - for (int i=0; i<2; i++) fRec23[i] = 0; for (int i=0; i<2; i++) fRec22[i] = 0; for (int i=0; i<2; i++) fRec24[i] = 0; + for (int i=0; i<2; i++) fRec23[i] = 0; for (int i=0; i<2; i++) fRec25[i] = 0; + for (int i=0; i<2; i++) fRec21[i] = 0; for (int i=0; i<2; i++) fRec26[i] = 0; } - virtual void init(int samplingFreq) { - classInit(samplingFreq); - instanceInit(samplingFreq); + virtual void init(int sample_rate) { + classInit(sample_rate); + instanceInit(sample_rate); } - virtual void instanceInit(int samplingFreq) { - instanceConstants(samplingFreq); + virtual void instanceInit(int sample_rate) { + instanceConstants(sample_rate); instanceResetUserInterface(); instanceClear(); } @@ -825,121 +880,121 @@ class synth_dx7 : public dsp { return new synth_dx7(); } virtual int getSampleRate() { - return fSamplingFreq; + return fSampleRate; } virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("synth.dx7"); ui_interface->addNumEntry("algorithm", &fentry0, 0.0f, 0.0f, 31.0f, 1.0f); - ui_interface->addNumEntry("feedback", &fentry15, 0.0f, 0.0f, 99.0f, 1.0f); + ui_interface->addNumEntry("feedback", &fentry85, 0.0f, 0.0f, 99.0f, 1.0f); ui_interface->addHorizontalSlider("freq", &fslider1, 400.0f, 50.0f, 1000.0f, 0.01f); ui_interface->addHorizontalSlider("gain", &fslider0, 0.80000000000000004f, 0.0f, 1.0f, 0.01f); ui_interface->addButton("gate", &fbutton0); - ui_interface->addNumEntry("op0:egL1", &fentry26, 0.0f, 0.0f, 99.0f, 1.0f); - ui_interface->addNumEntry("op0:egL2", &fentry25, 90.0f, 0.0f, 99.0f, 1.0f); - ui_interface->addNumEntry("op0:egL3", &fentry20, 90.0f, 0.0f, 99.0f, 1.0f); - ui_interface->addNumEntry("op0:egL4", &fentry22, 0.0f, 0.0f, 99.0f, 1.0f); - ui_interface->addNumEntry("op0:egR1", &fentry28, 90.0f, 0.0f, 99.0f, 1.0f); - ui_interface->addNumEntry("op0:egR2", &fentry27, 90.0f, 0.0f, 99.0f, 1.0f); - ui_interface->addNumEntry("op0:egR3", &fentry29, 90.0f, 0.0f, 99.0f, 1.0f); - ui_interface->addNumEntry("op0:egR4", &fentry23, 90.0f, 0.0f, 99.0f, 1.0f); - ui_interface->addNumEntry("op0:keyVelSens", &fentry21, 1.0f, 0.0f, 8.0f, 1.0f); - ui_interface->addNumEntry("op0:level", &fentry19, 95.0f, 0.0f, 99.0f, 1.0f); - ui_interface->addNumEntry("op0:opDetune", &fentry16, 1.0f, -10.0f, 10.0f, 1.0f); - ui_interface->addNumEntry("op0:opFreq", &fentry18, 1.0f, 0.0f, 2.0f, 0.01f); - ui_interface->addNumEntry("op0:opMode", &fentry17, 0.0f, 0.0f, 1.0f, 1.0f); - ui_interface->addNumEntry("op0:opRateScale", &fentry24, 0.0f, 0.0f, 10.0f, 1.0f); - ui_interface->addNumEntry("op1:egL1", &fentry10, 0.0f, 0.0f, 99.0f, 1.0f); - ui_interface->addNumEntry("op1:egL2", &fentry12, 90.0f, 0.0f, 99.0f, 1.0f); - ui_interface->addNumEntry("op1:egL3", &fentry2, 90.0f, 0.0f, 99.0f, 1.0f); - ui_interface->addNumEntry("op1:egL4", &fentry4, 0.0f, 0.0f, 99.0f, 1.0f); - ui_interface->addNumEntry("op1:egR1", &fentry11, 90.0f, 0.0f, 99.0f, 1.0f); - ui_interface->addNumEntry("op1:egR2", &fentry13, 90.0f, 0.0f, 99.0f, 1.0f); - ui_interface->addNumEntry("op1:egR3", &fentry14, 90.0f, 0.0f, 99.0f, 1.0f); - ui_interface->addNumEntry("op1:egR4", &fentry5, 90.0f, 0.0f, 99.0f, 1.0f); - ui_interface->addNumEntry("op1:keyVelSens", &fentry3, 1.0f, 0.0f, 8.0f, 1.0f); - ui_interface->addNumEntry("op1:level", &fentry1, 95.0f, 0.0f, 99.0f, 1.0f); - ui_interface->addNumEntry("op1:opDetune", &fentry7, 1.0f, -10.0f, 10.0f, 1.0f); - ui_interface->addNumEntry("op1:opFreq", &fentry9, 1.0f, 0.0f, 2.0f, 0.01f); - ui_interface->addNumEntry("op1:opMode", &fentry8, 0.0f, 0.0f, 1.0f, 1.0f); - ui_interface->addNumEntry("op1:opRateScale", &fentry6, 0.0f, 0.0f, 10.0f, 1.0f); - ui_interface->addNumEntry("op2:egL1", &fentry39, 0.0f, 0.0f, 99.0f, 1.0f); - ui_interface->addNumEntry("op2:egL2", &fentry41, 90.0f, 0.0f, 99.0f, 1.0f); - ui_interface->addNumEntry("op2:egL3", &fentry31, 90.0f, 0.0f, 99.0f, 1.0f); - ui_interface->addNumEntry("op2:egL4", &fentry33, 0.0f, 0.0f, 99.0f, 1.0f); - ui_interface->addNumEntry("op2:egR1", &fentry40, 90.0f, 0.0f, 99.0f, 1.0f); - ui_interface->addNumEntry("op2:egR2", &fentry42, 90.0f, 0.0f, 99.0f, 1.0f); - ui_interface->addNumEntry("op2:egR3", &fentry43, 90.0f, 0.0f, 99.0f, 1.0f); - ui_interface->addNumEntry("op2:egR4", &fentry34, 90.0f, 0.0f, 99.0f, 1.0f); - ui_interface->addNumEntry("op2:keyVelSens", &fentry32, 1.0f, 0.0f, 8.0f, 1.0f); - ui_interface->addNumEntry("op2:level", &fentry30, 95.0f, 0.0f, 99.0f, 1.0f); - ui_interface->addNumEntry("op2:opDetune", &fentry36, 1.0f, -10.0f, 10.0f, 1.0f); - ui_interface->addNumEntry("op2:opFreq", &fentry38, 1.0f, 0.0f, 2.0f, 0.01f); - ui_interface->addNumEntry("op2:opMode", &fentry37, 0.0f, 0.0f, 1.0f, 1.0f); - ui_interface->addNumEntry("op2:opRateScale", &fentry35, 0.0f, 0.0f, 10.0f, 1.0f); - ui_interface->addNumEntry("op3:egL1", &fentry53, 0.0f, 0.0f, 99.0f, 1.0f); - ui_interface->addNumEntry("op3:egL2", &fentry55, 90.0f, 0.0f, 99.0f, 1.0f); - ui_interface->addNumEntry("op3:egL3", &fentry45, 90.0f, 0.0f, 99.0f, 1.0f); - ui_interface->addNumEntry("op3:egL4", &fentry47, 0.0f, 0.0f, 99.0f, 1.0f); - ui_interface->addNumEntry("op3:egR1", &fentry54, 90.0f, 0.0f, 99.0f, 1.0f); - ui_interface->addNumEntry("op3:egR2", &fentry56, 90.0f, 0.0f, 99.0f, 1.0f); - ui_interface->addNumEntry("op3:egR3", &fentry57, 90.0f, 0.0f, 99.0f, 1.0f); - ui_interface->addNumEntry("op3:egR4", &fentry48, 90.0f, 0.0f, 99.0f, 1.0f); - ui_interface->addNumEntry("op3:keyVelSens", &fentry46, 1.0f, 0.0f, 8.0f, 1.0f); - ui_interface->addNumEntry("op3:level", &fentry44, 95.0f, 0.0f, 99.0f, 1.0f); - ui_interface->addNumEntry("op3:opDetune", &fentry50, 1.0f, -10.0f, 10.0f, 1.0f); - ui_interface->addNumEntry("op3:opFreq", &fentry52, 1.0f, 0.0f, 2.0f, 0.01f); - ui_interface->addNumEntry("op3:opMode", &fentry51, 0.0f, 0.0f, 1.0f, 1.0f); - ui_interface->addNumEntry("op3:opRateScale", &fentry49, 0.0f, 0.0f, 10.0f, 1.0f); - ui_interface->addNumEntry("op4:egL1", &fentry81, 0.0f, 0.0f, 99.0f, 1.0f); - ui_interface->addNumEntry("op4:egL2", &fentry83, 90.0f, 0.0f, 99.0f, 1.0f); - ui_interface->addNumEntry("op4:egL3", &fentry76, 90.0f, 0.0f, 99.0f, 1.0f); - ui_interface->addNumEntry("op4:egL4", &fentry78, 0.0f, 0.0f, 99.0f, 1.0f); - ui_interface->addNumEntry("op4:egR1", &fentry82, 90.0f, 0.0f, 99.0f, 1.0f); - ui_interface->addNumEntry("op4:egR2", &fentry84, 90.0f, 0.0f, 99.0f, 1.0f); - ui_interface->addNumEntry("op4:egR3", &fentry85, 90.0f, 0.0f, 99.0f, 1.0f); - ui_interface->addNumEntry("op4:egR4", &fentry79, 90.0f, 0.0f, 99.0f, 1.0f); - ui_interface->addNumEntry("op4:keyVelSens", &fentry77, 1.0f, 0.0f, 8.0f, 1.0f); - ui_interface->addNumEntry("op4:level", &fentry75, 95.0f, 0.0f, 99.0f, 1.0f); - ui_interface->addNumEntry("op4:opDetune", &fentry72, 1.0f, -10.0f, 10.0f, 1.0f); - ui_interface->addNumEntry("op4:opFreq", &fentry74, 1.0f, 0.0f, 2.0f, 0.01f); - ui_interface->addNumEntry("op4:opMode", &fentry73, 0.0f, 0.0f, 1.0f, 1.0f); - ui_interface->addNumEntry("op4:opRateScale", &fentry80, 0.0f, 0.0f, 10.0f, 1.0f); - ui_interface->addNumEntry("op5:egL1", &fentry67, 0.0f, 0.0f, 99.0f, 1.0f); - ui_interface->addNumEntry("op5:egL2", &fentry69, 90.0f, 0.0f, 99.0f, 1.0f); - ui_interface->addNumEntry("op5:egL3", &fentry62, 90.0f, 0.0f, 99.0f, 1.0f); - ui_interface->addNumEntry("op5:egL4", &fentry64, 0.0f, 0.0f, 99.0f, 1.0f); - ui_interface->addNumEntry("op5:egR1", &fentry68, 90.0f, 0.0f, 99.0f, 1.0f); - ui_interface->addNumEntry("op5:egR2", &fentry70, 90.0f, 0.0f, 99.0f, 1.0f); - ui_interface->addNumEntry("op5:egR3", &fentry71, 90.0f, 0.0f, 99.0f, 1.0f); - ui_interface->addNumEntry("op5:egR4", &fentry65, 90.0f, 0.0f, 99.0f, 1.0f); - ui_interface->addNumEntry("op5:keyVelSens", &fentry63, 1.0f, 0.0f, 8.0f, 1.0f); - ui_interface->addNumEntry("op5:level", &fentry61, 95.0f, 0.0f, 99.0f, 1.0f); - ui_interface->addNumEntry("op5:opDetune", &fentry58, 1.0f, -10.0f, 10.0f, 1.0f); - ui_interface->addNumEntry("op5:opFreq", &fentry60, 1.0f, 0.0f, 2.0f, 0.01f); - ui_interface->addNumEntry("op5:opMode", &fentry59, 0.0f, 0.0f, 1.0f, 1.0f); - ui_interface->addNumEntry("op5:opRateScale", &fentry66, 0.0f, 0.0f, 10.0f, 1.0f); + ui_interface->addNumEntry("op0:egL1", &fentry10, 0.0f, 0.0f, 99.0f, 1.0f); + ui_interface->addNumEntry("op0:egL2", &fentry12, 90.0f, 0.0f, 99.0f, 1.0f); + ui_interface->addNumEntry("op0:egL3", &fentry2, 90.0f, 0.0f, 99.0f, 1.0f); + ui_interface->addNumEntry("op0:egL4", &fentry4, 0.0f, 0.0f, 99.0f, 1.0f); + ui_interface->addNumEntry("op0:egR1", &fentry11, 90.0f, 0.0f, 99.0f, 1.0f); + ui_interface->addNumEntry("op0:egR2", &fentry13, 90.0f, 0.0f, 99.0f, 1.0f); + ui_interface->addNumEntry("op0:egR3", &fentry14, 90.0f, 0.0f, 99.0f, 1.0f); + ui_interface->addNumEntry("op0:egR4", &fentry5, 90.0f, 0.0f, 99.0f, 1.0f); + ui_interface->addNumEntry("op0:keyVelSens", &fentry3, 1.0f, 0.0f, 8.0f, 1.0f); + ui_interface->addNumEntry("op0:level", &fentry1, 95.0f, 0.0f, 99.0f, 1.0f); + ui_interface->addNumEntry("op0:opDetune", &fentry7, 1.0f, -10.0f, 10.0f, 1.0f); + ui_interface->addNumEntry("op0:opFreq", &fentry9, 1.0f, 0.0f, 2.0f, 0.01f); + ui_interface->addNumEntry("op0:opMode", &fentry8, 0.0f, 0.0f, 1.0f, 1.0f); + ui_interface->addNumEntry("op0:opRateScale", &fentry6, 0.0f, 0.0f, 10.0f, 1.0f); + ui_interface->addNumEntry("op1:egL1", &fentry24, 0.0f, 0.0f, 99.0f, 1.0f); + ui_interface->addNumEntry("op1:egL2", &fentry26, 90.0f, 0.0f, 99.0f, 1.0f); + ui_interface->addNumEntry("op1:egL3", &fentry16, 90.0f, 0.0f, 99.0f, 1.0f); + ui_interface->addNumEntry("op1:egL4", &fentry18, 0.0f, 0.0f, 99.0f, 1.0f); + ui_interface->addNumEntry("op1:egR1", &fentry25, 90.0f, 0.0f, 99.0f, 1.0f); + ui_interface->addNumEntry("op1:egR2", &fentry27, 90.0f, 0.0f, 99.0f, 1.0f); + ui_interface->addNumEntry("op1:egR3", &fentry28, 90.0f, 0.0f, 99.0f, 1.0f); + ui_interface->addNumEntry("op1:egR4", &fentry19, 90.0f, 0.0f, 99.0f, 1.0f); + ui_interface->addNumEntry("op1:keyVelSens", &fentry17, 1.0f, 0.0f, 8.0f, 1.0f); + ui_interface->addNumEntry("op1:level", &fentry15, 95.0f, 0.0f, 99.0f, 1.0f); + ui_interface->addNumEntry("op1:opDetune", &fentry21, 1.0f, -10.0f, 10.0f, 1.0f); + ui_interface->addNumEntry("op1:opFreq", &fentry23, 1.0f, 0.0f, 2.0f, 0.01f); + ui_interface->addNumEntry("op1:opMode", &fentry22, 0.0f, 0.0f, 1.0f, 1.0f); + ui_interface->addNumEntry("op1:opRateScale", &fentry20, 0.0f, 0.0f, 10.0f, 1.0f); + ui_interface->addNumEntry("op2:egL1", &fentry38, 0.0f, 0.0f, 99.0f, 1.0f); + ui_interface->addNumEntry("op2:egL2", &fentry40, 90.0f, 0.0f, 99.0f, 1.0f); + ui_interface->addNumEntry("op2:egL3", &fentry30, 90.0f, 0.0f, 99.0f, 1.0f); + ui_interface->addNumEntry("op2:egL4", &fentry32, 0.0f, 0.0f, 99.0f, 1.0f); + ui_interface->addNumEntry("op2:egR1", &fentry39, 90.0f, 0.0f, 99.0f, 1.0f); + ui_interface->addNumEntry("op2:egR2", &fentry41, 90.0f, 0.0f, 99.0f, 1.0f); + ui_interface->addNumEntry("op2:egR3", &fentry42, 90.0f, 0.0f, 99.0f, 1.0f); + ui_interface->addNumEntry("op2:egR4", &fentry33, 90.0f, 0.0f, 99.0f, 1.0f); + ui_interface->addNumEntry("op2:keyVelSens", &fentry31, 1.0f, 0.0f, 8.0f, 1.0f); + ui_interface->addNumEntry("op2:level", &fentry29, 95.0f, 0.0f, 99.0f, 1.0f); + ui_interface->addNumEntry("op2:opDetune", &fentry35, 1.0f, -10.0f, 10.0f, 1.0f); + ui_interface->addNumEntry("op2:opFreq", &fentry37, 1.0f, 0.0f, 2.0f, 0.01f); + ui_interface->addNumEntry("op2:opMode", &fentry36, 0.0f, 0.0f, 1.0f, 1.0f); + ui_interface->addNumEntry("op2:opRateScale", &fentry34, 0.0f, 0.0f, 10.0f, 1.0f); + ui_interface->addNumEntry("op3:egL1", &fentry52, 0.0f, 0.0f, 99.0f, 1.0f); + ui_interface->addNumEntry("op3:egL2", &fentry54, 90.0f, 0.0f, 99.0f, 1.0f); + ui_interface->addNumEntry("op3:egL3", &fentry44, 90.0f, 0.0f, 99.0f, 1.0f); + ui_interface->addNumEntry("op3:egL4", &fentry46, 0.0f, 0.0f, 99.0f, 1.0f); + ui_interface->addNumEntry("op3:egR1", &fentry53, 90.0f, 0.0f, 99.0f, 1.0f); + ui_interface->addNumEntry("op3:egR2", &fentry55, 90.0f, 0.0f, 99.0f, 1.0f); + ui_interface->addNumEntry("op3:egR3", &fentry56, 90.0f, 0.0f, 99.0f, 1.0f); + ui_interface->addNumEntry("op3:egR4", &fentry47, 90.0f, 0.0f, 99.0f, 1.0f); + ui_interface->addNumEntry("op3:keyVelSens", &fentry45, 1.0f, 0.0f, 8.0f, 1.0f); + ui_interface->addNumEntry("op3:level", &fentry43, 95.0f, 0.0f, 99.0f, 1.0f); + ui_interface->addNumEntry("op3:opDetune", &fentry49, 1.0f, -10.0f, 10.0f, 1.0f); + ui_interface->addNumEntry("op3:opFreq", &fentry51, 1.0f, 0.0f, 2.0f, 0.01f); + ui_interface->addNumEntry("op3:opMode", &fentry50, 0.0f, 0.0f, 1.0f, 1.0f); + ui_interface->addNumEntry("op3:opRateScale", &fentry48, 0.0f, 0.0f, 10.0f, 1.0f); + ui_interface->addNumEntry("op4:egL1", &fentry66, 0.0f, 0.0f, 99.0f, 1.0f); + ui_interface->addNumEntry("op4:egL2", &fentry68, 90.0f, 0.0f, 99.0f, 1.0f); + ui_interface->addNumEntry("op4:egL3", &fentry58, 90.0f, 0.0f, 99.0f, 1.0f); + ui_interface->addNumEntry("op4:egL4", &fentry60, 0.0f, 0.0f, 99.0f, 1.0f); + ui_interface->addNumEntry("op4:egR1", &fentry67, 90.0f, 0.0f, 99.0f, 1.0f); + ui_interface->addNumEntry("op4:egR2", &fentry69, 90.0f, 0.0f, 99.0f, 1.0f); + ui_interface->addNumEntry("op4:egR3", &fentry70, 90.0f, 0.0f, 99.0f, 1.0f); + ui_interface->addNumEntry("op4:egR4", &fentry61, 90.0f, 0.0f, 99.0f, 1.0f); + ui_interface->addNumEntry("op4:keyVelSens", &fentry59, 1.0f, 0.0f, 8.0f, 1.0f); + ui_interface->addNumEntry("op4:level", &fentry57, 95.0f, 0.0f, 99.0f, 1.0f); + ui_interface->addNumEntry("op4:opDetune", &fentry63, 1.0f, -10.0f, 10.0f, 1.0f); + ui_interface->addNumEntry("op4:opFreq", &fentry65, 1.0f, 0.0f, 2.0f, 0.01f); + ui_interface->addNumEntry("op4:opMode", &fentry64, 0.0f, 0.0f, 1.0f, 1.0f); + ui_interface->addNumEntry("op4:opRateScale", &fentry62, 0.0f, 0.0f, 10.0f, 1.0f); + ui_interface->addNumEntry("op5:egL1", &fentry80, 0.0f, 0.0f, 99.0f, 1.0f); + ui_interface->addNumEntry("op5:egL2", &fentry82, 90.0f, 0.0f, 99.0f, 1.0f); + ui_interface->addNumEntry("op5:egL3", &fentry72, 90.0f, 0.0f, 99.0f, 1.0f); + ui_interface->addNumEntry("op5:egL4", &fentry74, 0.0f, 0.0f, 99.0f, 1.0f); + ui_interface->addNumEntry("op5:egR1", &fentry81, 90.0f, 0.0f, 99.0f, 1.0f); + ui_interface->addNumEntry("op5:egR2", &fentry83, 90.0f, 0.0f, 99.0f, 1.0f); + ui_interface->addNumEntry("op5:egR3", &fentry84, 90.0f, 0.0f, 99.0f, 1.0f); + ui_interface->addNumEntry("op5:egR4", &fentry75, 90.0f, 0.0f, 99.0f, 1.0f); + ui_interface->addNumEntry("op5:keyVelSens", &fentry73, 1.0f, 0.0f, 8.0f, 1.0f); + ui_interface->addNumEntry("op5:level", &fentry71, 95.0f, 0.0f, 99.0f, 1.0f); + ui_interface->addNumEntry("op5:opDetune", &fentry77, 1.0f, -10.0f, 10.0f, 1.0f); + ui_interface->addNumEntry("op5:opFreq", &fentry79, 1.0f, 0.0f, 2.0f, 0.01f); + ui_interface->addNumEntry("op5:opMode", &fentry78, 0.0f, 0.0f, 1.0f, 1.0f); + ui_interface->addNumEntry("op5:opRateScale", &fentry76, 0.0f, 0.0f, 10.0f, 1.0f); ui_interface->closeBox(); } virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { //zone1 //zone2 int iSlow0 = int(float(fentry0)); - int iSlow1 = (float((iSlow0 == 1)) != 0.0f); + int iSlow1 = (float((iSlow0 == 0)) != 0.0f); float fSlow2 = float(fbutton0); int iSlow3 = (fSlow2 > 0.0f); int iSlow4 = int((iSlow3 > 0)); float fSlow5 = float(fentry1); float fSlow6 = float(fentry2); - float fSlow7 = float(fentry3); - float fSlow8 = float(fslider0); - float fSlow9 = ((0.0012626262626262627f * (fSlow7 * fSlow8)) + (0.010101010101010102f * (1.0f - (0.125f * fSlow7)))); + float fSlow7 = float(fslider0); + float fSlow8 = float(fentry3); + float fSlow9 = ((0.0012626262626262627f * (fSlow7 * fSlow8)) + (0.010101010101010102f * (1.0f - (0.125f * fSlow8)))); float fSlow10 = ((fSlow5 * fSlow6) * fSlow9); float fSlow11 = float(fentry4); float fSlow12 = ((fSlow5 * fSlow11) * fSlow9); int iSlow13 = int((fSlow10 <= fSlow12)); float fSlow14 = float(fentry9); float fSlow15 = float(fslider1); - float fSlow16 = ((0.25f * float(fentry7)) + ((int(float(fentry8)))?fSlow14:(fSlow14 * fSlow15))); + float fSlow16 = ((0.25f * float(fentry7)) + ((int(float(fentry8)))?fSlow14:(fSlow15 * fSlow14))); float fSlow17 = ((0.057142857142857148f * float(fentry6)) * ((17.312340490667559f * logf((0.0022727272727272726f * fSlow16))) + 48.0f)); float fSlow18 = (0.007874015748031496f * (127.0f - min((float)99, (float(fentry5) + fSlow17)))); float fSlow19 = powf((0.014705882352941176f * (float((fSlow10 >= 30.0f)) * min((fSlow10 + -30.0f), (float)68))),1.8f); @@ -948,7 +1003,7 @@ class synth_dx7 : public dsp { float fSlow22 = powf((0.010101010101010102f * min((float)99, fSlow12)),0.69999999999999996f); float fSlow23 = max(0.001f, fabsf((((iSlow13)?max(0.0030000000000000001f, (38.0f * faustpower<12>(fSlow18))):max(0.0080000000000000002f, (318.0f * powf(fSlow18,12.6f)))) * (((iSlow13)?fSlow19:fSlow20) - ((iSlow13)?fSlow21:fSlow22))))); float fSlow24 = (fConst0 * fSlow23); - int iSlow25 = (float((iSlow0 == 0)) != 0.0f); + int iSlow25 = (float((iSlow0 == 1)) != 0.0f); int iSlow26 = int(iSlow3); float fSlow27 = float(iSlow3); int iSlow28 = int(((fSlow2 == 0.0f) > 0)); @@ -973,136 +1028,136 @@ class synth_dx7 : public dsp { float fSlow47 = (fConst0 * fSlow42); float fSlow48 = (fConst0 * fSlow35); float fSlow49 = (fSlow5 * fSlow9); - float fSlow50 = (fConst1 * (fSlow29 - fSlow11)); - float fSlow51 = (0 - ((fSlow5 * (fSlow29 - fSlow36)) * fSlow9)); + float fSlow50 = (fConst1 * (0 - (fSlow49 * (fSlow11 - fSlow29)))); + float fSlow51 = (0 - (fSlow49 * (fSlow29 - fSlow36))); float fSlow52 = (0 - (fConst0 * (fSlow35 - fSlow42))); - float fSlow53 = (0 - ((fSlow5 * (fSlow36 - fSlow6)) * fSlow9)); + float fSlow53 = (fSlow6 - fSlow36); float fSlow54 = (0 - (fConst0 * (fSlow42 - fSlow45))); float fSlow55 = (fConst1 * fSlow16); - float fSlow56 = (1825.3162113323297f * float(fentry15)); - float fSlow57 = float(fentry18); - float fSlow58 = ((0.25f * float(fentry16)) + ((int(float(fentry17)))?fSlow57:(fSlow15 * fSlow57))); - float fSlow59 = (fConst1 * fSlow58); - float fSlow60 = float(fentry19); - float fSlow61 = float(fentry20); - float fSlow62 = float(fentry21); - float fSlow63 = ((0.0012626262626262627f * (fSlow8 * fSlow62)) + (0.010101010101010102f * (1.0f - (0.125f * fSlow62)))); - float fSlow64 = ((fSlow60 * fSlow61) * fSlow63); - float fSlow65 = float(fentry22); - float fSlow66 = ((fSlow60 * fSlow65) * fSlow63); - int iSlow67 = int((fSlow64 <= fSlow66)); - float fSlow68 = ((0.057142857142857148f * float(fentry24)) * ((17.312340490667559f * logf((0.0022727272727272726f * fSlow58))) + 48.0f)); - float fSlow69 = (0.007874015748031496f * (127.0f - min((float)99, (float(fentry23) + fSlow68)))); - float fSlow70 = powf((0.014705882352941176f * (float((fSlow64 >= 30.0f)) * min((fSlow64 + -30.0f), (float)68))),1.8f); - float fSlow71 = powf((0.010101010101010102f * min((float)99, fSlow64)),0.69999999999999996f); - float fSlow72 = powf((0.014705882352941176f * (float((fSlow66 >= 30.0f)) * min((fSlow66 + -30.0f), (float)68))),1.8f); - float fSlow73 = powf((0.010101010101010102f * min((float)99, fSlow66)),0.69999999999999996f); - float fSlow74 = max(0.001f, fabsf((((iSlow67)?max(0.0030000000000000001f, (38.0f * faustpower<12>(fSlow69))):max(0.0080000000000000002f, (318.0f * powf(fSlow69,12.6f)))) * (((iSlow67)?fSlow70:fSlow71) - ((iSlow67)?fSlow72:fSlow73))))); - float fSlow75 = (fConst0 * fSlow74); - float fSlow76 = float(fentry25); - float fSlow77 = ((fSlow60 * fSlow76) * fSlow63); - float fSlow78 = float(fentry26); - float fSlow79 = ((fSlow60 * fSlow78) * fSlow63); - int iSlow80 = int((fSlow77 > fSlow79)); - float fSlow81 = (0.007874015748031496f * (127.0f - min((float)99, (float(fentry27) + fSlow68)))); - float fSlow82 = powf((0.014705882352941176f * (float((fSlow77 >= 30.0f)) * min((fSlow77 + -30.0f), (float)68))),1.8f); - float fSlow83 = powf((0.010101010101010102f * min((float)99, fSlow77)),0.69999999999999996f); - float fSlow84 = powf((0.014705882352941176f * (float((fSlow79 >= 30.0f)) * min((fSlow79 + -30.0f), (float)68))),1.8f); - float fSlow85 = powf((0.010101010101010102f * min((float)99, fSlow79)),0.69999999999999996f); - int iSlow86 = int((fSlow79 > fSlow66)); - float fSlow87 = (0.007874015748031496f * (127.0f - min((float)99, (float(fentry28) + fSlow68)))); - float fSlow88 = max(0.001f, fabsf((((iSlow86)?max(0.0030000000000000001f, (38.0f * faustpower<12>(fSlow87))):max(0.0080000000000000002f, (318.0f * powf(fSlow87,12.6f)))) * (((iSlow86)?fSlow72:fSlow73) - ((iSlow86)?fSlow84:fSlow85))))); - float fSlow89 = (max(0.001f, fabsf((((iSlow80)?max(0.0030000000000000001f, (38.0f * faustpower<12>(fSlow81))):max(0.0080000000000000002f, (318.0f * powf(fSlow81,12.6f)))) * (((iSlow80)?fSlow82:fSlow83) - ((iSlow80)?fSlow84:fSlow85))))) + fSlow88); - int iSlow90 = int((fSlow64 > fSlow77)); - float fSlow91 = (0.007874015748031496f * (127.0f - min((float)99, (float(fentry29) + fSlow68)))); - float fSlow92 = (fSlow89 + max(0.001f, fabsf((((iSlow90)?max(0.0030000000000000001f, (38.0f * faustpower<12>(fSlow91))):max(0.0080000000000000002f, (318.0f * powf(fSlow91,12.6f)))) * (((iSlow90)?fSlow82:fSlow83) - ((iSlow90)?fSlow70:fSlow71)))))); - float fSlow93 = (fConst0 * fSlow92); - float fSlow94 = (fConst0 * fSlow89); - float fSlow95 = (fConst0 * fSlow88); - float fSlow96 = (fConst1 * (0 - ((fSlow60 * (fSlow65 - fSlow78)) * fSlow63))); - float fSlow97 = (fConst1 * (0 - ((fSlow60 * (fSlow78 - fSlow76)) * fSlow63))); - float fSlow98 = (fSlow89 - fSlow88); - float fSlow99 = (fSlow60 * fSlow63); - float fSlow100 = (fSlow61 - fSlow76); - float fSlow101 = (0 - (fConst0 * (fSlow89 - fSlow92))); + float fSlow56 = float(fentry15); + float fSlow57 = float(fentry16); + float fSlow58 = float(fentry17); + float fSlow59 = ((0.0012626262626262627f * (fSlow58 * fSlow7)) + (0.010101010101010102f * (1.0f - (0.125f * fSlow58)))); + float fSlow60 = ((fSlow56 * fSlow57) * fSlow59); + float fSlow61 = float(fentry18); + float fSlow62 = ((fSlow56 * fSlow61) * fSlow59); + int iSlow63 = int((fSlow60 <= fSlow62)); + float fSlow64 = float(fentry23); + float fSlow65 = ((0.25f * float(fentry21)) + ((int(float(fentry22)))?fSlow64:(fSlow64 * fSlow15))); + float fSlow66 = ((0.057142857142857148f * float(fentry20)) * ((17.312340490667559f * logf((0.0022727272727272726f * fSlow65))) + 48.0f)); + float fSlow67 = (0.007874015748031496f * (127.0f - min((float)99, (float(fentry19) + fSlow66)))); + float fSlow68 = powf((0.014705882352941176f * (float((fSlow60 >= 30.0f)) * min((fSlow60 + -30.0f), (float)68))),1.8f); + float fSlow69 = powf((0.010101010101010102f * min((float)99, fSlow60)),0.69999999999999996f); + float fSlow70 = powf((0.014705882352941176f * (float((fSlow62 >= 30.0f)) * min((fSlow62 + -30.0f), (float)68))),1.8f); + float fSlow71 = powf((0.010101010101010102f * min((float)99, fSlow62)),0.69999999999999996f); + float fSlow72 = max(0.001f, fabsf((((iSlow63)?max(0.0030000000000000001f, (38.0f * faustpower<12>(fSlow67))):max(0.0080000000000000002f, (318.0f * powf(fSlow67,12.6f)))) * (((iSlow63)?fSlow68:fSlow69) - ((iSlow63)?fSlow70:fSlow71))))); + float fSlow73 = (fConst0 * fSlow72); + float fSlow74 = float(fentry24); + float fSlow75 = ((fSlow56 * fSlow74) * fSlow59); + int iSlow76 = int((fSlow75 > fSlow62)); + float fSlow77 = (0.007874015748031496f * (127.0f - min((float)99, (float(fentry25) + fSlow66)))); + float fSlow78 = powf((0.014705882352941176f * (float((fSlow75 >= 30.0f)) * min((fSlow75 + -30.0f), (float)68))),1.8f); + float fSlow79 = powf((0.010101010101010102f * min((float)99, fSlow75)),0.69999999999999996f); + float fSlow80 = max(0.001f, fabsf((((iSlow76)?max(0.0030000000000000001f, (38.0f * faustpower<12>(fSlow77))):max(0.0080000000000000002f, (318.0f * powf(fSlow77,12.6f)))) * (((iSlow76)?fSlow70:fSlow71) - ((iSlow76)?fSlow78:fSlow79))))); + float fSlow81 = float(fentry26); + float fSlow82 = ((fSlow56 * fSlow81) * fSlow59); + int iSlow83 = int((fSlow82 > fSlow75)); + float fSlow84 = (0.007874015748031496f * (127.0f - min((float)99, (float(fentry27) + fSlow66)))); + float fSlow85 = powf((0.014705882352941176f * (float((fSlow82 >= 30.0f)) * min((fSlow82 + -30.0f), (float)68))),1.8f); + float fSlow86 = powf((0.010101010101010102f * min((float)99, fSlow82)),0.69999999999999996f); + float fSlow87 = (fSlow80 + max(0.001f, fabsf((((iSlow83)?max(0.0030000000000000001f, (38.0f * faustpower<12>(fSlow84))):max(0.0080000000000000002f, (318.0f * powf(fSlow84,12.6f)))) * (((iSlow83)?fSlow85:fSlow86) - ((iSlow83)?fSlow78:fSlow79)))))); + int iSlow88 = int((fSlow60 > fSlow82)); + float fSlow89 = (0.007874015748031496f * (127.0f - min((float)99, (float(fentry28) + fSlow66)))); + float fSlow90 = (fSlow87 + max(0.001f, fabsf((((iSlow88)?max(0.0030000000000000001f, (38.0f * faustpower<12>(fSlow89))):max(0.0080000000000000002f, (318.0f * powf(fSlow89,12.6f)))) * (((iSlow88)?fSlow85:fSlow86) - ((iSlow88)?fSlow68:fSlow69)))))); + float fSlow91 = (fConst0 * fSlow90); + float fSlow92 = (fConst0 * fSlow87); + float fSlow93 = (fConst0 * fSlow80); + float fSlow94 = (fSlow56 * fSlow59); + float fSlow95 = (fConst1 * (0 - (fSlow94 * (fSlow61 - fSlow74)))); + float fSlow96 = (0 - (fSlow94 * (fSlow74 - fSlow81))); + float fSlow97 = (0 - (fConst0 * (fSlow80 - fSlow87))); + float fSlow98 = (fSlow57 - fSlow81); + float fSlow99 = (0 - (fConst0 * (fSlow87 - fSlow90))); + float fSlow100 = (fConst1 * fSlow65); + float fSlow101 = float(fentry29); float fSlow102 = float(fentry30); float fSlow103 = float(fentry31); - float fSlow104 = float(fentry32); - float fSlow105 = ((0.0012626262626262627f * (fSlow8 * fSlow104)) + (0.010101010101010102f * (1.0f - (0.125f * fSlow104)))); - float fSlow106 = ((fSlow102 * fSlow103) * fSlow105); - float fSlow107 = float(fentry33); - float fSlow108 = ((fSlow102 * fSlow107) * fSlow105); - int iSlow109 = int((fSlow106 <= fSlow108)); - float fSlow110 = float(fentry38); - float fSlow111 = ((0.25f * float(fentry36)) + ((int(float(fentry37)))?fSlow110:(fSlow15 * fSlow110))); - float fSlow112 = ((0.057142857142857148f * float(fentry35)) * ((17.312340490667559f * logf((0.0022727272727272726f * fSlow111))) + 48.0f)); - float fSlow113 = (0.007874015748031496f * (127.0f - min((float)99, (float(fentry34) + fSlow112)))); - float fSlow114 = powf((0.014705882352941176f * (float((fSlow106 >= 30.0f)) * min((fSlow106 + -30.0f), (float)68))),1.8f); - float fSlow115 = powf((0.010101010101010102f * min((float)99, fSlow106)),0.69999999999999996f); - float fSlow116 = powf((0.014705882352941176f * (float((fSlow108 >= 30.0f)) * min((fSlow108 + -30.0f), (float)68))),1.8f); - float fSlow117 = powf((0.010101010101010102f * min((float)99, fSlow108)),0.69999999999999996f); - float fSlow118 = max(0.001f, fabsf((((iSlow109)?max(0.0030000000000000001f, (38.0f * faustpower<12>(fSlow113))):max(0.0080000000000000002f, (318.0f * powf(fSlow113,12.6f)))) * (((iSlow109)?fSlow114:fSlow115) - ((iSlow109)?fSlow116:fSlow117))))); - float fSlow119 = (fConst0 * fSlow118); - float fSlow120 = float(fentry39); - float fSlow121 = ((fSlow102 * fSlow120) * fSlow105); - int iSlow122 = int((fSlow121 > fSlow108)); - float fSlow123 = (0.007874015748031496f * (127.0f - min((float)99, (float(fentry40) + fSlow112)))); - float fSlow124 = powf((0.014705882352941176f * (float((fSlow121 >= 30.0f)) * min((fSlow121 + -30.0f), (float)68))),1.8f); - float fSlow125 = powf((0.010101010101010102f * min((float)99, fSlow121)),0.69999999999999996f); - float fSlow126 = max(0.001f, fabsf((((iSlow122)?max(0.0030000000000000001f, (38.0f * faustpower<12>(fSlow123))):max(0.0080000000000000002f, (318.0f * powf(fSlow123,12.6f)))) * (((iSlow122)?fSlow116:fSlow117) - ((iSlow122)?fSlow124:fSlow125))))); - float fSlow127 = float(fentry41); - float fSlow128 = ((fSlow102 * fSlow127) * fSlow105); - int iSlow129 = int((fSlow128 > fSlow121)); - float fSlow130 = (0.007874015748031496f * (127.0f - min((float)99, (float(fentry42) + fSlow112)))); - float fSlow131 = powf((0.014705882352941176f * (float((fSlow128 >= 30.0f)) * min((fSlow128 + -30.0f), (float)68))),1.8f); - float fSlow132 = powf((0.010101010101010102f * min((float)99, fSlow128)),0.69999999999999996f); - float fSlow133 = (fSlow126 + max(0.001f, fabsf((((iSlow129)?max(0.0030000000000000001f, (38.0f * faustpower<12>(fSlow130))):max(0.0080000000000000002f, (318.0f * powf(fSlow130,12.6f)))) * (((iSlow129)?fSlow131:fSlow132) - ((iSlow129)?fSlow124:fSlow125)))))); - int iSlow134 = int((fSlow106 > fSlow128)); - float fSlow135 = (0.007874015748031496f * (127.0f - min((float)99, (float(fentry43) + fSlow112)))); - float fSlow136 = (fSlow133 + max(0.001f, fabsf((((iSlow134)?max(0.0030000000000000001f, (38.0f * faustpower<12>(fSlow135))):max(0.0080000000000000002f, (318.0f * powf(fSlow135,12.6f)))) * (((iSlow134)?fSlow131:fSlow132) - ((iSlow134)?fSlow114:fSlow115)))))); - float fSlow137 = (fConst0 * fSlow136); - float fSlow138 = (fConst0 * fSlow133); - float fSlow139 = (fConst0 * fSlow126); - float fSlow140 = (fSlow102 * fSlow105); - float fSlow141 = (fConst1 * (0 - (fSlow140 * (fSlow107 - fSlow120)))); - float fSlow142 = (0 - (fSlow140 * (fSlow120 - fSlow127))); - float fSlow143 = (0 - (fConst0 * (fSlow126 - fSlow133))); - float fSlow144 = (fSlow103 - fSlow127); - float fSlow145 = (0 - (fConst0 * (fSlow133 - fSlow136))); - float fSlow146 = float(fentry44); - float fSlow147 = float(fentry45); - float fSlow148 = float(fentry46); - float fSlow149 = ((0.0012626262626262627f * (fSlow8 * fSlow148)) + (0.010101010101010102f * (1.0f - (0.125f * fSlow148)))); + float fSlow104 = ((0.0012626262626262627f * (fSlow7 * fSlow103)) + (0.010101010101010102f * (1.0f - (0.125f * fSlow103)))); + float fSlow105 = ((fSlow101 * fSlow102) * fSlow104); + float fSlow106 = float(fentry32); + float fSlow107 = ((fSlow101 * fSlow106) * fSlow104); + int iSlow108 = int((fSlow105 <= fSlow107)); + float fSlow109 = float(fentry37); + float fSlow110 = ((0.25f * float(fentry35)) + ((int(float(fentry36)))?fSlow109:(fSlow15 * fSlow109))); + float fSlow111 = ((0.057142857142857148f * float(fentry34)) * ((17.312340490667559f * logf((0.0022727272727272726f * fSlow110))) + 48.0f)); + float fSlow112 = (0.007874015748031496f * (127.0f - min((float)99, (float(fentry33) + fSlow111)))); + float fSlow113 = powf((0.014705882352941176f * (float((fSlow105 >= 30.0f)) * min((fSlow105 + -30.0f), (float)68))),1.8f); + float fSlow114 = powf((0.010101010101010102f * min((float)99, fSlow105)),0.69999999999999996f); + float fSlow115 = powf((0.014705882352941176f * (float((fSlow107 >= 30.0f)) * min((fSlow107 + -30.0f), (float)68))),1.8f); + float fSlow116 = powf((0.010101010101010102f * min((float)99, fSlow107)),0.69999999999999996f); + float fSlow117 = max(0.001f, fabsf((((iSlow108)?max(0.0030000000000000001f, (38.0f * faustpower<12>(fSlow112))):max(0.0080000000000000002f, (318.0f * powf(fSlow112,12.6f)))) * (((iSlow108)?fSlow113:fSlow114) - ((iSlow108)?fSlow115:fSlow116))))); + float fSlow118 = (fConst0 * fSlow117); + float fSlow119 = float(fentry38); + float fSlow120 = ((fSlow101 * fSlow119) * fSlow104); + int iSlow121 = int((fSlow120 > fSlow107)); + float fSlow122 = (0.007874015748031496f * (127.0f - min((float)99, (float(fentry39) + fSlow111)))); + float fSlow123 = powf((0.014705882352941176f * (float((fSlow120 >= 30.0f)) * min((fSlow120 + -30.0f), (float)68))),1.8f); + float fSlow124 = powf((0.010101010101010102f * min((float)99, fSlow120)),0.69999999999999996f); + float fSlow125 = max(0.001f, fabsf((((iSlow121)?max(0.0030000000000000001f, (38.0f * faustpower<12>(fSlow122))):max(0.0080000000000000002f, (318.0f * powf(fSlow122,12.6f)))) * (((iSlow121)?fSlow115:fSlow116) - ((iSlow121)?fSlow123:fSlow124))))); + float fSlow126 = float(fentry40); + float fSlow127 = ((fSlow101 * fSlow126) * fSlow104); + int iSlow128 = int((fSlow127 > fSlow120)); + float fSlow129 = (0.007874015748031496f * (127.0f - min((float)99, (float(fentry41) + fSlow111)))); + float fSlow130 = powf((0.014705882352941176f * (float((fSlow127 >= 30.0f)) * min((fSlow127 + -30.0f), (float)68))),1.8f); + float fSlow131 = powf((0.010101010101010102f * min((float)99, fSlow127)),0.69999999999999996f); + float fSlow132 = (fSlow125 + max(0.001f, fabsf((((iSlow128)?max(0.0030000000000000001f, (38.0f * faustpower<12>(fSlow129))):max(0.0080000000000000002f, (318.0f * powf(fSlow129,12.6f)))) * (((iSlow128)?fSlow130:fSlow131) - ((iSlow128)?fSlow123:fSlow124)))))); + int iSlow133 = int((fSlow105 > fSlow127)); + float fSlow134 = (0.007874015748031496f * (127.0f - min((float)99, (float(fentry42) + fSlow111)))); + float fSlow135 = (fSlow132 + max(0.001f, fabsf((((iSlow133)?max(0.0030000000000000001f, (38.0f * faustpower<12>(fSlow134))):max(0.0080000000000000002f, (318.0f * powf(fSlow134,12.6f)))) * (((iSlow133)?fSlow130:fSlow131) - ((iSlow133)?fSlow113:fSlow114)))))); + float fSlow136 = (fConst0 * fSlow135); + float fSlow137 = (fConst0 * fSlow132); + float fSlow138 = (fConst0 * fSlow125); + float fSlow139 = (fSlow101 * fSlow104); + float fSlow140 = (fConst1 * (0 - (fSlow139 * (fSlow106 - fSlow119)))); + float fSlow141 = (0 - (fSlow139 * (fSlow119 - fSlow126))); + float fSlow142 = (0 - (fConst0 * (fSlow125 - fSlow132))); + float fSlow143 = (0 - (fSlow139 * (fSlow126 - fSlow102))); + float fSlow144 = (0 - (fConst0 * (fSlow132 - fSlow135))); + float fSlow145 = (fConst1 * fSlow110); + float fSlow146 = float(fentry43); + float fSlow147 = float(fentry44); + float fSlow148 = float(fentry45); + float fSlow149 = ((0.0012626262626262627f * (fSlow7 * fSlow148)) + (0.010101010101010102f * (1.0f - (0.125f * fSlow148)))); float fSlow150 = ((fSlow146 * fSlow147) * fSlow149); - float fSlow151 = float(fentry47); + float fSlow151 = float(fentry46); float fSlow152 = ((fSlow146 * fSlow151) * fSlow149); int iSlow153 = int((fSlow150 <= fSlow152)); - float fSlow154 = float(fentry52); - float fSlow155 = ((0.25f * float(fentry50)) + ((int(float(fentry51)))?fSlow154:(fSlow15 * fSlow154))); - float fSlow156 = ((0.057142857142857148f * float(fentry49)) * ((17.312340490667559f * logf((0.0022727272727272726f * fSlow155))) + 48.0f)); - float fSlow157 = (0.007874015748031496f * (127.0f - min((float)99, (float(fentry48) + fSlow156)))); + float fSlow154 = float(fentry51); + float fSlow155 = ((0.25f * float(fentry49)) + ((int(float(fentry50)))?fSlow154:(fSlow15 * fSlow154))); + float fSlow156 = ((0.057142857142857148f * float(fentry48)) * ((17.312340490667559f * logf((0.0022727272727272726f * fSlow155))) + 48.0f)); + float fSlow157 = (0.007874015748031496f * (127.0f - min((float)99, (float(fentry47) + fSlow156)))); float fSlow158 = powf((0.014705882352941176f * (float((fSlow150 >= 30.0f)) * min((fSlow150 + -30.0f), (float)68))),1.8f); float fSlow159 = powf((0.010101010101010102f * min((float)99, fSlow150)),0.69999999999999996f); float fSlow160 = powf((0.014705882352941176f * (float((fSlow152 >= 30.0f)) * min((fSlow152 + -30.0f), (float)68))),1.8f); float fSlow161 = powf((0.010101010101010102f * min((float)99, fSlow152)),0.69999999999999996f); float fSlow162 = max(0.001f, fabsf((((iSlow153)?max(0.0030000000000000001f, (38.0f * faustpower<12>(fSlow157))):max(0.0080000000000000002f, (318.0f * powf(fSlow157,12.6f)))) * (((iSlow153)?fSlow158:fSlow159) - ((iSlow153)?fSlow160:fSlow161))))); float fSlow163 = (fConst0 * fSlow162); - float fSlow164 = float(fentry53); + float fSlow164 = float(fentry52); float fSlow165 = ((fSlow146 * fSlow164) * fSlow149); int iSlow166 = int((fSlow165 > fSlow152)); - float fSlow167 = (0.007874015748031496f * (127.0f - min((float)99, (float(fentry54) + fSlow156)))); + float fSlow167 = (0.007874015748031496f * (127.0f - min((float)99, (float(fentry53) + fSlow156)))); float fSlow168 = powf((0.014705882352941176f * (float((fSlow165 >= 30.0f)) * min((fSlow165 + -30.0f), (float)68))),1.8f); float fSlow169 = powf((0.010101010101010102f * min((float)99, fSlow165)),0.69999999999999996f); float fSlow170 = max(0.001f, fabsf((((iSlow166)?max(0.0030000000000000001f, (38.0f * faustpower<12>(fSlow167))):max(0.0080000000000000002f, (318.0f * powf(fSlow167,12.6f)))) * (((iSlow166)?fSlow160:fSlow161) - ((iSlow166)?fSlow168:fSlow169))))); - float fSlow171 = float(fentry55); + float fSlow171 = float(fentry54); float fSlow172 = ((fSlow146 * fSlow171) * fSlow149); int iSlow173 = int((fSlow172 > fSlow165)); - float fSlow174 = (0.007874015748031496f * (127.0f - min((float)99, (float(fentry56) + fSlow156)))); + float fSlow174 = (0.007874015748031496f * (127.0f - min((float)99, (float(fentry55) + fSlow156)))); float fSlow175 = powf((0.014705882352941176f * (float((fSlow172 >= 30.0f)) * min((fSlow172 + -30.0f), (float)68))),1.8f); float fSlow176 = powf((0.010101010101010102f * min((float)99, fSlow172)),0.69999999999999996f); float fSlow177 = (fSlow170 + max(0.001f, fabsf((((iSlow173)?max(0.0030000000000000001f, (38.0f * faustpower<12>(fSlow174))):max(0.0080000000000000002f, (318.0f * powf(fSlow174,12.6f)))) * (((iSlow173)?fSlow175:fSlow176) - ((iSlow173)?fSlow168:fSlow169)))))); int iSlow178 = int((fSlow150 > fSlow172)); - float fSlow179 = (0.007874015748031496f * (127.0f - min((float)99, (float(fentry57) + fSlow156)))); + float fSlow179 = (0.007874015748031496f * (127.0f - min((float)99, (float(fentry56) + fSlow156)))); float fSlow180 = (fSlow177 + max(0.001f, fabsf((((iSlow178)?max(0.0030000000000000001f, (38.0f * faustpower<12>(fSlow179))):max(0.0080000000000000002f, (318.0f * powf(fSlow179,12.6f)))) * (((iSlow178)?fSlow175:fSlow176) - ((iSlow178)?fSlow158:fSlow159)))))); float fSlow181 = (fConst0 * fSlow180); float fSlow182 = (fConst0 * fSlow177); @@ -1113,178 +1168,176 @@ class synth_dx7 : public dsp { float fSlow187 = (0 - (fConst0 * (fSlow170 - fSlow177))); float fSlow188 = (fSlow147 - fSlow171); float fSlow189 = (0 - (fConst0 * (fSlow177 - fSlow180))); - float fSlow190 = float(fentry60); - float fSlow191 = ((0.25f * float(fentry58)) + ((int(float(fentry59)))?fSlow190:(fSlow15 * fSlow190))); - float fSlow192 = (fConst1 * fSlow191); - float fSlow193 = float(fentry61); - float fSlow194 = float(fentry62); - float fSlow195 = float(fentry63); - float fSlow196 = ((0.0012626262626262627f * (fSlow8 * fSlow195)) + (0.010101010101010102f * (1.0f - (0.125f * fSlow195)))); - float fSlow197 = ((fSlow193 * fSlow194) * fSlow196); - float fSlow198 = float(fentry64); - float fSlow199 = ((fSlow193 * fSlow198) * fSlow196); - int iSlow200 = int((fSlow197 <= fSlow199)); - float fSlow201 = ((0.057142857142857148f * float(fentry66)) * ((17.312340490667559f * logf((0.0022727272727272726f * fSlow191))) + 48.0f)); - float fSlow202 = (0.007874015748031496f * (127.0f - min((float)99, (float(fentry65) + fSlow201)))); - float fSlow203 = powf((0.014705882352941176f * (float((fSlow197 >= 30.0f)) * min((fSlow197 + -30.0f), (float)68))),1.8f); - float fSlow204 = powf((0.010101010101010102f * min((float)99, fSlow197)),0.69999999999999996f); - float fSlow205 = powf((0.014705882352941176f * (float((fSlow199 >= 30.0f)) * min((fSlow199 + -30.0f), (float)68))),1.8f); - float fSlow206 = powf((0.010101010101010102f * min((float)99, fSlow199)),0.69999999999999996f); - float fSlow207 = max(0.001f, fabsf((((iSlow200)?max(0.0030000000000000001f, (38.0f * faustpower<12>(fSlow202))):max(0.0080000000000000002f, (318.0f * powf(fSlow202,12.6f)))) * (((iSlow200)?fSlow203:fSlow204) - ((iSlow200)?fSlow205:fSlow206))))); + float fSlow190 = (fConst1 * fSlow155); + float fSlow191 = float(fentry57); + float fSlow192 = float(fentry58); + float fSlow193 = float(fentry59); + float fSlow194 = ((0.0012626262626262627f * (fSlow7 * fSlow193)) + (0.010101010101010102f * (1.0f - (0.125f * fSlow193)))); + float fSlow195 = ((fSlow191 * fSlow192) * fSlow194); + float fSlow196 = float(fentry60); + float fSlow197 = ((fSlow191 * fSlow196) * fSlow194); + int iSlow198 = int((fSlow195 <= fSlow197)); + float fSlow199 = float(fentry65); + float fSlow200 = ((0.25f * float(fentry63)) + ((int(float(fentry64)))?fSlow199:(fSlow15 * fSlow199))); + float fSlow201 = ((0.057142857142857148f * float(fentry62)) * ((17.312340490667559f * logf((0.0022727272727272726f * fSlow200))) + 48.0f)); + float fSlow202 = (0.007874015748031496f * (127.0f - min((float)99, (float(fentry61) + fSlow201)))); + float fSlow203 = powf((0.014705882352941176f * (float((fSlow195 >= 30.0f)) * min((fSlow195 + -30.0f), (float)68))),1.8f); + float fSlow204 = powf((0.010101010101010102f * min((float)99, fSlow195)),0.69999999999999996f); + float fSlow205 = powf((0.014705882352941176f * (float((fSlow197 >= 30.0f)) * min((fSlow197 + -30.0f), (float)68))),1.8f); + float fSlow206 = powf((0.010101010101010102f * min((float)99, fSlow197)),0.69999999999999996f); + float fSlow207 = max(0.001f, fabsf((((iSlow198)?max(0.0030000000000000001f, (38.0f * faustpower<12>(fSlow202))):max(0.0080000000000000002f, (318.0f * powf(fSlow202,12.6f)))) * (((iSlow198)?fSlow203:fSlow204) - ((iSlow198)?fSlow205:fSlow206))))); float fSlow208 = (fConst0 * fSlow207); - float fSlow209 = float(fentry67); - float fSlow210 = ((fSlow193 * fSlow209) * fSlow196); - int iSlow211 = int((fSlow210 > fSlow199)); - float fSlow212 = (0.007874015748031496f * (127.0f - min((float)99, (float(fentry68) + fSlow201)))); + float fSlow209 = float(fentry66); + float fSlow210 = ((fSlow191 * fSlow209) * fSlow194); + int iSlow211 = int((fSlow210 > fSlow197)); + float fSlow212 = (0.007874015748031496f * (127.0f - min((float)99, (float(fentry67) + fSlow201)))); float fSlow213 = powf((0.014705882352941176f * (float((fSlow210 >= 30.0f)) * min((fSlow210 + -30.0f), (float)68))),1.8f); float fSlow214 = powf((0.010101010101010102f * min((float)99, fSlow210)),0.69999999999999996f); float fSlow215 = max(0.001f, fabsf((((iSlow211)?max(0.0030000000000000001f, (38.0f * faustpower<12>(fSlow212))):max(0.0080000000000000002f, (318.0f * powf(fSlow212,12.6f)))) * (((iSlow211)?fSlow205:fSlow206) - ((iSlow211)?fSlow213:fSlow214))))); - float fSlow216 = float(fentry69); - float fSlow217 = ((fSlow193 * fSlow216) * fSlow196); + float fSlow216 = float(fentry68); + float fSlow217 = ((fSlow191 * fSlow216) * fSlow194); int iSlow218 = int((fSlow217 > fSlow210)); - float fSlow219 = (0.007874015748031496f * (127.0f - min((float)99, (float(fentry70) + fSlow201)))); + float fSlow219 = (0.007874015748031496f * (127.0f - min((float)99, (float(fentry69) + fSlow201)))); float fSlow220 = powf((0.014705882352941176f * (float((fSlow217 >= 30.0f)) * min((fSlow217 + -30.0f), (float)68))),1.8f); float fSlow221 = powf((0.010101010101010102f * min((float)99, fSlow217)),0.69999999999999996f); float fSlow222 = (fSlow215 + max(0.001f, fabsf((((iSlow218)?max(0.0030000000000000001f, (38.0f * faustpower<12>(fSlow219))):max(0.0080000000000000002f, (318.0f * powf(fSlow219,12.6f)))) * (((iSlow218)?fSlow220:fSlow221) - ((iSlow218)?fSlow213:fSlow214)))))); - int iSlow223 = int((fSlow197 > fSlow217)); - float fSlow224 = (0.007874015748031496f * (127.0f - min((float)99, (float(fentry71) + fSlow201)))); + int iSlow223 = int((fSlow195 > fSlow217)); + float fSlow224 = (0.007874015748031496f * (127.0f - min((float)99, (float(fentry70) + fSlow201)))); float fSlow225 = (fSlow222 + max(0.001f, fabsf((((iSlow223)?max(0.0030000000000000001f, (38.0f * faustpower<12>(fSlow224))):max(0.0080000000000000002f, (318.0f * powf(fSlow224,12.6f)))) * (((iSlow223)?fSlow220:fSlow221) - ((iSlow223)?fSlow203:fSlow204)))))); float fSlow226 = (fConst0 * fSlow225); float fSlow227 = (fConst0 * fSlow222); float fSlow228 = (fConst0 * fSlow215); - float fSlow229 = (fSlow193 * fSlow196); - float fSlow230 = (fConst1 * (0 - (fSlow229 * (fSlow198 - fSlow209)))); + float fSlow229 = (fSlow191 * fSlow194); + float fSlow230 = (fConst1 * (0 - (fSlow229 * (fSlow196 - fSlow209)))); float fSlow231 = (0 - (fSlow229 * (fSlow209 - fSlow216))); float fSlow232 = (0 - (fConst0 * (fSlow215 - fSlow222))); - float fSlow233 = (fSlow194 - fSlow216); + float fSlow233 = (fSlow192 - fSlow216); float fSlow234 = (0 - (fConst0 * (fSlow222 - fSlow225))); - float fSlow235 = float(fentry74); - float fSlow236 = ((0.25f * float(fentry72)) + ((int(float(fentry73)))?fSlow235:(fSlow15 * fSlow235))); - float fSlow237 = (fConst1 * fSlow236); - float fSlow238 = float(fentry75); - float fSlow239 = float(fentry76); - float fSlow240 = float(fentry77); - float fSlow241 = ((0.0012626262626262627f * (fSlow8 * fSlow240)) + (0.010101010101010102f * (1.0f - (0.125f * fSlow240)))); - float fSlow242 = ((fSlow238 * fSlow239) * fSlow241); - float fSlow243 = float(fentry78); - float fSlow244 = ((fSlow238 * fSlow243) * fSlow241); - int iSlow245 = int((fSlow242 <= fSlow244)); - float fSlow246 = ((0.057142857142857148f * float(fentry80)) * ((17.312340490667559f * logf((0.0022727272727272726f * fSlow236))) + 48.0f)); - float fSlow247 = (0.007874015748031496f * (127.0f - min((float)99, (float(fentry79) + fSlow246)))); - float fSlow248 = powf((0.014705882352941176f * (float((fSlow242 >= 30.0f)) * min((fSlow242 + -30.0f), (float)68))),1.8f); - float fSlow249 = powf((0.010101010101010102f * min((float)99, fSlow242)),0.69999999999999996f); - float fSlow250 = powf((0.014705882352941176f * (float((fSlow244 >= 30.0f)) * min((fSlow244 + -30.0f), (float)68))),1.8f); - float fSlow251 = powf((0.010101010101010102f * min((float)99, fSlow244)),0.69999999999999996f); - float fSlow252 = max(0.001f, fabsf((((iSlow245)?max(0.0030000000000000001f, (38.0f * faustpower<12>(fSlow247))):max(0.0080000000000000002f, (318.0f * powf(fSlow247,12.6f)))) * (((iSlow245)?fSlow248:fSlow249) - ((iSlow245)?fSlow250:fSlow251))))); + float fSlow235 = (fConst1 * fSlow200); + float fSlow236 = float(fentry71); + float fSlow237 = float(fentry72); + float fSlow238 = float(fentry73); + float fSlow239 = ((0.0012626262626262627f * (fSlow7 * fSlow238)) + (0.010101010101010102f * (1.0f - (0.125f * fSlow238)))); + float fSlow240 = ((fSlow236 * fSlow237) * fSlow239); + float fSlow241 = float(fentry74); + float fSlow242 = ((fSlow236 * fSlow241) * fSlow239); + int iSlow243 = int((fSlow240 <= fSlow242)); + float fSlow244 = float(fentry79); + float fSlow245 = ((0.25f * float(fentry77)) + ((int(float(fentry78)))?fSlow244:(fSlow15 * fSlow244))); + float fSlow246 = ((0.057142857142857148f * float(fentry76)) * ((17.312340490667559f * logf((0.0022727272727272726f * fSlow245))) + 48.0f)); + float fSlow247 = (0.007874015748031496f * (127.0f - min((float)99, (float(fentry75) + fSlow246)))); + float fSlow248 = powf((0.014705882352941176f * (float((fSlow240 >= 30.0f)) * min((fSlow240 + -30.0f), (float)68))),1.8f); + float fSlow249 = powf((0.010101010101010102f * min((float)99, fSlow240)),0.69999999999999996f); + float fSlow250 = powf((0.014705882352941176f * (float((fSlow242 >= 30.0f)) * min((fSlow242 + -30.0f), (float)68))),1.8f); + float fSlow251 = powf((0.010101010101010102f * min((float)99, fSlow242)),0.69999999999999996f); + float fSlow252 = max(0.001f, fabsf((((iSlow243)?max(0.0030000000000000001f, (38.0f * faustpower<12>(fSlow247))):max(0.0080000000000000002f, (318.0f * powf(fSlow247,12.6f)))) * (((iSlow243)?fSlow248:fSlow249) - ((iSlow243)?fSlow250:fSlow251))))); float fSlow253 = (fConst0 * fSlow252); - float fSlow254 = float(fentry81); - float fSlow255 = ((fSlow238 * fSlow254) * fSlow241); - int iSlow256 = int((fSlow255 > fSlow244)); - float fSlow257 = (0.007874015748031496f * (127.0f - min((float)99, (float(fentry82) + fSlow246)))); + float fSlow254 = float(fentry80); + float fSlow255 = ((fSlow236 * fSlow254) * fSlow239); + int iSlow256 = int((fSlow255 > fSlow242)); + float fSlow257 = (0.007874015748031496f * (127.0f - min((float)99, (float(fentry81) + fSlow246)))); float fSlow258 = powf((0.014705882352941176f * (float((fSlow255 >= 30.0f)) * min((fSlow255 + -30.0f), (float)68))),1.8f); float fSlow259 = powf((0.010101010101010102f * min((float)99, fSlow255)),0.69999999999999996f); - float fSlow260 = max(0.001f, fabsf((((iSlow256)?max(0.0030000000000000001f, (38.0f * faustpower<12>(fSlow257))):max(0.0080000000000000002f, (318.0f * powf(fSlow257,12.6f)))) * (((iSlow256)?fSlow250:fSlow251) - ((iSlow256)?fSlow258:fSlow259))))); - float fSlow261 = float(fentry83); - float fSlow262 = ((fSlow238 * fSlow261) * fSlow241); + float fSlow260 = max(0.001f, fabsf((0 - (((iSlow256)?max(0.0030000000000000001f, (38.0f * faustpower<12>(fSlow257))):max(0.0080000000000000002f, (318.0f * powf(fSlow257,12.6f)))) * (((iSlow256)?fSlow258:fSlow259) - ((iSlow256)?fSlow250:fSlow251)))))); + float fSlow261 = float(fentry82); + float fSlow262 = ((fSlow236 * fSlow261) * fSlow239); int iSlow263 = int((fSlow262 > fSlow255)); - float fSlow264 = (0.007874015748031496f * (127.0f - min((float)99, (float(fentry84) + fSlow246)))); + float fSlow264 = (0.007874015748031496f * (127.0f - min((float)99, (float(fentry83) + fSlow246)))); float fSlow265 = powf((0.014705882352941176f * (float((fSlow262 >= 30.0f)) * min((fSlow262 + -30.0f), (float)68))),1.8f); float fSlow266 = powf((0.010101010101010102f * min((float)99, fSlow262)),0.69999999999999996f); float fSlow267 = (fSlow260 + max(0.001f, fabsf((((iSlow263)?max(0.0030000000000000001f, (38.0f * faustpower<12>(fSlow264))):max(0.0080000000000000002f, (318.0f * powf(fSlow264,12.6f)))) * (((iSlow263)?fSlow265:fSlow266) - ((iSlow263)?fSlow258:fSlow259)))))); - int iSlow268 = int((fSlow242 > fSlow262)); - float fSlow269 = (0.007874015748031496f * (127.0f - min((float)99, (float(fentry85) + fSlow246)))); + int iSlow268 = int((fSlow240 > fSlow262)); + float fSlow269 = (0.007874015748031496f * (127.0f - min((float)99, (float(fentry84) + fSlow246)))); float fSlow270 = (fSlow267 + max(0.001f, fabsf((((iSlow268)?max(0.0030000000000000001f, (38.0f * faustpower<12>(fSlow269))):max(0.0080000000000000002f, (318.0f * powf(fSlow269,12.6f)))) * (((iSlow268)?fSlow265:fSlow266) - ((iSlow268)?fSlow248:fSlow249)))))); float fSlow271 = (fConst0 * fSlow270); float fSlow272 = (fConst0 * fSlow267); float fSlow273 = (fConst0 * fSlow260); - float fSlow274 = (fSlow238 * fSlow241); - float fSlow275 = (fConst1 * (0 - (fSlow274 * (fSlow243 - fSlow254)))); - float fSlow276 = (0 - (fSlow274 * (fSlow254 - fSlow261))); + float fSlow274 = (fSlow236 * fSlow239); + float fSlow275 = (fConst1 * (0 - (fSlow274 * (fSlow241 - fSlow254)))); + float fSlow276 = (fSlow261 - fSlow254); float fSlow277 = (0 - (fConst0 * (fSlow260 - fSlow267))); - float fSlow278 = (fSlow239 - fSlow261); + float fSlow278 = (0 - (fSlow274 * (fSlow261 - fSlow237))); float fSlow279 = (0 - (fConst0 * (fSlow267 - fSlow270))); - float fSlow280 = (fConst1 * fSlow155); - float fSlow281 = (fConst1 * fSlow111); + float fSlow280 = (fConst1 * fSlow245); + float fSlow281 = (1825.3162113323297f * float(fentry85)); //zone2b //zone3 FAUSTFLOAT* output0 = output[0]; //LoopGraphScalar for (int i=0; i((0.01020408163265306f * min((float)98, ((int((fRec2[0] < 0.0f)))?fRec3[0]:((int((fRec2[0] < fSlow24)))?((fConst1 * (((fSlow12 - fRec3[0]) * fRec2[0]) / fSlow23)) + fRec3[0]):fSlow12))))); - fTempPerm4 = (fRec5[1] + fSlow55); - fRec5[0] = (fTempPerm4 - floorf(fTempPerm4)); - fTempPerm5 = (65536.0f * fRec5[0]); - } - if (iSlow1) { - fRec1[0] = (fTempPerm3 * ftbl0[(((int((fTempPerm5 + (fSlow56 * fRec1[1]))) % 65536) + 65536) % 65536)]); - } - if (iSlow1 || iSlow25) { - fTempPerm6 = (fRec6[1] + fSlow59); - fRec6[0] = (fTempPerm6 - floorf(fTempPerm6)); - fRec7[0] = ((iSlow4)?0.0f:min(fSlow75, (fRec7[1] + 1.0f))); - fRec9[0] = ((iSlow28)?0.0f:min(fSlow93, (fRec9[1] + 1.0f))); - iTempPerm7 = int((fRec9[0] < fSlow94)); - iTempPerm8 = int((fRec9[0] < fSlow95)); - fRec8[0] = ((iSlow26)?(fSlow27 * ((iTempPerm7)?((iTempPerm8)?((int((fRec9[0] < 0.0f)))?fSlow66:((iTempPerm8)?(fSlow66 + (fSlow96 * (fRec9[0] / fSlow88))):fSlow79)):((iTempPerm7)?(fSlow79 + (fSlow97 * ((fRec9[0] - fSlow95) / fSlow98))):fSlow77)):((int((fRec9[0] < fSlow93)))?(fSlow99 * (fSlow76 + (fSlow100 * ((fRec9[0] - fSlow94) / fSlow101)))):fSlow64))):fRec8[1]); - fTempPerm9 = faustpower<8>((0.01020408163265306f * min((float)98, ((int((fRec7[0] < 0.0f)))?fRec8[0]:((int((fRec7[0] < fSlow75)))?((fConst1 * (((fSlow66 - fRec8[0]) * fRec7[0]) / fSlow74)) + fRec8[0]):fSlow66))))); - fRec10[0] = ((iSlow4)?0.0f:min(fSlow119, (fRec10[1] + 1.0f))); - fRec12[0] = ((iSlow28)?0.0f:min(fSlow137, (fRec12[1] + 1.0f))); - iTempPerm10 = int((fRec12[0] < fSlow138)); - iTempPerm11 = int((fRec12[0] < fSlow139)); - fRec11[0] = ((iSlow26)?(fSlow27 * ((iTempPerm10)?((iTempPerm11)?((int((fRec12[0] < 0.0f)))?fSlow108:((iTempPerm11)?(fSlow108 + (fSlow141 * (fRec12[0] / fSlow126))):fSlow121)):((iTempPerm10)?(fSlow121 + (fSlow142 * ((fRec12[0] - fSlow139) / fSlow143))):fSlow128)):((int((fRec12[0] < fSlow137)))?(fSlow140 * (fSlow127 + (fSlow144 * ((fRec12[0] - fSlow138) / fSlow145)))):fSlow106))):fRec11[1]); - fTempPerm12 = faustpower<8>((0.01020408163265306f * min((float)98, ((int((fRec10[0] < 0.0f)))?fRec11[0]:((int((fRec10[0] < fSlow119)))?((fConst1 * (((fSlow108 - fRec11[0]) * fRec10[0]) / fSlow118)) + fRec11[0]):fSlow108))))); + fRec0[0] = ((iSlow4)?0.0f:min(fSlow24, (fRec0[1] + 1.0f))); + fRec2[0] = ((iSlow28)?0.0f:min(fSlow46, (fRec2[1] + 1.0f))); + iTempPerm0 = int((fRec2[0] < fSlow47)); + iTempPerm1 = int((fRec2[0] < fSlow48)); + fRec1[0] = ((iSlow26)?(fSlow27 * ((iTempPerm0)?((iTempPerm1)?((int((fRec2[0] < 0.0f)))?fSlow12:((iTempPerm1)?(fSlow12 + (fSlow50 * (fRec2[0] / fSlow35))):fSlow30)):((iTempPerm0)?(fSlow30 + (fSlow51 * ((fRec2[0] - fSlow48) / fSlow52))):fSlow37)):((int((fRec2[0] < fSlow46)))?(fSlow49 * (fSlow36 + (fSlow53 * ((fRec2[0] - fSlow47) / fSlow54)))):fSlow10))):fRec1[1]); + fTempPerm2 = faustpower<8>((0.01020408163265306f * min((float)98, ((int((fRec0[0] < 0.0f)))?fRec1[0]:((int((fRec0[0] < fSlow24)))?(fRec1[0] + (fConst1 * ((fRec0[0] * (fSlow12 - fRec1[0])) / fSlow23))):fSlow12))))); + fTempPerm4 = (fRec4[1] + fSlow55); + fRec4[0] = (fTempPerm4 - floorf(fTempPerm4)); + fRec5[0] = ((iSlow4)?0.0f:min(fSlow73, (fRec5[1] + 1.0f))); + fRec7[0] = ((iSlow28)?0.0f:min(fSlow91, (fRec7[1] + 1.0f))); + iTempPerm5 = int((fRec7[0] < fSlow92)); + iTempPerm6 = int((fRec7[0] < fSlow93)); + fRec6[0] = ((iSlow26)?(fSlow27 * ((iTempPerm5)?((iTempPerm6)?((int((fRec7[0] < 0.0f)))?fSlow62:((iTempPerm6)?(fSlow62 + (fSlow95 * (fRec7[0] / fSlow80))):fSlow75)):((iTempPerm5)?(fSlow75 + (fSlow96 * ((fRec7[0] - fSlow93) / fSlow97))):fSlow82)):((int((fRec7[0] < fSlow91)))?(fSlow94 * (fSlow81 + (fSlow98 * ((fRec7[0] - fSlow92) / fSlow99)))):fSlow60))):fRec6[1]); + fTempPerm7 = faustpower<8>((0.01020408163265306f * min((float)98, ((int((fRec5[0] < 0.0f)))?fRec6[0]:((int((fRec5[0] < fSlow73)))?(fRec6[0] + (fConst1 * ((fRec5[0] * (fSlow62 - fRec6[0])) / fSlow72))):fSlow62))))); + fTempPerm8 = (fRec8[1] + fSlow100); + fRec8[0] = (fTempPerm8 - floorf(fTempPerm8)); + fTempPerm9 = (65536.0f * fRec8[0]); + fRec9[0] = ((iSlow4)?0.0f:min(fSlow118, (fRec9[1] + 1.0f))); + fRec11[0] = ((iSlow28)?0.0f:min(fSlow136, (fRec11[1] + 1.0f))); + iTempPerm10 = int((fRec11[0] < fSlow137)); + iTempPerm11 = int((fRec11[0] < fSlow138)); + fRec10[0] = ((iSlow26)?(fSlow27 * ((iTempPerm10)?((iTempPerm11)?((int((fRec11[0] < 0.0f)))?fSlow107:((iTempPerm11)?(fSlow107 + (fSlow140 * (fRec11[0] / fSlow125))):fSlow120)):((iTempPerm10)?(fSlow120 + (fSlow141 * ((fRec11[0] - fSlow138) / fSlow142))):fSlow127)):((int((fRec11[0] < fSlow136)))?(fSlow127 + (fSlow143 * ((fRec11[0] - fSlow137) / fSlow144))):fSlow105))):fRec10[1]); + fTempPerm12 = faustpower<8>((0.01020408163265306f * min((float)98, ((int((fRec9[0] < 0.0f)))?fRec10[0]:((int((fRec9[0] < fSlow118)))?(fRec10[0] + (fConst1 * ((fRec9[0] * (fSlow107 - fRec10[0])) / fSlow117))):fSlow107))))); + fTempPerm13 = (fRec12[1] + fSlow145); + fRec12[0] = (fTempPerm13 - floorf(fTempPerm13)); fRec13[0] = ((iSlow4)?0.0f:min(fSlow163, (fRec13[1] + 1.0f))); fRec15[0] = ((iSlow28)?0.0f:min(fSlow181, (fRec15[1] + 1.0f))); - iTempPerm13 = int((fRec15[0] < fSlow182)); - iTempPerm14 = int((fRec15[0] < fSlow183)); - fRec14[0] = ((iSlow26)?(fSlow27 * ((iTempPerm13)?((iTempPerm14)?((int((fRec15[0] < 0.0f)))?fSlow152:((iTempPerm14)?(fSlow152 + (fSlow185 * (fRec15[0] / fSlow170))):fSlow165)):((iTempPerm13)?(fSlow165 + (fSlow186 * ((fRec15[0] - fSlow183) / fSlow187))):fSlow172)):((int((fRec15[0] < fSlow181)))?(fSlow184 * (fSlow171 + (fSlow188 * ((fRec15[0] - fSlow182) / fSlow189)))):fSlow150))):fRec14[1]); - fTempPerm15 = faustpower<8>((0.01020408163265306f * min((float)98, ((int((fRec13[0] < 0.0f)))?fRec14[0]:((int((fRec13[0] < fSlow163)))?((fConst1 * (((fSlow152 - fRec14[0]) * fRec13[0]) / fSlow162)) + fRec14[0]):fSlow152))))); - fTempPerm16 = (fRec16[1] + fSlow192); - fRec16[0] = (fTempPerm16 - floorf(fTempPerm16)); - fTempPerm17 = (65536.0f * fRec16[0]); + iTempPerm14 = int((fRec15[0] < fSlow182)); + iTempPerm15 = int((fRec15[0] < fSlow183)); + fRec14[0] = ((iSlow26)?(fSlow27 * ((iTempPerm14)?((iTempPerm15)?((int((fRec15[0] < 0.0f)))?fSlow152:((iTempPerm15)?(fSlow152 + (fSlow185 * (fRec15[0] / fSlow170))):fSlow165)):((iTempPerm14)?(fSlow165 + (fSlow186 * ((fRec15[0] - fSlow183) / fSlow187))):fSlow172)):((int((fRec15[0] < fSlow181)))?(fSlow184 * (fSlow171 + (fSlow188 * ((fRec15[0] - fSlow182) / fSlow189)))):fSlow150))):fRec14[1]); + fTempPerm16 = faustpower<8>((0.01020408163265306f * min((float)98, ((int((fRec13[0] < 0.0f)))?fRec14[0]:((int((fRec13[0] < fSlow163)))?(fRec14[0] + (fConst1 * ((fRec13[0] * (fSlow152 - fRec14[0])) / fSlow162))):fSlow152))))); + fTempPerm17 = (fRec16[1] + fSlow190); + fRec16[0] = (fTempPerm17 - floorf(fTempPerm17)); fRec17[0] = ((iSlow4)?0.0f:min(fSlow208, (fRec17[1] + 1.0f))); fRec19[0] = ((iSlow28)?0.0f:min(fSlow226, (fRec19[1] + 1.0f))); iTempPerm18 = int((fRec19[0] < fSlow227)); iTempPerm19 = int((fRec19[0] < fSlow228)); - fRec18[0] = ((iSlow26)?(fSlow27 * ((iTempPerm18)?((iTempPerm19)?((int((fRec19[0] < 0.0f)))?fSlow199:((iTempPerm19)?(fSlow199 + (fSlow230 * (fRec19[0] / fSlow215))):fSlow210)):((iTempPerm18)?(fSlow210 + (fSlow231 * ((fRec19[0] - fSlow228) / fSlow232))):fSlow217)):((int((fRec19[0] < fSlow226)))?(fSlow229 * (fSlow216 + (fSlow233 * ((fRec19[0] - fSlow227) / fSlow234)))):fSlow197))):fRec18[1]); - fTempPerm20 = faustpower<8>((0.01020408163265306f * min((float)98, ((int((fRec17[0] < 0.0f)))?fRec18[0]:((int((fRec17[0] < fSlow208)))?((fConst1 * (((fSlow199 - fRec18[0]) * fRec17[0]) / fSlow207)) + fRec18[0]):fSlow199))))); - fTempPerm21 = (fRec20[1] + fSlow237); + fRec18[0] = ((iSlow26)?(fSlow27 * ((iTempPerm18)?((iTempPerm19)?((int((fRec19[0] < 0.0f)))?fSlow197:((iTempPerm19)?(fSlow197 + (fSlow230 * (fRec19[0] / fSlow215))):fSlow210)):((iTempPerm18)?(fSlow210 + (fSlow231 * ((fRec19[0] - fSlow228) / fSlow232))):fSlow217)):((int((fRec19[0] < fSlow226)))?(fSlow229 * (fSlow216 + (fSlow233 * ((fRec19[0] - fSlow227) / fSlow234)))):fSlow195))):fRec18[1]); + fTempPerm20 = faustpower<8>((0.01020408163265306f * min((float)98, ((int((fRec17[0] < 0.0f)))?fRec18[0]:((int((fRec17[0] < fSlow208)))?(fRec18[0] + (fConst1 * ((fRec17[0] * (fSlow197 - fRec18[0])) / fSlow207))):fSlow197))))); + fTempPerm21 = (fRec20[1] + fSlow235); fRec20[0] = (fTempPerm21 - floorf(fTempPerm21)); - fRec21[0] = ((iSlow4)?0.0f:min(fSlow253, (fRec21[1] + 1.0f))); - fRec23[0] = ((iSlow28)?0.0f:min(fSlow271, (fRec23[1] + 1.0f))); - iTempPerm22 = int((fRec23[0] < fSlow272)); - iTempPerm23 = int((fRec23[0] < fSlow273)); - fRec22[0] = ((iSlow26)?(fSlow27 * ((iTempPerm22)?((iTempPerm23)?((int((fRec23[0] < 0.0f)))?fSlow244:((iTempPerm23)?(fSlow244 + (fSlow275 * (fRec23[0] / fSlow260))):fSlow255)):((iTempPerm22)?(fSlow255 + (fSlow276 * ((fRec23[0] - fSlow273) / fSlow277))):fSlow262)):((int((fRec23[0] < fSlow271)))?(fSlow274 * (fSlow261 + (fSlow278 * ((fRec23[0] - fSlow272) / fSlow279)))):fSlow242))):fRec22[1]); - fTempPerm24 = faustpower<8>((0.01020408163265306f * min((float)98, ((int((fRec21[0] < 0.0f)))?fRec22[0]:((int((fRec21[0] < fSlow253)))?((fConst1 * (((fSlow244 - fRec22[0]) * fRec21[0]) / fSlow252)) + fRec22[0]):fSlow244))))); - fTempPerm25 = (fRec24[1] + fSlow280); - fRec24[0] = (fTempPerm25 - floorf(fTempPerm25)); - fTempPerm26 = (fRec25[1] + fSlow281); - fRec25[0] = (fTempPerm26 - floorf(fTempPerm26)); + fRec22[0] = ((iSlow4)?0.0f:min(fSlow253, (fRec22[1] + 1.0f))); + fRec24[0] = ((iSlow28)?0.0f:min(fSlow271, (fRec24[1] + 1.0f))); + iTempPerm22 = int((fRec24[0] < fSlow272)); + iTempPerm23 = int((fRec24[0] < fSlow273)); + fRec23[0] = ((iSlow26)?(fSlow27 * ((iTempPerm22)?((iTempPerm23)?((int((fRec24[0] < 0.0f)))?fSlow242:((iTempPerm23)?(fSlow242 + (fSlow275 * (fRec24[0] / fSlow260))):fSlow255)):((iTempPerm22)?(fSlow274 * (fSlow254 + (fSlow276 * ((fRec24[0] - fSlow273) / fSlow277)))):fSlow262)):((int((fRec24[0] < fSlow271)))?(fSlow262 + (fSlow278 * ((fRec24[0] - fSlow272) / fSlow279))):fSlow240))):fRec23[1]); + fTempPerm24 = faustpower<8>((0.01020408163265306f * min((float)98, ((int((fRec22[0] < 0.0f)))?fRec23[0]:((int((fRec22[0] < fSlow253)))?(fRec23[0] + (fConst1 * ((fRec22[0] * (fSlow242 - fRec23[0])) / fSlow252))):fSlow242))))); + fTempPerm25 = (fRec25[1] + fSlow280); + fRec25[0] = (fTempPerm25 - floorf(fTempPerm25)); + fTempPerm26 = (65536.0f * fRec25[0]); } if (iSlow1) { - fTempPerm27 = (2.0879500000000002f * ((ftbl0[(((int((65536.0f * (fRec1[0] + fRec6[0]))) % 65536) + 65536) % 65536)] * fTempPerm9) + (fTempPerm12 * ftbl0[(((int((65536.0f * ((fTempPerm15 * ftbl0[(((int((65536.0f * ((ftbl0[(((int((65536.0f * ((ftbl0[(((int(fTempPerm17) % 65536) + 65536) % 65536)] * fTempPerm20) + fRec20[0]))) % 65536) + 65536) % 65536)] * fTempPerm24) + fRec24[0]))) % 65536) + 65536) % 65536)]) + fRec25[0]))) % 65536) + 65536) % 65536)]))); + fRec21[0] = (fTempPerm24 * ftbl0[(((int((fTempPerm26 + (fSlow281 * fRec21[1]))) % 65536) + 65536) % 65536)]); + fTempPerm27 = (2.0879500000000002f * ((fTempPerm2 * ftbl0[(((int((65536.0f * (fRec4[0] + (fTempPerm7 * ftbl0[(((int(fTempPerm9) % 65536) + 65536) % 65536)])))) % 65536) + 65536) % 65536)]) + (fTempPerm12 * ftbl0[(((int((65536.0f * (fRec12[0] + (fTempPerm16 * ftbl0[(((int((65536.0f * (fRec16[0] + (fTempPerm20 * ftbl0[(((int((65536.0f * (fRec20[0] + fRec21[0]))) % 65536) + 65536) % 65536)])))) % 65536) + 65536) % 65536)])))) % 65536) + 65536) % 65536)]))); } if (iSlow25) { - fRec26[0] = (fTempPerm20 * ftbl0[(((int((fTempPerm17 + (fSlow56 * fRec26[1]))) % 65536) + 65536) % 65536)]); - fTempPerm28 = (2.0879500000000002f * ((ftbl0[(((int((65536.0f * ((fTempPerm3 * ftbl0[(((int(fTempPerm5) % 65536) + 65536) % 65536)]) + fRec6[0]))) % 65536) + 65536) % 65536)] * fTempPerm9) + (fTempPerm12 * ftbl0[(((int((65536.0f * ((fTempPerm15 * ftbl0[(((int((65536.0f * ((ftbl0[(((int((65536.0f * (fRec26[0] + fRec20[0]))) % 65536) + 65536) % 65536)] * fTempPerm24) + fRec24[0]))) % 65536) + 65536) % 65536)]) + fRec25[0]))) % 65536) + 65536) % 65536)]))); + fRec26[0] = (fTempPerm7 * ftbl0[(((int((fTempPerm9 + (fSlow281 * fRec26[1]))) % 65536) + 65536) % 65536)]); + fTempPerm28 = (2.0879500000000002f * ((fTempPerm2 * ftbl0[(((int((65536.0f * (fRec4[0] + fRec26[0]))) % 65536) + 65536) % 65536)]) + (fTempPerm12 * ftbl0[(((int((65536.0f * (fRec12[0] + (fTempPerm16 * ftbl0[(((int((65536.0f * (fRec16[0] + (fTempPerm20 * ftbl0[(((int((65536.0f * (fRec20[0] + (fTempPerm24 * ftbl0[(((int(fTempPerm26) % 65536) + 65536) % 65536)])))) % 65536) + 65536) % 65536)])))) % 65536) + 65536) % 65536)])))) % 65536) + 65536) % 65536)]))); } output0[i] = (FAUSTFLOAT)(fTempPerm27 + fTempPerm28); // post processing if (iSlow25) { fRec26[1] = fRec26[0]; } + if (iSlow1) { + fRec21[1] = fRec21[0]; + } if (iSlow1 || iSlow25) { fRec25[1] = fRec25[0]; + fRec23[1] = fRec23[0]; fRec24[1] = fRec24[0]; fRec22[1] = fRec22[0]; - fRec23[1] = fRec23[0]; - fRec21[1] = fRec21[0]; fRec20[1] = fRec20[0]; fRec18[1] = fRec18[0]; fRec19[1] = fRec19[0]; @@ -1293,22 +1346,18 @@ class synth_dx7 : public dsp { fRec14[1] = fRec14[0]; fRec15[1] = fRec15[0]; fRec13[1] = fRec13[0]; - fRec11[1] = fRec11[0]; fRec12[1] = fRec12[0]; fRec10[1] = fRec10[0]; - fRec8[1] = fRec8[0]; + fRec11[1] = fRec11[0]; fRec9[1] = fRec9[0]; - fRec7[1] = fRec7[0]; + fRec8[1] = fRec8[0]; fRec6[1] = fRec6[0]; - } - if (iSlow1) { - fRec1[1] = fRec1[0]; - } - if (iSlow1 || iSlow25) { + fRec7[1] = fRec7[0]; fRec5[1] = fRec5[0]; - fRec3[1] = fRec3[0]; fRec4[1] = fRec4[0]; + fRec1[1] = fRec1[0]; fRec2[1] = fRec2[0]; + fRec0[1] = fRec0[0]; } } } diff --git a/ceammc/ext/src/synth/synth_eguitar.h b/ceammc/ext/src/synth/synth_eguitar.h index ff43e47516..dd7c2acdcc 100644 --- a/ceammc/ext/src/synth/synth_eguitar.h +++ b/ceammc/ext/src/synth/synth_eguitar.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "synth.eguitar" -Code generated with Faust 2.15.0 (https://faust.grame.fr) -Compilation options: cpp, -scal -ftz 0 +Code generated with Faust 2.22.1 (https://faust.grame.fr) +Compilation options: -lang cpp -scal -ftz 0 ------------------------------------------------------------ */ #ifndef __synth_eguitar_H__ @@ -14,6 +14,7 @@ Compilation options: cpp, -scal -ftz 0 #include #include +/************************** BEGIN dsp.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -96,23 +97,23 @@ class dsp { * - static class 'classInit': static tables initialization * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void init(int samplingRate) = 0; + virtual void init(int sample_rate) = 0; /** * Init instance state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceInit(int samplingRate) = 0; + virtual void instanceInit(int sample_rate) = 0; /** * Init instance constant state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceConstants(int samplingRate) = 0; + virtual void instanceConstants(int sample_rate) = 0; /* Init default control parameters values */ virtual void instanceResetUserInterface() = 0; @@ -149,8 +150,8 @@ class dsp { * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the number of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) * */ virtual void compute(double /*date_usec*/, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -169,16 +170,16 @@ class decorator_dsp : public dsp { public: - decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + decorator_dsp(dsp* dsp = nullptr):fDSP(dsp) {} virtual ~decorator_dsp() { delete fDSP; } virtual int getNumInputs() { return fDSP->getNumInputs(); } virtual int getNumOutputs() { return fDSP->getNumOutputs(); } virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } virtual int getSampleRate() { return fDSP->getSampleRate(); } - virtual void init(int samplingRate) { fDSP->init(samplingRate); } - virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } - virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void init(int sample_rate) { fDSP->init(sample_rate); } + virtual void instanceInit(int sample_rate) { fDSP->instanceInit(sample_rate); } + virtual void instanceConstants(int sample_rate) { fDSP->instanceConstants(sample_rate); } virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } @@ -233,6 +234,8 @@ class dsp_factory { #endif #endif +/************************** END dsp.h **************************/ +/************************** BEGIN UI.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -272,45 +275,54 @@ class dsp_factory { struct Soundfile; -class UI +template +class UIReal { - + public: - - UI() {} - - virtual ~UI() {} - + + UIReal() {} + virtual ~UIReal() {} + // -- widget's layouts - + virtual void openTabBox(const char* label) = 0; virtual void openHorizontalBox(const char* label) = 0; virtual void openVerticalBox(const char* label) = 0; virtual void closeBox() = 0; - + // -- active widgets - - virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - + + virtual void addButton(const char* label, REAL* zone) = 0; + virtual void addCheckButton(const char* label, REAL* zone) = 0; + virtual void addVerticalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addHorizontalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addNumEntry(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + // -- passive widgets - - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - + + virtual void addHorizontalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + virtual void addVerticalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + // -- soundfiles - + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; - + // -- metadata declarations + + virtual void declare(REAL* zone, const char* key, const char* val) {} +}; + +struct UI : public UIReal +{ - virtual void declare(FAUSTFLOAT*, const char*, const char*) {} + UI() {} + virtual ~UI() {} }; #endif +/************************** END UI.h **************************/ +/************************** BEGIN meta.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -339,11 +351,14 @@ class UI struct Meta { - virtual void declare(const char* key, const char* value) = 0; virtual ~Meta() {}; + virtual void declare(const char* key, const char* value) = 0; + }; #endif +/************************** END meta.h **************************/ +/************************** BEGIN misc.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -366,7 +381,7 @@ struct Meta that work under terms of your choice, so long as this FAUST architecture section is not modified. ************************************************************************/ - + #ifndef __misc__ #define __misc__ @@ -374,6 +389,8 @@ struct Meta #include #include #include +#include +#include using std::max; @@ -395,27 +412,65 @@ static int int2pow2(int x) { int r = 0; while ((1<declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.0"); + m->declare("basics.lib/version", "0.1"); m->declare("delays.lib/name", "Faust Delay Library"); - m->declare("delays.lib/version", "0.0"); + m->declare("delays.lib/version", "0.1"); + m->declare("envelopes.lib/ar:author", "Yann Orlarey, Stéphane Letz"); m->declare("envelopes.lib/author", "GRAME"); m->declare("envelopes.lib/copyright", "GRAME"); m->declare("envelopes.lib/license", "LGPL with exception"); m->declare("envelopes.lib/name", "Faust Envelope Library"); m->declare("envelopes.lib/version", "0.0"); - m->declare("filename", "synth_eguitar"); + m->declare("filename", "synth_eguitar.dsp"); + m->declare("filters.lib/fir:author", "Julius O. Smith III"); + m->declare("filters.lib/fir:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/fir:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/iir:author", "Julius O. Smith III"); + m->declare("filters.lib/iir:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/iir:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/lowpass0_highpass1", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/lowpass0_highpass1:author", "Julius O. Smith III"); + m->declare("filters.lib/lowpass:author", "Julius O. Smith III"); + m->declare("filters.lib/lowpass:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/lowpass:license", "MIT-style STK-4.3 license"); m->declare("filters.lib/name", "Faust Filters Library"); - m->declare("filters.lib/version", "0.0"); + m->declare("filters.lib/tf2:author", "Julius O. Smith III"); + m->declare("filters.lib/tf2:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/tf2:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/tf2s:author", "Julius O. Smith III"); + m->declare("filters.lib/tf2s:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/tf2s:license", "MIT-style STK-4.3 license"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); @@ -522,7 +591,7 @@ class synth_eguitar : public dsp { m->declare("noises.lib/name", "Faust Noise Generator Library"); m->declare("noises.lib/version", "0.0"); m->declare("routes.lib/name", "Faust Signal Routing Library"); - m->declare("routes.lib/version", "0.0"); + m->declare("routes.lib/version", "0.1"); m->declare("signals.lib/name", "Faust Signal Routing Library"); m->declare("signals.lib/version", "0.0"); m->declare("spn.lib/name", "Standart Pitch Notation constants"); @@ -531,27 +600,23 @@ class synth_eguitar : public dsp { virtual int getNumInputs() { return 0; - } virtual int getNumOutputs() { return 1; - } virtual int getInputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { default: { rate = -1; break; } - } return rate; - } virtual int getOutputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -560,26 +625,20 @@ class synth_eguitar : public dsp { rate = -1; break; } - } return rate; - } - static void classInit(int samplingFreq) { - + static void classInit(int sample_rate) { } - virtual void instanceConstants(int samplingFreq) { - fSamplingFreq = samplingFreq; - fConst0 = std::min(192000.0f, std::max(1.0f, float(fSamplingFreq))); + virtual void instanceConstants(int sample_rate) { + fSampleRate = sample_rate; + fConst0 = std::min(192000.0f, std::max(1.0f, float(fSampleRate))); fConst1 = (0.00147058826f * fConst0); fConst2 = (0.00882352982f * fConst0); fConst3 = (6911.50391f / fConst0); - fConst4 = (0.00400000019f * fConst0); - fConst5 = (0.00200000009f * fConst0); - fConst6 = (500.0f / fConst0); - + fConst4 = (0.00200000009f * fConst0); } virtual void instanceResetUserInterface() { @@ -588,100 +647,75 @@ class synth_eguitar : public dsp { fHslider2 = FAUSTFLOAT(0.5f); fHslider3 = FAUSTFLOAT(1.0f); fButton0 = FAUSTFLOAT(0.0f); - } virtual void instanceClear() { for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { fRec25[l0] = 0.0f; - } for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { fRec29[l1] = 0.0f; - } for (int l2 = 0; (l2 < 4); l2 = (l2 + 1)) { fRec31[l2] = 0.0f; - } IOTA = 0; for (int l3 = 0; (l3 < 2048); l3 = (l3 + 1)) { fRec32[l3] = 0.0f; - } for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { fVec0[l4] = 0.0f; - } for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { iRec34[l5] = 0; - } for (int l6 = 0; (l6 < 3); l6 = (l6 + 1)) { fRec33[l6] = 0.0f; - } for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) { fVec1[l7] = 0.0f; - } for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { - fVec2[l8] = 0.0f; - + iRec35[l8] = 0; } - for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { - fRec35[l9] = 0.0f; - + for (int l9 = 0; (l9 < 3); l9 = (l9 + 1)) { + fVec2[l9] = 0.0f; } - for (int l10 = 0; (l10 < 3); l10 = (l10 + 1)) { - fVec3[l10] = 0.0f; - + for (int l10 = 0; (l10 < 2048); l10 = (l10 + 1)) { + fRec30[l10] = 0.0f; } - for (int l11 = 0; (l11 < 2048); l11 = (l11 + 1)) { - fRec30[l11] = 0.0f; - + for (int l11 = 0; (l11 < 2); l11 = (l11 + 1)) { + fRec21[l11] = 0.0f; } for (int l12 = 0; (l12 < 2); l12 = (l12 + 1)) { - fRec21[l12] = 0.0f; - + fRec17[l12] = 0.0f; } - for (int l13 = 0; (l13 < 2); l13 = (l13 + 1)) { - fRec17[l13] = 0.0f; - + for (int l13 = 0; (l13 < 2048); l13 = (l13 + 1)) { + fRec13[l13] = 0.0f; } - for (int l14 = 0; (l14 < 2048); l14 = (l14 + 1)) { - fRec13[l14] = 0.0f; - + for (int l14 = 0; (l14 < 2); l14 = (l14 + 1)) { + fRec15[l14] = 0.0f; } - for (int l15 = 0; (l15 < 2); l15 = (l15 + 1)) { - fRec15[l15] = 0.0f; - + for (int l15 = 0; (l15 < 4); l15 = (l15 + 1)) { + fRec11[l15] = 0.0f; } - for (int l16 = 0; (l16 < 4); l16 = (l16 + 1)) { - fRec11[l16] = 0.0f; - + for (int l16 = 0; (l16 < 2); l16 = (l16 + 1)) { + fRec6[l16] = 0.0f; } - for (int l17 = 0; (l17 < 2); l17 = (l17 + 1)) { - fRec6[l17] = 0.0f; - + for (int l17 = 0; (l17 < 2048); l17 = (l17 + 1)) { + fRec2[l17] = 0.0f; } - for (int l18 = 0; (l18 < 2048); l18 = (l18 + 1)) { - fRec2[l18] = 0.0f; - + for (int l18 = 0; (l18 < 2); l18 = (l18 + 1)) { + fRec0[l18] = 0.0f; } - for (int l19 = 0; (l19 < 2); l19 = (l19 + 1)) { - fRec0[l19] = 0.0f; - - } - } - virtual void init(int samplingFreq) { - classInit(samplingFreq); - instanceInit(samplingFreq); + virtual void init(int sample_rate) { + classInit(sample_rate); + instanceInit(sample_rate); } - virtual void instanceInit(int samplingFreq) { - instanceConstants(samplingFreq); + virtual void instanceInit(int sample_rate) { + instanceConstants(sample_rate); instanceResetUserInterface(); instanceClear(); } @@ -689,9 +723,9 @@ class synth_eguitar : public dsp { virtual synth_eguitar* clone() { return new synth_eguitar(); } + virtual int getSampleRate() { - return fSamplingFreq; - + return fSampleRate; } virtual void buildUserInterface(UI* ui_interface) { @@ -702,7 +736,6 @@ class synth_eguitar : public dsp { ui_interface->addHorizontalSlider("pitch", &fHslider1, 48.0f, 36.0f, 84.0f, 0.00100000005f); ui_interface->addHorizontalSlider("pos", &fHslider2, 0.5f, 0.0f, 1.0f, 0.00999999978f); ui_interface->closeBox(); - } virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { @@ -768,16 +801,13 @@ class synth_eguitar : public dsp { float fSlow58 = (1.0f / fSlow56); float fSlow59 = (((fSlow55 + -1.41421354f) / fSlow54) + 1.0f); float fSlow60 = (2.0f * (1.0f - (1.0f / synth_eguitar_faustpower2_f(fSlow54)))); - float fSlow61 = float(fButton0); - float fSlow62 = synth_eguitar_faustpower2_f((1.0f - (0.219999999f * fSlow1))); - float fSlow63 = (fConst4 * fSlow62); - float fSlow64 = (fConst5 * fSlow62); - float fSlow65 = (fConst6 / fSlow62); - int iSlow66 = (iSlow38 + 1); - int iSlow67 = (iSlow42 + 1); - int iSlow68 = (iSlow45 + 1); - int iSlow69 = (iSlow49 + 1); - int iSlow70 = (iSlow52 + 1); + float fSlow61 = (1.0f / std::max(1.0f, (fConst4 * synth_eguitar_faustpower2_f((1.0f - (0.219999999f * fSlow1)))))); + float fSlow62 = float(fButton0); + int iSlow63 = (iSlow38 + 1); + int iSlow64 = (iSlow42 + 1); + int iSlow65 = (iSlow45 + 1); + int iSlow66 = (iSlow49 + 1); + int iSlow67 = (iSlow52 + 1); for (int i = 0; (i < count); i = (i + 1)) { float fRec10 = (-1.0f * (0.997305274f * ((0.899999976f * fRec11[2]) + (0.0500000007f * (fRec11[1] + fRec11[3]))))); fRec25[0] = ((fSlow11 * fRec2[((IOTA - iSlow14) & 2047)]) + (fSlow15 * ((((fSlow16 * fRec2[((IOTA - iSlow18) & 2047)]) + (fSlow19 * fRec2[((IOTA - iSlow21) & 2047)])) + (fSlow23 * fRec2[((IOTA - iSlow25) & 2047)])) + (fSlow26 * fRec2[((IOTA - iSlow28) & 2047)])))); @@ -788,16 +818,15 @@ class synth_eguitar : public dsp { fVec0[0] = ((fSlow36 * fRec32[((IOTA - iSlow39) & 2047)]) + (fSlow40 * ((((fSlow41 * fRec32[((IOTA - iSlow43) & 2047)]) + (fSlow44 * fRec32[((IOTA - iSlow46) & 2047)])) + (fSlow48 * fRec32[((IOTA - iSlow50) & 2047)])) + (fSlow51 * fRec32[((IOTA - iSlow53) & 2047)])))); iRec34[0] = ((1103515245 * iRec34[1]) + 12345); fRec33[0] = ((4.65661287e-10f * float(iRec34[0])) - (fSlow58 * ((fSlow59 * fRec33[2]) + (fSlow60 * fRec33[1])))); - fVec1[0] = fSlow61; - fVec2[0] = fSlow62; - fRec35[0] = ((((fSlow61 - fVec1[1]) > 0.0f) > 0)?0.0f:std::min(fSlow63, ((fRec35[1] + (fConst4 * (fSlow62 - fVec2[1]))) + 1.0f))); - int iTemp0 = (fRec35[0] < fSlow64); - float fTemp1 = (fSlow57 * ((fRec33[2] + (fRec33[0] + (2.0f * fRec33[1]))) * (iTemp0?((fRec35[0] < 0.0f)?0.0f:(iTemp0?(fSlow65 * fRec35[0]):1.0f)):((fRec35[0] < fSlow63)?((fSlow65 * (0.0f - (fRec35[0] - fSlow64))) + 1.0f):0.0f)))); + fVec1[0] = fSlow62; + iRec35[0] = (((iRec35[1] + (iRec35[1] > 0)) * (fSlow62 <= fVec1[1])) + (fSlow62 > fVec1[1])); + float fTemp0 = (fSlow61 * float(iRec35[0])); + float fTemp1 = (fSlow57 * ((fRec33[2] + (fRec33[0] + (2.0f * fRec33[1]))) * std::max(0.0f, std::min(fTemp0, (2.0f - fTemp0))))); float fTemp2 = (fVec0[1] + fTemp1); - fVec3[0] = fTemp2; - fRec30[(IOTA & 2047)] = ((0.0500000007f * fRec30[((IOTA - 1) & 2047)]) + (0.949999988f * fVec3[2])); - float fRec27 = ((fSlow11 * fRec30[((IOTA - iSlow13) & 2047)]) + (fSlow15 * ((((fSlow19 * fRec30[((IOTA - iSlow20) & 2047)]) + (fSlow16 * fRec30[((IOTA - iSlow17) & 2047)])) + (fSlow23 * fRec30[((IOTA - iSlow24) & 2047)])) + (fSlow26 * fRec30[((IOTA - iSlow27) & 2047)])))); - float fRec28 = (fVec3[1] + fRec21[1]); + fVec2[0] = fTemp2; + fRec30[(IOTA & 2047)] = ((0.0500000007f * fRec30[((IOTA - 1) & 2047)]) + (0.949999988f * fVec2[2])); + float fRec27 = ((fSlow11 * fRec30[((IOTA - iSlow13) & 2047)]) + (fSlow15 * ((((fSlow16 * fRec30[((IOTA - iSlow17) & 2047)]) + (fSlow19 * fRec30[((IOTA - iSlow20) & 2047)])) + (fSlow23 * fRec30[((IOTA - iSlow24) & 2047)])) + (fSlow26 * fRec30[((IOTA - iSlow27) & 2047)])))); + float fRec28 = (fVec2[1] + fRec21[1]); fRec21[0] = fRec26; float fRec22 = fRec21[1]; float fRec23 = fRec27; @@ -807,7 +836,7 @@ class synth_eguitar : public dsp { float fRec19 = fRec23; float fRec20 = fRec24; fRec13[(IOTA & 2047)] = fRec18; - float fRec14 = ((fSlow36 * fRec13[((IOTA - iSlow66) & 2047)]) + (fSlow40 * ((((fSlow41 * fRec13[((IOTA - iSlow67) & 2047)]) + (fSlow44 * fRec13[((IOTA - iSlow68) & 2047)])) + (fSlow48 * fRec13[((IOTA - iSlow69) & 2047)])) + (fSlow51 * fRec13[((IOTA - iSlow70) & 2047)])))); + float fRec14 = ((fSlow36 * fRec13[((IOTA - iSlow63) & 2047)]) + (fSlow40 * ((((fSlow41 * fRec13[((IOTA - iSlow64) & 2047)]) + (fSlow44 * fRec13[((IOTA - iSlow65) & 2047)])) + (fSlow48 * fRec13[((IOTA - iSlow66) & 2047)])) + (fSlow51 * fRec13[((IOTA - iSlow67) & 2047)])))); fRec15[0] = fRec19; float fRec16 = fRec20; fRec11[0] = (fSlow0 * fRec15[1]); @@ -827,7 +856,6 @@ class synth_eguitar : public dsp { fRec29[1] = fRec29[0]; for (int j0 = 3; (j0 > 0); j0 = (j0 - 1)) { fRec31[j0] = fRec31[(j0 - 1)]; - } IOTA = (IOTA + 1); fVec0[1] = fVec0[0]; @@ -835,25 +863,20 @@ class synth_eguitar : public dsp { fRec33[2] = fRec33[1]; fRec33[1] = fRec33[0]; fVec1[1] = fVec1[0]; + iRec35[1] = iRec35[0]; + fVec2[2] = fVec2[1]; fVec2[1] = fVec2[0]; - fRec35[1] = fRec35[0]; - fVec3[2] = fVec3[1]; - fVec3[1] = fVec3[0]; fRec21[1] = fRec21[0]; fRec17[1] = fRec17[0]; fRec15[1] = fRec15[0]; for (int j1 = 3; (j1 > 0); j1 = (j1 - 1)) { fRec11[j1] = fRec11[(j1 - 1)]; - } fRec6[1] = fRec6[0]; fRec0[1] = fRec0[0]; - } - } - }; // clang-format on #endif diff --git a/ceammc/ext/src/synth/synth_fgrain.cpp b/ceammc/ext/src/synth/synth_fgrain.cpp index d3a17f7d8b..9a8498238b 100644 --- a/ceammc/ext/src/synth/synth_fgrain.cpp +++ b/ceammc/ext/src/synth/synth_fgrain.cpp @@ -44,17 +44,62 @@ SynthFGrain::SynthFGrain(const PdArgs& args) , randomness_(0.1) , fname_(&s_) { - createCbProperty("@file", &SynthFGrain::propFile, &SynthFGrain::propSetFile); - createCbProperty("@voices", &SynthFGrain::propVoices, &SynthFGrain::propSetVoices); - createCbProperty("@stretch", &SynthFGrain::propStretch, &SynthFGrain::propSetStretch); - createCbProperty("@random", &SynthFGrain::propRandom, &SynthFGrain::propSetRandom); + const size_t DEFAULT_STRETCH = 1; + const size_t DEFAULT_VOICES = 1; + + { + Property* p = createCbProperty("@file", &SynthFGrain::propFile, &SynthFGrain::propSetFile); + p->info().setType(PropertyInfoType::SYMBOL); + } + + { + Property* p = createCbProperty("@voices", &SynthFGrain::propVoices, &SynthFGrain::propSetVoices); + p->info().setType(PropertyInfoType::INTEGER); + p->info().setRange(0, 200); + p->info().setDefault(DEFAULT_VOICES); + } + + { + Property* p = createCbProperty("@stretch", &SynthFGrain::propStretch, &SynthFGrain::propSetStretch); + p->info().setType(PropertyInfoType::INTEGER); + p->info().setRange(1, 1000); + p->info().setDefault(DEFAULT_STRETCH); + } + + { + Property* p = createCbProperty("@random", &SynthFGrain::propRandom, &SynthFGrain::propSetRandom); + p->info().setType(PropertyInfoType::FLOAT); + p->info().setRange(0, 0.97); + p->info().setDefault(0.1f); + } + createCbProperty("@gramp", &SynthFGrain::propGrainRamp, &SynthFGrain::propSetGrainRamp); - createCbProperty("@gdur", &SynthFGrain::propGrainDuration, &SynthFGrain::propSetGrainDuration); - createCbProperty("@goffset", &SynthFGrain::propGrainOffset, &SynthFGrain::propSetGrainOffset); - createCbProperty("@gdelay", &SynthFGrain::propGrainDelay, &SynthFGrain::propSetGrainDelay); - synth_->setVoices(1); - synth_->setStretch(1); + { + Property* p = createCbProperty("@gdur", &SynthFGrain::propGrainDuration, &SynthFGrain::propSetGrainDuration); + p->info().setType(PropertyInfoType::INTEGER); + p->info().setMin(1); + p->info().setUnits(PropertyInfoUnits::MSEC); + p->info().setDefault(30); + } + + { + Property* p = createCbProperty("@goffset", &SynthFGrain::propGrainOffset, &SynthFGrain::propSetGrainOffset); + p->info().setType(PropertyInfoType::INTEGER); + p->info().setDefault(int(0)); + p->info().setUnits(PropertyInfoUnits::MSEC); + } + + { + Property* p = createCbProperty("@gdelay", &SynthFGrain::propGrainDelay, &SynthFGrain::propSetGrainDelay); + p->info().setType(PropertyInfoType::INTEGER); + p->info().setDefault(int(0)); + p->info().setUnits(PropertyInfoUnits::MSEC); + p->info().setMin(0); + } + + synth_->setVoices(DEFAULT_VOICES); + synth_->setStretch(DEFAULT_STRETCH); synth_->setRandomFactor(randomness_); createSignalOutlet(); diff --git a/ceammc/ext/src/synth/synth_ks.h b/ceammc/ext/src/synth/synth_ks.h index 9e05ce3ec4..1299011b08 100644 --- a/ceammc/ext/src/synth/synth_ks.h +++ b/ceammc/ext/src/synth/synth_ks.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "synth.ks" -Code generated with Faust 2.15.0 (https://faust.grame.fr) -Compilation options: cpp, -scal -ftz 0 +Code generated with Faust 2.22.1 (https://faust.grame.fr) +Compilation options: -lang cpp -scal -ftz 0 ------------------------------------------------------------ */ #ifndef __synth_ks_H__ @@ -14,6 +14,7 @@ Compilation options: cpp, -scal -ftz 0 #include #include +/************************** BEGIN dsp.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -96,23 +97,23 @@ class dsp { * - static class 'classInit': static tables initialization * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void init(int samplingRate) = 0; + virtual void init(int sample_rate) = 0; /** * Init instance state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceInit(int samplingRate) = 0; + virtual void instanceInit(int sample_rate) = 0; /** * Init instance constant state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceConstants(int samplingRate) = 0; + virtual void instanceConstants(int sample_rate) = 0; /* Init default control parameters values */ virtual void instanceResetUserInterface() = 0; @@ -149,8 +150,8 @@ class dsp { * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the number of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) * */ virtual void compute(double /*date_usec*/, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -169,16 +170,16 @@ class decorator_dsp : public dsp { public: - decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + decorator_dsp(dsp* dsp = nullptr):fDSP(dsp) {} virtual ~decorator_dsp() { delete fDSP; } virtual int getNumInputs() { return fDSP->getNumInputs(); } virtual int getNumOutputs() { return fDSP->getNumOutputs(); } virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } virtual int getSampleRate() { return fDSP->getSampleRate(); } - virtual void init(int samplingRate) { fDSP->init(samplingRate); } - virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } - virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void init(int sample_rate) { fDSP->init(sample_rate); } + virtual void instanceInit(int sample_rate) { fDSP->instanceInit(sample_rate); } + virtual void instanceConstants(int sample_rate) { fDSP->instanceConstants(sample_rate); } virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } @@ -233,6 +234,8 @@ class dsp_factory { #endif #endif +/************************** END dsp.h **************************/ +/************************** BEGIN UI.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -272,45 +275,54 @@ class dsp_factory { struct Soundfile; -class UI +template +class UIReal { - + public: - - UI() {} - - virtual ~UI() {} - + + UIReal() {} + virtual ~UIReal() {} + // -- widget's layouts - + virtual void openTabBox(const char* label) = 0; virtual void openHorizontalBox(const char* label) = 0; virtual void openVerticalBox(const char* label) = 0; virtual void closeBox() = 0; - + // -- active widgets - - virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - + + virtual void addButton(const char* label, REAL* zone) = 0; + virtual void addCheckButton(const char* label, REAL* zone) = 0; + virtual void addVerticalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addHorizontalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addNumEntry(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + // -- passive widgets - - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - + + virtual void addHorizontalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + virtual void addVerticalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + // -- soundfiles - + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; - + // -- metadata declarations + + virtual void declare(REAL* zone, const char* key, const char* val) {} +}; - virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +struct UI : public UIReal +{ + + UI() {} + virtual ~UI() {} }; #endif +/************************** END UI.h **************************/ +/************************** BEGIN meta.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -339,11 +351,14 @@ class UI struct Meta { - virtual void declare(const char* key, const char* value) = 0; virtual ~Meta() {}; + virtual void declare(const char* key, const char* value) = 0; + }; #endif +/************************** END meta.h **************************/ +/************************** BEGIN misc.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -366,7 +381,7 @@ struct Meta that work under terms of your choice, so long as this FAUST architecture section is not modified. ************************************************************************/ - + #ifndef __misc__ #define __misc__ @@ -374,6 +389,8 @@ struct Meta #include #include #include +#include +#include using std::max; @@ -395,27 +412,65 @@ static int int2pow2(int x) { int r = 0; while ((1<declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.0"); + m->declare("basics.lib/version", "0.1"); m->declare("delays.lib/name", "Faust Delay Library"); - m->declare("delays.lib/version", "0.0"); + m->declare("delays.lib/version", "0.1"); + m->declare("envelopes.lib/ar:author", "Yann Orlarey, Stéphane Letz"); m->declare("envelopes.lib/author", "GRAME"); m->declare("envelopes.lib/copyright", "GRAME"); m->declare("envelopes.lib/license", "LGPL with exception"); m->declare("envelopes.lib/name", "Faust Envelope Library"); m->declare("envelopes.lib/version", "0.0"); - m->declare("filename", "synth_ks"); + m->declare("filename", "synth_ks.dsp"); + m->declare("filters.lib/fir:author", "Julius O. Smith III"); + m->declare("filters.lib/fir:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/fir:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/highpass:author", "Julius O. Smith III"); + m->declare("filters.lib/highpass:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/iir:author", "Julius O. Smith III"); + m->declare("filters.lib/iir:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/iir:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/lowpass0_highpass1", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/lowpass0_highpass1:author", "Julius O. Smith III"); + m->declare("filters.lib/lowpass:author", "Julius O. Smith III"); + m->declare("filters.lib/lowpass:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/lowpass:license", "MIT-style STK-4.3 license"); m->declare("filters.lib/name", "Faust Filters Library"); - m->declare("filters.lib/version", "0.0"); + m->declare("filters.lib/tf2:author", "Julius O. Smith III"); + m->declare("filters.lib/tf2:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/tf2:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/tf2s:author", "Julius O. Smith III"); + m->declare("filters.lib/tf2s:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/tf2s:license", "MIT-style STK-4.3 license"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); @@ -520,36 +589,30 @@ class synth_ks : public dsp { m->declare("noises.lib/name", "Faust Noise Generator Library"); m->declare("noises.lib/version", "0.0"); m->declare("routes.lib/name", "Faust Signal Routing Library"); - m->declare("routes.lib/version", "0.0"); - m->declare("signals.lib/name", "Faust Signal Routing Library"); - m->declare("signals.lib/version", "0.0"); + m->declare("routes.lib/version", "0.1"); m->declare("spn.lib/name", "Standart Pitch Notation constants"); m->declare("spn.lib/version", "0.1"); } virtual int getNumInputs() { return 0; - } virtual int getNumOutputs() { return 1; - } virtual int getInputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { default: { rate = -1; break; } - } return rate; - } virtual int getOutputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -558,27 +621,21 @@ class synth_ks : public dsp { rate = -1; break; } - } return rate; - } - static void classInit(int samplingFreq) { - + static void classInit(int sample_rate) { } - virtual void instanceConstants(int samplingFreq) { - fSamplingFreq = samplingFreq; - fConst0 = std::min(192000.0f, std::max(1.0f, float(fSamplingFreq))); + virtual void instanceConstants(int sample_rate) { + fSampleRate = sample_rate; + fConst0 = std::min(192000.0f, std::max(1.0f, float(fSampleRate))); fConst1 = (0.00147058826f * fConst0); fConst2 = (0.00882352982f * fConst0); fConst3 = (6911.50391f / fConst0); - fConst4 = (0.00400000019f * fConst0); - fConst5 = (0.00200000009f * fConst0); - fConst6 = (500.0f / fConst0); - fConst7 = (3.14159274f / fConst0); - + fConst4 = (0.00200000009f * fConst0); + fConst5 = (3.14159274f / fConst0); } virtual void instanceResetUserInterface() { @@ -587,79 +644,54 @@ class synth_ks : public dsp { fHslider2 = FAUSTFLOAT(0.0f); fHslider3 = FAUSTFLOAT(1.0f); fHslider4 = FAUSTFLOAT(1.0f); - fButton0 = FAUSTFLOAT(0.0f); fHslider5 = FAUSTFLOAT(0.25f); + fButton0 = FAUSTFLOAT(0.0f); fHslider6 = FAUSTFLOAT(0.69999999999999996f); - } virtual void instanceClear() { IOTA = 0; for (int l0 = 0; (l0 < 2048); l0 = (l0 + 1)) { fRec7[l0] = 0.0f; - } for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { iRec12[l1] = 0; - } for (int l2 = 0; (l2 < 3); l2 = (l2 + 1)) { fRec11[l2] = 0.0f; - } for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { fVec0[l3] = 0.0f; - } for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { - fVec1[l4] = 0.0f; - - } - for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { - fVec2[l5] = 0.0f; - - } - for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { - fRec13[l6] = 0.0f; - + iRec13[l4] = 0; } - for (int l7 = 0; (l7 < 3); l7 = (l7 + 1)) { - fRec15[l7] = 0.0f; - + for (int l5 = 0; (l5 < 3); l5 = (l5 + 1)) { + fRec15[l5] = 0.0f; } - for (int l8 = 0; (l8 < 3); l8 = (l8 + 1)) { - fRec14[l8] = 0.0f; - + for (int l6 = 0; (l6 < 3); l6 = (l6 + 1)) { + fRec14[l6] = 0.0f; } - for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { - fRec16[l9] = 0.0f; - + for (int l7 = 0; (l7 < 2048); l7 = (l7 + 1)) { + fVec1[l7] = 0.0f; } - for (int l10 = 0; (l10 < 2048); l10 = (l10 + 1)) { - fVec3[l10] = 0.0f; - + for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { + fRec3[l8] = 0.0f; } - for (int l11 = 0; (l11 < 2); l11 = (l11 + 1)) { - fRec3[l11] = 0.0f; - + for (int l9 = 0; (l9 < 3); l9 = (l9 + 1)) { + fRec0[l9] = 0.0f; } - for (int l12 = 0; (l12 < 3); l12 = (l12 + 1)) { - fRec0[l12] = 0.0f; - + for (int l10 = 0; (l10 < 3); l10 = (l10 + 1)) { + fRec1[l10] = 0.0f; } - for (int l13 = 0; (l13 < 3); l13 = (l13 + 1)) { - fRec1[l13] = 0.0f; - - } - } - virtual void init(int samplingFreq) { - classInit(samplingFreq); - instanceInit(samplingFreq); + virtual void init(int sample_rate) { + classInit(sample_rate); + instanceInit(sample_rate); } - virtual void instanceInit(int samplingFreq) { - instanceConstants(samplingFreq); + virtual void instanceInit(int sample_rate) { + instanceConstants(sample_rate); instanceResetUserInterface(); instanceClear(); } @@ -667,9 +699,9 @@ class synth_ks : public dsp { virtual synth_ks* clone() { return new synth_ks(); } + virtual int getSampleRate() { - return fSamplingFreq; - + return fSampleRate; } virtual void buildUserInterface(UI* ui_interface) { @@ -683,7 +715,6 @@ class synth_ks : public dsp { ui_interface->addHorizontalSlider("pos", &fHslider6, 0.699999988f, 0.0f, 1.0f, 0.00999999978f); ui_interface->addHorizontalSlider("sharp", &fHslider5, 0.25f, 0.00999999978f, 1.0f, 0.00100000005f); ui_interface->closeBox(); - } virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { @@ -719,31 +750,26 @@ class synth_ks : public dsp { float fSlow28 = (1.0f / fSlow26); float fSlow29 = (((fSlow25 + -1.41421354f) / fSlow24) + 1.0f); float fSlow30 = (2.0f * (1.0f - (1.0f / synth_ks_faustpower2_f(fSlow24)))); - float fSlow31 = float(fButton0); - float fSlow32 = float(fHslider5); - float fSlow33 = (fSlow32 * synth_ks_faustpower2_f((1.0f - (0.219999999f * fSlow1)))); - float fSlow34 = (fConst4 * fSlow33); - float fSlow35 = (fConst5 * fSlow33); - float fSlow36 = (fConst6 / fSlow33); - float fSlow37 = float(fHslider6); - float fSlow38 = std::tan((fConst7 * ((15000.0f * fSlow37) + 500.0f))); - float fSlow39 = (1.0f / fSlow38); - float fSlow40 = (((fSlow39 + 1.41421354f) / fSlow38) + 1.0f); - float fSlow41 = (fSlow23 / fSlow40); - float fSlow42 = std::tan((fConst7 * ((500.0f * fSlow37) + 40.0f))); + float fSlow31 = float(fHslider5); + float fSlow32 = (1.0f / std::max(1.0f, (fConst4 * (fSlow31 * synth_ks_faustpower2_f((1.0f - (0.219999999f * fSlow1))))))); + float fSlow33 = float(fButton0); + float fSlow34 = float(fHslider6); + float fSlow35 = std::tan((fConst5 * ((15000.0f * fSlow34) + 500.0f))); + float fSlow36 = (1.0f / fSlow35); + float fSlow37 = (((fSlow36 + 1.41421354f) / fSlow35) + 1.0f); + float fSlow38 = (fSlow23 / fSlow37); + float fSlow39 = std::tan((fConst5 * ((500.0f * fSlow34) + 40.0f))); + float fSlow40 = (1.0f / fSlow39); + float fSlow41 = (1.0f / (((fSlow40 + 1.41421354f) / fSlow39) + 1.0f)); + float fSlow42 = synth_ks_faustpower2_f(fSlow39); float fSlow43 = (1.0f / fSlow42); - float fSlow44 = (1.0f / (((fSlow43 + 1.41421354f) / fSlow42) + 1.0f)); - float fSlow45 = synth_ks_faustpower2_f(fSlow42); - float fSlow46 = (1.0f / fSlow45); - float fSlow47 = (2.0f * (1.0f - fSlow46)); - float fSlow48 = (((fSlow43 + -1.41421354f) / fSlow42) + 1.0f); - float fSlow49 = (0.0f - (2.0f / fSlow45)); - float fSlow50 = (1.0f / fSlow40); - float fSlow51 = (2.0f * (1.0f - (1.0f / synth_ks_faustpower2_f(fSlow38)))); - float fSlow52 = (((fSlow39 + -1.41421354f) / fSlow38) + 1.0f); - float fSlow53 = (fConst4 * fSlow32); - float fSlow54 = (fConst5 * fSlow32); - float fSlow55 = (fConst6 / fSlow32); + float fSlow44 = (((fSlow40 + -1.41421354f) / fSlow39) + 1.0f); + float fSlow45 = (2.0f * (1.0f - fSlow43)); + float fSlow46 = (0.0f - (2.0f / fSlow42)); + float fSlow47 = (1.0f / fSlow37); + float fSlow48 = (((fSlow36 + -1.41421354f) / fSlow35) + 1.0f); + float fSlow49 = (2.0f * (1.0f - (1.0f / synth_ks_faustpower2_f(fSlow35)))); + float fSlow50 = (1.0f / std::max(1.0f, (fConst4 * fSlow31))); for (int i = 0; (i < count); i = (i + 1)) { float fTemp0 = (fSlow0 * (fRec1[1] + fRec1[2])); fRec7[(IOTA & 2047)] = fTemp0; @@ -751,23 +777,19 @@ class synth_ks : public dsp { iRec12[0] = ((1103515245 * iRec12[1]) + 12345); float fTemp1 = (4.65661287e-10f * float(iRec12[0])); fRec11[0] = (fTemp1 - (fSlow28 * ((fSlow29 * fRec11[2]) + (fSlow30 * fRec11[1])))); - fVec0[0] = fSlow31; - int iTemp2 = (((fSlow31 - fVec0[1]) > 0.0f) > 0); - fVec1[0] = fSlow32; - fVec2[0] = fSlow33; - fRec13[0] = (iTemp2?0.0f:std::min(fSlow34, ((fRec13[1] + (fConst4 * (fSlow33 - fVec2[1]))) + 1.0f))); - int iTemp3 = (fRec13[0] < fSlow35); - fRec15[0] = (fTemp1 - (fSlow44 * ((fSlow47 * fRec15[1]) + (fSlow48 * fRec15[2])))); - fRec14[0] = ((fSlow44 * (((fSlow46 * fRec15[0]) + (fSlow49 * fRec15[1])) + (fSlow46 * fRec15[2]))) - (fSlow50 * ((fSlow51 * fRec14[1]) + (fSlow52 * fRec14[2])))); - fRec16[0] = (iTemp2?0.0f:std::min(fSlow53, (((fConst4 * (fSlow32 - fVec1[1])) + fRec16[1]) + 1.0f))); - int iTemp4 = (fRec16[0] < fSlow54); - float fTemp5 = (iSlow22?(fSlow41 * ((fRec14[2] + ((2.0f * fRec14[1]) + fRec14[0])) * (iTemp4?((fRec16[0] < 0.0f)?0.0f:(iTemp4?(fSlow55 * fRec16[0]):1.0f)):((fRec16[0] < fSlow53)?((fSlow55 * (0.0f - (fRec16[0] - fSlow54))) + 1.0f):0.0f)))):(fSlow27 * ((fRec11[2] + ((2.0f * fRec11[1]) + fRec11[0])) * (iTemp3?((fRec13[0] < 0.0f)?0.0f:(iTemp3?(fSlow36 * fRec13[0]):1.0f)):((fRec13[0] < fSlow34)?((fSlow36 * (0.0f - (fRec13[0] - fSlow35))) + 1.0f):0.0f))))); + fVec0[0] = fSlow33; + iRec13[0] = ((fSlow33 > fVec0[1]) + ((fSlow33 <= fVec0[1]) * (iRec13[1] + (iRec13[1] > 0)))); + float fTemp2 = float(iRec13[0]); + float fTemp3 = (fSlow32 * fTemp2); + fRec15[0] = (fTemp1 - (fSlow41 * ((fSlow44 * fRec15[2]) + (fSlow45 * fRec15[1])))); + fRec14[0] = ((fSlow41 * (((fSlow43 * fRec15[0]) + (fSlow46 * fRec15[1])) + (fSlow43 * fRec15[2]))) - (fSlow47 * ((fSlow48 * fRec14[2]) + (fSlow49 * fRec14[1])))); + float fTemp4 = (fSlow50 * fTemp2); + float fTemp5 = (iSlow22 ? (fSlow38 * ((fRec14[2] + (fRec14[0] + (2.0f * fRec14[1]))) * std::max(0.0f, std::min(fTemp4, (2.0f - fTemp4))))) : (fSlow27 * ((fRec11[2] + (fRec11[0] + (2.0f * fRec11[1]))) * std::max(0.0f, std::min(fTemp3, (2.0f - fTemp3)))))); float fTemp6 = (fRec0[2] + fTemp5); - fVec3[(IOTA & 2047)] = fTemp6; - float fTemp7 = (fSlow9 * fVec3[((IOTA - iSlow11) & 2047)]); - float fTemp8 = (fSlow12 * ((((fSlow15 * fVec3[((IOTA - iSlow16) & 2047)]) + (fSlow13 * fVec3[((IOTA - iSlow14) & 2047)])) + (fSlow18 * fVec3[((IOTA - iSlow19) & 2047)])) + (fSlow20 * fVec3[((IOTA - iSlow21) & 2047)]))); - float fRec9 = (fTemp7 + fTemp8); - float fRec10 = ((fTemp0 + fTemp7) + fTemp8); + fVec1[(IOTA & 2047)] = fTemp6; + float fTemp7 = ((fSlow9 * fVec1[((IOTA - iSlow11) & 2047)]) + (fSlow12 * ((((fSlow13 * fVec1[((IOTA - iSlow14) & 2047)]) + (fSlow15 * fVec1[((IOTA - iSlow16) & 2047)])) + (fSlow18 * fVec1[((IOTA - iSlow19) & 2047)])) + (fSlow20 * fVec1[((IOTA - iSlow21) & 2047)])))); + float fRec9 = fTemp7; + float fRec10 = (fTemp0 + fTemp7); fRec3[0] = fRec8; float fRec4 = (fTemp5 + fRec3[1]); float fRec5 = fRec9; @@ -781,25 +803,19 @@ class synth_ks : public dsp { fRec11[2] = fRec11[1]; fRec11[1] = fRec11[0]; fVec0[1] = fVec0[0]; - fVec1[1] = fVec1[0]; - fVec2[1] = fVec2[0]; - fRec13[1] = fRec13[0]; + iRec13[1] = iRec13[0]; fRec15[2] = fRec15[1]; fRec15[1] = fRec15[0]; fRec14[2] = fRec14[1]; fRec14[1] = fRec14[0]; - fRec16[1] = fRec16[0]; fRec3[1] = fRec3[0]; fRec0[2] = fRec0[1]; fRec0[1] = fRec0[0]; fRec1[2] = fRec1[1]; fRec1[1] = fRec1[0]; - } - } - }; // clang-format on #endif diff --git a/ceammc/ext/src/synth/synth_marimba.h b/ceammc/ext/src/synth/synth_marimba.h index 3442d4b7e3..a293c6da3b 100644 --- a/ceammc/ext/src/synth/synth_marimba.h +++ b/ceammc/ext/src/synth/synth_marimba.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "synth.marimba" -Code generated with Faust 2.15.0 (https://faust.grame.fr) -Compilation options: cpp, -scal -ftz 0 +Code generated with Faust 2.22.1 (https://faust.grame.fr) +Compilation options: -lang cpp -scal -ftz 0 ------------------------------------------------------------ */ #ifndef __synth_marimba_H__ @@ -14,6 +14,7 @@ Compilation options: cpp, -scal -ftz 0 #include #include +/************************** BEGIN dsp.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -96,23 +97,23 @@ class dsp { * - static class 'classInit': static tables initialization * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void init(int samplingRate) = 0; + virtual void init(int sample_rate) = 0; /** * Init instance state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceInit(int samplingRate) = 0; + virtual void instanceInit(int sample_rate) = 0; /** * Init instance constant state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceConstants(int samplingRate) = 0; + virtual void instanceConstants(int sample_rate) = 0; /* Init default control parameters values */ virtual void instanceResetUserInterface() = 0; @@ -149,8 +150,8 @@ class dsp { * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the number of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) * */ virtual void compute(double /*date_usec*/, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -169,16 +170,16 @@ class decorator_dsp : public dsp { public: - decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + decorator_dsp(dsp* dsp = nullptr):fDSP(dsp) {} virtual ~decorator_dsp() { delete fDSP; } virtual int getNumInputs() { return fDSP->getNumInputs(); } virtual int getNumOutputs() { return fDSP->getNumOutputs(); } virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } virtual int getSampleRate() { return fDSP->getSampleRate(); } - virtual void init(int samplingRate) { fDSP->init(samplingRate); } - virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } - virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void init(int sample_rate) { fDSP->init(sample_rate); } + virtual void instanceInit(int sample_rate) { fDSP->instanceInit(sample_rate); } + virtual void instanceConstants(int sample_rate) { fDSP->instanceConstants(sample_rate); } virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } @@ -233,6 +234,8 @@ class dsp_factory { #endif #endif +/************************** END dsp.h **************************/ +/************************** BEGIN UI.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -272,45 +275,54 @@ class dsp_factory { struct Soundfile; -class UI +template +class UIReal { - + public: - - UI() {} - - virtual ~UI() {} - + + UIReal() {} + virtual ~UIReal() {} + // -- widget's layouts - + virtual void openTabBox(const char* label) = 0; virtual void openHorizontalBox(const char* label) = 0; virtual void openVerticalBox(const char* label) = 0; virtual void closeBox() = 0; - + // -- active widgets - - virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - + + virtual void addButton(const char* label, REAL* zone) = 0; + virtual void addCheckButton(const char* label, REAL* zone) = 0; + virtual void addVerticalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addHorizontalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addNumEntry(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + // -- passive widgets - - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - + + virtual void addHorizontalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + virtual void addVerticalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + // -- soundfiles - + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; - + // -- metadata declarations + + virtual void declare(REAL* zone, const char* key, const char* val) {} +}; - virtual void declare(FAUSTFLOAT*, const char*, const char*) {} +struct UI : public UIReal +{ + + UI() {} + virtual ~UI() {} }; #endif +/************************** END UI.h **************************/ +/************************** BEGIN meta.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -339,11 +351,14 @@ class UI struct Meta { - virtual void declare(const char* key, const char* value) = 0; virtual ~Meta() {}; + virtual void declare(const char* key, const char* value) = 0; + }; #endif +/************************** END meta.h **************************/ +/************************** BEGIN misc.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -366,7 +381,7 @@ struct Meta that work under terms of your choice, so long as this FAUST architecture section is not modified. ************************************************************************/ - + #ifndef __misc__ #define __misc__ @@ -374,6 +389,8 @@ struct Meta #include #include #include +#include +#include using std::max; @@ -395,27 +412,65 @@ static int int2pow2(int x) { int r = 0; while ((1< #include -static float fsynth_marimbaSIG0Wave0[250] = {1.0f,0.776724994f,0.625723004f,0.855223f,0.760159016f,0.69837302f,0.768010974f,0.64112699f,0.244034007f,0.707754016f,0.634012997f,0.247527003f,0.660848975f,0.450396001f,0.567782998f,0.106361002f,0.716813982f,0.663919985f,0.291207999f,0.310598999f,0.801495016f,0.635291994f,0.307435006f,0.874123991f,0.497667998f,0.487087995f,0.459114999f,0.733455002f,0.541818023f,0.441318005f,0.313919991f,0.40309f,0.685352981f,0.603139997f,0.400552005f,0.453511f,0.634386003f,0.291547f,0.131604999f,0.368506998f,0.839906991f,0.602159977f,0.288296014f,0.579670012f,0.0242493004f,0.262746006f,0.368588001f,0.890284002f,0.408962995f,0.556071997f,0.884427011f,0.832109988f,0.612015009f,0.757175982f,0.919476986f,1.0f,0.827962995f,0.89240998f,0.0357408002f,0.480789006f,0.75287199f,0.0546301007f,0.235936999f,0.362937987f,0.444471985f,0.101751f,0.703418016f,0.453135997f,0.316628993f,0.490393996f,0.982508004f,0.551621974f,0.602008998f,0.666957021f,0.776830018f,0.905662f,0.0987197012f,0.402967989f,0.829451978f,0.307644993f,0.640479982f,0.983971f,0.584204972f,0.650364995f,0.334446996f,0.583570004f,0.540190995f,0.672533989f,0.245711997f,0.687298f,0.883058012f,0.792949975f,0.600619018f,0.572682023f,0.122612f,0.388247997f,0.290657997f,0.380255014f,0.290966988f,0.567818999f,0.0737721026f,0.42098999f,0.0786577985f,0.393994987f,0.268983006f,0.260614008f,0.494085997f,0.238025993f,0.0987823978f,0.277879f,0.440562993f,0.0770211965f,0.450590998f,0.128137007f,0.0368275009f,0.128699005f,0.329605013f,0.374511987f,0.363590002f,0.272594005f,0.379052013f,0.305240989f,0.0741128996f,0.34572801f,0.299349993f,0.221284002f,0.0261390992f,0.293202013f,0.361885011f,0.114330001f,0.239004999f,0.434156001f,0.329582989f,0.219459996f,0.284175009f,0.198554993f,0.431975991f,0.302985013f,1.0f,0.146220997f,0.140700996f,0.264243007f,0.185996994f,0.426322013f,0.304780006f,0.343989998f,0.195429996f,0.386954993f,0.187600002f,0.172812f,0.0434115008f,0.303761005f,0.0694539994f,0.453943014f,0.832450986f,0.317817003f,0.940600991f,1.0f,0.180657998f,0.737921f,0.832297027f,0.402352005f,0.126785994f,0.594398022f,0.485455006f,0.324470013f,0.365101993f,0.777921975f,0.588271976f,0.401353002f,0.610734999f,0.158693001f,0.0746072009f,0.825098991f,0.925459027f,0.65377003f,0.260791987f,0.719384015f,0.559907973f,0.372590005f,0.360035002f,0.622938991f,0.210271001f,0.444595009f,0.311286002f,0.464309007f,0.557231009f,0.524079978f,0.0701055974f,0.320749015f,0.194460005f,0.727608979f,0.522062004f,0.394003987f,0.235035002f,0.395646006f,0.494796008f,0.51731801f,0.109751999f,0.69284898f,0.00632009003f,0.0207582992f,0.00306107011f,0.0637191013f,0.0816610008f,0.0351100005f,0.127813995f,0.202294007f,0.0764145032f,0.263126999f,0.400198996f,0.267277986f,0.633385003f,1.0f,0.73990202f,0.413762987f,0.418110013f,0.612715006f,0.67237401f,0.339673996f,0.211720005f,0.459645003f,0.102499999f,0.325890005f,0.148154005f,0.265442014f,0.0974304974f,0.286437988f,0.275213003f,0.109111004f,0.575088978f,0.370283008f,0.29411f,0.259826005f,0.0648718998f,0.583418012f,0.282662988f,0.182004005f,0.117421001f,0.417726994f,0.169650003f,0.24853f,0.122818999f,0.185486004f,0.0433618017f,0.373849005f,0.25276801f,0.195103005f,0.0927835032f,0.166543007f}; - +const static float fsynth_marimbaSIG0Wave0[250] = {1.0f,0.776724994f,0.625723004f,0.855223f,0.760159016f,0.69837302f,0.768010974f,0.64112699f,0.244034007f,0.707754016f,0.634012997f,0.247527003f,0.660848975f,0.450396001f,0.567782998f,0.106361002f,0.716813982f,0.663919985f,0.291207999f,0.310598999f,0.801495016f,0.635291994f,0.307435006f,0.874123991f,0.497667998f,0.487087995f,0.459114999f,0.733455002f,0.541818023f,0.441318005f,0.313919991f,0.40309f,0.685352981f,0.603139997f,0.400552005f,0.453511f,0.634386003f,0.291547f,0.131604999f,0.368506998f,0.839906991f,0.602159977f,0.288296014f,0.579670012f,0.0242493004f,0.262746006f,0.368588001f,0.890284002f,0.408962995f,0.556071997f,0.884427011f,0.832109988f,0.612015009f,0.757175982f,0.919476986f,1.0f,0.827962995f,0.89240998f,0.0357408002f,0.480789006f,0.75287199f,0.0546301007f,0.235936999f,0.362937987f,0.444471985f,0.101751f,0.703418016f,0.453135997f,0.316628993f,0.490393996f,0.982508004f,0.551621974f,0.602008998f,0.666957021f,0.776830018f,0.905662f,0.0987197012f,0.402967989f,0.829451978f,0.307644993f,0.640479982f,0.983971f,0.584204972f,0.650364995f,0.334446996f,0.583570004f,0.540190995f,0.672533989f,0.245711997f,0.687298f,0.883058012f,0.792949975f,0.600619018f,0.572682023f,0.122612f,0.388247997f,0.290657997f,0.380255014f,0.290966988f,0.567818999f,0.0737721026f,0.42098999f,0.0786577985f,0.393994987f,0.268983006f,0.260614008f,0.494085997f,0.238025993f,0.0987823978f,0.277879f,0.440562993f,0.0770211965f,0.450590998f,0.128137007f,0.0368275009f,0.128699005f,0.329605013f,0.374511987f,0.363590002f,0.272594005f,0.379052013f,0.305240989f,0.0741128996f,0.34572801f,0.299349993f,0.221284002f,0.0261390992f,0.293202013f,0.361885011f,0.114330001f,0.239004999f,0.434156001f,0.329582989f,0.219459996f,0.284175009f,0.198554993f,0.431975991f,0.302985013f,1.0f,0.146220997f,0.140700996f,0.264243007f,0.185996994f,0.426322013f,0.304780006f,0.343989998f,0.195429996f,0.386954993f,0.187600002f,0.172812f,0.0434115008f,0.303761005f,0.0694539994f,0.453943014f,0.832450986f,0.317817003f,0.940600991f,1.0f,0.180657998f,0.737921f,0.832297027f,0.402352005f,0.126785994f,0.594398022f,0.485455006f,0.324470013f,0.365101993f,0.777921975f,0.588271976f,0.401353002f,0.610734999f,0.158693001f,0.0746072009f,0.825098991f,0.925459027f,0.65377003f,0.260791987f,0.719384015f,0.559907973f,0.372590005f,0.360035002f,0.622938991f,0.210271001f,0.444595009f,0.311286002f,0.464309007f,0.557231009f,0.524079978f,0.0701055974f,0.320749015f,0.194460005f,0.727608979f,0.522062004f,0.394003987f,0.235035002f,0.395646006f,0.494796008f,0.51731801f,0.109751999f,0.69284898f,0.00632009003f,0.0207582992f,0.00306107011f,0.0637191013f,0.0816610008f,0.0351100005f,0.127813995f,0.202294007f,0.0764145032f,0.263126999f,0.400198996f,0.267277986f,0.633385003f,1.0f,0.73990202f,0.413762987f,0.418110013f,0.612715006f,0.67237401f,0.339673996f,0.211720005f,0.459645003f,0.102499999f,0.325890005f,0.148154005f,0.265442014f,0.0974304974f,0.286437988f,0.275213003f,0.109111004f,0.575088978f,0.370283008f,0.29411f,0.259826005f,0.0648718998f,0.583418012f,0.282662988f,0.182004005f,0.117421001f,0.417726994f,0.169650003f,0.24853f,0.122818999f,0.185486004f,0.0433618017f,0.373849005f,0.25276801f,0.195103005f,0.0927835032f,0.166543007f}; class synth_marimbaSIG0 { private: @@ -458,27 +512,23 @@ class synth_marimbaSIG0 { int getNumInputssynth_marimbaSIG0() { return 0; - } int getNumOutputssynth_marimbaSIG0() { return 1; - } int getInputRatesynth_marimbaSIG0(int channel) { int rate; - switch (channel) { + switch ((channel)) { default: { rate = -1; break; } - } return rate; - } int getOutputRatesynth_marimbaSIG0(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 0; break; @@ -487,39 +537,35 @@ class synth_marimbaSIG0 { rate = -1; break; } - } return rate; - } - void instanceInitsynth_marimbaSIG0(int samplingFreq) { + void instanceInitsynth_marimbaSIG0(int sample_rate) { fsynth_marimbaSIG0Wave0_idx = 0; - } - void fillsynth_marimbaSIG0(int count, float* output) { + void fillsynth_marimbaSIG0(int count, float* table) { for (int i = 0; (i < count); i = (i + 1)) { - output[i] = fsynth_marimbaSIG0Wave0[fsynth_marimbaSIG0Wave0_idx]; + table[i] = fsynth_marimbaSIG0Wave0[fsynth_marimbaSIG0Wave0_idx]; fsynth_marimbaSIG0Wave0_idx = ((1 + fsynth_marimbaSIG0Wave0_idx) % 250); - } - } + }; -synth_marimbaSIG0* newsynth_marimbaSIG0() { return (synth_marimbaSIG0*)new synth_marimbaSIG0(); } -void deletesynth_marimbaSIG0(synth_marimbaSIG0* dsp) { delete dsp; } +static synth_marimbaSIG0* newsynth_marimbaSIG0() { return (synth_marimbaSIG0*)new synth_marimbaSIG0(); } +static void deletesynth_marimbaSIG0(synth_marimbaSIG0* dsp) { delete dsp; } static float synth_marimba_faustpower2_f(float value) { return (value * value); - } static float ftbl0synth_marimbaSIG0[250]; #ifndef FAUSTCLASS #define FAUSTCLASS synth_marimba #endif + #ifdef __APPLE__ #define exp10f __exp10f #define exp10 __exp10 @@ -530,7 +576,7 @@ class synth_marimba : public dsp { private: int iRec0[2]; - int fSamplingFreq; + int fSampleRate; float fConst0; float fConst1; FAUSTFLOAT fHslider0; @@ -554,285 +600,301 @@ class synth_marimba : public dsp { float fRec8[3]; float fConst11; float fRec7[3]; - FAUSTFLOAT fButton0; - float fVec1[2]; float fConst12; FAUSTFLOAT fHslider3; - float fVec2[2]; - float fRec10[2]; + FAUSTFLOAT fButton0; + float fVec1[2]; + int iRec10[2]; float fConst13; float fConst14; float fConst15; float fConst16; + float fRec6[3]; float fConst17; + FAUSTFLOAT fHslider4; float fConst18; - float fRec6[3]; float fConst19; - FAUSTFLOAT fHslider4; float fConst20; float fConst21; + float fRec11[3]; float fConst22; float fConst23; - float fRec11[3]; float fConst24; float fConst25; + float fRec12[3]; float fConst26; float fConst27; - float fRec12[3]; float fConst28; float fConst29; + float fRec13[3]; float fConst30; float fConst31; - float fRec13[3]; float fConst32; float fConst33; + float fRec14[3]; float fConst34; float fConst35; - float fRec14[3]; float fConst36; float fConst37; + float fRec15[3]; float fConst38; float fConst39; - float fRec15[3]; float fConst40; float fConst41; + float fRec16[3]; float fConst42; float fConst43; - float fRec16[3]; float fConst44; float fConst45; + float fRec17[3]; float fConst46; float fConst47; - float fRec17[3]; float fConst48; float fConst49; + float fRec18[3]; float fConst50; float fConst51; - float fRec18[3]; float fConst52; float fConst53; + float fRec19[3]; float fConst54; float fConst55; - float fRec19[3]; float fConst56; float fConst57; + float fRec20[3]; float fConst58; float fConst59; - float fRec20[3]; float fConst60; float fConst61; + float fRec21[3]; float fConst62; float fConst63; - float fRec21[3]; float fConst64; float fConst65; + float fRec22[3]; float fConst66; float fConst67; - float fRec22[3]; float fConst68; float fConst69; + float fRec23[3]; float fConst70; float fConst71; - float fRec23[3]; float fConst72; float fConst73; + float fRec24[3]; float fConst74; float fConst75; - float fRec24[3]; float fConst76; float fConst77; + float fRec25[3]; float fConst78; float fConst79; - float fRec25[3]; float fConst80; float fConst81; + float fRec26[3]; float fConst82; float fConst83; - float fRec26[3]; float fConst84; float fConst85; + float fRec27[3]; float fConst86; float fConst87; - float fRec27[3]; float fConst88; float fConst89; + float fRec28[3]; float fConst90; float fConst91; - float fRec28[3]; float fConst92; float fConst93; + float fRec29[3]; float fConst94; float fConst95; - float fRec29[3]; float fConst96; float fConst97; + float fRec30[3]; float fConst98; float fConst99; - float fRec30[3]; float fConst100; float fConst101; + float fRec31[3]; float fConst102; float fConst103; - float fRec31[3]; float fConst104; float fConst105; + float fRec32[3]; float fConst106; float fConst107; - float fRec32[3]; float fConst108; float fConst109; + float fRec33[3]; float fConst110; float fConst111; - float fRec33[3]; float fConst112; float fConst113; + float fRec34[3]; float fConst114; float fConst115; - float fRec34[3]; float fConst116; float fConst117; + float fRec35[3]; float fConst118; float fConst119; - float fRec35[3]; float fConst120; float fConst121; + float fRec36[3]; float fConst122; float fConst123; - float fRec36[3]; float fConst124; float fConst125; + float fRec37[3]; float fConst126; float fConst127; - float fRec37[3]; float fConst128; float fConst129; + float fRec38[3]; float fConst130; float fConst131; - float fRec38[3]; float fConst132; float fConst133; + float fRec39[3]; float fConst134; float fConst135; - float fRec39[3]; float fConst136; float fConst137; + float fRec40[3]; float fConst138; float fConst139; - float fRec40[3]; float fConst140; float fConst141; + float fRec41[3]; float fConst142; float fConst143; - float fRec41[3]; float fConst144; float fConst145; + float fRec42[3]; float fConst146; float fConst147; - float fRec42[3]; float fConst148; float fConst149; + float fRec43[3]; float fConst150; float fConst151; - float fRec43[3]; float fConst152; float fConst153; + float fRec44[3]; float fConst154; float fConst155; - float fRec44[3]; float fConst156; float fConst157; + float fRec45[3]; float fConst158; float fConst159; - float fRec45[3]; float fConst160; float fConst161; + float fRec46[3]; float fConst162; float fConst163; - float fRec46[3]; float fConst164; float fConst165; + float fRec47[3]; float fConst166; float fConst167; - float fRec47[3]; float fConst168; float fConst169; + float fRec48[3]; float fConst170; float fConst171; - float fRec48[3]; float fConst172; float fConst173; + float fRec49[3]; float fConst174; float fConst175; - float fRec49[3]; float fConst176; float fConst177; + float fRec50[3]; float fConst178; float fConst179; - float fRec50[3]; float fConst180; float fConst181; + float fRec51[3]; float fConst182; float fConst183; - float fRec51[3]; float fConst184; float fConst185; + float fRec52[3]; float fConst186; float fConst187; - float fRec52[3]; float fConst188; float fConst189; + float fRec53[3]; float fConst190; float fConst191; - float fRec53[3]; float fConst192; float fConst193; + float fRec54[3]; float fConst194; float fConst195; - float fRec54[3]; float fConst196; float fConst197; + float fRec55[3]; float fConst198; float fConst199; - float fRec55[3]; float fConst200; float fConst201; + float fRec56[3]; float fConst202; float fConst203; - float fRec56[3]; float fConst204; float fConst205; + float fRec57[3]; float fConst206; float fConst207; - float fRec57[3]; float fConst208; float fConst209; + float fRec58[3]; float fConst210; float fConst211; - float fRec58[3]; float fConst212; float fConst213; - float fConst214; - float fConst215; float fRec59[3]; - float fVec3[2]; - float fVec4[2048]; + float fVec2[2]; + float fVec3[2048]; float fRec3[2]; public: void metadata(Meta* m) { m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.0"); + m->declare("basics.lib/version", "0.1"); m->declare("delays.lib/name", "Faust Delay Library"); - m->declare("delays.lib/version", "0.0"); + m->declare("delays.lib/version", "0.1"); + m->declare("envelopes.lib/ar:author", "Yann Orlarey, Stéphane Letz"); m->declare("envelopes.lib/author", "GRAME"); m->declare("envelopes.lib/copyright", "GRAME"); m->declare("envelopes.lib/license", "LGPL with exception"); m->declare("envelopes.lib/name", "Faust Envelope Library"); m->declare("envelopes.lib/version", "0.0"); - m->declare("filename", "synth_marimba"); + m->declare("filename", "synth_marimba.dsp"); + m->declare("filters.lib/fir:author", "Julius O. Smith III"); + m->declare("filters.lib/fir:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/fir:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/highpass:author", "Julius O. Smith III"); + m->declare("filters.lib/highpass:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/iir:author", "Julius O. Smith III"); + m->declare("filters.lib/iir:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/iir:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/lowpass0_highpass1", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/lowpass0_highpass1:author", "Julius O. Smith III"); + m->declare("filters.lib/lowpass:author", "Julius O. Smith III"); + m->declare("filters.lib/lowpass:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/lowpass:license", "MIT-style STK-4.3 license"); m->declare("filters.lib/name", "Faust Filters Library"); - m->declare("filters.lib/version", "0.0"); + m->declare("filters.lib/tf2:author", "Julius O. Smith III"); + m->declare("filters.lib/tf2:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/tf2:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/tf2s:author", "Julius O. Smith III"); + m->declare("filters.lib/tf2s:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/tf2s:license", "MIT-style STK-4.3 license"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); @@ -842,7 +904,7 @@ class synth_marimba : public dsp { m->declare("noises.lib/name", "Faust Noise Generator Library"); m->declare("noises.lib/version", "0.0"); m->declare("routes.lib/name", "Faust Signal Routing Library"); - m->declare("routes.lib/version", "0.0"); + m->declare("routes.lib/version", "0.1"); m->declare("signals.lib/name", "Faust Signal Routing Library"); m->declare("signals.lib/version", "0.0"); m->declare("spn.lib/name", "Standart Pitch Notation constants"); @@ -851,27 +913,23 @@ class synth_marimba : public dsp { virtual int getNumInputs() { return 0; - } virtual int getNumOutputs() { return 1; - } virtual int getInputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { default: { rate = -1; break; } - } return rate; - } virtual int getOutputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -880,23 +938,20 @@ class synth_marimba : public dsp { rate = -1; break; } - } return rate; - } - static void classInit(int samplingFreq) { + static void classInit(int sample_rate) { synth_marimbaSIG0* sig0 = newsynth_marimbaSIG0(); - sig0->instanceInitsynth_marimbaSIG0(samplingFreq); + sig0->instanceInitsynth_marimbaSIG0(sample_rate); sig0->fillsynth_marimbaSIG0(250, ftbl0synth_marimbaSIG0); deletesynth_marimbaSIG0(sig0); - } - virtual void instanceConstants(int samplingFreq) { - fSamplingFreq = samplingFreq; - fConst0 = std::min(192000.0f, std::max(1.0f, float(fSamplingFreq))); + virtual void instanceConstants(int sample_rate) { + fSampleRate = sample_rate; + fConst0 = std::min(192000.0f, std::max(1.0f, float(fSampleRate))); fConst1 = (0.00147058826f * fConst0); fConst2 = (0.00882352982f * fConst0); fConst3 = (3.14159274f / fConst0); @@ -908,490 +963,418 @@ class synth_marimba : public dsp { fConst9 = (((fConst5 + -1.41421354f) / fConst4) + 1.0f); fConst10 = (2.0f * (1.0f - fConst8)); fConst11 = (0.0f - (2.0f / fConst7)); - fConst12 = (0.00400000019f * fConst0); - fConst13 = (0.00200000009f * fConst0); - fConst14 = (500.0f / fConst0); - fConst15 = std::pow(0.00100000005f, (2755.63037f / fConst0)); - fConst16 = (0.0f - (2.0f * fConst15)); - fConst17 = (365643.438f / fConst0); - fConst18 = synth_marimba_faustpower2_f(fConst15); - fConst19 = ((0.5f * fConst0) + -1.0f); - fConst20 = std::pow(0.00100000005f, (2311.80176f / fConst0)); - fConst21 = (0.0f - (2.0f * fConst20)); - fConst22 = (359348.438f / fConst0); - fConst23 = synth_marimba_faustpower2_f(fConst20); - fConst24 = std::pow(0.00100000005f, (1859.39001f / fConst0)); - fConst25 = (0.0f - (2.0f * fConst24)); - fConst26 = (351228.812f / fConst0); - fConst27 = synth_marimba_faustpower2_f(fConst24); - fConst28 = std::pow(0.00100000005f, (1095.63586f / fConst0)); - fConst29 = (0.0f - (2.0f * fConst28)); - fConst30 = (329971.781f / fConst0); - fConst31 = synth_marimba_faustpower2_f(fConst28); - fConst32 = std::pow(0.00100000005f, (773.212891f / fConst0)); - fConst33 = (0.0f - (2.0f * fConst32)); - fConst34 = (314683.531f / fConst0); - fConst35 = synth_marimba_faustpower2_f(fConst32); - fConst36 = std::pow(0.00100000005f, (142.914078f / fConst0)); - fConst37 = (0.0f - (2.0f * fConst36)); - fConst38 = (223483.484f / fConst0); - fConst39 = synth_marimba_faustpower2_f(fConst36); - fConst40 = std::pow(0.00100000005f, (130.309692f / fConst0)); - fConst41 = (0.0f - (2.0f * fConst40)); - fConst42 = (217552.031f / fConst0); - fConst43 = synth_marimba_faustpower2_f(fConst40); - fConst44 = std::pow(0.00100000005f, (109.456856f / fConst0)); - fConst45 = (0.0f - (2.0f * fConst44)); - fConst46 = (206046.031f / fConst0); - fConst47 = synth_marimba_faustpower2_f(fConst44); - fConst48 = std::pow(0.00100000005f, (80.8901215f / fConst0)); - fConst49 = (0.0f - (2.0f * fConst48)); - fConst50 = (185114.125f / fConst0); - fConst51 = synth_marimba_faustpower2_f(fConst48); - fConst52 = std::pow(0.00100000005f, (76.0668716f / fConst0)); - fConst53 = (0.0f - (2.0f * fConst52)); - fConst54 = (180702.094f / fConst0); - fConst55 = synth_marimba_faustpower2_f(fConst52); - fConst56 = std::pow(0.00100000005f, (70.9964905f / fConst0)); - fConst57 = (0.0f - (2.0f * fConst56)); - fConst58 = (175686.562f / fConst0); - fConst59 = synth_marimba_faustpower2_f(fConst56); - fConst60 = std::pow(0.00100000005f, (58.4253006f / fConst0)); - fConst61 = (0.0f - (2.0f * fConst60)); - fConst62 = (161137.562f / fConst0); - fConst63 = synth_marimba_faustpower2_f(fConst60); - fConst64 = std::pow(0.00100000005f, (47.4399223f / fConst0)); - fConst65 = (0.0f - (2.0f * fConst64)); - fConst66 = (144948.062f / fConst0); - fConst67 = synth_marimba_faustpower2_f(fConst64); - fConst68 = std::pow(0.00100000005f, (45.1752319f / fConst0)); - fConst69 = (0.0f - (2.0f * fConst68)); - fConst70 = (141047.203f / fConst0); - fConst71 = synth_marimba_faustpower2_f(fConst68); - fConst72 = std::pow(0.00100000005f, (40.2636795f / fConst0)); - fConst73 = (0.0f - (2.0f * fConst72)); - fConst74 = (131716.406f / fConst0); - fConst75 = synth_marimba_faustpower2_f(fConst72); - fConst76 = std::pow(0.00100000005f, (31.3811016f / fConst0)); - fConst77 = (0.0f - (2.0f * fConst76)); - fConst78 = (110759.336f / fConst0); - fConst79 = synth_marimba_faustpower2_f(fConst76); - fConst80 = std::pow(0.00100000005f, (29.2639236f / fConst0)); - fConst81 = (0.0f - (2.0f * fConst80)); - fConst82 = (104696.289f / fConst0); - fConst83 = synth_marimba_faustpower2_f(fConst80); - fConst84 = std::pow(0.00100000005f, (28.5368156f / fConst0)); - fConst85 = (0.0f - (2.0f * fConst84)); - fConst86 = (102491.523f / fConst0); - fConst87 = synth_marimba_faustpower2_f(fConst84); - fConst88 = std::pow(0.00100000005f, (22.2695656f / fConst0)); - fConst89 = (0.0f - (2.0f * fConst88)); - fConst90 = (80157.9609f / fConst0); - fConst91 = synth_marimba_faustpower2_f(fConst88); - fConst92 = std::pow(0.00100000005f, (20.4824104f / fConst0)); - fConst93 = (0.0f - (2.0f * fConst92)); - fConst94 = (72370.3594f / fConst0); - fConst95 = synth_marimba_faustpower2_f(fConst92); - fConst96 = std::pow(0.00100000005f, (17.6309834f / fConst0)); - fConst97 = (0.0f - (2.0f * fConst96)); - fConst98 = (58084.832f / fConst0); - fConst99 = synth_marimba_faustpower2_f(fConst96); - fConst100 = std::pow(0.00100000005f, (16.3652077f / fConst0)); - fConst101 = (0.0f - (2.0f * fConst100)); - fConst102 = (50824.4336f / fConst0); - fConst103 = synth_marimba_faustpower2_f(fConst100); - fConst104 = std::pow(0.00100000005f, (14.5330687f / fConst0)); - fConst105 = (0.0f - (2.0f * fConst104)); - fConst106 = (39027.6016f / fConst0); - fConst107 = synth_marimba_faustpower2_f(fConst104); - fConst108 = std::pow(0.00100000005f, (12.8027573f / fConst0)); - fConst109 = (0.0f - (2.0f * fConst108)); - fConst110 = (26119.3477f / fConst0); - fConst111 = synth_marimba_faustpower2_f(fConst108); - fConst112 = std::pow(0.00100000005f, (12.3379154f / fConst0)); - fConst113 = (0.0f - (2.0f * fConst112)); - fConst114 = (22291.3418f / fConst0); - fConst115 = synth_marimba_faustpower2_f(fConst112); - fConst116 = std::pow(0.00100000005f, (11.0386343f / fConst0)); - fConst117 = (0.0f - (2.0f * fConst116)); - fConst118 = (10601.3896f / fConst0); - fConst119 = synth_marimba_faustpower2_f(fConst116); - fConst120 = std::pow(0.00100000005f, (10.8901329f / fConst0)); - fConst121 = (0.0f - (2.0f * fConst120)); - fConst122 = (9160.67285f / fConst0); - fConst123 = synth_marimba_faustpower2_f(fConst120); - fConst124 = std::pow(0.00100000005f, (10.2591143f / fConst0)); - fConst125 = (0.0f - (2.0f * fConst124)); - fConst126 = (2764.60156f / fConst0); - fConst127 = synth_marimba_faustpower2_f(fConst124); - fConst128 = std::pow(0.00100000005f, (26985.6934f / fConst0)); - fConst129 = (0.0f - (2.0f * fConst128)); - fConst130 = (430163.719f / fConst0); - fConst131 = synth_marimba_faustpower2_f(fConst128); - fConst132 = std::pow(0.00100000005f, (216.134277f / fConst0)); - fConst133 = (0.0f - (2.0f * fConst132)); - fConst134 = (248753.312f / fConst0); - fConst135 = synth_marimba_faustpower2_f(fConst132); - fConst136 = std::pow(0.00100000005f, (249.361649f / fConst0)); - fConst137 = (0.0f - (2.0f * fConst136)); - fConst138 = (257014.219f / fConst0); - fConst139 = synth_marimba_faustpower2_f(fConst136); - fConst140 = std::pow(0.00100000005f, (3034.91235f / fConst0)); - fConst141 = (0.0f - (2.0f * fConst140)); - fConst142 = (369010.719f / fConst0); - fConst143 = synth_marimba_faustpower2_f(fConst140); - fConst144 = std::pow(0.00100000005f, (8048.45801f / fConst0)); - fConst145 = (0.0f - (2.0f * fConst144)); - fConst146 = (399620.375f / fConst0); - fConst147 = synth_marimba_faustpower2_f(fConst144); - fConst148 = std::pow(0.00100000005f, (37577.8438f / fConst0)); - fConst149 = (0.0f - (2.0f * fConst148)); - fConst150 = (437312.969f / fConst0); - fConst151 = synth_marimba_faustpower2_f(fConst148); - fConst152 = std::pow(0.00100000005f, (172447.047f / fConst0)); - fConst153 = (0.0f - (2.0f * fConst152)); - fConst154 = (464743.344f / fConst0); - fConst155 = synth_marimba_faustpower2_f(fConst152); - fConst156 = std::pow(0.00100000005f, (355973.344f / fConst0)); - fConst157 = (0.0f - (2.0f * fConst156)); - fConst158 = (475132.719f / fConst0); - fConst159 = synth_marimba_faustpower2_f(fConst156); - fConst160 = std::pow(0.00100000005f, (20142.8574f / fConst0)); - fConst161 = (0.0f - (2.0f * fConst160)); - fConst162 = (423442.969f / fConst0); - fConst163 = synth_marimba_faustpower2_f(fConst160); - fConst164 = std::pow(0.00100000005f, (17675.4805f / fConst0)); - fConst165 = synth_marimba_faustpower2_f(fConst164); - fConst166 = (0.0f - (2.0f * fConst164)); - fConst167 = (420310.656f / fConst0); - fConst168 = std::pow(0.00100000005f, (278.139954f / fConst0)); - fConst169 = (0.0f - (2.0f * fConst168)); - fConst170 = (263166.281f / fConst0); - fConst171 = synth_marimba_faustpower2_f(fConst168); - fConst172 = std::pow(0.00100000005f, (13265.4883f / fConst0)); - fConst173 = synth_marimba_faustpower2_f(fConst172); - fConst174 = (0.0f - (2.0f * fConst172)); - fConst175 = (413136.531f / fConst0); - fConst176 = std::pow(0.00100000005f, (695.55957f / fConst0)); - fConst177 = synth_marimba_faustpower2_f(fConst176); - fConst178 = (0.0f - (2.0f * fConst176)); - fConst179 = (309826.125f / fConst0); - fConst180 = std::pow(0.00100000005f, (638.477783f / fConst0)); - fConst181 = synth_marimba_faustpower2_f(fConst180); - fConst182 = (0.0f - (2.0f * fConst180)); - fConst183 = (305820.219f / fConst0); - fConst184 = std::pow(0.00100000005f, (312.009094f / fConst0)); - fConst185 = synth_marimba_faustpower2_f(fConst184); - fConst186 = (0.0f - (2.0f * fConst184)); - fConst187 = (269495.281f / fConst0); - fConst188 = std::pow(0.00100000005f, (630229.375f / fConst0)); - fConst189 = (0.0f - (2.0f * fConst188)); - fConst190 = (482323.438f / fConst0); - fConst191 = synth_marimba_faustpower2_f(fConst188); - fConst192 = std::pow(0.00100000005f, (2024133.5f / fConst0)); - fConst193 = (0.0f - (2.0f * fConst192)); - fConst194 = (494689.5f / fConst0); - fConst195 = synth_marimba_faustpower2_f(fConst192); - fConst196 = std::pow(0.00100000005f, (4549764.5f / fConst0)); - fConst197 = (0.0f - (2.0f * fConst196)); - fConst198 = (501725.406f / fConst0); - fConst199 = synth_marimba_faustpower2_f(fConst196); - fConst200 = std::pow(0.00100000005f, (22033280.0f / fConst0)); - fConst201 = (0.0f - (2.0f * fConst200)); - fConst202 = (512551.594f / fConst0); - fConst203 = synth_marimba_faustpower2_f(fConst200); - fConst204 = std::pow(0.00100000005f, (531223264.0f / fConst0)); - fConst205 = (0.0f - (2.0f * fConst204)); - fConst206 = (526294.438f / fConst0); - fConst207 = synth_marimba_faustpower2_f(fConst204); - fConst208 = std::pow(0.00100000005f, (3.8190633e+09f / fConst0)); - fConst209 = (0.0f - (2.0f * fConst208)); - fConst210 = (531328.75f / fConst0); - fConst211 = synth_marimba_faustpower2_f(fConst208); - fConst212 = std::pow(0.00100000005f, (1.56573838e+14f / fConst0)); - fConst213 = (0.0f - (2.0f * fConst212)); - fConst214 = (540493.438f / fConst0); - fConst215 = synth_marimba_faustpower2_f(fConst212); - + fConst12 = (0.00200000009f * fConst0); + fConst13 = std::pow(0.00100000005f, (531223264.0f / fConst0)); + fConst14 = (0.0f - (2.0f * fConst13)); + fConst15 = (526294.438f / fConst0); + fConst16 = synth_marimba_faustpower2_f(fConst13); + fConst17 = ((0.5f * fConst0) + -1.0f); + fConst18 = std::pow(0.00100000005f, (22033280.0f / fConst0)); + fConst19 = (0.0f - (2.0f * fConst18)); + fConst20 = (512551.594f / fConst0); + fConst21 = synth_marimba_faustpower2_f(fConst18); + fConst22 = std::pow(0.00100000005f, (4549764.5f / fConst0)); + fConst23 = (0.0f - (2.0f * fConst22)); + fConst24 = (501725.406f / fConst0); + fConst25 = synth_marimba_faustpower2_f(fConst22); + fConst26 = std::pow(0.00100000005f, (2024133.5f / fConst0)); + fConst27 = (0.0f - (2.0f * fConst26)); + fConst28 = (494689.5f / fConst0); + fConst29 = synth_marimba_faustpower2_f(fConst26); + fConst30 = std::pow(0.00100000005f, (630229.375f / fConst0)); + fConst31 = (0.0f - (2.0f * fConst30)); + fConst32 = (482323.438f / fConst0); + fConst33 = synth_marimba_faustpower2_f(fConst30); + fConst34 = std::pow(0.00100000005f, (13265.4883f / fConst0)); + fConst35 = (0.0f - (2.0f * fConst34)); + fConst36 = (413136.531f / fConst0); + fConst37 = synth_marimba_faustpower2_f(fConst34); + fConst38 = std::pow(0.00100000005f, (249.361649f / fConst0)); + fConst39 = (0.0f - (2.0f * fConst38)); + fConst40 = (257014.219f / fConst0); + fConst41 = synth_marimba_faustpower2_f(fConst38); + fConst42 = std::pow(0.00100000005f, (216.134277f / fConst0)); + fConst43 = (0.0f - (2.0f * fConst42)); + fConst44 = (248753.312f / fConst0); + fConst45 = synth_marimba_faustpower2_f(fConst42); + fConst46 = std::pow(0.00100000005f, (3034.91235f / fConst0)); + fConst47 = (0.0f - (2.0f * fConst46)); + fConst48 = (369010.719f / fConst0); + fConst49 = synth_marimba_faustpower2_f(fConst46); + fConst50 = std::pow(0.00100000005f, (1859.39001f / fConst0)); + fConst51 = (0.0f - (2.0f * fConst50)); + fConst52 = (351228.812f / fConst0); + fConst53 = synth_marimba_faustpower2_f(fConst50); + fConst54 = std::pow(0.00100000005f, (1095.63586f / fConst0)); + fConst55 = (0.0f - (2.0f * fConst54)); + fConst56 = (329971.781f / fConst0); + fConst57 = synth_marimba_faustpower2_f(fConst54); + fConst58 = std::pow(0.00100000005f, (773.212891f / fConst0)); + fConst59 = (0.0f - (2.0f * fConst58)); + fConst60 = (314683.531f / fConst0); + fConst61 = synth_marimba_faustpower2_f(fConst58); + fConst62 = std::pow(0.00100000005f, (695.55957f / fConst0)); + fConst63 = (0.0f - (2.0f * fConst62)); + fConst64 = (309826.125f / fConst0); + fConst65 = synth_marimba_faustpower2_f(fConst62); + fConst66 = std::pow(0.00100000005f, (638.477783f / fConst0)); + fConst67 = (0.0f - (2.0f * fConst66)); + fConst68 = (305820.219f / fConst0); + fConst69 = synth_marimba_faustpower2_f(fConst66); + fConst70 = std::pow(0.00100000005f, (312.009094f / fConst0)); + fConst71 = (0.0f - (2.0f * fConst70)); + fConst72 = (269495.281f / fConst0); + fConst73 = synth_marimba_faustpower2_f(fConst70); + fConst74 = std::pow(0.00100000005f, (278.139954f / fConst0)); + fConst75 = (0.0f - (2.0f * fConst74)); + fConst76 = (263166.281f / fConst0); + fConst77 = synth_marimba_faustpower2_f(fConst74); + fConst78 = std::pow(0.00100000005f, (28.5368156f / fConst0)); + fConst79 = (0.0f - (2.0f * fConst78)); + fConst80 = (102491.523f / fConst0); + fConst81 = synth_marimba_faustpower2_f(fConst78); + fConst82 = std::pow(0.00100000005f, (22.2695656f / fConst0)); + fConst83 = (0.0f - (2.0f * fConst82)); + fConst84 = (80157.9609f / fConst0); + fConst85 = synth_marimba_faustpower2_f(fConst82); + fConst86 = std::pow(0.00100000005f, (20.4824104f / fConst0)); + fConst87 = (0.0f - (2.0f * fConst86)); + fConst88 = (72370.3594f / fConst0); + fConst89 = synth_marimba_faustpower2_f(fConst86); + fConst90 = std::pow(0.00100000005f, (17.6309834f / fConst0)); + fConst91 = (0.0f - (2.0f * fConst90)); + fConst92 = (58084.832f / fConst0); + fConst93 = synth_marimba_faustpower2_f(fConst90); + fConst94 = std::pow(0.00100000005f, (70.9964905f / fConst0)); + fConst95 = (0.0f - (2.0f * fConst94)); + fConst96 = (175686.562f / fConst0); + fConst97 = synth_marimba_faustpower2_f(fConst94); + fConst98 = std::pow(0.00100000005f, (58.4253006f / fConst0)); + fConst99 = (0.0f - (2.0f * fConst98)); + fConst100 = (161137.562f / fConst0); + fConst101 = synth_marimba_faustpower2_f(fConst98); + fConst102 = std::pow(0.00100000005f, (47.4399223f / fConst0)); + fConst103 = (0.0f - (2.0f * fConst102)); + fConst104 = (144948.062f / fConst0); + fConst105 = synth_marimba_faustpower2_f(fConst102); + fConst106 = std::pow(0.00100000005f, (45.1752319f / fConst0)); + fConst107 = (0.0f - (2.0f * fConst106)); + fConst108 = (141047.203f / fConst0); + fConst109 = synth_marimba_faustpower2_f(fConst106); + fConst110 = std::pow(0.00100000005f, (40.2636795f / fConst0)); + fConst111 = (0.0f - (2.0f * fConst110)); + fConst112 = (131716.406f / fConst0); + fConst113 = synth_marimba_faustpower2_f(fConst110); + fConst114 = std::pow(0.00100000005f, (31.3811016f / fConst0)); + fConst115 = (0.0f - (2.0f * fConst114)); + fConst116 = (110759.336f / fConst0); + fConst117 = synth_marimba_faustpower2_f(fConst114); + fConst118 = std::pow(0.00100000005f, (29.2639236f / fConst0)); + fConst119 = (0.0f - (2.0f * fConst118)); + fConst120 = (104696.289f / fConst0); + fConst121 = synth_marimba_faustpower2_f(fConst118); + fConst122 = std::pow(0.00100000005f, (10.2591143f / fConst0)); + fConst123 = (0.0f - (2.0f * fConst122)); + fConst124 = (2764.60156f / fConst0); + fConst125 = synth_marimba_faustpower2_f(fConst122); + fConst126 = std::pow(0.00100000005f, (10.8901329f / fConst0)); + fConst127 = (0.0f - (2.0f * fConst126)); + fConst128 = (9160.67285f / fConst0); + fConst129 = synth_marimba_faustpower2_f(fConst126); + fConst130 = std::pow(0.00100000005f, (11.0386343f / fConst0)); + fConst131 = (0.0f - (2.0f * fConst130)); + fConst132 = (10601.3896f / fConst0); + fConst133 = synth_marimba_faustpower2_f(fConst130); + fConst134 = std::pow(0.00100000005f, (12.3379154f / fConst0)); + fConst135 = (0.0f - (2.0f * fConst134)); + fConst136 = (22291.3418f / fConst0); + fConst137 = synth_marimba_faustpower2_f(fConst134); + fConst138 = std::pow(0.00100000005f, (12.8027573f / fConst0)); + fConst139 = (0.0f - (2.0f * fConst138)); + fConst140 = (26119.3477f / fConst0); + fConst141 = synth_marimba_faustpower2_f(fConst138); + fConst142 = std::pow(0.00100000005f, (14.5330687f / fConst0)); + fConst143 = (0.0f - (2.0f * fConst142)); + fConst144 = (39027.6016f / fConst0); + fConst145 = synth_marimba_faustpower2_f(fConst142); + fConst146 = std::pow(0.00100000005f, (16.3652077f / fConst0)); + fConst147 = (0.0f - (2.0f * fConst146)); + fConst148 = (50824.4336f / fConst0); + fConst149 = synth_marimba_faustpower2_f(fConst146); + fConst150 = std::pow(0.00100000005f, (76.0668716f / fConst0)); + fConst151 = (0.0f - (2.0f * fConst150)); + fConst152 = (180702.094f / fConst0); + fConst153 = synth_marimba_faustpower2_f(fConst150); + fConst154 = std::pow(0.00100000005f, (80.8901215f / fConst0)); + fConst155 = (0.0f - (2.0f * fConst154)); + fConst156 = (185114.125f / fConst0); + fConst157 = synth_marimba_faustpower2_f(fConst154); + fConst158 = std::pow(0.00100000005f, (109.456856f / fConst0)); + fConst159 = (0.0f - (2.0f * fConst158)); + fConst160 = (206046.031f / fConst0); + fConst161 = synth_marimba_faustpower2_f(fConst158); + fConst162 = std::pow(0.00100000005f, (130.309692f / fConst0)); + fConst163 = (0.0f - (2.0f * fConst162)); + fConst164 = (217552.031f / fConst0); + fConst165 = synth_marimba_faustpower2_f(fConst162); + fConst166 = std::pow(0.00100000005f, (142.914078f / fConst0)); + fConst167 = (0.0f - (2.0f * fConst166)); + fConst168 = (223483.484f / fConst0); + fConst169 = synth_marimba_faustpower2_f(fConst166); + fConst170 = std::pow(0.00100000005f, (2311.80176f / fConst0)); + fConst171 = (0.0f - (2.0f * fConst170)); + fConst172 = (359348.438f / fConst0); + fConst173 = synth_marimba_faustpower2_f(fConst170); + fConst174 = std::pow(0.00100000005f, (2755.63037f / fConst0)); + fConst175 = (0.0f - (2.0f * fConst174)); + fConst176 = (365643.438f / fConst0); + fConst177 = synth_marimba_faustpower2_f(fConst174); + fConst178 = std::pow(0.00100000005f, (8048.45801f / fConst0)); + fConst179 = (0.0f - (2.0f * fConst178)); + fConst180 = (399620.375f / fConst0); + fConst181 = synth_marimba_faustpower2_f(fConst178); + fConst182 = std::pow(0.00100000005f, (17675.4805f / fConst0)); + fConst183 = (0.0f - (2.0f * fConst182)); + fConst184 = (420310.656f / fConst0); + fConst185 = synth_marimba_faustpower2_f(fConst182); + fConst186 = std::pow(0.00100000005f, (20142.8574f / fConst0)); + fConst187 = (0.0f - (2.0f * fConst186)); + fConst188 = (423442.969f / fConst0); + fConst189 = synth_marimba_faustpower2_f(fConst186); + fConst190 = std::pow(0.00100000005f, (26985.6934f / fConst0)); + fConst191 = (0.0f - (2.0f * fConst190)); + fConst192 = (430163.719f / fConst0); + fConst193 = synth_marimba_faustpower2_f(fConst190); + fConst194 = std::pow(0.00100000005f, (37577.8438f / fConst0)); + fConst195 = (0.0f - (2.0f * fConst194)); + fConst196 = (437312.969f / fConst0); + fConst197 = synth_marimba_faustpower2_f(fConst194); + fConst198 = std::pow(0.00100000005f, (172447.047f / fConst0)); + fConst199 = (0.0f - (2.0f * fConst198)); + fConst200 = (464743.344f / fConst0); + fConst201 = synth_marimba_faustpower2_f(fConst198); + fConst202 = std::pow(0.00100000005f, (355973.344f / fConst0)); + fConst203 = (0.0f - (2.0f * fConst202)); + fConst204 = (475132.719f / fConst0); + fConst205 = synth_marimba_faustpower2_f(fConst202); + fConst206 = std::pow(0.00100000005f, (3.8190633e+09f / fConst0)); + fConst207 = (0.0f - (2.0f * fConst206)); + fConst208 = (531328.75f / fConst0); + fConst209 = synth_marimba_faustpower2_f(fConst206); + fConst210 = std::pow(0.00100000005f, (1.56573838e+14f / fConst0)); + fConst211 = (0.0f - (2.0f * fConst210)); + fConst212 = (540493.438f / fConst0); + fConst213 = synth_marimba_faustpower2_f(fConst210); } virtual void instanceResetUserInterface() { fHslider0 = FAUSTFLOAT(48.0f); fHslider1 = FAUSTFLOAT(1.0f); fHslider2 = FAUSTFLOAT(7000.0f); - fButton0 = FAUSTFLOAT(0.0f); fHslider3 = FAUSTFLOAT(0.25f); + fButton0 = FAUSTFLOAT(0.0f); fHslider4 = FAUSTFLOAT(0.0f); - } virtual void instanceClear() { for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { iRec0[l0] = 0; - } for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { fRec4[l1] = 0.0f; - } IOTA = 0; for (int l2 = 0; (l2 < 2048); l2 = (l2 + 1)) { fVec0[l2] = 0.0f; - } for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { fRec2[l3] = 0.0f; - } for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { fRec5[l4] = 0.0f; - } for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { iRec9[l5] = 0; - } for (int l6 = 0; (l6 < 3); l6 = (l6 + 1)) { fRec8[l6] = 0.0f; - } for (int l7 = 0; (l7 < 3); l7 = (l7 + 1)) { fRec7[l7] = 0.0f; - } for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { fVec1[l8] = 0.0f; - } for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { - fVec2[l9] = 0.0f; - + iRec10[l9] = 0; } - for (int l10 = 0; (l10 < 2); l10 = (l10 + 1)) { - fRec10[l10] = 0.0f; - + for (int l10 = 0; (l10 < 3); l10 = (l10 + 1)) { + fRec6[l10] = 0.0f; } for (int l11 = 0; (l11 < 3); l11 = (l11 + 1)) { - fRec6[l11] = 0.0f; - + fRec11[l11] = 0.0f; } for (int l12 = 0; (l12 < 3); l12 = (l12 + 1)) { - fRec11[l12] = 0.0f; - + fRec12[l12] = 0.0f; } for (int l13 = 0; (l13 < 3); l13 = (l13 + 1)) { - fRec12[l13] = 0.0f; - + fRec13[l13] = 0.0f; } for (int l14 = 0; (l14 < 3); l14 = (l14 + 1)) { - fRec13[l14] = 0.0f; - + fRec14[l14] = 0.0f; } for (int l15 = 0; (l15 < 3); l15 = (l15 + 1)) { - fRec14[l15] = 0.0f; - + fRec15[l15] = 0.0f; } for (int l16 = 0; (l16 < 3); l16 = (l16 + 1)) { - fRec15[l16] = 0.0f; - + fRec16[l16] = 0.0f; } for (int l17 = 0; (l17 < 3); l17 = (l17 + 1)) { - fRec16[l17] = 0.0f; - + fRec17[l17] = 0.0f; } for (int l18 = 0; (l18 < 3); l18 = (l18 + 1)) { - fRec17[l18] = 0.0f; - + fRec18[l18] = 0.0f; } for (int l19 = 0; (l19 < 3); l19 = (l19 + 1)) { - fRec18[l19] = 0.0f; - + fRec19[l19] = 0.0f; } for (int l20 = 0; (l20 < 3); l20 = (l20 + 1)) { - fRec19[l20] = 0.0f; - + fRec20[l20] = 0.0f; } for (int l21 = 0; (l21 < 3); l21 = (l21 + 1)) { - fRec20[l21] = 0.0f; - + fRec21[l21] = 0.0f; } for (int l22 = 0; (l22 < 3); l22 = (l22 + 1)) { - fRec21[l22] = 0.0f; - + fRec22[l22] = 0.0f; } for (int l23 = 0; (l23 < 3); l23 = (l23 + 1)) { - fRec22[l23] = 0.0f; - + fRec23[l23] = 0.0f; } for (int l24 = 0; (l24 < 3); l24 = (l24 + 1)) { - fRec23[l24] = 0.0f; - + fRec24[l24] = 0.0f; } for (int l25 = 0; (l25 < 3); l25 = (l25 + 1)) { - fRec24[l25] = 0.0f; - + fRec25[l25] = 0.0f; } for (int l26 = 0; (l26 < 3); l26 = (l26 + 1)) { - fRec25[l26] = 0.0f; - + fRec26[l26] = 0.0f; } for (int l27 = 0; (l27 < 3); l27 = (l27 + 1)) { - fRec26[l27] = 0.0f; - + fRec27[l27] = 0.0f; } for (int l28 = 0; (l28 < 3); l28 = (l28 + 1)) { - fRec27[l28] = 0.0f; - + fRec28[l28] = 0.0f; } for (int l29 = 0; (l29 < 3); l29 = (l29 + 1)) { - fRec28[l29] = 0.0f; - + fRec29[l29] = 0.0f; } for (int l30 = 0; (l30 < 3); l30 = (l30 + 1)) { - fRec29[l30] = 0.0f; - + fRec30[l30] = 0.0f; } for (int l31 = 0; (l31 < 3); l31 = (l31 + 1)) { - fRec30[l31] = 0.0f; - + fRec31[l31] = 0.0f; } for (int l32 = 0; (l32 < 3); l32 = (l32 + 1)) { - fRec31[l32] = 0.0f; - + fRec32[l32] = 0.0f; } for (int l33 = 0; (l33 < 3); l33 = (l33 + 1)) { - fRec32[l33] = 0.0f; - + fRec33[l33] = 0.0f; } for (int l34 = 0; (l34 < 3); l34 = (l34 + 1)) { - fRec33[l34] = 0.0f; - + fRec34[l34] = 0.0f; } for (int l35 = 0; (l35 < 3); l35 = (l35 + 1)) { - fRec34[l35] = 0.0f; - + fRec35[l35] = 0.0f; } for (int l36 = 0; (l36 < 3); l36 = (l36 + 1)) { - fRec35[l36] = 0.0f; - + fRec36[l36] = 0.0f; } for (int l37 = 0; (l37 < 3); l37 = (l37 + 1)) { - fRec36[l37] = 0.0f; - + fRec37[l37] = 0.0f; } for (int l38 = 0; (l38 < 3); l38 = (l38 + 1)) { - fRec37[l38] = 0.0f; - + fRec38[l38] = 0.0f; } for (int l39 = 0; (l39 < 3); l39 = (l39 + 1)) { - fRec38[l39] = 0.0f; - + fRec39[l39] = 0.0f; } for (int l40 = 0; (l40 < 3); l40 = (l40 + 1)) { - fRec39[l40] = 0.0f; - + fRec40[l40] = 0.0f; } for (int l41 = 0; (l41 < 3); l41 = (l41 + 1)) { - fRec40[l41] = 0.0f; - + fRec41[l41] = 0.0f; } for (int l42 = 0; (l42 < 3); l42 = (l42 + 1)) { - fRec41[l42] = 0.0f; - + fRec42[l42] = 0.0f; } for (int l43 = 0; (l43 < 3); l43 = (l43 + 1)) { - fRec42[l43] = 0.0f; - + fRec43[l43] = 0.0f; } for (int l44 = 0; (l44 < 3); l44 = (l44 + 1)) { - fRec43[l44] = 0.0f; - + fRec44[l44] = 0.0f; } for (int l45 = 0; (l45 < 3); l45 = (l45 + 1)) { - fRec44[l45] = 0.0f; - + fRec45[l45] = 0.0f; } for (int l46 = 0; (l46 < 3); l46 = (l46 + 1)) { - fRec45[l46] = 0.0f; - + fRec46[l46] = 0.0f; } for (int l47 = 0; (l47 < 3); l47 = (l47 + 1)) { - fRec46[l47] = 0.0f; - + fRec47[l47] = 0.0f; } for (int l48 = 0; (l48 < 3); l48 = (l48 + 1)) { - fRec47[l48] = 0.0f; - + fRec48[l48] = 0.0f; } for (int l49 = 0; (l49 < 3); l49 = (l49 + 1)) { - fRec48[l49] = 0.0f; - + fRec49[l49] = 0.0f; } for (int l50 = 0; (l50 < 3); l50 = (l50 + 1)) { - fRec49[l50] = 0.0f; - + fRec50[l50] = 0.0f; } for (int l51 = 0; (l51 < 3); l51 = (l51 + 1)) { - fRec50[l51] = 0.0f; - + fRec51[l51] = 0.0f; } for (int l52 = 0; (l52 < 3); l52 = (l52 + 1)) { - fRec51[l52] = 0.0f; - + fRec52[l52] = 0.0f; } for (int l53 = 0; (l53 < 3); l53 = (l53 + 1)) { - fRec52[l53] = 0.0f; - + fRec53[l53] = 0.0f; } for (int l54 = 0; (l54 < 3); l54 = (l54 + 1)) { - fRec53[l54] = 0.0f; - + fRec54[l54] = 0.0f; } for (int l55 = 0; (l55 < 3); l55 = (l55 + 1)) { - fRec54[l55] = 0.0f; - + fRec55[l55] = 0.0f; } for (int l56 = 0; (l56 < 3); l56 = (l56 + 1)) { - fRec55[l56] = 0.0f; - + fRec56[l56] = 0.0f; } for (int l57 = 0; (l57 < 3); l57 = (l57 + 1)) { - fRec56[l57] = 0.0f; - + fRec57[l57] = 0.0f; } for (int l58 = 0; (l58 < 3); l58 = (l58 + 1)) { - fRec57[l58] = 0.0f; - + fRec58[l58] = 0.0f; } for (int l59 = 0; (l59 < 3); l59 = (l59 + 1)) { - fRec58[l59] = 0.0f; - + fRec59[l59] = 0.0f; } - for (int l60 = 0; (l60 < 3); l60 = (l60 + 1)) { - fRec59[l60] = 0.0f; - + for (int l60 = 0; (l60 < 2); l60 = (l60 + 1)) { + fVec2[l60] = 0.0f; } - for (int l61 = 0; (l61 < 2); l61 = (l61 + 1)) { + for (int l61 = 0; (l61 < 2048); l61 = (l61 + 1)) { fVec3[l61] = 0.0f; - } - for (int l62 = 0; (l62 < 2048); l62 = (l62 + 1)) { - fVec4[l62] = 0.0f; - + for (int l62 = 0; (l62 < 2); l62 = (l62 + 1)) { + fRec3[l62] = 0.0f; } - for (int l63 = 0; (l63 < 2); l63 = (l63 + 1)) { - fRec3[l63] = 0.0f; - - } - } - virtual void init(int samplingFreq) { - classInit(samplingFreq); - instanceInit(samplingFreq); + virtual void init(int sample_rate) { + classInit(sample_rate); + instanceInit(sample_rate); } - virtual void instanceInit(int samplingFreq) { - instanceConstants(samplingFreq); + virtual void instanceInit(int sample_rate) { + instanceConstants(sample_rate); instanceResetUserInterface(); instanceClear(); } @@ -1399,9 +1382,9 @@ class synth_marimba : public dsp { virtual synth_marimba* clone() { return new synth_marimba(); } + virtual int getSampleRate() { - return fSamplingFreq; - + return fSampleRate; } virtual void buildUserInterface(UI* ui_interface) { @@ -1413,7 +1396,6 @@ class synth_marimba : public dsp { ui_interface->addHorizontalSlider("pos", &fHslider4, 0.0f, 0.0f, 4.0f, 0.00999999978f); ui_interface->addHorizontalSlider("sharp", &fHslider3, 0.25f, 0.00999999978f, 1.0f, 0.00100000005f); ui_interface->closeBox(); - } virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { @@ -1446,181 +1428,177 @@ class synth_marimba : public dsp { float fSlow25 = (1.0f / fSlow23); float fSlow26 = (((fSlow22 + -1.41421354f) / fSlow21) + 1.0f); float fSlow27 = (2.0f * (1.0f - (1.0f / synth_marimba_faustpower2_f(fSlow21)))); - float fSlow28 = float(fButton0); - float fSlow29 = float(fHslider3); - float fSlow30 = (fConst12 * fSlow29); - float fSlow31 = (fConst13 * fSlow29); - float fSlow32 = (fConst14 / fSlow29); - float fSlow33 = (fConst16 * std::cos((fConst17 * fSlow0))); - int iSlow34 = (50 * int(float(fHslider4))); - float fSlow35 = (((58193.9609f * fSlow0) < fConst19)?ftbl0synth_marimbaSIG0[(iSlow34 + 33)]:0.0f); - float fSlow36 = (fConst21 * std::cos((fConst22 * fSlow0))); - float fSlow37 = (((57192.0781f * fSlow0) < fConst19)?ftbl0synth_marimbaSIG0[(iSlow34 + 32)]:0.0f); - float fSlow38 = (fConst25 * std::cos((fConst26 * fSlow0))); - float fSlow39 = (((55899.8008f * fSlow0) < fConst19)?ftbl0synth_marimbaSIG0[(iSlow34 + 31)]:0.0f); - float fSlow40 = (fConst29 * std::cos((fConst30 * fSlow0))); - float fSlow41 = (((52516.6406f * fSlow0) < fConst19)?ftbl0synth_marimbaSIG0[(iSlow34 + 30)]:0.0f); - float fSlow42 = (fConst33 * std::cos((fConst34 * fSlow0))); - float fSlow43 = (((50083.4414f * fSlow0) < fConst19)?ftbl0synth_marimbaSIG0[(iSlow34 + 29)]:0.0f); - float fSlow44 = (fConst37 * std::cos((fConst38 * fSlow0))); - float fSlow45 = (((35568.5f * fSlow0) < fConst19)?ftbl0synth_marimbaSIG0[(iSlow34 + 22)]:0.0f); - float fSlow46 = (fConst41 * std::cos((fConst42 * fSlow0))); - float fSlow47 = (((34624.4805f * fSlow0) < fConst19)?ftbl0synth_marimbaSIG0[(iSlow34 + 21)]:0.0f); - float fSlow48 = (fConst45 * std::cos((fConst46 * fSlow0))); - float fSlow49 = (((32793.2422f * fSlow0) < fConst19)?ftbl0synth_marimbaSIG0[(iSlow34 + 20)]:0.0f); - float fSlow50 = (fConst49 * std::cos((fConst50 * fSlow0))); - float fSlow51 = (((29461.8281f * fSlow0) < fConst19)?ftbl0synth_marimbaSIG0[(iSlow34 + 19)]:0.0f); - float fSlow52 = (fConst53 * std::cos((fConst54 * fSlow0))); - float fSlow53 = (((28759.6328f * fSlow0) < fConst19)?ftbl0synth_marimbaSIG0[(iSlow34 + 18)]:0.0f); - float fSlow54 = (fConst57 * std::cos((fConst58 * fSlow0))); - float fSlow55 = (((27961.3848f * fSlow0) < fConst19)?ftbl0synth_marimbaSIG0[(iSlow34 + 17)]:0.0f); - float fSlow56 = (fConst61 * std::cos((fConst62 * fSlow0))); - float fSlow57 = (((25645.8398f * fSlow0) < fConst19)?ftbl0synth_marimbaSIG0[(iSlow34 + 16)]:0.0f); - float fSlow58 = (fConst65 * std::cos((fConst66 * fSlow0))); - float fSlow59 = (((23069.1992f * fSlow0) < fConst19)?ftbl0synth_marimbaSIG0[(iSlow34 + 15)]:0.0f); - float fSlow60 = (fConst69 * std::cos((fConst70 * fSlow0))); - float fSlow61 = (((22448.3594f * fSlow0) < fConst19)?ftbl0synth_marimbaSIG0[(iSlow34 + 14)]:0.0f); - float fSlow62 = (fConst73 * std::cos((fConst74 * fSlow0))); - float fSlow63 = (((20963.3164f * fSlow0) < fConst19)?ftbl0synth_marimbaSIG0[(iSlow34 + 13)]:0.0f); - float fSlow64 = (fConst77 * std::cos((fConst78 * fSlow0))); - float fSlow65 = (((17627.8965f * fSlow0) < fConst19)?ftbl0synth_marimbaSIG0[(iSlow34 + 12)]:0.0f); - float fSlow66 = (fConst81 * std::cos((fConst82 * fSlow0))); - float fSlow67 = (((16662.9316f * fSlow0) < fConst19)?ftbl0synth_marimbaSIG0[(iSlow34 + 11)]:0.0f); - float fSlow68 = (fConst85 * std::cos((fConst86 * fSlow0))); - float fSlow69 = (((16312.0322f * fSlow0) < fConst19)?ftbl0synth_marimbaSIG0[(iSlow34 + 10)]:0.0f); - float fSlow70 = (fConst89 * std::cos((fConst90 * fSlow0))); - float fSlow71 = (((12757.5361f * fSlow0) < fConst19)?ftbl0synth_marimbaSIG0[(iSlow34 + 9)]:0.0f); - float fSlow72 = (fConst93 * std::cos((fConst94 * fSlow0))); - float fSlow73 = (((11518.0996f * fSlow0) < fConst19)?ftbl0synth_marimbaSIG0[(iSlow34 + 8)]:0.0f); - float fSlow74 = (fConst97 * std::cos((fConst98 * fSlow0))); - float fSlow75 = (((9244.48828f * fSlow0) < fConst19)?ftbl0synth_marimbaSIG0[(iSlow34 + 7)]:0.0f); - float fSlow76 = (fConst101 * std::cos((fConst102 * fSlow0))); - float fSlow77 = (((8088.95996f * fSlow0) < fConst19)?ftbl0synth_marimbaSIG0[(iSlow34 + 6)]:0.0f); - float fSlow78 = (fConst105 * std::cos((fConst106 * fSlow0))); - float fSlow79 = (((6211.43604f * fSlow0) < fConst19)?ftbl0synth_marimbaSIG0[(iSlow34 + 5)]:0.0f); - float fSlow80 = (fConst109 * std::cos((fConst110 * fSlow0))); - float fSlow81 = (((4157.02344f * fSlow0) < fConst19)?ftbl0synth_marimbaSIG0[(iSlow34 + 4)]:0.0f); - float fSlow82 = (fConst113 * std::cos((fConst114 * fSlow0))); - float fSlow83 = (((3547.7771f * fSlow0) < fConst19)?ftbl0synth_marimbaSIG0[(iSlow34 + 3)]:0.0f); - float fSlow84 = (fConst117 * std::cos((fConst118 * fSlow0))); - float fSlow85 = (((1687.26355f * fSlow0) < fConst19)?ftbl0synth_marimbaSIG0[(iSlow34 + 2)]:0.0f); - float fSlow86 = (fConst121 * std::cos((fConst122 * fSlow0))); - float fSlow87 = (((1457.96643f * fSlow0) < fConst19)?ftbl0synth_marimbaSIG0[(iSlow34 + 1)]:0.0f); - float fSlow88 = (fConst125 * std::cos((fConst126 * fSlow0))); - float fSlow89 = (((440.0f * fSlow0) < fConst19)?ftbl0synth_marimbaSIG0[iSlow34]:0.0f); - float fSlow90 = (fConst129 * std::cos((fConst130 * fSlow0))); - float fSlow91 = (((68462.6797f * fSlow0) < fConst19)?ftbl0synth_marimbaSIG0[(iSlow34 + 39)]:0.0f); - float fSlow92 = (fConst133 * std::cos((fConst134 * fSlow0))); - float fSlow93 = (((39590.3203f * fSlow0) < fConst19)?ftbl0synth_marimbaSIG0[(iSlow34 + 23)]:0.0f); - float fSlow94 = (fConst137 * std::cos((fConst138 * fSlow0))); - float fSlow95 = (((40905.0859f * fSlow0) < fConst19)?ftbl0synth_marimbaSIG0[(iSlow34 + 24)]:0.0f); - float fSlow96 = (fConst141 * std::cos((fConst142 * fSlow0))); - float fSlow97 = (((58729.8789f * fSlow0) < fConst19)?ftbl0synth_marimbaSIG0[(iSlow34 + 34)]:0.0f); - float fSlow98 = (fConst145 * std::cos((fConst146 * fSlow0))); - float fSlow99 = (((63601.5586f * fSlow0) < fConst19)?ftbl0synth_marimbaSIG0[(iSlow34 + 35)]:0.0f); - float fSlow100 = (fConst149 * std::cos((fConst150 * fSlow0))); - float fSlow101 = (((69600.5234f * fSlow0) < fConst19)?ftbl0synth_marimbaSIG0[(iSlow34 + 40)]:0.0f); - float fSlow102 = (fConst153 * std::cos((fConst154 * fSlow0))); - float fSlow103 = (((73966.2031f * fSlow0) < fConst19)?ftbl0synth_marimbaSIG0[(iSlow34 + 41)]:0.0f); - float fSlow104 = (fConst157 * std::cos((fConst158 * fSlow0))); - float fSlow105 = (((75619.7188f * fSlow0) < fConst19)?ftbl0synth_marimbaSIG0[(iSlow34 + 42)]:0.0f); - float fSlow106 = (((67393.0391f * fSlow0) < fConst19)?ftbl0synth_marimbaSIG0[(iSlow34 + 38)]:0.0f); - float fSlow107 = (fConst161 * std::cos((fConst162 * fSlow0))); - float fSlow108 = (fConst166 * std::cos((fConst167 * fSlow0))); - float fSlow109 = (((66894.5234f * fSlow0) < fConst19)?ftbl0synth_marimbaSIG0[(iSlow34 + 37)]:0.0f); - float fSlow110 = (((41884.2148f * fSlow0) < fConst19)?ftbl0synth_marimbaSIG0[(iSlow34 + 25)]:0.0f); - float fSlow111 = (fConst169 * std::cos((fConst170 * fSlow0))); - float fSlow112 = (((65752.7188f * fSlow0) < fConst19)?ftbl0synth_marimbaSIG0[(iSlow34 + 36)]:0.0f); - float fSlow113 = (fConst174 * std::cos((fConst175 * fSlow0))); - float fSlow114 = (((49310.3594f * fSlow0) < fConst19)?ftbl0synth_marimbaSIG0[(iSlow34 + 28)]:0.0f); - float fSlow115 = (fConst178 * std::cos((fConst179 * fSlow0))); - float fSlow116 = (((48672.8008f * fSlow0) < fConst19)?ftbl0synth_marimbaSIG0[(iSlow34 + 27)]:0.0f); - float fSlow117 = (fConst182 * std::cos((fConst183 * fSlow0))); - float fSlow118 = (((42891.5078f * fSlow0) < fConst19)?ftbl0synth_marimbaSIG0[(iSlow34 + 26)]:0.0f); - float fSlow119 = (fConst186 * std::cos((fConst187 * fSlow0))); - float fSlow120 = (fConst189 * std::cos((fConst190 * fSlow0))); - float fSlow121 = (((76764.1562f * fSlow0) < fConst19)?ftbl0synth_marimbaSIG0[(iSlow34 + 43)]:0.0f); - float fSlow122 = (fConst193 * std::cos((fConst194 * fSlow0))); - float fSlow123 = (((78732.2812f * fSlow0) < fConst19)?ftbl0synth_marimbaSIG0[(iSlow34 + 44)]:0.0f); - float fSlow124 = (fConst197 * std::cos((fConst198 * fSlow0))); - float fSlow125 = (((79852.0781f * fSlow0) < fConst19)?ftbl0synth_marimbaSIG0[(iSlow34 + 45)]:0.0f); - float fSlow126 = (fConst201 * std::cos((fConst202 * fSlow0))); - float fSlow127 = (((81575.1172f * fSlow0) < fConst19)?ftbl0synth_marimbaSIG0[(iSlow34 + 46)]:0.0f); - float fSlow128 = (fConst205 * std::cos((fConst206 * fSlow0))); - float fSlow129 = (((83762.3594f * fSlow0) < fConst19)?ftbl0synth_marimbaSIG0[(iSlow34 + 47)]:0.0f); - float fSlow130 = (fConst209 * std::cos((fConst210 * fSlow0))); - float fSlow131 = (((84563.6016f * fSlow0) < fConst19)?ftbl0synth_marimbaSIG0[(iSlow34 + 48)]:0.0f); - float fSlow132 = (fConst213 * std::cos((fConst214 * fSlow0))); - float fSlow133 = (((86022.2031f * fSlow0) < fConst19)?ftbl0synth_marimbaSIG0[(iSlow34 + 49)]:0.0f); + float fSlow28 = (1.0f / std::max(1.0f, (fConst12 * float(fHslider3)))); + float fSlow29 = float(fButton0); + float fSlow30 = (fConst14 * std::cos((fConst15 * fSlow0))); + int iSlow31 = (50 * int(float(fHslider4))); + float fSlow32 = (((83762.3594f * fSlow0) < fConst17) ? ftbl0synth_marimbaSIG0[(iSlow31 + 47)] : 0.0f); + float fSlow33 = (fConst19 * std::cos((fConst20 * fSlow0))); + float fSlow34 = (((81575.1172f * fSlow0) < fConst17) ? ftbl0synth_marimbaSIG0[(iSlow31 + 46)] : 0.0f); + float fSlow35 = (fConst23 * std::cos((fConst24 * fSlow0))); + float fSlow36 = (((79852.0781f * fSlow0) < fConst17) ? ftbl0synth_marimbaSIG0[(iSlow31 + 45)] : 0.0f); + float fSlow37 = (fConst27 * std::cos((fConst28 * fSlow0))); + float fSlow38 = (((78732.2812f * fSlow0) < fConst17) ? ftbl0synth_marimbaSIG0[(iSlow31 + 44)] : 0.0f); + float fSlow39 = (fConst31 * std::cos((fConst32 * fSlow0))); + float fSlow40 = (((76764.1562f * fSlow0) < fConst17) ? ftbl0synth_marimbaSIG0[(iSlow31 + 43)] : 0.0f); + float fSlow41 = (fConst35 * std::cos((fConst36 * fSlow0))); + float fSlow42 = (((65752.7188f * fSlow0) < fConst17) ? ftbl0synth_marimbaSIG0[(iSlow31 + 36)] : 0.0f); + float fSlow43 = (fConst39 * std::cos((fConst40 * fSlow0))); + float fSlow44 = (((40905.0859f * fSlow0) < fConst17) ? ftbl0synth_marimbaSIG0[(iSlow31 + 24)] : 0.0f); + float fSlow45 = (fConst43 * std::cos((fConst44 * fSlow0))); + float fSlow46 = (((39590.3203f * fSlow0) < fConst17) ? ftbl0synth_marimbaSIG0[(iSlow31 + 23)] : 0.0f); + float fSlow47 = (fConst47 * std::cos((fConst48 * fSlow0))); + float fSlow48 = (((58729.8789f * fSlow0) < fConst17) ? ftbl0synth_marimbaSIG0[(iSlow31 + 34)] : 0.0f); + float fSlow49 = (fConst51 * std::cos((fConst52 * fSlow0))); + float fSlow50 = (((55899.8008f * fSlow0) < fConst17) ? ftbl0synth_marimbaSIG0[(iSlow31 + 31)] : 0.0f); + float fSlow51 = (fConst55 * std::cos((fConst56 * fSlow0))); + float fSlow52 = (((52516.6406f * fSlow0) < fConst17) ? ftbl0synth_marimbaSIG0[(iSlow31 + 30)] : 0.0f); + float fSlow53 = (fConst59 * std::cos((fConst60 * fSlow0))); + float fSlow54 = (((50083.4414f * fSlow0) < fConst17) ? ftbl0synth_marimbaSIG0[(iSlow31 + 29)] : 0.0f); + float fSlow55 = (fConst63 * std::cos((fConst64 * fSlow0))); + float fSlow56 = (((49310.3594f * fSlow0) < fConst17) ? ftbl0synth_marimbaSIG0[(iSlow31 + 28)] : 0.0f); + float fSlow57 = (fConst67 * std::cos((fConst68 * fSlow0))); + float fSlow58 = (((48672.8008f * fSlow0) < fConst17) ? ftbl0synth_marimbaSIG0[(iSlow31 + 27)] : 0.0f); + float fSlow59 = (fConst71 * std::cos((fConst72 * fSlow0))); + float fSlow60 = (((42891.5078f * fSlow0) < fConst17) ? ftbl0synth_marimbaSIG0[(iSlow31 + 26)] : 0.0f); + float fSlow61 = (fConst75 * std::cos((fConst76 * fSlow0))); + float fSlow62 = (((41884.2148f * fSlow0) < fConst17) ? ftbl0synth_marimbaSIG0[(iSlow31 + 25)] : 0.0f); + float fSlow63 = (fConst79 * std::cos((fConst80 * fSlow0))); + float fSlow64 = (((16312.0322f * fSlow0) < fConst17) ? ftbl0synth_marimbaSIG0[(iSlow31 + 10)] : 0.0f); + float fSlow65 = (fConst83 * std::cos((fConst84 * fSlow0))); + float fSlow66 = (((12757.5361f * fSlow0) < fConst17) ? ftbl0synth_marimbaSIG0[(iSlow31 + 9)] : 0.0f); + float fSlow67 = (fConst87 * std::cos((fConst88 * fSlow0))); + float fSlow68 = (((11518.0996f * fSlow0) < fConst17) ? ftbl0synth_marimbaSIG0[(iSlow31 + 8)] : 0.0f); + float fSlow69 = (fConst91 * std::cos((fConst92 * fSlow0))); + float fSlow70 = (((9244.48828f * fSlow0) < fConst17) ? ftbl0synth_marimbaSIG0[(iSlow31 + 7)] : 0.0f); + float fSlow71 = (fConst95 * std::cos((fConst96 * fSlow0))); + float fSlow72 = (((27961.3848f * fSlow0) < fConst17) ? ftbl0synth_marimbaSIG0[(iSlow31 + 17)] : 0.0f); + float fSlow73 = (fConst99 * std::cos((fConst100 * fSlow0))); + float fSlow74 = (((25645.8398f * fSlow0) < fConst17) ? ftbl0synth_marimbaSIG0[(iSlow31 + 16)] : 0.0f); + float fSlow75 = (fConst103 * std::cos((fConst104 * fSlow0))); + float fSlow76 = (((23069.1992f * fSlow0) < fConst17) ? ftbl0synth_marimbaSIG0[(iSlow31 + 15)] : 0.0f); + float fSlow77 = (fConst107 * std::cos((fConst108 * fSlow0))); + float fSlow78 = (((22448.3594f * fSlow0) < fConst17) ? ftbl0synth_marimbaSIG0[(iSlow31 + 14)] : 0.0f); + float fSlow79 = (fConst111 * std::cos((fConst112 * fSlow0))); + float fSlow80 = (((20963.3164f * fSlow0) < fConst17) ? ftbl0synth_marimbaSIG0[(iSlow31 + 13)] : 0.0f); + float fSlow81 = (fConst115 * std::cos((fConst116 * fSlow0))); + float fSlow82 = (((17627.8965f * fSlow0) < fConst17) ? ftbl0synth_marimbaSIG0[(iSlow31 + 12)] : 0.0f); + float fSlow83 = (fConst119 * std::cos((fConst120 * fSlow0))); + float fSlow84 = (((16662.9316f * fSlow0) < fConst17) ? ftbl0synth_marimbaSIG0[(iSlow31 + 11)] : 0.0f); + float fSlow85 = (fConst123 * std::cos((fConst124 * fSlow0))); + float fSlow86 = (((440.0f * fSlow0) < fConst17) ? ftbl0synth_marimbaSIG0[iSlow31] : 0.0f); + float fSlow87 = (fConst127 * std::cos((fConst128 * fSlow0))); + float fSlow88 = (((1457.96643f * fSlow0) < fConst17) ? ftbl0synth_marimbaSIG0[(iSlow31 + 1)] : 0.0f); + float fSlow89 = (fConst131 * std::cos((fConst132 * fSlow0))); + float fSlow90 = (((1687.26355f * fSlow0) < fConst17) ? ftbl0synth_marimbaSIG0[(iSlow31 + 2)] : 0.0f); + float fSlow91 = (fConst135 * std::cos((fConst136 * fSlow0))); + float fSlow92 = (((3547.7771f * fSlow0) < fConst17) ? ftbl0synth_marimbaSIG0[(iSlow31 + 3)] : 0.0f); + float fSlow93 = (fConst139 * std::cos((fConst140 * fSlow0))); + float fSlow94 = (((4157.02344f * fSlow0) < fConst17) ? ftbl0synth_marimbaSIG0[(iSlow31 + 4)] : 0.0f); + float fSlow95 = (fConst143 * std::cos((fConst144 * fSlow0))); + float fSlow96 = (((6211.43604f * fSlow0) < fConst17) ? ftbl0synth_marimbaSIG0[(iSlow31 + 5)] : 0.0f); + float fSlow97 = (fConst147 * std::cos((fConst148 * fSlow0))); + float fSlow98 = (((8088.95996f * fSlow0) < fConst17) ? ftbl0synth_marimbaSIG0[(iSlow31 + 6)] : 0.0f); + float fSlow99 = (fConst151 * std::cos((fConst152 * fSlow0))); + float fSlow100 = (((28759.6328f * fSlow0) < fConst17) ? ftbl0synth_marimbaSIG0[(iSlow31 + 18)] : 0.0f); + float fSlow101 = (fConst155 * std::cos((fConst156 * fSlow0))); + float fSlow102 = (((29461.8281f * fSlow0) < fConst17) ? ftbl0synth_marimbaSIG0[(iSlow31 + 19)] : 0.0f); + float fSlow103 = (fConst159 * std::cos((fConst160 * fSlow0))); + float fSlow104 = (((32793.2422f * fSlow0) < fConst17) ? ftbl0synth_marimbaSIG0[(iSlow31 + 20)] : 0.0f); + float fSlow105 = (fConst163 * std::cos((fConst164 * fSlow0))); + float fSlow106 = (((34624.4805f * fSlow0) < fConst17) ? ftbl0synth_marimbaSIG0[(iSlow31 + 21)] : 0.0f); + float fSlow107 = (fConst167 * std::cos((fConst168 * fSlow0))); + float fSlow108 = (((35568.5f * fSlow0) < fConst17) ? ftbl0synth_marimbaSIG0[(iSlow31 + 22)] : 0.0f); + float fSlow109 = (fConst171 * std::cos((fConst172 * fSlow0))); + float fSlow110 = (((57192.0781f * fSlow0) < fConst17) ? ftbl0synth_marimbaSIG0[(iSlow31 + 32)] : 0.0f); + float fSlow111 = (fConst175 * std::cos((fConst176 * fSlow0))); + float fSlow112 = (((58193.9609f * fSlow0) < fConst17) ? ftbl0synth_marimbaSIG0[(iSlow31 + 33)] : 0.0f); + float fSlow113 = (fConst179 * std::cos((fConst180 * fSlow0))); + float fSlow114 = (((63601.5586f * fSlow0) < fConst17) ? ftbl0synth_marimbaSIG0[(iSlow31 + 35)] : 0.0f); + float fSlow115 = (fConst183 * std::cos((fConst184 * fSlow0))); + float fSlow116 = (((66894.5234f * fSlow0) < fConst17) ? ftbl0synth_marimbaSIG0[(iSlow31 + 37)] : 0.0f); + float fSlow117 = (fConst187 * std::cos((fConst188 * fSlow0))); + float fSlow118 = (((67393.0391f * fSlow0) < fConst17) ? ftbl0synth_marimbaSIG0[(iSlow31 + 38)] : 0.0f); + float fSlow119 = (fConst191 * std::cos((fConst192 * fSlow0))); + float fSlow120 = (((68462.6797f * fSlow0) < fConst17) ? ftbl0synth_marimbaSIG0[(iSlow31 + 39)] : 0.0f); + float fSlow121 = (fConst195 * std::cos((fConst196 * fSlow0))); + float fSlow122 = (((69600.5234f * fSlow0) < fConst17) ? ftbl0synth_marimbaSIG0[(iSlow31 + 40)] : 0.0f); + float fSlow123 = (fConst199 * std::cos((fConst200 * fSlow0))); + float fSlow124 = (((73966.2031f * fSlow0) < fConst17) ? ftbl0synth_marimbaSIG0[(iSlow31 + 41)] : 0.0f); + float fSlow125 = (fConst203 * std::cos((fConst204 * fSlow0))); + float fSlow126 = (((75619.7188f * fSlow0) < fConst17) ? ftbl0synth_marimbaSIG0[(iSlow31 + 42)] : 0.0f); + float fSlow127 = (fConst207 * std::cos((fConst208 * fSlow0))); + float fSlow128 = (((84563.6016f * fSlow0) < fConst17) ? ftbl0synth_marimbaSIG0[(iSlow31 + 48)] : 0.0f); + float fSlow129 = (fConst211 * std::cos((fConst212 * fSlow0))); + float fSlow130 = (((86022.2031f * fSlow0) < fConst17) ? ftbl0synth_marimbaSIG0[(iSlow31 + 49)] : 0.0f); for (int i = 0; (i < count); i = (i + 1)) { iRec0[0] = 0; - fRec4[0] = ((0.0500000007f * fRec3[1]) + (0.949999988f * fRec4[1])); - float fTemp0 = (float(iRec0[1]) + (0.99000001f * fRec4[0])); + fRec4[0] = ((0.949999988f * fRec4[1]) + (0.0500000007f * fRec3[1])); + float fTemp0 = ((0.99000001f * fRec4[0]) + float(iRec0[1])); fVec0[(IOTA & 2047)] = fTemp0; fRec2[0] = ((fSlow8 * fVec0[((IOTA - iSlow10) & 2047)]) + (fSlow11 * ((((fSlow12 * fVec0[((IOTA - iSlow13) & 2047)]) + (fSlow14 * fVec0[((IOTA - iSlow15) & 2047)])) + (fSlow17 * fVec0[((IOTA - iSlow18) & 2047)])) + (fSlow19 * fVec0[((IOTA - iSlow20) & 2047)])))); fRec5[0] = ((0.949999988f * fRec5[1]) + (0.0500000007f * fRec2[1])); iRec9[0] = ((1103515245 * iRec9[1]) + 12345); fRec8[0] = ((4.65661287e-10f * float(iRec9[0])) - (fConst6 * ((fConst9 * fRec8[2]) + (fConst10 * fRec8[1])))); fRec7[0] = ((fConst6 * (((fConst8 * fRec8[0]) + (fConst11 * fRec8[1])) + (fConst8 * fRec8[2]))) - (fSlow25 * ((fSlow26 * fRec7[2]) + (fSlow27 * fRec7[1])))); - fVec1[0] = fSlow28; - fVec2[0] = fSlow29; - fRec10[0] = ((((fSlow28 - fVec1[1]) > 0.0f) > 0)?0.0f:std::min(fSlow30, ((fRec10[1] + (fConst12 * (fSlow29 - fVec2[1]))) + 1.0f))); - int iTemp1 = (fRec10[0] < fSlow31); - float fTemp2 = (fSlow24 * ((fRec7[2] + (fRec7[0] + (2.0f * fRec7[1]))) * (iTemp1?((fRec10[0] < 0.0f)?0.0f:(iTemp1?(fSlow32 * fRec10[0]):1.0f)):((fRec10[0] < fSlow30)?((fSlow32 * (0.0f - (fRec10[0] - fSlow31))) + 1.0f):0.0f)))); - fRec6[0] = (fTemp2 - ((fSlow33 * fRec6[1]) + (fConst18 * fRec6[2]))); - fRec11[0] = (fTemp2 - ((fSlow36 * fRec11[1]) + (fConst23 * fRec11[2]))); - fRec12[0] = (fTemp2 - ((fSlow38 * fRec12[1]) + (fConst27 * fRec12[2]))); - fRec13[0] = (fTemp2 - ((fSlow40 * fRec13[1]) + (fConst31 * fRec13[2]))); - fRec14[0] = (fTemp2 - ((fSlow42 * fRec14[1]) + (fConst35 * fRec14[2]))); - fRec15[0] = (fTemp2 - ((fSlow44 * fRec15[1]) + (fConst39 * fRec15[2]))); - fRec16[0] = (fTemp2 - ((fSlow46 * fRec16[1]) + (fConst43 * fRec16[2]))); - fRec17[0] = (fTemp2 - ((fSlow48 * fRec17[1]) + (fConst47 * fRec17[2]))); - fRec18[0] = (fTemp2 - ((fSlow50 * fRec18[1]) + (fConst51 * fRec18[2]))); - fRec19[0] = (fTemp2 - ((fSlow52 * fRec19[1]) + (fConst55 * fRec19[2]))); - fRec20[0] = (fTemp2 - ((fSlow54 * fRec20[1]) + (fConst59 * fRec20[2]))); - fRec21[0] = (fTemp2 - ((fSlow56 * fRec21[1]) + (fConst63 * fRec21[2]))); - fRec22[0] = (fTemp2 - ((fSlow58 * fRec22[1]) + (fConst67 * fRec22[2]))); - fRec23[0] = (fTemp2 - ((fSlow60 * fRec23[1]) + (fConst71 * fRec23[2]))); - fRec24[0] = (fTemp2 - ((fSlow62 * fRec24[1]) + (fConst75 * fRec24[2]))); - fRec25[0] = (fTemp2 - ((fSlow64 * fRec25[1]) + (fConst79 * fRec25[2]))); - fRec26[0] = (fTemp2 - ((fSlow66 * fRec26[1]) + (fConst83 * fRec26[2]))); - fRec27[0] = (fTemp2 - ((fSlow68 * fRec27[1]) + (fConst87 * fRec27[2]))); - fRec28[0] = (fTemp2 - ((fSlow70 * fRec28[1]) + (fConst91 * fRec28[2]))); - fRec29[0] = (fTemp2 - ((fSlow72 * fRec29[1]) + (fConst95 * fRec29[2]))); - fRec30[0] = (fTemp2 - ((fSlow74 * fRec30[1]) + (fConst99 * fRec30[2]))); - fRec31[0] = (fTemp2 - ((fSlow76 * fRec31[1]) + (fConst103 * fRec31[2]))); - fRec32[0] = (fTemp2 - ((fSlow78 * fRec32[1]) + (fConst107 * fRec32[2]))); - fRec33[0] = (fTemp2 - ((fSlow80 * fRec33[1]) + (fConst111 * fRec33[2]))); - fRec34[0] = (fTemp2 - ((fSlow82 * fRec34[1]) + (fConst115 * fRec34[2]))); - fRec35[0] = (fTemp2 - ((fSlow84 * fRec35[1]) + (fConst119 * fRec35[2]))); - fRec36[0] = (fTemp2 - ((fSlow86 * fRec36[1]) + (fConst123 * fRec36[2]))); - fRec37[0] = (fTemp2 - ((fSlow88 * fRec37[1]) + (fConst127 * fRec37[2]))); - fRec38[0] = (fTemp2 - ((fSlow90 * fRec38[1]) + (fConst131 * fRec38[2]))); - fRec39[0] = (fTemp2 - ((fSlow92 * fRec39[1]) + (fConst135 * fRec39[2]))); - fRec40[0] = (fTemp2 - ((fSlow94 * fRec40[1]) + (fConst139 * fRec40[2]))); - fRec41[0] = (fTemp2 - ((fSlow96 * fRec41[1]) + (fConst143 * fRec41[2]))); - fRec42[0] = (fTemp2 - ((fSlow98 * fRec42[1]) + (fConst147 * fRec42[2]))); - fRec43[0] = (fTemp2 - ((fSlow100 * fRec43[1]) + (fConst151 * fRec43[2]))); - fRec44[0] = (fTemp2 - ((fSlow102 * fRec44[1]) + (fConst155 * fRec44[2]))); - fRec45[0] = (fTemp2 - ((fSlow104 * fRec45[1]) + (fConst159 * fRec45[2]))); - fRec46[0] = (fTemp2 - ((fSlow107 * fRec46[1]) + (fConst163 * fRec46[2]))); - fRec47[0] = (fTemp2 - ((fConst165 * fRec47[2]) + (fSlow108 * fRec47[1]))); - fRec48[0] = (fTemp2 - ((fSlow111 * fRec48[1]) + (fConst171 * fRec48[2]))); - fRec49[0] = (fTemp2 - ((fConst173 * fRec49[2]) + (fSlow113 * fRec49[1]))); - fRec50[0] = (fTemp2 - ((fConst177 * fRec50[2]) + (fSlow115 * fRec50[1]))); - fRec51[0] = (fTemp2 - ((fConst181 * fRec51[2]) + (fSlow117 * fRec51[1]))); - fRec52[0] = (fTemp2 - ((fConst185 * fRec52[2]) + (fSlow119 * fRec52[1]))); - fRec53[0] = (fTemp2 - ((fSlow120 * fRec53[1]) + (fConst191 * fRec53[2]))); - fRec54[0] = (fTemp2 - ((fSlow122 * fRec54[1]) + (fConst195 * fRec54[2]))); - fRec55[0] = (fTemp2 - ((fSlow124 * fRec55[1]) + (fConst199 * fRec55[2]))); - fRec56[0] = (fTemp2 - ((fSlow126 * fRec56[1]) + (fConst203 * fRec56[2]))); - fRec57[0] = (fTemp2 - ((fSlow128 * fRec57[1]) + (fConst207 * fRec57[2]))); - fRec58[0] = (fTemp2 - ((fSlow130 * fRec58[1]) + (fConst211 * fRec58[2]))); - fRec59[0] = (fTemp2 - ((fSlow132 * fRec59[1]) + (fConst215 * fRec59[2]))); - fVec3[0] = (((((((fRec6[0] - fRec6[2]) * fSlow35) + (((fRec11[0] - fRec11[2]) * fSlow37) + (((fRec12[0] - fRec12[2]) * fSlow39) + (((fRec13[0] - fRec13[2]) * fSlow41) + (((fRec14[0] - fRec14[2]) * fSlow43) + (((fRec15[0] - fRec15[2]) * fSlow45) + (((fRec16[0] - fRec16[2]) * fSlow47) + (((fRec17[0] - fRec17[2]) * fSlow49) + (((fRec18[0] - fRec18[2]) * fSlow51) + (((fRec19[0] - fRec19[2]) * fSlow53) + (((fRec20[0] - fRec20[2]) * fSlow55) + (((fRec21[0] - fRec21[2]) * fSlow57) + (((fRec22[0] - fRec22[2]) * fSlow59) + (((fRec23[0] - fRec23[2]) * fSlow61) + (((fRec24[0] - fRec24[2]) * fSlow63) + (((fRec25[0] - fRec25[2]) * fSlow65) + (((fRec26[0] - fRec26[2]) * fSlow67) + (((fRec27[0] - fRec27[2]) * fSlow69) + (((fRec28[0] - fRec28[2]) * fSlow71) + (((fRec29[0] - fRec29[2]) * fSlow73) + (((fRec30[0] - fRec30[2]) * fSlow75) + (((fRec31[0] - fRec31[2]) * fSlow77) + (((fRec32[0] - fRec32[2]) * fSlow79) + (((fRec33[0] - fRec33[2]) * fSlow81) + (((fRec34[0] - fRec34[2]) * fSlow83) + (((fRec35[0] - fRec35[2]) * fSlow85) + (((fRec36[0] - fRec36[2]) * fSlow87) + (((fRec37[0] - fRec37[2]) * fSlow89) + ((((((((((((((((fRec38[0] - fRec38[2]) * fSlow91) + (((((fRec39[0] - fRec39[2]) * fSlow93) + ((fRec40[0] - fRec40[2]) * fSlow95)) + ((fRec41[0] - fRec41[2]) * fSlow97)) + ((fRec42[0] - fRec42[2]) * fSlow99))) + ((fRec43[0] - fRec43[2]) * fSlow101)) + ((fRec44[0] - fRec44[2]) * fSlow103)) + ((fRec45[0] - fRec45[2]) * fSlow105)) + (fSlow106 * (fRec46[0] - fRec46[2]))) + ((fRec47[0] - fRec47[2]) * fSlow109)) + (fSlow110 * (fRec48[0] - fRec48[2]))) + (fSlow112 * (fRec49[0] - fRec49[2]))) + (fSlow114 * (fRec50[0] - fRec50[2]))) + (fSlow116 * (fRec51[0] - fRec51[2]))) + (fSlow118 * (fRec52[0] - fRec52[2]))) + ((fRec53[0] - fRec53[2]) * fSlow121)) + ((fRec54[0] - fRec54[2]) * fSlow123)) + ((fRec55[0] - fRec55[2]) * fSlow125)))))))))))))))))))))))))))))) + ((fRec56[0] - fRec56[2]) * fSlow127)) + ((fRec57[0] - fRec57[2]) * fSlow129)) + ((fRec58[0] - fRec58[2]) * fSlow131)) + ((fRec59[0] - fRec59[2]) * fSlow133)); - float fTemp3 = ((0.99000001f * fRec5[0]) + (0.0199999996f * fVec3[1])); - fVec4[(IOTA & 2047)] = fTemp3; - fRec3[0] = ((fSlow8 * fVec4[((IOTA - iSlow10) & 2047)]) + (fSlow11 * ((((fSlow14 * fVec4[((IOTA - iSlow15) & 2047)]) + (fSlow12 * fVec4[((IOTA - iSlow13) & 2047)])) + (fSlow17 * fVec4[((IOTA - iSlow18) & 2047)])) + (fSlow19 * fVec4[((IOTA - iSlow20) & 2047)])))); + fVec1[0] = fSlow29; + iRec10[0] = (((iRec10[1] + (iRec10[1] > 0)) * (fSlow29 <= fVec1[1])) + (fSlow29 > fVec1[1])); + float fTemp1 = (fSlow28 * float(iRec10[0])); + float fTemp2 = (fSlow24 * ((fRec7[2] + (fRec7[0] + (2.0f * fRec7[1]))) * std::max(0.0f, std::min(fTemp1, (2.0f - fTemp1))))); + fRec6[0] = (fTemp2 - ((fSlow30 * fRec6[1]) + (fConst16 * fRec6[2]))); + fRec11[0] = (fTemp2 - ((fSlow33 * fRec11[1]) + (fConst21 * fRec11[2]))); + fRec12[0] = (fTemp2 - ((fSlow35 * fRec12[1]) + (fConst25 * fRec12[2]))); + fRec13[0] = (fTemp2 - ((fSlow37 * fRec13[1]) + (fConst29 * fRec13[2]))); + fRec14[0] = (fTemp2 - ((fSlow39 * fRec14[1]) + (fConst33 * fRec14[2]))); + fRec15[0] = (fTemp2 - ((fSlow41 * fRec15[1]) + (fConst37 * fRec15[2]))); + fRec16[0] = (fTemp2 - ((fSlow43 * fRec16[1]) + (fConst41 * fRec16[2]))); + fRec17[0] = (fTemp2 - ((fSlow45 * fRec17[1]) + (fConst45 * fRec17[2]))); + fRec18[0] = (fTemp2 - ((fSlow47 * fRec18[1]) + (fConst49 * fRec18[2]))); + fRec19[0] = (fTemp2 - ((fSlow49 * fRec19[1]) + (fConst53 * fRec19[2]))); + fRec20[0] = (fTemp2 - ((fSlow51 * fRec20[1]) + (fConst57 * fRec20[2]))); + fRec21[0] = (fTemp2 - ((fSlow53 * fRec21[1]) + (fConst61 * fRec21[2]))); + fRec22[0] = (fTemp2 - ((fSlow55 * fRec22[1]) + (fConst65 * fRec22[2]))); + fRec23[0] = (fTemp2 - ((fSlow57 * fRec23[1]) + (fConst69 * fRec23[2]))); + fRec24[0] = (fTemp2 - ((fSlow59 * fRec24[1]) + (fConst73 * fRec24[2]))); + fRec25[0] = (fTemp2 - ((fSlow61 * fRec25[1]) + (fConst77 * fRec25[2]))); + fRec26[0] = (fTemp2 - ((fSlow63 * fRec26[1]) + (fConst81 * fRec26[2]))); + fRec27[0] = (fTemp2 - ((fSlow65 * fRec27[1]) + (fConst85 * fRec27[2]))); + fRec28[0] = (fTemp2 - ((fSlow67 * fRec28[1]) + (fConst89 * fRec28[2]))); + fRec29[0] = (fTemp2 - ((fSlow69 * fRec29[1]) + (fConst93 * fRec29[2]))); + fRec30[0] = (fTemp2 - ((fSlow71 * fRec30[1]) + (fConst97 * fRec30[2]))); + fRec31[0] = (fTemp2 - ((fSlow73 * fRec31[1]) + (fConst101 * fRec31[2]))); + fRec32[0] = (fTemp2 - ((fSlow75 * fRec32[1]) + (fConst105 * fRec32[2]))); + fRec33[0] = (fTemp2 - ((fSlow77 * fRec33[1]) + (fConst109 * fRec33[2]))); + fRec34[0] = (fTemp2 - ((fSlow79 * fRec34[1]) + (fConst113 * fRec34[2]))); + fRec35[0] = (fTemp2 - ((fSlow81 * fRec35[1]) + (fConst117 * fRec35[2]))); + fRec36[0] = (fTemp2 - ((fSlow83 * fRec36[1]) + (fConst121 * fRec36[2]))); + fRec37[0] = (fTemp2 - ((fSlow85 * fRec37[1]) + (fConst125 * fRec37[2]))); + fRec38[0] = (fTemp2 - ((fSlow87 * fRec38[1]) + (fConst129 * fRec38[2]))); + fRec39[0] = (fTemp2 - ((fSlow89 * fRec39[1]) + (fConst133 * fRec39[2]))); + fRec40[0] = (fTemp2 - ((fSlow91 * fRec40[1]) + (fConst137 * fRec40[2]))); + fRec41[0] = (fTemp2 - ((fSlow93 * fRec41[1]) + (fConst141 * fRec41[2]))); + fRec42[0] = (fTemp2 - ((fSlow95 * fRec42[1]) + (fConst145 * fRec42[2]))); + fRec43[0] = (fTemp2 - ((fSlow97 * fRec43[1]) + (fConst149 * fRec43[2]))); + fRec44[0] = (fTemp2 - ((fSlow99 * fRec44[1]) + (fConst153 * fRec44[2]))); + fRec45[0] = (fTemp2 - ((fSlow101 * fRec45[1]) + (fConst157 * fRec45[2]))); + fRec46[0] = (fTemp2 - ((fSlow103 * fRec46[1]) + (fConst161 * fRec46[2]))); + fRec47[0] = (fTemp2 - ((fSlow105 * fRec47[1]) + (fConst165 * fRec47[2]))); + fRec48[0] = (fTemp2 - ((fSlow107 * fRec48[1]) + (fConst169 * fRec48[2]))); + fRec49[0] = (fTemp2 - ((fSlow109 * fRec49[1]) + (fConst173 * fRec49[2]))); + fRec50[0] = (fTemp2 - ((fSlow111 * fRec50[1]) + (fConst177 * fRec50[2]))); + fRec51[0] = (fTemp2 - ((fSlow113 * fRec51[1]) + (fConst181 * fRec51[2]))); + fRec52[0] = (fTemp2 - ((fSlow115 * fRec52[1]) + (fConst185 * fRec52[2]))); + fRec53[0] = (fTemp2 - ((fSlow117 * fRec53[1]) + (fConst189 * fRec53[2]))); + fRec54[0] = (fTemp2 - ((fSlow119 * fRec54[1]) + (fConst193 * fRec54[2]))); + fRec55[0] = (fTemp2 - ((fSlow121 * fRec55[1]) + (fConst197 * fRec55[2]))); + fRec56[0] = (fTemp2 - ((fSlow123 * fRec56[1]) + (fConst201 * fRec56[2]))); + fRec57[0] = (fTemp2 - ((fSlow125 * fRec57[1]) + (fConst205 * fRec57[2]))); + fRec58[0] = (fTemp2 - ((fSlow127 * fRec58[1]) + (fConst209 * fRec58[2]))); + fRec59[0] = (fTemp2 - ((fSlow129 * fRec59[1]) + (fConst213 * fRec59[2]))); + fVec2[0] = (((fRec6[0] - fRec6[2]) * fSlow32) + (((fRec11[0] - fRec11[2]) * fSlow34) + (((fRec12[0] - fRec12[2]) * fSlow36) + (((fRec13[0] - fRec13[2]) * fSlow38) + (((fRec14[0] - fRec14[2]) * fSlow40) + (((fRec15[0] - fRec15[2]) * fSlow42) + (((fRec16[0] - fRec16[2]) * fSlow44) + (((fRec17[0] - fRec17[2]) * fSlow46) + (((fRec18[0] - fRec18[2]) * fSlow48) + (((fRec19[0] - fRec19[2]) * fSlow50) + (((fRec20[0] - fRec20[2]) * fSlow52) + (((fRec21[0] - fRec21[2]) * fSlow54) + (((fRec22[0] - fRec22[2]) * fSlow56) + (((fRec23[0] - fRec23[2]) * fSlow58) + (((fRec24[0] - fRec24[2]) * fSlow60) + (((fRec25[0] - fRec25[2]) * fSlow62) + (((fRec26[0] - fRec26[2]) * fSlow64) + (((fRec27[0] - fRec27[2]) * fSlow66) + (((fRec28[0] - fRec28[2]) * fSlow68) + (((fRec29[0] - fRec29[2]) * fSlow70) + ((((((((((((((fRec30[0] - fRec30[2]) * fSlow72) + (((fRec31[0] - fRec31[2]) * fSlow74) + (((fRec32[0] - fRec32[2]) * fSlow76) + (((fRec33[0] - fRec33[2]) * fSlow78) + (((fRec34[0] - fRec34[2]) * fSlow80) + (((fRec35[0] - fRec35[2]) * fSlow82) + (((fRec36[0] - fRec36[2]) * fSlow84) + (((((((((((((fRec37[0] - fRec37[2]) * fSlow86) + ((fRec38[0] - fRec38[2]) * fSlow88)) + ((fRec39[0] - fRec39[2]) * fSlow90)) + ((fRec40[0] - fRec40[2]) * fSlow92)) + ((fRec41[0] - fRec41[2]) * fSlow94)) + ((fRec42[0] - fRec42[2]) * fSlow96)) + ((fRec43[0] - fRec43[2]) * fSlow98)) + ((fRec44[0] - fRec44[2]) * fSlow100)) + ((fRec45[0] - fRec45[2]) * fSlow102)) + ((fRec46[0] - fRec46[2]) * fSlow104)) + ((fRec47[0] - fRec47[2]) * fSlow106)) + ((fRec48[0] - fRec48[2]) * fSlow108))))))))) + ((fRec49[0] - fRec49[2]) * fSlow110)) + ((fRec50[0] - fRec50[2]) * fSlow112)) + ((fRec51[0] - fRec51[2]) * fSlow114)) + ((fRec52[0] - fRec52[2]) * fSlow116)) + ((fRec53[0] - fRec53[2]) * fSlow118)) + ((fRec54[0] - fRec54[2]) * fSlow120)) + ((fRec55[0] - fRec55[2]) * fSlow122)) + ((fRec56[0] - fRec56[2]) * fSlow124)) + ((fRec57[0] - fRec57[2]) * fSlow126)) + ((fRec58[0] - fRec58[2]) * fSlow128)) + ((fRec59[0] - fRec59[2]) * fSlow130)))))))))))))))))))))); + float fTemp3 = ((0.99000001f * fRec5[0]) + (0.0199999996f * fVec2[1])); + fVec3[(IOTA & 2047)] = fTemp3; + fRec3[0] = ((fSlow8 * fVec3[((IOTA - iSlow10) & 2047)]) + (fSlow11 * ((((fSlow12 * fVec3[((IOTA - iSlow13) & 2047)]) + (fSlow14 * fVec3[((IOTA - iSlow15) & 2047)])) + (fSlow17 * fVec3[((IOTA - iSlow18) & 2047)])) + (fSlow19 * fVec3[((IOTA - iSlow20) & 2047)])))); float fRec1 = fRec3[0]; output0[i] = FAUSTFLOAT(fRec1); iRec0[1] = iRec0[0]; @@ -1634,8 +1612,7 @@ class synth_marimba : public dsp { fRec7[2] = fRec7[1]; fRec7[1] = fRec7[0]; fVec1[1] = fVec1[0]; - fVec2[1] = fVec2[0]; - fRec10[1] = fRec10[0]; + iRec10[1] = iRec10[0]; fRec6[2] = fRec6[1]; fRec6[1] = fRec6[0]; fRec11[2] = fRec11[1]; @@ -1736,14 +1713,11 @@ class synth_marimba : public dsp { fRec58[1] = fRec58[0]; fRec59[2] = fRec59[1]; fRec59[1] = fRec59[0]; - fVec3[1] = fVec3[0]; + fVec2[1] = fVec2[0]; fRec3[1] = fRec3[0]; - } - } - }; // clang-format on #endif diff --git a/ceammc/ext/src/synth/synth_rhodey.cpp b/ceammc/ext/src/synth/synth_rhodey.cpp index 6becae4cda..1211f94ba0 100644 --- a/ceammc/ext/src/synth/synth_rhodey.cpp +++ b/ceammc/ext/src/synth/synth_rhodey.cpp @@ -12,7 +12,7 @@ * this file belongs to. *****************************************************************************/ #include "synth_rhodey.h" -#include "ceammc_factory.h" +#include "stk_synth_factory.h" #include "Rhodey.h" #include "stksynth_p.h" @@ -31,5 +31,5 @@ SynthRhodey::SynthRhodey(const PdArgs& args) void setup_synth_rhodey() { - SoundExternalFactory obj("synth.rhodey~", OBJECT_FACTORY_DEFAULT); + StkSynthFactory obj("synth.rhodey~"); } diff --git a/ceammc/ext/src/synth/synth_risset_arp.h b/ceammc/ext/src/synth/synth_risset_arp.h index 2edddecee1..c37d7a4276 100644 --- a/ceammc/ext/src/synth/synth_risset_arp.h +++ b/ceammc/ext/src/synth/synth_risset_arp.h @@ -3,8 +3,8 @@ author: "Oli Larkin (contact@olilarkin.co.uk)" copyright: "Oliver Larkin" name: "synth.risset_arp" version: "0.1" -Code generated with Faust 2.15.0 (https://faust.grame.fr) -Compilation options: cpp, -scal -ftz 0 +Code generated with Faust 2.22.1 (https://faust.grame.fr) +Compilation options: -lang cpp -scal -ftz 0 ------------------------------------------------------------ */ #ifndef __synth_risset_arp_H__ @@ -17,6 +17,7 @@ Compilation options: cpp, -scal -ftz 0 #include #include +/************************** BEGIN dsp.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -99,23 +100,23 @@ class dsp { * - static class 'classInit': static tables initialization * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void init(int samplingRate) = 0; + virtual void init(int sample_rate) = 0; /** * Init instance state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceInit(int samplingRate) = 0; + virtual void instanceInit(int sample_rate) = 0; /** * Init instance constant state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceConstants(int samplingRate) = 0; + virtual void instanceConstants(int sample_rate) = 0; /* Init default control parameters values */ virtual void instanceResetUserInterface() = 0; @@ -152,8 +153,8 @@ class dsp { * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the number of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) * */ virtual void compute(double /*date_usec*/, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -172,16 +173,16 @@ class decorator_dsp : public dsp { public: - decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + decorator_dsp(dsp* dsp = nullptr):fDSP(dsp) {} virtual ~decorator_dsp() { delete fDSP; } virtual int getNumInputs() { return fDSP->getNumInputs(); } virtual int getNumOutputs() { return fDSP->getNumOutputs(); } virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } virtual int getSampleRate() { return fDSP->getSampleRate(); } - virtual void init(int samplingRate) { fDSP->init(samplingRate); } - virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } - virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void init(int sample_rate) { fDSP->init(sample_rate); } + virtual void instanceInit(int sample_rate) { fDSP->instanceInit(sample_rate); } + virtual void instanceConstants(int sample_rate) { fDSP->instanceConstants(sample_rate); } virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } @@ -236,6 +237,8 @@ class dsp_factory { #endif #endif +/************************** END dsp.h **************************/ +/************************** BEGIN UI.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -275,45 +278,54 @@ class dsp_factory { struct Soundfile; -class UI +template +class UIReal { - + public: - - UI() {} - - virtual ~UI() {} - + + UIReal() {} + virtual ~UIReal() {} + // -- widget's layouts - + virtual void openTabBox(const char* label) = 0; virtual void openHorizontalBox(const char* label) = 0; virtual void openVerticalBox(const char* label) = 0; virtual void closeBox() = 0; - + // -- active widgets - - virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - + + virtual void addButton(const char* label, REAL* zone) = 0; + virtual void addCheckButton(const char* label, REAL* zone) = 0; + virtual void addVerticalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addHorizontalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addNumEntry(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + // -- passive widgets - - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - + + virtual void addHorizontalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + virtual void addVerticalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + // -- soundfiles - + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; - + // -- metadata declarations + + virtual void declare(REAL* zone, const char* key, const char* val) {} +}; + +struct UI : public UIReal +{ - virtual void declare(FAUSTFLOAT*, const char*, const char*) {} + UI() {} + virtual ~UI() {} }; #endif +/************************** END UI.h **************************/ +/************************** BEGIN meta.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -342,11 +354,14 @@ class UI struct Meta { - virtual void declare(const char* key, const char* value) = 0; virtual ~Meta() {}; + virtual void declare(const char* key, const char* value) = 0; + }; #endif +/************************** END meta.h **************************/ +/************************** BEGIN misc.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -369,7 +384,7 @@ struct Meta that work under terms of your choice, so long as this FAUST architecture section is not modified. ************************************************************************/ - + #ifndef __misc__ #define __misc__ @@ -377,6 +392,8 @@ struct Meta #include #include #include +#include +#include using std::max; @@ -398,27 +415,65 @@ static int int2pow2(int x) { int r = 0; while ((1< #include - class synth_risset_arpSIG0 { private: - int iRec1[2]; + int iRec0[2]; public: int getNumInputssynth_risset_arpSIG0() { return 0; - } int getNumOutputssynth_risset_arpSIG0() { return 1; - } int getInputRatesynth_risset_arpSIG0(int channel) { int rate; - switch (channel) { + switch ((channel)) { default: { rate = -1; break; } - } return rate; - } int getOutputRatesynth_risset_arpSIG0(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 0; break; @@ -489,43 +539,38 @@ class synth_risset_arpSIG0 { rate = -1; break; } - } return rate; - } - void instanceInitsynth_risset_arpSIG0(int samplingFreq) { - for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { - iRec1[l1] = 0; - + void instanceInitsynth_risset_arpSIG0(int sample_rate) { + for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + iRec0[l0] = 0; } - } - void fillsynth_risset_arpSIG0(int count, float* output) { + void fillsynth_risset_arpSIG0(int count, float* table) { for (int i = 0; (i < count); i = (i + 1)) { - iRec1[0] = (iRec1[1] + 1); - output[i] = std::sin((9.58738019e-05f * float((iRec1[0] + -1)))); - iRec1[1] = iRec1[0]; - + iRec0[0] = (iRec0[1] + 1); + table[i] = std::sin((9.58738019e-05f * float((iRec0[0] + -1)))); + iRec0[1] = iRec0[0]; } - } + }; -synth_risset_arpSIG0* newsynth_risset_arpSIG0() { return (synth_risset_arpSIG0*)new synth_risset_arpSIG0(); } -void deletesynth_risset_arpSIG0(synth_risset_arpSIG0* dsp) { delete dsp; } +static synth_risset_arpSIG0* newsynth_risset_arpSIG0() { return (synth_risset_arpSIG0*)new synth_risset_arpSIG0(); } +static void deletesynth_risset_arpSIG0(synth_risset_arpSIG0* dsp) { delete dsp; } static float ftbl0synth_risset_arpSIG0[65536]; static float synth_risset_arp_faustpower2_f(float value) { return (value * value); - } #ifndef FAUSTCLASS #define FAUSTCLASS synth_risset_arp #endif + #ifdef __APPLE__ #define exp10f __exp10f #define exp10 __exp10 @@ -535,15 +580,15 @@ class synth_risset_arp : public dsp { private: - FAUSTFLOAT fHslider0; - float fRec0[2]; - int fSamplingFreq; + int fSampleRate; float fConst0; + FAUSTFLOAT fHslider0; + float fRec2[2]; FAUSTFLOAT fHslider1; float fRec3[2]; + float fRec1[2]; FAUSTFLOAT fHslider2; float fRec4[2]; - float fRec2[2]; FAUSTFLOAT fHslider3; float fRec5[2]; FAUSTFLOAT fHslider4; @@ -573,10 +618,10 @@ class synth_risset_arp : public dsp { void metadata(Meta* m) { m->declare("author", "Oli Larkin (contact@olilarkin.co.uk)"); m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.0"); + m->declare("basics.lib/version", "0.1"); m->declare("copyright", "Oliver Larkin"); m->declare("description", "Jean Claude Risset's Harmonic Arpeggio Effect"); - m->declare("filename", "synth_risset_arp"); + m->declare("filename", "synth_risset_arp.dsp"); m->declare("licence", "GPL"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); @@ -593,27 +638,23 @@ class synth_risset_arp : public dsp { virtual int getNumInputs() { return 0; - } virtual int getNumOutputs() { return 2; - } virtual int getInputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { default: { rate = -1; break; } - } return rate; - } virtual int getOutputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -626,30 +667,26 @@ class synth_risset_arp : public dsp { rate = -1; break; } - } return rate; - } - static void classInit(int samplingFreq) { + static void classInit(int sample_rate) { synth_risset_arpSIG0* sig0 = newsynth_risset_arpSIG0(); - sig0->instanceInitsynth_risset_arpSIG0(samplingFreq); + sig0->instanceInitsynth_risset_arpSIG0(sample_rate); sig0->fillsynth_risset_arpSIG0(65536, ftbl0synth_risset_arpSIG0); deletesynth_risset_arpSIG0(sig0); - } - virtual void instanceConstants(int samplingFreq) { - fSamplingFreq = samplingFreq; - fConst0 = (1.0f / std::min(192000.0f, std::max(1.0f, float(fSamplingFreq)))); - + virtual void instanceConstants(int sample_rate) { + fSampleRate = sample_rate; + fConst0 = (1.0f / std::min(192000.0f, std::max(1.0f, float(fSampleRate)))); } virtual void instanceResetUserInterface() { - fHslider0 = FAUSTFLOAT(1.0f); + fHslider0 = FAUSTFLOAT(100.0f); fHslider1 = FAUSTFLOAT(5.0f); - fHslider2 = FAUSTFLOAT(100.0f); + fHslider2 = FAUSTFLOAT(1.0f); fHslider3 = FAUSTFLOAT(1.0f); fHslider4 = FAUSTFLOAT(1.0f); fHslider5 = FAUSTFLOAT(1.0f); @@ -658,95 +695,74 @@ class synth_risset_arp : public dsp { fHslider8 = FAUSTFLOAT(1.0f); fHslider9 = FAUSTFLOAT(1.0f); fHslider10 = FAUSTFLOAT(1.0f); - } virtual void instanceClear() { - for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { - fRec0[l0] = 0.0f; - + for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + fRec2[l1] = 0.0f; } for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { fRec3[l2] = 0.0f; - } for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { - fRec4[l3] = 0.0f; - + fRec1[l3] = 0.0f; } for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { - fRec2[l4] = 0.0f; - + fRec4[l4] = 0.0f; } for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { fRec5[l5] = 0.0f; - } for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { fRec6[l6] = 0.0f; - } for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) { fRec7[l7] = 0.0f; - } for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { fRec8[l8] = 0.0f; - } for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { fRec9[l9] = 0.0f; - } for (int l10 = 0; (l10 < 2); l10 = (l10 + 1)) { fRec10[l10] = 0.0f; - } for (int l11 = 0; (l11 < 2); l11 = (l11 + 1)) { fRec11[l11] = 0.0f; - } for (int l12 = 0; (l12 < 2); l12 = (l12 + 1)) { fRec12[l12] = 0.0f; - } for (int l13 = 0; (l13 < 2); l13 = (l13 + 1)) { fRec13[l13] = 0.0f; - } for (int l14 = 0; (l14 < 2); l14 = (l14 + 1)) { fRec14[l14] = 0.0f; - } for (int l15 = 0; (l15 < 2); l15 = (l15 + 1)) { fRec15[l15] = 0.0f; - } for (int l16 = 0; (l16 < 2); l16 = (l16 + 1)) { fRec16[l16] = 0.0f; - } for (int l17 = 0; (l17 < 2); l17 = (l17 + 1)) { fRec17[l17] = 0.0f; - } for (int l18 = 0; (l18 < 2); l18 = (l18 + 1)) { fRec18[l18] = 0.0f; - } for (int l19 = 0; (l19 < 2); l19 = (l19 + 1)) { fRec19[l19] = 0.0f; - } - } - virtual void init(int samplingFreq) { - classInit(samplingFreq); - instanceInit(samplingFreq); + virtual void init(int sample_rate) { + classInit(sample_rate); + instanceInit(sample_rate); } - virtual void instanceInit(int samplingFreq) { - instanceConstants(samplingFreq); + virtual void instanceInit(int sample_rate) { + instanceConstants(sample_rate); instanceResetUserInterface(); instanceClear(); } @@ -754,26 +770,25 @@ class synth_risset_arp : public dsp { virtual synth_risset_arp* clone() { return new synth_risset_arp(); } + virtual int getSampleRate() { - return fSamplingFreq; - + return fSampleRate; } virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("synth.risset_arp"); ui_interface->addHorizontalSlider("detune", &fHslider1, 5.0f, 0.0f, 1000.0f, 0.00999999978f); - ui_interface->addHorizontalSlider("freq", &fHslider2, 100.0f, 40.0f, 500.0f, 1.0f); - ui_interface->addHorizontalSlider("harmonic1", &fHslider4, 1.0f, 0.0f, 1.0f, 0.00999999978f); - ui_interface->addHorizontalSlider("harmonic2", &fHslider8, 1.0f, 0.0f, 1.0f, 0.00999999978f); + ui_interface->addHorizontalSlider("freq", &fHslider0, 100.0f, 40.0f, 500.0f, 1.0f); + ui_interface->addHorizontalSlider("harmonic1", &fHslider2, 1.0f, 0.0f, 1.0f, 0.00999999978f); + ui_interface->addHorizontalSlider("harmonic2", &fHslider6, 1.0f, 0.0f, 1.0f, 0.00999999978f); ui_interface->addHorizontalSlider("harmonic3", &fHslider3, 1.0f, 0.0f, 1.0f, 0.00999999978f); - ui_interface->addHorizontalSlider("harmonic4", &fHslider9, 1.0f, 0.0f, 1.0f, 0.00999999978f); - ui_interface->addHorizontalSlider("harmonic5", &fHslider5, 1.0f, 0.0f, 1.0f, 0.00999999978f); - ui_interface->addHorizontalSlider("harmonic6", &fHslider10, 1.0f, 0.0f, 1.0f, 0.00999999978f); - ui_interface->addHorizontalSlider("harmonic7", &fHslider6, 1.0f, 0.0f, 1.0f, 0.00999999978f); - ui_interface->addHorizontalSlider("harmonic8", &fHslider7, 1.0f, 0.0f, 1.0f, 0.00999999978f); - ui_interface->addHorizontalSlider("spread", &fHslider0, 1.0f, 0.0f, 1.0f, 0.00999999978f); + ui_interface->addHorizontalSlider("harmonic4", &fHslider7, 1.0f, 0.0f, 1.0f, 0.00999999978f); + ui_interface->addHorizontalSlider("harmonic5", &fHslider4, 1.0f, 0.0f, 1.0f, 0.00999999978f); + ui_interface->addHorizontalSlider("harmonic6", &fHslider8, 1.0f, 0.0f, 1.0f, 0.00999999978f); + ui_interface->addHorizontalSlider("harmonic7", &fHslider5, 1.0f, 0.0f, 1.0f, 0.00999999978f); + ui_interface->addHorizontalSlider("harmonic8", &fHslider9, 1.0f, 0.0f, 1.0f, 0.00999999978f); + ui_interface->addHorizontalSlider("spread", &fHslider10, 1.0f, 0.0f, 1.0f, 0.00999999978f); ui_interface->closeBox(); - } virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { @@ -791,61 +806,61 @@ class synth_risset_arp : public dsp { float fSlow9 = (0.00100000005f * float(fHslider9)); float fSlow10 = (0.00100000005f * float(fHslider10)); for (int i = 0; (i < count); i = (i + 1)) { - fRec0[0] = (fSlow0 + (0.999000013f * fRec0[1])); - float fTemp0 = (0.357142866f * fRec0[0]); + fRec2[0] = (fSlow0 + (0.999000013f * fRec2[1])); fRec3[0] = (fSlow1 + (0.999000013f * fRec3[1])); - float fTemp1 = (2.0f * fRec3[0]); + float fTemp0 = (fRec1[1] + (fConst0 * (fRec2[0] - (4.0f * fRec3[0])))); + fRec1[0] = (fTemp0 - std::floor(fTemp0)); + float fTemp1 = ftbl0synth_risset_arpSIG0[int((65536.0f * fRec1[0]))]; fRec4[0] = (fSlow2 + (0.999000013f * fRec4[1])); - float fTemp2 = (fRec2[1] + (fConst0 * (fTemp1 + fRec4[0]))); - fRec2[0] = (fTemp2 - std::floor(fTemp2)); - float fTemp3 = ftbl0synth_risset_arpSIG0[int((65536.0f * fRec2[0]))]; - float fTemp4 = synth_risset_arp_faustpower2_f(fTemp3); - float fTemp5 = ((2.0f * fTemp4) + -1.0f); - float fTemp6 = ((2.0f * fTemp5) + -1.0f); fRec5[0] = (fSlow3 + (0.999000013f * fRec5[1])); + float fTemp2 = synth_risset_arp_faustpower2_f(fTemp1); + float fTemp3 = ((2.0f * fTemp2) + -1.0f); + float fTemp4 = ((2.0f * fTemp3) + -1.0f); fRec6[0] = (fSlow4 + (0.999000013f * fRec6[1])); - float fTemp7 = (1.0f - fTemp6); - float fTemp8 = (1.0f - (2.0f * (fTemp4 * fTemp7))); - float fTemp9 = ((2.0f * fTemp8) - fTemp6); + float fTemp5 = (1.0f - fTemp4); + float fTemp6 = (1.0f - (2.0f * (fTemp2 * fTemp5))); + float fTemp7 = ((2.0f * fTemp6) - fTemp4); fRec7[0] = (fSlow5 + (0.999000013f * fRec7[1])); - float fTemp10 = (fTemp7 + fTemp9); - float fTemp11 = ((2.0f * (fTemp4 * fTemp10)) + -1.0f); - float fTemp12 = ((2.0f * fTemp11) - fTemp9); + float fTemp8 = (fTemp5 + fTemp7); + float fTemp9 = ((2.0f * (fTemp2 * fTemp8)) + -1.0f); + float fTemp10 = ((2.0f * fTemp9) - fTemp7); fRec8[0] = (fSlow6 + (0.999000013f * fRec8[1])); fRec9[0] = (fSlow7 + (0.999000013f * fRec9[1])); fRec10[0] = (fSlow8 + (0.999000013f * fRec10[1])); fRec11[0] = (fSlow9 + (0.999000013f * fRec11[1])); + float fTemp11 = ((((fTemp1 * (((fRec4[0] + (fRec5[0] * fTemp4)) + (fRec6[0] * fTemp7)) + (fRec7[0] * fTemp10))) + (((fRec8[0] * fTemp3) + (fRec9[0] * fTemp6)) + (fRec10[0] * fTemp9))) + (fRec11[0] * (1.0f - (2.0f * (fTemp2 * (fTemp8 - fTemp10)))))) + 1.0f); fRec12[0] = (fSlow10 + (0.999000013f * fRec12[1])); - float fTemp13 = (((fTemp3 * ((((fTemp6 * fRec5[0]) + fRec6[0]) + (fTemp9 * fRec7[0])) + (fTemp12 * fRec8[0]))) + (((1.0f - (2.0f * (fTemp4 * (fTemp10 - fTemp12)))) * fRec9[0]) + (((fTemp5 * fRec10[0]) + (fTemp8 * fRec11[0])) + (fTemp11 * fRec12[0])))) + 1.0f); - float fTemp14 = (0.214285716f * fRec0[0]); - float fTemp15 = (fRec13[1] + (fConst0 * (fRec4[0] + fRec3[0]))); - fRec13[0] = (fTemp15 - std::floor(fTemp15)); - float fTemp16 = ftbl0synth_risset_arpSIG0[int((65536.0f * fRec13[0]))]; - float fTemp17 = synth_risset_arp_faustpower2_f(fTemp16); + float fTemp12 = (1.0f - fRec12[0]); + float fTemp13 = (3.0f * fRec3[0]); + float fTemp14 = (fRec13[1] + (fConst0 * (fRec2[0] + fTemp13))); + fRec13[0] = (fTemp14 - std::floor(fTemp14)); + float fTemp15 = ftbl0synth_risset_arpSIG0[int((65536.0f * fRec13[0]))]; + float fTemp16 = synth_risset_arp_faustpower2_f(fTemp15); + float fTemp17 = ((2.0f * fTemp16) + -1.0f); float fTemp18 = ((2.0f * fTemp17) + -1.0f); - float fTemp19 = ((2.0f * fTemp18) + -1.0f); - float fTemp20 = (1.0f - fTemp19); - float fTemp21 = (1.0f - (2.0f * (fTemp17 * fTemp20))); - float fTemp22 = ((2.0f * fTemp21) - fTemp19); - float fTemp23 = (fTemp20 + fTemp22); - float fTemp24 = ((2.0f * (fTemp17 * fTemp23)) + -1.0f); - float fTemp25 = ((2.0f * fTemp24) - fTemp22); - float fTemp26 = (((fTemp16 * ((((fTemp19 * fRec5[0]) + fRec6[0]) + (fTemp22 * fRec7[0])) + (fTemp25 * fRec8[0]))) + (((1.0f - (2.0f * (fTemp17 * (fTemp23 - fTemp25)))) * fRec9[0]) + (((fTemp18 * fRec10[0]) + (fTemp21 * fRec11[0])) + (fTemp24 * fRec12[0])))) + 1.0f); - float fTemp27 = (0.0714285746f * fRec0[0]); - float fTemp28 = (fRec14[1] + (fConst0 * fRec4[0])); - fRec14[0] = (fTemp28 - std::floor(fTemp28)); - float fTemp29 = ftbl0synth_risset_arpSIG0[int((65536.0f * fRec14[0]))]; - float fTemp30 = synth_risset_arp_faustpower2_f(fTemp29); + float fTemp19 = (1.0f - fTemp18); + float fTemp20 = (1.0f - (2.0f * (fTemp16 * fTemp19))); + float fTemp21 = ((2.0f * fTemp20) - fTemp18); + float fTemp22 = (fTemp19 + fTemp21); + float fTemp23 = ((2.0f * (fTemp16 * fTemp22)) + -1.0f); + float fTemp24 = ((2.0f * fTemp23) - fTemp21); + float fTemp25 = (((fTemp15 * (((fRec4[0] + (fRec5[0] * fTemp18)) + (fRec6[0] * fTemp21)) + (fRec7[0] * fTemp24))) + ((((fRec8[0] * fTemp17) + (fRec9[0] * fTemp20)) + (fRec10[0] * fTemp23)) + (fRec11[0] * (1.0f - (2.0f * (fTemp16 * (fTemp22 - fTemp24))))))) + 1.0f); + float fTemp26 = (fRec12[0] + 1.0f); + float fTemp27 = (fRec14[1] + (fConst0 * (fRec2[0] + fRec3[0]))); + fRec14[0] = (fTemp27 - std::floor(fTemp27)); + float fTemp28 = ftbl0synth_risset_arpSIG0[int((65536.0f * fRec14[0]))]; + float fTemp29 = synth_risset_arp_faustpower2_f(fTemp28); + float fTemp30 = ((2.0f * fTemp29) + -1.0f); float fTemp31 = ((2.0f * fTemp30) + -1.0f); - float fTemp32 = ((2.0f * fTemp31) + -1.0f); - float fTemp33 = (1.0f - fTemp32); - float fTemp34 = (1.0f - (2.0f * (fTemp30 * fTemp33))); - float fTemp35 = ((2.0f * fTemp34) - fTemp32); - float fTemp36 = (fTemp33 + fTemp35); - float fTemp37 = ((2.0f * (fTemp30 * fTemp36)) + -1.0f); - float fTemp38 = ((2.0f * fTemp37) - fTemp35); - float fTemp39 = (((fTemp29 * ((((fTemp32 * fRec5[0]) + fRec6[0]) + (fTemp35 * fRec7[0])) + (fTemp38 * fRec8[0]))) + (((1.0f - (2.0f * (fTemp30 * (fTemp36 - fTemp38)))) * fRec9[0]) + (((fTemp31 * fRec10[0]) + (fTemp34 * fRec11[0])) + (fTemp37 * fRec12[0])))) + 1.0f); - float fTemp40 = (fRec15[1] + (fConst0 * (fRec4[0] - fRec3[0]))); + float fTemp32 = (1.0f - fTemp31); + float fTemp33 = (1.0f - (2.0f * (fTemp29 * fTemp32))); + float fTemp34 = ((2.0f * fTemp33) - fTemp31); + float fTemp35 = (fTemp32 + fTemp34); + float fTemp36 = ((2.0f * (fTemp29 * fTemp35)) + -1.0f); + float fTemp37 = ((2.0f * fTemp36) - fTemp34); + float fTemp38 = (((fTemp28 * (((fRec4[0] + (fRec5[0] * fTemp31)) + (fRec6[0] * fTemp34)) + (fRec7[0] * fTemp37))) + ((((fRec8[0] * fTemp30) + (fRec9[0] * fTemp33)) + (fRec10[0] * fTemp36)) + (fRec11[0] * (1.0f - (2.0f * (fTemp29 * (fTemp35 - fTemp37))))))) + 1.0f); + float fTemp39 = (0.214285716f * fRec12[0]); + float fTemp40 = (fRec15[1] + (fConst0 * fRec2[0])); fRec15[0] = (fTemp40 - std::floor(fTemp40)); float fTemp41 = ftbl0synth_risset_arpSIG0[int((65536.0f * fRec15[0]))]; float fTemp42 = synth_risset_arp_faustpower2_f(fTemp41); @@ -857,24 +872,24 @@ class synth_risset_arp : public dsp { float fTemp48 = (fTemp45 + fTemp47); float fTemp49 = ((2.0f * (fTemp42 * fTemp48)) + -1.0f); float fTemp50 = ((2.0f * fTemp49) - fTemp47); - float fTemp51 = (((fTemp41 * ((((fTemp44 * fRec5[0]) + fRec6[0]) + (fTemp47 * fRec7[0])) + (fTemp50 * fRec8[0]))) + (((1.0f - (2.0f * (fTemp42 * (fTemp48 - fTemp50)))) * fRec9[0]) + (((fTemp43 * fRec10[0]) + (fTemp46 * fRec11[0])) + (fTemp49 * fRec12[0])))) + 1.0f); - float fTemp52 = (0.0714285746f * fRec0[0]); - float fTemp53 = (3.0f * fRec3[0]); - float fTemp54 = (fRec16[1] + (fConst0 * (fRec4[0] - fTemp53))); - fRec16[0] = (fTemp54 - std::floor(fTemp54)); - float fTemp55 = ftbl0synth_risset_arpSIG0[int((65536.0f * fRec16[0]))]; - float fTemp56 = synth_risset_arp_faustpower2_f(fTemp55); + float fTemp51 = (((fTemp41 * (((fRec4[0] + (fRec5[0] * fTemp44)) + (fRec6[0] * fTemp47)) + (fRec7[0] * fTemp50))) + ((((fRec8[0] * fTemp43) + (fRec9[0] * fTemp46)) + (fRec10[0] * fTemp49)) + (fRec11[0] * (1.0f - (2.0f * (fTemp42 * (fTemp48 - fTemp50))))))) + 1.0f); + float fTemp52 = (0.0714285746f * fRec12[0]); + float fTemp53 = (fRec16[1] + (fConst0 * (fRec2[0] - fRec3[0]))); + fRec16[0] = (fTemp53 - std::floor(fTemp53)); + float fTemp54 = ftbl0synth_risset_arpSIG0[int((65536.0f * fRec16[0]))]; + float fTemp55 = synth_risset_arp_faustpower2_f(fTemp54); + float fTemp56 = ((2.0f * fTemp55) + -1.0f); float fTemp57 = ((2.0f * fTemp56) + -1.0f); - float fTemp58 = ((2.0f * fTemp57) + -1.0f); - float fTemp59 = (1.0f - fTemp58); - float fTemp60 = (1.0f - (2.0f * (fTemp56 * fTemp59))); - float fTemp61 = ((2.0f * fTemp60) - fTemp58); - float fTemp62 = (fTemp59 + fTemp61); - float fTemp63 = ((2.0f * (fTemp56 * fTemp62)) + -1.0f); - float fTemp64 = ((2.0f * fTemp63) - fTemp61); - float fTemp65 = (((fTemp55 * ((((fTemp58 * fRec5[0]) + fRec6[0]) + (fTemp61 * fRec7[0])) + (fTemp64 * fRec8[0]))) + (((1.0f - (2.0f * (fTemp56 * (fTemp62 - fTemp64)))) * fRec9[0]) + (((fTemp57 * fRec10[0]) + (fTemp60 * fRec11[0])) + (fTemp63 * fRec12[0])))) + 1.0f); - float fTemp66 = (0.357142866f * fRec0[0]); - float fTemp67 = (fRec17[1] + (fConst0 * (fRec4[0] - fTemp1))); + float fTemp58 = (1.0f - fTemp57); + float fTemp59 = (1.0f - (2.0f * (fTemp55 * fTemp58))); + float fTemp60 = ((2.0f * fTemp59) - fTemp57); + float fTemp61 = (fTemp58 + fTemp60); + float fTemp62 = ((2.0f * (fTemp55 * fTemp61)) + -1.0f); + float fTemp63 = ((2.0f * fTemp62) - fTemp60); + float fTemp64 = (((fTemp54 * (((fRec4[0] + (fRec5[0] * fTemp57)) + (fRec6[0] * fTemp60)) + (fRec7[0] * fTemp63))) + ((((fRec8[0] * fTemp56) + (fRec9[0] * fTemp59)) + (fRec10[0] * fTemp62)) + (fRec11[0] * (1.0f - (2.0f * (fTemp55 * (fTemp61 - fTemp63))))))) + 1.0f); + float fTemp65 = (0.0714285746f * fRec12[0]); + float fTemp66 = (2.0f * fRec3[0]); + float fTemp67 = (fRec17[1] + (fConst0 * (fRec2[0] - fTemp66))); fRec17[0] = (fTemp67 - std::floor(fTemp67)); float fTemp68 = ftbl0synth_risset_arpSIG0[int((65536.0f * fRec17[0]))]; float fTemp69 = synth_risset_arp_faustpower2_f(fTemp68); @@ -886,9 +901,9 @@ class synth_risset_arp : public dsp { float fTemp75 = (fTemp72 + fTemp74); float fTemp76 = ((2.0f * (fTemp69 * fTemp75)) + -1.0f); float fTemp77 = ((2.0f * fTemp76) - fTemp74); - float fTemp78 = (((fTemp68 * ((((fTemp71 * fRec5[0]) + fRec6[0]) + (fTemp74 * fRec7[0])) + (fTemp77 * fRec8[0]))) + (((1.0f - (2.0f * (fTemp69 * (fTemp75 - fTemp77)))) * fRec9[0]) + (((fTemp70 * fRec10[0]) + (fTemp73 * fRec11[0])) + (fTemp76 * fRec12[0])))) + 1.0f); - float fTemp79 = (0.214285716f * fRec0[0]); - float fTemp80 = (fRec18[1] + (fConst0 * (fRec4[0] - (4.0f * fRec3[0])))); + float fTemp78 = (((fTemp68 * (((fRec4[0] + (fRec5[0] * fTemp71)) + (fRec6[0] * fTemp74)) + (fRec7[0] * fTemp77))) + ((((fRec8[0] * fTemp70) + (fRec9[0] * fTemp73)) + (fRec10[0] * fTemp76)) + (fRec11[0] * (1.0f - (2.0f * (fTemp69 * (fTemp75 - fTemp77))))))) + 1.0f); + float fTemp79 = (0.214285716f * fRec12[0]); + float fTemp80 = (fRec18[1] + (fConst0 * (fRec2[0] - fTemp13))); fRec18[0] = (fTemp80 - std::floor(fTemp80)); float fTemp81 = ftbl0synth_risset_arpSIG0[int((65536.0f * fRec18[0]))]; float fTemp82 = synth_risset_arp_faustpower2_f(fTemp81); @@ -900,28 +915,28 @@ class synth_risset_arp : public dsp { float fTemp88 = (fTemp85 + fTemp87); float fTemp89 = ((2.0f * (fTemp82 * fTemp88)) + -1.0f); float fTemp90 = ((2.0f * fTemp89) - fTemp87); - float fTemp91 = ((((fTemp81 * ((((fTemp84 * fRec5[0]) + fRec6[0]) + (fTemp87 * fRec7[0])) + (fTemp90 * fRec8[0]))) + (((fTemp83 * fRec10[0]) + (fTemp86 * fRec11[0])) + (fTemp89 * fRec12[0]))) + ((1.0f - (2.0f * (fTemp82 * (fTemp88 - fTemp90)))) * fRec9[0])) + 1.0f); - float fTemp92 = (1.0f - fRec0[0]); - float fTemp93 = (fRec0[0] + 1.0f); - float fTemp94 = (fRec19[1] + (fConst0 * (fTemp53 + fRec4[0]))); - fRec19[0] = (fTemp94 - std::floor(fTemp94)); - float fTemp95 = ftbl0synth_risset_arpSIG0[int((65536.0f * fRec19[0]))]; - float fTemp96 = synth_risset_arp_faustpower2_f(fTemp95); + float fTemp91 = (((fTemp81 * (((fRec4[0] + (fRec5[0] * fTemp84)) + (fRec6[0] * fTemp87)) + (fRec7[0] * fTemp90))) + ((((fRec8[0] * fTemp83) + (fRec9[0] * fTemp86)) + (fRec10[0] * fTemp89)) + (fRec11[0] * (1.0f - (2.0f * (fTemp82 * (fTemp88 - fTemp90))))))) + 1.0f); + float fTemp92 = (0.357142866f * fRec12[0]); + float fTemp93 = (fRec19[1] + (fConst0 * (fRec2[0] + fTemp66))); + fRec19[0] = (fTemp93 - std::floor(fTemp93)); + float fTemp94 = ftbl0synth_risset_arpSIG0[int((65536.0f * fRec19[0]))]; + float fTemp95 = synth_risset_arp_faustpower2_f(fTemp94); + float fTemp96 = ((2.0f * fTemp95) + -1.0f); float fTemp97 = ((2.0f * fTemp96) + -1.0f); - float fTemp98 = ((2.0f * fTemp97) + -1.0f); - float fTemp99 = (1.0f - fTemp98); - float fTemp100 = (1.0f - (2.0f * (fTemp96 * fTemp99))); - float fTemp101 = ((2.0f * fTemp100) - fTemp98); - float fTemp102 = (fTemp99 + fTemp101); - float fTemp103 = ((2.0f * (fTemp96 * fTemp102)) + -1.0f); - float fTemp104 = ((2.0f * fTemp103) - fTemp101); - float fTemp105 = (((fTemp95 * ((((fTemp98 * fRec5[0]) + fRec6[0]) + (fTemp101 * fRec7[0])) + (fTemp104 * fRec8[0]))) + (((1.0f - (2.0f * (fTemp96 * (fTemp102 - fTemp104)))) * fRec9[0]) + (((fTemp97 * fRec10[0]) + (fTemp100 * fRec11[0])) + (fTemp103 * fRec12[0])))) + 1.0f); - output0[i] = FAUSTFLOAT((0.0500000007f * ((((fTemp0 + 0.5f) * fTemp13) + (((fTemp14 + 0.5f) * fTemp26) + (((fTemp27 + 0.5f) * fTemp39) + ((fTemp51 * (0.5f - fTemp52)) + ((fTemp65 * (0.5f - fTemp66)) + (fTemp78 * (0.5f - fTemp79))))))) + (0.5f * ((fTemp91 * fTemp92) + (fTemp93 * fTemp105)))))); - output1[i] = FAUSTFLOAT((0.0500000007f * ((((((((fTemp91 * (1.0f - (0.5f * fTemp92))) + (fTemp65 * (fTemp66 + 0.5f))) + (fTemp78 * (fTemp79 + 0.5f))) + (fTemp51 * (fTemp52 + 0.5f))) + (fTemp39 * (0.5f - fTemp27))) + (fTemp26 * (0.5f - fTemp14))) + (fTemp13 * (0.5f - fTemp0))) + (fTemp105 * (1.0f - (0.5f * fTemp93)))))); - fRec0[1] = fRec0[0]; + float fTemp98 = (1.0f - fTemp97); + float fTemp99 = (1.0f - (2.0f * (fTemp95 * fTemp98))); + float fTemp100 = ((2.0f * fTemp99) - fTemp97); + float fTemp101 = (fTemp98 + fTemp100); + float fTemp102 = ((2.0f * (fTemp95 * fTemp101)) + -1.0f); + float fTemp103 = ((2.0f * fTemp102) - fTemp100); + float fTemp104 = (((fRec10[0] * fTemp102) + ((fRec9[0] * fTemp99) + ((fRec8[0] * fTemp96) + ((fTemp94 * (((fRec4[0] + (fRec5[0] * fTemp97)) + (fRec6[0] * fTemp100)) + (fRec7[0] * fTemp103))) + (fRec11[0] * ((2.0f * (fTemp95 * (fTemp103 - fTemp101))) + 1.0f)))))) + 1.0f); + float fTemp105 = (0.357142866f * fRec12[0]); + output0[i] = FAUSTFLOAT((0.0500000007f * ((0.5f * ((fTemp11 * fTemp12) + (fTemp25 * fTemp26))) + ((fTemp38 * (fTemp39 + 0.5f)) + ((fTemp51 * (fTemp52 + 0.5f)) + ((fTemp64 * (0.5f - fTemp65)) + ((fTemp78 * (0.5f - fTemp79)) + ((fTemp91 * (0.5f - fTemp92)) + (fTemp104 * (fTemp105 + 0.5f)))))))))); + output1[i] = FAUSTFLOAT((0.0500000007f * ((((((((fTemp11 * (1.0f - (0.5f * fTemp12))) + (fTemp91 * (fTemp92 + 0.5f))) + (fTemp78 * (fTemp79 + 0.5f))) + (fTemp64 * (fTemp65 + 0.5f))) + (fTemp51 * (0.5f - fTemp52))) + (fTemp38 * (0.5f - fTemp39))) + (fTemp104 * (0.5f - fTemp105))) + (fTemp25 * (1.0f - (0.5f * fTemp26)))))); + fRec2[1] = fRec2[0]; fRec3[1] = fRec3[0]; + fRec1[1] = fRec1[0]; fRec4[1] = fRec4[0]; - fRec2[1] = fRec2[0]; fRec5[1] = fRec5[0]; fRec6[1] = fRec6[0]; fRec7[1] = fRec7[0]; @@ -937,12 +952,9 @@ class synth_risset_arp : public dsp { fRec17[1] = fRec17[0]; fRec18[1] = fRec18[0]; fRec19[1] = fRec19[0]; - } - } - }; // clang-format on #endif diff --git a/ceammc/ext/src/synth/synth_risset_tone.h b/ceammc/ext/src/synth/synth_risset_tone.h index 7c49705c4d..a5cb2b9807 100644 --- a/ceammc/ext/src/synth/synth_risset_tone.h +++ b/ceammc/ext/src/synth/synth_risset_tone.h @@ -3,8 +3,8 @@ author: "Oli Larkin (contact@olilarkin.co.uk)" copyright: "Oliver Larkin" name: "synth.risset_tone" version: "0.1" -Code generated with Faust 2.15.0 (https://faust.grame.fr) -Compilation options: cpp, -scal -ftz 0 +Code generated with Faust 2.22.1 (https://faust.grame.fr) +Compilation options: -lang cpp -scal -ftz 0 ------------------------------------------------------------ */ #ifndef __synth_risset_tone_H__ @@ -17,6 +17,7 @@ Compilation options: cpp, -scal -ftz 0 #include #include +/************************** BEGIN dsp.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -99,23 +100,23 @@ class dsp { * - static class 'classInit': static tables initialization * - 'instanceInit': constants and instance state initialization * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void init(int samplingRate) = 0; + virtual void init(int sample_rate) = 0; /** * Init instance state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceInit(int samplingRate) = 0; + virtual void instanceInit(int sample_rate) = 0; /** * Init instance constant state * - * @param samplingRate - the sampling rate in Hertz + * @param sample_rate - the sampling rate in Hertz */ - virtual void instanceConstants(int samplingRate) = 0; + virtual void instanceConstants(int sample_rate) = 0; /* Init default control parameters values */ virtual void instanceResetUserInterface() = 0; @@ -152,8 +153,8 @@ class dsp { * * @param date_usec - the timestamp in microsec given by audio driver. * @param count - the number of frames to compute - * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) - * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) * */ virtual void compute(double /*date_usec*/, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } @@ -172,16 +173,16 @@ class decorator_dsp : public dsp { public: - decorator_dsp(dsp* dsp = 0):fDSP(dsp) {} + decorator_dsp(dsp* dsp = nullptr):fDSP(dsp) {} virtual ~decorator_dsp() { delete fDSP; } virtual int getNumInputs() { return fDSP->getNumInputs(); } virtual int getNumOutputs() { return fDSP->getNumOutputs(); } virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } virtual int getSampleRate() { return fDSP->getSampleRate(); } - virtual void init(int samplingRate) { fDSP->init(samplingRate); } - virtual void instanceInit(int samplingRate) { fDSP->instanceInit(samplingRate); } - virtual void instanceConstants(int samplingRate) { fDSP->instanceConstants(samplingRate); } + virtual void init(int sample_rate) { fDSP->init(sample_rate); } + virtual void instanceInit(int sample_rate) { fDSP->instanceInit(sample_rate); } + virtual void instanceConstants(int sample_rate) { fDSP->instanceConstants(sample_rate); } virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } virtual void instanceClear() { fDSP->instanceClear(); } virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } @@ -236,6 +237,8 @@ class dsp_factory { #endif #endif +/************************** END dsp.h **************************/ +/************************** BEGIN UI.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -275,45 +278,54 @@ class dsp_factory { struct Soundfile; -class UI +template +class UIReal { - + public: - - UI() {} - - virtual ~UI() {} - + + UIReal() {} + virtual ~UIReal() {} + // -- widget's layouts - + virtual void openTabBox(const char* label) = 0; virtual void openHorizontalBox(const char* label) = 0; virtual void openVerticalBox(const char* label) = 0; virtual void closeBox() = 0; - + // -- active widgets - - virtual void addButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addCheckButton(const char* label, FAUSTFLOAT* zone) = 0; - virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) = 0; - + + virtual void addButton(const char* label, REAL* zone) = 0; + virtual void addCheckButton(const char* label, REAL* zone) = 0; + virtual void addVerticalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addHorizontalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addNumEntry(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + // -- passive widgets - - virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) = 0; - + + virtual void addHorizontalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + virtual void addVerticalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + // -- soundfiles - + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; - + // -- metadata declarations + + virtual void declare(REAL* zone, const char* key, const char* val) {} +}; + +struct UI : public UIReal +{ - virtual void declare(FAUSTFLOAT*, const char*, const char*) {} + UI() {} + virtual ~UI() {} }; #endif +/************************** END UI.h **************************/ +/************************** BEGIN meta.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -342,11 +354,14 @@ class UI struct Meta { - virtual void declare(const char* key, const char* value) = 0; virtual ~Meta() {}; + virtual void declare(const char* key, const char* value) = 0; + }; #endif +/************************** END meta.h **************************/ +/************************** BEGIN misc.h **************************/ /************************************************************************ FAUST Architecture File Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale @@ -369,7 +384,7 @@ struct Meta that work under terms of your choice, so long as this FAUST architecture section is not modified. ************************************************************************/ - + #ifndef __misc__ #define __misc__ @@ -377,6 +392,8 @@ struct Meta #include #include #include +#include +#include using std::max; @@ -398,27 +415,65 @@ static int int2pow2(int x) { int r = 0; while ((1< #include - class synth_risset_toneSIG0 { private: @@ -460,27 +514,23 @@ class synth_risset_toneSIG0 { int getNumInputssynth_risset_toneSIG0() { return 0; - } int getNumOutputssynth_risset_toneSIG0() { return 1; - } int getInputRatesynth_risset_toneSIG0(int channel) { int rate; - switch (channel) { + switch ((channel)) { default: { rate = -1; break; } - } return rate; - } int getOutputRatesynth_risset_toneSIG0(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 0; break; @@ -489,34 +539,28 @@ class synth_risset_toneSIG0 { rate = -1; break; } - } return rate; - } - void instanceInitsynth_risset_toneSIG0(int samplingFreq) { + void instanceInitsynth_risset_toneSIG0(int sample_rate) { for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { iRec0[l0] = 0; - } - } - void fillsynth_risset_toneSIG0(int count, float* output) { + void fillsynth_risset_toneSIG0(int count, float* table) { for (int i = 0; (i < count); i = (i + 1)) { iRec0[0] = (iRec0[1] + 1); - output[i] = std::sin((9.58738019e-05f * float((iRec0[0] + -1)))); + table[i] = std::sin((9.58738019e-05f * float((iRec0[0] + -1)))); iRec0[1] = iRec0[0]; - } - } -}; -synth_risset_toneSIG0* newsynth_risset_toneSIG0() { return (synth_risset_toneSIG0*)new synth_risset_toneSIG0(); } -void deletesynth_risset_toneSIG0(synth_risset_toneSIG0* dsp) { delete dsp; } +}; +static synth_risset_toneSIG0* newsynth_risset_toneSIG0() { return (synth_risset_toneSIG0*)new synth_risset_toneSIG0(); } +static void deletesynth_risset_toneSIG0(synth_risset_toneSIG0* dsp) { delete dsp; } class synth_risset_toneSIG1 { @@ -528,27 +572,23 @@ class synth_risset_toneSIG1 { int getNumInputssynth_risset_toneSIG1() { return 0; - } int getNumOutputssynth_risset_toneSIG1() { return 1; - } int getInputRatesynth_risset_toneSIG1(int channel) { int rate; - switch (channel) { + switch ((channel)) { default: { rate = -1; break; } - } return rate; - } int getOutputRatesynth_risset_toneSIG1(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 0; break; @@ -557,33 +597,28 @@ class synth_risset_toneSIG1 { rate = -1; break; } - } return rate; - } - void instanceInitsynth_risset_toneSIG1(int samplingFreq) { + void instanceInitsynth_risset_toneSIG1(int sample_rate) { for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { iRec3[l3] = 0; - } - } - void fillsynth_risset_toneSIG1(int count, float* output) { + void fillsynth_risset_toneSIG1(int count, float* table) { for (int i = 0; (i < count); i = (i + 1)) { iRec3[0] = (iRec3[1] + 1); - output[i] = std::exp((0.0f - (4.8283f * (1.0f - std::cos((9.58738019e-05f * (float((iRec3[0] + -1)) + -32768.0f))))))); + table[i] = std::exp((0.0f - (4.8283f * (1.0f - std::cos((9.58738019e-05f * (float((iRec3[0] + -1)) + -32768.0f))))))); iRec3[1] = iRec3[0]; - } - } + }; -synth_risset_toneSIG1* newsynth_risset_toneSIG1() { return (synth_risset_toneSIG1*)new synth_risset_toneSIG1(); } -void deletesynth_risset_toneSIG1(synth_risset_toneSIG1* dsp) { delete dsp; } +static synth_risset_toneSIG1* newsynth_risset_toneSIG1() { return (synth_risset_toneSIG1*)new synth_risset_toneSIG1(); } +static void deletesynth_risset_toneSIG1(synth_risset_toneSIG1* dsp) { delete dsp; } static float ftbl0synth_risset_toneSIG0[65536]; static float ftbl1synth_risset_toneSIG1[65537]; @@ -591,6 +626,7 @@ static float ftbl1synth_risset_toneSIG1[65537]; #ifndef FAUSTCLASS #define FAUSTCLASS synth_risset_tone #endif + #ifdef __APPLE__ #define exp10f __exp10f #define exp10 __exp10 @@ -600,7 +636,7 @@ class synth_risset_tone : public dsp { private: - int fSamplingFreq; + int fSampleRate; float fConst0; float fConst1; FAUSTFLOAT fHslider0; @@ -624,12 +660,12 @@ class synth_risset_tone : public dsp { void metadata(Meta* m) { m->declare("author", "Oli Larkin (contact@olilarkin.co.uk)"); m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.0"); + m->declare("basics.lib/version", "0.1"); m->declare("ceammc.lib/name", "Ceammc PureData misc utils"); m->declare("ceammc.lib/version", "0.1.1"); m->declare("copyright", "Oliver Larkin"); m->declare("description", "Jean Claude Risset's endless glissando"); - m->declare("filename", "synth_risset_tone"); + m->declare("filename", "synth_risset_tone.dsp"); m->declare("licence", "GPL"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); @@ -644,27 +680,23 @@ class synth_risset_tone : public dsp { virtual int getNumInputs() { return 0; - } virtual int getNumOutputs() { return 1; - } virtual int getInputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { default: { rate = -1; break; } - } return rate; - } virtual int getOutputRate(int channel) { int rate; - switch (channel) { + switch ((channel)) { case 0: { rate = 1; break; @@ -673,93 +705,76 @@ class synth_risset_tone : public dsp { rate = -1; break; } - } return rate; - } - static void classInit(int samplingFreq) { + static void classInit(int sample_rate) { synth_risset_toneSIG0* sig0 = newsynth_risset_toneSIG0(); - sig0->instanceInitsynth_risset_toneSIG0(samplingFreq); + sig0->instanceInitsynth_risset_toneSIG0(sample_rate); sig0->fillsynth_risset_toneSIG0(65536, ftbl0synth_risset_toneSIG0); synth_risset_toneSIG1* sig1 = newsynth_risset_toneSIG1(); - sig1->instanceInitsynth_risset_toneSIG1(samplingFreq); + sig1->instanceInitsynth_risset_toneSIG1(sample_rate); sig1->fillsynth_risset_toneSIG1(65537, ftbl1synth_risset_toneSIG1); deletesynth_risset_toneSIG0(sig0); deletesynth_risset_toneSIG1(sig1); - } - virtual void instanceConstants(int samplingFreq) { - fSamplingFreq = samplingFreq; - fConst0 = std::min(192000.0f, std::max(1.0f, float(fSamplingFreq))); + virtual void instanceConstants(int sample_rate) { + fSampleRate = sample_rate; + fConst0 = std::min(192000.0f, std::max(1.0f, float(fSampleRate))); fConst1 = (440.0f / fConst0); fConst2 = (1.0f / fConst0); - } virtual void instanceResetUserInterface() { fHslider0 = FAUSTFLOAT(60.0f); fHslider1 = FAUSTFLOAT(120.0f); fHslider2 = FAUSTFLOAT(0.01f); - } virtual void instanceClear() { for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { fRec2[l1] = 0.0f; - } for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { fRec1[l2] = 0.0f; - } for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { fRec4[l4] = 0.0f; - } for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { fRec5[l5] = 0.0f; - } for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { fRec6[l6] = 0.0f; - } for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) { fRec7[l7] = 0.0f; - } for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { fRec8[l8] = 0.0f; - } for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { fRec9[l9] = 0.0f; - } for (int l10 = 0; (l10 < 2); l10 = (l10 + 1)) { fRec10[l10] = 0.0f; - } for (int l11 = 0; (l11 < 2); l11 = (l11 + 1)) { fRec11[l11] = 0.0f; - } for (int l12 = 0; (l12 < 2); l12 = (l12 + 1)) { fRec12[l12] = 0.0f; - } - } - virtual void init(int samplingFreq) { - classInit(samplingFreq); - instanceInit(samplingFreq); + virtual void init(int sample_rate) { + classInit(sample_rate); + instanceInit(sample_rate); } - virtual void instanceInit(int samplingFreq) { - instanceConstants(samplingFreq); + virtual void instanceInit(int sample_rate) { + instanceConstants(sample_rate); instanceResetUserInterface(); instanceClear(); } @@ -767,9 +782,9 @@ class synth_risset_tone : public dsp { virtual synth_risset_tone* clone() { return new synth_risset_tone(); } + virtual int getSampleRate() { - return fSamplingFreq; - + return fSampleRate; } virtual void buildUserInterface(UI* ui_interface) { @@ -778,7 +793,6 @@ class synth_risset_tone : public dsp { ui_interface->addHorizontalSlider("range", &fHslider1, 120.0f, 1.0f, 120.0f, 0.00100000005f); ui_interface->addHorizontalSlider("rate", &fHslider2, 0.00999999978f, -2.0f, 2.0f, 0.00100000005f); ui_interface->closeBox(); - } virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { @@ -789,30 +803,30 @@ class synth_risset_tone : public dsp { for (int i = 0; (i < count); i = (i + 1)) { fRec2[0] = (fSlow2 + (fRec2[1] - std::floor((fSlow2 + fRec2[1])))); float fTemp0 = std::fmod((fRec2[0] + 0.699999988f), 1.0f); - float fTemp1 = ((fConst1 * std::pow(2.0f, (0.0833333358f * (std::min(120.0f, std::max(20.0f, (fSlow0 + ((fSlow1 * ((2.0f * fTemp0) + -1.0f)) + 7.0f)))) + -69.0f)))) + fRec1[1]); + float fTemp1 = (fRec1[1] + (fConst1 * std::pow(2.0f, (0.0833333358f * (std::min(120.0f, std::max(20.0f, (fSlow0 + ((fSlow1 * ((2.0f * fTemp0) + -1.0f)) + 7.0f)))) + -69.0f))))); fRec1[0] = (fTemp1 - std::floor(fTemp1)); float fTemp2 = (65536.0f * fTemp0); int iTemp3 = int(fTemp2); float fTemp4 = ftbl1synth_risset_toneSIG1[iTemp3]; - float fTemp5 = std::fmod((fRec2[0] + 0.800000012f), 1.0f); + float fTemp5 = std::fmod((fRec2[0] + 0.600000024f), 1.0f); float fTemp6 = (fRec4[1] + (fConst1 * std::pow(2.0f, (0.0833333358f * (std::min(120.0f, std::max(20.0f, (fSlow0 + ((fSlow1 * ((2.0f * fTemp5) + -1.0f)) + 7.0f)))) + -69.0f))))); fRec4[0] = (fTemp6 - std::floor(fTemp6)); float fTemp7 = (65536.0f * fTemp5); int iTemp8 = int(fTemp7); float fTemp9 = ftbl1synth_risset_toneSIG1[iTemp8]; - float fTemp10 = std::fmod((fRec2[0] + 0.899999976f), 1.0f); + float fTemp10 = std::fmod((fRec2[0] + 0.5f), 1.0f); float fTemp11 = (fRec5[1] + (fConst1 * std::pow(2.0f, (0.0833333358f * (std::min(120.0f, std::max(20.0f, (fSlow0 + ((fSlow1 * ((2.0f * fTemp10) + -1.0f)) + 7.0f)))) + -69.0f))))); fRec5[0] = (fTemp11 - std::floor(fTemp11)); float fTemp12 = (65536.0f * fTemp10); int iTemp13 = int(fTemp12); float fTemp14 = ftbl1synth_risset_toneSIG1[iTemp13]; - float fTemp15 = std::fmod(fRec2[0], 1.0f); + float fTemp15 = std::fmod((fRec2[0] + 0.400000006f), 1.0f); float fTemp16 = (fRec6[1] + (fConst1 * std::pow(2.0f, (0.0833333358f * (std::min(120.0f, std::max(20.0f, (fSlow0 + ((fSlow1 * ((2.0f * fTemp15) + -1.0f)) + 7.0f)))) + -69.0f))))); fRec6[0] = (fTemp16 - std::floor(fTemp16)); float fTemp17 = (65536.0f * fTemp15); int iTemp18 = int(fTemp17); float fTemp19 = ftbl1synth_risset_toneSIG1[iTemp18]; - float fTemp20 = std::fmod((fRec2[0] + 0.100000001f), 1.0f); + float fTemp20 = std::fmod((fRec2[0] + 0.300000012f), 1.0f); float fTemp21 = (fRec7[1] + (fConst1 * std::pow(2.0f, (0.0833333358f * (std::min(120.0f, std::max(20.0f, (fSlow0 + ((fSlow1 * ((2.0f * fTemp20) + -1.0f)) + 7.0f)))) + -69.0f))))); fRec7[0] = (fTemp21 - std::floor(fTemp21)); float fTemp22 = (65536.0f * fTemp20); @@ -824,31 +838,31 @@ class synth_risset_tone : public dsp { float fTemp27 = (65536.0f * fTemp25); int iTemp28 = int(fTemp27); float fTemp29 = ftbl1synth_risset_toneSIG1[iTemp28]; - float fTemp30 = std::fmod((fRec2[0] + 0.300000012f), 1.0f); + float fTemp30 = std::fmod((fRec2[0] + 0.100000001f), 1.0f); float fTemp31 = (fRec9[1] + (fConst1 * std::pow(2.0f, (0.0833333358f * (std::min(120.0f, std::max(20.0f, (fSlow0 + ((fSlow1 * ((2.0f * fTemp30) + -1.0f)) + 7.0f)))) + -69.0f))))); fRec9[0] = (fTemp31 - std::floor(fTemp31)); float fTemp32 = (65536.0f * fTemp30); int iTemp33 = int(fTemp32); float fTemp34 = ftbl1synth_risset_toneSIG1[iTemp33]; - float fTemp35 = std::fmod((fRec2[0] + 0.400000006f), 1.0f); + float fTemp35 = std::fmod(fRec2[0], 1.0f); float fTemp36 = (fRec10[1] + (fConst1 * std::pow(2.0f, (0.0833333358f * (std::min(120.0f, std::max(20.0f, (fSlow0 + ((fSlow1 * ((2.0f * fTemp35) + -1.0f)) + 7.0f)))) + -69.0f))))); fRec10[0] = (fTemp36 - std::floor(fTemp36)); float fTemp37 = (65536.0f * fTemp35); int iTemp38 = int(fTemp37); float fTemp39 = ftbl1synth_risset_toneSIG1[iTemp38]; - float fTemp40 = std::fmod((fRec2[0] + 0.5f), 1.0f); + float fTemp40 = std::fmod((fRec2[0] + 0.800000012f), 1.0f); float fTemp41 = (fRec11[1] + (fConst1 * std::pow(2.0f, (0.0833333358f * (std::min(120.0f, std::max(20.0f, (fSlow0 + ((fSlow1 * ((2.0f * fTemp40) + -1.0f)) + 7.0f)))) + -69.0f))))); fRec11[0] = (fTemp41 - std::floor(fTemp41)); float fTemp42 = (65536.0f * fTemp40); int iTemp43 = int(fTemp42); float fTemp44 = ftbl1synth_risset_toneSIG1[iTemp43]; - float fTemp45 = std::fmod((fRec2[0] + 0.600000024f), 1.0f); + float fTemp45 = std::fmod((fRec2[0] + 0.899999976f), 1.0f); float fTemp46 = (fRec12[1] + (fConst1 * std::pow(2.0f, (0.0833333358f * (std::min(120.0f, std::max(20.0f, (fSlow0 + ((fSlow1 * ((2.0f * fTemp45) + -1.0f)) + 7.0f)))) + -69.0f))))); fRec12[0] = (fTemp46 - std::floor(fTemp46)); float fTemp47 = (65536.0f * fTemp45); int iTemp48 = int(fTemp47); float fTemp49 = ftbl1synth_risset_toneSIG1[iTemp48]; - output0[i] = FAUSTFLOAT((0.100000001f * ((((((((((ftbl0synth_risset_toneSIG0[int((65536.0f * fRec1[0]))] * (fTemp4 + ((fTemp2 - std::floor(fTemp2)) * (ftbl1synth_risset_toneSIG1[(iTemp3 + 1)] - fTemp4)))) + (ftbl0synth_risset_toneSIG0[int((65536.0f * fRec4[0]))] * (fTemp9 + ((fTemp7 - std::floor(fTemp7)) * (ftbl1synth_risset_toneSIG1[(iTemp8 + 1)] - fTemp9))))) + (ftbl0synth_risset_toneSIG0[int((65536.0f * fRec5[0]))] * (fTemp14 + ((fTemp12 - std::floor(fTemp12)) * (ftbl1synth_risset_toneSIG1[(iTemp13 + 1)] - fTemp14))))) + (ftbl0synth_risset_toneSIG0[int((65536.0f * fRec6[0]))] * (fTemp19 + ((fTemp17 - std::floor(fTemp17)) * (ftbl1synth_risset_toneSIG1[(iTemp18 + 1)] - fTemp19))))) + (ftbl0synth_risset_toneSIG0[int((65536.0f * fRec7[0]))] * (fTemp24 + ((fTemp22 - std::floor(fTemp22)) * (ftbl1synth_risset_toneSIG1[(iTemp23 + 1)] - fTemp24))))) + (ftbl0synth_risset_toneSIG0[int((65536.0f * fRec8[0]))] * (fTemp29 + ((fTemp27 - std::floor(fTemp27)) * (ftbl1synth_risset_toneSIG1[(iTemp28 + 1)] - fTemp29))))) + (ftbl0synth_risset_toneSIG0[int((65536.0f * fRec9[0]))] * (fTemp34 + ((fTemp32 - std::floor(fTemp32)) * (ftbl1synth_risset_toneSIG1[(iTemp33 + 1)] - fTemp34))))) + (ftbl0synth_risset_toneSIG0[int((65536.0f * fRec10[0]))] * (fTemp39 + ((fTemp37 - std::floor(fTemp37)) * (ftbl1synth_risset_toneSIG1[(iTemp38 + 1)] - fTemp39))))) + (ftbl0synth_risset_toneSIG0[int((65536.0f * fRec11[0]))] * (fTemp44 + ((fTemp42 - std::floor(fTemp42)) * (ftbl1synth_risset_toneSIG1[(iTemp43 + 1)] - fTemp44))))) + (ftbl0synth_risset_toneSIG0[int((65536.0f * fRec12[0]))] * (fTemp49 + ((fTemp47 - std::floor(fTemp47)) * (ftbl1synth_risset_toneSIG1[(iTemp48 + 1)] - fTemp49))))))); + output0[i] = FAUSTFLOAT((0.100000001f * ((ftbl0synth_risset_toneSIG0[int((65536.0f * fRec1[0]))] * (fTemp4 + ((fTemp2 - std::floor(fTemp2)) * (ftbl1synth_risset_toneSIG1[(iTemp3 + 1)] - fTemp4)))) + ((ftbl0synth_risset_toneSIG0[int((65536.0f * fRec4[0]))] * (fTemp9 + ((fTemp7 - std::floor(fTemp7)) * (ftbl1synth_risset_toneSIG1[(iTemp8 + 1)] - fTemp9)))) + ((ftbl0synth_risset_toneSIG0[int((65536.0f * fRec5[0]))] * (fTemp14 + ((fTemp12 - std::floor(fTemp12)) * (ftbl1synth_risset_toneSIG1[(iTemp13 + 1)] - fTemp14)))) + ((ftbl0synth_risset_toneSIG0[int((65536.0f * fRec6[0]))] * (fTemp19 + ((fTemp17 - std::floor(fTemp17)) * (ftbl1synth_risset_toneSIG1[(iTemp18 + 1)] - fTemp19)))) + ((ftbl0synth_risset_toneSIG0[int((65536.0f * fRec7[0]))] * (fTemp24 + ((fTemp22 - std::floor(fTemp22)) * (ftbl1synth_risset_toneSIG1[(iTemp23 + 1)] - fTemp24)))) + ((ftbl0synth_risset_toneSIG0[int((65536.0f * fRec8[0]))] * (fTemp29 + ((fTemp27 - std::floor(fTemp27)) * (ftbl1synth_risset_toneSIG1[(iTemp28 + 1)] - fTemp29)))) + ((ftbl0synth_risset_toneSIG0[int((65536.0f * fRec9[0]))] * (fTemp34 + ((fTemp32 - std::floor(fTemp32)) * (ftbl1synth_risset_toneSIG1[(iTemp33 + 1)] - fTemp34)))) + ((ftbl0synth_risset_toneSIG0[int((65536.0f * fRec10[0]))] * (fTemp39 + ((fTemp37 - std::floor(fTemp37)) * (ftbl1synth_risset_toneSIG1[(iTemp38 + 1)] - fTemp39)))) + ((ftbl0synth_risset_toneSIG0[int((65536.0f * fRec11[0]))] * (fTemp44 + ((fTemp42 - std::floor(fTemp42)) * (ftbl1synth_risset_toneSIG1[(iTemp43 + 1)] - fTemp44)))) + (ftbl0synth_risset_toneSIG0[int((65536.0f * fRec12[0]))] * (fTemp49 + ((fTemp47 - std::floor(fTemp47)) * (ftbl1synth_risset_toneSIG1[(iTemp48 + 1)] - fTemp49))))))))))))))); fRec2[1] = fRec2[0]; fRec1[1] = fRec1[0]; fRec4[1] = fRec4[0]; @@ -860,12 +874,9 @@ class synth_risset_tone : public dsp { fRec10[1] = fRec10[0]; fRec11[1] = fRec11[0]; fRec12[1] = fRec12[0]; - } - } - }; // clang-format on #endif diff --git a/ceammc/ext/src/synth/synth_shakers.cpp b/ceammc/ext/src/synth/synth_shakers.cpp index ead339c7b5..28bd280208 100644 --- a/ceammc/ext/src/synth/synth_shakers.cpp +++ b/ceammc/ext/src/synth/synth_shakers.cpp @@ -12,7 +12,7 @@ * this file belongs to. *****************************************************************************/ #include "synth_shakers.h" -#include "ceammc_factory.h" +#include "stk_synth_factory.h" #include "Shakers.h" @@ -59,8 +59,22 @@ SynthShakers::SynthShakers(const PdArgs& args) , type_(typeFromArgs(positionalSymbolArgument(0, gensym("maraca")))) , gate_(0) { - createCbProperty("@gate", &SynthShakers::propGate, &SynthShakers::propSetGate); - createCbProperty("@type", &SynthShakers::propType, &SynthShakers::propSetType); + { + Property* p = createCbProperty("@gate", &SynthShakers::propGate, &SynthShakers::propSetGate); + p->info().setType(PropertyInfoType::FLOAT); + p->info().setRange(0, 1); + } + + { + Property* p = createCbProperty("@type", &SynthShakers::propType, &SynthShakers::propSetType); + p->info().setType(PropertyInfoType::SYMBOL); + + for (auto t : type_list) + p->info().addEnum(t.first); + + p->info().setDefault(gensym("maraca")); + } + createCbProperty("@types", &SynthShakers::propTypes); } @@ -180,6 +194,5 @@ void setup_synth_shakers() { gensym("tuned_bamboo_chimes"), TUNED_BAMBOO_CHIMES } }; - SoundExternalFactory obj("synth.shakers~", OBJECT_FACTORY_DEFAULT); - obj.addMethod("cc", &SynthShakers::m_cc); + StkSynthFactory obj("synth.shakers~"); } diff --git a/ceammc/ext/src/synth/synth_wurley.cpp b/ceammc/ext/src/synth/synth_wurley.cpp index babc450bd4..8c10e90b1a 100644 --- a/ceammc/ext/src/synth/synth_wurley.cpp +++ b/ceammc/ext/src/synth/synth_wurley.cpp @@ -1,9 +1,5 @@ #include "synth_wurley.h" -#include "ceammc_factory.h" - -extern "C" { -#include "m_imp.h" -} +#include "stk_synth_factory.h" #include "Wurley.h" #include "stksynth_p.h" @@ -22,6 +18,5 @@ SynthWurley::SynthWurley(const PdArgs& args) void setup_synth_wurley() { - SoundExternalFactory obj("synth.wurley~", OBJECT_FACTORY_DEFAULT); - stk::Stk::setRawwavePath(std::string(obj.classPointer()->c_externdir->s_name) + "/stk/"); + StkSynthFactory obj("synth.wurley~"); } diff --git a/ceammc/ext/src/system/CMakeLists.txt b/ceammc/ext/src/system/CMakeLists.txt index 1fe8d88679..7663ff3586 100644 --- a/ceammc/ext/src/system/CMakeLists.txt +++ b/ceammc/ext/src/system/CMakeLists.txt @@ -1,20 +1,38 @@ include_directories(${CMAKE_BINARY_DIR}) +include_directories(${PROJECT_SOURCE_DIR}/ceammc/extra) # for readerwriterqueue include_directories(${PROJECT_SOURCE_DIR}/ceammc/extra/subprocess/tiny-process-library) set(SYSTEM_SOURCES "") +set(SYSTEM_CURSOR_TCL system_cursor.tcl) +set(SYSTEM_CURSOR_TCL_H system_cursor.tcl.h) +set(SYSTEM_COLORPANEL_TCL system_colorpanel.tcl) +set(SYSTEM_COLORPANEL_TCL_H system_colorpanel.tcl.h) + +add_custom_target(system_cursor_tcl + DEPENDS ${SYSTEM_CURSOR_TCL} + SOURCES ${SYSTEM_CURSOR_TCL} ${SYSTEM_CURSOR_TCL_H} + COMMAND ${PROJECT_SOURCE_DIR}/ceammc/scripts/filecontent_to_cxx_header.sh ${SYSTEM_CURSOR_TCL} + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) + +add_custom_target(system_colorpanel_tcl + DEPENDS ${SYSTEM_COLORPANEL_TCL} + SOURCES ${SYSTEM_COLORPANEL_TCL} ${SYSTEM_COLORPANEL_TCL_H} + COMMAND ${PROJECT_SOURCE_DIR}/ceammc/scripts/filecontent_to_cxx_header.sh ${SYSTEM_COLORPANEL_TCL} + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) macro(ceammc_system_extension name) list(APPEND SYSTEM_SOURCES "system_${name}.cpp") endmacro() +ceammc_system_extension(colorpanel) +ceammc_system_extension(cursor) +ceammc_system_extension(getenv) +ceammc_system_extension(hostname) ceammc_system_extension(memsize) ceammc_system_extension(memused) ceammc_system_extension(screen_size) -ceammc_system_extension(getenv) -ceammc_system_extension(hostname) ceammc_system_extension(shell) - add_library(ceammc_system STATIC mod_system.cpp ${SYSTEM_SOURCES}) if(UNIX) set_target_properties(ceammc_system PROPERTIES COMPILE_FLAGS "-fPIC") diff --git a/ceammc/ext/src/system/mod_system.cpp b/ceammc/ext/src/system/mod_system.cpp index dd2f488058..28e30e6995 100644 --- a/ceammc/ext/src/system/mod_system.cpp +++ b/ceammc/ext/src/system/mod_system.cpp @@ -6,6 +6,8 @@ extern "C" void setup_system0x2ememsize(); extern "C" void setup_system0x2ememused(); extern "C" void setup_system0x2escreen_size(); +void setup_system_colorpanel(); +void setup_system_cursor(); void setup_system_shell(); void ceammc_system_setup() @@ -16,5 +18,7 @@ void ceammc_system_setup() setup_system0x2ememused(); setup_system0x2escreen_size(); + setup_system_colorpanel(); + setup_system_cursor(); setup_system_shell(); } diff --git a/ceammc/ext/src/system/system_colorpanel.cpp b/ceammc/ext/src/system/system_colorpanel.cpp new file mode 100644 index 0000000000..06265db0e0 --- /dev/null +++ b/ceammc/ext/src/system/system_colorpanel.cpp @@ -0,0 +1,162 @@ +/***************************************************************************** + * Copyright 2019 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#include "system_colorpanel.h" +#include "ceammc_convert.h" +#include "ceammc_factory.h" +#include "system_colorpanel.tcl.h" + +#include + +static t_symbol* SYM_FLOAT; +static t_symbol* SYM_INT; +static t_symbol* SYM_HEX; + +SystemColorpanel::SystemColorpanel(const PdArgs& args) + : BaseObject(args) + , r_(255) + , g_(255) + , b_(255) + , hex_ { "#ffffff" } + , mode_(nullptr) +{ + char buf[MAXPDSTRING]; + sprintf(buf, "#%" PRIxPTR, reinterpret_cast(this)); + bindReceive(gensym(buf)); + + createOutlet(); + + mode_ = new SymbolEnumProperty("@mode", SYM_FLOAT); + mode_->appendEnum(SYM_INT); + mode_->appendEnum(SYM_HEX); + createProperty(mode_); + + createProperty(new SymbolEnumAlias("@f", mode_, SYM_FLOAT)); + createProperty(new SymbolEnumAlias("@i", mode_, SYM_INT)); + createProperty(new SymbolEnumAlias("@h", mode_, SYM_HEX)); + + createCbProperty("@float", &SystemColorpanel::propFloat, &SystemColorpanel::propSetFloat); + createCbProperty("@int", &SystemColorpanel::propInt, &SystemColorpanel::propSetInt); + + { + Property* p = createCbProperty("@hex", &SystemColorpanel::propHex, &SystemColorpanel::propSetHex); + p->info().setType(PropertyInfoType::SYMBOL); + } +} + +void SystemColorpanel::onBang() +{ + sys_vgui("after idle [list after 100 ::ceammc::colorpanel::open %s %s]\n", + receive()->s_name, hex_); +} + +void SystemColorpanel::onSymbol(t_symbol* s) +{ + if (setHex(s)) + onBang(); +} + +void SystemColorpanel::onClick(t_floatarg xpos, t_floatarg ypos, t_floatarg shift, t_floatarg ctrl, t_floatarg alt) +{ + if (shift) + onBang(); +} + +void SystemColorpanel::m_callback(t_symbol* s, const AtomList& args) +{ + if (!args.isSymbol()) + return; + + t_symbol* color = atomlistToValue(args, &s_); + + if (color != &s_) { + if (!setHex(color)) + return; + + if (mode_->value() == SYM_FLOAT) + listTo(0, propFloat()); + else if (mode_->value() == SYM_INT) + listTo(0, propInt()); + else if (mode_->value() == SYM_HEX) + symbolTo(0, gensym(hex_)); + else + OBJ_ERR << "unknown output mode: " << mode_->value(); + } +} + +bool SystemColorpanel::setHex(t_symbol* s) +{ + unsigned int red, green, blue; + auto n = sscanf(s->s_name, "#%02x%02x%02x", &red, &green, &blue); + if (n != 3) { + OBJ_ERR << "invalid color value: " << s; + return false; + } + + r_ = red; + g_ = green; + b_ = blue; + + snprintf(hex_, sizeof(hex_), "#%02x%02x%02x", r_, g_, b_); + + return true; +} + +void SystemColorpanel::propSetFloat(const AtomList& v) +{ + if (!checkArgs(v, ARG_FLOAT, ARG_FLOAT, ARG_FLOAT)) { + OBJ_ERR << "list of RGB float values expected in 0-1 range: " << v; + return; + } + + r_ = convert::lin2lin_clip(v[0].asFloat(), 0, 255); + g_ = convert::lin2lin_clip(v[1].asFloat(), 0, 255); + b_ = convert::lin2lin_clip(v[2].asFloat(), 0, 255); +} + +void SystemColorpanel::propSetInt(const AtomList& v) +{ + if (!(checkArgs(v, ARG_INT, ARG_INT, ARG_INT) + && v.allOf([](const Atom& a) { return a.isFloat() && a.asFloat() >= 0 && a.asFloat() <= 255; }))) { + OBJ_ERR << "list of RGB int values expected in 0-255 range: " << v; + return; + } + + r_ = v[0].asFloat(); + g_ = v[1].asFloat(); + b_ = v[2].asFloat(); +} + +void SystemColorpanel::propSetHex(const AtomList& v) +{ + if (!checkArgs(v, ARG_SYMBOL)) { + OBJ_ERR << "color hex value expected in #xxxxxx format: " << v; + return; + } + + setHex(v[0].asSymbol()); +} + +void setup_system_colorpanel() +{ + SYM_FLOAT = &s_float; + SYM_INT = gensym("int"); + SYM_HEX = gensym("hex"); + + sys_gui(system_colorpanel_tcl); + + ObjectFactory obj("system.colorpanel"); + + obj.useClick(); + obj.addMethod(".callback", &SystemColorpanel::m_callback); +} diff --git a/ceammc/ext/src/system/system_colorpanel.h b/ceammc/ext/src/system/system_colorpanel.h new file mode 100644 index 0000000000..b443becad8 --- /dev/null +++ b/ceammc/ext/src/system/system_colorpanel.h @@ -0,0 +1,50 @@ +/***************************************************************************** + * Copyright 2019 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#ifndef SYSTEM_COLORPANEL_H +#define SYSTEM_COLORPANEL_H + +#include + +#include "ceammc_object.h" +using namespace ceammc; + +class SystemColorpanel : public BaseObject { + uint8_t r_, g_, b_; + char hex_[8]; + + SymbolEnumProperty* mode_; + +public: + SystemColorpanel(const PdArgs& args); + + void onBang() override; + void onSymbol(t_symbol* s) override; + void onClick(t_floatarg xpos, t_floatarg ypos, t_floatarg shift, t_floatarg ctrl, t_floatarg alt) override; + + void m_callback(t_symbol* s, const AtomList& args); + +private: + bool setHex(t_symbol* s); + AtomList propHex() const { return Atom(gensym(hex_)); } + AtomList propInt() const { return AtomList({ t_float(r_), t_float(g_), t_float(b_) }); } + AtomList propFloat() const { return AtomList({ r_ / t_float(255), g_ / t_float(255), b_ / t_float(255) }); } + + void propSetFloat(const AtomList& v); + void propSetInt(const AtomList& v); + void propSetHex(const AtomList& v); +}; + +void setup_system_colorpanel(); + +#endif // SYSTEM_COLORPANEL_H diff --git a/ceammc/ext/src/system/system_colorpanel.tcl b/ceammc/ext/src/system/system_colorpanel.tcl new file mode 100644 index 0000000000..1b2d5b24a6 --- /dev/null +++ b/ceammc/ext/src/system/system_colorpanel.tcl @@ -0,0 +1,6 @@ +namespace eval ::ceammc::colorpanel:: { } + +proc ::ceammc::colorpanel::open {objectid initialcolor} { + set color [tk_chooseColor -initialcolor $initialcolor] + pdsend "$objectid .callback $color" +} diff --git a/ceammc/ext/src/system/system_colorpanel.tcl.h b/ceammc/ext/src/system/system_colorpanel.tcl.h new file mode 100644 index 0000000000..f62f94cf8d --- /dev/null +++ b/ceammc/ext/src/system/system_colorpanel.tcl.h @@ -0,0 +1,13 @@ +// this is autogenerated file: do not edit +// clang-format off +#ifndef system_colorpanel_tcl_h_ +#define system_colorpanel_tcl_h_ +const char* system_colorpanel_tcl = +"namespace eval ::ceammc::colorpanel:: { }\n" +"proc ::ceammc::colorpanel::open {objectid initialcolor} {\n" +" set color [tk_chooseColor -initialcolor $initialcolor]\n" +" pdsend \"$objectid .callback $color\"\n" +"}\n" +; +#endif +// clang-format on diff --git a/ceammc/ext/src/system/system_cursor.cpp b/ceammc/ext/src/system/system_cursor.cpp new file mode 100644 index 0000000000..cb3065a08f --- /dev/null +++ b/ceammc/ext/src/system/system_cursor.cpp @@ -0,0 +1,146 @@ +/***************************************************************************** + * Copyright 2019 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#include "system_cursor.h" +#include "ceammc_canvas.h" +#include "ceammc_factory.h" +#include "system_cursor.tcl.h" + +#include + +extern "C" { +#include "g_canvas.h" +#include "m_imp.h" +} + +static t_symbol* SYM_CURSOR_BIND; + +int SystemCursor::instances_polling_ = 0; + +SystemCursor::SystemCursor(const PdArgs& args) + : BaseObject(args) + , is_polling_(false) + , clock_(this, &SystemCursor::clockTick) + , relative_(nullptr) +{ + createOutlet(); + + char buf[MAXPDSTRING]; + sprintf(buf, "#%" PRIxPTR, reinterpret_cast(this)); + bindReceive(gensym(buf)); + + relative_ = new BoolProperty("@relative", false); + createProperty(relative_); +} + +SystemCursor::~SystemCursor() +{ + if (is_polling_) { + instances_polling_--; + checkPolling(); + + pd_unbind(&owner()->te_g.g_pd, SYM_CURSOR_BIND); + } +} + +void SystemCursor::onBang() +{ + sys_vgui("pdsend \"%s .motion [winfo pointerxy .]\"\n", receive()->s_name); +} + +void SystemCursor::onFloat(t_float f) +{ + if (f == 1 && !is_polling_) { + is_polling_ = true; + pd_bind(&owner()->te_g.g_pd, SYM_CURSOR_BIND); + startPolling(); + } else if (f == 0 && is_polling_) { + is_polling_ = false; + stopPolling(); + + // when float arrived after mouse click on a toggle + // we have to unbind on a next clock tick + clock_.delay(0); + } +} + +void SystemCursor::m_button(t_symbol* s, const AtomList& args) +{ + static t_symbol* SYM = gensym("button"); + + if (is_polling_) + anyTo(0, SYM, args); +} + +void SystemCursor::m_motion(t_symbol* s, const AtomList& args) +{ + static t_symbol* SYM = gensym("motion"); + + if (!relative_->value()) { + anyTo(0, SYM, args); + } else { + if (checkArgs(args, ARG_FLOAT, ARG_FLOAT)) { + t_canvas* cnv = canvas_getrootfor(canvas()); + auto r = canvas_info_rect(cnv); + anyTo(0, SYM, { args[0].asFloat() - r.x, args[1].asFloat() - r.y }); + } + } +} + +void SystemCursor::m_wheel(t_symbol* s, const AtomList& args) +{ + static t_symbol* SYM = gensym("mousewheel"); + + if (is_polling_) + anyTo(0, SYM, args); +} + +void SystemCursor::clockTick() +{ + pd_unbind(&owner()->te_g.g_pd, SYM_CURSOR_BIND); +} + +void SystemCursor::checkPolling() +{ + /* if no more objects are listening, stop sending the events */ + if (instances_polling_ == 0) + sys_gui("::ceammc::cursor::stoppolling\n"); + /* if this is the first instance to start, set up Tcl binding and polling */ + else if (instances_polling_ == 1) + sys_gui("::ceammc::cursor::startpolling\n"); +} + +void SystemCursor::startPolling() +{ + instances_polling_++; + checkPolling(); +} + +void SystemCursor::stopPolling() +{ + instances_polling_--; + checkPolling(); +} + +void setup_system_cursor() +{ + SYM_CURSOR_BIND = gensym("#ceammc_cursor_class_receive"); + + ObjectFactory obj("system.cursor"); + obj.addMethod(".button", &SystemCursor::m_button); + obj.addMethod(".motion", &SystemCursor::m_motion); + obj.addMethod(".mousewheel", &SystemCursor::m_wheel); + + sys_gui(system_cursor_tcl); + sys_vgui("::ceammc::cursor::setup %s\n", SYM_CURSOR_BIND->s_name); +} diff --git a/ceammc/ext/src/system/system_cursor.h b/ceammc/ext/src/system/system_cursor.h new file mode 100644 index 0000000000..3e1f09b461 --- /dev/null +++ b/ceammc/ext/src/system/system_cursor.h @@ -0,0 +1,50 @@ +/***************************************************************************** + * Copyright 2019 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#ifndef SYSTEM_CURSOR_H +#define SYSTEM_CURSOR_H + +#include "ceammc_clock.h" +#include "ceammc_object.h" + +using namespace ceammc; + +class SystemCursor : public BaseObject { + bool is_polling_; + ClockMemberFunction clock_; + BoolProperty* relative_; + +public: + SystemCursor(const PdArgs& args); + ~SystemCursor(); + + void onBang() override; + void onFloat(t_float f) override; + + void m_button(t_symbol* s, const AtomList& args); + void m_motion(t_symbol* s, const AtomList& args); + void m_wheel(t_symbol* s, const AtomList& args); + +private: + void clockTick(); + void checkPolling(); + void startPolling(); + void stopPolling(); + +private: + static int instances_polling_; +}; + +void setup_system_cursor(); + +#endif // SYSTEM_CURSOR_H diff --git a/ceammc/ext/src/system/system_cursor.tcl b/ceammc/ext/src/system/system_cursor.tcl new file mode 100644 index 0000000000..40ee06af76 --- /dev/null +++ b/ceammc/ext/src/system/system_cursor.tcl @@ -0,0 +1,63 @@ +namespace eval ::ceammc::cursor:: { + variable continue_pollmotion 0 + variable last_x 0 + variable last_y 0 + variable receive_symbol +} + +# idea from #tcl for a Tcl unbind +proc ::ceammc::cursor::unbind {tag event script} { + set bind {} + foreach x [split [bind $tag $event] \"\n\"] { + if {$x != $script} { lappend bind $x } + } + bind $tag $event {} + foreach x $bind {bind $tag $event $x} +} + +proc ::ceammc::cursor::button {button state} { + variable receive_symbol + pdsend "$receive_symbol .button $button $state" +} + +proc ::ceammc::cursor::mousewheel {delta} { + variable receive_symbol + pdsend "$receive_symbol .mousewheel $delta" +} + +proc ::ceammc::cursor::motion {x y} { + variable last_x + variable last_y + variable receive_symbol + if { $x != $last_x || $y != $last_y} { + pdsend "$receive_symbol .motion $x $y" + set last_x $x + set last_y $y + } +} + +proc ::ceammc::cursor::pollmotion {} { + variable continue_pollmotion + motion [winfo pointerx .] [winfo pointery .] + if {$continue_pollmotion != 0} { after 10 ::ceammc::cursor::pollmotion } +} + +proc ::ceammc::cursor::startpolling {} { + variable continue_pollmotion 1 + pollmotion + bind all {+::ceammc::cursor::button %b 1} + bind all {+::ceammc::cursor::button %b 0} + bind all {+::ceammc::cursor::mousewheel %D} +} + +proc ::ceammc::cursor::stoppolling {} { + variable continue_pollmotion 0 + ::ceammc::cursor::unbind all {::ceammc::cursor::button %b 1} + ::ceammc::cursor::unbind all {::ceammc::cursor::button %b 0} + ::ceammc::cursor::unbind all {::ceammc::cursor::mousewheel %D} +} + +# in Pd 0.43, the internal proc changed from 'pd' to 'pdsend' +proc ::ceammc::cursor::setup {symbol} { + variable receive_symbol $symbol +} diff --git a/ceammc/ext/src/system/system_cursor.tcl.h b/ceammc/ext/src/system/system_cursor.tcl.h new file mode 100644 index 0000000000..7104dea010 --- /dev/null +++ b/ceammc/ext/src/system/system_cursor.tcl.h @@ -0,0 +1,61 @@ +// this is autogenerated file: do not edit +// clang-format off +#ifndef system_cursor_tcl_h_ +#define system_cursor_tcl_h_ +const char* system_cursor_tcl = +"namespace eval ::ceammc::cursor:: {\n" +" variable continue_pollmotion 0\n" +" variable last_x 0\n" +" variable last_y 0\n" +" variable receive_symbol\n" +"}\n" +"proc ::ceammc::cursor::unbind {tag event script} {\n" +" set bind {}\n" +" foreach x [split [bind $tag $event] \\\"\\n\\\"] {\n" +" if {$x != $script} { lappend bind $x }\n" +" }\n" +" bind $tag $event {}\n" +" foreach x $bind {bind $tag $event $x}\n" +"}\n" +"proc ::ceammc::cursor::button {button state} {\n" +" variable receive_symbol\n" +" pdsend \"$receive_symbol .button $button $state\"\n" +"}\n" +"proc ::ceammc::cursor::mousewheel {delta} {\n" +" variable receive_symbol\n" +" pdsend \"$receive_symbol .mousewheel $delta\"\n" +"} \n" +"proc ::ceammc::cursor::motion {x y} {\n" +" variable last_x\n" +" variable last_y\n" +" variable receive_symbol\n" +" if { $x != $last_x || $y != $last_y} {\n" +" pdsend \"$receive_symbol .motion $x $y\"\n" +" set last_x $x\n" +" set last_y $y\n" +" }\n" +"}\n" +"proc ::ceammc::cursor::pollmotion {} {\n" +" variable continue_pollmotion\n" +" motion [winfo pointerx .] [winfo pointery .]\n" +" if {$continue_pollmotion != 0} { after 10 ::ceammc::cursor::pollmotion }\n" +"}\n" +"proc ::ceammc::cursor::startpolling {} {\n" +" variable continue_pollmotion 1\n" +" pollmotion \n" +" bind all {+::ceammc::cursor::button %b 1}\n" +" bind all {+::ceammc::cursor::button %b 0}\n" +" bind all {+::ceammc::cursor::mousewheel %D}\n" +"}\n" +"proc ::ceammc::cursor::stoppolling {} {\n" +" variable continue_pollmotion 0 \n" +" ::ceammc::cursor::unbind all {::ceammc::cursor::button %b 1}\n" +" ::ceammc::cursor::unbind all {::ceammc::cursor::button %b 0}\n" +" ::ceammc::cursor::unbind all {::ceammc::cursor::mousewheel %D}\n" +"}\n" +"proc ::ceammc::cursor::setup {symbol} {\n" +" variable receive_symbol $symbol\n" +"}\n" +; +#endif +// clang-format on diff --git a/ceammc/ext/src/tl/tl_bang.cpp b/ceammc/ext/src/tl/tl_bang.cpp index 7dbf129b4d..6deb1d007e 100644 --- a/ceammc/ext/src/tl/tl_bang.cpp +++ b/ceammc/ext/src/tl/tl_bang.cpp @@ -10,6 +10,7 @@ TlBang::TlBang(const PdArgs& args) , clock_(this, &TlBang::tick) { delay_ = new FloatPropertyMinEq("@delay", 0, 0); + delay_->info().setUnits(PropertyInfoUnits::MSEC); createProperty(delay_); } diff --git a/ceammc/ext/src/tl/tl_eventlist.cpp b/ceammc/ext/src/tl/tl_eventlist.cpp index b9dc65b1e3..1a830c6c98 100644 --- a/ceammc/ext/src/tl/tl_eventlist.cpp +++ b/ceammc/ext/src/tl/tl_eventlist.cpp @@ -190,8 +190,6 @@ void EventList::calcNextEvents() void EventList::calcRelEvents() { - const size_t N = vec_.size(); - // calc rel times for (auto& ev : vec_) { if (ev.type == EVENT_RELATIVE) { diff --git a/ceammc/ext/src/tl/tl_timeline.cpp b/ceammc/ext/src/tl/tl_timeline.cpp index e9ac9ce912..476df09e13 100644 --- a/ceammc/ext/src/tl/tl_timeline.cpp +++ b/ceammc/ext/src/tl/tl_timeline.cpp @@ -44,8 +44,9 @@ TlTimeLine::TlTimeLine(const PdArgs& args) void TlTimeLine::dump() const { OBJ_DBG << "absolute events:"; + int idx = 0; for (auto& t : tl_.events()) { - OBJ_DBG << " " << t.name << " " << t.abs_time << " " << t.next_time; + OBJ_DBG << " [" << (idx++) << "] " << t.name << " " << t.abs_time << " " << t.next_time; } BaseObject::dump(); diff --git a/ceammc/ext/src/ui/CMakeLists.txt b/ceammc/ext/src/ui/CMakeLists.txt index 74cd2db141..8209ebd1c4 100644 --- a/ceammc/ext/src/ui/CMakeLists.txt +++ b/ceammc/ext/src/ui/CMakeLists.txt @@ -31,8 +31,11 @@ ceammc_ui_extension(link) ceammc_ui_extension(matrix) ceammc_ui_extension(menu) ceammc_ui_extension(meter) +ceammc_ui_extension(mouse_filter) +ceammc_ui_extension(mouse_route) ceammc_ui_extension(number) ceammc_ui_extension(number_tilde) +ceammc_ui_extension(polar) ceammc_ui_extension(preset) ceammc_ui_extension(radio) ceammc_ui_extension(rslider) diff --git a/ceammc/ext/src/ui/mod_ui.cpp b/ceammc/ext/src/ui/mod_ui.cpp index d03dcc889f..9755bc4482 100644 --- a/ceammc/ext/src/ui/mod_ui.cpp +++ b/ceammc/ext/src/ui/mod_ui.cpp @@ -17,8 +17,11 @@ #include "ui_matrix.h" #include "ui_menu.h" #include "ui_meter.h" +#include "ui_mouse_filter.h" +#include "ui_mouse_route.h" #include "ui_number.h" #include "ui_number_tilde.h" +#include "ui_polar.h" #include "ui_preset.h" #include "ui_radio.h" #include "ui_rslider.h" @@ -49,8 +52,11 @@ void ceammc_ui_setup() setup_ui_matrix(); setup_ui_menu(); setup_ui_meter(); + setup_ui_mouse_filter(); + setup_ui_mouse_route(); setup_ui_number(); setup_ui_number_tilde(); + setup_ui_polar(); setup_ui_preset(); setup_ui_radio(); setup_ui_rslider(); diff --git a/ceammc/ext/src/ui/tcl_to_c.sh b/ceammc/ext/src/ui/tcl_to_c.sh index 0b360255fa..8bffe49b2e 100755 --- a/ceammc/ext/src/ui/tcl_to_c.sh +++ b/ceammc/ext/src/ui/tcl_to_c.sh @@ -16,16 +16,13 @@ fi echo "/* This is autogenerated source file. Do not edit! */" echo "#ifndef $2_h" echo "#define $2_h" -echo "#include " +echo "#include \"m_pd.h\"" echo "" echo "void $2() {" -cat "$1" | sed '/^\s*$/d' | sed '/^#/d' | while read line -do - line=$(echo $line | sed s/\"/\\\\\"/g) - $ECHO -E ' sys_gui("'$line'\n");' -done - +echo " sys_gui(" +cat "$1" | sed -e 's|\\|\\\\|g' -e 's|"|\\"|g' -e 's|\(.*\)| "\1\\n"|' -e '/^ *"#/d' -e '/^ *"\\n"/d' +echo " );" echo "}" echo "#endif" diff --git a/ceammc/ext/src/ui/ui_arrayview.cpp b/ceammc/ext/src/ui/ui_arrayview.cpp index c5a167398d..d52521f5a5 100644 --- a/ceammc/ext/src/ui/ui_arrayview.cpp +++ b/ceammc/ext/src/ui/ui_arrayview.cpp @@ -44,6 +44,7 @@ UIArrayView::UIArrayView() , render_clock_(this, &UIArrayView::renderTick) , render_index_(0) , selection_mode_(SELECTION_NONE) + , prev_mouse_pt_ { 0, 0 } , prop_array(&s_) , prop_color_wave(rgba_blue) , prop_color_cursor(rgba_blue) @@ -223,26 +224,44 @@ void UIArrayView::onMouseDown(t_object* view, const t_pt& pt, const t_pt& abs_pt if (!isValidArray()) return; - if (modifiers & EMOD_SHIFT) - selection_mode_ = SELECTION_RANGE; - else - selection_mode_ = SELECTION_CURSOR; - auto x = clip(pt.x, 0, width()); + auto sample_pos = (x * array_.size()) / width(); + selection_mode_ = keyMod2EditMode(modifiers, x); switch (selection_mode_) { case SELECTION_CURSOR: - cursor_sample_pos_ = ((x * array_.size()) / width()); + cursor_sample_pos_ = sample_pos; cursor_layer_.invalidate(); redraw(); - output(); break; case SELECTION_RANGE: - selection_.from() = ((x * array_.size()) / width()); + selection_.from() = sample_pos; + break; + case CHANGE_RANGE_LEFT: + selection_.from() = sample_pos; + selection_.normalize(); + invalidateCursor(); + invalidateWaveform(); + redraw(); + setCursor(ECURSOR_LEFT_SIDE); + break; + case CHANGE_RANGE_RIGHT: + selection_.to() = sample_pos; + selection_.normalize(); + invalidateCursor(); + invalidateWaveform(); + redraw(); + setCursor(ECURSOR_RIGHT_SIDE); + break; + case MOVE_RANGE: + prev_mouse_pt_ = pt; + setCursor(ECURSOR_MOVE); break; default: break; } + + output(); } void UIArrayView::onMouseUp(t_object* view, const t_pt& pt, long modifiers) @@ -256,18 +275,45 @@ void UIArrayView::onMouseUp(t_object* view, const t_pt& pt, long modifiers) invalidateCursor(); redraw(); } break; + case CHANGE_RANGE_LEFT: + case CHANGE_RANGE_RIGHT: + case MOVE_RANGE: + selection_.normalize(); + invalidateWaveform(); + invalidateCursor(); + redraw(); + break; default: break; } output(); selection_mode_ = SELECTION_NONE; + setCursor(ECURSOR_LEFT_PTR); } void UIArrayView::onMouseMove(t_object* view, const t_pt& pt, long modifiers) { if (!isValidArray()) return; + + auto x = clip(pt.x, 0, width()); + auto sample_pos = (x * array_.size()) / width(); + + switch (keyMod2EditMode(modifiers, x)) { + case MOVE_RANGE: { + if (selection_.from() <= sample_pos && sample_pos <= selection_.to()) + setCursor(ECURSOR_MOVE); + } break; + case CHANGE_RANGE_LEFT: { + setCursor(ECURSOR_LEFT_SIDE); + } break; + case CHANGE_RANGE_RIGHT: { + setCursor(ECURSOR_RIGHT_SIDE); + } break; + default: + break; + } } void UIArrayView::onMouseLeave(t_object* view, const t_pt& pt, long modifiers) @@ -280,12 +326,12 @@ void UIArrayView::onMouseLeave(t_object* view, const t_pt& pt, long modifiers) invalidateWaveform(); invalidateCursor(); redraw(); + selection_mode_ = SELECTION_NONE; } break; default: break; } - selection_mode_ = SELECTION_NONE; setCursor(ECURSOR_LEFT_PTR); } @@ -308,11 +354,43 @@ void UIArrayView::onMouseDrag(t_object* view, const t_pt& pt, long modifiers) cursor_sample_pos_ = samp_pos; invalidateCursor(); redraw(); - output(); + } break; + case CHANGE_RANGE_LEFT: + selection_.from() = samp_pos; + selection_.normalize(); + invalidateWaveform(); + invalidateCursor(); + redraw(); + break; + case CHANGE_RANGE_RIGHT: + selection_.to() = samp_pos; + selection_.normalize(); + invalidateWaveform(); + invalidateCursor(); + redraw(); + break; + case MOVE_RANGE: { + long sample_delta = ((pt.x - prev_mouse_pt_.x) * array_.size()) / width(); + long new_from = selection_.from() + sample_delta; + long new_to = selection_.to() + sample_delta; + long N = array_.size(); + + if (new_from >= 0 && new_from <= N + && new_to >= 0 && new_to <= N) { + selection_.from() = new_from; + selection_.to() = new_to; + invalidateWaveform(); + invalidateCursor(); + redraw(); + } + + prev_mouse_pt_ = pt; } break; default: break; } + + output(); } void UIArrayView::onBang() @@ -825,6 +903,26 @@ void UIArrayView::setSelection(long begin, long end) selection_.normalize(); } +EditMode UIArrayView::keyMod2EditMode(long mod, int x) const +{ +#ifdef __APPLE__ + if (mod & EMOD_CMD) + return SELECTION_RANGE; +#else + if (mod & EMOD_CTRL) + return SELECTION_RANGE; +#endif + else if (mod & EMOD_SHIFT) + return MOVE_RANGE; + else if (mod & EMOD_ALT) { + long sel_samp = (x * array_.size()) / width(); + auto dx0 = std::abs(selection_.from() - sel_samp); + auto dx1 = std::abs(selection_.to() - sel_samp); + return (dx0 < dx1) ? CHANGE_RANGE_LEFT : CHANGE_RANGE_RIGHT; + } else + return SELECTION_CURSOR; +} + void UIArrayView::invalidateWaveform() { wave_layer_.invalidate(); @@ -907,8 +1005,9 @@ void UIArrayView::setup() { UIObjectFactory obj("ui.aview"); - obj.setDefaultSize(480, 120); + obj.setDefaultSize(300, 100); obj.useMouseEvents(UI_MOUSE_DOWN | UI_MOUSE_UP | UI_MOUSE_MOVE | UI_MOUSE_LEAVE | UI_MOUSE_DRAG); + obj.outputMouseEvents(MouseEventsOutput::DEFAULT_ON); obj.useFloat(); obj.useBang(); obj.hideLabelInner(); @@ -927,11 +1026,17 @@ void UIArrayView::setup() obj.addProperty("cursor_phase", &UIArrayView::cursorPosPhase, &UIArrayView::setCursorPosPhase); obj.addProperty("cursor_sec", &UIArrayView::cursorPosSec, &UIArrayView::setCursorPosSec); obj.addProperty("cursor_ms", &UIArrayView::cursorPosMs, &UIArrayView::setCursorPosMs); + obj.setPropertyUnits(gensym("cursor_samp"), gensym("samp")); + obj.setPropertyUnits(gensym("cursor_sec"), gensym("sec")); + obj.setPropertyUnits(gensym("cursor_ms"), gensym("msec")); obj.addProperty("select_samp", &UIArrayView::selectPosSample, &UIArrayView::setSelectPosSample); obj.addProperty("select_phase", &UIArrayView::selectPosPhase, &UIArrayView::setSelectPosPhase); obj.addProperty("select_sec", &UIArrayView::selectPosSec, &UIArrayView::setSelectPosSec); obj.addProperty("select_ms", &UIArrayView::selectPosMs, &UIArrayView::setSelectPosMs); + obj.setPropertyUnits(gensym("select_samp"), gensym("samp")); + obj.setPropertyUnits(gensym("select_sec"), gensym("sec")); + obj.setPropertyUnits(gensym("select_ms"), gensym("msec")); obj.addProperty("label_top", &UIArrayView::labelTopRight, &UIArrayView::setLabelTopRight); obj.addProperty("label_bottom", &UIArrayView::labelBottomRight, &UIArrayView::setLabelBottomRight); @@ -939,6 +1044,9 @@ void UIArrayView::setup() obj.addProperty("size_samp", &UIArrayView::sizeSamples, 0); obj.addProperty("size_sec", &UIArrayView::sizeSec, 0); obj.addProperty("size_ms", &UIArrayView::sizeMs, 0); + obj.setPropertyUnits(gensym("size_samp"), gensym("samp")); + obj.setPropertyUnits(gensym("size_sec"), gensym("sec")); + obj.setPropertyUnits(gensym("size_ms"), gensym("msec")); obj.addMethod("update", &UIArrayView::m_update); obj.addMethod("select", &UIArrayView::m_selectSamples); diff --git a/ceammc/ext/src/ui/ui_arrayview.h b/ceammc/ext/src/ui/ui_arrayview.h index 823654ce21..58d878ba40 100644 --- a/ceammc/ext/src/ui/ui_arrayview.h +++ b/ceammc/ext/src/ui/ui_arrayview.h @@ -26,10 +26,13 @@ struct WaveInfo { float rms; }; -enum SelectionMode { +enum EditMode { SELECTION_NONE = 0, SELECTION_CURSOR, - SELECTION_RANGE + SELECTION_RANGE, + MOVE_RANGE, + CHANGE_RANGE_LEFT, + CHANGE_RANGE_RIGHT }; class SelectionRange { @@ -86,7 +89,8 @@ class UIArrayView : public UIObject { std::string str_label_top_right_; std::string str_label_bottom_right_; SelectionRange selection_; - SelectionMode selection_mode_; + EditMode selection_mode_; + t_pt prev_mouse_pt_; public: t_symbol* prop_array; @@ -169,6 +173,8 @@ class UIArrayView : public UIObject { void redrawSelection(); void setSelection(long begin, long end); + EditMode keyMod2EditMode(long mod, int x) const; + public: t_float sizeSamples() const; t_float sizeSec() const; diff --git a/ceammc/ext/src/ui/ui_dsp.cpp b/ceammc/ext/src/ui/ui_dsp.cpp index 5b4762c492..17a1702ad3 100644 --- a/ceammc/ext/src/ui/ui_dsp.cpp +++ b/ceammc/ext/src/ui/ui_dsp.cpp @@ -6,6 +6,7 @@ UIDsp::UIDsp() , init_(false) , prop_color_active(rgba_black) { + initPopupMenu("main", { { _("Audio Settings"), [this](const t_pt&) { openSoundSettingsDialog(); } } }); } void UIDsp::init(t_symbol* name, const AtomList& args, bool) @@ -47,12 +48,6 @@ void UIDsp::paint() void UIDsp::onMouseDown(t_object* view, const t_pt& pt, const t_pt& abs_pt, long modifiers) { - if (modifiers & EMOD_RIGHT) { - UIPopupMenu menu(asEObj(), "menu", abs_pt); - menu.addItem(_("Audio Settings")); - return; - } - if (canvas_dspstate) m_stop(AtomList()); else @@ -67,17 +62,6 @@ void UIDsp::onAny(t_symbol* s, const AtomList& lst) } } -void UIDsp::onPopup(t_symbol* menu_name, long item_idx) -{ - switch (item_idx) { - case 0: - openSoundSettingsDialog(); - break; - default: - break; - } -} - void UIDsp::m_start(const AtomList&) { t_symbol* SYM_PD = gensym("pd"); @@ -109,6 +93,7 @@ void UIDsp::setup() obj.hideLabelInner(); obj.useAny(); + obj.usePopup(); obj.setDefaultSize(30, 30); obj.useMouseEvents(UI_MOUSE_DOWN); obj.addProperty("active_color", _("Active Color"), DEFAULT_ACTIVE_COLOR, &UIDsp::prop_color_active); diff --git a/ceammc/ext/src/ui/ui_dsp.h b/ceammc/ext/src/ui/ui_dsp.h index 4aca4fefb4..7489ef5882 100644 --- a/ceammc/ext/src/ui/ui_dsp.h +++ b/ceammc/ext/src/ui/ui_dsp.h @@ -20,7 +20,6 @@ class UIDsp : public UIObject { void onMouseDown(t_object* view, const t_pt& pt, const t_pt& abs_pt, long modifiers); void onAny(t_symbol* s, const AtomList& lst); - void onPopup(t_symbol* menu_name, long item_idx); void m_start(const AtomList&); void m_stop(const AtomList&); diff --git a/ceammc/ext/src/ui/ui_env.cpp b/ceammc/ext/src/ui/ui_env.cpp index dff163f319..8cb31d47ad 100644 --- a/ceammc/ext/src/ui/ui_env.cpp +++ b/ceammc/ext/src/ui/ui_env.cpp @@ -9,6 +9,7 @@ static const int ENV_MIN_WIDTH = 40; static const int ENV_MIN_HEIGHT = 30; static t_rgba DELETE_COLOR = hex_to_rgba("#F00030"); +static t_rgba LINE_SELECTION_COLOR = hex_to_rgba("#AAFFFF"); static const char* DEFAULT_LINE_COLOR = "0.1 0.1 0.1 1.0"; static const char* PROP_LENGTH = "length"; @@ -50,6 +51,78 @@ UIEnv::UIEnv() createOutlet(); env_.setADSR(40 * 1000, 60 * 1000, 0.3, 400 * 1000); updateNodes(); + + initPopupMenu("env", + { { "ADSR(10 20 30 500)", [this](const t_pt&) { setNamedEnvelope(SYM_ADSR, { 10, 20, 30, 500 }); } }, + { "ASR (500 500)", [this](const t_pt&) { setNamedEnvelope(SYM_ASR, { 500, 500 }); } }, + { "AR (500 500)", [this](const t_pt&) { setNamedEnvelope(SYM_AR, { 500, 500 }); } } }); + + initPopupMenu("point", + { { "toggle stop", [this](const t_pt& pt) { + auto idx = findSelectedNodeIdx(); + // ignore first node too + if (idx < 1) + return; + + nodes_[idx].is_stop = !nodes_[idx].is_stop; + redrawLayer(envelope_layer_); + } }, + { "toggle fixed Y", [this](const t_pt& pt) { + auto idx = findSelectedNodeIdx(); + // ignore first node too + if (idx < 1) + return; + + nodes_[idx].fixed_y = !nodes_[idx].fixed_y; + redrawLayer(envelope_layer_); + } } }); + + initPopupMenu("line", + { { "linear", [this](const t_pt& pt) { + auto idx = findNodeLine(pt); + if (idx < 0) + return; + + nodes_[idx].type = CURVE_LINE; + nodes_[idx].select = SelectType::NONE; + redrawLayer(envelope_layer_); + } }, + { "exp", [this](const t_pt& pt) { + auto idx = findNodeLine(pt); + if (idx < 0) + return; + + nodes_[idx].type = CURVE_EXP; + nodes_[idx].select = SelectType::NONE; + redrawLayer(envelope_layer_); + } }, + { "sin2", [this](const t_pt& pt) { + auto idx = findNodeLine(pt); + if (idx < 0) + return; + + nodes_[idx].type = CURVE_SIN2; + nodes_[idx].select = SelectType::NONE; + redrawLayer(envelope_layer_); + } }, + { "sigmoid", [this](const t_pt& pt) { + auto idx = findNodeLine(pt); + if (idx < 0) + return; + + nodes_[idx].type = CURVE_SIGMOID; + nodes_[idx].select = SelectType::NONE; + redrawLayer(envelope_layer_); + } }, + { "step", [this](const t_pt& pt) { + auto idx = findNodeLine(pt); + if (idx < 0) + return; + + nodes_[idx].type = CURVE_STEP; + nodes_[idx].select = SelectType::NONE; + redrawLayer(envelope_layer_); + } } }); } void UIEnv::onBang() @@ -94,6 +167,7 @@ void UIEnv::drawCursor(const t_rect& r) cp.drawLine(cursor_pos_.x, 0, cursor_pos_.x, height()); } + // draw cursor position text if (draw_cursor_pos_) { char buf[100]; @@ -169,7 +243,10 @@ void UIEnv::drawEnvelope(const t_rect& r) for (size_t i = 0; i < total; i++) { const Node& n = nodes_[i]; - ep.setColor(prop_line_color); + if (n.select == SelectType::LINE) + ep.setColor(LINE_SELECTION_COLOR); + else + ep.setColor(prop_line_color); // draw segments if (i != (total - 1)) { // skip last point @@ -231,7 +308,7 @@ void UIEnv::drawEnvelope(const t_rect& r) } // draw selection rectangle - if (n.is_selected) { + if (n.select == SelectType::POINT) { bool is_inner_node = ((i != 0) && (i != (total - 1))); if (delete_mode_ && is_inner_node) ep.setColor(DELETE_COLOR); @@ -255,6 +332,41 @@ void UIEnv::drawEnvelope(const t_rect& r) } } +void UIEnv::addNode(const t_pt& pt) +{ + const float z = zoom(); + const float x_norm = pt.x / z; + const float y_norm = pt.y / z; + + long insert_idx = 0; + for (size_t i = 1; i < nodes_.size(); i++) { + // prevent to close insertion + if (fabsf(nodes_[i].x - x_norm) < 2) + return; + + // find node index to insert before + if (nodes_[i].x > x_norm) { + insert_idx = i; + break; + } + } + + Node n; + n.x = x_norm; + n.y = y_norm; + n.select = SelectType::POINT; + + // insert new selected node + nodes_.insert(nodes_.begin() + insert_idx, n); + redrawLayer(envelope_layer_); +} + +long UIEnv::findSelectedNodeIdx() const +{ + auto it = std::find_if(nodes_.begin(), nodes_.end(), [](const Node& n) { return n.select == SelectType::POINT; }); + return (it == nodes_.end()) ? -1 : std::distance(nodes_.begin(), it); +} + void UIEnv::paint() { const t_rect r = rect(); @@ -278,47 +390,48 @@ void UIEnv::onMouseMove(t_object*, const t_pt& pt, long modifiers) const float x_norm = pt.x / z; const float y_norm = pt.y / z; - int idx = findNearestNode(x_norm, y_norm); - - if (selectNode(idx < 0 ? nodes_.size() : idx)) - envelope_layer_.invalidate(); + int node_idx = findNearestNode(x_norm, y_norm); + if (node_idx >= 0) { + if (selectNode(node_idx)) + envelope_layer_.invalidate(); + } else { + if (!hasSelectedEdge()) { + deselectAll(); + envelope_layer_.invalidate(); + } + } // draw cursor position if (modifiers == EMOD_SHIFT) { draw_cursor_pos_ = true; draw_cursor_cross_ = true; cursor_pos_ = pt; + cursor_layer_.invalidate(); } else if (modifiers == EMOD_ALT) { delete_mode_ = true; envelope_layer_.invalidate(); } else { delete_mode_ = false; draw_cursor_cross_ = false; - draw_cursor_pos_ = (idx >= 0); + draw_cursor_pos_ = (node_idx >= 0); - if (idx >= 0) { - cursor_pos_.x = nodes_[idx].x * z; - cursor_pos_.y = nodes_[idx].y * z; + if (node_idx >= 0) { + cursor_pos_.x = nodes_[node_idx].x * z; + cursor_pos_.y = nodes_[node_idx].y * z; + cursor_layer_.invalidate(); } } - redrawLayer(cursor_layer_); + redrawInnerArea(); } -void UIEnv::onMouseDrag(t_object*, const t_pt& pt, long) +void UIEnv::onMouseDrag(t_object*, const t_pt& pt, long mod) { const float z = zoom(); const float x_norm = pt.x / z; const float y_norm = pt.y / z; - long idx = -1; - for (size_t i = 0; i < nodes_.size(); i++) { - if (nodes_[i].is_selected) { - idx = i; - break; - } - } - + long idx = findSelectedNodeIdx(); // no selected node if (idx < 0) return; @@ -351,75 +464,110 @@ void UIEnv::onMouseDrag(t_object*, const t_pt& pt, long) envelope_layer_.invalidate(); cursor_layer_.invalidate(); redrawInnerArea(); + + if (shouldOutput(mod)) + outputEnvelope(); } -void UIEnv::onMouseDown(t_object*, const t_pt& pt, const t_pt& abs_pt, long mod) +void UIEnv::removeSelectedNode() +{ + auto idx = findSelectedNodeIdx(); + + long n = nodes_.size(); + if (idx < 1 || idx >= n - 1) + return; + + nodes_.erase(nodes_.begin() + idx); + delete_mode_ = false; + redrawLayer(envelope_layer_); +} + +long UIEnv::findNodeLine(const t_pt& pt) { const float z = zoom(); const float x_norm = pt.x / z; const float y_norm = pt.y / z; - if (mod & EMOD_SHIFT) { - - long insert_idx = 0; - for (size_t i = 1; i < nodes_.size(); i++) { - // prevent to close insertion - if (fabsf(nodes_[i].x - x_norm) < 2) - return; + auto in_between = [](float y, float y0, float y1) { + auto mm = std::minmax(y0, y1); + return mm.first <= y && y < mm.second; + }; - // find node index to insert before - if (nodes_[i].x > x_norm) { - insert_idx = i; - break; - } - } + // find selected node line + for (size_t i = 1; i < nodes_.size(); i++) { + auto& n0 = nodes_[i - 1]; + auto& n1 = nodes_[i]; + if (in_between(x_norm, n0.x, n1.x) && in_between(y_norm, n0.y, n1.y)) + return i - 1; + } - Node n; - n.x = x_norm; - n.y = y_norm; - n.is_selected = true; + return -1; +} - // insert new selected node - nodes_.insert(nodes_.begin() + insert_idx, n); - redrawLayer(cursor_layer_); - return; - } else if (mod & EMOD_RIGHT) { - // context menu - UIPopupMenu menu(asEObj(), "adsr_select", abs_pt); - menu.addItem("ADSR (10 20 30 500)"); - menu.addItem("ASR (500 500)"); - menu.addItem("AR (500 500)"); +void UIEnv::deselectAll() +{ + for (auto& n : nodes_) { + n.select = SelectType::NONE; } +} - // find selected node index - long idx = -1; - for (size_t i = 0; i < nodes_.size(); i++) { - if (nodes_[i].is_selected) { - idx = i; - break; - } - } +bool UIEnv::hasSelectedEdge() const +{ + return std::find_if(nodes_.begin(), nodes_.end(), [](const Node& n) { return n.select == SelectType::LINE; }) != nodes_.end(); +} - // no selected node - if (idx < 0) - return; +void UIEnv::outputEnvelope() +{ + updateEnvelope(); + dataTo(0, DataPtr(env_.clone())); +} - if (mod & EMOD_CTRL) { - nodes_[idx].is_stop = !nodes_[idx].is_stop; - redrawLayer(cursor_layer_); - return; - } +bool UIEnv::shouldOutput(long mod) +{ +#ifndef __APPLE__ + return (mod & EMOD_CTRL); +#else + return (mod & EMOD_CMD); +#endif +} - if (mod & EMOD_ALT) { - long n = nodes_.size(); - if (idx < 1 || idx >= n - 1) - return; +void UIEnv::onMouseDown(t_object*, const t_pt& pt, const t_pt& abs_pt, long mod) +{ + if (mod & EMOD_SHIFT) { + addNode(pt); + } else if (mod & EMOD_ALT) { + removeSelectedNode(); + } else { + const float z = zoom(); + const float x_norm = pt.x / z; + const float y_norm = pt.y / z; + + // not a node click + if (findNearestNode(x_norm, y_norm) < 0) { + long idx = findNodeLine(pt); + + // reset all others nodes + if (idx >= 0) { + // toggle selection + if (nodes_[idx].select != SelectType::NONE) + nodes_[idx].select = SelectType::NONE; + else + nodes_[idx].select = SelectType::LINE; + + for (size_t i = 0; i < nodes_.size(); i++) { + if (i == idx) + continue; + + nodes_[i].select = SelectType::NONE; + } - nodes_.erase(nodes_.begin() + idx); - delete_mode_ = false; - redrawLayer(cursor_layer_); - return; + redrawLayer(envelope_layer_); + } + } } + + if (shouldOutput(mod)) + outputEnvelope(); } void UIEnv::onMouseLeave(t_object*, const t_pt& pt, long) @@ -429,21 +577,40 @@ void UIEnv::onMouseLeave(t_object*, const t_pt& pt, long) redrawLayer(cursor_layer_); } -void UIEnv::onMouseWheel(t_object*, const t_pt& pt, long, double delta) +void UIEnv::onMouseUp(t_object* view, const t_pt& pt, long mod) +{ + if (shouldOutput(mod)) + outputEnvelope(); +} + +void UIEnv::onMouseWheel(const t_pt& pt, long mod, float delta) { const float z = zoom(); - const float x_norm = pt.x / z; + long idx = findSelectedNodeIdx(); - long idx = -1; - for (size_t i = 1; i < nodes_.size(); i++) { - if (x_norm < nodes_[i].x) { - idx = i - 1; - break; - } - } + // move node + if (idx >= 0) { + auto& n = nodes_[idx]; + float k = 0.01 * delta; - if (idx < 0) + // update coordinates + if (!n.fixed_y) + n.y = clip(n.y * (1 + k), 0, height() / z); + + redrawLayer(envelope_layer_); return; + } else { + for (size_t i = 1; i < nodes_.size(); i++) { + if (pt.x < nodes_[i].x) { + idx = (i - 1); + break; + } + } + + if (idx < 0) { + return; + } + } switch (nodes_[idx].type) { case CURVE_EXP: @@ -456,78 +623,23 @@ void UIEnv::onMouseWheel(t_object*, const t_pt& pt, long, double delta) return; } - redrawLayer(cursor_layer_); + redrawLayer(envelope_layer_); } -void UIEnv::onMouseUp(t_object*, const t_pt& pt, long) +void UIEnv::showPopup(const t_pt& pt, const t_pt& abs_pt) { - updateEnvelope(); - dataTo(0, DataPtr(env_.clone())); -} - -void UIEnv::onDblClick(t_object*, const t_pt& pt, long modifiers) -{ - const float z = zoom(); - const float x_norm = pt.x / z; - - if (!(modifiers & EMOD_CTRL)) + auto idx = findSelectedNodeIdx(); + if (idx >= 0) { + showPopupMenu("point", pt, abs_pt); return; - - long idx = -1; - for (size_t i = 1; i < nodes_.size(); i++) { - if (x_norm < nodes_[i].x) { - idx = i - 1; - break; - } - } - - if (idx < 0) - return; - - Node& n = nodes_[idx]; - CurveType types[] = { CURVE_STEP, CURVE_LINE, CURVE_EXP, CURVE_SIN2, CURVE_SIGMOID }; - for (size_t i = 0; i < boost::size(types); i++) { - if (n.type == types[i]) { - n.type = types[(i + 1) % boost::size(types)]; - break; - } } - redrawLayer(cursor_layer_); -} - -void UIEnv::onPopup(t_symbol* msg, long itemIdx) -{ - if (msg == gensym("adsr_select")) { - switch (itemIdx) { - case 0: { - AtomList lst; - lst.append(10); - lst.append(20); - lst.append(30); - lst.append(500); - setNamedEnvelope(SYM_ADSR, lst); - break; - } - case 1: { - AtomList lst; - lst.append(500); - lst.append(500); - setNamedEnvelope(SYM_ASR, lst); - break; - } - case 2: { - AtomList lst; - lst.append(500); - lst.append(500); - setNamedEnvelope(SYM_AR, lst); - break; - } - default: { - UI_ERR << "popup menu inconsistance " << msg << ", index not exists: " << itemIdx; - break; - } - } + auto it = std::find_if(nodes_.begin(), nodes_.end(), [](const Node& n) { return n.select == SelectType::LINE; }); + if (it != nodes_.end()) { + showPopupMenu("line", pt, abs_pt); + it->select = SelectType::NONE; + } else { + showPopupMenu("env", pt, abs_pt); } } @@ -596,10 +708,13 @@ bool UIEnv::selectNode(size_t idx) int num_changes = 0; for (size_t i = 0; i < nodes_.size(); i++) { - bool v = (i == idx); - - if (v != nodes_[i].is_selected) { - nodes_[i].is_selected = v; + if (i == idx) { // select specified node + if (nodes_[i].select != SelectType::POINT) { + nodes_[i].select = SelectType::POINT; + num_changes++; + } + } else if (nodes_[i].select != SelectType::NONE) { // deselect others + nodes_[i].select = SelectType::NONE; num_changes++; } } @@ -694,15 +809,18 @@ void UIEnv::setup() obj.usePresets(); obj.useBang(); + obj.usePopup(); obj.useMouseEvents(UI_MOUSE_DOWN | UI_MOUSE_DRAG | UI_MOUSE_MOVE | UI_MOUSE_LEAVE - | UI_MOUSE_WHEEL | UI_MOUSE_UP | UI_MOUSE_DBL_CLICK); + | UI_MOUSE_WHEEL | UI_MOUSE_UP); obj.useData(); + obj.outputMouseEvents(MouseEventsOutput::DEFAULT_OFF); obj.addProperty(PROP_ACTIVE_COLOR, _("Active Color"), DEFAULT_ACTIVE_COLOR, &UIEnv::prop_active_color); obj.addProperty("line_color", _("Line Color"), DEFAULT_LINE_COLOR, &UIEnv::prop_line_color); obj.addProperty(PROP_LENGTH, _("Length (ms)"), 400, &UIEnv::prop_length, _("Main")); obj.setPropertyMin(PROP_LENGTH, 10); + obj.setPropertyUnits(gensym(PROP_LENGTH), gensym("msec")); obj.addMethod(SYM_ADSR, &UIEnv::m_adsr); obj.addMethod(SYM_ASR, &UIEnv::m_asr); @@ -734,7 +852,7 @@ Node Node::fromEnvelope(const EnvelopePoint& pt, size_t total_us, float w, float n.curve = pt.data; n.sigmoid_skew = pt.sigmoid_skew; n.type = pt.type; - n.is_selected = false; + n.select = SelectType::NONE; n.is_stop = pt.stop; n.fixed_x = fixed_x; n.fixed_y = false; diff --git a/ceammc/ext/src/ui/ui_env.h b/ceammc/ext/src/ui/ui_env.h index 466eca75ad..738d3f18e8 100644 --- a/ceammc/ext/src/ui/ui_env.h +++ b/ceammc/ext/src/ui/ui_env.h @@ -8,12 +8,19 @@ using namespace ceammc; +enum class SelectType { + NONE = 0, + POINT, + LINE +}; + struct Node { float x, y; float curve; float sigmoid_skew; CurveType type; - bool is_selected, is_stop; + SelectType select; + bool is_stop; bool fixed_x, fixed_y; Node() @@ -22,7 +29,7 @@ struct Node { , curve(0) , sigmoid_skew(0) , type(CURVE_LINE) - , is_selected(false) + , select(SelectType::NONE) , is_stop(false) , fixed_x(false) , fixed_y(false) @@ -42,7 +49,7 @@ class UIEnv : public UIObject { bool draw_cursor_cross_; bool delete_mode_; UILayer envelope_layer_; - UILayer cursor_layer_; + UILayer cursor_layer_; // cursor cross and text position UIFont font_; UITextLayout cursor_txt_pos_; float max_env_value_; @@ -60,13 +67,12 @@ class UIEnv : public UIObject { void paint(); void okSize(t_rect* newrect); void onMouseMove(t_object*, const t_pt& pt, long modifiers); - void onMouseDrag(t_object*, const t_pt& pt, long); + void onMouseDrag(t_object*, const t_pt& pt, long mod); void onMouseDown(t_object*, const t_pt& pt, const t_pt& abs_pt, long mod); void onMouseLeave(t_object*, const t_pt&, long); - void onMouseWheel(t_object*, const t_pt& pt, long, double delta); - void onMouseUp(t_object*, const t_pt&, long); - void onDblClick(t_object*, const t_pt& pt, long modifiers); - void onPopup(t_symbol* msg, long itemIdx); + void onMouseUp(t_object* view, const t_pt& pt, long mod); + void onMouseWheel(const t_pt& pt, long mod, float delta); + void showPopup(const t_pt& pt, const t_pt& abs_pt); void updateNodes(); void updateEnvelope(); @@ -95,6 +101,18 @@ class UIEnv : public UIObject { void drawCursor(const t_rect& r); void drawEnvelope(const t_rect& r); + void addNode(const t_pt& pt); + long findSelectedNodeIdx() const; + + void removeSelectedNode(); + + long findNodeLine(const t_pt& pt); + void deselectAll(); + bool hasSelectedEdge() const; + + void outputEnvelope(); + static bool shouldOutput(long mod); + public: static void setup(); diff --git a/ceammc/ext/src/ui/ui_gain.cpp b/ceammc/ext/src/ui/ui_gain.cpp index f82fea690d..9596b05aa8 100644 --- a/ceammc/ext/src/ui/ui_gain.cpp +++ b/ceammc/ext/src/ui/ui_gain.cpp @@ -13,13 +13,18 @@ *****************************************************************************/ #include "ui_gain.h" #include "ceammc_convert.h" -#include "ceammc_dsp_ui.h" #include "ceammc_preset.h" +#include "ceammc_ui.h" static const float SCALE_ALPHA_BLEND = 0.7; +// see ui_single_value.cpp +static t_rgba BIND_MIDI_COLOR = hex_to_rgba("#FF3377"); +static t_rgba PICKUP_MIDI_COLOR = hex_to_rgba("#3377FF"); + UIGain::UIGain() - : prop_color_knob(rgba_blue) + : midi_proxy_(this, &UIGain::onMidiCtrl) + , prop_color_knob(rgba_blue) , prop_color_scale(rgba_blue) , prop_max(0) , prop_min(-60) @@ -28,9 +33,28 @@ UIGain::UIGain() , font_(gensym(FONT_FAMILY), FONT_SIZE_SMALL) , txt_max_(font_.font(), ColorRGBA::black(), ETEXT_UP_LEFT, ETEXT_JLEFT) , txt_min_(font_.font(), ColorRGBA::black(), ETEXT_DOWN_LEFT, ETEXT_JLEFT) - , knob_pos_(0) + , click_pos_ { 0, 0 } + , knob_phase_(0) , is_horizontal_(false) + , prop_relative_mode(0) + , prop_midi_chn(0) + , prop_midi_ctl(0) + , prop_pickup_midi(0) + , control_state_(NORMAL) + , pick_value_state_(PICK_VALUE_START) { + auto fn = [this](float db) { + setDbValue(dbValue() + db); + if (prop_output_value) + doOutput(); + }; + + initPopupMenu("gain", + { { "+3db", [fn](const t_pt&) { fn(3); } }, + { "-3db", [fn](const t_pt&) { fn(-3); } }, + { "-6db", [fn](const t_pt&) { fn(-6); } }, + { "-12db", [fn](const t_pt&) { fn(-12); } }, + { "-24db", [fn](const t_pt&) { fn(-24); } } }); } void UIGain::okSize(t_rect* newrect) @@ -59,7 +83,7 @@ void UIGain::paint() p.setLineWidth(3); if (is_horizontal_) { - float x = r.width * knob_pos_; + float x = r.width * knob_phase_; // scale p.setColor(prop_color_scale); p.drawRect(0, 0, x, r.height); @@ -82,7 +106,7 @@ void UIGain::paint() p.drawText(txt_min_); } } else { - float y = r.height * (1 - knob_pos_); + float y = r.height * (1 - knob_phase_); // scale p.setColor(prop_color_scale); p.drawRect(0, y, r.width, r.height - y); @@ -107,10 +131,35 @@ void UIGain::paint() } } +void UIGain::initHorizontal() +{ + is_horizontal_ = true; + std::swap(asEBox()->b_rect.width, asEBox()->b_rect.height); + updateLabels(); +} + void UIGain::init(t_symbol* name, const AtomList& args, bool usePresets) { UIDspObject::init(name, args, usePresets); + + if (name == gensym("ui.hgain~")) + initHorizontal(); + dspSetup(1, 1); + + // if listen MIDI + if (prop_midi_ctl > 0) { + midi_proxy_.bind(gensym("#ctlin")); + + // init pickup + if (prop_pickup_midi) { + printPickupInfo(); + pick_value_state_ = PICK_VALUE_START; + control_state_ = PICKUP; + + updateIndicators(); + } + } } void UIGain::dspProcess(t_sample** ins, long n_ins, t_sample** outs, long n_outs, long sampleframes) @@ -120,9 +169,8 @@ void UIGain::dspProcess(t_sample** ins, long n_ins, t_sample** outs, long n_outs const float v = ampValue(); - for (long i = 0; i < sampleframes; i++) { + for (long i = 0; i < sampleframes; i++) out[i] = in[i] * smooth_.get(v); - } } void UIGain::onPropChange(t_symbol* prop_name) @@ -140,49 +188,237 @@ void UIGain::onPropChange(t_symbol* prop_name) void UIGain::onBang() { - t_symbol* s_db = gensym("@db"); - AtomList v(dbValue()); - anyTo(0, s_db, v); - send(s_db, v); + doOutput(); } void UIGain::onMouseDown(t_object* view, const t_pt& pt, const t_pt& abs_pt, long modifiers) { - onMouseDrag(view, pt, modifiers); + if (prop_relative_mode) { + click_pos_ = pt; + } else { + // jump to click position + knob_phase_ = (is_horizontal_) ? clip(pt.x / width()) + : clip(1.0 - (pt.y / height())); + + redrawBGLayer(); + + if (prop_output_value) + doOutput(); + } } void UIGain::onMouseDrag(t_object* view, const t_pt& pt, long modifiers) { - if (is_horizontal_) - knob_pos_ = clip(pt.x / width(), 0, 1); - else - knob_pos_ = clip(1 - pt.y / height(), 0, 1); + if (prop_relative_mode) { + float delta = (is_horizontal_) ? (pt.x - click_pos_.x) / width() : (click_pos_.y - pt.y) / height(); + if (modifiers & EMOD_SHIFT) + delta *= 0.1; + + knob_phase_ = clip(knob_phase_ + delta); + click_pos_ = pt; + } else { + // jump to click position + knob_phase_ = (is_horizontal_) ? clip(pt.x / width()) + : clip(1.0 - (pt.y / height())); + } redrawBGLayer(); if (prop_output_value) - onBang(); + doOutput(); } void UIGain::onDblClick(t_object* view, const t_pt& pt, long modifiers) { - t_canvas* c = reinterpret_cast(view); - if (c->gl_edit) { + if (modifiers & EMOD_SHIFT) { + switch (control_state_) { + case LEARN: + midi_proxy_.unbind(); + gotoNormalState(); + break; + default: + midi_proxy_.bind(gensym("#ctlin")); + control_state_ = LEARN; + break; + } + + updateIndicators(); + return; + } + + if (isPatchEdited()) { resize(height() / zoom(), width() / zoom()); updateLabels(); redrawBGLayer(); + } else + onMouseDown(view, pt, {}, modifiers); +} + +void UIGain::onMouseWheel(const t_pt& pt, long modifiers, float delta) +{ + float k = 0.01; + if (modifiers & EMOD_SHIFT) + k *= 0.1; + + knob_phase_ = clip(knob_phase_ + delta * k); + redrawBGLayer(); + + if (prop_output_value) + doOutput(); +} + +void UIGain::onMidiCtrl(const AtomList& l) +{ + // invalid format + if (l.size() != 3) + return; + + const int CTL_NUM = l[0].asInt(); + const int CTL_CHAN = l[2].asInt(); + const t_float CTL_VAL = l[1].asFloat(); + const float w = convert::lin2lin_clip(CTL_VAL, 0, 1); + + switch (control_state_) { + case NORMAL: { + if (!isMidiMatched(CTL_NUM, CTL_CHAN)) + return; + + updateIndicators(); + + knob_phase_ = w; + redrawBGLayer(); + + // do output if config property is set + if (prop_output_value) + doOutput(); + } break; + case LEARN: { + UI_DBG << "binded to CTL #" << CTL_NUM; + prop_midi_ctl = CTL_NUM; + + if (prop_pickup_midi) { + // change to pickup + control_state_ = PICKUP; + pick_value_state_ = PICK_VALUE_START; + printPickupInfo(); + updateIndicators(); + return onMidiCtrl(l); + } + + gotoNormalState(); + return onMidiCtrl(l); + } break; + case PICKUP: { + updateIndicators(); + + if (!isMidiMatched(CTL_NUM, CTL_CHAN)) + return; + + // simple case: pickup equal value -> change to normal state + if (w == knob_phase_) { + finishPickup(); + return onMidiCtrl(l); + } else { + // pickup when value is over + PickValueState st = (w < knob_phase_) ? PICK_VALUE_LESS : PICK_VALUE_MORE; + + switch (pick_value_state_) { + case PICK_VALUE_START: { + // save current state + pick_value_state_ = st; + } break; + case PICK_VALUE_DONE: { + finishPickup(); + return onMidiCtrl(l); + } break; + default: { + if (pick_value_state_ == -st) { + finishPickup(); + return onMidiCtrl(l); + } + + } break; + } + } + } break; } } +void UIGain::doOutput() +{ + static t_symbol* SYM_DB = gensym("@db"); + + AtomList v(dbValue()); + anyTo(0, SYM_DB, v); + send(SYM_DB, v); +} + +void UIGain::updateIndicators() +{ + switch (control_state_) { + case LEARN: + asEBox()->b_boxparameters.d_bordercolor = BIND_MIDI_COLOR; + break; + case PICKUP: + asEBox()->b_boxparameters.d_bordercolor = PICKUP_MIDI_COLOR; + break; + default: + asEBox()->b_boxparameters.d_bordercolor = prop_color_border; + break; + } + + ebox_invalidate_border(asEBox()); + redrawInnerArea(); +} + +bool UIGain::isMidiMatched(int num, int ch) const +{ + // MIDI control is not binded: skip + if (prop_midi_ctl == 0) + return false; + + // MIDI control not matches: skip + if (num != prop_midi_ctl) + return false; + + // MIDI channel is specified, but not matches + if (prop_midi_chn > 0 && ch != prop_midi_chn) + return false; + + return true; +} + +void UIGain::printPickupInfo() +{ + if (prop_pickup_midi) { + if (prop_midi_chn > 0) + UI_DBG << "pickup mode is ON for CTL #" << prop_midi_ctl << " on channel " << prop_midi_chn; + else + UI_DBG << "pickup mode is ON for CTL #" << prop_midi_ctl << " on all channels"; + } +} + +void UIGain::gotoNormalState() +{ + control_state_ = NORMAL; + pick_value_state_ = PICK_VALUE_DONE; +} + +void UIGain::finishPickup() +{ + UI_DBG << "pickup is done for CTL #" << prop_midi_ctl; + gotoNormalState(); +} + t_float UIGain::dbValue() const { - return convert::lin2lin(knob_pos_, 1, 0, prop_max, prop_min); + return convert::lin2lin(knob_phase_, 1, 0, prop_max, prop_min); } t_float UIGain::ampValue() const { t_float db = dbValue(); - if (db <= prop_min) + if (db <= -60) return 0; return convert::dbfs2amp(db); @@ -190,7 +426,7 @@ t_float UIGain::ampValue() const void UIGain::setDbValue(t_float db) { - knob_pos_ = clip(convert::lin2lin(db, prop_max, prop_min, 1, 0), 0, 1); + knob_phase_ = clip(convert::lin2lin(db, prop_max, prop_min, 1, 0), 0, 1); redrawBGLayer(); } @@ -231,24 +467,43 @@ void UIGain::m_dec() void UIGain::setup() { - UIDspFactory obj("ui.gain~"); + static t_symbol* SYM_DB = gensym("db"); + static t_symbol* SYM_MAX = gensym("max"); + static t_symbol* SYM_MIN = gensym("min"); + + UIObjectFactory obj("ui.gain~"); + obj.addAlias("ui.hgain~"); + obj.addAlias("ui.vgain~"); - obj.addProperty("knob_color", _("Knob Color"), DEFAULT_ACTIVE_COLOR, &UIGain::prop_color_knob); - obj.addProperty("db", &UIGain::dbValue, &UIGain::setDbValue); + obj.addColorProperty("knob_color", _("Knob Color"), DEFAULT_ACTIVE_COLOR, &UIGain::prop_color_knob); + obj.addHiddenFloatCbProperty("db", &UIGain::dbValue, &UIGain::setDbValue); obj.setPropertyDefaultValue("db", "-60"); - obj.addProperty("amp", &UIGain::ampValue, &UIGain::setAmpValue); + obj.setPropertyUnits(SYM_DB, SYM_DB); + obj.addHiddenFloatCbProperty("amp", &UIGain::ampValue, &UIGain::setAmpValue); obj.addIntProperty("max", _("Maximum value"), 0, &UIGain::prop_max, _("Bounds")); obj.addIntProperty("min", _("Minimum value"), -60, &UIGain::prop_min, _("Bounds")); obj.setPropertyRange("max", -12, 12); - obj.setPropertyRange("min", -90, -30); + obj.setPropertyRange("min", -90, -15); + obj.setPropertyUnits(SYM_MAX, SYM_DB); + obj.setPropertyUnits(SYM_MIN, SYM_DB); obj.addBoolProperty("show_range", _("Show range"), true, &UIGain::prop_show_range, _("Misc")); obj.addBoolProperty("output_value", _("Output value"), false, &UIGain::prop_output_value, _("Main")); + obj.addBoolProperty("relative", _("Relative mode"), true, &UIGain::prop_relative_mode, _("Main")); + + obj.addProperty("midi_channel", _("MIDI channel"), 0, &UIGain::prop_midi_chn, "MIDI"); + obj.setPropertyRange("midi_channel", 0, 16); + obj.addProperty("midi_control", _("MIDI control"), 0, &UIGain::prop_midi_ctl, "MIDI"); + obj.setPropertyRange("midi_control", 0, 128); + obj.addProperty("midi_pickup", _("MIDI pickup"), true, &UIGain::prop_pickup_midi, "MIDI"); obj.setDefaultSize(15, 120); obj.usePresets(); obj.useBang(); - obj.useMouseEvents(UI_MOUSE_DOWN | UI_MOUSE_DRAG | UI_MOUSE_DBL_CLICK); + obj.useMouseEvents(UI_MOUSE_DOWN | UI_MOUSE_DRAG | UI_MOUSE_DBL_CLICK | UI_MOUSE_WHEEL); + obj.outputMouseEvents(MouseEventsOutput::DEFAULT_OFF); + obj.usePopup(); + obj.addMethod("+", &UIGain::m_plus); obj.addMethod("-", &UIGain::m_minus); obj.addMethod("++", &UIGain::m_inc); diff --git a/ceammc/ext/src/ui/ui_gain.h b/ceammc/ext/src/ui/ui_gain.h index 352c72fce6..3556aa6a5d 100644 --- a/ceammc/ext/src/ui/ui_gain.h +++ b/ceammc/ext/src/ui/ui_gain.h @@ -16,18 +16,39 @@ #include "ceammc_control.h" #include "ceammc_object.h" +#include "ceammc_proxy.h" #include "ceammc_ui_dsp_object.h" +#include +#include + using namespace ceammc; class UIGain : public UIDspObject { -private: + PdListProxy midi_proxy_; UIFont font_; UITextLayout txt_max_; UITextLayout txt_min_; - float knob_pos_; + t_pt click_pos_; + float knob_phase_; bool is_horizontal_; + enum ControlState { + NORMAL = 0, + LEARN, + PICKUP + }; + + enum PickValueState { + PICK_VALUE_START = 0, + PICK_VALUE_LESS = -1, + PICK_VALUE_MORE = 1, + PICK_VALUE_DONE = 2 + }; + + ControlState control_state_; + PickValueState pick_value_state_; + protected: SmoothControlValue smooth_; t_rgba prop_color_knob; @@ -36,6 +57,12 @@ class UIGain : public UIDspObject { int prop_min; int prop_output_value; int prop_show_range; + int prop_relative_mode; + int prop_midi_chn; + int prop_midi_ctl; + int prop_pickup_midi; + + void initHorizontal(); public: UIGain(); @@ -51,6 +78,7 @@ class UIGain : public UIDspObject { void onMouseDown(t_object* view, const t_pt& pt, const t_pt& abs_pt, long modifiers); void onMouseDrag(t_object* view, const t_pt& pt, long modifiers); void onDblClick(t_object* view, const t_pt& pt, long modifiers); + void onMouseWheel(const t_pt& pt, long modifiers, float delta); t_float dbValue() const; t_float ampValue() const; @@ -70,6 +98,13 @@ class UIGain : public UIDspObject { private: void updateLabels(); + void onMidiCtrl(const AtomList& l); + void doOutput(); + void updateIndicators(); + bool isMidiMatched(int num, int ch) const; + void printPickupInfo(); + void gotoNormalState(); + void finishPickup(); }; void setup_ui_gain(); diff --git a/ceammc/ext/src/ui/ui_gain2.cpp b/ceammc/ext/src/ui/ui_gain2.cpp index fa2ee5e38f..3b566298a4 100644 --- a/ceammc/ext/src/ui/ui_gain2.cpp +++ b/ceammc/ext/src/ui/ui_gain2.cpp @@ -12,7 +12,7 @@ * this file belongs to. *****************************************************************************/ #include "ui_gain2.h" -#include "ceammc_dsp_ui.h" +#include "ceammc_ui.h" UIGain2::UIGain2() { @@ -21,6 +21,10 @@ UIGain2::UIGain2() void UIGain2::init(t_symbol* name, const AtomList& args, bool usePresets) { UIDspObject::init(name, args, usePresets); + + if (name == gensym("ui.hgain2~")) + initHorizontal(); + dspSetup(2, 2); } @@ -40,24 +44,42 @@ void UIGain2::dspProcess(t_sample** ins, long n_ins, t_sample** outs, long n_out void UIGain2::setup() { - UIDspFactory obj("ui.gain2~"); + static t_symbol* SYM_DB = gensym("db"); + static t_symbol* SYM_MAX = gensym("max"); + static t_symbol* SYM_MIN = gensym("min"); + + UIObjectFactory obj("ui.gain2~"); + obj.addAlias("ui.vgain2~"); + obj.addAlias("ui.hgain2~"); - obj.addProperty("knob_color", _("Knob Color"), DEFAULT_ACTIVE_COLOR, &UIGain2::prop_color_knob); - obj.addProperty("db", &UIGain2::dbValue, &UIGain2::setDbValue); + obj.addColorProperty("knob_color", _("Knob Color"), DEFAULT_ACTIVE_COLOR, &UIGain2::prop_color_knob); + obj.addHiddenFloatCbProperty("db", &UIGain2::dbValue, &UIGain2::setDbValue); obj.setPropertyDefaultValue("db", "-60"); - obj.addProperty("amp", &UIGain2::ampValue, &UIGain2::setAmpValue); + obj.setPropertyUnits(SYM_DB, SYM_DB); + obj.addHiddenFloatCbProperty("amp", &UIGain2::ampValue, &UIGain2::setAmpValue); obj.addIntProperty("max", _("Maximum value"), 0, &UIGain2::prop_max, _("Bounds")); obj.addIntProperty("min", _("Minimum value"), -60, &UIGain2::prop_min, _("Bounds")); obj.setPropertyRange("max", -12, 12); - obj.setPropertyRange("min", -90, -30); + obj.setPropertyRange("min", -90, -15); + obj.setPropertyUnits(SYM_MAX, SYM_DB); + obj.setPropertyUnits(SYM_MIN, SYM_DB); obj.addBoolProperty("show_range", _("Show range"), true, &UIGain2::prop_show_range, _("Misc")); obj.addBoolProperty("output_value", _("Output value"), false, &UIGain2::prop_output_value, _("Main")); + obj.addBoolProperty("relative", _("Relative mode"), true, &UIGain2::prop_relative_mode, _("Main")); + + obj.addProperty("midi_channel", _("MIDI channel"), 0, &UIGain2::prop_midi_chn, "MIDI"); + obj.setPropertyRange("midi_channel", 0, 16); + obj.addProperty("midi_control", _("MIDI control"), 0, &UIGain2::prop_midi_ctl, "MIDI"); + obj.setPropertyRange("midi_control", 0, 128); + obj.addProperty("midi_pickup", _("MIDI pickup"), true, &UIGain2::prop_pickup_midi, "MIDI"); obj.setDefaultSize(15, 120); obj.usePresets(); obj.useBang(); obj.useMouseEvents(UI_MOUSE_DOWN | UI_MOUSE_DRAG | UI_MOUSE_DBL_CLICK); + obj.outputMouseEvents(MouseEventsOutput::DEFAULT_OFF); + obj.addMethod("+", &UIGain2::m_plus); obj.addMethod("-", &UIGain2::m_minus); obj.addMethod("++", &UIGain2::m_inc); diff --git a/ceammc/ext/src/ui/ui_icon.cpp b/ceammc/ext/src/ui/ui_icon.cpp index 1c4406808a..d1b19fcefc 100644 --- a/ceammc/ext/src/ui/ui_icon.cpp +++ b/ceammc/ext/src/ui/ui_icon.cpp @@ -62,7 +62,7 @@ UIIcon::UIIcon() , image_layer_(asEBox(), gensym("image_layer")) , image_(0) , current_(&icons_list[0]) - , prop_icon(gensym("default")) + , prop_icon(gensym("help")) , prop_mode(SYM_MODE_BUTTON) , prop_color_active(rgba_blue) , prop_size(24) @@ -289,7 +289,7 @@ void UIIcon::m_set(const AtomList& lst) void UIIcon::loadPreset(size_t idx) { - prop_icon = PresetStorage::instance().symbolValueAt(presetId(), idx, gensym("default")); + prop_icon = PresetStorage::instance().symbolValueAt(presetId(), idx, gensym("help")); updateIconProp(); } @@ -312,7 +312,7 @@ void UIIcon::setup() obj.setPropertyDefaultValue(PROP_BACKGROUND_COLOR, "1 1 1 1"); obj.setPropertyDefaultValue(PROP_BORDER_COLOR, "1 1 1 1"); - obj.addProperty("icon", _("Icon"), "default", &UIIcon::prop_icon, icons_string, _("Main")); + obj.addProperty("icon", _("Icon"), "help", &UIIcon::prop_icon, icons_string, _("Main")); obj.addPropertyIntMenu("icon_size", _("Size"), "24", &UIIcon::prop_size, "48 36 24 18", _("Basic")); obj.addProperty(PROP_ACTIVE_COLOR, _("Active Color"), DEFAULT_ACTIVE_COLOR, &UIIcon::prop_color_active); diff --git a/ceammc/ext/src/ui/ui_keyboard.cpp b/ceammc/ext/src/ui/ui_keyboard.cpp index 8efe58ac94..a16bc5143b 100644 --- a/ceammc/ext/src/ui/ui_keyboard.cpp +++ b/ceammc/ext/src/ui/ui_keyboard.cpp @@ -175,10 +175,53 @@ UIKeyboard::UIKeyboard() , mouse_pressed_(false) , prop_color_active_(rgba_black) , key_layer_(asEBox(), gensym("keys_layer")) - , popup_(false) { appendToLayerList(&key_layer_); createOutlet(); + + initPopupMenu("keyboard", + { { _("release all"), [this](const t_pt&) { resetAllNotes(); } }, + PopupMenuCallbacks::sep(), + { _("maj"), + [this](const t_pt&) { + releaseAllNotes(); + playChord({ 0, 4, 7 }); + redrawLayer(key_layer_); } }, + { _("min"), [this](const t_pt&) { + releaseAllNotes(); + playChord({ 0, 3, 7 }); + redrawLayer(key_layer_); + } }, + { _("aug"), [this](const t_pt&) { + releaseAllNotes(); + playChord({ 0, 4, 8 }); + redrawLayer(key_layer_); + } }, + { _("dim"), [this](const t_pt&) { + releaseAllNotes(); + playChord({ 0, 3, 6 }); + redrawLayer(key_layer_); + } }, + { _("7"), [this](const t_pt&) { + releaseAllNotes(); + playChord({ 0, 4, 7, 10 }); + redrawLayer(key_layer_); + } }, + { _("maj7"), [this](const t_pt&) { + releaseAllNotes(); + playChord({ 0, 4, 7, 11 }); + redrawLayer(key_layer_); + } }, + { _("min7"), [this](const t_pt&) { + releaseAllNotes(); + playChord({ 0, 3, 7, 10 }); + redrawLayer(key_layer_); + } }, + { _("aug7"), [this](const t_pt&) { + releaseAllNotes(); + playChord({ 0, 4, 8, 10 }); + redrawLayer(key_layer_); + } } }); } bool UIKeyboard::okSize(t_rect* newrect) @@ -205,6 +248,12 @@ void UIKeyboard::releaseAllNotes() } sustained_keys_.clear(); +} + +void UIKeyboard::resetAllNotes() +{ + releaseAllNotes(); + velocity_ = 0; current_key_ = -1; @@ -213,30 +262,9 @@ void UIKeyboard::releaseAllNotes() void UIKeyboard::onMouseDown(t_object* view, const t_pt& pt, const t_pt& abs_pt, long modifiers) { - if (modifiers & EMOD_RIGHT) { - UIPopupMenu menu(asEObj(), "popup", abs_pt); - menu.addItem(_("release all")); - menu.addSeparator(); - menu.addItem("maj"); // 1 - menu.addItem("min"); // 2 - menu.addItem("aug"); // 3 - menu.addItem("dim"); // 4 - menu.addItem("7"); // 5 - menu.addItem("maj7"); // 6 - menu.addItem("min7"); // 7 - menu.addItem("aug7"); // 8 - - velocity_ = std::min(127, int(pt.y / height() * 100.f) + 27); - current_key_ = findPressedKey(pt); - popup_ = true; - return; - } - // release all notes - if (modifiers & EMOD_ALT) { - releaseAllNotes(); - return; - } + if (modifiers & EMOD_ALT) + return resetAllNotes(); // calc velocity velocity_ = std::min(127, int(pt.y / height() * 100.f) + 27); @@ -267,9 +295,6 @@ void UIKeyboard::onMouseDown(t_object* view, const t_pt& pt, const t_pt& abs_pt, void UIKeyboard::onMouseUp(t_object* view, const t_pt& pt, long modifiers) { - if(popup_) - return; - if (current_key_ == -1) return; @@ -288,9 +313,6 @@ void UIKeyboard::onMouseMove(t_object* view, const t_pt& pt, long modifiers) void UIKeyboard::onMouseLeave(t_object* view, const t_pt& pt, long modifiers) { - if(popup_) - return; - current_key_ = -1; mouse_pressed_ = false; @@ -320,52 +342,12 @@ void UIKeyboard::onMouseDrag(t_object* view, const t_pt& pt, long modifiers) } } -void UIKeyboard::onPopup(t_symbol* menu_name, long item_idx) +void UIKeyboard::showPopup(const t_pt& pt, const t_pt& abs_pt) { - if (menu_name == gensym("popup")) { - switch (item_idx) { - case 0: - releaseAllNotes(); - break; - case 1: { - playChord({ 0, 4, 7 }); - redrawLayer(key_layer_); - } break; - case 2: { - playChord({ 0, 3, 7 }); - redrawLayer(key_layer_); - } break; - case 3: { - playChord({ 0, 4, 8 }); - redrawLayer(key_layer_); - } break; - case 4: { - playChord({ 0, 3, 6 }); - redrawLayer(key_layer_); - } break; - case 5: { - playChord({ 0, 4, 7, 10 }); - redrawLayer(key_layer_); - } break; - case 6: { - playChord({ 0, 4, 7, 11 }); - redrawLayer(key_layer_); - } break; - case 7: { - playChord({ 0, 3, 7, 10 }); - redrawLayer(key_layer_); - } break; - case 8: { - playChord({ 0, 4, 8, 10 }); - redrawLayer(key_layer_); - } break; - default: - UI_ERR << "popup menu unknown index: " << item_idx; - break; - } - } + UIPopupMenu menu(asEObj(), popup_menu_list_.front(), abs_pt, pt); - popup_ = false; + velocity_ = std::min(127, int(pt.y / height() * 100.f) + 27); + current_key_ = findPressedKey(pt); } void UIKeyboard::playChord(const std::unordered_set& keys) @@ -421,6 +403,7 @@ void UIKeyboard::setup() obj.hideLabelInner(); obj.useBang(); + obj.usePopup(); obj.useMouseEvents(UI_MOUSE_DOWN | UI_MOUSE_DRAG | UI_MOUSE_MOVE | UI_MOUSE_LEAVE | UI_MOUSE_WHEEL | UI_MOUSE_UP); diff --git a/ceammc/ext/src/ui/ui_keyboard.h b/ceammc/ext/src/ui/ui_keyboard.h index b4edef65d1..9766da901b 100644 --- a/ceammc/ext/src/ui/ui_keyboard.h +++ b/ceammc/ext/src/ui/ui_keyboard.h @@ -16,7 +16,6 @@ class UIKeyboard : public UIObject { t_rgba prop_color_active_; std::unordered_set sustained_keys_; UILayer key_layer_; - bool popup_; public: UIKeyboard(); @@ -29,7 +28,7 @@ class UIKeyboard : public UIObject { void onMouseMove(t_object* view, const t_pt& pt, long modifiers); void onMouseLeave(t_object* view, const t_pt& pt, long modifiers); void onMouseDrag(t_object* view, const t_pt& pt, long modifiers); - void onPopup(t_symbol* menu_name, long item_idx); + void showPopup(const t_pt& pt, const t_pt& abs_pt); int findPressedKey(const t_pt& pt) const; @@ -43,6 +42,7 @@ class UIKeyboard : public UIObject { void drawBackground(); void drawActive(); void releaseAllNotes(); + void resetAllNotes(); }; /** diff --git a/ceammc/ext/src/ui/ui_knob.cpp b/ceammc/ext/src/ui/ui_knob.cpp index bc9003c302..ef5fed6f58 100644 --- a/ceammc/ext/src/ui/ui_knob.cpp +++ b/ceammc/ext/src/ui/ui_knob.cpp @@ -20,6 +20,8 @@ static t_symbol* SYM_MUL; static t_symbol* SYM_DIV; static t_symbol* SYM_INC; static t_symbol* SYM_DEC; +static t_symbol* SYM_POPUP_LINEAR; +static t_symbol* SYM_POPUP_LOG; static const int KNOB_MIN_SIZE = 20; static t_rgba BIND_MIDI_COLOR = hex_to_rgba("#FF3377"); @@ -51,12 +53,16 @@ static void draw_knob_line(UIPainter& p, float cx, float cy, float r, float angl void UIKnob::setup() { + UISingleValue::setup(); + UIObjectFactory obj("ui.knob", EBOX_GROWLINK); obj.useBang(); obj.useFloat(); obj.usePresets(); - obj.useMouseEvents(UI_MOUSE_DOWN | UI_MOUSE_DRAG | UI_MOUSE_DBL_CLICK); + obj.usePopup(); + obj.useMouseEvents(UI_MOUSE_DOWN | UI_MOUSE_UP | UI_MOUSE_DRAG | UI_MOUSE_DBL_CLICK | UI_MOUSE_WHEEL); + obj.outputMouseEvents(MouseEventsOutput::DEFAULT_OFF); obj.addMethod("+", &UISingleValue::m_plus); obj.addMethod("-", &UISingleValue::m_minus); @@ -74,14 +80,16 @@ void UIKnob::setup() obj.addProperty("min", _("Minimum Value"), 0, &UISingleValue::prop_min, "Bounds"); obj.addProperty("max", _("Maximum Value"), 1, &UISingleValue::prop_max, "Bounds"); obj.addProperty("show_range", _("Show range"), false, &UIKnob::show_range_); + obj.addProperty("scale", _("Scale Mode"), "linear", &UISingleValue::prop_scale, "linear log", "Main"); + obj.addProperty("active_scale", _("Draw active scale"), false, &UIKnob::draw_active_scale_); obj.addProperty("midi_channel", _("MIDI channel"), 0, &UISingleValue::prop_midi_chn, "MIDI"); obj.setPropertyRange("midi_channel", 0, 16); obj.addProperty("midi_control", _("MIDI control"), 0, &UISingleValue::prop_midi_ctl, "MIDI"); obj.setPropertyRange("midi_control", 0, 128); - obj.addProperty("midi_pickup", _("MIDI pickup"), true, &UISingleValue::prop_midi_pickup, "MIDI"); + obj.addProperty("midi_pickup", _("MIDI pickup"), true, &UISingleValue::prop_pickup_midi, "MIDI"); - obj.addProperty("value", &UISingleValue::realValue, &UISingleValue::setRealValue); + obj.addProperty("value", &UISingleValue::value, &UISingleValue::setValue); } UIKnob::UIKnob() @@ -95,6 +103,11 @@ UIKnob::UIKnob() { click_pos_.x = 0; click_pos_.y = 0; + + initPopupMenu("knob", + { { _("min"), [this](const t_pt&) { onFloat(prop_min); } }, + { _("center"), [this](const t_pt&) { onFloat(convert::lin2lin(0.5, 0, 1, prop_min, prop_max)); } }, + { _("max"), [this](const t_pt&) { onFloat(prop_max); } } }); } void UIKnob::paint() @@ -131,7 +144,7 @@ void UIKnob::paint() const float arc_angle_offset = -(EPD_PI2 + (1 - arc_scale) * EPD_PI); const float arc_begin = arc_angle_offset; const float arc_end = arc_full + arc_angle_offset; - const float value_angle = prop_value * arc_full + arc_angle_offset; + const float value_angle = knobPhase() * arc_full + arc_angle_offset; // adjust knob float line_width = int(r.height / 20) + 1; @@ -166,10 +179,18 @@ void UIKnob::okSize(t_rect* newrect) newrect->height = pd_clip_min(newrect->height, KNOB_MIN_SIZE); } -void UIKnob::onMouseDrag(t_object*, const t_pt& pt, long) +void UIKnob::onMouseUp(t_object* view, const t_pt& pt, long modifiers) +{ + output(); +} + +void UIKnob::onMouseDrag(t_object*, const t_pt& pt, long modifiers) { t_float delta = (click_pos_.y - pt.y) / height(); - setValue(value() + delta); + if (modifiers & EMOD_SHIFT) + delta *= 0.1; + + setKnobPhase(knobPhase() + delta); click_pos_ = pt; redrawKnob(); output(); @@ -177,36 +198,25 @@ void UIKnob::onMouseDrag(t_object*, const t_pt& pt, long) void UIKnob::onMouseDown(t_object*, const t_pt& pt, const t_pt& abs_pt, long modifiers) { - if (modifiers & EMOD_RIGHT) { - UIPopupMenu menu(asEObj(), "popup", abs_pt); - menu.addItem(_("min")); - menu.addItem(_("center")); - menu.addItem(_("max")); - return; - } - click_pos_ = pt; } -void UIKnob::onPopup(t_symbol* menu_name, long item_idx) +void UIKnob::onMouseWheel(const t_pt& pt, long modifiers, double delta) { - if (menu_name != gensym("popup")) - return; - - switch (item_idx) { - case 0: - onFloat(prop_min); - break; - case 1: - onFloat(convert::lin2lin(0.5, 0, 1, prop_min, prop_max)); - break; - case 2: - onFloat(prop_max); - break; - default: - UI_ERR << "unknown popup menu index: " << item_idx; - break; - } + float k = 0.01; + if (modifiers & EMOD_SHIFT) + k *= 0.1; + + setKnobPhase(knobPhase() + delta * k); + redrawKnob(); + output(); +} + +void UIKnob::showPopup(const t_pt& pt, const t_pt& abs_pt) +{ + UIPopupMenu menu(asEObj(), popup_menu_list_.front(), abs_pt, pt); + if (scaleMode() != LINEAR) + menu.disable(_("center")); } void setup_ui_knob() @@ -218,5 +228,8 @@ void setup_ui_knob() SYM_INC = gensym("++"); SYM_DEC = gensym("--"); + SYM_POPUP_LINEAR = gensym("popup_lin"); + SYM_POPUP_LOG = gensym("popup_log"); + UIKnob::setup(); } diff --git a/ceammc/ext/src/ui/ui_knob.h b/ceammc/ext/src/ui/ui_knob.h index e31f8ef202..0eebcf3ed1 100644 --- a/ceammc/ext/src/ui/ui_knob.h +++ b/ceammc/ext/src/ui/ui_knob.h @@ -25,9 +25,11 @@ class UIKnob : public UISingleValue { void paint(); void okSize(t_rect* newrect); - void onMouseDrag(t_object*, const t_pt& pt, long); + void onMouseUp(t_object* view, const t_pt& pt, long modifiers); + void onMouseDrag(t_object*, const t_pt& pt, long modifiers); void onMouseDown(t_object*, const t_pt& pt, const t_pt& abs_pt, long modifiers); - void onPopup(t_symbol* menu_name, long item_idx); + void onMouseWheel(const t_pt& pt, long modifiers, double delta); + void showPopup(const t_pt& pt, const t_pt& abs_pt); }; void setup_ui_knob(); diff --git a/ceammc/ext/src/ui/ui_link_tcl.h b/ceammc/ext/src/ui/ui_link_tcl.h index b9cc0cfe65..00b465babb 100644 --- a/ceammc/ext/src/ui/ui_link_tcl.h +++ b/ceammc/ext/src/ui/ui_link_tcl.h @@ -1,42 +1,44 @@ /* This is autogenerated source file. Do not edit! */ #ifndef uilink_tcl_init_h #define uilink_tcl_init_h -#include +#include "m_pd.h" void uilink_tcl_init() { - sys_gui("proc ceammclink_open {filename dir} {\n"); - sys_gui("if {[string first \"://\" $filename] > -1} {\n"); - sys_gui("menu_openfile $filename\n"); - sys_gui("} elseif {[file pathtype $filename] eq \"absolute\"} {\n"); - sys_gui("if {[file extension $filename] eq \".pd\"} {\n"); - sys_gui("set dir [file dirname $filename]\n"); - sys_gui("set name [file tail $filename]\n"); - sys_gui("menu_doc_open $dir $name\n"); - sys_gui("} else {\n"); - sys_gui("menu_openfile $filename\n"); - sys_gui("}\n"); - sys_gui("} elseif {[file exists [file join $dir $filename]]} {\n"); - sys_gui("set fullpath [file normalize [file join $dir $filename]]\n"); - sys_gui("set dir [file dirname $fullpath]\n"); - sys_gui("set filename [file tail $fullpath]\n"); - sys_gui("menu_doc_open $dir $filename\n"); - sys_gui("} elseif {[file exists [file join $::sys_libdir doc 5.reference $filename]]} {\n"); - sys_gui("# search in core doc dir\n"); - sys_gui("set fullpath [file normalize [file join $::sys_libdir doc 5.reference $filename]]\n"); - sys_gui("set dir [file dirname $fullpath]\n"); - sys_gui("set filename [file tail $fullpath]\n"); - sys_gui("menu_doc_open $dir $filename\n"); - sys_gui("} elseif {[file exists [file join $::sys_libdir extra $filename]]} {\n"); - sys_gui("# search in external doc dir\n"); - sys_gui("set fullpath [file normalize [file join $::sys_libdir extra $filename]]\n"); - sys_gui("set dir [file dirname $fullpath]\n"); - sys_gui("set filename [file tail $fullpath]\n"); - sys_gui("menu_doc_open $dir $filename\n"); - sys_gui("} else {\n"); - sys_gui("bell ; # beep on error to provide instant feedback\n"); - sys_gui("pdtk_post \"ERROR: file not found: $filename at $dir\"\n"); - sys_gui("pdtk_post \"\"\n"); - sys_gui("}\n"); - sys_gui("}\n"); + sys_gui( + "proc ceammclink_open {filename dir} {\n" + " if {[string first \"://\" $filename] > -1} {\n" + " menu_openfile $filename\n" + " } elseif {[file pathtype $filename] eq \"absolute\"} {\n" + " if {[file extension $filename] eq \".pd\"} {\n" + " set dir [file dirname $filename]\n" + " set name [file tail $filename]\n" + " menu_doc_open $dir $name \n" + " } else {\n" + " menu_openfile $filename\n" + " }\n" + " } elseif {[file exists [file join $dir $filename]]} {\n" + " set fullpath [file normalize [file join $dir $filename]]\n" + " set dir [file dirname $fullpath]\n" + " set filename [file tail $fullpath]\n" + " menu_doc_open $dir $filename\n" + " } elseif {[file exists [file join $::sys_libdir doc 5.reference $filename]]} {\n" + " # search in core doc dir\n" + " set fullpath [file normalize [file join $::sys_libdir doc 5.reference $filename]]\n" + " set dir [file dirname $fullpath]\n" + " set filename [file tail $fullpath]\n" + " menu_doc_open $dir $filename\n" + " } elseif {[file exists [file join $::sys_libdir extra $filename]]} {\n" + " # search in external doc dir\n" + " set fullpath [file normalize [file join $::sys_libdir extra $filename]]\n" + " set dir [file dirname $fullpath]\n" + " set filename [file tail $fullpath]\n" + " menu_doc_open $dir $filename\n" + " } else {\n" + " bell ; # beep on error to provide instant feedback\n" + " pdtk_post \"ERROR: file not found: $filename at $dir\"\n" + " pdtk_post \"\"\n" + " }\n" + "}\n" + ); } #endif diff --git a/ceammc/ext/src/ui/ui_matrix.cpp b/ceammc/ext/src/ui/ui_matrix.cpp index 1fdcfc0a9e..6d5ab63536 100644 --- a/ceammc/ext/src/ui/ui_matrix.cpp +++ b/ceammc/ext/src/ui/ui_matrix.cpp @@ -37,11 +37,55 @@ UIMatrix::UIMatrix() , mouse_current_row_(-1) , current_col_(-1) , current_row_(-1) - , cells_are_created_(false) { static_assert(std::numeric_limits::max() > UI_MAX_MATRIX_SIZE, "check cell index type"); createOutlet(); + + initPopupMenu("matrix", + { { _("reset"), [this](const t_pt&) { + m_reset(); + } }, + { _("reset row"), [this](const t_pt& pt) { + auto c = cellAt(pt); + if (c.second >= 0) { + setRow(c.second, AtomList::zeroes(prop_cols_)); + drawActiveCells(); + } + } }, + { _("reset column"), [this](const t_pt& pt) { + auto c = cellAt(pt); + if (c.first >= 0) { + setColumn(c.first, AtomList::zeroes(prop_rows_)); + drawActiveCells(); + } + } }, + { _("flip"), [this](const t_pt&) { + m_flip(AtomList()); + } }, + { _("flip row"), [this](const t_pt& pt) { + auto c = cellAt(pt); + if (c.second >= 0) { + flipRow(c.second); + drawActiveCells(); + } + } }, + { _("flip column"), [this](const t_pt& pt) { + auto c = cellAt(pt); + if (c.first >= 0) { + flipColumn(c.first); + drawActiveCells(); + } + } }, + { _("random"), [this](const t_pt&) { + m_random(); + } }, + PopupMenuCallbacks::sep(), { _("load"), [this](const t_pt&) { + eobj_read(asEObj(), gensym("read"), 0, nullptr); + } }, + { _("save"), [this](const t_pt&) { + eobj_write(asEObj(), gensym("write"), 0, nullptr); + } } }); } void UIMatrix::init(t_symbol* name, const AtomList& args, bool usePresets) @@ -236,7 +280,7 @@ void UIMatrix::okSize(t_rect* newrect) void UIMatrix::drawActiveCells() { - if (!asEBox() || !asEBox()->b_drawing_id) + if (!isVisible()) return; int color_inactive = rgba_to_hex_int(prop_color_background); @@ -299,40 +343,34 @@ void UIMatrix::createCells() const int color_inactive = rgba_to_hex_int(prop_color_background); const int color_active = rgba_to_hex_int(prop_color_active_); - if (!cells_are_created_ && asEBox() && asEBox()->b_drawing_id) { - int color_cell_border = rgba_to_hex_int(prop_color_border); - for (int inc_x = CELL_MARGIN, col = 0; col < prop_cols_; col++, inc_x += w) { - for (int inc_y = CELL_MARGIN, row = 0; row < prop_rows_; row++, inc_y += h) { - int x0 = inc_x + CELL_MARGIN; - int y0 = inc_y + CELL_MARGIN; - int x1 = inc_x + w - CELL_MARGIN; - int y1 = inc_y + h - CELL_MARGIN; - sys_vgui("%s create rectangle %d %d %d %d -outline #%6.6x -fill #%6.6x" - " -tags { " CELL_TAG_FMT " " ALL_CELLS_TAG_FMT " }\n", - asEBox()->b_drawing_id->s_name, - x0, y0, x1, y1, - color_cell_border, - cell(row, col) - ? color_active - : color_inactive, - asEBox(), - col, row, - asEBox()); - } + int color_cell_border = rgba_to_hex_int(prop_color_border); + for (int inc_x = CELL_MARGIN, col = 0; col < prop_cols_; col++, inc_x += w) { + for (int inc_y = CELL_MARGIN, row = 0; row < prop_rows_; row++, inc_y += h) { + int x0 = inc_x + CELL_MARGIN; + int y0 = inc_y + CELL_MARGIN; + int x1 = inc_x + w - CELL_MARGIN; + int y1 = inc_y + h - CELL_MARGIN; + sys_vgui("%s create rectangle %d %d %d %d -outline #%6.6x -fill #%6.6x" + " -tags { " CELL_TAG_FMT " " ALL_CELLS_TAG_FMT " }\n", + asEBox()->b_drawing_id->s_name, + x0, y0, x1, y1, + color_cell_border, + cell(row, col) + ? color_active + : color_inactive, + asEBox(), + col, row, + asEBox()); } - - cells_are_created_ = true; } } void UIMatrix::eraseCells() { - if (cells_are_created_ && asEBox() && asEBox()->b_drawing_id) { + if (isVisible()) { sys_vgui("%s delete " ALL_CELLS_TAG_FMT "\n", asEBox()->b_drawing_id->s_name, asEBox()); } - - cells_are_created_ = false; } std::pair UIMatrix::cellAt(const t_pt& pt) @@ -374,9 +412,19 @@ void UIMatrix::paint() p.drawRect(0, current_row_ * cell_h, r.width, cell_h); p.stroke(); } - - createCells(); } + + drawActiveCells(); +} + +void UIMatrix::create() +{ + createCells(); +} + +void UIMatrix::erase() +{ + eraseCells(); } void UIMatrix::outputCell(size_t row, size_t col) @@ -496,17 +544,6 @@ void UIMatrix::onList(const AtomList& lst) void UIMatrix::onMouseDown(t_object* view, const t_pt& pt, const t_pt& abs_pt, long modifiers) { - if (modifiers == EMOD_RIGHT) { - UIPopupMenu menu(asEObj(), "menu", abs_pt); - menu.addItem(_("reset")); - menu.addItem(_("flip")); - menu.addItem(_("random")); - menu.addSeparator(); - menu.addItem(_("load")); - menu.addItem(_("save")); - return; - } - auto c = cellAt(pt); mouse_current_col_ = c.first; mouse_current_row_ = c.second; @@ -758,7 +795,7 @@ void UIMatrix::updateCellsCoords() const int w = cellWidth(); const int h = cellHeight(); - if (cells_are_created_ && asEBox() && asEBox()->b_drawing_id) { + if (isVisible()) { for (int inc_x = CELL_MARGIN, col = 0; col < prop_cols_; col++, inc_x += w) { for (int inc_y = CELL_MARGIN, row = 0; row < prop_rows_; row++, inc_y += h) { @@ -786,30 +823,6 @@ void UIMatrix::onPropChange(t_symbol* prop_name) void UIMatrix::onZoom(t_float z) { bg_layer_.invalidate(); - cells_are_created_ = false; -} - -void UIMatrix::onPopup(t_symbol* menu_name, long item_idx) -{ - if (menu_name == gensym("menu")) { - switch (item_idx) { - case 0: - m_reset(); - break; - case 1: - m_flip(AtomList()); - break; - case 2: - m_random(); - break; - case 3: - eobj_read(asEObj(), gensym("read"), 0, nullptr); - break; - case 4: - eobj_write(asEObj(), gensym("write"), 0, nullptr); - break; - } - } } float UIMatrix::p_rows() const @@ -829,8 +842,11 @@ void UIMatrix::p_setRows(float n) prop_rows_ = num; matrix_.reset(); updateSize(); - eraseCells(); - createCells(); + + if (isVisible()) { + eraseCells(); + createCells(); + } } } @@ -841,8 +857,11 @@ void UIMatrix::p_setCols(float n) prop_cols_ = num; matrix_.reset(); updateSize(); - eraseCells(); - createCells(); + + if (isVisible()) { + eraseCells(); + createCells(); + } } } @@ -860,11 +879,13 @@ void UIMatrix::setup() obj.setDefaultSize(105, 53); obj.usePresets(); + obj.useDrawCallbacks(); obj.useList(); obj.useBang(); obj.useMouseEvents(UI_MOUSE_DOWN | UI_MOUSE_DRAG | UI_MOUSE_LEAVE); obj.readWrite(); obj.hideLabelInner(); + obj.usePopup(); obj.addProperty("rows", _("Rows"), 4, &UIMatrix::prop_rows_, _("Main")); obj.setPropertyRange("rows", 1, UI_MAX_MATRIX_SIZE); diff --git a/ceammc/ext/src/ui/ui_matrix.h b/ceammc/ext/src/ui/ui_matrix.h index c901e211aa..91225fa9a4 100644 --- a/ceammc/ext/src/ui/ui_matrix.h +++ b/ceammc/ext/src/ui/ui_matrix.h @@ -29,7 +29,6 @@ class UIMatrix : public UIObject { int mouse_current_row_; int current_col_; int current_row_; - bool cells_are_created_; public: UIMatrix(); @@ -53,6 +52,8 @@ class UIMatrix : public UIObject { void okSize(t_rect* newrect); void paint(); + void create(); + void erase(); void outputCell(size_t row, size_t column); void outputCell(const AtomList& args); void outputCol(size_t column); @@ -87,7 +88,6 @@ class UIMatrix : public UIObject { void onPropChange(t_symbol* prop_name); void onZoom(t_float z); - void onPopup(t_symbol* menu_name, long item_idx); public: static void setup(); diff --git a/ceammc/ext/src/ui/ui_menu.cpp b/ceammc/ext/src/ui/ui_menu.cpp index 176124e0a8..9586a33826 100644 --- a/ceammc/ext/src/ui/ui_menu.cpp +++ b/ceammc/ext/src/ui/ui_menu.cpp @@ -25,6 +25,7 @@ UIMenu::UIMenu() , prop_color_active(rgba_blue) , prop_max_item_length(100) , is_open_(false) + , item_height_(16) , current_idx_(-1) , hover_idx_(-1) { @@ -50,7 +51,7 @@ void UIMenu::okSize(t_rect* newrect) newrect->height += 4; #endif - item_height_ = close_height_ = newrect->height; + item_height_ = newrect->height; if (newrect->width < newrect->height * 2) newrect->width = newrect->height * 2; @@ -436,7 +437,7 @@ void UIMenu::syncLabels() t_efont* f = &asEBox()->b_font; for (size_t i = layouts_.size(); i < items_.size(); i++) { - layouts_.emplace_back(boost::make_shared(f, ColorRGBA::black(), + layouts_.emplace_back(std::make_shared(f, ColorRGBA::black(), ETEXT_LEFT, ETEXT_JLEFT, ETEXT_NOWRAP)); } diff --git a/ceammc/ext/src/ui/ui_menu.h b/ceammc/ext/src/ui/ui_menu.h index b874e259ab..5435b9283e 100644 --- a/ceammc/ext/src/ui/ui_menu.h +++ b/ceammc/ext/src/ui/ui_menu.h @@ -16,11 +16,11 @@ #include "ceammc_ui_object.h" -#include +#include using namespace ceammc; -typedef boost::shared_ptr TextPtr; +typedef std::shared_ptr TextPtr; typedef std::vector LabelList; class UIMenu : public UIObject { @@ -35,7 +35,6 @@ class UIMenu : public UIObject { private: bool is_open_; - int close_height_; int item_height_; int current_idx_; int hover_idx_; diff --git a/ceammc/ext/src/ui/ui_meter.cpp b/ceammc/ext/src/ui/ui_meter.cpp index 85c33b182e..fc3b2ff8f6 100644 --- a/ceammc/ext/src/ui/ui_meter.cpp +++ b/ceammc/ext/src/ui/ui_meter.cpp @@ -13,7 +13,7 @@ *****************************************************************************/ #include "ui_meter.h" #include "ceammc_convert.h" -#include "ceammc_dsp_ui.h" +#include "ceammc_ui.h" static const t_float MIN_DB_VALUE = -90; static const int NUM_LEDS = 13; @@ -35,6 +35,7 @@ UIMeter::UIMeter() , overload_(0) , rms_dbfs_(-90) , peak_dbfs_(-90) + , start_clock_(false) , is_horizontal_(false) { createOutlet(); @@ -200,19 +201,20 @@ void UIMeter::dspProcess(t_sample** ins, long n_ins, t_sample** outs, long n_out void UIMeter::setup() { - UIDspFactory obj("ui.meter~", EBOX_GROWINDI | EBOX_IGNORELOCKCLICK); + UIObjectFactory obj("ui.meter~", EBOX_GROWINDI | EBOX_IGNORELOCKCLICK); obj.addAlias("ui.m~"); obj.hideLabelInner(); obj.setDefaultSize(15, 120); - obj.addProperty("cold_color", _("Cold signal color"), "0 0.6 0 1", &UIMeter::prop_color_cold); - obj.addProperty("tepid_color", _("Tepid signal color"), "0.6 0.73 0 1", &UIMeter::prop_color_tepid); - obj.addProperty("warm_color", _("Warm signal color"), ".85 .85 0 1", &UIMeter::prop_color_warm); - obj.addProperty("hot_color", _("Hot signal color"), "1 0.6 0 1", &UIMeter::prop_color_hot); - obj.addProperty("over_color", _("Overload signal color"), "1 0 0 1", &UIMeter::prop_color_over); + obj.addColorProperty("cold_color", _("Cold signal color"), "0 0.6 0 1", &UIMeter::prop_color_cold); + obj.addColorProperty("tepid_color", _("Tepid signal color"), "0.6 0.73 0 1", &UIMeter::prop_color_tepid); + obj.addColorProperty("warm_color", _("Warm signal color"), ".85 .85 0 1", &UIMeter::prop_color_warm); + obj.addColorProperty("hot_color", _("Hot signal color"), "1 0.6 0 1", &UIMeter::prop_color_hot); + obj.addColorProperty("over_color", _("Overload signal color"), "1 0 0 1", &UIMeter::prop_color_over); obj.addIntProperty("interval", _("Refresh interval (ms)"), 50, &UIMeter::prop_interval_ms, _("Main")); + obj.setPropertyUnits("interval", "msec"); } void UIMeter::calc() diff --git a/ceammc/ext/src/ui/ui_mouse_filter.cpp b/ceammc/ext/src/ui/ui_mouse_filter.cpp new file mode 100644 index 0000000000..1b77af617e --- /dev/null +++ b/ceammc/ext/src/ui/ui_mouse_filter.cpp @@ -0,0 +1,95 @@ +/***************************************************************************** + * Copyright 2019 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#include "ui_mouse_filter.h" +#include "ceammc_factory.h" + +UIMouseFilter::UIMouseFilter(const PdArgs& args) + : BaseObject(args) + , closed_(true) +{ + auto makeProp = [this](const char* sym, const char* alias) { + BoolProperty* b = new BoolProperty(sym, false); + createProperty(b); + mouse_events_.push_back(b); + createProperty(new AliasProperty(alias, b, true)); + }; + + makeProp("@mouse_up", "@up"); + makeProp("@mouse_down", "@down"); + makeProp("@mouse_drag", "@drag"); + makeProp("@mouse_move", "@move"); + makeProp("@mouse_enter", "@enter"); + makeProp("@mouse_leave", "@leave"); + + createOutlet(); +} + +bool UIMouseFilter::processAnyProps(t_symbol* sel, const AtomList& lst) +{ + BoolProperty* p = dynamic_cast(property(sel)); + if (p) { + if (p->value()) + closed_ = !atomlistToValue(lst, false); + else + return true; + + } else if (!closed_) { + anyTo(0, sel, lst); + } + + return true; +} + +void UIMouseFilter::onBang() +{ + if (!closed_) + bangTo(0); +} + +void UIMouseFilter::onFloat(t_float f) +{ + if (!closed_) + floatTo(0, f); +} + +void UIMouseFilter::onSymbol(t_symbol* s) +{ + if (!closed_) + symbolTo(0, s); +} + +void UIMouseFilter::onList(const AtomList& l) +{ + if (!closed_) + listTo(0, l); +} + +void UIMouseFilter::onAny(t_symbol* s, const AtomList& l) +{ + if (!closed_) + anyTo(0, s, l); +} + +void UIMouseFilter::onData(const DataPtr& ptr) +{ + if (!closed_) + dataTo(0, ptr); +} + +void setup_ui_mouse_filter() +{ + ObjectFactory obj("ui.mouse_filter"); + obj.addAlias("ui.mf"); + obj.processData(); +} diff --git a/ceammc/ext/src/ui/ui_mouse_filter.h b/ceammc/ext/src/ui/ui_mouse_filter.h new file mode 100644 index 0000000000..8584aa8295 --- /dev/null +++ b/ceammc/ext/src/ui/ui_mouse_filter.h @@ -0,0 +1,39 @@ +/***************************************************************************** + * Copyright 2019 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#ifndef UI_MOUSE_FILTER_H +#define UI_MOUSE_FILTER_H + +#include "ceammc_object.h" +using namespace ceammc; + +class UIMouseFilter : public BaseObject { + std::vector mouse_events_; + bool closed_; + +public: + UIMouseFilter(const PdArgs& args); + + bool processAnyProps(t_symbol* sel, const AtomList& lst) final; + + void onBang() final; + void onFloat(t_float f) final; + void onSymbol(t_symbol* s) final; + void onList(const AtomList& l) final; + void onAny(t_symbol* s, const AtomList& l) final; + void onData(const DataPtr& ptr); +}; + +void setup_ui_mouse_filter(); + +#endif // UI_MOUSE_FILTER_H diff --git a/ceammc/ext/src/ui/ui_mouse_route.cpp b/ceammc/ext/src/ui/ui_mouse_route.cpp new file mode 100644 index 0000000000..de454dae99 --- /dev/null +++ b/ceammc/ext/src/ui/ui_mouse_route.cpp @@ -0,0 +1,137 @@ +/***************************************************************************** + * Copyright 2019 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#include "ui_mouse_route.h" +#include "ceammc_factory.h" + +#include + +UIMouseRoute::UIMouseRoute(const PdArgs& args) + : BaseObject(args) + , index_(-1) +{ + static t_symbol* SYM_PROP_UP = gensym("@up"); + static t_symbol* SYM_PROP_DOWN = gensym("@down"); + static t_symbol* SYM_PROP_DRAG = gensym("@drag"); + static t_symbol* SYM_PROP_MOVE = gensym("@move"); + static t_symbol* SYM_PROP_ENTER = gensym("@enter"); + static t_symbol* SYM_PROP_LEAVE = gensym("@leave"); + static t_symbol* SYM_FULL_PROP_UP = gensym("@mouse_up"); + static t_symbol* SYM_FULL_PROP_DOWN = gensym("@mouse_down"); + static t_symbol* SYM_FULL_PROP_DRAG = gensym("@mouse_drag"); + static t_symbol* SYM_FULL_PROP_MOVE = gensym("@mouse_move"); + static t_symbol* SYM_FULL_PROP_ENTER = gensym("@mouse_enter"); + static t_symbol* SYM_FULL_PROP_LEAVE = gensym("@mouse_leave"); + static const std::array ALL_PROPS { SYM_PROP_UP, SYM_PROP_DOWN, SYM_PROP_DRAG, SYM_PROP_MOVE, SYM_PROP_ENTER, SYM_PROP_LEAVE }; + static const std::array ALL_FULL_PROPS { SYM_FULL_PROP_UP, SYM_FULL_PROP_DOWN, SYM_FULL_PROP_DRAG, SYM_FULL_PROP_MOVE, SYM_FULL_PROP_ENTER, SYM_FULL_PROP_LEAVE }; + + for (size_t i = 0; i < ALL_PROPS.size(); i++) { + BoolProperty* b = new BoolProperty(ALL_FULL_PROPS[i]->s_name, false); + createProperty(b); + createProperty(new AliasProperty(ALL_PROPS[i]->s_name, b, true)); + } + + auto toProp = [this](t_symbol* s) { + auto it = std::find(ALL_PROPS.begin(), ALL_PROPS.end(), s); + return (it == ALL_PROPS.end()) ? nullptr : ALL_FULL_PROPS[std::distance(ALL_PROPS.begin(), it)]; + }; + + for (const Atom& a : args.args) { + if (!a.isProperty()) { + OBJ_ERR << "not a property: " << a; + continue; + } + + // duplication check + auto it = std::find(mouse_events_.begin(), mouse_events_.end(), a.asSymbol()); + if (it != mouse_events_.end()) { + OBJ_ERR << "property is duplicated: " << a; + continue; + } + + auto p = toProp(a.asSymbol()); + if (p) { + mouse_events_.push_back(p); + createOutlet(); + } else { + OBJ_ERR << "unknown property: " << a; + + Error err(this); + err << "supported props are: "; + for (auto pp : ALL_PROPS) + err << pp->s_name << " "; + } + } +} + +bool UIMouseRoute::processAnyProps(t_symbol* sel, const AtomList& lst) +{ + auto it = std::find(mouse_events_.begin(), mouse_events_.end(), sel); + if (it != mouse_events_.end()) { + if (!atomlistToValue(lst, false)) + index_ = -1; + else + index_ = std::distance(mouse_events_.begin(), it); + } else { + return false; + } + + return true; +} + +void UIMouseRoute::parseProperties() +{ +} + +void UIMouseRoute::onBang() +{ + if (index_ >= 0) + bangTo(index_); +} + +void UIMouseRoute::onFloat(t_float f) +{ + if (index_ >= 0) + floatTo(index_, f); +} + +void UIMouseRoute::onSymbol(t_symbol* s) +{ + if (index_ >= 0) + symbolTo(index_, s); +} + +void UIMouseRoute::onList(const AtomList& l) +{ + if (index_ >= 0) + listTo(index_, l); +} + +void UIMouseRoute::onAny(t_symbol* s, const AtomList& l) +{ + if (index_ >= 0) + anyTo(index_, s, l); +} + +void UIMouseRoute::onData(const DataPtr& ptr) +{ + if (index_ >= 0) + dataTo(index_, ptr); +} + +void setup_ui_mouse_route() +{ + ObjectFactory obj("ui.mouse_route"); + obj.addAlias("ui.mr"); + obj.processData(); +} diff --git a/ceammc/ext/src/ui/ui_mouse_route.h b/ceammc/ext/src/ui/ui_mouse_route.h new file mode 100644 index 0000000000..e0103a7bca --- /dev/null +++ b/ceammc/ext/src/ui/ui_mouse_route.h @@ -0,0 +1,40 @@ +/***************************************************************************** + * Copyright 2019 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#ifndef UI_MOUSE_ROUTE_H +#define UI_MOUSE_ROUTE_H + +#include "ceammc_object.h" +using namespace ceammc; + +class UIMouseRoute : public BaseObject { + std::vector mouse_events_; + int index_; + +public: + UIMouseRoute(const PdArgs& args); + + bool processAnyProps(t_symbol* sel, const AtomList& lst) final; + void parseProperties(); + + void onBang() final; + void onFloat(t_float f) final; + void onSymbol(t_symbol* s) final; + void onList(const AtomList& l) final; + void onAny(t_symbol* s, const AtomList& l) final; + void onData(const DataPtr& ptr); +}; + +void setup_ui_mouse_route(); + +#endif // UI_MOUSE_ROUTE_H diff --git a/ceammc/ext/src/ui/ui_number_tilde.cpp b/ceammc/ext/src/ui/ui_number_tilde.cpp index 1126a31d65..96f57f4323 100644 --- a/ceammc/ext/src/ui/ui_number_tilde.cpp +++ b/ceammc/ext/src/ui/ui_number_tilde.cpp @@ -12,7 +12,7 @@ * this file belongs to. *****************************************************************************/ #include "ui_number_tilde.h" -#include "ceammc_dsp_ui.h" +#include "ceammc_ui.h" UINumberTilde::UINumberTilde() : clock_(this, &UINumberTilde::updateTextValue) @@ -99,17 +99,18 @@ void UINumberTilde::dspProcess(t_sample** ins, long n_ins, t_sample** outs, long void UINumberTilde::setup() { - UIDspFactory obj("ui.number~", EBOX_GROWINDI | EBOX_IGNORELOCKCLICK); + UIObjectFactory obj("ui.number~", EBOX_GROWINDI | EBOX_IGNORELOCKCLICK); obj.addAlias("ui.n~"); obj.setDefaultSize(80, 15); obj.hideLabelInner(); - obj.addProperty(PROP_TEXT_COLOR, _("Text color"), "0.9 0.9 0.9 1", &UINumberTilde::prop_color_text); - obj.addProperty(PROP_ACTIVE_COLOR, _("Text color"), DEFAULT_ACTIVE_COLOR, &UINumberTilde::prop_color_active); + obj.addColorProperty(PROP_TEXT_COLOR, _("Text color"), "0.9 0.9 0.9 1", &UINumberTilde::prop_color_text); + obj.addColorProperty(PROP_ACTIVE_COLOR, _("Text color"), DEFAULT_ACTIVE_COLOR, &UINumberTilde::prop_color_active); obj.addIntProperty("decimal", _("Decimal precision"), 6, &UINumberTilde::prop_max_decimal, _("Main")); obj.setPropertyRange("precision", 0, 6); obj.addIntProperty("interval", _("Refresh interval (ms)"), 50, &UINumberTilde::prop_interval, _("Main")); obj.setPropertyRange("interval", 20, 1000); + obj.setPropertyUnits("interval", "msec"); obj.setPropertyDefaultValue(PROP_BACKGROUND_COLOR, "0.3 0.3 0.3 1"); obj.setPropertyDefaultValue(PROP_BORDER_COLOR, DEFAULT_TEXT_COLOR); diff --git a/ceammc/ext/src/ui/ui_polar.cpp b/ceammc/ext/src/ui/ui_polar.cpp new file mode 100644 index 0000000000..05f7af32e9 --- /dev/null +++ b/ceammc/ext/src/ui/ui_polar.cpp @@ -0,0 +1,522 @@ +/***************************************************************************** + * Copyright 2018 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ + +#include +#include + +#include "ceammc_atomlist.h" +#include "ceammc_convert.h" +#include "ceammc_format.h" + +#include "ceammc_convert.h" +#include "ceammc_preset.h" +#include "ceammc_ui.h" +#include "ui_polar.h" + +static const float KNOB_MIN_SIZE = 5.f; +static const float KNOB_MAX_SIZE = 20.f; +static const float KNOB_RATIO = 0.1f; +static const float KNOB_BORDER_WIDTH = 1.f; +static t_rgba KNOB_FILL = hex_to_rgba("#C0C0C0"); +static t_rgba KNOB_BORDER = hex_to_rgba("#707070"); +static t_rgba KNOB_FILL_ACTIVE = hex_to_rgba("#003070"); +static t_rgba KNOB_BORDER_ACTIVE = hex_to_rgba("#00C0FF"); +static t_rgba GUIDE_LINE_COLOR = hex_to_rgba("#00C0F0"); + +static t_symbol* SYM_POPUP_MAIN; + +enum Sides { + S_NORTH = 1, + S_EAST = 0, + S_SOUTH = 3, + S_WEST = 2 +}; + +static int sym2direction(t_symbol* s) +{ + switch (s->s_name[0]) { + case 'N': + return S_NORTH; + case 'W': + return S_WEST; + case 'S': + return S_SOUTH; + case 'E': + default: + return S_EAST; + } +} + +static double direction2radians(t_symbol* s) +{ + return sym2direction(s) * M_PI_2; +} + +static double direction2degrees(t_symbol* s) +{ + return sym2direction(s) * 90; +} + +UIPolar::UIPolar() + : txt_font(gensym(FONT_FAMILY), 7) + , txt_radius_(txt_font.font(), KNOB_BORDER, ETEXT_UP_LEFT, ETEXT_JLEFT) + , txt_angle_(txt_font.font(), KNOB_BORDER, ETEXT_UP_RIGHT, ETEXT_JRIGHT) + , knob_layer_(asEBox(), gensym("knob_layer")) + , radius_(0) + , angle_(0) + , prop_direction_(gensym("N")) + , mouse_down_(false) + , prop_clockwise_(1) + , prop_radians_(0) + , prop_positive_(0) +{ + createOutlet(); + + initPopupMenu("polar", + { { _("center"), [this](const t_pt&) { onList({ 0.f, 0.f }); } }, + { _("left center"), [this](const t_pt&) { onList({ 1, side2Angle(LEFT) }); } }, + { _("right center"), [this](const t_pt&) { onList({ 1, side2Angle(RIGHT) }); } }, + { _("top center"), [this](const t_pt&) { onList({ 1, side2Angle(TOP) }); } }, + { _("bottom center"), [this](const t_pt&) { onList({ 1, side2Angle(BOTTOM) }); } } }); +} + +float UIPolar::side2Angle(SideT side) +{ + float angle = 0; + + if (prop_radians_) + angle = side * M_PI_2; + else + angle = side * 90; + + if (prop_clockwise_) + angle = directionAngleOffset() - angle; + else + angle -= directionAngleOffset(); + + return angle; +} + +void UIPolar::okSize(t_rect* newrect) +{ + newrect->height = std::max(30, newrect->height); + newrect->width = std::max(30, newrect->width); +} + +void UIPolar::paint() +{ + paintBackground(); + paintKnob(); +} + +void UIPolar::onPropChange(t_symbol* prop_name) +{ + redrawAll(); +} + +void UIPolar::paintBackground() +{ + const t_rect bbox = rect(); + + UIPainter p = bg_layer_.painter(bbox); + if (!p) + return; + + p.setColor(prop_color_border); + const float r = bbox.width / 2; + const float c = r; + + const auto color = rgba_addContrast(prop_color_background, -0.1); + const auto color2 = rgba_addContrast(prop_color_background, 0.1); + + // draw circles + for (int i = 5; i > 0; i--) { + p.setLineWidth(3); + p.setColor(color2); + p.drawCircle(c, c, i * 0.2 * r); + p.strokePreserve(); + + p.setLineWidth(1); + p.setColor(color); + p.drawCircle(c, c, i * 0.2 * r); + p.stroke(); + } + + // draw angle lines + auto draw_fn = [&bbox, &p](float w) { + const float k = (1 - M_SQRT1_2) * bbox.width * 0.5; + p.setLineWidth(w); + p.drawLine(0, bbox.width * 0.5, bbox.width, bbox.width * 0.5); + p.drawLine(bbox.width * 0.5, 0, bbox.width * 0.5, bbox.height); + p.drawLine(k, k, bbox.width - k, bbox.height - k); + p.drawLine(k, bbox.height - k, bbox.width - k, k); + }; + + p.setColor(color2); + draw_fn(3); + p.setColor(color); + draw_fn(1); + + // draw 1, 0 line + p.setColor(KNOB_BORDER_ACTIVE); + p.setLineWidth(1); + switch (sym2direction(prop_direction_)) { + case S_NORTH: + p.drawLine(c, c, c, 0); + break; + case S_EAST: + p.drawLine(c, c, bbox.width, c); + break; + case S_SOUTH: + p.drawLine(c, c, c, bbox.height); + break; + case S_WEST: + default: + p.drawLine(c, c, 0, c); + break; + } +} + +void UIPolar::paintKnob() +{ + const t_rect bbox = rect(); + UIPainter p = knob_layer_.painter(bbox); + + if (p) { + float a = (prop_radians_) ? angle_ : convert::degree2rad(angle_); + if (prop_clockwise_) + a = -a; + + a += direction2radians(prop_direction_); + + auto xy = convert::polar2cartesian(radius_, a); + const float x = convert::lin2lin(xy.first, -1, 1, 0, bbox.width); + const float y = convert::lin2lin(xy.second, 1, -1, 0, bbox.height); + + // knob + const float knobsize = clip(KNOB_MIN_SIZE, KNOB_MAX_SIZE, + std::min(bbox.height, bbox.width) * KNOB_RATIO) + * 0.5; + + // knob border + p.setLineWidth(KNOB_BORDER_WIDTH); + p.setColor(mouse_down_ ? KNOB_FILL_ACTIVE : KNOB_FILL); + p.drawCircle(x, y, knobsize); + p.fillPreserve(); + p.setColor(mouse_down_ ? KNOB_BORDER_ACTIVE : KNOB_BORDER); + p.stroke(); + + char buf[60]; + snprintf(buf, sizeof(buf), "r:%.2f", radius_); + txt_radius_.set(buf, 2, 2, 100, 100); + p.drawText(txt_radius_); + snprintf(buf, sizeof(buf), "α:%.2f", realAngle()); + txt_angle_.set(buf, bbox.width - 2, 2, 100, 100); + p.drawText(txt_angle_); + } +} + +void UIPolar::onBang() +{ + output(); +} + +void UIPolar::onList(const AtomList& lst) +{ + if (lst.size() != 2) { + UI_ERR << "invalid list given: RAD ANG expected"; + return; + } + + if (!setRealValue(lst)) + return; + + redrawKnob(); + output(); +} + +void UIPolar::onMouseWheel(const t_pt& pt, long modifiers, double delta) +{ + float k = 0.1; + if (modifiers & EMOD_SHIFT) + k = 0.025; + + radius_ = clip(radius_ + delta * k); + redrawKnob(); + output(); +} + +void UIPolar::onMouseDown(t_object* view, const t_pt& pt, const t_pt& abs_pt, long modifiers) +{ + mouse_down_ = true; + setMouse(pt.x, pt.y, modifiers & EMOD_ALT); + redrawKnob(); + output(); +} + +void UIPolar::onMouseDrag(t_object* view, const t_pt& pt, long modifiers) +{ + setMouse(pt.x, pt.y, modifiers & EMOD_ALT); + redrawKnob(); + output(); +} + +void UIPolar::onMouseUp(t_object* view, const t_pt& pt, long modifiers) +{ + mouse_down_ = false; + setMouse(pt.x, pt.y, modifiers & EMOD_ALT); + redrawKnob(); + output(); +} + +void UIPolar::m_set(const AtomList& lst) +{ + if (lst.size() != 2) { + UI_ERR << "invalid list given: set RAD ANG expected"; + return; + } + + if (!setRealValue(lst)) + return; + + redrawKnob(); +} + +void UIPolar::m_polar(const AtomList& lst) +{ + if (lst.size() != 2) { + UI_ERR << "invalid list given: polar RAD ANG expected"; + return; + } + + m_set(lst); + output(); +} + +void UIPolar::m_cartesian(const AtomList& lst) +{ + if (lst.size() != 2) { + UI_ERR << "invalid list given: polar RAD ANG expected"; + return; + } + + t_float x, y; + if (!lst[0].getFloat(&x) || !lst[1].getFloat(&y)) { + UI_ERR << "invalid value: " << lst; + return; + } + + if (std::abs(x) > 1) { + UI_ERR << "clipping x value into [-1, 1] range"; + x = clip(x); + } + + if (std::abs(y) > 1) { + UI_ERR << "clipping y value into [-1, 1] range"; + y = clip(y); + } + + auto pos = convert::cartesian2polar(x, y); + + radius_ = clip(pos.first, 0, 1); + if (!prop_radians_) + angle_ = convert::rad2degree(pos.second); + + redrawKnob(); + output(); +} + +void UIPolar::m_rotate(t_float angle) +{ + angle_ += angle; + redrawKnob(); + output(); +} + +void UIPolar::loadPreset(size_t idx) +{ + setRealValue(PresetStorage::instance().listValueAt(presetId(), idx, AtomList(0.f, 0.f))); + redrawKnob(); + output(); +} + +void UIPolar::storePreset(size_t idx) +{ + PresetStorage::instance().setListValueAt(presetId(), idx, realValue()); +} + +bool UIPolar::setRealValue(const AtomList& lst) +{ + if (lst.size() != 2) + return false; + + float r, a; + if (!lst[0].getFloat(&r) || !lst[1].getFloat(&a)) { + UI_ERR << "invalid value: " << lst; + return false; + } + + if (r < 0 || r > 1) + UI_DBG << "clipping radius into range: [0-1]"; + + radius_ = clip(r, 0, 1); + angle_ = a; + return true; +} + +AtomList UIPolar::realValue() const +{ + return { radius_, realAngle() }; +} + +t_float UIPolar::realAngle() const +{ + if (prop_radians_) { + if (prop_positive_) + return wrapFloatMax(angle_, 2 * M_PI); + else + return wrapFloatMinMax(angle_, -M_PI, M_PI); + } else { + if (prop_positive_) + return wrapFloatMax(angle_, 360); + else + return wrapFloatMinMax(angle_, -180, 180); + } +} + +t_float UIPolar::realRadius() const +{ + return radius_; +} + +void UIPolar::output() +{ + AtomList v = realValue(); + listTo(0, v); + send(v); +} + +AtomList UIPolar::propRadius() const +{ + return AtomList(radius_); +} + +AtomList UIPolar::propAngle() const +{ + return AtomList(realAngle()); +} + +void UIPolar::propSetRadius(const AtomList& lst) +{ + float r; + + if (lst.empty() || !lst[0].getFloat(&r)) { + UI_ERR << "radius float value expected: " << lst; + return; + } + + radius_ = clip(r); + redrawKnob(); +} + +void UIPolar::propSetAngle(const AtomList& lst) +{ + float a; + + if (lst.empty() || !lst[0].getFloat(&a)) { + UI_ERR << "angle float value expected: " << lst; + return; + } + + angle_ = a; + redrawKnob(); +} + +void UIPolar::redrawKnob() +{ + knob_layer_.invalidate(); + redrawInnerArea(); +} + +void UIPolar::redrawAll() +{ + knob_layer_.invalidate(); + bg_layer_.invalidate(); + redraw(); +} + +double UIPolar::directionAngleOffset() const +{ + if (prop_radians_) + return direction2radians(prop_direction_); + else + return direction2degrees(prop_direction_); +} + +void UIPolar::setMouse(float x, float y, bool angleOnly) +{ + auto r = rect(); + auto p = convert::cartesian2polar( + convert::lin2lin(x, 0, r.width, -1, 1), + convert::lin2lin(y, 0, r.height, 1, -1)); + + if (!angleOnly) + radius_ = clip(p.first); + + float angle = p.second; + if (!prop_radians_) + angle = convert::rad2degree(angle); + + if (prop_clockwise_) + angle = directionAngleOffset() - angle; + else + angle -= directionAngleOffset(); + + angle_ = angle; +} + +void setup_ui_polar() +{ + UIPolar::setup(); +} + +void UIPolar::setup() +{ + SYM_POPUP_MAIN = gensym("main"); + + UIObjectFactory obj("ui.polar", EBOX_GROWLINK); + + obj.setDefaultSize(100, 100); + + obj.addProperty("radius", &UIPolar::propRadius, &UIPolar::propSetRadius); + obj.setPropertyRange("radius", 0, 1); + obj.addProperty("angle", &UIPolar::propAngle, &UIPolar::propSetAngle); + obj.addProperty("clockwise", _("Clockwise"), true, &UIPolar::prop_clockwise_, _("Main")); + obj.addProperty("radians", _("Use radians"), false, &UIPolar::prop_radians_, _("Main")); + obj.addProperty("positive", _("Positive output"), false, &UIPolar::prop_positive_, _("Main")); + obj.addProperty("direction", _("Direction"), "N", &UIPolar::prop_direction_, "N W S E", _("Main")); + + obj.usePresets(); + obj.useList(); + obj.useBang(); + obj.usePopup(); + + obj.useMouseEvents(UI_MOUSE_UP | UI_MOUSE_DOWN | UI_MOUSE_DRAG | UI_MOUSE_WHEEL); + obj.outputMouseEvents(MouseEventsOutput::DEFAULT_OFF); + + obj.addMethod("set", &UIPolar::m_set); + obj.addMethod("polar", &UIPolar::m_polar); + obj.addMethod("cartesian", &UIPolar::m_cartesian); + obj.addMethod("rotate", &UIPolar::m_rotate); +} diff --git a/ceammc/ext/src/ui/ui_polar.h b/ceammc/ext/src/ui/ui_polar.h new file mode 100644 index 0000000000..7a4cd15f59 --- /dev/null +++ b/ceammc/ext/src/ui/ui_polar.h @@ -0,0 +1,90 @@ +/***************************************************************************** + * Copyright 2018 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#ifndef UI_POLAR_H +#define UI_POLAR_H + +#include "ceammc_ui_object.h" + +using namespace ceammc; + +class UIPolar : public UIObject { + UIFont txt_font; + UITextLayout txt_radius_; + UITextLayout txt_angle_; + UILayer knob_layer_; + float radius_; + float angle_; + t_symbol* prop_direction_; + bool mouse_down_; + int prop_clockwise_; + int prop_radians_; + int prop_positive_; + + enum SideT { + RIGHT = 0, + TOP = 1, + LEFT = 2, + BOTTOM = 3 + }; + +public: + UIPolar(); + + void okSize(t_rect* newrect); + void paint(); + void onPropChange(t_symbol* prop_name); + void paintBackground(); + void paintKnob(); + + void onBang(); + void onList(const AtomList& lst); + void onMouseDown(t_object* view, const t_pt& pt, const t_pt& abs_pt, long modifiers); + void onMouseDrag(t_object* view, const t_pt& pt, long modifiers); + void onMouseUp(t_object* view, const t_pt& pt, long modifiers); + void onMouseWheel(const t_pt& pt, long modifiers, double delta); + + void m_set(const AtomList& lst); + void m_polar(const AtomList& lst); + void m_cartesian(const AtomList& lst); + void m_rotate(t_float angle); + void loadPreset(size_t idx); + void storePreset(size_t idx); + + bool setRealValue(const AtomList& lst); + AtomList realValue() const; + t_float realAngle() const; + t_float realRadius() const; + + void output(); + + AtomList propRadius() const; + AtomList propAngle() const; + void propSetRadius(const AtomList& lst); + void propSetAngle(const AtomList& lst); + +public: + static void setup(); + + void setMouse(float x, float y, bool angleOnly = false); + +private: + void redrawKnob(); + void redrawAll(); + double directionAngleOffset() const; + float side2Angle(SideT side); +}; + +void setup_ui_polar(); + +#endif // UI_POLAR_H diff --git a/ceammc/ext/src/ui/ui_preset.cpp b/ceammc/ext/src/ui/ui_preset.cpp index 7c8891eb43..6ab83b307e 100644 --- a/ceammc/ext/src/ui/ui_preset.cpp +++ b/ceammc/ext/src/ui/ui_preset.cpp @@ -16,6 +16,8 @@ #include "ceammc_preset.h" #include "ceammc_ui.h" +static t_symbol* SYM_POPUP; + UIPreset::UIPreset() : prop_color_text(rgba_black) , prop_color_empty(rgba_grey) @@ -25,6 +27,9 @@ UIPreset::UIPreset() , selected_index_(-1) , mouse_over_index_(-1) { + initPopupMenu("preset", + { { _("read"), [this](const t_pt&) {m_read(AtomList());} }, + { _("write"), [this](const t_pt&) { m_write(AtomList());} } }); } void UIPreset::init(t_symbol* name, const AtomList& args, bool usePresets) @@ -112,7 +117,6 @@ void UIPreset::paint() void UIPreset::onMouseDown(t_object* view, const t_pt& pt, const t_pt& abs_pt, long modifiers) { int index = buttonIndexAt(pt.x, pt.y); - if (index < 0 || index >= presets_.size()) return; @@ -185,13 +189,10 @@ AtomList UIPreset::propCurrent() const void UIPreset::setup() { - UIObjectFactory obj("ui.preset"); + SYM_POPUP = gensym("main"); -#ifdef __WIN32 - obj.setDefaultSize(102, 42); -#else + UIObjectFactory obj("ui.preset"); obj.setDefaultSize(102, 42); -#endif obj.hideProperty("send"); obj.hideLabelInner(); @@ -203,6 +204,7 @@ void UIPreset::setup() obj.addProperty("current", &UIPreset::propCurrent, 0); obj.useMouseEvents(UI_MOUSE_DOWN | UI_MOUSE_MOVE | UI_MOUSE_LEAVE); + obj.usePopup(); obj.addMethod(PresetStorage::SYM_PRESET_INDEX_ADD, &UIPreset::indexAdd); obj.addMethod(PresetStorage::SYM_PRESET_INDEX_REMOVE, &UIPreset::indexRemove); diff --git a/ceammc/ext/src/ui/ui_preset.h b/ceammc/ext/src/ui/ui_preset.h index db01a14bca..2a9cad2807 100644 --- a/ceammc/ext/src/ui/ui_preset.h +++ b/ceammc/ext/src/ui/ui_preset.h @@ -40,7 +40,7 @@ class UIPreset : public UIObject { void okSize(t_rect* newrect); void paint(); - void onMouseDown(t_object* view, const t_pt& pt, const t_pt &abs_pt, long modifiers); + void onMouseDown(t_object* view, const t_pt& pt, const t_pt& abs_pt, long modifiers); void onMouseMove(t_object* view, const t_pt& pt, long modifiers); void onMouseLeave(t_object* view, const t_pt& pt, long modifiers); diff --git a/ceammc/ext/src/ui/ui_radio.cpp b/ceammc/ext/src/ui/ui_radio.cpp index f18450cf82..acbac76fae 100644 --- a/ceammc/ext/src/ui/ui_radio.cpp +++ b/ceammc/ext/src/ui/ui_radio.cpp @@ -4,8 +4,12 @@ #include "ceammc_ui.h" #include +#include +#include static const int MAX_ITEMS = 128; +static const char* MENU_NAME_CHECKLIST = "checklist-menu"; +static t_symbol* SYM_PROP_NITEMS; void setup_ui_radio() { @@ -21,15 +25,31 @@ UIRadio::UIRadio() , items_layer_(asEBox(), gensym("items_layer")) { createOutlet(); + + initPopupMenu("checklist", + { { _("reset"), [this](const t_pt&) { if(prop_checklist_mode_) m_reset(); } }, + { _("flip"), [this](const t_pt&) { if(prop_checklist_mode_) m_flip(); } }, + { _("random"), [this](const t_pt&) { if(prop_checklist_mode_) m_random(); } } }); } void UIRadio::init(t_symbol* name, const AtomList& args, bool usePresets) { + static t_symbol* SYM_VRD = gensym("ui.vrd"); + static t_symbol* SYM_VRD_MULT = gensym("ui.vrd*"); + static t_symbol* SYM_HRD_MULT = gensym("ui.hrd*"); + static t_symbol* SYM_RADIO_MULT = gensym("ui.radio*"); + UIObject::init(name, args, usePresets); - if (name == gensym("ui.vrd")) + // check for vertical aliases and change orientation + if (name == SYM_VRD || name == SYM_VRD_MULT) std::swap(asEBox()->b_rect.width, asEBox()->b_rect.height); + // check checklist mode + if (name == SYM_VRD_MULT || name == SYM_HRD_MULT || name == SYM_RADIO_MULT) + setProperty(gensym("mode"), { 1 }); + + // has positional arguments int n = args.intAt(0, -1); if (n > 0) { prop_nitems_ = clip(n, 2, MAX_ITEMS); @@ -42,6 +62,30 @@ void UIRadio::init(t_symbol* name, const AtomList& args, bool usePresets) asEBox()->b_rect.width = dim2; asEBox()->b_rect.height = dim1; } + } else { + const size_t N = args.size(); + for (size_t i = 0; i < N; i++) { + const auto& a = args[i]; + if (!a.isProperty()) + continue; + + if (a.asSymbol() != SYM_PROP_NITEMS) + continue; + + size_t inext = i + 1; + if (inext >= N) + break; + + prop_nitems_ = clip(args[inext].asInt(0), 2, MAX_ITEMS); + int h = 15; + int w = ((h + 1) * prop_nitems_) - 1; + if (isVertical()) + std::swap(h, w); + + asEBox()->b_rect.width = w; + asEBox()->b_rect.height = h; + break; + } } } @@ -84,14 +128,24 @@ void UIRadio::onList(const AtomList& lst) redrawItems(); } +const int UIRadio::click2Cell(const t_pt& pt) +{ + auto r = rect(); + return isVertical() ? (pt.y / r.height * prop_nitems_) : (pt.x / r.width * prop_nitems_); +} + void UIRadio::onMouseDown(t_object*, const t_pt& pt, const t_pt& abs_pt, long mod) { - t_rect r = rect(); - const int idx = isVertical() ? (pt.y / r.height * prop_nitems_) : (pt.x / r.width * prop_nitems_); + const int idx = click2Cell(pt); if (idx >= 0 && idx < prop_nitems_) { if (prop_checklist_mode_) { - items_.flip(idx); + if (mod & EMOD_SHIFT) + items_.set(idx, true); + else if (mod & EMOD_ALT) + items_.set(idx, false); + else + items_.flip(idx); } else { setSingleValue(idx); items_.reset(); @@ -103,6 +157,26 @@ void UIRadio::onMouseDown(t_object*, const t_pt& pt, const t_pt& abs_pt, long mo } } +void UIRadio::onMouseDrag(t_object* view, const t_pt& pt, long mod) +{ + if (!prop_checklist_mode_) + return; + + const int idx = click2Cell(pt); + + if (0 <= idx && idx < prop_nitems_) { + if (mod & EMOD_SHIFT) + items_.set(idx, true); + else if (mod & EMOD_ALT) + items_.set(idx, false); + else + return; + + output(); + redrawItems(); + } +} + void UIRadio::onDblClick(t_object* view, const t_pt& pt, long modifiers) { t_canvas* c = reinterpret_cast(view); @@ -203,6 +277,25 @@ void UIRadio::m_next() } } +void UIRadio::m_random() +{ + auto seed = std::chrono::system_clock::now().time_since_epoch().count(); + std::default_random_engine gen(seed); + + if (prop_checklist_mode_) { + std::uniform_int_distribution dist(0, 1); + + for (int i = 0; i < prop_nitems_; i++) + items_.set(i, dist(gen)); + + output(); + redrawItems(); + } else { + std::uniform_int_distribution dist(0, prop_nitems_ - 1); + onFloat(dist(gen)); + } +} + void UIRadio::m_prev() { if (prop_checklist_mode_) { @@ -262,6 +355,12 @@ void UIRadio::storePreset(size_t idx) PresetStorage::instance().setFloatValueAt(presetId(), idx, singleValue()); } +void UIRadio::showPopup(const t_pt& pt, const t_pt& abs_pt) +{ + if (prop_checklist_mode_) + showPopupMenu("checklist", pt, abs_pt); +} + AtomList UIRadio::listValue() const { AtomList lst; @@ -344,10 +443,10 @@ void UIRadio::drawItems() if (items_[i]) { const int offset = i * (cell_size + zoom()); - const int x0 = offset + 1; - const int y0 = 1; - const int x1 = offset + cell_size - 1; - const int y1 = cell_size - 1; + const int x0 = 1; + const int y0 = offset + 1; + const int x1 = cell_size - 1; + const int y1 = offset + cell_size - 1; // draw cross p.drawLine(x0, y0, x1, y1); @@ -401,20 +500,20 @@ void UIRadio::okSize(t_rect* newrect) { assert(prop_nitems_ > 0); - if (isPatchLoading()) { - newrect->height = pd_clip_min(newrect->height, 8); - newrect->width = pd_clip_min(newrect->width, 8); + // if (isPatchLoading()) { + // newrect->height = pd_clip_min(newrect->height, 8); + // newrect->width = pd_clip_min(newrect->width, 8); + // } else { + if (isVertical()) { + const float box_size = pd_clip_min(static_cast(newrect->height / prop_nitems_), 8); + newrect->height = prop_nitems_ * (box_size + 1) - 1; + newrect->width = box_size; } else { - if (isVertical()) { - const float box_size = pd_clip_min(static_cast(newrect->height / prop_nitems_), 8); - newrect->height = prop_nitems_ * (box_size + 1) - 1; - newrect->width = box_size; - } else { - const float box_size = pd_clip_min(static_cast(newrect->width / prop_nitems_), 8); - newrect->width = prop_nitems_ * (box_size + 1) - 1; - newrect->height = box_size; - } + const float box_size = pd_clip_min(static_cast(newrect->width / prop_nitems_), 8); + newrect->width = prop_nitems_ * (box_size + 1) - 1; + newrect->height = box_size; } + // } } void UIRadio::redrawAll() @@ -437,15 +536,23 @@ void UIRadio::onPropChange(t_symbol* prop_name) void UIRadio::setup() { + SYM_PROP_NITEMS = gensym("@nitems"); + UIObjectFactory obj("ui.radio"); obj.addAlias("ui.hrd"); obj.addAlias("ui.vrd"); + obj.addAlias("ui.hrd*"); + obj.addAlias("ui.vrd*"); + obj.addAlias("ui.radio*"); obj.useBang(); obj.useFloat(); obj.useList(); obj.usePresets(); - obj.useMouseEvents(UI_MOUSE_DOWN | UI_MOUSE_DBL_CLICK); + obj.useMouseEvents(UI_MOUSE_DOWN | UI_MOUSE_DBL_CLICK | UI_MOUSE_DRAG); + obj.outputMouseEvents(MouseEventsOutput::DEFAULT_OFF); + obj.usePopup(); + obj.setDefaultSize(127, 15); obj.hideLabelInner(); @@ -457,11 +564,12 @@ void UIRadio::setup() obj.setPropertyAccessor("mode", &UIRadio::p_mode, &UIRadio::p_setMode); obj.addProperty("value", &UIRadio::p_value, &UIRadio::p_setValue); + obj.addMethod("+", &UIRadio::m_plus); + obj.addMethod("-", &UIRadio::m_minus); obj.addMethod("flip", &UIRadio::m_flip); obj.addMethod("next", &UIRadio::m_next); obj.addMethod("prev", &UIRadio::m_prev); - obj.addMethod("+", &UIRadio::m_plus); - obj.addMethod("-", &UIRadio::m_minus); - obj.addMethod("set", &UIRadio::p_setValue); + obj.addMethod("random", &UIRadio::m_random); obj.addMethod("reset", &UIRadio::m_reset); + obj.addMethod("set", &UIRadio::p_setValue); } diff --git a/ceammc/ext/src/ui/ui_radio.h b/ceammc/ext/src/ui/ui_radio.h index 58866b3fb0..f335b1f150 100644 --- a/ceammc/ext/src/ui/ui_radio.h +++ b/ceammc/ext/src/ui/ui_radio.h @@ -43,10 +43,13 @@ class UIRadio : public UIObject { void onFloat(t_float f); void onList(const AtomList& lst); void onMouseDown(t_object*, const t_pt& pt, const t_pt& abs_pt, long mod); + void onMouseDrag(t_object* view, const t_pt& pt, long mod); void onDblClick(t_object* view, const t_pt& pt, long modifiers); void loadPreset(size_t idx); void storePreset(size_t idx); + void showPopup(const t_pt& pt, const t_pt& abs_pt); + // props float p_numItems() const; void p_setNumItems(float n); @@ -60,11 +63,14 @@ class UIRadio : public UIObject { void m_reset(); void m_next(); void m_prev(); + void m_random(); void m_plus(t_float f); void m_minus(t_float f); public: static void setup(); +private: + const int click2Cell(const t_pt& pt); }; void setup_ui_radio(); diff --git a/ceammc/ext/src/ui/ui_rslider.cpp b/ceammc/ext/src/ui/ui_rslider.cpp index 7c5edaca84..ae7cff30a1 100644 --- a/ceammc/ext/src/ui/ui_rslider.cpp +++ b/ceammc/ext/src/ui/ui_rslider.cpp @@ -16,18 +16,20 @@ #include "ceammc_preset.h" #include "ceammc_ui.h" -#include +#include + +// CREATE_MODE -> MOVE_MOVE -> CHANGE_MODE UIRSlider::UIRSlider() : prop_color_knob(rgba_blue) , prop_min(0) , prop_max(1) - , prop_mouse_sync(0) , knob_layer_(asEBox(), gensym("knob_layer")) , vlow_(0) , vhigh_(0) , is_horizontal_(true) , drag_mode_(NONE) + , edit_mode_(CREATE) { createOutlet(); } @@ -144,6 +146,27 @@ void UIRSlider::onList(const AtomList& lst) output(); } +UIRSlider::EditMode UIRSlider::keyMod2EditMode(long mod, float value) const +{ + if (mod & EMOD_SHIFT) + return MOVE; + else if (mod & EMOD_ALT) { + if (std::abs(vhigh_ - value) < std::abs(vlow_ - value)) + return CHANGE_HIGH; + else + return CHANGE_LOW; + } +#ifdef __APPLE__ + else if (mod & EMOD_CMD) + return OUTPUT; +#else + else if (mod & EMOD_CTRL) + return OUTPUT; +#endif + else + return CREATE; +} + void UIRSlider::onMouseDown(t_object* view, const t_pt& pt, const t_pt& abs_pt, long modifiers) { const t_rect r = rect(); @@ -155,30 +178,35 @@ void UIRSlider::onMouseDown(t_object* view, const t_pt& pt, const t_pt& abs_pt, else value = convert::lin2lin_clip(pt.y, 0, r.height, prop_min, prop_max); - if (modifiers == EMOD_SHIFT) { - if (fabs(vhigh_ - value) < fabs(vlow_ - value)) { - vhigh_ = value; - drag_mode_ = HIGH; - } else { - vlow_ = value; - drag_mode_ = LOW; - } - } else { + edit_mode_ = keyMod2EditMode(modifiers, value); + switch (edit_mode_) { + case CREATE: vlow_ = vhigh_ = value; - drag_mode_ = NONE; click_pt_ = pt; + break; + case MOVE: + click_pt_ = pt; + break; + case CHANGE_HIGH: + vhigh_ = value; + break; + case CHANGE_LOW: + vlow_ = value; + break; + default: + case OUTPUT: + break; } adjustValues(); redrawKnob(); - if (prop_mouse_sync) - output(); + output(); } void UIRSlider::onMouseUp(t_object* view, const t_pt& pt, long modifiers) { - if (!prop_mouse_sync) - output(); + output(); + edit_mode_ = CREATE; } void UIRSlider::onMouseDrag(t_object* view, const t_pt& pt, long modifiers) @@ -192,11 +220,8 @@ void UIRSlider::onMouseDrag(t_object* view, const t_pt& pt, long modifiers) else value = convert::lin2lin_clip(pt.y, 0, r.height, prop_min, prop_max); - if (drag_mode_ == LOW) - vlow_ = value; - else if (drag_mode_ == HIGH) - vhigh_ = value; - else { + switch (edit_mode_) { + case CREATE: { bool backward = false; // right -> left selection @@ -210,12 +235,40 @@ void UIRSlider::onMouseDrag(t_object* view, const t_pt& pt, long modifiers) vlow_ = value; else vhigh_ = value; + } break; + case MOVE: { + const float pix_delta = is_horizontal_ ? (pt.x - click_pt_.x) : (pt.y - click_pt_.y); + const float val_delta = (pix_delta / r.width) * (prop_max - prop_min); + + const float new_low = vlow_ + val_delta; + const float new_high = vhigh_ + val_delta; + + auto in_range = [](float v, const std::pair& range) { + return range.first <= v && v <= range.second; + }; + + const auto range = std::minmax(prop_min, prop_max); + if (in_range(new_low, range) + && in_range(new_high, range)) { + vhigh_ = new_high; + vlow_ = new_low; + } + + click_pt_ = pt; + } break; + case CHANGE_LOW: { + vlow_ = value; + } break; + case CHANGE_HIGH: { + vhigh_ = value; + } break; + default: + break; } adjustValues(); redrawKnob(); - if (prop_mouse_sync) - output(); + output(); } AtomList UIRSlider::propValue() const @@ -272,15 +325,10 @@ void UIRSlider::storePreset(size_t idx) void UIRSlider::adjustValues() { - boost::tuple v = boost::minmax(vlow_, vhigh_); - - if (prop_min < prop_max) { - vlow_ = v.get<0>(); - vhigh_ = v.get<1>(); - } else { - vlow_ = v.get<1>(); - vhigh_ = v.get<0>(); - } + if (prop_min < prop_max && vhigh_ < vlow_) + std::swap(vlow_, vhigh_); + else if (prop_min > prop_max && vhigh_ > vlow_) + std::swap(vlow_, vhigh_); } void UIRSlider::redrawKnob() @@ -305,13 +353,11 @@ bool UIRSlider::setValue(const AtomList& lst) const size_t N = lst.size(); - boost::tuple range = boost::minmax(prop_min, prop_max); - if (N > 0 && lst[0].isFloat()) - vlow_ = clip(lst[0].asFloat(), range.get<0>(), range.get<1>()); + vlow_ = clip_any(lst[0].asFloat(), prop_min, prop_max); if (N > 1 && lst[1].isFloat()) - vhigh_ = clip(lst[1].asFloat(), range.get<0>(), range.get<1>()); + vhigh_ = clip_any(lst[1].asFloat(), prop_min, prop_max); adjustValues(); @@ -328,10 +374,10 @@ void UIRSlider::setup() obj.usePresets(); obj.useBang(); obj.useList(); + obj.outputMouseEvents(MouseEventsOutput::DEFAULT_OFF); obj.addProperty("min", _("Minimum Value"), 0.f, &UIRSlider::prop_min, _("Bounds")); obj.addProperty("max", _("Maximum Value"), 1.f, &UIRSlider::prop_max, _("Bounds")); - obj.addProperty("sync", _("Mouse sync"), false, &UIRSlider::prop_mouse_sync, _("Main")); obj.addProperty("knob_color", _("Knob Color"), DEFAULT_ACTIVE_COLOR, &UIRSlider::prop_color_knob); obj.addProperty("value", &UIRSlider::propValue, &UIRSlider::propSetValue); diff --git a/ceammc/ext/src/ui/ui_rslider.h b/ceammc/ext/src/ui/ui_rslider.h index 2e6af8dd41..3978594294 100644 --- a/ceammc/ext/src/ui/ui_rslider.h +++ b/ceammc/ext/src/ui/ui_rslider.h @@ -19,6 +19,14 @@ using namespace ceammc; class UIRSlider : public UIObject { + enum EditMode { + CREATE = 0, + MOVE, + CHANGE_LOW, + CHANGE_HIGH, + OUTPUT + }; + enum DragMode { NONE = 0, LOW, @@ -28,13 +36,13 @@ class UIRSlider : public UIObject { private: t_rgba prop_color_knob; float prop_min, prop_max; - int prop_mouse_sync; private: UILayer knob_layer_; float vlow_, vhigh_; bool is_horizontal_; DragMode drag_mode_; + EditMode edit_mode_; t_pt click_pt_; public: @@ -71,6 +79,7 @@ class UIRSlider : public UIObject { void redrawKnob(); void output(); bool setValue(const AtomList& lst); + EditMode keyMod2EditMode(long mod, float value) const; public: static void setup(); diff --git a/ceammc/ext/src/ui/ui_scope.cpp b/ceammc/ext/src/ui/ui_scope.cpp index e02bc96437..4e369da437 100644 --- a/ceammc/ext/src/ui/ui_scope.cpp +++ b/ceammc/ext/src/ui/ui_scope.cpp @@ -14,7 +14,7 @@ #include "ui_scope.h" #include "ceammc_convert.h" -#include "ceammc_dsp_ui.h" +#include "ceammc_ui.h" static const size_t N_SAMPLES = 150; @@ -38,6 +38,19 @@ UIScope::UIScope() , prop_window(2048) , prop_refresh(50) { + initPopupMenu("scope", + { { _("Zoom 100%"), [this](const t_pt&) { + setProperty(gensym("min"), AtomList(-1)); + setProperty(gensym("max"), AtomList(1)); + } }, + { _("Zoom 200%"), [this](const t_pt&) { + setProperty(gensym("min"), AtomList(-0.5)); + setProperty(gensym("max"), AtomList(0.5)); + } }, + { _("Zoom 50%"), [this](const t_pt&) { + setProperty(gensym("min"), AtomList(-2)); + setProperty(gensym("max"), AtomList(2)); + } } }); } void UIScope::okSize(t_rect* newrect) @@ -95,7 +108,7 @@ void UIScope::paintScope() { // zero range error check if (prop_max - prop_min == 0) { - DSP_ERR << "zero value range"; + UI_ERR << "zero value range"; return; } @@ -156,7 +169,7 @@ void UIScope::m_freeze(t_float f) void UIScope::m_scale(t_float f) { if (f <= 0) { - DSP_ERR << "invalid scale value: " << f; + UI_ERR << "invalid scale value: " << f; return; } @@ -169,7 +182,7 @@ void UIScope::onMouseDown(t_object* view, const t_pt& pt, const t_pt& abs_pt, lo if (modifiers == EMOD_SHIFT) { setProperty(gensym("min"), AtomList(prop_min * 0.8)); setProperty(gensym("max"), AtomList(prop_max * 0.8)); - } else if (modifiers == EMOD_CTRL) { + } else if (modifiers == EMOD_ALT) { setProperty(gensym("min"), AtomList(prop_min * 1.2)); setProperty(gensym("max"), AtomList(prop_max * 1.2)); } @@ -177,28 +190,47 @@ void UIScope::onMouseDown(t_object* view, const t_pt& pt, const t_pt& abs_pt, lo void UIScope::onDblClick(t_object* view, const t_pt& pt, long modifiers) { + // if modifiers - use single click if (modifiers != 0) onMouseDown(view, pt, pt, modifiers); else freeze_ = !freeze_; } +void UIScope::onMouseWheel(const t_pt& pt, long modifiers, float delta) +{ + static t_symbol* SYM_MIN = gensym("min"); + static t_symbol* SYM_MAX = gensym("max"); + static t_symbol* SYM_WINDOW = gensym("window"); + + if (modifiers == EMOD_SHIFT) { + float k = (1 + delta * 0.05); + setProperty(SYM_WINDOW, AtomList(prop_window * k)); + } else { + float k = (1 + delta * 0.05); + setProperty(SYM_MIN, AtomList(prop_min * k)); + setProperty(SYM_MAX, AtomList(prop_max * k)); + } +} + void UIScope::setup() { - UIDspFactory obj("ui.scope~"); + UIObjectFactory obj("ui.scope~"); obj.setDefaultSize(150, 100); - obj.useMouseEvents(UI_MOUSE_DBL_CLICK | UI_MOUSE_DOWN); + obj.useMouseEvents(UI_MOUSE_DBL_CLICK | UI_MOUSE_DOWN | UI_MOUSE_WHEEL); + obj.usePopup(); obj.addMethod("freeze", &UIScope::m_freeze); obj.addMethod("scale", &UIScope::m_scale); - obj.addProperty(PROP_ACTIVE_COLOR, _("Active Color"), DEFAULT_ACTIVE_COLOR, &UIScope::prop_color_active); - obj.addProperty("max", _("Maximum value"), 1, &UIScope::prop_max, _("Bounds")); - obj.addProperty("min", _("Minimum value"), -1, &UIScope::prop_min, _("Bounds")); + obj.addColorProperty(PROP_ACTIVE_COLOR, _("Active Color"), DEFAULT_ACTIVE_COLOR, &UIScope::prop_color_active); + obj.addFloatProperty("max", _("Maximum value"), 1, &UIScope::prop_max, _("Bounds")); + obj.addFloatProperty("min", _("Minimum value"), -1, &UIScope::prop_min, _("Bounds")); obj.addIntProperty("window", _("Window size"), 2048, &UIScope::prop_window, _("Main")); obj.setPropertyRange("window", 512, 4096); obj.addIntProperty("refresh", _("Refresh time (ms)"), 40, &UIScope::prop_refresh, _("Main")); obj.setPropertyRange("refresh", 10, 1000); + obj.setPropertyUnits("refresh", "msec"); obj.hideProperty("send"); } diff --git a/ceammc/ext/src/ui/ui_scope.h b/ceammc/ext/src/ui/ui_scope.h index 33083ab167..94d8387d85 100644 --- a/ceammc/ext/src/ui/ui_scope.h +++ b/ceammc/ext/src/ui/ui_scope.h @@ -60,6 +60,7 @@ class UIScope : public UIDspObject { void onMouseDown(t_object* view, const t_pt& pt, const t_pt& abs_pt, long modifiers); void onDblClick(t_object* view, const t_pt& pt, long modifiers); + void onMouseWheel(const t_pt& pt, long modifiers, float delta); public: static void setup(); diff --git a/ceammc/ext/src/ui/ui_single_value.cpp b/ceammc/ext/src/ui/ui_single_value.cpp index 9c46c291d5..aa14285519 100644 --- a/ceammc/ext/src/ui/ui_single_value.cpp +++ b/ceammc/ext/src/ui/ui_single_value.cpp @@ -14,7 +14,13 @@ extern "C" { #include "m_imp.h" } +// see ui_gain.cpp static t_rgba BIND_MIDI_COLOR = hex_to_rgba("#FF3377"); +static t_rgba PICKUP_MIDI_COLOR = hex_to_rgba("#3377FF"); +static t_symbol* SYM_MIN; +static t_symbol* SYM_MAX; +static t_symbol* SYM_LINEAR; +static t_symbol* SYM_LOG; using namespace ceammc; @@ -28,14 +34,16 @@ UISingleValue::UISingleValue() : midi_proxy_(this, &UISingleValue::onMidiCtrl) , pick_value_side_(0) , listen_midi_ctrl_(false) - , midi_value_picked_(false) + , midi_pickup_done_(false) + , knob_phase(0) , prop_value(0) , prop_min(0) , prop_max(1) , prop_midi_chn(0) , prop_midi_ctl(0) - , prop_midi_pickup(0) + , prop_pickup_midi(0) , prop_show_value(0) + , prop_scale(SYM_LINEAR) , knob_layer_(asEBox(), gensym("knob_layer")) { createOutlet(); @@ -43,33 +51,69 @@ UISingleValue::UISingleValue() t_float UISingleValue::range() const { return prop_max - prop_min; } -t_float UISingleValue::value() const { return prop_value; } +t_float UISingleValue::knobPhase() const { return knob_phase; } t_float UISingleValue::minValue() const { return prop_min; } t_float UISingleValue::maxValue() const { return prop_max; } -void UISingleValue::setValue(t_float v) { prop_value = clip(v, 0, 1); } +void UISingleValue::setKnobPhase(t_float v) +{ + knob_phase = clip(v, 0, 1); + + if (prop_scale == SYM_LINEAR) + prop_value = convert::lin2lin(knob_phase, prop_min, prop_max); + else if (prop_scale == SYM_LOG) { + const bool ok = (prop_min > 0) && (prop_max > prop_min); + if (!ok) { + UI_ERR << "invalid min/max bounds: " << prop_min << " " << prop_max << " in logarithm mode"; + return; + } + + prop_value = convert::lin2exp(knob_phase, 0, 1, prop_min, prop_max); + } +} int UISingleValue::midiChannel() const { return prop_midi_chn; } int UISingleValue::midiControl() const { return prop_midi_ctl; } -t_float UISingleValue::realValue() const +t_float UISingleValue::value() const { - const t_float r = range(); - return r < 0 ? (prop_value - 1) * r + prop_max : prop_value * r + prop_min; + return prop_value; } -void UISingleValue::setRealValue(t_float v) +void UISingleValue::setValueLin(t_float v) { const t_float r = range(); - if (r < 0) - prop_value = ((clip(v, prop_max, prop_min) - prop_max) / r) + 1; - else if (r > 0) - prop_value = (clip(v, prop_min, prop_max) - prop_min) / r; - else + if (r < 0) { + prop_value = clip(v, prop_max, prop_min); + knob_phase = ((prop_value - prop_max) / r) + 1; + } else if (r > 0) { + prop_value = clip(v, prop_min, prop_max); + knob_phase = (prop_value - prop_min) / r; + } else { + prop_value = prop_min; + knob_phase = 0; UI_ERR << "zero range"; + } +} + +void UISingleValue::setValue(t_float v) +{ + if (prop_scale == SYM_LINEAR) { + setValueLin(v); + } else if (prop_scale == SYM_LOG) { + bool ok = prop_min > 0 && prop_max > prop_min; + if (!ok) { + UI_ERR << "invalid property range: " << prop_min << " " << prop_max + << ". @min should be >0 in log mode"; + return; + } + + prop_value = clip(v, prop_min, prop_max); + knob_phase = convert::exp2lin(prop_value, prop_min, prop_max, 0, 1); + } } void UISingleValue::init(t_symbol* name, const AtomList& args, bool usePresets) @@ -78,6 +122,8 @@ void UISingleValue::init(t_symbol* name, const AtomList& args, bool usePresets) if (prop_midi_chn > 0 || prop_midi_ctl > 0) midi_proxy_.bind(midi_ctl_sym()); + + prop_value = prop_min; } void UISingleValue::onPropChange(t_symbol* prop_name) @@ -99,6 +145,10 @@ void UISingleValue::onPropChange(t_symbol* prop_name) midi_proxy_.bind(midi_ctl_sym()); } else midi_proxy_.unbind(); + } else if (prop_name == SYM_MAX || prop_name == SYM_MIN) { + // put value in valid range + prop_value = clip_any(prop_value, prop_min, prop_max); + knob_layer_.invalidate(); } redrawKnob(); @@ -106,8 +156,8 @@ void UISingleValue::onPropChange(t_symbol* prop_name) void UISingleValue::output() { - floatTo(0, realValue()); - send(realValue()); + floatTo(0, value()); + send(value()); } void UISingleValue::onBang() @@ -117,7 +167,7 @@ void UISingleValue::onBang() void UISingleValue::onFloat(t_float f) { - setRealValue(f); + setValue(f); redrawKnob(); output(); } @@ -148,33 +198,46 @@ void UISingleValue::onMidiCtrl(const AtomList& l) if (prop_midi_chn > 0 && CTL_CHAN != prop_midi_chn) return; - float v = CTL_VAL / 127; + const float w = convert::lin2lin_clip(CTL_VAL, 0, 1); + // control value is set and we need to pickup midi control value // do it once - if (prop_midi_pickup && !midi_value_picked_) { + if (prop_pickup_midi && !midi_pickup_done_) { // simple case - pickup equal value - if (v == prop_value) { - midi_value_picked_ = true; - return; + if (w == knob_phase) { + midi_pickup_done_ = true; + } else { + // pickup when value is over + char side = (w < knob_phase) ? -1 : 1; + // init state + if (pick_value_side_ == 0) + pick_value_side_ = side; + // pickup the value + else if (pick_value_side_ == -side) { + midi_pickup_done_ = true; + setKnobPhase(w); + redrawKnob(); + output(); + } } - // pickup when value is over - char side = (v < prop_value) ? -1 : 1; - // init state - if (pick_value_side_ == 0) - pick_value_side_ = side; - // pickup the value - else if (pick_value_side_ == -side) { - midi_value_picked_ = true; - setValue(v); + if (midi_pickup_done_) { + setKnobPhase(w); + + asEBox()->b_boxparameters.d_bordercolor = prop_color_border; + invalidateBorder(); redrawKnob(); output(); + } else { + asEBox()->b_boxparameters.d_bordercolor = PICKUP_MIDI_COLOR; + invalidateBorder(); + redrawInnerArea(); } return; } - setValue(v); + setKnobPhase(w); redrawKnob(); output(); } @@ -182,23 +245,23 @@ void UISingleValue::onMidiCtrl(const AtomList& l) void UISingleValue::m_set(t_float f) { - setRealValue(f); + setValue(f); redrawKnob(); } void UISingleValue::m_plus(t_float f) { - m_set(realValue() + f); + m_set(value() + f); } void UISingleValue::m_minus(t_float f) { - m_set(realValue() - f); + m_set(value() - f); } void UISingleValue::m_mul(t_float f) { - m_set(realValue() * f); + m_set(value() * f); } void UISingleValue::m_div(t_float f) @@ -208,17 +271,17 @@ void UISingleValue::m_div(t_float f) return; } - m_set(realValue() / f); + m_set(value() / f); } void UISingleValue::m_increment() { - m_set(realValue() + 1); + m_set(value() + 1); } void UISingleValue::m_decrement() { - m_set(realValue() - 1); + m_set(value() - 1); } void UISingleValue::loadPreset(size_t idx) @@ -229,12 +292,12 @@ void UISingleValue::loadPreset(size_t idx) void UISingleValue::storePreset(size_t idx) { - PresetStorage::instance().setFloatValueAt(presetId(), idx, realValue()); + PresetStorage::instance().setFloatValueAt(presetId(), idx, value()); } void UISingleValue::onDblClick(t_object*, const t_pt&, long mod) { - if (!(mod & EMOD_SHIFT)) { + if (!(mod & EMOD_SHIFT)) { // center value onFloat(minValue() + maxValue() / 2); return; } @@ -258,7 +321,7 @@ void UISingleValue::startListenMidi() LIB_DBG << "move MIDI control to bind"; asEBox()->b_boxparameters.d_bordercolor = BIND_MIDI_COLOR; - asEBox()->b_force_redraw = 1; + asEBox()->b_ready_to_draw = true; redraw(); } @@ -266,7 +329,7 @@ void UISingleValue::stopListenMidi() { listen_midi_ctrl_ = false; asEBox()->b_boxparameters.d_bordercolor = prop_color_border; - asEBox()->b_force_redraw = 1; + asEBox()->b_ready_to_draw = true; redraw(); } @@ -275,3 +338,28 @@ void UISingleValue::redrawKnob() knob_layer_.invalidate(); redrawInnerArea(); } + +UISingleValue::ScaleMode UISingleValue::scaleMode() const +{ + if (prop_scale == SYM_LINEAR) + return LINEAR; + else if (prop_scale == SYM_LOG) + return LOG; + else + return LINEAR; +} + +void UISingleValue::setup() +{ + if (!SYM_MIN) + SYM_MIN = gensym("min"); + + if (!SYM_MAX) + SYM_MAX = gensym("max"); + + if (!SYM_LINEAR) + SYM_LINEAR = gensym("linear"); + + if (!SYM_LOG) + SYM_LOG = gensym("log"); +} diff --git a/ceammc/ext/src/ui/ui_single_value.h b/ceammc/ext/src/ui/ui_single_value.h index 775e0e552a..dac39f8ba9 100644 --- a/ceammc/ext/src/ui/ui_single_value.h +++ b/ceammc/ext/src/ui/ui_single_value.h @@ -12,7 +12,8 @@ class UISingleValue : public UIObject { char pick_value_side_; bool listen_midi_ctrl_; - bool midi_value_picked_; + bool midi_pickup_done_; + t_float knob_phase; public: t_float prop_value; @@ -20,22 +21,30 @@ class UISingleValue : public UIObject { t_float prop_max; int prop_midi_chn; int prop_midi_ctl; - int prop_midi_pickup; + int prop_pickup_midi; int prop_show_value; + t_symbol* prop_scale; + + enum ScaleMode { + LINEAR, + LOG + }; public: UISingleValue(); t_float range() const; - t_float value() const; t_float minValue() const; t_float maxValue() const; - void setValue(t_float v); + int midiChannel() const; int midiControl() const; - t_float realValue() const; - void setRealValue(t_float v); + t_float knobPhase() const; + void setKnobPhase(t_float v); + + t_float value() const; + void setValue(t_float v); void init(t_symbol* name, const AtomList& args, bool usePresets); void onPropChange(t_symbol* prop_name); @@ -63,8 +72,15 @@ class UISingleValue : public UIObject { void redrawKnob(); + ScaleMode scaleMode() const; + protected: UILayer knob_layer_; + + static void setup(); + +private: + void setValueLin(t_float v); }; #endif // UI_SINGLE_VALUE_H diff --git a/ceammc/ext/src/ui/ui_slider.cpp b/ceammc/ext/src/ui/ui_slider.cpp index 47f88ebeb7..c915f5e6de 100644 --- a/ceammc/ext/src/ui/ui_slider.cpp +++ b/ceammc/ext/src/ui/ui_slider.cpp @@ -3,18 +3,19 @@ #include "ceammc_convert.h" #include "ceammc_ui.h" +#include + static const float ALPHA_BLEND = 0.4; UISlider::UISlider() : is_horizontal_(false) - , value_last_(0) - , value_ref_(0) + , knob_phase_prev_(0) + , click_phase_(0) , font_(gensym(FONT_FAMILY), FONT_SIZE - 2) , txt_value_(font_.font(), ColorRGBA::black(), ETEXT_UP_LEFT, ETEXT_JLEFT) , prop_knob_color(hex_to_rgba(DEFAULT_ACTIVE_COLOR)) , prop_text_color(hex_to_rgba(DEFAULT_BORDER_COLOR)) , prop_rel_mode(0) - , mouse_up_output(0) , prop_active_scale(0) , prop_value_pos(gensym("center")) , prop_value_precision(2) @@ -39,12 +40,13 @@ void UISlider::paint() kp.setLineWidth(2 * zoom()); if (is_horizontal_) { // horizontal - float x = value() * r.width; + float x = knobPhase() * (r.width - 1); kp.drawLine(x, 0, x, r.height); if (prop_active_scale) { + kp.setLineWidth(0); kp.setColor(rgba_color_sum(&prop_color_background, &prop_knob_color, ALPHA_BLEND)); - kp.drawRect(0, 0, x, r.height); + kp.drawRect(0, 0, x, r.height - 1); kp.fill(); } @@ -72,12 +74,13 @@ void UISlider::paint() kp.drawText(txt_value_); } } else { - float y = (1.0 - value()) * r.height; + float y = (1.0 - knobPhase()) * (r.height - 1); kp.drawLine(0, y, r.width, y); if (prop_active_scale) { + kp.setLineWidth(0); kp.setColor(rgba_color_sum(&prop_color_background, &prop_knob_color, ALPHA_BLEND)); - kp.drawRect(0, y, r.width, r.height * value()); + kp.drawRect(0, y, r.width - 1, r.height * knobPhase()); kp.fill(); } } @@ -97,25 +100,17 @@ void UISlider::okSize(t_rect* newrect) newrect->height = pd_clip_min(newrect->height, 50.); } -void UISlider::onMouseDown(t_object*, const t_pt& pt, const t_pt& abs_pt, long) +void UISlider::onMouseDown(t_object*, const t_pt& pt, const t_pt& abs_pt, long modifiers) { - t_rect r = rect(); - if (prop_rel_mode) { - value_last_ = prop_value; + knob_phase_prev_ = knobPhase(); - if (is_horizontal_) - value_ref_ = clip(pt.x / r.width, 0, 1); - else - value_ref_ = clip(1.0 - (pt.y / r.height), 0, 1); + click_phase_ = (is_horizontal_) + ? convert::lin2lin(pt.x, 0, width(), 0, 1) + : convert::lin2lin(pt.y, height(), 0, 0, 1); } else { - if (is_horizontal_) - setValue(pt.x / r.width); - else - setValue(1.0 - (pt.y / r.height)); - - if (!mouse_up_output) - output(); + setValue(calcValueAtMousePos(pt)); + output(); // redraw immidiately redrawKnob(); @@ -124,38 +119,48 @@ void UISlider::onMouseDown(t_object*, const t_pt& pt, const t_pt& abs_pt, long) void UISlider::onMouseDrag(t_object* view, const t_pt& pt, long modifiers) { - t_rect r = rect(); + t_pt pos(pt); if (prop_rel_mode) { - float newvalue; - if (is_horizontal_) - newvalue = pt.x / r.width; - else - newvalue = (1.0 - (pt.y / r.height)); + t_float new_click_phase = (is_horizontal_) + ? convert::lin2lin(pt.x, 0, width(), 0, 1) + : convert::lin2lin(pt.y, height(), 0, 0, 1); - setValue(value_last_ + newvalue - value_ref_); + const t_float delta = (new_click_phase - click_phase_) * ((modifiers & EMOD_SHIFT) ? 0.1 : 1); + const t_float new_phase = knob_phase_prev_ + delta; - if (prop_value == prop_min || prop_value == prop_max) { - value_last_ = prop_value; - value_ref_ = newvalue; - } - } else { - if (is_horizontal_) - setValue(pt.x / r.width); - else - setValue(1.0 - (pt.y / r.height)); + pos.x = convert::lin2lin(new_phase, 0, width()); + pos.y = convert::lin2lin(new_phase, height(), 0); } - if (!mouse_up_output) - output(); - + setValue(calcValueAtMousePos(pos)); + output(); redrawKnob(); } +t_float UISlider::calcValueAtMousePos(const t_pt& pt) const +{ + auto r = rect(); + std::tuple args; + + if (is_horizontal_) + args = { pt.x, 0, r.width }; + else + args = { pt.y, r.height, 0 }; + + switch (scaleMode()) { + case LINEAR: + return convert::lin2lin(std::get<0>(args), std::get<1>(args), std::get<2>(args), prop_min, prop_max); + case LOG: + return convert::lin2exp(std::get<0>(args), std::get<1>(args), std::get<2>(args), prop_min, prop_max); + default: + return 0; + }; +} + void UISlider::onMouseUp(t_object* view, const t_pt& pt, long modifiers) { - if (mouse_up_output) - output(); + output(); } void UISlider::onDblClick(t_object* view, const t_pt& pt, long modifiers) @@ -168,8 +173,18 @@ void UISlider::onDblClick(t_object* view, const t_pt& pt, long modifiers) resize(height() / zoom(), width() / zoom()); } +void UISlider::redrawKnob() +{ + if (prop_active_scale) + invalidateXlets(); + + UISingleValue::redrawKnob(); +} + void UISlider::setup() { + UISingleValue::setup(); + UIObjectFactory obj("ui.slider", EBOX_GROWINDI); obj.addAlias("ui.hsl"); obj.addAlias("ui.vsl"); @@ -178,6 +193,7 @@ void UISlider::setup() obj.useFloat(); obj.usePresets(); obj.useMouseEvents(UI_MOUSE_DOWN | UI_MOUSE_DRAG | UI_MOUSE_DBL_CLICK | UI_MOUSE_UP); + obj.outputMouseEvents(MouseEventsOutput::DEFAULT_OFF); obj.addMethod("+", &UISingleValue::m_plus); obj.addMethod("-", &UISingleValue::m_minus); @@ -193,6 +209,8 @@ void UISlider::setup() obj.addProperty("text_color", _("Text Color"), DEFAULT_TEXT_COLOR, &UISlider::prop_text_color); obj.addProperty("mode", _("Relative Mode"), false, &UISlider::prop_rel_mode, "Main"); + obj.addProperty("scale", _("Scale Mode"), "linear", &UISingleValue::prop_scale, "linear log", "Main"); + obj.addProperty("min", _("Minimum Value"), 0, &UISingleValue::prop_min, "Bounds"); obj.addProperty("max", _("Maximum Value"), 1, &UISingleValue::prop_max, "Bounds"); @@ -200,15 +218,14 @@ void UISlider::setup() obj.setPropertyRange("midi_channel", 0, 16); obj.addProperty("midi_control", _("MIDI control"), 0, &UISingleValue::prop_midi_ctl, "MIDI"); obj.setPropertyRange("midi_control", 0, 128); - obj.addProperty("midi_pickup", _("MIDI pickup"), true, &UISingleValue::prop_midi_pickup, "MIDI"); - obj.addProperty("mouse_up_output", _("Output on mouse up"), false, &UISlider::mouse_up_output, "Main"); + obj.addProperty("midi_pickup", _("MIDI pickup"), true, &UISingleValue::prop_pickup_midi, "MIDI"); obj.addProperty("active_scale", _("Draw active scale"), false, &UISlider::prop_active_scale, "Main"); obj.addProperty("show_value", _("Show value in horizontal mode"), false, &UISingleValue::prop_show_value, "Misc"); obj.addProperty("value_pos", _("Value position"), "center", &UISlider::prop_value_pos, "left center right", "Misc"); - obj.addProperty("value_precision", _("Precision"), 2, &UISlider::prop_value_precision, "Main"); + obj.addProperty("value_precision", _("Precision"), 2, &UISlider::prop_value_precision, "Misc"); obj.setPropertyRange("value_precision", 0, 7); - obj.addProperty("value", &UISingleValue::realValue, &UISingleValue::setRealValue); + obj.addProperty("value", &UISingleValue::value, &UISingleValue::setValue); } void setup_ui_slider() diff --git a/ceammc/ext/src/ui/ui_slider.h b/ceammc/ext/src/ui/ui_slider.h index 7ef6aea6f2..95fad27c7d 100644 --- a/ceammc/ext/src/ui/ui_slider.h +++ b/ceammc/ext/src/ui/ui_slider.h @@ -5,8 +5,8 @@ class UISlider : public UISingleValue { bool is_horizontal_; - float value_last_; - float value_ref_; + float knob_phase_prev_; + float click_phase_; UIFont font_; UITextLayout txt_value_; @@ -14,7 +14,6 @@ class UISlider : public UISingleValue { t_rgba prop_knob_color; t_rgba prop_text_color; int prop_rel_mode; - int mouse_up_output; int prop_active_scale; t_symbol* prop_value_pos; int prop_value_precision; @@ -25,13 +24,18 @@ class UISlider : public UISingleValue { void init(t_symbol* name, const AtomList& args, bool usePresets); void paint(); void okSize(t_rect* newrect); - void onMouseDown(t_object*, const t_pt& pt, const t_pt& abs_pt, long); + void onMouseDown(t_object*, const t_pt& pt, const t_pt& abs_pt, long modifiers); void onMouseDrag(t_object* view, const t_pt& pt, long modifiers); void onMouseUp(t_object* view, const t_pt& pt, long modifiers); void onDblClick(t_object* view, const t_pt& pt, long modifiers); + void redrawKnob(); + public: static void setup(); + +private: + t_float calcValueAtMousePos(const t_pt& pt) const; }; void setup_ui_slider(); diff --git a/ceammc/ext/src/ui/ui_slider2d.cpp b/ceammc/ext/src/ui/ui_slider2d.cpp index 066c458422..92d450003e 100644 --- a/ceammc/ext/src/ui/ui_slider2d.cpp +++ b/ceammc/ext/src/ui/ui_slider2d.cpp @@ -35,22 +35,41 @@ static t_rgba GUIDE_LINE_COLOR = hex_to_rgba("#00C0F0"); static const float GUIDE_LINE_WIDTH = 0.5f; UISlider2D::UISlider2D() - : prop_x_min(-1) - , prop_x_max(1) - , prop_y_min(-1) - , prop_y_max(1) + : prop_x_left(-1) + , prop_x_right(1) + , prop_y_top(1) + , prop_y_bottom(-1) , prop_show_range(1) , prop_show_grid(0) , txt_font(gensym(FONT_FAMILY), FONT_SIZE_SMALL) , txt_xrange_(txt_font.font(), ColorRGBA::black(), ETEXT_UP_LEFT, ETEXT_JLEFT) , txt_yrange_(txt_font.font(), ColorRGBA::black(), ETEXT_DOWN_RIGHT, ETEXT_JRIGHT) , knob_layer_(asEBox(), gensym("knob_layer")) - , x_pos_(0.5f) - , y_pos_(0.5f) + , x_pos_(convert::lin2lin(0.5, prop_x_left, prop_x_right)) + , y_pos_(convert::lin2lin(0.5, prop_y_top, prop_y_bottom)) , mouse_down_(false) - , right_click_(false) { createOutlet(); + + auto xmid = [this] { return convert::lin2lin(0.5, prop_x_left, prop_x_right); }; + auto ymid = [this] { return convert::lin2lin(0.5, prop_y_top, prop_y_bottom); }; + + initPopupMenu("slider2d", + { { _("center"), [this, xmid, ymid](const t_pt&) { + onList(AtomList(xmid(), ymid())); + } }, + { _("left center"), [this, ymid](const t_pt&) { + onList(AtomList(prop_x_left, ymid())); + } }, + { _("right center"), [this, ymid](const t_pt&) { + onList(AtomList(prop_x_right, ymid())); + } }, + { _("top center"), [this, xmid](const t_pt&) { + onList(AtomList(xmid(), prop_y_top)); + } }, + { _("bottom center"), [this, xmid](const t_pt&) { + onList(AtomList(xmid(), prop_y_bottom)); + } } }); } void UISlider2D::okSize(t_rect* newrect) @@ -80,13 +99,22 @@ void UISlider2D::paintBackground() return; if (prop_show_grid) { - p.setColor(prop_color_border); const float X_GRID_STEP = r.width / 10; const float Y_GRID_STEP = r.height / 10; + // draw center cross + p.setLineWidth(3); + p.setColor(rgba_addContrast(prop_color_background, 0.1)); + p.drawLine(5 * X_GRID_STEP, -1, 5 * X_GRID_STEP, r.height + 2); + p.drawLine(-1, 5 * Y_GRID_STEP, r.width + 2, 5 * Y_GRID_STEP); + p.setLineWidth(1); + p.setColor(rgba_addContrast(prop_color_background, -0.1)); + + // draw horizontal lines for (int i = 1; i < 10; i++) p.drawLine(i * X_GRID_STEP, -1, i * X_GRID_STEP, r.height + 2); + // draw vertical lines for (int i = 1; i < 10; i++) p.drawLine(-1, i * Y_GRID_STEP, r.width + 2, i * Y_GRID_STEP); } @@ -108,8 +136,8 @@ void UISlider2D::paintKnob() UIPainter p = knob_layer_.painter(r); if (p) { - const float x = x_pos_ * r.width; - const float y = y_pos_ * r.height; + const float x = convert::lin2lin_clip(x_pos_, prop_x_left, prop_x_right, 0, r.width); + const float y = convert::lin2lin(y_pos_, prop_y_top, prop_y_bottom, 0, r.height); // when grid shown - no guide lines are needed if (!prop_show_grid) { @@ -153,48 +181,8 @@ void UISlider2D::onList(const AtomList& lst) output(); } -void UISlider2D::onPopup(t_symbol* menu_name, long item_idx) -{ - if (menu_name != gensym("popup")) - return; - - t_float xcenter = convert::lin2lin(0.5, 0, 1, prop_x_min, prop_x_max); - t_float ycenter = convert::lin2lin(0.5, 0, 1, prop_y_min, prop_y_max); - - switch (item_idx) { - case 0: - onList(AtomList(xcenter, ycenter)); - break; - case 1: - onList(AtomList(prop_x_min, ycenter)); - break; - case 2: - onList(AtomList(prop_x_max, ycenter)); - break; - case 3: - onList(AtomList(xcenter, prop_y_min)); - break; - case 4: - onList(AtomList(xcenter, prop_y_max)); - break; - } -} - void UISlider2D::onMouseDown(t_object* view, const t_pt& pt, const t_pt& abs_pt, long modifiers) { - // right click - if (modifiers & EMOD_RIGHT) { - UIPopupMenu menu(asEObj(), "popup", abs_pt); - menu.addItem(_("center")); - menu.addItem(_("left center")); - menu.addItem(_("right center")); - menu.addItem(_("top center")); - menu.addItem(_("bottom center")); - right_click_ = true; - return; - } - - right_click_ = false; mouse_down_ = true; setMouse(pt.x, pt.y); redrawKnob(); @@ -210,11 +198,6 @@ void UISlider2D::onMouseDrag(t_object* view, const t_pt& pt, long modifiers) void UISlider2D::onMouseUp(t_object* view, const t_pt& pt, long modifiers) { - if (right_click_) { - right_click_ = false; - return; - } - mouse_down_ = false; setMouse(pt.x, pt.y); redrawKnob(); @@ -281,8 +264,8 @@ bool UISlider2D::setRealValue(const AtomList& lst) return false; } - x_pos_ = clip((x - prop_x_min) / xRange(), 0, 1); - y_pos_ = clip((y - prop_y_min) / yRange(), 0, 1); + x_pos_ = clip_any(x, prop_x_left, prop_x_right); + y_pos_ = clip_any(y, prop_y_top, prop_y_bottom); return true; } @@ -293,12 +276,12 @@ AtomList UISlider2D::realValue() const t_float UISlider2D::realXValue() const { - return xRange() * x_pos_ + prop_x_min; + return clip_any(x_pos_, prop_x_left, prop_x_right); } t_float UISlider2D::realYValue() const { - return yRange() * y_pos_ + prop_y_min; + return clip_any(y_pos_, prop_y_top, prop_y_bottom); } void UISlider2D::output() @@ -336,13 +319,13 @@ void UISlider2D::propSetXValue(const AtomList& lst) return; } - x_pos_ = clip((x - prop_x_min) / xRange(), 0, 1); - if (xRange() == 0) { UI_ERR << "invalid x-range: " << xRange(); return; } + x_pos_ = clip_any(x, prop_x_left, prop_x_right); + redrawKnob(); } @@ -359,7 +342,8 @@ void UISlider2D::propSetYValue(const AtomList& lst) return; } - y_pos_ = clip((y - prop_y_min) / yRange(), 0, 1); + y_pos_ = clip_any(y, prop_y_top, prop_y_bottom); + redrawKnob(); } @@ -369,10 +353,10 @@ void UISlider2D::setup() obj.setDefaultSize(100, 100); - obj.addProperty("x_min", _("Minimum X-value"), -1, &UISlider2D::prop_x_min, "Bounds"); - obj.addProperty("x_max", _("Maximum X-value"), 1, &UISlider2D::prop_x_max, "Bounds"); - obj.addProperty("y_min", _("Minimum Y-value"), -1, &UISlider2D::prop_y_min, "Bounds"); - obj.addProperty("y_max", _("Maximum Y-value"), 1, &UISlider2D::prop_y_max, "Bounds"); + obj.addProperty("x_left", _("Left X-value"), -1, &UISlider2D::prop_x_left, "Bounds"); + obj.addProperty("x_right", _("Right X-value"), 1, &UISlider2D::prop_x_right, "Bounds"); + obj.addProperty("y_top", _("Top Y-value"), 1, &UISlider2D::prop_y_top, "Bounds"); + obj.addProperty("y_bottom", _("Bottom Y-value"), -1, &UISlider2D::prop_y_bottom, "Bounds"); obj.addProperty("x_range", &UISlider2D::propXRange, 0); obj.addProperty("y_range", &UISlider2D::propYRange, 0); @@ -387,6 +371,8 @@ void UISlider2D::setup() obj.useBang(); obj.useMouseEvents(UI_MOUSE_UP | UI_MOUSE_DOWN | UI_MOUSE_DRAG); + obj.outputMouseEvents(MouseEventsOutput::DEFAULT_OFF); + obj.usePopup(); obj.addMethod("set", &UISlider2D::m_set); obj.addMethod("move", &UISlider2D::m_move); @@ -407,20 +393,20 @@ void UISlider2D::redrawAll() void UISlider2D::setMouse(float x, float y) { - x_pos_ = clip(x / width(), 0, 1); - y_pos_ = clip(y / height(), 0, 1); + x_pos_ = convert::lin2lin_clip(x, 0, width(), prop_x_left, prop_x_right); + y_pos_ = convert::lin2lin_clip(y, 0, height(), prop_y_top, prop_y_bottom); } void UISlider2D::updateLabels() { char buf[64]; - snprintf(buf, 64, "X: [%g..%g]", prop_x_min, prop_x_max); + snprintf(buf, 64, "X: [%g..%g]", prop_x_left, prop_x_right); const float xoff = 2 * zoom(); const float yoff = 3 * zoom(); txt_xrange_.set(buf, xoff, yoff, 100, 20); - snprintf(buf, 64, "Y: [%g..%g]", prop_y_min, prop_y_max); + snprintf(buf, 64, "Y: [%g..%g]", prop_y_top, prop_y_bottom); txt_yrange_.set(buf, width() - xoff, height() - yoff, 100, 20); } diff --git a/ceammc/ext/src/ui/ui_slider2d.h b/ceammc/ext/src/ui/ui_slider2d.h index cee720d303..f3cee15f02 100644 --- a/ceammc/ext/src/ui/ui_slider2d.h +++ b/ceammc/ext/src/ui/ui_slider2d.h @@ -16,13 +16,15 @@ #include "ceammc_ui_object.h" +#include + using namespace ceammc; class UISlider2D : public UIObject { - float prop_x_min; - float prop_x_max; - float prop_y_min; - float prop_y_max; + float prop_x_left; + float prop_x_right; + float prop_y_top; + float prop_y_bottom; int prop_show_range; int prop_show_grid; @@ -34,7 +36,6 @@ class UISlider2D : public UIObject { float x_pos_; float y_pos_; bool mouse_down_; - bool right_click_; public: UISlider2D(); @@ -50,7 +51,6 @@ class UISlider2D : public UIObject { void onMouseDown(t_object* view, const t_pt& pt, const t_pt& abs_pt, long modifiers); void onMouseDrag(t_object* view, const t_pt& pt, long modifiers); void onMouseUp(t_object* view, const t_pt& pt, long modifiers); - void onPopup(t_symbol* menu_name, long item_idx); void m_set(const AtomList& lst); void m_move(const AtomList& lst); @@ -62,8 +62,8 @@ class UISlider2D : public UIObject { t_float realXValue() const; t_float realYValue() const; - t_float xRange() const { return prop_x_max - prop_x_min; } - t_float yRange() const { return prop_y_max - prop_y_min; } + t_float xRange() const { return std::abs(prop_x_right - prop_x_left); } + t_float yRange() const { return std::abs(prop_y_bottom - prop_y_top); } void output(); diff --git a/ceammc/ext/src/ui/ui_sliders.cpp b/ceammc/ext/src/ui/ui_sliders.cpp index fdfcb628d5..a916102616 100644 --- a/ceammc/ext/src/ui/ui_sliders.cpp +++ b/ceammc/ext/src/ui/ui_sliders.cpp @@ -14,6 +14,8 @@ #include #include +#include +#include #include "ceammc_atomlist.h" #include "ceammc_convert.h" @@ -27,6 +29,7 @@ using namespace ceammc; static const int MAX_SLIDERS_NUM = 1024; static t_symbol* SYM_SLIDER; +static decltype(std::chrono::system_clock::now().time_since_epoch().count()) random_seed; UISliders::UISliders() : txt_font_(gensym(FONT_FAMILY), FONT_SIZE_SMALL) @@ -47,6 +50,33 @@ UISliders::UISliders() { prependToLayerList(&sliders_layer_); createOutlet(); + + initPopupMenu("sliders", + { { _("fill with max"), [this](const t_pt&) { + std::fill(std::begin(pos_values_), std::end(pos_values_), 1); + redrawAll(); + outputList(); } }, + { _("fill with mean"), [this](const t_pt&) { + std::fill(std::begin(pos_values_), std::end(pos_values_), 0.5); + redrawAll(); + outputList(); + } }, + { _("fill with min"), [this](const t_pt&) { + std::fill(std::begin(pos_values_), std::end(pos_values_), 0); + redrawAll(); + outputList(); + } }, + { _("linear up"), [this](const t_pt&) { + m_linup(); + outputList(); + } }, + { _("linear down"), [this](const t_pt&) { + m_lindown(); + outputList(); + } }, + { _("random"), [this](const t_pt&) { + m_random(); + outputList(); } } }); } void UISliders::init(t_symbol* name, const AtomList& args, bool usePresets) @@ -138,10 +168,20 @@ void UISliders::paintSliders() w = r.width / N - 1; } - p.setColor(i == select_idx_ ? prop_select_color : prop_slider_color); + auto color = (i == select_idx_) ? prop_select_color : prop_slider_color; + p.setColor(color); p.drawRect(x, y, w, h); p.fill(); + // draw bar knobs + p.setColor(rgba_addContrast(color, -0.2)); + p.setLineWidth(2); + + if (is_vertical_) + p.drawLine(w, y, w, y + h + 1); + else + p.drawLine(x, y, x + w + 1, y); + if (i == select_idx_) { p.setLineWidth(2); p.setColor(prop_color_border); @@ -177,18 +217,6 @@ void UISliders::storePreset(size_t idx) void UISliders::onMouseDown(t_object* view, const t_pt& pt, const t_pt& abs_pt, long modifiers) { - // right click - if (modifiers & EMOD_RIGHT) { - UIPopupMenu menu(asEObj(), "popup", abs_pt); - char buf[64]; - snprintf(buf, sizeof(buf), _("fill with %f"), prop_max); - menu.addItem(buf); - snprintf(buf, sizeof(buf), _("fill with %f"), (prop_max - prop_min) * 0.5); - menu.addItem(buf); - snprintf(buf, sizeof(buf), _("fill with %f"), prop_min); - menu.addItem(buf); - } - const t_rect r = rect(); const size_t N = pos_values_.size(); @@ -214,6 +242,11 @@ void UISliders::onMouseDown(t_object* view, const t_pt& pt, const t_pt& abs_pt, redrawAll(); } +void UISliders::onMouseUp(t_object* view, const t_pt& pt, long modifiers) +{ + outputList(); +} + void UISliders::onMouseDrag(t_object* view, const t_pt& pt, long modifiers) { onMouseDown(view, pt, pt, modifiers); @@ -226,27 +259,6 @@ void UISliders::onDblClick(t_object* view, const t_pt& pt, long modifiers) resize(height() / zoom(), width() / zoom()); } -void UISliders::onPopup(t_symbol* menu_name, long item_idx) -{ - if (menu_name != gensym("popup")) - return; - - switch (item_idx) { - case 0: - m_fill(prop_max); - break; - case 1: - m_fill((prop_max - prop_min) * 0.5); - break; - case 2: - m_fill(prop_min); - break; - default: - UI_ERR << "unknown popup menu item: " << item_idx; - break; - } -} - void UISliders::m_get(const AtomList& l) { if (l.size() > 0 && l[0].isSymbol()) { @@ -281,7 +293,7 @@ AtomList UISliders::realValues() const void UISliders::setRealValueAt(size_t n, t_float v) { - pos_values_[n] = clip((v - prop_min) / (prop_max - prop_min), 0, 1); + pos_values_[n] = clip((v - prop_min) / (prop_max - prop_min)); } float UISliders::realValueAt(size_t n) const @@ -312,6 +324,7 @@ bool UISliders::setRealValues(const AtomList& l) prop_max = max; generateTxtLabels(); pos_values_.resize(std::min(MAX_SLIDERS_NUM, l.size()), min); + prop_count = l.size(); } else if (range == 0.f) { UI_ERR << "zero value range"; return false; @@ -481,6 +494,31 @@ void UISliders::m_fill(t_float v) m_set(AtomList::filled(v, prop_count)); } +void UISliders::m_random() +{ + static std::uniform_real_distribution dist(0, 1); + static std::default_random_engine gen(random_seed); + + std::generate(std::begin(pos_values_), std::end(pos_values_), []() { return dist(gen); }); + redrawAll(); +} + +void UISliders::m_linup() +{ + int i = 0; + int n = prop_count - 1; + std::generate(std::begin(pos_values_), std::end(pos_values_), [&i, &n]() { return t_float(i++) / n; }); + redrawAll(); +} + +void UISliders::m_lindown() +{ + int n = prop_count - 1; + int i = n; + std::generate(std::begin(pos_values_), std::end(pos_values_), [&i, &n]() { return t_float(i--) / n; }); + redrawAll(); +} + void UISliders::outputList() { AtomList v = realValues(); @@ -491,13 +529,16 @@ void UISliders::outputList() void UISliders::setup() { SYM_SLIDER = gensym("slider"); + random_seed = std::chrono::system_clock::now().time_since_epoch().count(); UIObjectFactory obj("ui.sliders"); obj.usePresets(); obj.useList(); obj.useBang(); - obj.useMouseEvents(UI_MOUSE_DOWN | UI_MOUSE_DRAG | UI_MOUSE_DBL_CLICK); + obj.usePopup(); + obj.useMouseEvents(UI_MOUSE_DOWN | UI_MOUSE_UP | UI_MOUSE_DRAG | UI_MOUSE_DBL_CLICK); + obj.outputMouseEvents(MouseEventsOutput::DEFAULT_OFF); obj.setDefaultSize(150, 100); @@ -529,6 +570,9 @@ void UISliders::setup() obj.addMethod("++", &UISliders::m_increment); obj.addMethod("--", &UISliders::m_decrement); obj.addMethod("fill", &UISliders::m_fill); + obj.addMethod("random", &UISliders::m_random); + obj.addMethod("linup", &UISliders::m_linup); + obj.addMethod("lindown", &UISliders::m_lindown); } void UISliders::onPropChange(t_symbol* prop_name) diff --git a/ceammc/ext/src/ui/ui_sliders.h b/ceammc/ext/src/ui/ui_sliders.h index 2fab6b631c..97c9286ce9 100644 --- a/ceammc/ext/src/ui/ui_sliders.h +++ b/ceammc/ext/src/ui/ui_sliders.h @@ -59,9 +59,9 @@ class UISliders : public UIObject { // mouse void onMouseDown(t_object* view, const t_pt& pt, const t_pt& abs_pt, long modifiers); + void onMouseUp(t_object* view, const t_pt& pt, long modifiers); void onMouseDrag(t_object* view, const t_pt& pt, long modifiers); void onDblClick(t_object* view, const t_pt& pt, long modifiers); - void onPopup(t_symbol* menu_name, long item_idx); // methods void m_get(const AtomList& l); @@ -74,6 +74,9 @@ class UISliders : public UIObject { void m_increment(); void m_decrement(); void m_fill(t_float v); + void m_random(); + void m_linup(); + void m_lindown(); void outputList(); void normalize(); diff --git a/ceammc/ext/src/ui/ui_spectroscope.cpp b/ceammc/ext/src/ui/ui_spectroscope.cpp index e4de899822..c2db357750 100644 --- a/ceammc/ext/src/ui/ui_spectroscope.cpp +++ b/ceammc/ext/src/ui/ui_spectroscope.cpp @@ -11,14 +11,13 @@ * contact the author of this file, or the owner of the project in which * this file belongs to. *****************************************************************************/ -#define _USE_MATH_DEFINES // for M_PI constants - #include "ui_spectroscope.h" #include "ceammc_convert.h" -#include "ceammc_dsp_ui.h" +#include "ceammc_ui.h" #include "ceammc_window.h" #include +#include static const size_t TXT_DB_COUNT = 10; static const char* TXT_DB[TXT_DB_COUNT] = { @@ -50,6 +49,19 @@ UISpectroscope::UISpectroscope() , prop_refresh(100) , prop_log_scale(0) { + + initPopupMenu("ss_log", { { _("log scale"), [this](const t_pt&) { + prop_log_scale = true; + bg_layer_.invalidate(); + graph_layer_.invalidate(); + redraw(); + } } }); + initPopupMenu("ss_lin", { { _("linear scale"), [this](const t_pt&) { + prop_log_scale = false; + bg_layer_.invalidate(); + graph_layer_.invalidate(); + redraw(); + } } }); } UISpectroscope::~UISpectroscope() @@ -353,31 +365,12 @@ void UISpectroscope::drawHGrid(UIPainter& p) p.drawText(*x_labels_[0]); } -void UISpectroscope::onMouseDown(t_object* view, const t_pt& pt, const t_pt& abs_pt, long modifiers) -{ - if (modifiers == EMOD_RIGHT) { - UIPopupMenu menu(asEObj(), "popup", abs_pt); - if (prop_log_scale) - menu.addItem(_("linear scale")); - else - menu.addItem(_("log scale")); - } -} - -void UISpectroscope::onPopup(t_symbol* menu_name, long item_idx) +void UISpectroscope::showPopup(const t_pt& pt, const t_pt& abs_pt) { - if (menu_name == gensym("popup")) { - switch (item_idx) { - case 0: - prop_log_scale = !(prop_log_scale); - bg_layer_.invalidate(); - graph_layer_.invalidate(); - redraw(); - break; - default: - break; - } - } + if (prop_log_scale) + showPopupMenu("ss_lin", pt, abs_pt); + else + showPopupMenu("ss_log", pt, abs_pt); } void UISpectroscope::dspProcess(t_sample** ins, long n_ins, t_sample** outs, long n_outs, long sampleframes) @@ -414,15 +407,16 @@ void UISpectroscope::setup() { static const bool init = init_hann_window(); - UIDspFactory obj("ui.spectroscope~", EBOX_GROWINDI); - obj.useMouseEvents(UI_MOUSE_DOWN); + UIObjectFactory obj("ui.spectroscope~", EBOX_GROWINDI); + obj.usePopup(); obj.addAlias("ui.ssc~"); obj.setDefaultSize(150, 100); - obj.addProperty(PROP_ACTIVE_COLOR, _("Active Color"), DEFAULT_ACTIVE_COLOR, &UISpectroscope::prop_color_active); - obj.addProperty("scale_color", _("Scale Color"), "0.6 0.6 0.6 1", &UISpectroscope::prop_color_scale); + obj.addColorProperty(PROP_ACTIVE_COLOR, _("Active Color"), DEFAULT_ACTIVE_COLOR, &UISpectroscope::prop_color_active); + obj.addColorProperty("scale_color", _("Scale Color"), "0.6 0.6 0.6 1", &UISpectroscope::prop_color_scale); obj.addIntProperty("refresh", _("Refresh time (ms)"), 100, &UISpectroscope::prop_refresh, "Main"); obj.setPropertyRange("refresh", 20, 1000); + obj.setPropertyUnits("refresh", "msec"); obj.addBoolProperty("log_scale", _("Log scale"), false, &UISpectroscope::prop_log_scale, "Main"); obj.hideProperty("send"); diff --git a/ceammc/ext/src/ui/ui_spectroscope.h b/ceammc/ext/src/ui/ui_spectroscope.h index 54b15b86cd..e676bd7bc3 100644 --- a/ceammc/ext/src/ui/ui_spectroscope.h +++ b/ceammc/ext/src/ui/ui_spectroscope.h @@ -63,8 +63,7 @@ class UISpectroscope : public UIDspObject { void drawGraphLog(UIPainter& p); void drawHGrid(UIPainter& p); - void onMouseDown(t_object* view, const t_pt& pt, const t_pt& abs_pt, long modifiers); - void onPopup(t_symbol* menu_name, long item_idx); + void showPopup(const t_pt& pt, const t_pt& abs_pt); void dspProcess(t_sample** ins, long n_ins, t_sample** outs, long n_outs, long sampleframes); void dspOn(double samplerate, long blocksize); diff --git a/ceammc/ext/src/ui/ui_tab.cpp b/ceammc/ext/src/ui/ui_tab.cpp index f926803c32..d5335b256c 100644 --- a/ceammc/ext/src/ui/ui_tab.cpp +++ b/ceammc/ext/src/ui/ui_tab.cpp @@ -424,17 +424,14 @@ void UITab::output() listTo(0, sel); send(sel); } else { - if (item_selected_ < 0 || item_selected_ >= items_.size()) + if (item_selected_ < 0 || item_selected_ >= items_.size()) { + UI_ERR << "no item selected"; return; + } - AtomList sel(items_[item_selected_]); - - t_symbol* SYM_PROP_TITLE = gensym("@title"); - anyTo(0, SYM_PROP_TITLE, sel); - send(SYM_PROP_TITLE, sel); - - floatTo(0, item_selected_); - send(item_selected_); + AtomList res(Atom(item_selected_), items_[item_selected_]); + listTo(0, res); + send(res); } } diff --git a/ceammc/ext/tests/CMakeLists.txt b/ceammc/ext/tests/CMakeLists.txt index e1d7df05c5..47c76f2943 100644 --- a/ceammc/ext/tests/CMakeLists.txt +++ b/ceammc/ext/tests/CMakeLists.txt @@ -5,11 +5,19 @@ include_directories(${CMAKE_BINARY_DIR}) # for config.h include(tests.cmake) add_definitions("-DTEST_DATA_DIR=\"${CMAKE_CURRENT_SOURCE_DIR}\"") add_definitions("-DTEST_BIN_DIR=\"${CMAKE_CURRENT_BINARY_DIR}\"") -#remove_definitions(-DPD_INTERNAL) -add_library(tests_main_lib STATIC tests_main.cpp test_external test_datatypes.cpp +if(WIN32) + remove_definitions(-DPD_INTERNAL) +endif() + +add_library(tests_main_lib STATIC + tests_main.cpp test_approx.cpp - test_wrappers.cpp) + test_datatypes.cpp + test_external.cpp + test_external_log_output.cpp + test_wrappers.cpp +) if(APPLE) set(CMAKE_INSTALL_RPATH "@loader_path/../src/lib") @@ -77,6 +85,7 @@ ceammc_external_test(base gain) ceammc_external_test(base matrix) ceammc_external_test(base mix) ceammc_external_test(base obj_props) +ceammc_external_test(base prop) ceammc_external_test(base prop_declare) ceammc_external_test(base prop_get) ceammc_external_test(base radio) @@ -107,6 +116,7 @@ ceammc_external_test(flow demux_tilde) ceammc_external_test(flow demux2_tilde) ceammc_external_test(flow multiplex) ceammc_external_test(flow once) +ceammc_external_test(flow pack) ceammc_external_test(flow pass) ceammc_external_test(flow pass_if) ceammc_external_test(flow reject) @@ -205,6 +215,8 @@ ceammc_external_test(list zip) ceammc_external_test(math and) ceammc_external_test(math approx) +ceammc_external_test(math cdiv_tilde) +ceammc_external_test(math cmul_tilde) ceammc_external_test(math div) ceammc_external_test(math expr) ceammc_external_test(math gcd) @@ -212,9 +224,8 @@ ceammc_external_test(math lcm) ceammc_external_test(math mul) ceammc_external_test(math or) ceammc_external_test(math polyeval) -ceammc_external_test(math cdiv_tilde) -ceammc_external_test(math cmul_tilde) ceammc_external_test(math round_tilde) +ceammc_external_test(math sync_ops) ceammc_external_test(midi file) ceammc_external_test(midi note) @@ -224,6 +235,7 @@ ceammc_external_test(midi key_to_str) ceammc_external_test(midi prg_to_str) ceammc_external_test(net host) +target_include_directories(test_ext_net_host PUBLIC ${PROJECT_SOURCE_DIR}/ceammc/extra) ceammc_external_test(random discrete) ceammc_external_test(random linear) @@ -245,6 +257,7 @@ ceammc_external_test(string to_symbol) ceammc_external_test(system getenv) ceammc_external_test(system shell) +target_include_directories(test_ext_system_shell PUBLIC ${PROJECT_SOURCE_DIR}/ceammc/extra) ceammc_external_test(path lsdir) @@ -252,6 +265,24 @@ ceammc_external_test(spat pan_lin) ceammc_external_test(spat pan_sqrt) ceammc_external_test(spat pan_cos) ceammc_external_test(spat pan_spread) +ceammc_add_test_linked( + TITLE "hoa_process" + NAME test_ext_spat_hoa_process + LINK ceammc_spat ceammc_core puredata-core ceammc_core + INCLUDE_DIRECTORIES + ${PROJECT_SOURCE_DIR}/ceammc/extra/HoaLibrary-Light/Sources + ${PROJECT_SOURCE_DIR}/ceammc/extra/fmt/include + ${EIGEN3_DIR} +) +ceammc_add_test_linked( + TITLE "hoa_in" + NAME test_ext_spat_hoa_in + LINK ceammc_spat ceammc_core puredata-core ceammc_core + INCLUDE_DIRECTORIES + ${PROJECT_SOURCE_DIR}/ceammc/extra/HoaLibrary-Light/Sources + ${PROJECT_SOURCE_DIR}/ceammc/extra/fmt/include + ${EIGEN3_DIR} +) ceammc_add_test_linked(TITLE "tl.transport" NAME test_ext_tl_transport @@ -381,6 +412,7 @@ ceammc_ui_test("ui.number") ceammc_ui_test("ui.number_tilde") ceammc_ui_test("ui.radio") ceammc_ui_test("ui.rslider") +ceammc_ui_test("ui.polar") ceammc_ui_test("ui.preset") ceammc_ui_test("ui.slider2d") ceammc_ui_test("ui.sliders") @@ -392,9 +424,11 @@ ceammc_add_test_linked(TITLE "[env->to_array]" NAME test_ext_env_to_array LINK tests_main_lib ceammc_array ceammc_env ceammc_array ceammc_core puredata-core) -ceammc_add_test_linked(TITLE "[speech.flite]" - NAME test_ext_misc_speech_flite - LINK ceammc_core ceammc_misc ceammc_string puredata-core ${FLUIDSYNTH_LIBRARIES}) +if(WITH_TTS_FLITE) + ceammc_add_test_linked(TITLE "[speech.flite]" + NAME test_ext_misc_speech_flite + LINK ceammc_core ceammc_misc ceammc_string puredata-core ${FLUIDSYNTH_LIBRARIES}) +endif() add_executable(test_pd_core test_pd_core.cpp) target_link_libraries(test_pd_core puredata-core) diff --git a/ceammc/ext/tests/hoa_test_01.pd b/ceammc/ext/tests/hoa_test_01.pd new file mode 100644 index 0000000000..2061edcec4 --- /dev/null +++ b/ceammc/ext/tests/hoa_test_01.pd @@ -0,0 +1,4 @@ +#N canvas 138 135 700 500 12; +#X obj 92 42 hoa.in; +#X obj 92 120 hoa.out; +#X connect 0 0 1 0; diff --git a/ceammc/ext/tests/hoa_test_02.pd b/ceammc/ext/tests/hoa_test_02.pd new file mode 100644 index 0000000000..b67a5eb42a --- /dev/null +++ b/ceammc/ext/tests/hoa_test_02.pd @@ -0,0 +1,4 @@ +#N canvas 254 220 700 500 12; +#X obj 92 42 hoa.in 2; +#X obj 92 120 hoa.out 4; +#X obj 172 120 hoa.out 3; diff --git a/ceammc/ext/tests/hoa_test_03.pd b/ceammc/ext/tests/hoa_test_03.pd new file mode 100644 index 0000000000..4483a542a6 --- /dev/null +++ b/ceammc/ext/tests/hoa_test_03.pd @@ -0,0 +1,18 @@ +#N canvas 138 135 397 208 12; +#X obj 92 42 hoa.in; +#X obj 92 120 hoa.out; +#X obj 92 88 * 1; +#X obj 152 120 hoa.out; +#X obj 212 120 hoa.out; +#X obj 272 120 hoa.out; +#X obj 152 88 * 2; +#X obj 272 88 * 4; +#X obj 212 88 * 3; +#X connect 0 0 2 0; +#X connect 0 0 6 0; +#X connect 0 0 7 0; +#X connect 0 0 8 0; +#X connect 2 0 1 0; +#X connect 6 0 3 0; +#X connect 7 0 5 0; +#X connect 8 0 4 0; diff --git a/ceammc/ext/tests/hoa_test_04.pd b/ceammc/ext/tests/hoa_test_04.pd new file mode 100644 index 0000000000..134c571481 --- /dev/null +++ b/ceammc/ext/tests/hoa_test_04.pd @@ -0,0 +1,18 @@ +#N canvas 138 135 480 208 12; +#X obj 92 42 hoa.in; +#X obj 92 88 * 1; +#X obj 172 88 * 2; +#X obj 332 88 * 4; +#X obj 252 88 * 3; +#X obj 92 120 hoa.out 1; +#X obj 172 120 hoa.out 2; +#X obj 252 120 hoa.out 3; +#X obj 332 120 hoa.out 4; +#X connect 0 0 1 0; +#X connect 0 0 2 0; +#X connect 0 0 3 0; +#X connect 0 0 4 0; +#X connect 1 0 5 0; +#X connect 2 0 6 0; +#X connect 3 0 8 0; +#X connect 4 0 7 0; diff --git a/ceammc/ext/tests/hoa_test_05.pd b/ceammc/ext/tests/hoa_test_05.pd new file mode 100644 index 0000000000..a6ece6cd64 --- /dev/null +++ b/ceammc/ext/tests/hoa_test_05.pd @@ -0,0 +1,18 @@ +#N canvas 138 135 480 208 12; +#X obj 92 42 hoa.in; +#X obj 92 88 * 1; +#X obj 172 88 * 2; +#X obj 332 88 * 4; +#X obj 252 88 * 3; +#X obj 92 120 hoa.out 4; +#X obj 172 120 hoa.out 3; +#X obj 252 120 hoa.out 2; +#X obj 332 120 hoa.out 1; +#X connect 0 0 1 0; +#X connect 0 0 2 0; +#X connect 0 0 3 0; +#X connect 0 0 4 0; +#X connect 1 0 5 0; +#X connect 2 0 6 0; +#X connect 3 0 8 0; +#X connect 4 0 7 0; diff --git a/ceammc/ext/tests/hoa_test_10.pd b/ceammc/ext/tests/hoa_test_10.pd new file mode 100644 index 0000000000..2218a2c31e --- /dev/null +++ b/ceammc/ext/tests/hoa_test_10.pd @@ -0,0 +1,6 @@ +#N canvas 138 135 218 223 12; +#X obj 58 45 hoa.in~; +#X obj 58 81 *~ 2; +#X obj 58 118 hoa.out~; +#X connect 0 0 1 0; +#X connect 1 0 2 0; diff --git a/ceammc/ext/tests/hoa_test_11.pd b/ceammc/ext/tests/hoa_test_11.pd new file mode 100644 index 0000000000..e7446ff395 --- /dev/null +++ b/ceammc/ext/tests/hoa_test_11.pd @@ -0,0 +1,10 @@ +#N canvas 138 135 218 223 12; +#X obj 58 45 hoa.in~; +#X obj 58 81 *~ 2; +#X obj 58 118 hoa.out~; +#X obj 138 118 hoa.out~; +#X obj 138 81 *~ -2; +#X connect 0 0 1 0; +#X connect 0 0 4 0; +#X connect 1 0 2 0; +#X connect 4 0 3 0; diff --git a/ceammc/ext/tests/hoa_test_12.pd b/ceammc/ext/tests/hoa_test_12.pd new file mode 100644 index 0000000000..ba705487d3 --- /dev/null +++ b/ceammc/ext/tests/hoa_test_12.pd @@ -0,0 +1,10 @@ +#N canvas 138 135 218 223 12; +#X obj 58 45 hoa.in~; +#X obj 58 81 *~ 2; +#X obj 58 118 hoa.out~; +#X obj 138 81 *~ -2; +#X obj 138 118 hoa.out~ 1; +#X connect 0 0 1 0; +#X connect 0 0 3 0; +#X connect 1 0 2 0; +#X connect 3 0 4 0; diff --git a/ceammc/ext/tests/hoa_test_13.pd b/ceammc/ext/tests/hoa_test_13.pd new file mode 100644 index 0000000000..956269f4da --- /dev/null +++ b/ceammc/ext/tests/hoa_test_13.pd @@ -0,0 +1,8 @@ +#N canvas 477 196 218 223 12; +#X obj 58 45 hoa.in~; +#X obj 58 118 hoa.out~; +#X obj 133 45 hoa.in~ 1; +#X obj 58 81 *~; +#X connect 0 0 3 0; +#X connect 2 0 3 1; +#X connect 3 0 1 0; diff --git a/ceammc/ext/tests/hoa_test_13a.pd b/ceammc/ext/tests/hoa_test_13a.pd new file mode 100644 index 0000000000..761e97d116 --- /dev/null +++ b/ceammc/ext/tests/hoa_test_13a.pd @@ -0,0 +1,8 @@ +#N canvas 477 196 218 223 12; +#X obj 58 45 hoa.in~; +#X obj 58 118 hoa.out~; +#X obj 58 81 *~; +#X obj 133 45 hoa.in~ 2; +#X connect 0 0 2 0; +#X connect 2 0 1 0; +#X connect 3 0 2 1; diff --git a/ceammc/ext/tests/hoa_test_13b.pd b/ceammc/ext/tests/hoa_test_13b.pd new file mode 100644 index 0000000000..20b7cb255f --- /dev/null +++ b/ceammc/ext/tests/hoa_test_13b.pd @@ -0,0 +1,12 @@ +#N canvas 477 196 290 223 12; +#X obj 58 45 hoa.in~; +#X obj 58 138 hoa.out~; +#X obj 58 81 *~; +#X obj 133 45 hoa.in~ 2; +#X obj 58 107 +~ 0; +#X obj 213 45 hoa.in; +#X connect 0 0 2 0; +#X connect 2 0 4 0; +#X connect 3 0 2 1; +#X connect 4 0 1 0; +#X connect 5 0 4 1; diff --git a/ceammc/ext/tests/test_base.h b/ceammc/ext/tests/test_base.h index 891bf73f8f..65ff2a4840 100644 --- a/ceammc/ext/tests/test_base.h +++ b/ceammc/ext/tests/test_base.h @@ -30,6 +30,10 @@ #include #include +extern "C" { +#include "m_imp.h" +} + template static t_object* make_owner(const char* name) { @@ -314,8 +318,8 @@ static PdArgs mainSignalArgs(const PdArgs& args) template TestExternal::TestExternal(const char* name, const AtomList& args, bool mainSignalInlet) : T(mainSignalInlet - ? mainSignalArgs(PdArgs(args, gensym(name), make_owner(name), gensym(name))) - : PdArgs(args, gensym(name), make_owner(name), gensym(name))) + ? mainSignalArgs(PdArgs(args, gensym(name), make_owner(name), gensym(name))) + : PdArgs(args, gensym(name), make_owner(name), gensym(name))) , atom_cb_(0) { const size_t N = T::numOutlets(); @@ -323,6 +327,10 @@ TestExternal::TestExternal(const char* name, const AtomList& args, bool mainS msg_count_.assign(N, -1); data_.assign(N, DataPtrList()); T::parseProperties(); + // fix CLASS_NOINLET flag + if (T::owner() && ObjectFactory::classPointer()) { + T::owner()->te_g.g_pd->c_firstin = ObjectFactory::classPointer()->c_firstin; + } } template diff --git a/ceammc/ext/tests/test_baseobject.cpp b/ceammc/ext/tests/test_baseobject.cpp index b52413df04..2d7405e2bf 100644 --- a/ceammc/ext/tests/test_baseobject.cpp +++ b/ceammc/ext/tests/test_baseobject.cpp @@ -98,7 +98,7 @@ TEST_CASE("BaseObject", "[ceammc::BaseObject]") { BaseObject b(PdArgs(L(), gensym("testname"), 0, gensym("testname"))); REQUIRE(b.owner() == 0); - REQUIRE(b.className() == "testname"); + REQUIRE(b.className() == gensym("testname")); REQUIRE(b.receive() == 0); REQUIRE(b.numOutlets() == 0); REQUIRE(b.numInlets() == 0); diff --git a/ceammc/ext/tests/test_canvas.cpp b/ceammc/ext/tests/test_canvas.cpp index 76a09a141b..67e5dcc7b9 100644 --- a/ceammc/ext/tests/test_canvas.cpp +++ b/ceammc/ext/tests/test_canvas.cpp @@ -19,8 +19,12 @@ using namespace ceammc; +extern int sys_verbose; + TEST_CASE("Canvas", "[ceammc::Canvas]") { + test::pdPrintToStdError(); + SECTION("utils") { SECTION("name") @@ -30,6 +34,10 @@ TEST_CASE("Canvas", "[ceammc::Canvas]") CanvasPtr cnv = PureData::instance().createTopCanvas("test"); REQUIRE(canvas_info_name(cnv->pd_canvas()) == gensym("test")); + REQUIRE(cnv->name() == gensym("test")); + + Canvas null(nullptr); + REQUIRE(null.name() == &s_); } SECTION("dir") @@ -63,7 +71,7 @@ TEST_CASE("Canvas", "[ceammc::Canvas]") SECTION("paths") { - REQUIRE(canvas_info_paths(0) == L()); + REQUIRE(canvas_info_paths(nullptr) == L()); CanvasPtr cnv = PureData::instance().createTopCanvas("patch"); REQUIRE(canvas_info_paths(cnv->pd_canvas()) == L()); @@ -80,6 +88,10 @@ TEST_CASE("Canvas", "[ceammc::Canvas]") CanvasPtr cnv = PureData::instance().createTopCanvas("patch"); REQUIRE(canvas_info_is_root(cnv->pd_canvas())); + REQUIRE(cnv->owner() == nullptr); + + Canvas null(nullptr); + REQUIRE(null.owner() == nullptr); } SECTION("is abstraction") @@ -116,5 +128,102 @@ TEST_CASE("Canvas", "[ceammc::Canvas]") CanvasPtr cnv2 = PureData::instance().createTopCanvas(TEST_DATA_DIR "/patch2", LX(1, 2, 3)); REQUIRE(canvas_info_args(cnv2->pd_canvas()) == LX(1, 2, 3)); } + + SECTION("createObject") + { + CanvasPtr cnv = PureData::instance().createTopCanvas("patch"); + REQUIRE(cnv->objectList().empty()); + + auto pplus = cnv->createObject("+", LF(10)); + REQUIRE(pplus); + REQUIRE(pplus->numInlets() == 2); + REQUIRE(pplus->numOutlets() == 1); + // not creates patchable object + REQUIRE(cnv->objectList().size() == 0); + + cnv->createPdObject(20, 30, gensym("osc~"), LF(1000)); + + REQUIRE(cnv->objectList().size() == 1); + REQUIRE(cnv->objectList().front()->te_g.g_pd->c_name == gensym("osc~")); + REQUIRE(cnv->findIf([](t_gobj* x) { return x->g_pd->c_name == gensym("osc~"); })); + REQUIRE_FALSE(cnv->findIf([](t_gobj* x) { return x->g_pd->c_name == gensym("osc12~"); })); + REQUIRE(cnv->findIf([](t_object* x) { return x->te_g.g_pd->c_name == gensym("osc~"); })); + REQUIRE_FALSE(cnv->findIf([](t_object* x) { return x->te_g.g_pd->c_name == gensym("osc12~"); })); + REQUIRE(cnv->findObjectByClassName(gensym("osc~")).size() == 1); + + // NULL + CanvasPtr null = std::make_shared(nullptr); + REQUIRE_FALSE(null->createObject("+", LF(10))); + REQUIRE(null->objectList().empty()); + null->createPdObject(20, 30, gensym("osc~"), LF(1000)); + REQUIRE(null->objectList().empty()); + REQUIRE_FALSE(null->findIf([](t_gobj* x) { return x->g_pd->c_name == gensym("osc~"); })); + REQUIRE(null->findObjectByClassName(gensym("osc~")).empty()); + REQUIRE_FALSE(null->findIf([](t_object* x) { return x->te_g.g_pd->c_name == gensym("osc~"); })); + REQUIRE_FALSE(null->findIf([](t_object* x) { return x->te_g.g_pd->c_name == gensym("osc12~"); })); + } + + SECTION("connect") + { + CanvasPtr cnv = PureData::instance().createTopCanvas("patch2"); + REQUIRE(cnv->objectList().empty()); + + cnv->createPdObject(20, 30, gensym("sig~"), LF(1000)); + cnv->createPdObject(20, 60, gensym("osc~"), LF(2000)); + + auto ol = cnv->objectList(); + REQUIRE(ol.size() == 2); + REQUIRE(cnv->connect((t_object*)ol[0], 0, (t_object*)ol[1], 0)); + } + + SECTION("createArray") + { + CanvasPtr cnv = PureData::instance().createTopCanvas("patch3"); + REQUIRE(cnv->objectList().empty()); + + auto a1 = cnv->createArray("array1", 20); + REQUIRE(a1); + REQUIRE(a1->name() == "array1"); + REQUIRE(a1->size() == 20); + REQUIRE(cnv->objectList().empty()); + } + + SECTION("createAbstraction") + { + sys_verbose = 10; + + CanvasPtr cnv = PureData::instance().createTopCanvas(TEST_DATA_DIR "/patch3"); + REQUIRE(cnv); + cnv->createPdObject(10, 10, gensym("declare"), LA("-stdpath", TEST_DATA_DIR)); + REQUIRE(cnv->objectList().size() == 1); + REQUIRE(canvas_info_paths(cnv->pd_canvas()) == LA(TEST_DATA_DIR)); + + auto pabs = cnv->createAbstraction(10, 20, gensym("test_canvas_01"), LA(10, 20, 30)); + REQUIRE(pabs); + REQUIRE(cnv->objectList().size() == 2); + REQUIRE(canvas_info_rect(pabs) == t_rect({ 0, 0, 0, 0 })); + REQUIRE(Canvas(pabs).owner()); + REQUIRE(Canvas(pabs).owner() == cnv->pd_canvas()); + REQUIRE(canvas_info_is_abstraction(pabs)); + REQUIRE_FALSE(canvas_info_is_root(pabs)); + REQUIRE(canvas_info_args(pabs) == LF(10, 20, 30)); + + auto pabs2 = cnv->createAbstraction(10, 20, gensym("test_canvas_???"), LA(10, 20, 30)); + REQUIRE_FALSE(pabs2); + REQUIRE(cnv->objectList().size() == 3); + REQUIRE(canvas_info_args(pabs2) == L()); + + auto pabs3 = cnv->createAbstraction(10, 20, gensym("test_canvas_02"), LA(10, 20, 30)); + REQUIRE(pabs3); + REQUIRE(cnv->objectList().size() == 4); + auto bbox3 = canvas_info_rect(pabs3); + REQUIRE(bbox3.x == 100); + REQUIRE(bbox3.y == 100); + REQUIRE(bbox3.w == 85); + REQUIRE(bbox3.h == 60); + + Canvas null(nullptr); + REQUIRE_FALSE(null.createAbstraction(10, 20, gensym("test_canvas_02"))); + } } } diff --git a/ceammc/ext/tests/test_canvas_01.pd b/ceammc/ext/tests/test_canvas_01.pd new file mode 100644 index 0000000000..ae139287e4 --- /dev/null +++ b/ceammc/ext/tests/test_canvas_01.pd @@ -0,0 +1,10 @@ +#N canvas 0 23 700 500 12; +#X obj 222 56 inlet; +#X obj 222 234 outlet; +#X obj 294 234 outlet; +#X obj 222 142 f \$1; +#X obj 294 143 f \$2; +#X connect 0 0 3 0; +#X connect 0 0 4 0; +#X connect 3 0 1 0; +#X connect 4 0 2 0; diff --git a/ceammc/ext/tests/test_canvas_02.pd b/ceammc/ext/tests/test_canvas_02.pd new file mode 100644 index 0000000000..6341f5027b --- /dev/null +++ b/ceammc/ext/tests/test_canvas_02.pd @@ -0,0 +1,4 @@ +#N canvas 324 151 700 500 12; +#X obj 216 144 inlet; +#X obj 216 249 outlet; +#X coords 0 -1 1 1 85 60 1 100 100; diff --git a/ceammc/ext/tests/test_convert.cpp b/ceammc/ext/tests/test_convert.cpp index cc6d162955..b35da78e2a 100644 --- a/ceammc/ext/tests/test_convert.cpp +++ b/ceammc/ext/tests/test_convert.cpp @@ -570,4 +570,158 @@ TEST_CASE("convert", "[PureData]") REQUIRE(freq2midi(0.f) == Approx(-1)); REQUIRE(freq2midi(-10.f) == Approx(-1)); } + + SECTION("rad/phase/degrees") + { + REQUIRE(phase2rad(0) == Approx(0)); + REQUIRE(phase2rad(0.25) == Approx(M_PI_2)); + REQUIRE(phase2rad(0.5) == Approx(M_PI)); + REQUIRE(phase2rad(1) == Approx(0)); + REQUIRE(phase2rad(0) == Approx(0)); + REQUIRE(phase2rad(0.25) == Approx(M_PI_2)); + REQUIRE(phase2rad(0.5) == Approx(M_PI)); + REQUIRE(phase2rad(1) == Approx(0)); + REQUIRE(phase2rad(1000) == Approx(0)); + REQUIRE(phase2rad(1000.125) == Approx(M_PI_4)); + REQUIRE(phase2rad(-1000) == Approx(0)); + + REQUIRE(phase2degree(0) == Approx(0)); + REQUIRE(phase2degree(0.25) == Approx(90)); + REQUIRE(phase2degree(5.5) == Approx(180)); + REQUIRE(phase2degree(-0.25) == Approx(270)); + REQUIRE(degree2rad(0) == Approx(0)); + REQUIRE(degree2rad(90) == Approx(M_PI_2)); + REQUIRE(degree2rad(-180) == Approx(M_PI)); + + // degree->phase->degree + REQUIRE(phase2degree(degree2phase(0)) == Approx(0)); + REQUIRE(phase2degree(degree2phase(90)) == Approx(90)); + REQUIRE(phase2degree(degree2phase(181)) == Approx(181)); + REQUIRE(phase2degree(degree2phase(272)) == Approx(272)); + REQUIRE(phase2degree(degree2phase(360)) == Approx(0)); + REQUIRE(phase2degree(degree2phase(361.1)) == Approx(1.1)); + REQUIRE(phase2degree(degree2phase(-90)) == Approx(270)); + REQUIRE(phase2degree(degree2phase(360010)) == Approx(10)); + + // phase->degree->phase + REQUIRE(degree2phase(phase2degree(0)) == Approx(0)); + REQUIRE(degree2phase(phase2degree(0.5)) == Approx(0.5)); + REQUIRE(degree2phase(phase2degree(2.1)) == Approx(0.1)); + REQUIRE(degree2phase(phase2degree(-0.4)) == Approx(0.6)); + + // rad->phase->rad + REQUIRE(phase2rad(rad2phase(0)) == Approx(0)); + REQUIRE(phase2rad(rad2phase(0.5)) == Approx(0.5)); + REQUIRE(phase2rad(rad2phase(M_PI)) == Approx(M_PI)); + REQUIRE(phase2rad(rad2phase(-M_PI)) == Approx(M_PI)); + REQUIRE(phase2rad(rad2phase(-M_PI_2)) == Approx(3 * M_PI_2)); + REQUIRE(phase2rad(rad2phase(2 * M_PI)) == Approx(0)); + + // phase->rad->phase + REQUIRE(rad2phase(phase2rad(0)) == Approx(0)); + REQUIRE(rad2phase(phase2rad(0.5)) == Approx(0.5)); + REQUIRE(rad2phase(phase2rad(1)) == Approx(0)); + REQUIRE(rad2phase(phase2rad(1.1)) == Approx(0.1)); + + // rad->degree->rad + REQUIRE(degree2rad(rad2degree(0)) == Approx(0)); + REQUIRE(degree2rad(rad2degree(M_PI)) == Approx(M_PI)); + REQUIRE(degree2rad(rad2degree(2 * M_PI)) == Approx(0)); + REQUIRE(degree2rad(rad2degree(-M_PI)) == Approx(M_PI)); + REQUIRE(degree2rad(rad2degree(-M_PI_2)) == Approx(3 * M_PI_2)); + + // degree->rad->degree + REQUIRE(rad2degree(degree2rad(0)) == Approx(0)); + REQUIRE(rad2degree(degree2rad(90)) == Approx(90)); + REQUIRE(rad2degree(degree2rad(359.9)) == Approx(359.9)); + REQUIRE(rad2degree(degree2rad(360)) == Approx(0)); + REQUIRE(rad2degree(degree2rad(360000)) == Approx(0)); + REQUIRE(rad2degree(degree2rad(-179)) == Approx(181)); + } + + SECTION("wrapeFloatMax") + { + using namespace ceammc; + REQUIRE(wrapFloatMax(0, 2.5) == Approx(0)); + REQUIRE(wrapFloatMax(2, 2.5) == Approx(2)); + REQUIRE(wrapFloatMax(2.49, 2.5) == Approx(2.49)); + REQUIRE(wrapFloatMax(2.5, 2.5) == Approx(0)); + REQUIRE(wrapFloatMax(2.51, 2.5) == Approx(0.01)); + REQUIRE(wrapFloatMax(2.51, 2.5) == Approx(0.01)); + REQUIRE(wrapFloatMax(-0.1, 2.5) == Approx(2.4)); + + REQUIRE(wrapFloatMax(0, 2.5) == Approx(0)); + REQUIRE(wrapFloatMax(2, 2.5) == Approx(2)); + REQUIRE(wrapFloatMax(2.49, 2.5) == Approx(2.49)); + REQUIRE(wrapFloatMax(2.5, 2.5) == Approx(0)); + REQUIRE(wrapFloatMax(2.51, 2.5) == Approx(0.01)); + REQUIRE(wrapFloatMax(2.51, 2.5) == Approx(0.01)); + REQUIRE(wrapFloatMax(-2500.01, 2.5) == Approx(2.49)); + REQUIRE(wrapFloatMax(2500.01, 2.5) == Approx(0.01)); + } + + SECTION("wrapFloatMinMax") + { + using namespace ceammc; + REQUIRE(wrapFloatMinMax(1.1, 1.1, 3.2) == Approx(1.1)); + REQUIRE(wrapFloatMinMax(1.2, 1.1, 3.2) == Approx(1.2)); + REQUIRE(wrapFloatMinMax(3.1, 1.1, 3.2) == Approx(3.1)); + REQUIRE(wrapFloatMinMax(3.2, 1.1, 3.2) == Approx(1.1)); + REQUIRE(wrapFloatMinMax(1.0, 1.1, 3.2) == Approx(3.1)); + + REQUIRE(wrapFloatMinMax(-1, -1, 1) == Approx(-1)); + REQUIRE(wrapFloatMinMax(0, -1, 1) == Approx(0)); + REQUIRE(wrapFloatMinMax(0.9, -1, 1) == Approx(0.9)); + REQUIRE(wrapFloatMinMax(1, -1, 1) == Approx(-1)); + REQUIRE(wrapFloatMinMax(1.1, -1, 1) == Approx(-0.9)); + REQUIRE(wrapFloatMinMax(-1.1, -1, 1) == Approx(0.9)); + } + + SECTION("clip") + { + using namespace ceammc; + REQUIRE(clip(-1, 0, 10) == 0); + REQUIRE(clip(0, 0, 10) == 0); + REQUIRE(clip(1, 0, 10) == 1); + REQUIRE(clip(10, 0, 10) == 10); + REQUIRE(clip(11, 0, 10) == 10); + + REQUIRE((clip(-2)) == -1); + REQUIRE((clip(-1)) == -1); + REQUIRE((clip(0)) == 0); + REQUIRE((clip(1)) == 1); + REQUIRE((clip(2)) == 1); + + REQUIRE((clip(-1.1)) == -1); + REQUIRE((clip(-1)) == -1); + REQUIRE((clip(0.1f)) == 0.1f); + REQUIRE((clip(1)) == 1); + REQUIRE((clip(1.1)) == 1); + } + + SECTION("clip01") + { + using namespace ceammc; + REQUIRE(clip01(-1.1) == 0); + REQUIRE(clip01(-1) == 0); + REQUIRE(clip01(0) == 0); + REQUIRE(clip01(0.1f) == 0.1f); + REQUIRE(clip01(1) == 1); + REQUIRE(clip01(1.1) == 1); + } + + SECTION("lin2lin template") + { + REQUIRE((lin2lin(-0.5, 4, 2)) == Approx(5)); + REQUIRE((lin2lin(0, 4, 2)) == Approx(4)); + REQUIRE((lin2lin(0.5, 4, 2)) == Approx(3)); + REQUIRE((lin2lin(1, 4, 2)) == Approx(2)); + REQUIRE((lin2lin(1.5, 4, 2)) == Approx(1)); + + REQUIRE((lin2lin_clip(-0.5, 4, 2)) == Approx(4)); + REQUIRE((lin2lin_clip(0, 4, 2)) == Approx(4)); + REQUIRE((lin2lin_clip(0.5, 4, 2)) == Approx(3)); + REQUIRE((lin2lin_clip(1, 4, 2)) == Approx(2)); + REQUIRE((lin2lin_clip(1.5, 4, 2)) == Approx(2)); + } } diff --git a/ceammc/ext/tests/test_ext_base_function.cpp b/ceammc/ext/tests/test_ext_base_function.cpp index 72c7a0a0a5..eb67d32952 100644 --- a/ceammc/ext/tests/test_ext_base_function.cpp +++ b/ceammc/ext/tests/test_ext_base_function.cpp @@ -68,13 +68,13 @@ TEST_CASE("function", "[externals]") SECTION("process") { function_setup(); - ExternalOutput::setup(); + LogExternalOutput::setup(); pd::External func("function", LA("sqrt")); REQUIRE(!func.isNull()); pd::External sqrt("sqrt"); REQUIRE(!sqrt.isNull()); - ExternalOutput out; + LogExternalOutput out; REQUIRE(func.connectTo(1, sqrt, 0)); REQUIRE(sqrt.connectTo(0, func, 1)); diff --git a/ceammc/ext/tests/test_ext_base_prop.cpp b/ceammc/ext/tests/test_ext_base_prop.cpp new file mode 100644 index 0000000000..459671eaa7 --- /dev/null +++ b/ceammc/ext/tests/test_ext_base_prop.cpp @@ -0,0 +1,316 @@ +/***************************************************************************** + * Copyright 2019 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#include "../base/prop.h" +#include "../base/prop_declare.h" +#include "test_external.h" + +PD_COMPLETE_TEST_SETUP(BaseProp, base, prop) + +TEST_CASE("prop", "[externals]") +{ + pd_test_init(); + setup_prop_declare(); + test::pdPrintToStdError(); + + SECTION("construct") + { + TestExtBaseProp t("prop", LA("@t")); + REQUIRE(t.numInlets() == 1); + REQUIRE(t.numOutlets() == 1); + + t.sendBang(); + REQUIRE(!t.hasOutput()); + + t.call("dump"); + } + + SECTION("float") + { + pd::External decl0("prop.declare", LA("f1", "@default", 10)); + TestExtBaseProp p0("prop", LA("@f1")); + TestExtBaseProp p1("prop", LA("@f1")); + + p0.sendBang(); + REQUIRE(p0.hasOutput()); + REQUIRE(p0.outputFloatAt(0) == 10); + + p0.sendFloat(2); + REQUIRE(p0.hasOutput()); + REQUIRE(p0.outputFloatAt(0) == 2); + REQUIRE(p1.hasOutput()); + REQUIRE(p1.outputFloatAt(0) == 2); + + p1.sendFloat(8); + REQUIRE(p0.hasOutput()); + REQUIRE(p0.outputFloatAt(0) == 8); + REQUIRE(p1.hasOutput()); + REQUIRE(p1.outputFloatAt(0) == 8); + + p0.clearAll(); + p1.clearAll(); + + // no symbol reaction + p0.sendSymbol(gensym("ABC")); + REQUIRE_FALSE(p0.hasOutput()); + REQUIRE_FALSE(p1.hasOutput()); + + // no list reaction + p0.sendList(LF(1, 2, 3)); + REQUIRE_FALSE(p0.hasOutput()); + REQUIRE_FALSE(p1.hasOutput()); + + // but react on list with single float + p0.sendList(LF(500)); + REQUIRE(p0.hasOutput()); + REQUIRE(p0.outputFloatAt(0) == 500); + REQUIRE(p1.hasOutput()); + REQUIRE(p1.outputFloatAt(0) == 500); + + p0.call("default"); + REQUIRE(p0.hasOutput()); + REQUIRE(p0.outputFloatAt(0) == 10); + REQUIRE(p1.hasOutput()); + REQUIRE(p1.outputFloatAt(0) == 10); + } + + SECTION("symbol") + { + pd::External decl0("prop.declare", LA("s1", "@s", "@default", "a", "@enum", "a", "b", "c")); + TestExtBaseProp p0("prop", LA("@s1")); + TestExtBaseProp p1("prop", LA("@s1")); + + p0.sendBang(); + REQUIRE(p0.hasOutput()); + REQUIRE(p0.outputSymbolAt(0) == gensym("a")); + + p0.clearAll(); + p1.clearAll(); + + p0.sendSymbol(gensym("d")); + REQUIRE_FALSE(p0.hasOutput()); + REQUIRE_FALSE(p1.hasOutput()); + + p1.sendSymbol(gensym("b")); + REQUIRE(p0.hasOutput()); + REQUIRE(p0.outputSymbolAt(0) == gensym("b")); + REQUIRE(p1.hasOutput()); + REQUIRE(p1.outputSymbolAt(0) == gensym("b")); + + p0.clearAll(); + p1.clearAll(); + + // no float reaction + p0.sendFloat(1000); + REQUIRE_FALSE(p0.hasOutput()); + REQUIRE_FALSE(p1.hasOutput()); + + // no list reaction + p0.sendList(LF(1, 2, 3)); + REQUIRE_FALSE(p0.hasOutput()); + REQUIRE_FALSE(p1.hasOutput()); + + // but react on list with single float + p0.sendList(LA("c")); + REQUIRE(p0.hasOutput()); + REQUIRE(p0.outputSymbolAt(0) == gensym("c")); + REQUIRE(p1.hasOutput()); + REQUIRE(p1.outputSymbolAt(0) == gensym("c")); + + p1.call("default"); + REQUIRE(p0.hasOutput()); + REQUIRE(p0.outputSymbolAt(0) == gensym("a")); + REQUIRE(p1.hasOutput()); + REQUIRE(p1.outputSymbolAt(0) == gensym("a")); + } + + SECTION("list") + { + pd::External decl0("prop.declare", LA("l1", "@l", "@default", 3, 2, 1)); + TestExtBaseProp p0("prop", LA("@l1")); + TestExtBaseProp p1("prop", LA("@l1")); + + p0.sendBang(); + REQUIRE(p0.hasOutput()); + REQUIRE(p0.outputListAt(0) == LF(3, 2, 1)); + + p0.clearAll(); + p1.clearAll(); + + p0.sendList({ 1, 2, 3 }); + REQUIRE(p0.hasOutput()); + REQUIRE(p0.outputListAt(0) == LF(1, 2, 3)); + REQUIRE(p1.hasOutput()); + REQUIRE(p1.outputListAt(0) == LF(1, 2, 3)); + + p0.clearAll(); + p1.clearAll(); + + // no float reaction + p0.sendFloat(1000); + REQUIRE_FALSE(p0.hasOutput()); + REQUIRE_FALSE(p1.hasOutput()); + + // no symbol reaction + p0.sendSymbol(gensym("ABC")); + REQUIRE_FALSE(p0.hasOutput()); + REQUIRE_FALSE(p1.hasOutput()); + + p1.call("default"); + REQUIRE(p0.hasOutput()); + REQUIRE(p0.outputListAt(0) == LF(3, 2, 1)); + REQUIRE(p1.hasOutput()); + REQUIRE(p1.outputListAt(0) == LF(3, 2, 1)); + } + + SECTION("int") + { + pd::External decl0("prop.declare", LA("i1", "@i", "@default", 10, "@min", -100)); + TestExtBaseProp p0("prop", LA("@i1")); + TestExtBaseProp p1("prop", LA("@i1")); + + p0.sendBang(); + REQUIRE(p0.hasOutput()); + REQUIRE(p0.outputFloatAt(0) == 10); + + p0.clearAll(); + p1.clearAll(); + + p0.sendFloat(1.1); + REQUIRE(p0.hasOutput()); + REQUIRE(p0.outputFloatAt(0) == 1); + REQUIRE(p1.hasOutput()); + REQUIRE(p1.outputFloatAt(0) == 1); + + p0.clearAll(); + p1.clearAll(); + + p1.sendFloat(-101); + REQUIRE(p0.hasOutput()); + REQUIRE(p0.outputFloatAt(0) == -100); + REQUIRE(p1.hasOutput()); + REQUIRE(p1.outputFloatAt(0) == -100); + + p0.clearAll(); + p1.clearAll(); + + // no symbol reaction + p0.sendSymbol(gensym("ABC")); + REQUIRE_FALSE(p0.hasOutput()); + REQUIRE_FALSE(p1.hasOutput()); + + // no list reaction + p0.sendList(LF(1, 2, 3)); + REQUIRE_FALSE(p0.hasOutput()); + REQUIRE_FALSE(p1.hasOutput()); + + // but react on list with single float + p0.sendList(LF(500)); + REQUIRE(p0.hasOutput()); + REQUIRE(p0.outputFloatAt(0) == 500); + REQUIRE(p1.hasOutput()); + REQUIRE(p1.outputFloatAt(0) == 500); + + p0.call("default"); + REQUIRE(p0.hasOutput()); + REQUIRE(p0.outputFloatAt(0) == 10); + REQUIRE(p1.hasOutput()); + REQUIRE(p1.outputFloatAt(0) == 10); + } + + SECTION("bool") + { + pd::External decl0("prop.declare", LA("b1", "@b", "@default", 1)); + TestExtBaseProp p0("prop", LA("@b1")); + TestExtBaseProp p1("prop", LA("@b1")); + + p0.sendBang(); + REQUIRE(p0.hasOutput()); + REQUIRE(p0.outputFloatAt(0) == 1); + + p0.clearAll(); + p1.clearAll(); + + p0.sendFloat(1.1); + REQUIRE_FALSE(p0.hasOutput()); + REQUIRE_FALSE(p1.hasOutput()); + p1.sendFloat(-1); + REQUIRE_FALSE(p0.hasOutput()); + REQUIRE_FALSE(p1.hasOutput()); + + p0.sendFloat(1); + REQUIRE(p0.hasOutput()); + REQUIRE(p0.outputFloatAt(0) == 1); + REQUIRE(p1.hasOutput()); + REQUIRE(p1.outputFloatAt(0) == 1); + + p0.clearAll(); + p1.clearAll(); + + p1.sendFloat(0); + REQUIRE(p0.hasOutput()); + REQUIRE(p0.outputFloatAt(0) == 0); + REQUIRE(p1.hasOutput()); + REQUIRE(p1.outputFloatAt(0) == 0); + + p0.clearAll(); + p1.clearAll(); + + p0.sendSymbol(gensym("true")); + REQUIRE(p0.hasOutput()); + REQUIRE(p0.outputFloatAt(0) == 1); + REQUIRE(p1.hasOutput()); + REQUIRE(p1.outputFloatAt(0) == 1); + + p0.clearAll(); + p1.clearAll(); + + p0.sendSymbol(gensym("false")); + REQUIRE(p0.hasOutput()); + REQUIRE(p0.outputFloatAt(0) == 0); + REQUIRE(p1.hasOutput()); + REQUIRE(p1.outputFloatAt(0) == 0); + + p0.clearAll(); + p1.clearAll(); + + // no other symbol reaction + p0.sendSymbol(gensym("???")); + REQUIRE_FALSE(p0.hasOutput()); + REQUIRE_FALSE(p1.hasOutput()); + + // no list reaction + p0.sendList(LF(1, 2, 3)); + REQUIRE_FALSE(p0.hasOutput()); + REQUIRE_FALSE(p1.hasOutput()); + + // but react on list with single value + p0.sendList(LF(1)); + REQUIRE(p0.hasOutput()); + REQUIRE(p0.outputFloatAt(0) == 1); + REQUIRE(p1.hasOutput()); + REQUIRE(p1.outputFloatAt(0) == 1); + + p0.sendList(LA("false")); + REQUIRE(p0.hasOutput()); + REQUIRE(p0.outputFloatAt(0) == 0); + REQUIRE(p1.hasOutput()); + REQUIRE(p1.outputFloatAt(0) == 0); + + p0.call("default"); + REQUIRE(p0.hasOutput()); + REQUIRE(p0.outputFloatAt(0) == 1); + REQUIRE(p1.hasOutput()); + REQUIRE(p1.outputFloatAt(0) == 1); + } +} diff --git a/ceammc/ext/tests/test_ext_base_prop_declare.cpp b/ceammc/ext/tests/test_ext_base_prop_declare.cpp index 245ccdba0d..42ee64dc66 100644 --- a/ceammc/ext/tests/test_ext_base_prop_declare.cpp +++ b/ceammc/ext/tests/test_ext_base_prop_declare.cpp @@ -25,7 +25,7 @@ static const long IMAX = std::numeric_limits::max(); class TestPdAbstraction : public pd::External { typedef std::map ListenerMap; - std::vector outs_; + std::vector outs_; ListenerMap listeners_; public: @@ -35,7 +35,7 @@ class TestPdAbstraction : public pd::External { REQUIRE(object()); for (size_t i = 0; i < numOutlets(); i++) { - ExternalOutput* e = new ExternalOutput; + LogExternalOutput* e = new LogExternalOutput; connectTo(i, e->object(), 0); outs_.push_back(e); } @@ -99,10 +99,10 @@ TEST_CASE("radio", "[externals]") REQUIRE(t->name() == SYM("@default")); fn = t->fullName(); - REQUIRE(PropertyStorage::storage().contains(fn->s_name)); + REQUIRE(PropertyStorage::storage().contains(fn)); } - REQUIRE_FALSE(PropertyStorage::storage().contains(fn->s_name)); + REQUIRE_FALSE(PropertyStorage::storage().contains(fn)); { // invalid name @@ -203,9 +203,9 @@ TEST_CASE("radio", "[externals]") { // symbol type TestExtPropDeclare t("prop.declare", LA("s", "@s", "@enum", "A", "B", "C")); - auto p = PropertyStorage::storage().acquire(t->fullName()->s_name); + auto p = PropertyStorage::storage().acquire(t->fullName()); REQUIRE(p->enumValues() == LA("", "A", "B", "C")); - PropertyStorage::storage().release(t->fullName()->s_name); + PropertyStorage::storage().release(t->fullName()); } SECTION("min/max float") @@ -213,49 +213,49 @@ TEST_CASE("radio", "[externals]") { // float default TestExtPropDeclare t("prop.declare", LA("f")); - auto p = PropertyStorage::storage().acquire(t->fullName()->s_name); + auto p = PropertyStorage::storage().acquire(t->fullName()); REQUIRE(p->floatRange() == std::make_pair(FMIN, FMAX)); - PropertyStorage::storage().release(t->fullName()->s_name); + PropertyStorage::storage().release(t->fullName()); } { // float min TestExtPropDeclare t("prop.declare", LA("f", "@min", 2.1)); - auto p = PropertyStorage::storage().acquire(t->fullName()->s_name); + auto p = PropertyStorage::storage().acquire(t->fullName()); auto r = p->floatRange(); REQUIRE(r.first == Approx(2.1)); REQUIRE(r.second == FMAX); - PropertyStorage::storage().release(t->fullName()->s_name); + PropertyStorage::storage().release(t->fullName()); } { // float max TestExtPropDeclare t("prop.declare", LA("f", "@max", 16.1)); - auto p = PropertyStorage::storage().acquire(t->fullName()->s_name); + auto p = PropertyStorage::storage().acquire(t->fullName()); auto r = p->floatRange(); REQUIRE(r.second == Approx(16.1)); REQUIRE(r.first == FMIN); - PropertyStorage::storage().release(t->fullName()->s_name); + PropertyStorage::storage().release(t->fullName()); } { // float both TestExtPropDeclare t("prop.declare", LA("f", "@max", 16.1, "@min", 1.1)); - auto p = PropertyStorage::storage().acquire(t->fullName()->s_name); + auto p = PropertyStorage::storage().acquire(t->fullName()); auto r = p->floatRange(); REQUIRE(r.second == Approx(16.1)); REQUIRE(r.first == Approx(1.1)); - PropertyStorage::storage().release(t->fullName()->s_name); + PropertyStorage::storage().release(t->fullName()); } { // float both invalid TestExtPropDeclare t("prop.declare", LA("f", "@min", 16.1, "@max", 1.1)); - auto p = PropertyStorage::storage().acquire(t->fullName()->s_name); + auto p = PropertyStorage::storage().acquire(t->fullName()); auto r = p->floatRange(); REQUIRE(r.second == Approx(16.1)); REQUIRE(r.first == Approx(1.1)); - PropertyStorage::storage().release(t->fullName()->s_name); + PropertyStorage::storage().release(t->fullName()); } } @@ -264,41 +264,41 @@ TEST_CASE("radio", "[externals]") { // int default TestExtPropDeclare t("prop.declare", LA("i", "@i")); - auto p = PropertyStorage::storage().acquire(t->fullName()->s_name); + auto p = PropertyStorage::storage().acquire(t->fullName()); REQUIRE(p->intRange() == std::make_pair(IMIN, IMAX)); - PropertyStorage::storage().release(t->fullName()->s_name); + PropertyStorage::storage().release(t->fullName()); } { // int min TestExtPropDeclare t("prop.declare", LA("i", "@i", "@min", 2)); - auto p = PropertyStorage::storage().acquire(t->fullName()->s_name); + auto p = PropertyStorage::storage().acquire(t->fullName()); REQUIRE(p->intRange() == std::make_pair(long(2), IMAX)); - PropertyStorage::storage().release(t->fullName()->s_name); + PropertyStorage::storage().release(t->fullName()); } { // int max TestExtPropDeclare t("prop.declare", LA("i", "@i", "@max", 20)); - auto p = PropertyStorage::storage().acquire(t->fullName()->s_name); + auto p = PropertyStorage::storage().acquire(t->fullName()); REQUIRE(p->intRange() == std::make_pair(IMIN, long(20))); - PropertyStorage::storage().release(t->fullName()->s_name); + PropertyStorage::storage().release(t->fullName()); } { // int both TestExtPropDeclare t("prop.declare", LA("i", "@i", "@max", 20, "@min", -2)); - auto p = PropertyStorage::storage().acquire(t->fullName()->s_name); + auto p = PropertyStorage::storage().acquire(t->fullName()); REQUIRE(p->intRange() == std::make_pair(long(-2), long(20))); - PropertyStorage::storage().release(t->fullName()->s_name); + PropertyStorage::storage().release(t->fullName()); } { // int both invalid order TestExtPropDeclare t("prop.declare", LA("i", "@i", "@max", -2, "@min", 20)); - auto p = PropertyStorage::storage().acquire(t->fullName()->s_name); + auto p = PropertyStorage::storage().acquire(t->fullName()); REQUIRE(p->intRange() == std::make_pair(long(-2), long(20))); - PropertyStorage::storage().release(t->fullName()->s_name); + PropertyStorage::storage().release(t->fullName()); } } diff --git a/ceammc/ext/tests/test_ext_conv_list2props.cpp b/ceammc/ext/tests/test_ext_conv_list2props.cpp index 7bc51fdd3e..bd575a2aff 100644 --- a/ceammc/ext/tests/test_ext_conv_list2props.cpp +++ b/ceammc/ext/tests/test_ext_conv_list2props.cpp @@ -26,7 +26,7 @@ TEST_CASE("conv.list2props", "[externals]") { TestConvList2Props t("list->props"); REQUIRE(t.numInlets() == 1); - REQUIRE(t.numOutlets() == 1); + REQUIRE(t.numOutlets() == 2); } SECTION("list") diff --git a/ceammc/ext/tests/test_ext_data_dict.cpp b/ceammc/ext/tests/test_ext_data_dict.cpp index 0a86b69b01..90b99ef185 100644 --- a/ceammc/ext/tests/test_ext_data_dict.cpp +++ b/ceammc/ext/tests/test_ext_data_dict.cpp @@ -186,12 +186,12 @@ TEST_CASE("data.mlist", "[externals]") WHEN_CALL(t, write); REQUIRE_SIZE(t, 4); - WHEN_CALL_N(t, write, TEST_DATA_DIR "/data_dict.json"); - REQUIRE(platform::path_exists(TEST_DATA_DIR "/data_dict.json")); + WHEN_CALL_N(t, write, TEST_BIN_DIR "/data_dict.json"); + REQUIRE(platform::path_exists(TEST_BIN_DIR "/data_dict.json")); // read to other dict TestDataDict t2("data.dict"); - WHEN_CALL_N(t2, read, TEST_DATA_DIR "/data_dict.json"); + WHEN_CALL_N(t2, read, TEST_BIN_DIR "/data_dict.json"); REQUIRE_SIZE(t2, 4); REQUIRE_CONTAINS_ATOM(t2, 1, 2000); REQUIRE_CONTAINS_ATOM(t2, "float", 1000); @@ -199,19 +199,19 @@ TEST_CASE("data.mlist", "[externals]") REQUIRE_CONTAINS_LIST(t2, "list", LF(1, 2, 3)); // remove json file - REQUIRE(platform::remove(TEST_DATA_DIR "/data_dict.json")); + REQUIRE(platform::remove(TEST_BIN_DIR "/data_dict.json")); // clear source WHEN_CALL(t, clear); // write empty JSON file - WHEN_CALL_N(t, write, TEST_DATA_DIR "/data_dict.json"); - REQUIRE(platform::path_exists(TEST_DATA_DIR "/data_dict.json")); + WHEN_CALL_N(t, write, TEST_BIN_DIR "/data_dict.json"); + REQUIRE(platform::path_exists(TEST_BIN_DIR "/data_dict.json")); // read empty JSON file - WHEN_CALL_N(t2, read, TEST_DATA_DIR "/data_dict.json"); + WHEN_CALL_N(t2, read, TEST_BIN_DIR "/data_dict.json"); REQUIRE_SIZE(t2, 0); - REQUIRE(platform::remove(TEST_DATA_DIR "/data_dict.json")); + REQUIRE(platform::remove(TEST_BIN_DIR "/data_dict.json")); } SECTION("ext") diff --git a/ceammc/ext/tests/test_ext_data_global_list.cpp b/ceammc/ext/tests/test_ext_data_global_list.cpp index 29948c4760..c607ff7b9c 100644 --- a/ceammc/ext/tests/test_ext_data_global_list.cpp +++ b/ceammc/ext/tests/test_ext_data_global_list.cpp @@ -42,9 +42,9 @@ TEST_CASE("[global.list]", "[externals]") TestExtGlobalList t3("global.list", LA("a2")); REQUIRE(t2.object()); - REQUIRE_PROPERTY_FLOAT(t1, @obj_refs, 2); - REQUIRE_PROPERTY_FLOAT(t1, @obj_refs, 2); - REQUIRE_PROPERTY_FLOAT(t3, @obj_refs, 1); + REQUIRE_PROPERTY_FLOAT(t1, @.obj_refs, 2); + REQUIRE_PROPERTY_FLOAT(t1, @.obj_refs, 2); + REQUIRE_PROPERTY_FLOAT(t3, @.obj_refs, 1); t1 << BANG; REQUIRE(t1.outputListAt(0) == L()); diff --git a/ceammc/ext/tests/test_ext_data_global_set.cpp b/ceammc/ext/tests/test_ext_data_global_set.cpp index 82f31bc096..36bea82c1f 100644 --- a/ceammc/ext/tests/test_ext_data_global_set.cpp +++ b/ceammc/ext/tests/test_ext_data_global_set.cpp @@ -58,9 +58,9 @@ TEST_CASE("[global.set]", "[externals]") TestExtGlobalSet t3("global.set", LA("s2")); REQUIRE(t2.object()); - REQUIRE_PROPERTY_FLOAT(t1, @obj_refs, 2); - REQUIRE_PROPERTY_FLOAT(t1, @obj_refs, 2); - REQUIRE_PROPERTY_FLOAT(t3, @obj_refs, 1); + REQUIRE_PROPERTY_FLOAT(t1, @.obj_refs, 2); + REQUIRE_PROPERTY_FLOAT(t1, @.obj_refs, 2); + REQUIRE_PROPERTY_FLOAT(t3, @.obj_refs, 1); t1 << BANG; REQUIRE_EMPTY_SET(t1); diff --git a/ceammc/ext/tests/test_ext_data_list.cpp b/ceammc/ext/tests/test_ext_data_list.cpp index f89d73b4df..129d27a42e 100644 --- a/ceammc/ext/tests/test_ext_data_list.cpp +++ b/ceammc/ext/tests/test_ext_data_list.cpp @@ -26,6 +26,12 @@ REQUIRE_LIST_AT_OUTLET(0, obj, lst); \ } +#define REQUIRE_FLOAT(obj, f) \ + { \ + WHEN_SEND_BANG_TO(0, obj); \ + REQUIRE_FLOAT_AT_OUTLET(0, obj, f); \ + } + typedef TestExternal DataListTest; TEST_CASE("data.list", "[externals]") @@ -100,7 +106,7 @@ TEST_CASE("data.list", "[externals]") REQUIRE_LIST(t, LF(100, 200)); WHEN_CALL_N(t, removeAt, 1.f); - REQUIRE_LIST(t, LF(100)); + REQUIRE_FLOAT(t, 100); WHEN_CALL_N(t, removeAt, 0.f); REQUIRE_LIST(t, L()); @@ -112,7 +118,7 @@ TEST_CASE("data.list", "[externals]") REQUIRE_LIST(t, L()); WHEN_CALL_N(t, insert, 0.f, 100); - REQUIRE_LIST(t, LF(100)); + REQUIRE_FLOAT(t, 100); WHEN_CALL_N(t, insert, 0.f, 200); REQUIRE_LIST(t, LF(200, 100)); diff --git a/ceammc/ext/tests/test_ext_flow_demultiplex.cpp b/ceammc/ext/tests/test_ext_flow_demultiplex.cpp index 39d0aed6bd..ea44044e2d 100644 --- a/ceammc/ext/tests/test_ext_flow_demultiplex.cpp +++ b/ceammc/ext/tests/test_ext_flow_demultiplex.cpp @@ -167,6 +167,13 @@ TEST_CASE("flow.demultiplex", "[externals]") REQUIRE(!t.hasOutputAt(1)); REQUIRE(t.outputAnyAt(0) == LA("@index", 0.f)); + t.call("@index", LF(1)); + REQUIRE_FALSE(t.hasOutputAt(0)); + REQUIRE(t->property("@index")->get() == LF(1)); + + // + // @noprops + // TestExtFlowDemultiplex t3("flow.demultiplex", LA("@noprops")); t3.call("@index?"); REQUIRE(t3.hasOutputAt(0)); @@ -177,5 +184,10 @@ TEST_CASE("flow.demultiplex", "[externals]") REQUIRE(t3.hasOutputAt(0)); REQUIRE(!t3.hasOutputAt(1)); REQUIRE(t3.outputAnyAt(0) == LA("@size?")); + + t3.call("@index", LF(1)); + REQUIRE(t3.hasOutputAt(0)); + REQUIRE(t3.outputAnyAt(0) == LA("@index", 1)); + REQUIRE(t3->property("@index")->get() == LF(0)); } } diff --git a/ceammc/ext/tests/test_ext_flow_group.cpp b/ceammc/ext/tests/test_ext_flow_group.cpp index 3e9f7e5a3c..7dacced2b7 100644 --- a/ceammc/ext/tests/test_ext_flow_group.cpp +++ b/ceammc/ext/tests/test_ext_flow_group.cpp @@ -12,8 +12,8 @@ * this file belongs to. *****************************************************************************/ #include "../flow/flow_group.h" -#include "test_base.h" #include "catch.hpp" +#include "test_base.h" #include @@ -85,10 +85,10 @@ TEST_CASE("flow.group", "[externals]") REQUIRE_NO_MESSAGES_AT_OUTLET(0, t); WHEN_SEND_SYMBOL_TO(0, t, "B"); - REQUIRE_LIST_AT_OUTLET(0, t, LA("A")); + REQUIRE_SYMBOL_AT_OUTLET(0, t, "A"); WHEN_SEND_SYMBOL_TO(0, t, "C"); - REQUIRE_LIST_AT_OUTLET(0, t, LA("B")); + REQUIRE_SYMBOL_AT_OUTLET(0, t, "B"); } SECTION("onList") diff --git a/ceammc/ext/tests/test_ext_flow_pack.cpp b/ceammc/ext/tests/test_ext_flow_pack.cpp new file mode 100644 index 0000000000..2b0c8603eb --- /dev/null +++ b/ceammc/ext/tests/test_ext_flow_pack.cpp @@ -0,0 +1,233 @@ +/***************************************************************************** + * Copyright 2017 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#include "../data/datatype_set.h" +#include "../flow/flow_pack.h" +#include "datatype_dict.h" +#include "datatype_mlist.h" +#include "test_external.h" + +PD_COMPLETE_TEST_SETUP(FlowPack, flow, pack); + +TEST_CASE("flow.pack", "[externals]") +{ + pd_test_init(); + + SECTION("init") + { + SECTION("empty") + { + TestFlowPack t("flow.pack"); + REQUIRE(t.numInlets() == 1); + REQUIRE(t.numOutlets() == 1); + + WHEN_SEND_BANG_TO(0, t); + REQUIRE_FLOAT_AT_OUTLET(0, t, 0); + } + + SECTION("wrong args") + { + TestFlowPack t("flow.pack", LA("a")); + REQUIRE(t.numInlets() == 1); + REQUIRE(t.numOutlets() == 1); + + WHEN_SEND_BANG_TO(0, t); + REQUIRE_FLOAT_AT_OUTLET(0, t, 0); + } + + SECTION("args") + { + TestFlowPack t("flow.pack", LX(0)); + REQUIRE(t.numInlets() == 1); + REQUIRE(t.numOutlets() == 1); + + WHEN_SEND_BANG_TO(0, t); + REQUIRE_FLOAT_AT_OUTLET(0, t, 0); + } + + SECTION("args") + { + TestFlowPack t("flow.pack", LX(-1)); + REQUIRE(t.numInlets() == 1); + REQUIRE(t.numOutlets() == 1); + + WHEN_SEND_BANG_TO(0, t); + REQUIRE_FLOAT_AT_OUTLET(0, t, 0); + } + + SECTION("args") + { + TestFlowPack t("flow.pack", LX(2)); + REQUIRE(t.numInlets() == 2); + REQUIRE(t.numOutlets() == 1); + + WHEN_SEND_BANG_TO(0, t); + REQUIRE_LIST_AT_OUTLET(0, t, LX(0, 0)); + } + + SECTION("args") + { + TestFlowPack t("flow.pack", LX(5)); + REQUIRE(t.numInlets() == 5); + REQUIRE(t.numOutlets() == 1); + + WHEN_SEND_BANG_TO(0, t); + REQUIRE_LIST_AT_OUTLET(0, t, LX(0, 0, 0, 0, 0)); + } + } + + SECTION("bang") + { + TestExtFlowPack t("flow.pack", LA(3, "a", "b", "c")); + + t.sendBangTo(2); + REQUIRE_FALSE(t.hasOutput()); + + t.sendBangTo(1); + REQUIRE_FALSE(t.hasOutput()); + + t.sendBangTo(0); + REQUIRE(t.hasOutput()); + REQUIRE(t.isOutputListAt(0)); + REQUIRE(t.outputListAt(0) == LA("a", "b", "c")); + + t.sendFloat(1); + REQUIRE(t.hasOutput()); + REQUIRE(t.isOutputListAt(0)); + REQUIRE(t.outputListAt(0) == LA(1, "b", "c")); + } + + SECTION("float") + { + TestExtFlowPack t("flow.pack", LA(3, "a", "b", "c")); + + t.sendFloatTo(100, 2); + REQUIRE_FALSE(t.hasOutput()); + + t.sendFloatTo(-100, 1); + REQUIRE_FALSE(t.hasOutput()); + + t.sendFloatTo(11, 0); + REQUIRE(t.hasOutput()); + REQUIRE(t.isOutputListAt(0)); + REQUIRE(t.outputListAt(0) == LA(11, -100, 100)); + + t.sendFloat(12); + REQUIRE(t.hasOutput()); + REQUIRE(t.isOutputListAt(0)); + REQUIRE(t.outputListAt(0) == LA(12, -100, 100)); + } + + SECTION("symbol") + { + TestExtFlowPack t("flow.pack", LA(3, "a", "b", "c")); + + t.sendBang(); + REQUIRE(t.hasOutput()); + REQUIRE(t.outputListAt(0) == LA("a", "b", "c")); + + t.sendSymbolTo("C", 2); + REQUIRE_FALSE(t.hasOutput()); + t.sendBang(); + REQUIRE(t.hasOutput()); + REQUIRE(t.outputListAt(0) == LA("a", "b", "C")); + + t.sendSymbolTo("B", 1); + REQUIRE_FALSE(t.hasOutput()); + t.sendBang(); + REQUIRE(t.hasOutput()); + REQUIRE(t.outputListAt(0) == LA("a", "B", "C")); + + t.sendSymbolTo("A", 0); + REQUIRE(t.hasOutput()); + REQUIRE(t.outputListAt(0) == LA("A", "B", "C")); + } + + SECTION("list") + { + TestExtFlowPack t("flow.pack", LA(4, "a", "b", "c", "d")); + + t.sendListTo(LX(1, 2, 3), 2); + REQUIRE_FALSE(t.hasOutput()); + t.sendBang(); + REQUIRE(t.hasOutput()); + REQUIRE(t.outputListAt(0) == LA("a", "b", 1, 2)); + + t.sendListTo(LX(100, 200), 1); + REQUIRE_FALSE(t.hasOutput()); + t.sendBang(); + REQUIRE(t.hasOutput()); + REQUIRE(t.outputListAt(0) == LA("a", 100, 200, 2)); + + t.sendListTo(LX(1000), 1); + REQUIRE_FALSE(t.hasOutput()); + t.sendBang(); + REQUIRE(t.hasOutput()); + REQUIRE(t.outputListAt(0) == LA("a", 1000, 200, 2)); + + t.sendListTo(L(), 1); + REQUIRE_FALSE(t.hasOutput()); + t.sendBang(); + REQUIRE(t.hasOutput()); + REQUIRE(t.outputListAt(0) == LA("a", 1000, 200, 2)); + + t.sendListTo(LA(-1, -2), 0); + REQUIRE(t.hasOutput()); + REQUIRE(t.outputListAt(0) == LA(-1, -2, 200, 2)); + + t.sendListTo(LA("A"), 0); + REQUIRE(t.outputListAt(0) == LA("A", -2, 200, 2)); + + t.sendListTo(LA("A", "B"), 0); + REQUIRE(t.outputListAt(0) == LA("A", "B", 200, 2)); + + t.sendListTo(LA("A", "B", "C"), 0); + REQUIRE(t.outputListAt(0) == LA("A", "B", "C", 2)); + + t.sendListTo(LA("A", "B", "C", "D"), 0); + REQUIRE(t.outputListAt(0) == LA("A", "B", "C", "D")); + + t.sendListTo(LA("+", "B", "C", "D", "E"), 0); + REQUIRE(t.outputListAt(0) == LA("+", "B", "C", "D")); + } + + SECTION("any") + { + TestExtFlowPack t("flow.pack", LA(3)); + + t.bang(); + REQUIRE(t.hasOutput()); + REQUIRE(t.isOutputListAt(0)); + REQUIRE(t.outputListAt(0) == LX(0, 0, 0)); + + t.sendMessage(gensym("m")); + REQUIRE(t.hasOutput()); + REQUIRE(t.isOutputAnyAt(0)); + REQUIRE(t.outputAnyAt(0) == LA("m", 0.f, 0.f)); + + t.sendMessage(gensym("m"), LF(-100)); + REQUIRE(t.hasOutput()); + REQUIRE(t.isOutputAnyAt(0)); + REQUIRE(t.outputAnyAt(0) == LA("m", -100, 0.f)); + + t.sendMessage(gensym("m"), LF(-100, 200)); + REQUIRE(t.hasOutput()); + REQUIRE(t.isOutputAnyAt(0)); + REQUIRE(t.outputAnyAt(0) == LA("m", -100, 200)); + + t.sendMessage(gensym("m"), LF(1, 2, 3)); + REQUIRE(t.hasOutput()); + REQUIRE(t.isOutputAnyAt(0)); + REQUIRE(t.outputAnyAt(0) == LA("m", 1, 2)); + } +} diff --git a/ceammc/ext/tests/test_ext_flow_pass_if.cpp b/ceammc/ext/tests/test_ext_flow_pass_if.cpp index 97ddf3218a..fb7cb9787c 100644 --- a/ceammc/ext/tests/test_ext_flow_pass_if.cpp +++ b/ceammc/ext/tests/test_ext_flow_pass_if.cpp @@ -80,7 +80,7 @@ TEST_CASE("flow.pass_if", "[externals]") SECTION("puredata") { setup_flow0x2epass_if(); - ExternalOutput::setup(); + LogExternalOutput::setup(); pd::External flow_pass_if("flow.pass_if"); REQUIRE_FALSE(flow_pass_if.isNull()); @@ -90,7 +90,7 @@ TEST_CASE("flow.pass_if", "[externals]") flow_pass_if.connectTo(1, x1.object(), 0); x1.connectTo(0, flow_pass_if.object(), 1); - ExternalOutput x2; + LogExternalOutput x2; flow_pass_if.connectTo(0, x2.object(), 0); flow_pass_if.sendFloat(14); diff --git a/ceammc/ext/tests/test_ext_flow_route.cpp b/ceammc/ext/tests/test_ext_flow_route.cpp index 40dd0e65f6..0c0d9ada3e 100644 --- a/ceammc/ext/tests/test_ext_flow_route.cpp +++ b/ceammc/ext/tests/test_ext_flow_route.cpp @@ -86,7 +86,7 @@ TEST_CASE("flow.route", "[externals]") REQUIRE_NO_MESSAGES_AT_OUTLET(3, t); WHEN_SEND_LIST_TO(0, t, LA("a", "b")); - REQUIRE_LIST_AT_OUTLET(0, t, LA("b")); + REQUIRE_SYMBOL_AT_OUTLET(0, t, "b"); REQUIRE_NO_MESSAGES_AT_OUTLET(1, t); REQUIRE_NO_MESSAGES_AT_OUTLET(2, t); REQUIRE_NO_MESSAGES_AT_OUTLET(3, t); @@ -106,7 +106,7 @@ TEST_CASE("flow.route", "[externals]") WHEN_SEND_LIST_TO(0, t, LA("b", "c")); REQUIRE_NO_MESSAGES_AT_OUTLET(0, t); - REQUIRE_LIST_AT_OUTLET(1, t, LA("c")); + REQUIRE_SYMBOL_AT_OUTLET(1, t, "c"); REQUIRE_NO_MESSAGES_AT_OUTLET(2, t); REQUIRE_NO_MESSAGES_AT_OUTLET(3, t); @@ -126,7 +126,7 @@ TEST_CASE("flow.route", "[externals]") WHEN_SEND_LIST_TO(0, t, LA(500, "message")); REQUIRE_NO_MESSAGES_AT_OUTLET(0, t); REQUIRE_NO_MESSAGES_AT_OUTLET(1, t); - REQUIRE_LIST_AT_OUTLET(2, t, LA("message")); + REQUIRE_SYMBOL_AT_OUTLET(2, t, "message"); REQUIRE_NO_MESSAGES_AT_OUTLET(3, t); WHEN_SEND_LIST_TO(0, t, LA(500, "a", 2)); diff --git a/ceammc/ext/tests/test_ext_list_append.cpp b/ceammc/ext/tests/test_ext_list_append.cpp index 1ee949d852..fc8e683e66 100644 --- a/ceammc/ext/tests/test_ext_list_append.cpp +++ b/ceammc/ext/tests/test_ext_list_append.cpp @@ -37,10 +37,10 @@ TEST_CASE("list.append", "[externals]") REQUIRE_LIST_AT_OUTLET(0, t, L()); WHEN_SEND_FLOAT_TO(0, t, 10); - REQUIRE_LIST_AT_OUTLET(0, t, LF(10)); + REQUIRE_FLOAT_AT_OUTLET(0, t, 10); WHEN_SEND_SYMBOL_TO(0, t, "ABC"); - REQUIRE_LIST_AT_OUTLET(0, t, LA("ABC")); + REQUIRE_SYMBOL_AT_OUTLET(0, t, "ABC"); DataPtr d0(new IntData(12)); WHEN_SEND_DATA_TO(0, t, d0); diff --git a/ceammc/ext/tests/test_ext_list_at.cpp b/ceammc/ext/tests/test_ext_list_at.cpp index 3022809ea9..29c45ce9d8 100644 --- a/ceammc/ext/tests/test_ext_list_at.cpp +++ b/ceammc/ext/tests/test_ext_list_at.cpp @@ -126,7 +126,7 @@ TEST_CASE("list.at", "[externals]") REQUIRE(t.hasOutput()); auto props = t.outputAnyAt(0); props.sort(); - REQUIRE(props == LA("@*", "@clip", "@fold", "@index", "@method", "@rel", "@wrap")); + REQUIRE(props == LA("@*", "@clip", "@default", "@fold", "@index", "@method", "@rel", "@wrap")); // single test t.call("@clip?"); @@ -143,4 +143,17 @@ TEST_CASE("list.at", "[externals]") REQUIRE(t.hasOutput()); REQUIRE(t.outputAnyAt(0) == LA("@clip", 0.f, "@rel", 1)); } + + SECTION("@default") + { + TestExtListAt t("list.at", LA(2, "@default", "???")); + + t.sendList(LF(1, 2, 3)); + REQUIRE(t.hasOutput()); + REQUIRE(t.outputFloatAt(0) == 3); + + t.sendList(LF(1, 2)); + REQUIRE(t.hasOutput()); + REQUIRE(t.outputSymbolAt(0) == S("???")); + } } diff --git a/ceammc/ext/tests/test_ext_list_prepend.cpp b/ceammc/ext/tests/test_ext_list_prepend.cpp index 26bab192ad..cc1374abec 100644 --- a/ceammc/ext/tests/test_ext_list_prepend.cpp +++ b/ceammc/ext/tests/test_ext_list_prepend.cpp @@ -37,10 +37,10 @@ TEST_CASE("list.prepend", "[externals]") REQUIRE_LIST_AT_OUTLET(0, t, L()); WHEN_SEND_FLOAT_TO(0, t, 10); - REQUIRE_LIST_AT_OUTLET(0, t, LF(10)); + REQUIRE_FLOAT_AT_OUTLET(0, t, 10); WHEN_SEND_SYMBOL_TO(0, t, "ABC"); - REQUIRE_LIST_AT_OUTLET(0, t, LA("ABC")); + REQUIRE_SYMBOL_AT_OUTLET(0, t, "ABC"); DataPtr d0(new IntData(12)); WHEN_SEND_DATA_TO(0, t, d0); diff --git a/ceammc/ext/tests/test_ext_list_reduce.cpp b/ceammc/ext/tests/test_ext_list_reduce.cpp index 9cb34feee1..1f7adce16b 100644 --- a/ceammc/ext/tests/test_ext_list_reduce.cpp +++ b/ceammc/ext/tests/test_ext_list_reduce.cpp @@ -28,7 +28,7 @@ using namespace ceammc::pd; TEST_CASE("list.reduce", "[externals]") { pd_init(); - ExternalOutput::setup(); + LogExternalOutput::setup(); SECTION("test create with:") { @@ -54,7 +54,7 @@ TEST_CASE("list.reduce", "[externals]") { External foldl("list.reduce"); External plus("+"); - ExternalOutput out; + LogExternalOutput out; REQUIRE(!foldl.isNull()); REQUIRE(!plus.isNull()); @@ -71,7 +71,7 @@ TEST_CASE("list.reduce", "[externals]") { External foldl("list.reduce"); External minus("-"); - ExternalOutput out; + LogExternalOutput out; REQUIRE(!foldl.isNull()); REQUIRE(!minus.isNull()); @@ -88,7 +88,7 @@ TEST_CASE("list.reduce", "[externals]") { External foldl("list.reduce"); External mul("*"); - ExternalOutput out; + LogExternalOutput out; REQUIRE(!foldl.isNull()); REQUIRE(!mul.isNull()); diff --git a/ceammc/ext/tests/test_ext_list_rlencode.cpp b/ceammc/ext/tests/test_ext_list_rlencode.cpp index 0bda8b878c..23e80a52db 100644 --- a/ceammc/ext/tests/test_ext_list_rlencode.cpp +++ b/ceammc/ext/tests/test_ext_list_rlencode.cpp @@ -11,11 +11,11 @@ * contact the author of this file, or the owner of the project in which * this file belongs to. *****************************************************************************/ -#include "datatype_mlist.h" #include "../list/list_rlencode.h" +#include "datatype_mlist.h" #include "test_external.h" -PD_COMPLETE_TEST_SETUP(ListRLEncode, list, rlencode); +PD_COMPLETE_TEST_SETUP(ListRLEncode, list, rlencode) TEST_CASE("list.rlencode", "[externals]") { @@ -32,11 +32,13 @@ TEST_CASE("list.rlencode", "[externals]") { TestListRLEncode t("list.rlencode"); -#define REQUIRE_ENCODE(t, in, out1, out2) \ - { \ - WHEN_SEND_LIST_TO(0, t, in); \ - REQUIRE_LIST_AT_OUTLET(0, t, out1); \ - REQUIRE_LIST_AT_OUTLET(1, t, out2); \ +#define REQUIRE_ENCODE(t, in, out1, out2) \ + { \ + WHEN_SEND_LIST_TO(0, t, in); \ + REQUIRE(t.hasNewMessages(0)); \ + REQUIRE(t.lastMessage(0) == Message(out1)); \ + REQUIRE(t.hasNewMessages(1)); \ + REQUIRE(t.lastMessage(1) == Message(out2)); \ } REQUIRE_ENCODE(t, L(), L(), L()); diff --git a/ceammc/ext/tests/test_ext_list_route.cpp b/ceammc/ext/tests/test_ext_list_route.cpp index 541aab1f7a..572b3bd8d3 100644 --- a/ceammc/ext/tests/test_ext_list_route.cpp +++ b/ceammc/ext/tests/test_ext_list_route.cpp @@ -149,7 +149,7 @@ TEST_CASE("list.route", "[externals]") REQUIRE_SYMBOL_AT_OUTLET(0, t, "A"); WHEN_SEND_LIST_TO(0, t, LA("C")); - REQUIRE_LIST_AT_OUTLET(2, t, LA("C")); + REQUIRE_SYMBOL_AT_OUTLET(2, t, "C"); } SECTION("as any") diff --git a/ceammc/ext/tests/test_ext_list_search.cpp b/ceammc/ext/tests/test_ext_list_search.cpp index 43d32fe7e1..d7dedb649d 100644 --- a/ceammc/ext/tests/test_ext_list_search.cpp +++ b/ceammc/ext/tests/test_ext_list_search.cpp @@ -88,10 +88,10 @@ TEST_CASE("list.search", "[externals]") WHEN_SEND_LIST_TO(1, t, LF(8)); WHEN_SEND_LIST_TO(0, t, LA(5, 6, 7, 8, 9)); - REQUIRE_LIST_AT_OUTLET(0, t, LF(3)); + REQUIRE_FLOAT_AT_OUTLET(0, t, 3); WHEN_SEND_LIST_TO(0, t, LA(5, 8, 7, 8, 9)); - REQUIRE_LIST_AT_OUTLET(0, t, LF(1)); + REQUIRE_FLOAT_AT_OUTLET(0, t, 1); } SECTION("data") diff --git a/ceammc/ext/tests/test_ext_list_seq.cpp b/ceammc/ext/tests/test_ext_list_seq.cpp index b9137d3580..744b9f33ae 100644 --- a/ceammc/ext/tests/test_ext_list_seq.cpp +++ b/ceammc/ext/tests/test_ext_list_seq.cpp @@ -151,7 +151,7 @@ TEST_CASE("list.seq", "[externals]") { ListSeqTest t("list.seq", L()); WHEN_SEND_BANG_TO(0, t); - REQUIRE_LIST_AT_OUTLET(0, t, LF(0.f)); + REQUIRE_FLOAT_AT_OUTLET(0, t, 0); WHEN_SEND_LIST_TO(0, t, LF(4)); REQUIRE_LIST_AT_OUTLET(0, t, LA(0.f, 1, 2, 3)); diff --git a/ceammc/ext/tests/test_ext_list_split.cpp b/ceammc/ext/tests/test_ext_list_split.cpp index d64aa2522b..701d863af5 100644 --- a/ceammc/ext/tests/test_ext_list_split.cpp +++ b/ceammc/ext/tests/test_ext_list_split.cpp @@ -45,7 +45,7 @@ TEST_CASE("list.split", "[externals]") WHEN_SEND_LIST_TO(0, t, LF(1)); REQUIRE_LIST_AT_OUTLET(1, t, L()); - REQUIRE_LIST_AT_OUTLET(0, t, LF(1)); + REQUIRE_FLOAT_AT_OUTLET(0, t, 1); WHEN_SEND_LIST_TO(0, t, L()); REQUIRE_LIST_AT_OUTLET(1, t, L()); diff --git a/ceammc/ext/tests/test_ext_list_xat.cpp b/ceammc/ext/tests/test_ext_list_xat.cpp index a8ab3edf24..03d6542f4c 100644 --- a/ceammc/ext/tests/test_ext_list_xat.cpp +++ b/ceammc/ext/tests/test_ext_list_xat.cpp @@ -257,7 +257,7 @@ TEST_CASE("list.^at", "[externals]") REQUIRE_LIST_AT_OUTLET(0, t, LF(1, 3, 3)); WHEN_SEND_LIST_TO(0, t, LF(0, 100, -100)); - REQUIRE_LIST_AT_OUTLET(0, t, LF(1)); + REQUIRE_FLOAT_AT_OUTLET(0, t, 1); } SECTION("rel + default") diff --git a/ceammc/ext/tests/test_ext_math_ops.cpp b/ceammc/ext/tests/test_ext_math_ops.cpp new file mode 100644 index 0000000000..c59073c562 --- /dev/null +++ b/ceammc/ext/tests/test_ext_math_ops.cpp @@ -0,0 +1,137 @@ +/***************************************************************************** + * Copyright 2017 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#include "../math/math_and.h" +#include "test_base.h" +#include "catch.hpp" + +#include + +typedef TestExternal MathAndTest; + +static int asBool(const Atom& a) +{ + return a.asFloat(0) ? 1 : 0; +} + +TEST_CASE("math.and", "[externals]") +{ + obj_init(); + + SECTION("init") + { + { + MathAndTest t("math.and"); + REQUIRE(t.numInlets() == 3); + REQUIRE(t.numOutlets() == 1); + + REQUIRE_PROPERTY_LIST(t, @state, AtomList::zeroes(3)); + REQUIRE_PROPERTY(t, @sync, 0.f); + } + + { + MathAndTest t("math.and", LF(5)); + REQUIRE(t.numInlets() == 5); + REQUIRE(t.numOutlets() == 1); + } + + { + MathAndTest t("math.and", LF(0.f)); + REQUIRE(t.numInlets() == 3); + REQUIRE(t.numOutlets() == 1); + } + + { + MathAndTest t("math.and", LF(1)); + REQUIRE(t.numInlets() == 3); + REQUIRE(t.numOutlets() == 1); + } + + { + MathAndTest t("math.and", LF(2)); + REQUIRE(t.numInlets() == 3); + REQUIRE(t.numOutlets() == 1); + } + + { + MathAndTest t("math.and", LF(20)); + REQUIRE(t.numInlets() == 16); + REQUIRE(t.numOutlets() == 1); + } + + { + MathAndTest t("math.and", LF(-1)); + REQUIRE(t.numInlets() == 3); + REQUIRE(t.numOutlets() == 1); + } + + { + MathAndTest t("math.and", LA(4, "@sync")); + REQUIRE(t.numInlets() == 4); + REQUIRE(t.numOutlets() == 1); + REQUIRE_PROPERTY(t, @sync, 1); + } + } + + SECTION("async") + { + MathAndTest t("math.and", A(3)); + +#define REQUIRE_AND_ASYNC(obj, vals, cond) \ + { \ + CALL(obj, reset); \ + WHEN_SEND_FLOAT_TO(2, obj, vals[2].asFloat()); \ + REQUIRE_NO_MESSAGES_AT_OUTLET(0, obj); \ + REQUIRE_PROPERTY_LIST(obj, @state, LA(0.f, 0.f, asBool(vals[2]))); \ + WHEN_SEND_FLOAT_TO(1, obj, vals[1].asFloat()); \ + REQUIRE_NO_MESSAGES_AT_OUTLET(0, obj); \ + REQUIRE_PROPERTY_LIST(obj, @state, LA(0.f, asBool(vals[1]), asBool(vals[2]))); \ + WHEN_SEND_FLOAT_TO(0, obj, vals[0].asFloat()); \ + REQUIRE_PROPERTY_LIST(obj, @state, LA(asBool(vals[0]), asBool(vals[1]), asBool(vals[2]))); \ + REQUIRE_FLOAT_AT_OUTLET(0, obj, cond ? 1 : 0); \ + } + + REQUIRE_AND_ASYNC(t, LF(0.f, 0.f, 0.f), false); + REQUIRE_AND_ASYNC(t, LF(1, 2, 3), true); + REQUIRE_AND_ASYNC(t, LF(0.f, 0.f, 1), false); + REQUIRE_AND_ASYNC(t, LF(1, 1, 1), true); + REQUIRE_AND_ASYNC(t, LF(1, 0.f, 1), false); + } + + SECTION("sync") + { + MathAndTest t("math.and", LA(3, "@sync")); + +#define REQUIRE_AND_SYNC(obj, n, v, cond) \ + { \ + WHEN_SEND_FLOAT_TO(n, obj, v); \ + REQUIRE_FLOAT_AT_OUTLET(0, obj, cond ? 1 : 0); \ + } + + REQUIRE_AND_SYNC(t, 2, 1, false); + REQUIRE_AND_SYNC(t, 1, 1, false); + REQUIRE_AND_SYNC(t, 0, 1, true); + REQUIRE_AND_SYNC(t, 1, 0, false); + REQUIRE_AND_SYNC(t, 1, 1, true); + } + + SECTION("reset") + { + MathAndTest t("math.and", LF(3)); + WHEN_SEND_FLOAT_TO(0, t, 1); + WHEN_SEND_FLOAT_TO(1, t, 1); + REQUIRE_PROPERTY_LIST(t, @state, LA(1, 1, .0f)); + CALL(t, reset); + REQUIRE_PROPERTY_LIST(t, @state, LA(0.f, 0.f, .0f)); + } +} diff --git a/ceammc/ext/tests/test_ext_math_sync_ops.cpp b/ceammc/ext/tests/test_ext_math_sync_ops.cpp new file mode 100644 index 0000000000..c6007a4052 --- /dev/null +++ b/ceammc/ext/tests/test_ext_math_sync_ops.cpp @@ -0,0 +1,680 @@ +/***************************************************************************** + * Copyright 2017 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#include "../math/math_sync_op.h" +#include "catch.hpp" +#include "test_base.h" +#include "test_external.h" + +#include + +PD_TEST_CANVAS(); +// arithmetic +PD_TEST_TYPEDEF(MathSyncAdd); +PD_TEST_TYPEDEF(MathSyncSub); +PD_TEST_TYPEDEF(MathSyncMul); +PD_TEST_TYPEDEF(MathSyncDiv); +PD_TEST_TYPEDEF(MathSyncMod); +// compare +PD_TEST_TYPEDEF(MathSyncEqual); +PD_TEST_TYPEDEF(MathSyncNotEqual); +PD_TEST_TYPEDEF(MathSyncLessThen); +PD_TEST_TYPEDEF(MathSyncLessEqual); +PD_TEST_TYPEDEF(MathSyncGreaterThen); +PD_TEST_TYPEDEF(MathSyncGreaterEqual); +// boolean +PD_TEST_TYPEDEF(MathSyncAnd); +PD_TEST_TYPEDEF(MathSyncOr); +PD_TEST_TYPEDEF(MathSyncXor); +PD_TEST_CORE_INIT() +PD_TEST_MOD_INIT(math, sync_op) +PD_TEST_FULL_INIT(math, sync_op) + +#define CHECK_NEUTRAL_ELEMENT(obj, z) \ + { \ + std::default_random_engine generator; \ + std::uniform_real_distribution distribution(-10000, 10000); \ + obj.clearAll(); \ + t_float v = distribution(generator); \ + obj.sendFloatTo(z, 0); \ + obj.sendFloatTo(v, 1); \ + REQUIRE(obj.outputFloatAt(0) == v); \ + obj.clearAll(); \ + obj.sendFloatTo(v, 0); \ + obj.sendFloatTo(z, 1); \ + REQUIRE(obj.outputFloatAt(0) == v); \ + } + +#define REQUIRE_REFLEX(obj) \ + { \ + std::default_random_engine generator; \ + std::uniform_real_distribution distribution(-10000, 10000); \ + obj.clearAll(); \ + t_float v = distribution(generator); \ + obj.sendFloatTo(v, 0); \ + obj.sendFloatTo(v, 1); \ + REQUIRE(obj.outputFloatAt(0) == 1); \ + } + +#define REQUIRE_TRANSITIONAL(obj, a, b, c) \ + { \ + obj.clearAll(); \ + obj.sendFloatTo(a, 0); \ + obj.sendFloatTo(b, 1); \ + auto res0 = obj.outputFloatAt(0); \ + obj.sendFloatTo(b, 0); \ + obj.sendFloatTo(c, 1); \ + auto res1 = obj.outputFloatAt(0); \ + obj.sendFloatTo(a, 0); \ + obj.sendFloatTo(c, 1); \ + if (res0 && res1) \ + REQUIRE(obj.outputFloatAt(0) == 1); \ + } + +#define REQUIRE_NON_TRANSITIONAL(obj, a, b, c) \ + { \ + obj.clearAll(); \ + obj.sendFloatTo(a, 0); \ + obj.sendFloatTo(b, 1); \ + auto res0 = obj.outputFloatAt(0); \ + obj.sendFloatTo(b, 0); \ + obj.sendFloatTo(c, 1); \ + auto res1 = obj.outputFloatAt(0); \ + obj.sendFloatTo(a, 0); \ + obj.sendFloatTo(c, 1); \ + REQUIRE(obj.outputFloatAt(0) != (res0 && res1)); \ + } + +#define REQUIRE_SYMMETRIC(obj, a, b) \ + { \ + obj.clearAll(); \ + obj.sendFloatTo(a, 0); \ + obj.sendFloatTo(b, 1); \ + auto res0 = obj.outputFloatAt(0); \ + obj.sendFloatTo(b, 0); \ + obj.sendFloatTo(a, 1); \ + auto res1 = obj.outputFloatAt(0); \ + REQUIRE(res0 == res1); \ + } + +#define REQUIRE_NON_SYMMETRIC(obj, a, b) \ + { \ + obj.clearAll(); \ + obj.sendFloatTo(a, 0); \ + obj.sendFloatTo(b, 1); \ + auto res0 = obj.outputFloatAt(0); \ + obj.sendFloatTo(b, 0); \ + obj.sendFloatTo(a, 1); \ + auto res1 = obj.outputFloatAt(0); \ + REQUIRE_FALSE(res0 == res1); \ + } + +#define REQUIRE_NON_REFLEX(obj) \ + { \ + std::default_random_engine generator; \ + std::uniform_real_distribution distribution(-10000, 10000); \ + obj.clearAll(); \ + t_float v = distribution(generator); \ + obj.sendFloatTo(v, 0); \ + obj.sendFloatTo(v, 1); \ + REQUIRE(obj.outputFloatAt(0) == 0.f); \ + } + +#define REQUIRE_COMM_OP(t, v0, v1, res) \ + { \ + t.clearAll(); \ + t.sendFloatTo(v0, 0); \ + REQUIRE(t.hasOutputAt(0)); \ + t.sendFloatTo(v1, 1); \ + REQUIRE(t.outputFloatAt(0) == Approx(res)); \ + t.sendFloatTo(0, 0); \ + t.sendFloatTo(0, 1); \ + t.clearAll(); \ + t.sendFloatTo(v1, 1); \ + t.sendFloatTo(v0, 0); \ + REQUIRE(t.outputFloatAt(0) == Approx(res)); \ + } + +#define REQUIRE_NON_COMM_OP(t, v0, v1, res) \ + { \ + t.clearAll(); \ + t.sendFloatTo(v0, 0); \ + t.sendFloatTo(v1, 1); \ + REQUIRE(t.outputFloatAt(0) == Approx(res)); \ + } + +#define REQUIRE_ASSOC_OP(t, a, b, c) \ + { \ + t.clearAll(); \ + t.sendFloatTo(a, 0); \ + t.sendFloatTo(b, 1); \ + t.sendFloatTo(t.outputFloatAt(0), 0); \ + t.sendFloatTo(c, 1); \ + auto res0 = t.outputFloatAt(0); \ + t.sendFloatTo(b, 0); \ + t.sendFloatTo(c, 1); \ + t.sendFloatTo(t.outputFloatAt(0), 1); \ + t.sendFloatTo(a, 0); \ + auto res1 = t.outputFloatAt(0); \ + REQUIRE(res0 == res1); \ + } + +#define REQUIRE_NON_ASSOC_OP(t, a, b, c) \ + { \ + t.clearAll(); \ + t.sendFloatTo(a, 0); \ + t.sendFloatTo(b, 1); \ + t.sendFloatTo(t.outputFloatAt(0), 0); \ + t.sendFloatTo(c, 1); \ + auto res0 = t.outputFloatAt(0); \ + t.sendFloatTo(b, 0); \ + t.sendFloatTo(c, 1); \ + t.sendFloatTo(t.outputFloatAt(0), 1); \ + t.sendFloatTo(a, 0); \ + auto res1 = t.outputFloatAt(0); \ + REQUIRE(res0 != res1); \ + } + +TEST_CASE("math.ops", "[externals]") +{ + pd_test_init(); + + SECTION("add") + { + SECTION("create") + { + TestExtMathSyncAdd t0("math.sync_add"); + TestExtMathSyncAdd t1("math.+'"); + TestExtMathSyncAdd t2("+'"); + + REQUIRE(t0.numInlets() == 2); + REQUIRE(t1.numOutlets() == 1); + // clang-format off + REQUIRE_PROPERTY_FLOAT(t0, @int, 0); + // clang-format on + } + + SECTION("do default") + { + TestExtMathSyncAdd t("math.+'"); + t.sendBangTo(1); + REQUIRE(t.hasOutputAt(0)); + REQUIRE(t.isOutputFloatAt(0)); + REQUIRE(t.outputFloatAt(0) == 0); + + CHECK_NEUTRAL_ELEMENT(t, 0) + REQUIRE_ASSOC_OP(t, 1, 2, 3) + + REQUIRE_COMM_OP(t, 0, 0, 0) + REQUIRE_COMM_OP(t, 1.1, 0, 1.1) + REQUIRE_COMM_OP(t, 0, 1, 1) + REQUIRE_COMM_OP(t, 10, 10.5, 20.5) + REQUIRE_COMM_OP(t, 10, -10, 0) + REQUIRE_COMM_OP(t, 2, 3, 5) + + t.sendListTo(LF(1, 2), 0); + REQUIRE(t.outputFloatAt(0) == 3); + t.sendListTo(L(), 0); + REQUIRE(t.outputFloatAt(0) == 3); + } + + SECTION("do arg") + { + TestExtMathSyncAdd t("math.+'", LF(20)); + t.sendBangTo(1); + REQUIRE(t.hasOutputAt(0)); + REQUIRE(t.isOutputFloatAt(0)); + REQUIRE(t.outputFloatAt(0) == 20); + } + } + + SECTION("sub") + { + SECTION("create") + { + TestExtMathSyncSub t0("math.sync_sub"); + TestExtMathSyncSub t1("math.-'"); + TestExtMathSyncSub t2("-'"); + + REQUIRE(t0.numInlets() == 2); + REQUIRE(t1.numOutlets() == 1); + } + + SECTION("do default") + { + TestExtMathSyncSub t("math.-'"); + + REQUIRE_NON_ASSOC_OP(t, 1, 2, 3) + + REQUIRE_NON_COMM_OP(t, 0, 0, 0) + REQUIRE_NON_COMM_OP(t, 1, 0, 1) + REQUIRE_NON_COMM_OP(t, 0, 1, -1) + REQUIRE_NON_COMM_OP(t, 10, 10, 0) + REQUIRE_NON_COMM_OP(t, 10, -10, 20) + REQUIRE_NON_COMM_OP(t, 2, 3, -1) + REQUIRE_NON_COMM_OP(t, 3, 2, 1) + } + } + + SECTION("mul") + { + SECTION("create") + { + TestExtMathSyncMul t0("math.sync_mul"); + TestExtMathSyncMul t1("math.*'"); + TestExtMathSyncMul t2("*'"); + + REQUIRE(t0.numInlets() == 2); + REQUIRE(t1.numOutlets() == 1); + } + + SECTION("do default") + { + TestExtMathSyncMul t("math.*'"); + + CHECK_NEUTRAL_ELEMENT(t, 1) + REQUIRE_ASSOC_OP(t, 1, 2, 3) + + REQUIRE_COMM_OP(t, 0, 0, 0) + REQUIRE_COMM_OP(t, 1, 0, 0) + REQUIRE_COMM_OP(t, 0, 1, 0) + REQUIRE_COMM_OP(t, 10, 1, 10) + REQUIRE_COMM_OP(t, 10, 2, 20) + REQUIRE_COMM_OP(t, 2, -3, -6) + REQUIRE_COMM_OP(t, -2, -3, 6) + } + } + + SECTION("div") + { + SECTION("create") + { + TestExtMathSyncSub t0("math.sync_div"); + TestExtMathSyncSub t1("math./'"); + TestExtMathSyncSub t2("/'"); + + REQUIRE(t0.numInlets() == 2); + REQUIRE(t1.numOutlets() == 1); + } + + SECTION("do default") + { + TestExtMathSyncSub t("math./'"); + + t.sendFloatTo(0, 0); + REQUIRE_FALSE(t.hasOutput()); + t.sendFloatTo(0, 1); + REQUIRE_FALSE(t.hasOutput()); + + REQUIRE_NON_ASSOC_OP(t, 1, 2, 4) + + REQUIRE_NON_COMM_OP(t, 10, 2, 5) + REQUIRE_NON_COMM_OP(t, 10, 4, 2.5) + REQUIRE_NON_COMM_OP(t, 10, -10, -1) + REQUIRE_NON_COMM_OP(t, 4, 2, 2) + REQUIRE_NON_COMM_OP(t, 3, 2, 1.5) + } + + SECTION("do @int") + { + TestExtMathSyncSub t("math./'", LA("@int")); + + REQUIRE_NON_COMM_OP(t, 10, 2, 5) + REQUIRE_NON_COMM_OP(t, 10, 4, 2) + REQUIRE_NON_COMM_OP(t, 10, 3, 3) + REQUIRE_NON_COMM_OP(t, 10.1, 3.1, 3) + } + } + + SECTION("mod") + { + SECTION("create") + { + TestExtMathSyncMod t0("math.sync_mod"); + TestExtMathSyncMod t1("math.%'"); + TestExtMathSyncMod t2("%'"); + + REQUIRE(t0.numInlets() == 2); + REQUIRE(t1.numOutlets() == 1); + } + + SECTION("do float") + { + TestExtMathSyncMod t("math.%'"); + + REQUIRE_NON_COMM_OP(t, 0, 1, 0) + REQUIRE_NON_COMM_OP(t, 10, 10, 0) + REQUIRE_NON_COMM_OP(t, 2.5, 2.5, 0) + REQUIRE_NON_COMM_OP(t, 3.5, 2, 1.5) + REQUIRE_NON_COMM_OP(t, -3.5, 2, -1.5) + REQUIRE_NON_COMM_OP(t, 3.5, -2, 1.5) + REQUIRE_NON_COMM_OP(t, -3.5, -2, -1.5) + + t.clearAll(); + t.sendList(LF(1, 0)); + REQUIRE_FALSE(t.hasOutput()); + } + + SECTION("do @int") + { + TestExtMathSyncMod t("math.%'", LA("@int")); + + REQUIRE_NON_COMM_OP(t, 0, 1, 0) + REQUIRE_NON_COMM_OP(t, 10, 10, 0) + REQUIRE_NON_COMM_OP(t, 2.5, 2.5, 0) + REQUIRE_NON_COMM_OP(t, 3.5, 2, 1) + REQUIRE_NON_COMM_OP(t, -3.5, 2.1, -1) + REQUIRE_NON_COMM_OP(t, 3.5, -2, 1) + REQUIRE_NON_COMM_OP(t, -3.5, -2, -1) + } + } + + SECTION("eq") + { + SECTION("create") + { + TestExtMathSyncEqual t0("math.sync_eq"); + TestExtMathSyncEqual t1("math.=='"); + TestExtMathSyncEqual t2("=='"); + + REQUIRE(t0.numInlets() == 2); + REQUIRE(t1.numOutlets() == 1); + + REQUIRE_PROPERTY_FLOAT(t0, @epsilon, 0); + } + + SECTION("@epsilon 0") + { + TestExtMathSyncEqual t("=='"); + + REQUIRE_REFLEX(t) + REQUIRE_TRANSITIONAL(t, 1, 1, 1) + REQUIRE_TRANSITIONAL(t, 1, 2, 3) + REQUIRE_SYMMETRIC(t, 1, 2) + REQUIRE_SYMMETRIC(t, 1, 1) + + REQUIRE_COMM_OP(t, 10, 10, 1) + REQUIRE_COMM_OP(t, 10, -10, 0) + REQUIRE_COMM_OP(t, -0.5, -0.5, 1) + REQUIRE_COMM_OP(t, -0.5, -0.51, 0) + } + + SECTION("@epsilon 0.01") + { + TestExtMathSyncEqual t("=='", LA("@epsilon", 0.01)); + + REQUIRE_REFLEX(t) + REQUIRE_COMM_OP(t, 1, 2, 0) + REQUIRE_COMM_OP(t, 1, 1.011, 0) + REQUIRE_COMM_OP(t, 1, 1.009, 1) + REQUIRE_COMM_OP(t, 1, 1.0009, 1) + REQUIRE_COMM_OP(t, 1, 1, 1) + + REQUIRE_COMM_OP(t, -1, -2, 0) + REQUIRE_COMM_OP(t, -1, -1.011, 0) + REQUIRE_COMM_OP(t, -1, -1.009, 1) + REQUIRE_COMM_OP(t, -1, -1.0009, 1) + + REQUIRE_COMM_OP(t, -0.01, 0.01, 0) + REQUIRE_COMM_OP(t, -0.003, 0.003, 1) + REQUIRE_COMM_OP(t, 0, 0, 1) + } + } + + SECTION("ne") + { + SECTION("create") + { + TestExtMathSyncNotEqual t0("math.sync_ne"); + TestExtMathSyncNotEqual t1("math.!='"); + TestExtMathSyncNotEqual t2("!='"); + + REQUIRE(t0.numInlets() == 2); + REQUIRE(t1.numOutlets() == 1); + + REQUIRE_PROPERTY_FLOAT(t0, @epsilon, 0); + } + + SECTION("@epsilon 0") + { + TestExtMathSyncNotEqual t("!='"); + + REQUIRE_NON_REFLEX(t) + REQUIRE_SYMMETRIC(t, 1, 2) + REQUIRE_SYMMETRIC(t, 1, 1) + REQUIRE_TRANSITIONAL(t, 1, 2, 3) + REQUIRE_NON_TRANSITIONAL(t, 1, 2, 1) + + REQUIRE_COMM_OP(t, 10, 10, 0) + REQUIRE_COMM_OP(t, 10, -10, 1) + REQUIRE_COMM_OP(t, -0.5, -0.5, 0) + REQUIRE_COMM_OP(t, -0.5, -0.51, 1) + } + + SECTION("@epsilon 0.01") + { + TestExtMathSyncNotEqual t("!='", LA("@epsilon", 0.01)); + + REQUIRE_NON_REFLEX(t) + REQUIRE_COMM_OP(t, 1, 2, 1) + REQUIRE_COMM_OP(t, 1, 1.011, 1) + REQUIRE_COMM_OP(t, 1, 1.009, 0) + REQUIRE_COMM_OP(t, 1, 1.0009, 0) + REQUIRE_COMM_OP(t, 1, 1, 0) + + REQUIRE_COMM_OP(t, -1, -2, 1) + REQUIRE_COMM_OP(t, -1, -1.011, 1) + REQUIRE_COMM_OP(t, -1, -1.009, 0) + REQUIRE_COMM_OP(t, -1, -1.0009, 0) + + REQUIRE_COMM_OP(t, -0.01, 0.01, 1) + REQUIRE_COMM_OP(t, -0.003, 0.003, 0) + REQUIRE_COMM_OP(t, 0, 0, 0) + } + } + + SECTION("lt") + { + SECTION("create") + { + TestExtMathSyncLessThen t0("math.sync_lt"); + TestExtMathSyncLessThen t1("math.<'"); + TestExtMathSyncLessThen t2("<'"); + + REQUIRE(t0.numInlets() == 2); + REQUIRE(t1.numOutlets() == 1); + } + + SECTION("do") + { + TestExtMathSyncLessThen t("<'"); + + REQUIRE_NON_REFLEX(t) + REQUIRE_NON_SYMMETRIC(t, 1, 2) + REQUIRE_TRANSITIONAL(t, 1, 2, 3) + REQUIRE_TRANSITIONAL(t, 1, 1, 3) + REQUIRE_TRANSITIONAL(t, 1, 2, 2) + REQUIRE_TRANSITIONAL(t, 2, 2, 2) + + REQUIRE_NON_COMM_OP(t, 2, 2.0001, 1) + REQUIRE_NON_COMM_OP(t, 2.0001, 2.0001, 0) + REQUIRE_NON_COMM_OP(t, 2.0001, 2, 0) + } + } + + SECTION("le") + { + SECTION("create") + { + TestExtMathSyncLessEqual t0("math.sync_le"); + TestExtMathSyncLessEqual t1("math.<='"); + TestExtMathSyncLessEqual t2("<='"); + + REQUIRE(t0.numInlets() == 2); + REQUIRE(t1.numOutlets() == 1); + } + + SECTION("do") + { + TestExtMathSyncLessEqual t("<='"); + + REQUIRE_REFLEX(t) + REQUIRE_NON_SYMMETRIC(t, 1, 2) + REQUIRE_TRANSITIONAL(t, 1, 2, 3) + REQUIRE_TRANSITIONAL(t, 1, 1, 3) + REQUIRE_TRANSITIONAL(t, 1, 2, 2) + REQUIRE_TRANSITIONAL(t, 2, 2, 2) + + REQUIRE_NON_COMM_OP(t, 2, 2.0001, 1) + REQUIRE_NON_COMM_OP(t, 2.0001, 2.0001, 1) + REQUIRE_NON_COMM_OP(t, 2.0001, 2, 0) + } + } + + SECTION("gt") + { + SECTION("create") + { + TestExtMathSyncGreaterThen t0("math.sync_gt"); + TestExtMathSyncGreaterThen t1("math.>'"); + TestExtMathSyncGreaterThen t2(">'"); + + REQUIRE(t0.numInlets() == 2); + REQUIRE(t1.numOutlets() == 1); + } + + SECTION("do") + { + TestExtMathSyncGreaterThen t(">'"); + + REQUIRE_NON_REFLEX(t) + REQUIRE_NON_SYMMETRIC(t, 1, 2) + REQUIRE_TRANSITIONAL(t, 1, 2, 3) + REQUIRE_TRANSITIONAL(t, 1, 1, 3) + REQUIRE_TRANSITIONAL(t, 1, 2, 2) + REQUIRE_TRANSITIONAL(t, 2, 2, 2) + + REQUIRE_NON_COMM_OP(t, 2, 2.0001, 0) + REQUIRE_NON_COMM_OP(t, 2.0001, 2.0001, 0) + REQUIRE_NON_COMM_OP(t, 2.0001, 2, 1) + } + } + + SECTION("ge") + { + SECTION("create") + { + TestExtMathSyncLessEqual t0("math.sync_ge"); + TestExtMathSyncLessEqual t1("math.>='"); + TestExtMathSyncLessEqual t2(">='"); + + REQUIRE(t0.numInlets() == 2); + REQUIRE(t1.numOutlets() == 1); + } + + SECTION("do") + { + TestExtMathSyncLessEqual t(">='"); + + REQUIRE_REFLEX(t) + REQUIRE_NON_SYMMETRIC(t, 1, 2) + REQUIRE_TRANSITIONAL(t, 1, 2, 3) + REQUIRE_TRANSITIONAL(t, 1, 1, 3) + REQUIRE_TRANSITIONAL(t, 1, 2, 2) + REQUIRE_TRANSITIONAL(t, 2, 2, 2) + + REQUIRE_NON_COMM_OP(t, 2, 2.0001, 0) + REQUIRE_NON_COMM_OP(t, 2.0001, 2.0001, 1) + REQUIRE_NON_COMM_OP(t, 2.0001, 2, 1) + } + } + + SECTION("and") + { + SECTION("create") + { + TestExtMathSyncAnd t0("math.sync_and"); + TestExtMathSyncAnd t1("math.&&'"); + TestExtMathSyncAnd t2("&&'"); + + REQUIRE(t0.numInlets() == 2); + REQUIRE(t1.numOutlets() == 1); + } + + SECTION("do") + { + TestExtMathSyncAnd t("&&'"); + + REQUIRE_COMM_OP(t, 0, 0, 0) + REQUIRE_COMM_OP(t, 0, 1, 0) + REQUIRE_COMM_OP(t, 1, 0, 0) + REQUIRE_COMM_OP(t, 1, 1, 1) + + t.sendList(LF(0, 1)); + REQUIRE(t.outputFloatAt(0) == 0); + } + } + + SECTION("or") + { + SECTION("create") + { + TestExtMathSyncOr t0("math.sync_or"); + TestExtMathSyncOr t1("math.||'"); + TestExtMathSyncOr t2("||'"); + + REQUIRE(t0.numInlets() == 2); + REQUIRE(t1.numOutlets() == 1); + } + + SECTION("do") + { + TestExtMathSyncOr t("||'"); + + REQUIRE_COMM_OP(t, 0, 0, 0) + REQUIRE_COMM_OP(t, 0, 1, 1) + REQUIRE_COMM_OP(t, 1, 0, 1) + REQUIRE_COMM_OP(t, 1, 1, 1) + REQUIRE_COMM_OP(t, 2, 3, 1) + + t.sendList(LF(0, 0)); + REQUIRE(t.outputFloatAt(0) == 0); + } + } + + SECTION("xor") + { + SECTION("create") + { + TestExtMathSyncXor t0("math.sync_xor"); + TestExtMathSyncXor t1("math.^'"); + TestExtMathSyncXor t2("^'"); + + REQUIRE(t0.numInlets() == 2); + REQUIRE(t1.numOutlets() == 1); + } + + SECTION("do") + { + TestExtMathSyncOr t("^'"); + + REQUIRE_COMM_OP(t, 0, 0, 0) + REQUIRE_COMM_OP(t, 0, 1, 1) + REQUIRE_COMM_OP(t, 1, 0, 1) + REQUIRE_COMM_OP(t, 1, 1, 0) + + t.sendList(LF(1, 0)); + REQUIRE(t.outputFloatAt(0) == 1); + } + } +} diff --git a/ceammc/ext/tests/test_ext_msg.cpp b/ceammc/ext/tests/test_ext_msg.cpp index 0f2300e403..262ce4c4c8 100644 --- a/ceammc/ext/tests/test_ext_msg.cpp +++ b/ceammc/ext/tests/test_ext_msg.cpp @@ -35,7 +35,7 @@ TEST_CASE("msg", "[extension]") REQUIRE_NO_MESSAGES_AT_OUTLET(0, t); WHEN_SEND_FLOAT_TO(0, t, 12); - REQUIRE_LIST_AT_OUTLET(0, t, LF(12)); + REQUIRE_FLOAT_AT_OUTLET(0, t, 12); WHEN_SEND_SYMBOL_TO(0, t, "abc"); REQUIRE_ANY_AT_OUTLET(0, t, LA("abc")); @@ -74,7 +74,7 @@ TEST_CASE("msg", "[extension]") WHEN_SEND_FLOAT_TO(1, t, 123); WHEN_SEND_BANG_TO(0, t); - REQUIRE_LIST_AT_OUTLET(0, t, LF(123)); + REQUIRE_FLOAT_AT_OUTLET(0, t, 123); WHEN_SEND_FLOAT_TO(0, t, 124); REQUIRE_LIST_AT_OUTLET(0, t, LF(123, 124)); diff --git a/ceammc/ext/tests/test_ext_net_host.cpp b/ceammc/ext/tests/test_ext_net_host.cpp index 107ec1021f..cfce3b9807 100644 --- a/ceammc/ext/tests/test_ext_net_host.cpp +++ b/ceammc/ext/tests/test_ext_net_host.cpp @@ -65,9 +65,9 @@ TEST_CASE("net.host->ip", "[externals]") t.sendSymbol(gensym("localhost")); test::pdRunMainLoopMs(100); REQUIRE(t.hasOutputAt(0)); - if(t.isOutputSymbolAt(0)) { + if (t.isOutputSymbolAt(0)) { REQUIRE(t.outputSymbolAt(0)->s_name == std::string("127.0.0.1")); - } else if(t.isOutputListAt(0)) { + } else if (t.isOutputListAt(0)) { REQUIRE(t.outputListAt(0).size() > 0); } } @@ -82,7 +82,10 @@ TEST_CASE("net.host->ip", "[externals]") t.sendSymbol(gensym("localhost")); test::pdRunMainLoopMs(100); REQUIRE(t.hasOutputAt(0)); - REQUIRE(t.outputSymbolAt(0)->s_name == std::string("::1")); + if (t.isOutputListAt(0)) + REQUIRE(t.outputListAt(0).contains(A("::1"))); + else if (t.isOutputSymbolAt(0)) + REQUIRE(t.outputSymbolAt(0)->s_name == std::string("::1")); #endif } } diff --git a/ceammc/ext/tests/test_ext_replace.cpp b/ceammc/ext/tests/test_ext_replace.cpp index 29c55c0597..7dbcd51af5 100644 --- a/ceammc/ext/tests/test_ext_replace.cpp +++ b/ceammc/ext/tests/test_ext_replace.cpp @@ -244,7 +244,7 @@ TEST_CASE("replace", "[PureData]") REQUIRE_LIST_AT_OUTLET(0, t, LF(1, 2, 4, 5)); WHEN_SEND_LIST_TO(0, t, LF(3, 3, 4)); - REQUIRE_LIST_AT_OUTLET(0, t, LF(4)); + REQUIRE_FLOAT_AT_OUTLET(0, t, 4); // replace mode t.setProperty("@from", F(3)); diff --git a/ceammc/ext/tests/test_ext_spat_hoa_in.cpp b/ceammc/ext/tests/test_ext_spat_hoa_in.cpp new file mode 100644 index 0000000000..8a8026844c --- /dev/null +++ b/ceammc/ext/tests/test_ext_spat_hoa_in.cpp @@ -0,0 +1,62 @@ +/***************************************************************************** + * Copyright 2019 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#include "../src/spat/hoa_connections.h" +#include "test_base.h" +#include "test_external.h" + +PD_COMPLETE_TEST_SETUP(HoaIn, spat, hoa_connections) + +TEST_CASE("hoa.in", "[externals]") +{ + pd_test_init(); + + SECTION("init") + { + SECTION("default") + { + TestHoaIn t("hoa.in"); + REQUIRE(t.numInlets() == 0); + REQUIRE(t.numOutlets() == 1); + REQUIRE(t.extra() == 1); + REQUIRE_PROPERTY_FLOAT(t, @index, 1); + } + + SECTION("invalid") + { + TestHoaIn t("hoa.in", LF(0)); + REQUIRE(t.numInlets() == 0); + REQUIRE(t.numOutlets() == 1); + REQUIRE(t.extra() == 1); + REQUIRE_PROPERTY_FLOAT(t, @index, 1); + } + + SECTION("explicit") + { + TestHoaIn t("hoa.in", LF(1)); + REQUIRE(t.numInlets() == 0); + REQUIRE(t.numOutlets() == 1); + REQUIRE(t.extra() == 1); + REQUIRE_PROPERTY_FLOAT(t, @index, 1); + } + + SECTION("explicit2") + { + TestHoaIn t("hoa.in", LF(2)); + REQUIRE(t.numInlets() == 0); + REQUIRE(t.numOutlets() == 1); + REQUIRE(t.extra() == 2); + REQUIRE_PROPERTY_FLOAT(t, @index, 2); + } + } +} diff --git a/ceammc/ext/tests/test_ext_spat_hoa_process.cpp b/ceammc/ext/tests/test_ext_spat_hoa_process.cpp new file mode 100644 index 0000000000..f1ca3f949f --- /dev/null +++ b/ceammc/ext/tests/test_ext_spat_hoa_process.cpp @@ -0,0 +1,1042 @@ +/***************************************************************************** + * Copyright 2019 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#include "../src/spat/hoa_process.h" +#include "../src/spat/mod_spat.h" + +#include "catch.hpp" +#include "test_base.h" +#include "test_external.h" +#include "test_sound.h" + +PD_COMPLETE_TEST_SETUP(HoaProcess, spat, hoa_process) + +TEST_CASE("hoa.process~", "[externals]") +{ + pd_test_init([]() { ceammc_spat_setup(); }); + test::pdPrintToStdError(); + + SECTION("init") + { + SECTION("empty args") + { + TestExtHoaProcess t("hoa.process~"); + REQUIRE(t.numInlets() == 1); + REQUIRE(t.numOutlets() == 0); + REQUIRE_PROPERTY(t, @domain, S("harmonics")); + REQUIRE_PROPERTY_FLOAT(t, @n, 0); + } + + SECTION("no patch") + { + TestExtHoaProcess t("hoa.process~", LA(5)); + REQUIRE(t.numInlets() == 1); + REQUIRE(t.numOutlets() == 0); + REQUIRE_PROPERTY(t, @domain, S("harmonics")); + REQUIRE_PROPERTY_FLOAT(t, @n, 5); + } + + SECTION("invalid patch name") + { + TestExtHoaProcess t("hoa.process~", LA(5, "not-exists")); + REQUIRE(t.numInlets() == 1); + REQUIRE(t.numOutlets() == 0); + REQUIRE_PROPERTY(t, @domain, S("harmonics")); + REQUIRE_PROPERTY_FLOAT(t, @n, 5); + } + + SECTION("patch name 01") + { + TestExtHoaProcess t("hoa.process~", LA(5, TEST_DATA_DIR "/hoa_test_01")); + REQUIRE(t.numInlets() == 2); + REQUIRE(t.numOutlets() == 1); + REQUIRE_PROPERTY(t, @domain, S("harmonics")); + REQUIRE_PROPERTY_FLOAT(t, @n, 5); + } + + SECTION("patch name 02") + { + TestExtHoaProcess t("hoa.process~", LA(5, TEST_DATA_DIR "/hoa_test_02")); + REQUIRE(t.numInlets() == 3); + REQUIRE(t.numOutlets() == 4); + REQUIRE_PROPERTY(t, @domain, S("harmonics")); + REQUIRE_PROPERTY_FLOAT(t, @n, 5); + } + + SECTION("invalid patch name planewaves") + { + TestExtHoaProcess t("hoa.process~", LA(11, "not-exists", "planewaves")); + REQUIRE(t.numInlets() == 1); + REQUIRE(t.numOutlets() == 0); + REQUIRE_PROPERTY(t, @domain, S("planewaves")); + REQUIRE_PROPERTY_FLOAT(t, @n, 11); + } + + SECTION("patch name planewaves") + { + TestExtHoaProcess t("hoa.process~", LA(15, TEST_DATA_DIR "/hoa_test_10", "planewaves")); + REQUIRE_PROPERTY_FLOAT(t, @n, 15); + REQUIRE_PROPERTY(t, @domain, S("planewaves")); + REQUIRE(t.numInlets() == 15); + REQUIRE(t.numOutlets() == 15); + } + } + + SECTION("control 01") + { + TestExtHoaProcess t("hoa.process~", LA(2, TEST_DATA_DIR "/hoa_test_01")); + REQUIRE(t.numInlets() == 2); + REQUIRE(t.numOutlets() == 1); + + // bang + t.sendBangTo(1); + REQUIRE(t.hasOutputAt(0)); + REQUIRE(t.isOutputBangAt(0)); + REQUIRE(t.messagesAt(0) == messageList(&s_bang, &s_bang, &s_bang, &s_bang, &s_bang)); + + // float + t.sendFloatTo(10, 1); + REQUIRE(t.hasOutputAt(0)); + REQUIRE(t.isOutputFloatAt(0)); + REQUIRE(t.outputFloatAt(0) == Approx(10)); + REQUIRE(t.messagesAt(0) == messageList(10, 10, 10, 10, 10)); + + // symbol + t.sendSymbolTo(gensym("ABCD"), 1); + REQUIRE(t.hasOutputAt(0)); + REQUIRE(t.isOutputSymbolAt(0)); + REQUIRE(t.outputSymbolAt(0) == gensym("ABCD")); + REQUIRE(t.messagesAt(0) == messageList(gensym("ABCD"), gensym("ABCD"), gensym("ABCD"), gensym("ABCD"), gensym("ABCD"))); + + // list + t.sendListTo(LF(1, 2, 3), 1); + REQUIRE(t.hasOutputAt(0)); + REQUIRE(t.isOutputListAt(0)); + REQUIRE(t.outputListAt(0) == LF(1, 2, 3)); + REQUIRE(t.messagesAt(0) == messageList(LF(1, 2, 3), LF(1, 2, 3), LF(1, 2, 3), LF(1, 2, 3), LF(1, 2, 3))); + + // any + pd::External a("t", LA("a")); + a.connectTo(0, t, 1); + a.sendMessage(gensym("MSG"), LF(1, 2)); + + REQUIRE(t.hasOutputAt(0)); + REQUIRE(t.isOutputAnyAt(0)); + REQUIRE(t.outputAnyAt(0) == LA("MSG", 1, 2)); + } + + SECTION("control 03") + { + TestExtHoaProcess t("hoa.process~", LA(2, TEST_DATA_DIR "/hoa_test_03")); + REQUIRE(t.numInlets() == 2); + REQUIRE(t.numOutlets() == 1); + } + + SECTION("control 04") + { + TestExtHoaProcess t("hoa.process~", LA(1, TEST_DATA_DIR "/hoa_test_04")); + REQUIRE(t.numInlets() == 2); + REQUIRE(t.numOutlets() == 4); + + pd::External tr("trigger", LA("a")); + REQUIRE(tr.connectTo(0, t, 1)); + + tr.sendMessage(gensym("#1"), LF(2)); + REQUIRE(t.messagesAt(0) == messageList(2)); + REQUIRE(t.messagesAt(1) == messageList(4)); + REQUIRE(t.messagesAt(2) == messageList(6)); + REQUIRE(t.messagesAt(3) == messageList(8)); + } + + SECTION("control 05") + { + TestExtHoaProcess t("hoa.process~", LA(1, TEST_DATA_DIR "/hoa_test_05")); + REQUIRE(t.numInlets() == 2); + REQUIRE(t.numOutlets() == 4); + + pd::External tr("trigger", LA("a")); + REQUIRE(tr.connectTo(0, t, 1)); + + tr.sendMessage(gensym("#1"), LF(2)); + REQUIRE(t.messagesAt(3) == messageList(2)); + REQUIRE(t.messagesAt(2) == messageList(4)); + REQUIRE(t.messagesAt(1) == messageList(6)); + REQUIRE(t.messagesAt(0) == messageList(8)); + + t.clearAll(); + tr.sendMessage(gensym("#0"), LF(3)); + REQUIRE(t.messagesAt(3) == messageList(3)); + REQUIRE(t.messagesAt(2) == messageList(6)); + REQUIRE(t.messagesAt(1) == messageList(9)); + REQUIRE(t.messagesAt(0) == messageList(12)); + } + + SECTION("audio 10") + { + TestExtHoaProcess t("hoa.process~", LA(3, TEST_DATA_DIR "/hoa_test_10")); + REQUIRE(t.numInlets() == 7); + REQUIRE(t.numOutlets() == 7); + } + + SECTION("audio 10 plain") + { + TestExtHoaProcess t("hoa.process~", LA(3, TEST_DATA_DIR "/hoa_test_10", "planewaves")); + REQUIRE(t.numInlets() == 3); + REQUIRE(t.numOutlets() == 3); + } + + SECTION("audio 11") + { + TestExtHoaProcess t("hoa.process~", LA(4, TEST_DATA_DIR "/hoa_test_11")); + REQUIRE(t.numInlets() == 9); + REQUIRE(t.numOutlets() == 9); + } + + SECTION("audio 11 plane") + { + TestExtHoaProcess t("hoa.process~", LA(4, TEST_DATA_DIR "/hoa_test_11", "planewaves")); + REQUIRE(t.numInlets() == 4); + REQUIRE(t.numOutlets() == 4); + } + + SECTION("audio 12") + { + TestExtHoaProcess t("hoa.process~", LA(5, TEST_DATA_DIR "/hoa_test_12")); + REQUIRE(t.numInlets() == 11); + REQUIRE(t.numOutlets() == 12); + } + + SECTION("audio 12 plane") + { + TestExtHoaProcess t("hoa.process~", LA(5, TEST_DATA_DIR "/hoa_test_12", "planewaves")); + REQUIRE(t.numInlets() == 5); + REQUIRE(t.numOutlets() == 6); + } + + SECTION("audio 13") + { + TestExtHoaProcess t("hoa.process~", LA(1, TEST_DATA_DIR "/hoa_test_10")); + REQUIRE(t.numInlets() == 3); + REQUIRE(t.numOutlets() == 3); + REQUIRE(t->numInputChannels() == 3); + REQUIRE(t->numOutputChannels() == 3); + REQUIRE_PROPERTY(t, @domain, S("harmonics")); + + pd::External sig1("sig~", LF(1)); + REQUIRE(sig1.connectTo(0, t, 0)); + pd::External sig2("sig~", LF(-1)); + REQUIRE(sig2.connectTo(0, t, 1)); + pd::External sig3("sig~", LF(2.5)); + REQUIRE(sig3.connectTo(0, t, 2)); + + cnv->addExternal(sig1); + cnv->addExternal(sig2); + cnv->addExternal(sig3); + cnv->addExternal(t); + + REQUIRE(t->inputBuffer().size() == 0); + REQUIRE(t->outputBuffer().size() == 0); + + canvas_resume_dsp(1); + t.schedTicks(1); + canvas_suspend_dsp(); + + REQUIRE(t->inputBuffer().size() != 0); + REQUIRE(t->outputBuffer().size() != 0); + + for (size_t i = 0; i < t->outputBuffer().size(); i++) { + auto samp = t->outputBuffer()[i]; + if (i / t->blockSize() == 0) + REQUIRE(samp == 2); + else if (i / t->blockSize() == 1) + REQUIRE(samp == -2); + else if (i / t->blockSize() == 2) + REQUIRE(samp == 5); + } + } + + SECTION("audio 13 plane") + { + TestExtHoaProcess t("hoa.process~", LA(3, TEST_DATA_DIR "/hoa_test_10", "planewaves")); + REQUIRE(t.numInlets() == 3); + REQUIRE(t.numOutlets() == 3); + REQUIRE(t->numInputChannels() == 3); + REQUIRE(t->numOutputChannels() == 3); + REQUIRE_PROPERTY(t, @domain, S("planewaves")); + + pd::External sig1("sig~", LF(1)); + REQUIRE(sig1.connectTo(0, t, 0)); + pd::External sig2("sig~", LF(-1)); + REQUIRE(sig2.connectTo(0, t, 1)); + pd::External sig3("sig~", LF(2.5)); + REQUIRE(sig3.connectTo(0, t, 2)); + + cnv->addExternal(sig1); + cnv->addExternal(sig2); + cnv->addExternal(sig3); + cnv->addExternal(t); + + REQUIRE(t->inputBuffer().size() == 0); + REQUIRE(t->outputBuffer().size() == 0); + + canvas_resume_dsp(1); + t.schedTicks(1); + canvas_suspend_dsp(); + + REQUIRE(t->inputBuffer().size() != 0); + REQUIRE(t->outputBuffer().size() != 0); + + for (size_t i = 0; i < t->outputBuffer().size(); i++) { + auto samp = t->outputBuffer()[i]; + if (i / t->blockSize() == 0) + REQUIRE(samp == 2); + else if (i / t->blockSize() == 1) + REQUIRE(samp == -2); + else if (i / t->blockSize() == 2) + REQUIRE(samp == 5); + } + } + + SECTION("audio 14 plane") + { + TestExtHoaProcess t("hoa.process~", LA(3, TEST_DATA_DIR "/hoa_test_11", "planewaves")); + REQUIRE(t.numInlets() == 3); + REQUIRE(t.numOutlets() == 3); + REQUIRE(t->numInputChannels() == 3); + REQUIRE(t->numOutputChannels() == 3); + REQUIRE_PROPERTY(t, @domain, S("planewaves")); + } + + SECTION("audio 15 plane") + { + TestExtHoaProcess t("hoa.process~", LA(3, TEST_DATA_DIR "/hoa_test_12", "planewaves")); + REQUIRE(t.numInlets() == 3); + REQUIRE(t.numOutlets() == 4); + REQUIRE(t->numInputChannels() == 3); + REQUIRE(t->numOutputChannels() == 4); + REQUIRE_PROPERTY(t, @domain, S("planewaves")); + + pd::External sig1("sig~", LF(1)); + REQUIRE(sig1.connectTo(0, t, 0)); + pd::External sig2("sig~", LF(-1)); + REQUIRE(sig2.connectTo(0, t, 1)); + pd::External sig3("sig~", LF(2.5)); + REQUIRE(sig3.connectTo(0, t, 2)); + + cnv->addExternal(sig1); + cnv->addExternal(sig2); + cnv->addExternal(sig3); + cnv->addExternal(t); + + REQUIRE(t->inputBuffer().size() == 0); + REQUIRE(t->outputBuffer().size() == 0); + + canvas_resume_dsp(1); + t.schedTicks(1); + canvas_suspend_dsp(); + + REQUIRE(t->inputBuffer().size() != 0); + REQUIRE(t->outputBuffer().size() != 0); + + for (size_t i = 0; i < t->outputBuffer().size(); i++) { + auto samp = t->outputBuffer()[i]; + if (i / t->blockSize() == 0) + REQUIRE(samp == 2); + else if (i / t->blockSize() == 1) + REQUIRE(samp == -2); + else if (i / t->blockSize() == 2) + REQUIRE(samp == 5); + else if (i / t->blockSize() == 3) + REQUIRE(samp == -5); + } + } + + SECTION("audio 16 plane") + { + TestExtHoaProcess t("hoa.process~", LA(3, TEST_DATA_DIR "/hoa_test_13", "planewaves")); + REQUIRE(t.numInlets() == 4); + REQUIRE(t.numOutlets() == 3); + REQUIRE(t->numInputChannels() == 4); + REQUIRE(t->numOutputChannels() == 3); + REQUIRE_PROPERTY(t, @domain, S("planewaves")); + + pd::External sig1("sig~", LF(1)); + REQUIRE(sig1.connectTo(0, t, 0)); + pd::External sig2("sig~", LF(-1)); + REQUIRE(sig2.connectTo(0, t, 1)); + pd::External sig3("sig~", LF(2.5)); + REQUIRE(sig3.connectTo(0, t, 2)); + pd::External sig4("sig~", LF(10)); + REQUIRE(sig4.connectTo(0, t, 3)); + + cnv->addExternal(sig1); + cnv->addExternal(sig2); + cnv->addExternal(sig3); + cnv->addExternal(sig4); + cnv->addExternal(t); + + REQUIRE(t->inputBuffer().size() == 0); + REQUIRE(t->outputBuffer().size() == 0); + + canvas_resume_dsp(1); + t.schedTicks(1); + canvas_suspend_dsp(); + + REQUIRE(t->inputBuffer().size() != 0); + REQUIRE(t->outputBuffer().size() != 0); + + for (size_t i = 0; i < t->outputBuffer().size(); i++) { + auto samp = t->outputBuffer()[i]; + if (i / t->blockSize() == 0) + REQUIRE(samp == 10); + else if (i / t->blockSize() == 1) + REQUIRE(samp == -10); + else if (i / t->blockSize() == 2) + REQUIRE(samp == 25); + } + + sig4.sendFloat(1); + + canvas_resume_dsp(1); + t.schedTicks(1); + canvas_suspend_dsp(); + + for (size_t i = 0; i < t->outputBuffer().size(); i++) { + auto samp = t->outputBuffer()[i]; + if (i / t->blockSize() == 0) + REQUIRE(samp == 1); + else if (i / t->blockSize() == 1) + REQUIRE(samp == -1); + else if (i / t->blockSize() == 2) + REQUIRE(samp == 2.5); + } + } + + SECTION("audio 17 plane") + { + TestExtHoaProcess t("hoa.process~", LA(3, TEST_DATA_DIR "/hoa_test_13a", "planewaves")); + REQUIRE(t.numInlets() == 5); + REQUIRE(t.numOutlets() == 3); + REQUIRE(t->numInputChannels() == 5); + REQUIRE(t->numOutputChannels() == 3); + REQUIRE_PROPERTY(t, @domain, S("planewaves")); + + pd::External sig1("sig~", LF(1)); + REQUIRE(sig1.connectTo(0, t, 0)); + pd::External sig2("sig~", LF(-1)); + REQUIRE(sig2.connectTo(0, t, 1)); + pd::External sig3("sig~", LF(2.5)); + REQUIRE(sig3.connectTo(0, t, 2)); + pd::External sig4("sig~", LF(10)); + REQUIRE(sig4.connectTo(0, t, 3)); + pd::External sig5("sig~", LF(-10)); + REQUIRE(sig5.connectTo(0, t, 4)); + + cnv->addExternal(sig1); + cnv->addExternal(sig2); + cnv->addExternal(sig3); + cnv->addExternal(sig4); + cnv->addExternal(sig5); + cnv->addExternal(t); + + REQUIRE(t->inputBuffer().size() == 0); + REQUIRE(t->outputBuffer().size() == 0); + + canvas_resume_dsp(1); + t.schedTicks(1); + canvas_suspend_dsp(); + + for (size_t i = 0; i < t->outputBuffer().size(); i++) { + auto samp = t->outputBuffer()[i]; + if (i / t->blockSize() == 0) + REQUIRE(samp == -10); + else if (i / t->blockSize() == 1) + REQUIRE(samp == 10); + else if (i / t->blockSize() == 2) + REQUIRE(samp == -25); + } + } + + SECTION("audio 18 plane") + { + TestExtHoaProcess t("hoa.process~", LA(2, TEST_DATA_DIR "/hoa_test_13b", "planewaves")); + REQUIRE(t.numInlets() == 5); + REQUIRE(t.numOutlets() == 2); + REQUIRE(t->numInputChannels() == 4); + REQUIRE(t->numOutputChannels() == 2); + REQUIRE_PROPERTY(t, @domain, S("planewaves")); + + pd::External sig1("sig~", LF(0.5)); + REQUIRE(sig1.connectTo(0, t, 0)); + pd::External sig2("sig~", LF(1)); + REQUIRE(sig2.connectTo(0, t, 1)); + pd::External sig3("sig~", LF(1000)); + REQUIRE(sig3.connectTo(0, t, 2)); + pd::External sig4("sig~", LF(4)); + REQUIRE(sig4.connectTo(0, t, 3)); + pd::External t1("t", LA("a")); + REQUIRE(t1.connectTo(0, t, 4)); + + cnv->addExternal(sig1); + cnv->addExternal(sig2); + cnv->addExternal(sig3); + cnv->addExternal(sig4); + cnv->addExternal(t1); + cnv->addExternal(t); + + REQUIRE(t->inputBuffer().size() == 0); + REQUIRE(t->outputBuffer().size() == 0); + + canvas_resume_dsp(1); + t.schedTicks(1); + canvas_suspend_dsp(); + + REQUIRE(t->inputBuffer().size() != 0); + REQUIRE(t->outputBuffer().size() != 0); + + for (size_t i = 0; i < t->outputBuffer().size(); i++) { + auto samp = t->outputBuffer()[i]; + if (i / t->blockSize() == 0) + REQUIRE(samp == 2); + else if (i / t->blockSize() == 1) + REQUIRE(samp == 4); + } + + // send float to all instances + t1.sendFloat(100); + canvas_resume_dsp(1); + t.schedTicks(1); + canvas_suspend_dsp(); + + for (size_t i = 0; i < t->outputBuffer().size(); i++) { + auto samp = t->outputBuffer()[i]; + if (i / t->blockSize() == 0) + REQUIRE(samp == 102); + else if (i / t->blockSize() == 1) + REQUIRE(samp == 104); + } + + // send float to @target 1 + t1.sendMessage("#1", 1000); + canvas_resume_dsp(1); + t.schedTicks(1); + canvas_suspend_dsp(); + + for (size_t i = 0; i < t->outputBuffer().size(); i++) { + auto samp = t->outputBuffer()[i]; + if (i / t->blockSize() == 0) + REQUIRE(samp == 102); + // only target 1 affected + else if (i / t->blockSize() == 1) + REQUIRE(samp == 1004); + } + + // send float to @target 0 + t1.sendMessage("#0", 500); + canvas_resume_dsp(1); + t.schedTicks(1); + canvas_suspend_dsp(); + + for (size_t i = 0; i < t->outputBuffer().size(); i++) { + auto samp = t->outputBuffer()[i]; + // only target 1 affected + if (i / t->blockSize() == 0) + REQUIRE(samp == 502); + else if (i / t->blockSize() == 1) + REQUIRE(samp == 1004); + } + } + + SECTION("@target") + { + TestExtHoaProcess t("hoa.process~", LA(2, TEST_DATA_DIR "/hoa_test_01")); + REQUIRE(t.numInlets() == 2); + REQUIRE(t.numOutlets() == 1); + + pd::External tr("trigger", LA("a")); + REQUIRE(tr.connectTo(0, t, 1)); + + // invalid instance index + tr.sendMessage("#100"); + REQUIRE(t.messagesAt(0).empty()); + + // invalid instance index + tr.sendMessage("#5"); + REQUIRE(t.messagesAt(0).empty()); + + // bang + t.clearAll(); + tr.sendMessage("#1"); + REQUIRE(t.messagesAt(0) == messageList(&s_bang)); + + t.clearAll(); + tr.sendMessage("#1", "bang"); + REQUIRE(t.messagesAt(0) == messageList(&s_bang)); + + // float + t.clearAll(); + tr.sendMessage("#1", -10); + REQUIRE(t.messagesAt(0) == messageList(-10)); + + t.clearAll(); + tr.sendMessage("#1", "float", -10); + REQUIRE(t.messagesAt(0) == messageList(-10)); + + // symbol + t.clearAll(); + tr.sendMessage("#1", "symbol", "ABC"); + REQUIRE(t.messagesAt(0) == messageList(gensym("ABC"))); + + // list + t.clearAll(); + tr.sendMessage("#1", "list", 1, 2, 3); + REQUIRE(t.messagesAt(0) == messageList(LF(1, 2, 3))); + + t.clearAll(); + tr.sendMessage("#1", "list", 1); + REQUIRE(t.messagesAt(0) == messageList(LF(1))); + + t.clearAll(); + tr.sendMessage("#1", "list"); + REQUIRE(t.messagesAt(0) == messageList(AtomList())); + + t.clearAll(); + tr.sendMessage("#1", 1, 2); + REQUIRE(t.messagesAt(0) == messageList(LF(1, 2))); + + // any + t.clearAll(); + tr.sendMessage("#1", "msg"); + REQUIRE(t.messagesAt(0) == messageList(Message(gensym("msg"), L()))); + + t.clearAll(); + tr.sendMessage("#1", "msg", "A", -100); + REQUIRE(t.messagesAt(0) == messageList(Message("msg", "A", -100))); + + // any - to all: ok + t.clearAll(); + Message m0(gensym("msg"), L()); + tr.sendMessage(gensym("msg")); + REQUIRE(t.messagesAt(0) == messageList(m0, m0, m0, m0, m0)); + + // bang - to all: ok + t.clearAll(); + tr.sendBang(); + REQUIRE(t.messagesAt(0) == messageList(L(), L(), L(), L(), L())); + + // float - to all: ok + t.clearAll(); + tr.sendFloat(111); + REQUIRE(t.messagesAt(0) == messageList(LF(111), LF(111), LF(111), LF(111), LF(111))); + + // float - to all: ok + t.clearAll(); + tr.sendMessage(&s_float, LF(100)); + REQUIRE(t.messagesAt(0) == messageList(LF(100), LF(100), LF(100), LF(100), LF(100))); + + // symbol - to all: ok + t.clearAll(); + tr.sendSymbol(gensym("A")); + REQUIRE(t.messagesAt(0) == messageList(gensym("A"), gensym("A"), gensym("A"), gensym("A"), gensym("A"))); + + // symbol - to all: ok + t.clearAll(); + tr.sendMessage(&s_symbol, LA("B")); + REQUIRE(t.messagesAt(0) == messageList(gensym("B"), gensym("B"), gensym("B"), gensym("B"), gensym("B"))); + + // list - to all: ok + t.clearAll(); + tr.sendList(LF(1, 2, 3)); + REQUIRE(t.messagesAt(0) == messageList(LF(1, 2, 3), LF(1, 2, 3), LF(1, 2, 3), LF(1, 2, 3), LF(1, 2, 3))); + + // list - to all: ok + t.clearAll(); + tr.sendMessage(&s_list, LF(3, 4)); + REQUIRE(t.messagesAt(0) == messageList(LF(3, 4), LF(3, 4), LF(3, 4), LF(3, 4), LF(3, 4))); + + // any - to all: ok + t.clearAll(); + Message m1(gensym("msg1"), L()); + tr.sendMessage(m1); + REQUIRE(t.messagesAt(0) == messageList(m1, m1, m1, m1, m1)); + + // any - to all: ok + t.clearAll(); + Message m2(gensym("msg2"), LF(1, 2)); + tr.sendMessage(m2); + REQUIRE(t.messagesAt(0) == messageList(m2, m2, m2, m2, m2)); + + // any - to all: error + t.clearAll(); + tr.sendMessage("#-10"); + REQUIRE_FALSE(t.hasOutputAt(0)); + + // any - to all: error + t.clearAll(); + tr.sendMessage("#"); + REQUIRE_FALSE(t.hasOutputAt(0)); + + // any - to all + t.clearAll(); + tr.sendMessage("#msg"); + REQUIRE_FALSE(t.hasOutputAt(0)); + + ///// SEND TO ALL + /// BANG + t.clearAll(); + tr.sendMessage("#*"); + REQUIRE(t.messagesAt(0) == messageList(&s_bang, &s_bang, &s_bang, &s_bang, &s_bang)); + + t.clearAll(); + tr.sendMessage("#*1"); + REQUIRE(t.messagesAt(0) == messageList(&s_bang, &s_bang, &s_bang, &s_bang)); + + t.clearAll(); + tr.sendMessage("#*3"); + REQUIRE(t.messagesAt(0) == messageList(&s_bang, &s_bang)); + + t.clearAll(); + tr.sendMessage("#*4"); + REQUIRE(t.messagesAt(0) == messageList(&s_bang)); + + t.clearAll(); + tr.sendMessage("#*5"); + REQUIRE_FALSE(t.hasOutputAt(0)); + + t.clearAll(); + tr.sendMessage("#*asdsad"); + REQUIRE_FALSE(t.hasOutputAt(0)); + + /// BANG s_bang + t.clearAll(); + tr.sendMessage("#*", &s_bang); + REQUIRE(t.messagesAt(0) == messageList(&s_bang, &s_bang, &s_bang, &s_bang, &s_bang)); + + t.clearAll(); + tr.sendMessage("#*2", &s_bang); + REQUIRE(t.messagesAt(0) == messageList(&s_bang, &s_bang, &s_bang)); + + /// FLOAT + t.clearAll(); + tr.sendMessage("#*", 100); + REQUIRE(t.messagesAt(0) == messageList(LF(100), LF(100), LF(100), LF(100), LF(100))); + + t.clearAll(); + tr.sendMessage("#*1", "float", 100); + REQUIRE(t.messagesAt(0) == messageList(LF(100), LF(100), LF(100), LF(100))); + + t.clearAll(); + tr.sendMessage("#*5", "float", 100); + REQUIRE_FALSE(t.hasOutputAt(0)); + + /// SYMBOL + t.clearAll(); + tr.sendMessage("#*2", "symbol", "X"); + REQUIRE(t.messagesAt(0) == messageList(LA("X"), LA("X"), LA("X"))); + + /// LIST + t.clearAll(); + tr.sendMessage("#*3", 1, 2, 3); + REQUIRE(t.messagesAt(0) == messageList(LF(1, 2, 3), LF(1, 2, 3))); + + t.clearAll(); + tr.sendMessage("#*4", "list", 1, 2, 3); + REQUIRE(t.messagesAt(0) == messageList(LF(1, 2, 3))); + + /// ANY + t.clearAll(); + Message m20a(gensym("msg"), L()); + tr.sendMessage("#*3", "msg"); + REQUIRE(t.messagesAt(0) == messageList(m20a, m20a)); + + t.clearAll(); + tr.sendMessage("#*3", "msg", 1, 2); + REQUIRE(t.messagesAt(0) == messageList(Message("msg", 1, 2), Message("msg", 1, 2))); + + ///// SEND TO > + /// BANG + t.clearAll(); + tr.sendMessage("#>"); + REQUIRE_FALSE(t.hasOutputAt(0)); + + t.clearAll(); + tr.sendMessage("#>NAN"); + REQUIRE_FALSE(t.hasOutputAt(0)); + + t.clearAll(); + tr.sendMessage("#>-10"); + REQUIRE_FALSE(t.hasOutputAt(0)); + + t.clearAll(); + tr.sendMessage("#>0"); + REQUIRE(t.messagesAt(0) == messageList(&s_bang, &s_bang, &s_bang, &s_bang)); + + /// FLOAT + t.clearAll(); + tr.sendMessage("#>2", 100); + REQUIRE(t.messagesAt(0) == messageList(LF(100), LF(100))); + + t.clearAll(); + tr.sendMessage("#>3", "float", 100); + REQUIRE(t.messagesAt(0) == messageList(LF(100))); + + t.clearAll(); + tr.sendMessage("#>4", 100); + REQUIRE_FALSE(t.hasOutputAt(0)); + + /// SYMBOL + t.clearAll(); + tr.sendMessage("#>3", "symbol", "ABC"); + REQUIRE(t.messagesAt(0) == messageList(LA("ABC"))); + + t.clearAll(); + tr.sendMessage("#>4", "symbol", "ABC"); + REQUIRE_FALSE(t.hasOutputAt(0)); + + /// LIST + t.clearAll(); + tr.sendMessage("#>3", 1, 2, 3); + REQUIRE(t.messagesAt(0) == messageList(LF(1, 2, 3))); + + t.clearAll(); + tr.sendMessage("#>2", "list", 1, 2, 3); + REQUIRE(t.messagesAt(0) == messageList(LF(1, 2, 3), LF(1, 2, 3))); + + t.clearAll(); + tr.sendMessage("#>4", "list", 1, 2, 3); + REQUIRE_FALSE(t.hasOutputAt(0)); + + /// ANY + t.clearAll(); + tr.sendMessage("#>3", "msg", 1, 2); + REQUIRE(t.messagesAt(0) == messageList(Message("msg", 1, 2))); + + t.clearAll(); + tr.sendMessage("#>4", "msg", 1, 2); + REQUIRE_FALSE(t.hasOutputAt(0)); + + ///// SEND TO < + /// BANG + t.clearAll(); + tr.sendMessage("#<"); + REQUIRE_FALSE(t.hasOutputAt(0)); + + t.clearAll(); + tr.sendMessage("#numInlets() == 1); REQUIRE(t->numOutlets() == 1); - REQUIRE_UI_LIST_PROPERTY(t, "size", LF(480, 120)); + REQUIRE_UI_LIST_PROPERTY(t, "size", LF(300, 100)); REQUIRE_UI_FLOAT_PROPERTY(t, "cursor_samp", 0); REQUIRE_UI_FLOAT_PROPERTY(t, "cursor_phase", 0); REQUIRE_UI_FLOAT_PROPERTY(t, "cursor_sec", 0); diff --git a/ceammc/ext/tests/test_ext_ui_bang.cpp b/ceammc/ext/tests/test_ext_ui_bang.cpp index 3e2cda3e5c..812e75ec4d 100644 --- a/ceammc/ext/tests/test_ext_ui_bang.cpp +++ b/ceammc/ext/tests/test_ext_ui_bang.cpp @@ -28,6 +28,23 @@ TEST_CASE("ui.bang", "[ui.bang]") REQUIRE(t->numOutlets() == 1); REQUIRE_UI_LIST_PROPERTY(t, "send", LA("(null)")); REQUIRE_UI_LIST_PROPERTY(t, "receive", LA("(null)")); + REQUIRE_UI_LIST_PROPERTY(t, "background_color", LX(0.93, 0.93, 0.93, 1)); + } + + SECTION("label") + { + TestExtBang t("ui.bang"); + t.call("@label", LA("ABC")); + REQUIRE_UI_LIST_PROPERTY(t, "label", LA("ABC")); + + t.call("@label", LA("A B")); + REQUIRE_UI_LIST_PROPERTY(t, "label", LA("A B")); + + t.call("@label", LA("A", "B", "C")); + REQUIRE_UI_LIST_PROPERTY(t, "label", LA("A B C")); + + t.call("@label", LA("A", 1.5, 2)); + REQUIRE_UI_LIST_PROPERTY(t, "label", LA("A 1.5 2")); } SECTION("external") diff --git a/ceammc/ext/tests/test_ext_ui_gain.cpp b/ceammc/ext/tests/test_ext_ui_gain.cpp index 73d140d1b8..4d1bad5383 100644 --- a/ceammc/ext/tests/test_ext_ui_gain.cpp +++ b/ceammc/ext/tests/test_ext_ui_gain.cpp @@ -14,7 +14,7 @@ #include "../ui/ui_gain.h" #include "test_ui.h" -UI_COMPLETE_DSP_TEST_SETUP(Gain) +UI_COMPLETE_TEST_SETUP(Gain) TEST_CASE("ui.gain~", "[ui.gain~]") { diff --git a/ceammc/ext/tests/test_ext_ui_icon.cpp b/ceammc/ext/tests/test_ext_ui_icon.cpp index 8fd9cd3f38..a81f11b2e4 100644 --- a/ceammc/ext/tests/test_ext_ui_icon.cpp +++ b/ceammc/ext/tests/test_ext_ui_icon.cpp @@ -28,7 +28,7 @@ TEST_CASE("ui.icon", "[ui.icon]") REQUIRE(t->numInlets() == 1); REQUIRE_UI_LIST_PROPERTY(t, "size", LF(24, 24)); REQUIRE_UI_LIST_PROPERTY(t, "presetname", LA("ui.icon.0")); - REQUIRE_UI_LIST_PROPERTY(t, "icon", LA("default")); + REQUIRE_UI_LIST_PROPERTY(t, "icon", LA("help")); REQUIRE_UI_LIST_PROPERTY(t, "mode", LA("button")); REQUIRE_UI_FLOAT_PROPERTY(t, "enabled", 1); } diff --git a/ceammc/ext/tests/test_ext_ui_knob.cpp b/ceammc/ext/tests/test_ext_ui_knob.cpp index b0f37b8edc..2b6737a897 100644 --- a/ceammc/ext/tests/test_ext_ui_knob.cpp +++ b/ceammc/ext/tests/test_ext_ui_knob.cpp @@ -26,8 +26,8 @@ TEST_CASE("ui.knob", "[ui.knob]") REQUIRE(t->numOutlets() == 1); REQUIRE(t->midiChannel() == 0); REQUIRE(t->midiControl() == 0); + REQUIRE(t->knobPhase() == 0); REQUIRE(t->value() == 0); - REQUIRE(t->realValue() == 0); float prop_min, prop_max, f; AtomList l; @@ -99,16 +99,11 @@ TEST_CASE("ui.knob", "[ui.knob]") pd_float(t->asPd(), 0.6); REQUIRE(t->getProperty(gensym("value"), f)); REQUIRE(f == 0.6f); - REQUIRE(t->value() == 0.6f); + REQUIRE(t->knobPhase() == 0.6f); REQUIRE(t->range() == 1); REQUIRE(t->minValue() == 0); REQUIRE(t->maxValue()); - t->setValue(-100); - REQUIRE(t->value() == 0); - t->setValue(1.1); - REQUIRE(t->value() == 1); - SECTION("new one") { TestKnob t2("ui.knob"); @@ -124,16 +119,16 @@ TEST_CASE("ui.knob", "[ui.knob]") REQUIRE(t->minValue() == -10); REQUIRE(t->maxValue() == 10); REQUIRE(t->range() == 20); - t->setValue(0.1f); - REQUIRE(t->value() == 0.1f); - REQUIRE(t->realValue() == -8.f); + t->setValue(-8); + REQUIRE(t->knobPhase() == 0.1f); + REQUIRE(t->value() == -8.f); - t->setRealValue(-11); - REQUIRE(t->realValue() == -10); - REQUIRE(t->value() == 0); - t->setRealValue(11); - REQUIRE(t->realValue() == 10); - REQUIRE(t->value() == 1); + t->setValue(-11); + REQUIRE(t->value() == -10); + REQUIRE(t->knobPhase() == 0); + t->setValue(11); + REQUIRE(t->value() == 10); + REQUIRE(t->knobPhase() == 1); SECTION("reversed") { @@ -141,20 +136,21 @@ TEST_CASE("ui.knob", "[ui.knob]") REQUIRE(t->maxValue() == -10); REQUIRE(t->minValue() == 10); REQUIRE(t->range() == -20); - REQUIRE(t->value() == 0.f); - REQUIRE(t->realValue() == 10); - t->setValue(0.25); - REQUIRE(t->value() == 0.25f); - REQUIRE(t->realValue() == 5); - t->setValue(1); - REQUIRE(t->realValue() == -10); - - t->setRealValue(-11); - REQUIRE(t->realValue() == -10); - REQUIRE(t->value() == 1); - t->setRealValue(12); - REQUIRE(t->realValue() == 10); - REQUIRE(t->value() == 0); + REQUIRE(t->knobPhase() == 0.f); + REQUIRE(t->value() == 10); + t->setValue(5); + REQUIRE(t->knobPhase() == 0.25f); + REQUIRE(t->value() == 5); + t->setValue(-10); + REQUIRE(t->knobPhase() == 1); + REQUIRE(t->value() == -10); + + t->setValue(-11); + REQUIRE(t->value() == -10); + REQUIRE(t->knobPhase() == 1); + t->setValue(12); + REQUIRE(t->value() == 10); + REQUIRE(t->knobPhase() == 0); } SECTION("invalid range") @@ -163,15 +159,10 @@ TEST_CASE("ui.knob", "[ui.knob]") REQUIRE(t->maxValue() == 0); REQUIRE(t->minValue() == 0); REQUIRE(t->range() == 0); + REQUIRE(t->knobPhase() == 0.f); REQUIRE(t->value() == 0.f); - REQUIRE(t->realValue() == 0.f); t->setValue(0); REQUIRE(t->value() == 0); - t->setValue(1); - REQUIRE(t->value() == 1); - REQUIRE(t->realValue() == 0); - t->setRealValue(0); - REQUIRE(t->realValue() == 0); } } @@ -222,80 +213,80 @@ TEST_CASE("ui.knob", "[ui.knob]") SECTION("+") { TestKnob t("ui.knob"); - REQUIRE(t->realValue() == 0.f); + REQUIRE(t->value() == 0.f); t.call("+", LF(0.1)); - REQUIRE(t->realValue() == 0.1f); + REQUIRE(t->value() == 0.1f); t.call("+", LF(10)); - REQUIRE(t->realValue() == 1); + REQUIRE(t->value() == 1); } SECTION("-") { - TestKnob t("ui.knob", LA("@value", 0.5f)); - REQUIRE(t->realValue() == 0.5f); + TestKnob t("ui.knob"); + t->setValue(0.5); t.call("-", LF(0.5)); - REQUIRE(t->realValue() == 0.f); + REQUIRE(t->value() == 0.f); t.call("-", LF(0.1)); - REQUIRE(t->realValue() == 0.f); + REQUIRE(t->value() == 0.f); } SECTION("++") { TestKnob t("ui.knob", LA("@min", -1, "@max", 2)); - REQUIRE(t->realValue() == -1); + REQUIRE(t->value() == -1); t.call("++"); - REQUIRE(t->realValue() == Approx(0.f)); + REQUIRE(t->value() == Approx(0.f)); t.call("++"); - REQUIRE(t->realValue() == 1); + REQUIRE(t->value() == 1); t.call("++"); - REQUIRE(t->realValue() == 2); + REQUIRE(t->value() == 2); t.call("++"); - REQUIRE(t->realValue() == 2); + REQUIRE(t->value() == 2); t.call("++"); - REQUIRE(t->realValue() == 2); + REQUIRE(t->value() == 2); } SECTION("--") { TestKnob t("ui.knob", LA("@min", -1, "@max", 2)); - t->setRealValue(2); - REQUIRE(t->realValue() == 2); + t->setValue(2); + REQUIRE(t->value() == 2); t.call("--"); - REQUIRE(t->realValue() == 1); + REQUIRE(t->value() == 1); t.call("--"); - REQUIRE(t->realValue() == Approx(0.f)); + REQUIRE(t->value() == Approx(0.f)); t.call("--"); - REQUIRE(t->realValue() == -1); + REQUIRE(t->value() == -1); t.call("--"); - REQUIRE(t->realValue() == -1); + REQUIRE(t->value() == -1); } SECTION("mul") { TestKnob t("ui.knob", LA("@min", 1, "@max", 12)); - REQUIRE(t->realValue() == 1); + REQUIRE(t->value() == 1); t.call("*", LF(2)); - REQUIRE(t->realValue() == 2); + REQUIRE(t->value() == 2); t.call("*", LF(2)); - REQUIRE(t->realValue() == 4); + REQUIRE(t->value() == 4); t.call("*", LF(2)); - REQUIRE(t->realValue() == 8); + REQUIRE(t->value() == 8); t.call("*", LF(2)); - REQUIRE(t->realValue() == 12); + REQUIRE(t->value() == 12); t.call("*", LF(2)); - REQUIRE(t->realValue() == 12); + REQUIRE(t->value() == 12); } SECTION("div") { TestKnob t("ui.knob", LA("@min", 12, "@max", 1)); - REQUIRE(t->realValue() == Approx(12)); + REQUIRE(t->value() == Approx(12)); t.call("/", LF(2)); - REQUIRE(t->realValue() == Approx(6)); + REQUIRE(t->value() == Approx(6)); t.call("/", LF(2)); - REQUIRE(t->realValue() == Approx(3)); + REQUIRE(t->value() == Approx(3)); t.call("/", LF(2)); - REQUIRE(t->realValue() == Approx(1.5)); + REQUIRE(t->value() == Approx(1.5)); t.call("/", LF(0.f)); } } @@ -309,23 +300,23 @@ TEST_CASE("ui.knob", "[ui.knob]") SECTION("presets") { TestKnob t("ui.knob", LA("@min", 10, "@max", 100)); - t->setRealValue(20); + t->setValue(20); t.call("store", LF(0.f)); - t->setRealValue(40); + t->setValue(40); t.call("store", LF(1)); - t->setRealValue(60); + t->setValue(60); t.call("store", LF(2)); t.call("load", LF(0.f)); - REQUIRE(t->realValue() == Approx(20)); + REQUIRE(t->value() == Approx(20)); t.call("load", LF(1)); - REQUIRE(t->realValue() == Approx(40)); + REQUIRE(t->value() == Approx(40)); t.call("load", LF(2)); - REQUIRE(t->realValue() == Approx(60)); + REQUIRE(t->value() == Approx(60)); t.call("load", LF(100)); - REQUIRE(t->realValue() == Approx(10)); + REQUIRE(t->value() == Approx(10)); t.call("load"); - REQUIRE(t->realValue() == Approx(20)); + REQUIRE(t->value() == Approx(20)); } SECTION("onMidi") @@ -335,77 +326,77 @@ TEST_CASE("ui.knob", "[ui.knob]") t->onMidiCtrl(LF(1, 2)); t->onMidiCtrl(LF(1, 2, 3)); - REQUIRE(t->realValue() == 0); + REQUIRE(t->value() == 0); t->setProperty(gensym("midi_control"), LF(23)); t->onMidiCtrl(LF(1, 2, 3)); - REQUIRE(t->realValue() == 0); + REQUIRE(t->value() == 0); t->onMidiCtrl(LF(23, 64, 3)); - REQUIRE(t->realValue() == Approx(0.50394f)); + REQUIRE(t->value() == Approx(0.50394f)); t->setProperty(gensym("midi_channel"), LF(2)); t->onMidiCtrl(LF(23, 12, 3)); - REQUIRE(t->realValue() == Approx(0.50394f)); + REQUIRE(t->value() == Approx(0.50394f)); t->onMidiCtrl(LF(23, 12, 2)); - REQUIRE(t->realValue() == Approx(0.09449)); + REQUIRE(t->value() == Approx(0.09449)); t->onMidiCtrl(LF(1, 22, 2)); - REQUIRE(t->realValue() == Approx(0.09449)); + REQUIRE(t->value() == Approx(0.09449)); t->onMidiCtrl(LF(23, 127, 2)); - REQUIRE(t->realValue() == Approx(1)); + REQUIRE(t->value() == Approx(1)); t->onMidiCtrl(LF(23, 0.f, 2)); - REQUIRE(t->realValue() == Approx(0)); + REQUIRE(t->value() == Approx(0)); SECTION("pickup over min->max") { TestKnob t2("ui.knob", LA("@midi_control", 10, "@max", 127)); - t2->setRealValue(30); - REQUIRE(t2->realValue() == Approx(30)); + t2->setValue(30); + REQUIRE(t2->value() == Approx(30)); // not picked up t2->onMidiCtrl(LF(10, 2, 1)); t2->onMidiCtrl(LF(10, 3, 1)); t2->onMidiCtrl(LF(10, 4, 1)); - REQUIRE(t2->realValue() == Approx(30)); + REQUIRE(t2->value() == Approx(30)); t2->onMidiCtrl(LF(10, 29, 1)); // not picked - REQUIRE(t2->realValue() == Approx(30)); + REQUIRE(t2->value() == Approx(30)); // picked t2->onMidiCtrl(LF(10, 31, 1)); - REQUIRE(t2->realValue() == Approx(31)); + REQUIRE(t2->value() == Approx(31)); t2->onMidiCtrl(LF(10, 60, 1)); - REQUIRE(t2->realValue() == Approx(60)); + REQUIRE(t2->value() == Approx(60)); t2->onMidiCtrl(LF(10, 10, 1)); - REQUIRE(t2->realValue() == Approx(10)); + REQUIRE(t2->value() == Approx(10)); } SECTION("pickup over max->min") { TestKnob t2("ui.knob", LA("@midi_control", 10, "@max", 127)); - t2->setRealValue(30); - REQUIRE(t2->realValue() == Approx(30)); + t2->setValue(30); + REQUIRE(t2->value() == Approx(30)); // not picked up t2->onMidiCtrl(LF(10, 60, 1)); t2->onMidiCtrl(LF(10, 61, 1)); t2->onMidiCtrl(LF(10, 62, 1)); - REQUIRE(t2->realValue() == Approx(30)); + REQUIRE(t2->value() == Approx(30)); t2->onMidiCtrl(LF(10, 31, 1)); // not picked - REQUIRE(t2->realValue() == Approx(30)); + REQUIRE(t2->value() == Approx(30)); // picked t2->onMidiCtrl(LF(10, 29, 1)); - REQUIRE(t2->realValue() == Approx(29)); + REQUIRE(t2->value() == Approx(29)); t2->onMidiCtrl(LF(10, 60, 1)); - REQUIRE(t2->realValue() == Approx(60)); + REQUIRE(t2->value() == Approx(60)); t2->onMidiCtrl(LF(10, 10, 1)); - REQUIRE(t2->realValue() == Approx(10)); + REQUIRE(t2->value() == Approx(10)); } SECTION("pickup over equal") @@ -414,25 +405,25 @@ TEST_CASE("ui.knob", "[ui.knob]") // not picked up t2->onMidiCtrl(LF(10, 60, 1)); - REQUIRE(t2->realValue() == Approx(0)); + REQUIRE(t2->value() == Approx(0)); t2->onMidiCtrl(LF(10, 30, 1)); // not picked - REQUIRE(t2->realValue() == Approx(0)); + REQUIRE(t2->value() == Approx(0)); // picked t2->onMidiCtrl(LF(10, 0.f, 1)); - REQUIRE(t2->realValue() == Approx(0)); + REQUIRE(t2->value() == Approx(0)); t2->onMidiCtrl(LF(10, 60, 1)); - REQUIRE(t2->realValue() == Approx(60)); + REQUIRE(t2->value() == Approx(60)); t2->onMidiCtrl(LF(10, 10, 1)); - REQUIRE(t2->realValue() == Approx(10)); + REQUIRE(t2->value() == Approx(10)); } } SECTION("send/receive test") { pd::External r1("receive", LA("r1")); - ExternalOutput out; + LogExternalOutput out; REQUIRE(r1.connectTo(0, out.object(), 0)); TestKnob t("ui.knob", LA("@send", "r1", "@receive", "s1")); @@ -466,17 +457,17 @@ TEST_CASE("ui.knob", "[ui.knob]") SECTION("output") { pd::External knob("ui.knob"); - ExternalOutput out; + LogExternalOutput out; REQUIRE(knob.connectTo(0, out.object(), 0)); - knob.bang(); + knob.sendBang(); REQUIRE(out.msg().atomValue().asFloat() == 0.f); knob.sendFloat(0.4); REQUIRE(out.msg().atomValue().asFloat() == 0.4f); out.reset(); - knob.bang(); + knob.sendBang(); REQUIRE(out.msg().atomValue().asFloat() == 0.4f); // list auto convert test @@ -488,7 +479,7 @@ TEST_CASE("ui.knob", "[ui.knob]") knob.sendMessage(gensym("@value"), LF(0.5)); REQUIRE(out.msg().isNone()); - knob.bang(); + knob.sendBang(); REQUIRE(out.msg().atomValue().asFloat() == 0.5f); knob.sendMessage(gensym("@value?")); @@ -506,7 +497,7 @@ TEST_CASE("ui.knob", "[ui.knob]") out.reset(); knob.sendMessage(gensym("set"), LF(0.1)); REQUIRE(out.msg().isNone()); - knob.bang(); + knob.sendBang(); REQUIRE(out.msg().atomValue().asFloat() == 0.1f); } @@ -534,8 +525,8 @@ TEST_CASE("ui.knob", "[ui.knob]") "@knob_color", "@label", "@label_align", "@label_color") + LA("@label_inner", "@label_margins", "@label_side", "@label_valign", "@max", "@midi_channel", "@midi_control") - + LA("@midi_pickup", "@min", "@pinned", "@presetname", "@receive", - "@scale_color", "@send", "@show_range", "@size", "@value"); + + LA("@midi_pickup", "@min", "@mouse_events", "@pinned", "@presetname", "@receive", + "@scale", "@scale_color", "@send", "@show_range", "@size", "@value"); REQUIRE(props == desired); t.call("@max?", LA("@min?", "@xxx?", "", "@non", "unknown", 100, "@receive?")); diff --git a/ceammc/ext/tests/test_ext_ui_meter.cpp b/ceammc/ext/tests/test_ext_ui_meter.cpp index 855e302b31..ce1aaaabb2 100644 --- a/ceammc/ext/tests/test_ext_ui_meter.cpp +++ b/ceammc/ext/tests/test_ext_ui_meter.cpp @@ -14,7 +14,7 @@ #include "../ui/ui_meter.h" #include "test_ui.h" -UI_COMPLETE_DSP_TEST_SETUP(Meter) +UI_COMPLETE_TEST_SETUP(Meter) TEST_CASE("ui.meter~", "[ui.meter~]") { diff --git a/ceammc/ext/tests/test_ext_ui_number_tilde.cpp b/ceammc/ext/tests/test_ext_ui_number_tilde.cpp index 3cc9b7b10a..bbeb89587c 100644 --- a/ceammc/ext/tests/test_ext_ui_number_tilde.cpp +++ b/ceammc/ext/tests/test_ext_ui_number_tilde.cpp @@ -14,7 +14,7 @@ #include "../ui/ui_number_tilde.h" #include "test_ui.h" -UI_COMPLETE_DSP_TEST_SETUP(NumberTilde) +UI_COMPLETE_TEST_SETUP(NumberTilde) TEST_CASE("ui.number~", "[ui.number~]") { diff --git a/ceammc/ext/tests/test_ext_ui_polar.cpp b/ceammc/ext/tests/test_ext_ui_polar.cpp new file mode 100644 index 0000000000..d67a38cdb2 --- /dev/null +++ b/ceammc/ext/tests/test_ext_ui_polar.cpp @@ -0,0 +1,1001 @@ +/***************************************************************************** + * Copyright 2018 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#include "../ui/mod_ui.h" +#include "../ui/ui_polar.h" +#include "test_ui.h" + +#include + +void test_print(const char* s) +{ + std::cerr << s << std::flush; +} + +UI_COMPLETE_TEST_SETUP(Polar) + +TEST_CASE("ui.polar", "[ui.polar]") +{ + ui_test_init(); + + SECTION("construct") + { + SECTION("default") + { + TestPolar t("ui.polar"); + REQUIRE(t->numInlets() == 1); + REQUIRE(t->numOutlets() == 1); + REQUIRE_UI_LIST_PROPERTY(t, "size", LF(100, 100)); + REQUIRE_UI_FLOAT_PROPERTY(t, "angle", 0); + REQUIRE_UI_FLOAT_PROPERTY(t, "radius", 0); + REQUIRE_UI_FLOAT_PROPERTY(t, "clockwise", 1); + REQUIRE_UI_FLOAT_PROPERTY(t, "radians", 0); + REQUIRE_UI_FLOAT_PROPERTY(t, "positive", 0); + REQUIRE_UI_LIST_PROPERTY(t, "direction", LA("N")); + REQUIRE(t->presetId() == gensym("ui.polar.0")); + REQUIRE(t->realValue() == LX(0, 0)); + REQUIRE(t->realAngle() == Approx(0)); + } + + SECTION("direction N") + { + TestPolar t("ui.polar", LA("@direction", "N")); + REQUIRE_UI_LIST_PROPERTY(t, "direction", LA("N")); + REQUIRE_UI_FLOAT_PROPERTY(t, "angle", 0); + REQUIRE_UI_FLOAT_PROPERTY(t, "radius", 0); + REQUIRE(t->realValue() == LX(0, 0)); + REQUIRE(t->realAngle() == Approx(0)); + } + + SECTION("direction E") + { + TestPolar t("ui.polar", LA("@direction", "E")); + REQUIRE_UI_LIST_PROPERTY(t, "direction", LA("E")); + REQUIRE_UI_FLOAT_PROPERTY(t, "angle", Approx(0)); + REQUIRE_UI_FLOAT_PROPERTY(t, "radius", 0); + REQUIRE(t->realValue() == LX(0, 0)); + REQUIRE(t->realAngle() == Approx(0)); + } + + SECTION("direction W") + { + TestPolar t("ui.polar", LA("@direction", "W")); + REQUIRE_UI_LIST_PROPERTY(t, "direction", LA("W")); + REQUIRE_UI_FLOAT_PROPERTY(t, "angle", 0); + REQUIRE_UI_FLOAT_PROPERTY(t, "radius", 0); + REQUIRE(t->realValue() == LX(0, 0)); + REQUIRE(t->realAngle() == Approx(0)); + } + + SECTION("direction S") + { + TestPolar t("ui.polar", LA("@direction", "S")); + REQUIRE_UI_LIST_PROPERTY(t, "direction", LA("S")); + REQUIRE_UI_FLOAT_PROPERTY(t, "angle", 0); + REQUIRE_UI_FLOAT_PROPERTY(t, "radius", 0); + REQUIRE(t->realValue() == LX(0, 0)); + REQUIRE(t->realAngle() == Approx(0)); + } + + SECTION("@radians") + { + TestPolar t("ui.polar", LA("@radians", 1)); + REQUIRE_UI_FLOAT_PROPERTY(t, "radians", 1); + REQUIRE_UI_FLOAT_PROPERTY(t, "angle", 0); + REQUIRE_UI_FLOAT_PROPERTY(t, "radius", 0); + REQUIRE(t->realValue() == LX(0, 0)); + REQUIRE(t->realAngle() == Approx(0)); + } + } + + SECTION("presets") + { + TestPolar t("ui.polar"); + t->setRealValue(LF(1, 1)); + t->storePreset(0); + t->setRealValue(LA(0.5, -1)); + t->storePreset(1); + t->setRealValue(LA(1, 2)); + t->storePreset(2); + t->setRealValue(LF(1, 0.5)); + t->storePreset(3); + + t->loadPreset(4); + REQUIRE(t->realValue() == LX(0, 0)); + t->loadPreset(0); + REQUIRE(t->realValue() == LX(1, 1)); + t->loadPreset(1); + REQUIRE(t->realValue() == LX(0.5, -1)); + t->loadPreset(2); + REQUIRE(t->realValue() == LX(1, 2)); + t->loadPreset(3); + REQUIRE(t->realValue() == LX(1, 0.5)); + + t->clearPreset(2); + t->loadPreset(2); + REQUIRE(t->realValue() == LX(0, 0)); + } + + SECTION("setValue") + { + SECTION("radians") + { + SECTION("default") + { + TestPolar t("ui.polar", LA("@radians", 1)); + REQUIRE(t->realValue() == LX(0, 0)); + + // invalid + REQUIRE_FALSE(t->setRealValue(L())); + REQUIRE_FALSE(t->setRealValue(LF(100))); + REQUIRE_FALSE(t->setRealValue(LA("A", 1))); + REQUIRE_FALSE(t->setRealValue(LA(1, "B"))); + REQUIRE_FALSE(t->setRealValue(LA("A", "B"))); + + // clip radius + REQUIRE(t->setRealValue(LF(1.2, 1))); + REQUIRE(t->realValue() == LX(1, 1)); + REQUIRE(t->setRealValue(LF(-0.1, 1))); + REQUIRE(t->realValue() == LX(0, 1)); + + // ok + t->setRealValue(LF(1, 0.5)); + REQUIRE(t->realValue() == LX(1, 0.5)); + REQUIRE_UI_FLOAT_PROPERTY(t, "radius", 1); + REQUIRE_UI_FLOAT_PROPERTY(t, "angle", 0.5); + + t->setRealValue(LF(1, -0.5)); + REQUIRE(t->realValue() == LX(1, -0.5)); + REQUIRE_UI_FLOAT_PROPERTY(t, "radius", 1); + REQUIRE_UI_FLOAT_PROPERTY(t, "angle", -0.5); + + // angle wrap + t->setRealValue(LF(1, 3.11)); + REQUIRE(t->realValue() == LX(1, 3.11)); + + t->setRealValue(LF(1, 3.15)); + REQUIRE(t->realValue() == LX(1, -3.13319)); + + t->setRealValue(LF(1, 6.27)); + REQUIRE(t->realValue() == LX(1, -0.0131857)); + + t->setRealValue(LF(1, 6.3)); + REQUIRE(t->realValue() == LX(1, 0.0168149)); + } + + SECTION("clockwise") + { + TestPolar t("ui.polar", LA("@clockwise", 1)); + REQUIRE(t->realValue() == LX(0, 0)); + + // clip radius + REQUIRE(t->setRealValue(LF(1.2, 1))); + REQUIRE(t->realValue() == LX(1, 1)); + REQUIRE(t->setRealValue(LF(-0.1, 1))); + REQUIRE(t->realValue() == LX(0, 1)); + + // ok + t->setRealValue(LF(1, 0.5)); + REQUIRE(t->realValue() == LX(1, 0.5)); + REQUIRE_UI_FLOAT_PROPERTY(t, "radius", 1); + REQUIRE_UI_FLOAT_PROPERTY(t, "angle", 0.5); + } + + SECTION("positive") + { + TestPolar t("ui.polar", LA("@positive", 1, "@radians", 1)); + REQUIRE(t->realValue() == LX(0, 0)); + + // clip radius + REQUIRE(t->setRealValue(LF(1.2, 1))); + REQUIRE(t->realValue() == LX(1, 1)); + REQUIRE(t->setRealValue(LF(-0.1, 1))); + REQUIRE(t->realValue() == LX(0, 1)); + + // ok + t->setRealValue(LF(1, 0.5)); + REQUIRE(t->realValue() == LX(1, 0.5)); + REQUIRE_UI_FLOAT_PROPERTY(t, "radius", 1); + REQUIRE_UI_FLOAT_PROPERTY(t, "angle", 0.5); + + // angle wrap + t->setRealValue(LF(1, 3.11)); + REQUIRE(t->realValue() == LX(1, 3.11)); + + t->setRealValue(LF(1, 3.15)); + REQUIRE(t->realValue() == LX(1, 3.15)); + + t->setRealValue(LF(1, 6.27)); + REQUIRE(t->realValue() == LX(1, 6.27)); + + t->setRealValue(LF(1, 6.3)); + REQUIRE(t->realValue() == LX(1, 0.0168149)); + } + } + + SECTION("degrees") + { + SECTION("default") + { + TestPolar t("ui.polar"); + REQUIRE(t->realValue() == LX(0, 0)); + + // invalid + REQUIRE_FALSE(t->setRealValue(L())); + REQUIRE_FALSE(t->setRealValue(LF(100))); + REQUIRE_FALSE(t->setRealValue(LA("A", 1))); + REQUIRE_FALSE(t->setRealValue(LA(1, "B"))); + REQUIRE_FALSE(t->setRealValue(LA("A", "B"))); + + // clip radius + REQUIRE(t->setRealValue(LF(1.2, 1))); + REQUIRE(t->realValue() == LX(1, 1)); + REQUIRE(t->setRealValue(LF(-0.1, 1))); + REQUIRE(t->realValue() == LX(0, 1)); + + // ok + t->setRealValue(LF(1, 50)); + REQUIRE(t->realValue() == LX(1, 50)); + REQUIRE_UI_FLOAT_PROPERTY(t, "radius", 1); + REQUIRE_UI_FLOAT_PROPERTY(t, "angle", 50); + + t->setRealValue(LF(1, -50)); + REQUIRE(t->realValue() == LX(1, -50)); + REQUIRE_UI_FLOAT_PROPERTY(t, "radius", 1); + REQUIRE_UI_FLOAT_PROPERTY(t, "angle", -50); + + // angle wrap + t->setRealValue(LF(1, 179)); + REQUIRE(t->realValue() == LX(1, 179)); + + t->setRealValue(LF(1, 180)); + REQUIRE(t->realValue() == LX(1, -180)); + + t->setRealValue(LF(1, 181)); + REQUIRE(t->realValue() == LX(1, -179)); + + t->setRealValue(LF(1, 359)); + REQUIRE(t->realValue() == LX(1, -1)); + + t->setRealValue(LF(1, 360)); + REQUIRE(t->realValue() == LX(1, 0)); + + t->setRealValue(LF(1, 361)); + REQUIRE(t->realValue() == LX(1, 1)); + } + + SECTION("positive") + { + TestPolar t("ui.polar", LA("@positive", 1)); + REQUIRE(t->realValue() == LX(0, 0)); + + // clip radius + REQUIRE(t->setRealValue(LF(1.2, 1))); + REQUIRE(t->realValue() == LX(1, 1)); + REQUIRE(t->setRealValue(LF(-0.1, 1))); + REQUIRE(t->realValue() == LX(0, 1)); + + // ok + t->setRealValue(LF(1, 0.5)); + REQUIRE(t->realValue() == LX(1, 0.5)); + REQUIRE_UI_FLOAT_PROPERTY(t, "radius", 1); + REQUIRE_UI_FLOAT_PROPERTY(t, "angle", 0.5); + + // angle wrap + t->setRealValue(LF(1, 179)); + REQUIRE(t->realValue() == LX(1, 179)); + + t->setRealValue(LF(1, 180)); + REQUIRE(t->realValue() == LX(1, 180)); + + t->setRealValue(LF(1, 181)); + REQUIRE(t->realValue() == LX(1, 181)); + + t->setRealValue(LF(1, 359)); + REQUIRE(t->realValue() == LX(1, 359)); + + t->setRealValue(LF(1, 360)); + REQUIRE(t->realValue() == LX(1, 0)); + + t->setRealValue(LF(1, 361)); + REQUIRE(t->realValue() == LX(1, 1)); + } + } + } + + SECTION("@radius") + { + TestExtPolar t("ui.polar"); + + REQUIRE(t->realRadius() == Approx(0)); + + // invalid + t <<= LA("@radius"); + t <<= LA("@radius", "ABC"); + REQUIRE(t->realRadius() == Approx(0)); + + // ok + t <<= LA("@radius", 0.5); + REQUIRE(t->realRadius() == Approx(0.5)); + + // clip + t <<= LA("@radius", 2); + REQUIRE(t->realRadius() == Approx(1)); + + t <<= LA("@radius", -99); + REQUIRE(t->realRadius() == Approx(0)); + } + + SECTION("@angle") + { + SECTION("@degree") + { + TestExtPolar t("ui.polar"); + + REQUIRE(t->realAngle() == Approx(0)); + + // invalid + t <<= LA("@angle"); + t <<= LA("@angle", "ABC"); + REQUIRE(t->realAngle() == Approx(0)); + + // ok + t <<= LA("@angle", 45); + REQUIRE(t->realAngle() == Approx(45)); + + // clip + t <<= LA("@angle", 361); + REQUIRE(t->realAngle() == Approx(1)); + + t <<= LA("@angle", 270); + REQUIRE(t->realAngle() == Approx(-90)); + } + } + + SECTION("methods") + { + SECTION("set") + { + SECTION("default") + { + TestPolar t("ui.polar", LA("@direction", "E")); + REQUIRE(t->realValue() == LX(0, 0)); + + // invalid + t.call("set", L()); + t.call("set", LF(1)); + t.call("set", LA("A")); + t.call("set", LA("A", "B")); + t.call("set", LA(1, "B")); + REQUIRE(t->realValue() == LX(0, 0)); + + // ok + t.call("set", LA(1, 2)); + REQUIRE(t->realValue() == LX(1, 2)); + } + + SECTION("radians") + { + TestPolar t("ui.polar", LA("@radians", 1, "@direction", "E")); + REQUIRE(t->realValue() == LX(0, 0)); + + // invalid + t.call("set", L()); + t.call("set", LF(1)); + t.call("set", LA("A")); + t.call("set", LA("A", "B")); + t.call("set", LA(1, "B")); + REQUIRE(t->realValue() == LX(0, 0)); + + // ok + t.call("set", LA(1, 2)); + REQUIRE(t->realValue() == LX(1, 2)); + } + + SECTION("degrees") + { + TestPolar t("ui.polar", LA("@direction", "E")); + REQUIRE(t->realValue() == LX(0, 0)); + + // invalid + t.call("set", L()); + t.call("set", LF(1)); + t.call("set", LA("A")); + t.call("set", LA("A", "B")); + t.call("set", LA(1, "B")); + REQUIRE(t->realValue() == LX(0, 0)); + + // ok + t.call("set", LA(1, 90)); + REQUIRE(t->realValue() == LX(1, 90)); + } + } + + SECTION("polar") + { + SECTION("degrees") + { + TestPolar t("ui.polar", LA("@direction", "E")); + REQUIRE(t->realValue() == LX(0, 0)); + + // invalid + t.call("polar", L()); + t.call("polar", LF(1)); + t.call("polar", LA("A")); + t.call("polar", LA("A", "B")); + t.call("polar", LA(1, "B")); + REQUIRE(t->realValue() == LX(0, 0)); + + // ok + t.call("polar", LA(1, 90)); + REQUIRE(t->realValue() == LX(1, 90)); + } + } + + SECTION("cartesian") + { + SECTION("degrees") + { + TestPolar t("ui.polar", LA("@direction", "E", "@clockwise", 0.f)); + REQUIRE(t->realValue() == LX(0, 0)); + + // invalid + t.call("cartesian", L()); + t.call("cartesian", LF(1)); + t.call("cartesian", LA("A")); + t.call("cartesian", LA("A", "B")); + t.call("cartesian", LA(1, "B")); + REQUIRE(t->realValue() == LX(0, 0)); + + // ok + t.call("cartesian", LF(0, 0)); + REQUIRE(t->realValue() == LX(0, 0)); + t.call("cartesian", LF(0, 1)); + REQUIRE(t->realValue() == LX(1, 90)); + t.call("cartesian", LF(0, -1)); + REQUIRE(t->realValue() == LX(1, -90)); + t.call("cartesian", LF(1, 0)); + REQUIRE(t->realValue() == LX(1, 0)); + t.call("cartesian", LF(-1, 0)); + REQUIRE(t->realValue() == LX(1, -180)); + + // clip x-value + t.call("cartesian", LF(1.1, 0)); + REQUIRE(t->realValue() == LX(1, 0)); + t.call("cartesian", LF(-2, 0)); + REQUIRE(t->realValue() == LX(1, -180)); + + // clip y-value + t.call("cartesian", LF(0, 1.1)); + REQUIRE(t->realValue() == LX(1, 90)); + t.call("cartesian", LF(0, -1.1)); + REQUIRE(t->realValue() == LX(1, -90)); + } + } + + SECTION("rotate") + { + SECTION("radian") + { + TestPolar t("ui.polar", LA("@radians", 1)); + REQUIRE(t->realValue() == LX(0, 0)); + + t.call("rotate", 0); + REQUIRE(t->realValue() == LX(0, 0)); + t.call("rotate", 1); + REQUIRE(t->realValue() == LX(0, 1)); + t.call("rotate", 1); + REQUIRE(t->realValue() == LX(0, 2)); + t.call("rotate", 1); + REQUIRE(t->realValue() == LX(0, 3)); + t.call("rotate", 1); + REQUIRE(t->realValue() == LX(0, -2.28319)); + } + + SECTION("degree") + { + TestPolar t("ui.polar"); + REQUIRE(t->realValue() == LX(0, 0)); + + t.call("rotate", 0); + REQUIRE(t->realValue() == LX(0, 0)); + t.call("rotate", 60); + REQUIRE(t->realValue() == LX(0, 60)); + t.call("rotate", 60); + REQUIRE(t->realValue() == LX(0, 120)); + t.call("rotate", 60); + REQUIRE(t->realValue() == LX(0, -180)); + t.call("rotate", 60); + REQUIRE(t->realValue() == LX(0, -120)); + t.call("rotate", 60); + REQUIRE(t->realValue() == LX(0, -60)); + t.call("rotate", 60); + REQUIRE(t->realValue() == LX(0, 0)); + t.call("rotate", -60); + REQUIRE(t->realValue() == LX(0, -60)); + } + } + } + + SECTION("mouse") + { + SECTION("radians") + { + TestExtPolar t("ui.polar", LA("@radians", 1)); + t.mouseDown(50, 0); + REQUIRE_OUTPUT_LIST(t, 0, LX(1, 0)); + t.mouseDown(0, 50); + REQUIRE_OUTPUT_LIST(t, 0, LX(1, -M_PI_2)); + t.mouseDown(50, 50); + REQUIRE_OUTPUT_LIST(t, 0, LX(0, M_PI_2)); + t.mouseDown(100, 50); + REQUIRE_OUTPUT_LIST(t, 0, LX(1, M_PI_2)); + t.mouseDown(50, 100); + REQUIRE_OUTPUT_LIST(t, 0, LX(1, -M_PI)); + + t.mouseUp(0, 50); + REQUIRE_OUTPUT_LIST(t, 0, LX(1, -M_PI_2)); + + t.mouseDrag(50, 100); + REQUIRE_OUTPUT_LIST(t, 0, LX(1, -M_PI)); + t.mouseDrag(5000, 100000); + REQUIRE_OUTPUT_LIST(t, 0, LX(1, 3.09211)); + } + + SECTION("degrees") + { + TestExtPolar t("ui.polar"); + t.mouseDown(0, 0); + REQUIRE_OUTPUT_LIST(t, 0, LX(1, -45)); + t.mouseDown(50, 0); + REQUIRE_OUTPUT_LIST(t, 0, LX(1, 0)); + t.mouseDown(100, 0); + REQUIRE_OUTPUT_LIST(t, 0, LX(1, 45)); + t.mouseDown(0, 50); + REQUIRE_OUTPUT_LIST(t, 0, LX(1, -90)); + t.mouseDown(50, 50); + REQUIRE_OUTPUT_LIST(t, 0, LX(0, 90)); + t.mouseDown(100, 50); + REQUIRE_OUTPUT_LIST(t, 0, LX(1, 90)); + t.mouseDown(0, 100); + REQUIRE_OUTPUT_LIST(t, 0, LX(1, -135)); + t.mouseDown(50, 100); + REQUIRE_OUTPUT_LIST(t, 0, LX(1, -180)); + t.mouseDown(100, 100); + REQUIRE_OUTPUT_LIST(t, 0, LX(1, 135)); + + t.mouseUp(0, 50); + REQUIRE_OUTPUT_LIST(t, 0, LX(1, -90)); + + t.mouseDrag(50, 100); + REQUIRE_OUTPUT_LIST(t, 0, LX(1, -180)); + t.mouseDrag(5000, 100000); + REQUIRE_OUTPUT_LIST(t, 0, LX(1, 177.165)); + } + + SECTION("clockwise") + { + + SECTION("direction") + { + SECTION("N") + { + TestExtPolar t("ui.polar", LA("@direction", "N", "@clockwise", 1)); + t.mouseDown(0, 0); + REQUIRE_OUTPUT_LIST(t, 0, LX(1, -45)); + t.mouseDown(50, 0); + REQUIRE_OUTPUT_LIST(t, 0, LX(1, 0)); + t.mouseDown(100, 0); + REQUIRE_OUTPUT_LIST(t, 0, LX(1, 45)); + t.mouseDown(0, 50); + REQUIRE_OUTPUT_LIST(t, 0, LX(1, -90)); + t.mouseDown(50, 50); + REQUIRE_OUTPUT_LIST(t, 0, LX(0, 90)); + t.mouseDown(100, 50); + REQUIRE_OUTPUT_LIST(t, 0, LX(1, 90)); + t.mouseDown(0, 100); + REQUIRE_OUTPUT_LIST(t, 0, LX(1, -135)); + t.mouseDown(50, 100); + REQUIRE_OUTPUT_LIST(t, 0, LX(1, -180)); + t.mouseDown(100, 100); + REQUIRE_OUTPUT_LIST(t, 0, LX(1, 135)); + } + + SECTION("E") + { + TestExtPolar t("ui.polar", LA("@direction", "E", "@clockwise", 1)); + t.mouseDown(0, 0); + REQUIRE_OUTPUT_LIST(t, 0, LX(1, -135)); + t.mouseDown(50, 0); + REQUIRE_OUTPUT_LIST(t, 0, LX(1, -90)); + t.mouseDown(100, 0); + REQUIRE_OUTPUT_LIST(t, 0, LX(1, -45)); + t.mouseDown(0, 50); + REQUIRE_OUTPUT_LIST(t, 0, LX(1, -180)); + t.mouseDown(50, 50); + REQUIRE_OUTPUT_LIST(t, 0, LX(0, 0)); + t.mouseDown(100, 50); + REQUIRE_OUTPUT_LIST(t, 0, LX(1, 0)); + t.mouseDown(0, 100); + REQUIRE_OUTPUT_LIST(t, 0, LX(1, 135)); + t.mouseDown(50, 100); + REQUIRE_OUTPUT_LIST(t, 0, LX(1, 90)); + t.mouseDown(100, 100); + REQUIRE_OUTPUT_LIST(t, 0, LX(1, 45)); + } + + SECTION("S") + { + TestExtPolar t("ui.polar", LA("@direction", "S", "@clockwise", 1)); + t.mouseDown(0, 0); + REQUIRE_OUTPUT_LIST(t, 0, LX(1, 135)); + t.mouseDown(50, 0); + REQUIRE_OUTPUT_LIST(t, 0, LX(1, -180)); + t.mouseDown(100, 0); + REQUIRE_OUTPUT_LIST(t, 0, LX(1, -135)); + t.mouseDown(0, 50); + REQUIRE_OUTPUT_LIST(t, 0, LX(1, 90)); + t.mouseDown(50, 50); + REQUIRE_OUTPUT_LIST(t, 0, LX(0, -90)); + t.mouseDown(100, 50); + REQUIRE_OUTPUT_LIST(t, 0, LX(1, -90)); + t.mouseDown(0, 100); + REQUIRE_OUTPUT_LIST(t, 0, LX(1, 45)); + t.mouseDown(50, 100); + REQUIRE_OUTPUT_LIST(t, 0, LX(1, 0)); + t.mouseDown(100, 100); + REQUIRE_OUTPUT_LIST(t, 0, LX(1, -45)); + } + + SECTION("W") + { + TestExtPolar t("ui.polar", LA("@direction", "W", "@clockwise", 1)); + t.mouseDown(0, 0); + REQUIRE_OUTPUT_LIST(t, 0, LX(1, 45)); + t.mouseDown(50, 0); + REQUIRE_OUTPUT_LIST(t, 0, LX(1, 90)); + t.mouseDown(100, 0); + REQUIRE_OUTPUT_LIST(t, 0, LX(1, 135)); + t.mouseDown(0, 50); + REQUIRE_OUTPUT_LIST(t, 0, LX(1, 0)); + t.mouseDown(50, 50); + REQUIRE_OUTPUT_LIST(t, 0, LX(0, -180)); + t.mouseDown(100, 50); + REQUIRE_OUTPUT_LIST(t, 0, LX(1, -180)); + t.mouseDown(0, 100); + REQUIRE_OUTPUT_LIST(t, 0, LX(1, -45)); + t.mouseDown(50, 100); + REQUIRE_OUTPUT_LIST(t, 0, LX(1, -90)); + t.mouseDown(100, 100); + REQUIRE_OUTPUT_LIST(t, 0, LX(1, -135)); + } + } + } + } + + SECTION("counter clockwise") + { + SECTION("direction") + { + SECTION("N") + { + TestExtPolar t("ui.polar", LA("@direction", "N", "@clockwise", 0.f)); + t.mouseDown(0, 0); + REQUIRE_OUTPUT_LIST(t, 0, LX(1, 45)); + t.mouseDown(50, 0); + REQUIRE_OUTPUT_LIST(t, 0, LX(1, 0)); + t.mouseDown(100, 0); + REQUIRE_OUTPUT_LIST(t, 0, LX(1, -45)); + t.mouseDown(0, 50); + REQUIRE_OUTPUT_LIST(t, 0, LX(1, 90)); + t.mouseDown(50, 50); + REQUIRE_OUTPUT_LIST(t, 0, LX(0, -90)); + t.mouseDown(100, 50); + REQUIRE_OUTPUT_LIST(t, 0, LX(1, -90)); + t.mouseDown(0, 100); + REQUIRE_OUTPUT_LIST(t, 0, LX(1, 135)); + t.mouseDown(50, 100); + REQUIRE_OUTPUT_LIST(t, 0, LX(1, -180)); + t.mouseDown(100, 100); + REQUIRE_OUTPUT_LIST(t, 0, LX(1, -135)); + } + + SECTION("E") + { + TestExtPolar t("ui.polar", LA("@direction", "E", "@clockwise", 0.f)); + t.mouseDown(0, 0); + REQUIRE_OUTPUT_LIST(t, 0, LX(1, 135)); + t.mouseDown(50, 0); + REQUIRE_OUTPUT_LIST(t, 0, LX(1, 90)); + t.mouseDown(100, 0); + REQUIRE_OUTPUT_LIST(t, 0, LX(1, 45)); + t.mouseDown(0, 50); + REQUIRE_OUTPUT_LIST(t, 0, LX(1, -180)); + t.mouseDown(50, 50); + REQUIRE_OUTPUT_LIST(t, 0, LX(0, 0)); + t.mouseDown(100, 50); + REQUIRE_OUTPUT_LIST(t, 0, LX(1, 0)); + t.mouseDown(0, 100); + REQUIRE_OUTPUT_LIST(t, 0, LX(1, -135)); + t.mouseDown(50, 100); + REQUIRE_OUTPUT_LIST(t, 0, LX(1, -90)); + t.mouseDown(100, 100); + REQUIRE_OUTPUT_LIST(t, 0, LX(1, -45)); + } + + SECTION("S") + { + TestExtPolar t("ui.polar", LA("@direction", "S", "@clockwise", 0.f)); + t.mouseDown(0, 0); + REQUIRE_OUTPUT_LIST(t, 0, LX(1, -135)); + t.mouseDown(50, 0); + REQUIRE_OUTPUT_LIST(t, 0, LX(1, -180)); + t.mouseDown(100, 0); + REQUIRE_OUTPUT_LIST(t, 0, LX(1, 135)); + t.mouseDown(0, 50); + REQUIRE_OUTPUT_LIST(t, 0, LX(1, -90)); + t.mouseDown(50, 50); + REQUIRE_OUTPUT_LIST(t, 0, LX(0, 90)); + t.mouseDown(100, 50); + REQUIRE_OUTPUT_LIST(t, 0, LX(1, 90)); + t.mouseDown(0, 100); + REQUIRE_OUTPUT_LIST(t, 0, LX(1, -45)); + t.mouseDown(50, 100); + REQUIRE_OUTPUT_LIST(t, 0, LX(1, 0)); + t.mouseDown(100, 100); + REQUIRE_OUTPUT_LIST(t, 0, LX(1, 45)); + } + + SECTION("W") + { + TestExtPolar t("ui.polar", LA("@direction", "W", "@clockwise", 0.f)); + t.mouseDown(0, 0); + REQUIRE_OUTPUT_LIST(t, 0, LX(1, -45)); + t.mouseDown(50, 0); + REQUIRE_OUTPUT_LIST(t, 0, LX(1, -90)); + t.mouseDown(100, 0); + REQUIRE_OUTPUT_LIST(t, 0, LX(1, -135)); + t.mouseDown(0, 50); + REQUIRE_OUTPUT_LIST(t, 0, LX(1, 0)); + t.mouseDown(50, 50); + REQUIRE_OUTPUT_LIST(t, 0, LX(0, -180)); + t.mouseDown(100, 50); + REQUIRE_OUTPUT_LIST(t, 0, LX(1, -180)); + t.mouseDown(0, 100); + REQUIRE_OUTPUT_LIST(t, 0, LX(1, 45)); + t.mouseDown(50, 100); + REQUIRE_OUTPUT_LIST(t, 0, LX(1, 90)); + t.mouseDown(100, 100); + REQUIRE_OUTPUT_LIST(t, 0, LX(1, 135)); + } + } + } + + SECTION("popup") + { + SECTION("N clockwise") + { + TestExtPolar t("ui.polar"); + t.mouseUp(0, 50); + REQUIRE_OUTPUT_LIST(t, 0, LX(1, -90)); + + t->onPopup(SYM("unknown"), 1, {}); + REQUIRE_NO_OUTPUT(t); + + t->onPopup(SYM("polar"), 0, {}); + REQUIRE_OUTPUT_LIST(t, 0, LX(0, 0)); + t->onPopup(SYM("polar"), 1, {}); + REQUIRE_OUTPUT_LIST(t, 0, LX(1, -90)); + t->onPopup(SYM("polar"), 2, {}); + REQUIRE_OUTPUT_LIST(t, 0, LX(1, 90)); + t->onPopup(SYM("polar"), 3, {}); + REQUIRE_OUTPUT_LIST(t, 0, LX(1, 0)); + t->onPopup(SYM("polar"), 4, {}); + REQUIRE_OUTPUT_LIST(t, 0, LX(1, -180)); + + // invalid indexes + t->onPopup(SYM("polar"), -1, {}); + REQUIRE_NO_OUTPUT(t); + t->onPopup(SYM("polar"), 5, {}); + REQUIRE_NO_OUTPUT(t); + } + + SECTION("N") + { + TestExtPolar t("ui.polar", LA("@direction", "N", "@clockwise", 0.f)); + + t->onPopup(SYM("polar"), 0, {}); // center + REQUIRE_OUTPUT_LIST(t, 0, LX(0, 0)); + t->onPopup(SYM("polar"), 1, {}); // left + REQUIRE_OUTPUT_LIST(t, 0, LX(1, 90)); + t->onPopup(SYM("polar"), 2, {}); // right + REQUIRE_OUTPUT_LIST(t, 0, LX(1, -90)); + t->onPopup(SYM("polar"), 3, {}); // top + REQUIRE_OUTPUT_LIST(t, 0, LX(1, 0)); + t->onPopup(SYM("polar"), 4, {}); // bottom + REQUIRE_OUTPUT_LIST(t, 0, LX(1, -180)); + } + + SECTION("E") + { + TestExtPolar t("ui.polar", LA("@direction", "E", "@clockwise", 0.f)); + + t->onPopup(SYM("polar"), 0, {}); // center + REQUIRE_OUTPUT_LIST(t, 0, LX(0, 0)); + t->onPopup(SYM("polar"), 1, {}); // left + REQUIRE_OUTPUT_LIST(t, 0, LX(1, -180)); + t->onPopup(SYM("polar"), 2, {}); // right + REQUIRE_OUTPUT_LIST(t, 0, LX(1, 0)); + t->onPopup(SYM("polar"), 3, {}); // top + REQUIRE_OUTPUT_LIST(t, 0, LX(1, 90)); + t->onPopup(SYM("polar"), 4, {}); // bottom + REQUIRE_OUTPUT_LIST(t, 0, LX(1, -90)); + } + + SECTION("E clockwise") + { + TestExtPolar t("ui.polar", LA("@direction", "E", "@clockwise", 1)); + + t->onPopup(SYM("polar"), 0, {}); // center + REQUIRE_OUTPUT_LIST(t, 0, LX(0, 0)); + t->onPopup(SYM("polar"), 1, {}); // left + REQUIRE_OUTPUT_LIST(t, 0, LX(1, -180)); + t->onPopup(SYM("polar"), 2, {}); // right + REQUIRE_OUTPUT_LIST(t, 0, LX(1, 0)); + t->onPopup(SYM("polar"), 3, {}); // top + REQUIRE_OUTPUT_LIST(t, 0, LX(1, -90)); + t->onPopup(SYM("polar"), 4, {}); // bottom + REQUIRE_OUTPUT_LIST(t, 0, LX(1, 90)); + } + + SECTION("S") + { + TestExtPolar t("ui.polar", LA("@direction", "S", "@clockwise", 0.f)); + + t->onPopup(SYM("polar"), 0, {}); // center + REQUIRE_OUTPUT_LIST(t, 0, LX(0, 0)); + t->onPopup(SYM("polar"), 1, {}); // left + REQUIRE_OUTPUT_LIST(t, 0, LX(1, -90)); + t->onPopup(SYM("polar"), 2, {}); // right + REQUIRE_OUTPUT_LIST(t, 0, LX(1, 90)); + t->onPopup(SYM("polar"), 3, {}); // top + REQUIRE_OUTPUT_LIST(t, 0, LX(1, -180)); + t->onPopup(SYM("polar"), 4, {}); // bottom + REQUIRE_OUTPUT_LIST(t, 0, LX(1, 0)); + } + + SECTION("S clockwise") + { + TestExtPolar t("ui.polar", LA("@direction", "S", "@clockwise", 1)); + + t->onPopup(SYM("polar"), 0, {}); // center + REQUIRE_OUTPUT_LIST(t, 0, LX(0, 0)); + t->onPopup(SYM("polar"), 1, {}); // left + REQUIRE_OUTPUT_LIST(t, 0, LX(1, 90)); + t->onPopup(SYM("polar"), 2, {}); // right + REQUIRE_OUTPUT_LIST(t, 0, LX(1, -90)); + t->onPopup(SYM("polar"), 3, {}); // top + REQUIRE_OUTPUT_LIST(t, 0, LX(1, -180)); + t->onPopup(SYM("polar"), 4, {}); // bottom + REQUIRE_OUTPUT_LIST(t, 0, LX(1, 0)); + } + + SECTION("W") + { + TestExtPolar t("ui.polar", LA("@direction", "W", "@clockwise", 0.f)); + + t->onPopup(SYM("polar"), 0, {}); // center + REQUIRE_OUTPUT_LIST(t, 0, LX(0, 0)); + t->onPopup(SYM("polar"), 1, {}); // left + REQUIRE_OUTPUT_LIST(t, 0, LX(1, 0)); + t->onPopup(SYM("polar"), 2, {}); // right + REQUIRE_OUTPUT_LIST(t, 0, LX(1, -180)); + t->onPopup(SYM("polar"), 3, {}); // top + REQUIRE_OUTPUT_LIST(t, 0, LX(1, -90)); + t->onPopup(SYM("polar"), 4, {}); // bottom + REQUIRE_OUTPUT_LIST(t, 0, LX(1, 90)); + } + + SECTION("W clockwise") + { + TestExtPolar t("ui.polar", LA("@direction", "W", "@clockwise", 1)); + + t->onPopup(SYM("polar"), 0, {}); // center + REQUIRE_OUTPUT_LIST(t, 0, LX(0, 0)); + t->onPopup(SYM("polar"), 1, {}); // left + REQUIRE_OUTPUT_LIST(t, 0, LX(1, 0)); + t->onPopup(SYM("polar"), 2, {}); // right + REQUIRE_OUTPUT_LIST(t, 0, LX(1, -180)); + t->onPopup(SYM("polar"), 3, {}); // top + REQUIRE_OUTPUT_LIST(t, 0, LX(1, 90)); + t->onPopup(SYM("polar"), 4, {}); // bottom + REQUIRE_OUTPUT_LIST(t, 0, LX(1, -90)); + } + } + + SECTION("paint") + { + TestExtPolar t("ui.polar"); + REQUIRE(t->asEBox()); + REQUIRE(t->asEObj()); + REQUIRE(t->asGObj()); + REQUIRE(t->asPd()); + REQUIRE(t->asPdObject()); + REQUIRE(t->canvas()); + t.show(); + } + + SECTION("list") + { + SECTION("radian") + { + TestExtPolar t("ui.polar", LA("@radians", 1)); + REQUIRE(t->realValue() == LX(0, 0)); + + // invalid list + t << L(); + REQUIRE_NO_OUTPUT(t); + t << LF(1); + REQUIRE_NO_OUTPUT(t); + t << LA("A"); + REQUIRE_NO_OUTPUT(t); + t << LA("A", 1); + REQUIRE_NO_OUTPUT(t); + t << LA(2, "A"); + REQUIRE_NO_OUTPUT(t); + t << LF(1, 2, 3); + REQUIRE_NO_OUTPUT(t); + + t << LF(1, M_PI * 2); + REQUIRE_OUTPUT_LIST(t, 0, LX(1, 0)); + } + + SECTION("degree") + { + TestExtPolar t("ui.polar"); + REQUIRE(t->realValue() == LX(0, 0)); + + // invalid list + t << L(); + REQUIRE_NO_OUTPUT(t); + t << LF(1); + REQUIRE_NO_OUTPUT(t); + t << LA("A"); + REQUIRE_NO_OUTPUT(t); + t << LA("A", 1); + REQUIRE_NO_OUTPUT(t); + t << LA(2, "A"); + REQUIRE_NO_OUTPUT(t); + t << LF(1, 2, 3); + REQUIRE_NO_OUTPUT(t); + + t << LF(1, 90); + REQUIRE_OUTPUT_LIST(t, 0, LX(1, 90)); + } + } + + SECTION("send") + { + TestExtPolar t("ui.polar", LA("@send", "r1", "@radians", 1)); + t.addListener("r1"); + + t << BANG; + REQUIRE_LIST_WAS_SEND(t, "r1", LX(0, 0)); + + t << LA(0.4, -0.6); + REQUIRE_LIST_WAS_SEND(t, "r1", LX(0.4, -0.6)); + + t.mouseDown(30, 70); + REQUIRE_LIST_WAS_SEND(t, "r1", LX(0.565685, -2.35619)); + } +} diff --git a/ceammc/ext/tests/test_ext_ui_radio.cpp b/ceammc/ext/tests/test_ext_ui_radio.cpp index ba3a101323..57d02cfef2 100644 --- a/ceammc/ext/tests/test_ext_ui_radio.cpp +++ b/ceammc/ext/tests/test_ext_ui_radio.cpp @@ -35,6 +35,45 @@ TEST_CASE("ui.radio", "[ui.radio]") HAS_UI_PROPERTY(t, "active_color"); REQUIRE_UI_FLOAT_PROPERTY(t, "mode", 0); REQUIRE_PRESETS(t); + + SECTION("aliases") + { + SECTION("ui.hrd") + { + TestExtRadio t("ui.hrd"); + REQUIRE(t.object()); + REQUIRE(t->width() == 127); + REQUIRE(t->height() == 15); + REQUIRE(t->p_mode() == 0); + } + + SECTION("ui.hrd*") + { + TestExtRadio t("ui.hrd*"); + REQUIRE(t.object()); + REQUIRE(t->width() == 127); + REQUIRE(t->height() == 15); + REQUIRE(t->p_mode() == 1); + } + + SECTION("ui.vrd") + { + TestExtRadio t("ui.vrd"); + REQUIRE(t.object()); + REQUIRE(t->width() == 15); + REQUIRE(t->height() == 127); + REQUIRE(t->p_mode() == 0); + } + + SECTION("ui.vrd*") + { + TestExtRadio t("ui.vrd*"); + REQUIRE(t.object()); + REQUIRE(t->width() == 15); + REQUIRE(t->height() == 127); + REQUIRE(t->p_mode() == 1); + } + } } SECTION("nitems") diff --git a/ceammc/ext/tests/test_ext_ui_rslider.cpp b/ceammc/ext/tests/test_ext_ui_rslider.cpp index 7cb9a63275..d1b4742787 100644 --- a/ceammc/ext/tests/test_ext_ui_rslider.cpp +++ b/ceammc/ext/tests/test_ext_ui_rslider.cpp @@ -28,7 +28,6 @@ TEST_CASE("ui.rslider", "[ui.rslider]") REQUIRE_UI_LIST_PROPERTY(t, "size", LF(120, 16)); REQUIRE_UI_FLOAT_PROPERTY(t, "min", 0); REQUIRE_UI_FLOAT_PROPERTY(t, "max", 1); - REQUIRE_UI_FLOAT_PROPERTY(t, "sync", 0); REQUIRE_UI_LIST_PROPERTY(t, "value", LF(0.4, 0.6)); REQUIRE_UI_FLOAT_PROPERTY(t, "range", 0.2); REQUIRE_UI_FLOAT_PROPERTY(t, "low", 0.4); @@ -95,7 +94,7 @@ TEST_CASE("ui.rslider", "[ui.rslider]") TestExtRSlider t("ui.rslider"); t.mouseDown(0, 8); - REQUIRE_NO_OUTPUT(t); + REQUIRE(t.outputListAt(0) == LX(0, 0)); REQUIRE_UI_LIST_PROPERTY(t, "value", LX(0, 0)); t.mouseDown(120, 8); REQUIRE_UI_LIST_PROPERTY(t, "value", LX(1, 1)); @@ -103,7 +102,7 @@ TEST_CASE("ui.rslider", "[ui.rslider]") REQUIRE_UI_LIST_PROPERTY(t, "value", LX(0.5, 0.5)); t.mouseDrag(120, 8); - REQUIRE_NO_OUTPUT(t); + REQUIRE(t.outputListAt(0) == LX(0.5, 1)); REQUIRE_UI_LIST_PROPERTY(t, "value", LX(0.5, 1)); t.mouseUp(120, 8); diff --git a/ceammc/ext/tests/test_ext_ui_slider2d.cpp b/ceammc/ext/tests/test_ext_ui_slider2d.cpp index 2cd78cedb4..ea60f781e7 100644 --- a/ceammc/ext/tests/test_ext_ui_slider2d.cpp +++ b/ceammc/ext/tests/test_ext_ui_slider2d.cpp @@ -20,6 +20,7 @@ UI_COMPLETE_TEST_SETUP(Slider2D) TEST_CASE("ui.slider2d", "[ui.slider2d]") { ui_test_init(); + // test::pdPrintToStdError(true); SECTION("construct") { @@ -32,7 +33,7 @@ TEST_CASE("ui.slider2d", "[ui.slider2d]") REQUIRE_UI_FLOAT_PROPERTY(t, "x_value", 0); REQUIRE_UI_FLOAT_PROPERTY(t, "y_value", 0); REQUIRE(t->presetId() == gensym("ui.slider2d.0")); - REQUIRE(t->realValue() == LF(0.f, 0.f)); + REQUIRE(t->realValue() == LF(0, 0)); REQUIRE(t->realXValue() == 0); REQUIRE(t->realYValue() == 0); REQUIRE(t->xRange() == 2); @@ -88,15 +89,15 @@ TEST_CASE("ui.slider2d", "[ui.slider2d]") REQUIRE(t->realValue() == LX(0.2, 0.4)); // zero range - t->setProperty(gensym("x_min"), LF(2)); - t->setProperty(gensym("x_max"), LF(2)); + t->setProperty(gensym("x_left"), LF(2)); + t->setProperty(gensym("x_right"), LF(2)); REQUIRE(t->realValue() == LX(2, 0.4)); REQUIRE_FALSE(t->setRealValue(LF(1, 1))); REQUIRE(t->realValue() == LX(2, 0.4)); - t->setProperty(gensym("y_min"), LF(10)); - t->setProperty(gensym("y_max"), LF(10)); + t->setProperty(gensym("y_top"), LF(10)); + t->setProperty(gensym("y_bottom"), LF(10)); REQUIRE(t->realValue() == LF(2, 10)); REQUIRE_FALSE(t->setRealValue(LF(1, 1))); @@ -129,10 +130,11 @@ TEST_CASE("ui.slider2d", "[ui.slider2d]") t->setProperty(gensym("y_value"), LF(-20)); REQUIRE(t->realYValue() == Approx(-1)); - t->setProperty(gensym("x_min"), LF(1)); - t->setProperty(gensym("x_max"), LF(1)); - t->setProperty(gensym("y_min"), LF(10)); - t->setProperty(gensym("y_max"), LF(10)); + // set invalid ranges + t->setProperty(gensym("x_left"), LF(1)); + t->setProperty(gensym("x_right"), LF(1)); + t->setProperty(gensym("y_top"), LF(10)); + t->setProperty(gensym("y_bottom"), LF(10)); t->setProperty(gensym("x_value"), LF(1)); REQUIRE(t->realXValue() == Approx(1)); @@ -170,11 +172,11 @@ TEST_CASE("ui.slider2d", "[ui.slider2d]") { TestExtSlider2D t("ui.slider2d"); t.mouseDown(0, 0); - REQUIRE_OUTPUT_LIST(t, 0, LX(-1, -1)); + REQUIRE_OUTPUT_LIST(t, 0, LX(-1, 1)); t.mouseDown(50, 0); - REQUIRE_OUTPUT_LIST(t, 0, LX(0, -1)); + REQUIRE_OUTPUT_LIST(t, 0, LX(0, 1)); t.mouseDown(100, 0); - REQUIRE_OUTPUT_LIST(t, 0, LX(1, -1)); + REQUIRE_OUTPUT_LIST(t, 0, LX(1, 1)); t.mouseDown(0, 50); REQUIRE_OUTPUT_LIST(t, 0, LX(-1, 0)); t.mouseDown(50, 50); @@ -182,19 +184,19 @@ TEST_CASE("ui.slider2d", "[ui.slider2d]") t.mouseDown(100, 50); REQUIRE_OUTPUT_LIST(t, 0, LX(1, 0)); t.mouseDown(0, 100); - REQUIRE_OUTPUT_LIST(t, 0, LX(-1, 1)); + REQUIRE_OUTPUT_LIST(t, 0, LX(-1, -1)); t.mouseDown(50, 100); - REQUIRE_OUTPUT_LIST(t, 0, LX(0, 1)); + REQUIRE_OUTPUT_LIST(t, 0, LX(0, -1)); t.mouseDown(100, 100); - REQUIRE_OUTPUT_LIST(t, 0, LX(1, 1)); + REQUIRE_OUTPUT_LIST(t, 0, LX(1, -1)); t.mouseUp(0, 50); REQUIRE_OUTPUT_LIST(t, 0, LX(-1, 0)); t.mouseDrag(50, 100); - REQUIRE_OUTPUT_LIST(t, 0, LX(0, 1)); + REQUIRE_OUTPUT_LIST(t, 0, LX(0, -1)); t.mouseDrag(5000, 100000); - REQUIRE_OUTPUT_LIST(t, 0, LX(1, 1)); + REQUIRE_OUTPUT_LIST(t, 0, LX(1, -1)); } SECTION("external") @@ -263,6 +265,6 @@ TEST_CASE("ui.slider2d", "[ui.slider2d]") REQUIRE_LIST_WAS_SEND(t, "r1", LX(0.4, -0.6)); t.mouseDown(30, 70); - REQUIRE_LIST_WAS_SEND(t, "r1", LX(-0.4, 0.4)); + REQUIRE_LIST_WAS_SEND(t, "r1", LX(-0.4, -0.4)); } } diff --git a/ceammc/ext/tests/test_ext_ui_tab.cpp b/ceammc/ext/tests/test_ext_ui_tab.cpp index c2a9f8ed51..46164712a4 100644 --- a/ceammc/ext/tests/test_ext_ui_tab.cpp +++ b/ceammc/ext/tests/test_ext_ui_tab.cpp @@ -62,12 +62,12 @@ TEST_CASE("ui.tab", "[ui.tab]") REQUIRE_NONE_WAS_SEND(t, "r1"); t.mouseDown(25, 10); - REQUIRE_OUTPUT_FLOAT(t, 0, 0); - REQUIRE_FLOAT_WAS_SEND(t, "r1", 0); + REQUIRE_OUTPUT_LIST(t, 0, LF(0, 1)); + REQUIRE_LIST_WAS_SEND(t, "r1", LF(0, 1)); t.mouseDown(75, 10); - REQUIRE_OUTPUT_FLOAT(t, 0, 1); - REQUIRE_FLOAT_WAS_SEND(t, "r1", 1); + REQUIRE_OUTPUT_LIST(t, 0, LF(1, 2)); + REQUIRE_LIST_WAS_SEND(t, "r1", LF(1, 2)); // invalid t << -1; @@ -78,12 +78,12 @@ TEST_CASE("ui.tab", "[ui.tab]") REQUIRE_NO_OUTPUT(t); t << 1; - REQUIRE_OUTPUT_FLOAT(t, 0, 1); - REQUIRE_FLOAT_WAS_SEND(t, "r1", 1); + REQUIRE_OUTPUT_LIST(t, 0, LF(1, 2)); + REQUIRE_LIST_WAS_SEND(t, "r1", LF(1, 2)); t << 0.f; - REQUIRE_OUTPUT_FLOAT(t, 0, 0); - REQUIRE_FLOAT_WAS_SEND(t, "r1", 0); + REQUIRE_OUTPUT_LIST(t, 0, LF(0, 1)); + REQUIRE_LIST_WAS_SEND(t, "r1", LF(0, 1)); } } @@ -97,12 +97,12 @@ TEST_CASE("ui.tab", "[ui.tab]") t.mouseDown(25, 8); t << BANG; - REQUIRE_OUTPUT_FLOAT(t, 0, 0); + REQUIRE_OUTPUT_LIST(t, 0, LA(0.f, "A")); REQUIRE_UI_LIST_PROPERTY(t, "selected", LA(1, 0.f)); t.mouseDown(75, 8); t << BANG; - REQUIRE_OUTPUT_FLOAT(t, 0, 1); + REQUIRE_OUTPUT_LIST(t, 0, LA(1, "B")); REQUIRE_UI_LIST_PROPERTY(t, "selected", LA(0.f, 1)); t <<= LA("select", 0.f); @@ -305,10 +305,10 @@ TEST_CASE("ui.tab", "[ui.tab]") t <<= LA("@items", "A", "B", "C", "D"); t << "A"; - REQUIRE_OUTPUT_FLOAT(t, 0, 0); + REQUIRE_OUTPUT_LIST(t, 0, LA(0.f, "A")); REQUIRE_UI_FLOAT_PROPERTY(t, "current", 0); t << "D"; - REQUIRE_OUTPUT_FLOAT(t, 0, 3); + REQUIRE_OUTPUT_LIST(t, 0, LA(3, "D")); REQUIRE_UI_FLOAT_PROPERTY(t, "current", 3); t << "?"; REQUIRE_NO_OUTPUT(t); diff --git a/ceammc/ext/tests/test_ext_ui_toggle.cpp b/ceammc/ext/tests/test_ext_ui_toggle.cpp index 877395a72c..9cd9a43bf2 100644 --- a/ceammc/ext/tests/test_ext_ui_toggle.cpp +++ b/ceammc/ext/tests/test_ext_ui_toggle.cpp @@ -91,13 +91,13 @@ TEST_CASE("ui.toggle", "[ui.toggle]") } pd::External tgl("ui.toggle"); - ExternalOutput out; + LogExternalOutput out; REQUIRE(tgl.connectTo(0, out.object(), 0)); - tgl.bang(); + tgl.sendBang(); REQUIRE_OUTPUT_VALUE(1); - tgl.bang(); + tgl.sendBang(); REQUIRE_OUTPUT_VALUE(0); tgl.sendFloat(1); @@ -121,7 +121,7 @@ TEST_CASE("ui.toggle", "[ui.toggle]") out.reset(); tgl.sendMessage(gensym("set"), LF(1)); REQUIRE(out.msg().isNone()); - tgl.bang(); + tgl.sendBang(); REQUIRE_OUTPUT_VALUE(0); } diff --git a/ceammc/ext/tests/test_external.cpp b/ceammc/ext/tests/test_external.cpp index 0ac8ace4a5..1f2a03d2d4 100644 --- a/ceammc/ext/tests/test_external.cpp +++ b/ceammc/ext/tests/test_external.cpp @@ -14,7 +14,7 @@ #include "test_external.h" #include "ceammc_format.h" #include "ceammc_message.h" -#include "m_pd.h" +#include "test_external_log_output.h" extern "C" { #include "s_stuff.h" @@ -27,90 +27,16 @@ using namespace ceammc; const BANG__ BANG; -static t_class* test_output_class; -struct t_test_output { - t_object x_obj; - ceammc::Message* msg; -}; - -static void* test_output_new() -{ - t_test_output* x = reinterpret_cast(pd_new(test_output_class)); - x->msg = new Message(); - return static_cast(x); -} - -static void test_output_free(t_test_output* x) -{ - delete x->msg; -} - -static void test_output_bang(t_test_output* x) -{ - x->msg->setSymbol(&s_bang); -} - -static void test_output_float(t_test_output* x, t_float f) -{ - x->msg->setFloat(f); -} - -static void test_output_symbol(t_test_output* x, t_symbol* s) -{ - x->msg->setSymbol(s); -} - -static void test_output_list(t_test_output* x, t_symbol*, int argc, t_atom* argv) -{ - x->msg->setList(argc, argv); -} - -static void test_output_any(t_test_output* x, t_symbol* s, int argc, t_atom* argv) -{ - x->msg->setAny(s, argc, argv); -} - static bool setup_test_output() { pd_init(); - - test_output_class = class_new(gensym("test_output"), - reinterpret_cast(test_output_new), - reinterpret_cast(test_output_free), - sizeof(t_test_output), 0, A_NULL); - class_addbang(test_output_class, test_output_bang); - class_addfloat(test_output_class, test_output_float); - class_addlist(test_output_class, test_output_list); - class_addsymbol(test_output_class, test_output_symbol); - class_addanything(test_output_class, test_output_any); + setup_log_output_single(); + setup_log_output_multi(); return true; } static bool test_output_init = setup_test_output(); -void ExternalOutput::setup() -{ - setup_test_output(); -} - -ExternalOutput::ExternalOutput() - : External("test_output") -{ -} - -Message ExternalOutput::msg() -{ - t_test_output* obj = (t_test_output*)object(); - return obj ? *obj->msg : Message(); -} - -void ExternalOutput::reset() -{ - t_test_output* obj = (t_test_output*)object(); - if (obj) - *obj->msg = Message(); -} - void setTestSampleRate(size_t sr) { *get_sys_dacsr() = sr; diff --git a/ceammc/ext/tests/test_external.h b/ceammc/ext/tests/test_external.h index ea3c37ae76..e5b41a1554 100644 --- a/ceammc/ext/tests/test_external.h +++ b/ceammc/ext/tests/test_external.h @@ -18,6 +18,7 @@ #include "ceammc_pd.h" #include "test_base.h" +#include "test_external_log_output.h" #include @@ -52,7 +53,7 @@ extern "C" t_float* get_sys_dacsr(); static void pd_test_core_init() \ { \ pd_init(); \ - ExternalOutput::setup(); \ + LogExternalOutput::setup(); \ ListenerExternal::setup(); \ } @@ -65,8 +66,23 @@ extern "C" t_float* get_sys_dacsr(); #define PD_TEST_FULL_INIT(mod, name) \ static void pd_test_init() \ { \ + static bool done = false; \ + if (done) \ + return; \ pd_test_core_init(); \ pd_test_mod_init_##mod##_##name(); \ + done = true; \ + } \ + template \ + static void pd_test_init(F fn) \ + { \ + static bool done = false; \ + if (done) \ + return; \ + pd_test_core_init(); \ + pd_test_mod_init_##mod##_##name(); \ + fn(); \ + done = true; \ } #define PD_COMPLETE_TEST_SETUP(T, mod, name) \ @@ -90,16 +106,6 @@ struct BANG__ { extern const BANG__ BANG; -class ExternalOutput : public External { -public: - ExternalOutput(); - Message msg(); - void reset(); - -public: - static void setup(); -}; - class ListenerExternal : public External { public: ListenerExternal(const char* s); @@ -178,7 +184,7 @@ template class TestPdExternal : public pd::External { typedef std::map ListenerMap; - std::vector outs_; + std::vector outs_; ListenerMap listeners_; public: @@ -188,7 +194,7 @@ class TestPdExternal : public pd::External { REQUIRE(object()); for (size_t i = 0; i < numOutlets(); i++) { - ExternalOutput* e = new ExternalOutput; + LogExternalOutput* e = new LogExternalOutput; connectTo(i, e->object(), 0); outs_.push_back(e); } @@ -238,7 +244,7 @@ class TestPdExternal : public pd::External { void bang() { clearAll(); - External::bang(); + sendBang(); } void call(const char* method, float f) @@ -283,6 +289,35 @@ class TestPdExternal : public pd::External { sendList(AtomList(ptr.asAtom())); } + void sendBangTo(size_t inlet) + { + clearAll(); + pd::External::sendBangTo(inlet); + } + + void sendFloatTo(t_float v, size_t inlet) + { + clearAll(); + pd::External::sendFloatTo(v, inlet); + } + + void sendSymbolTo(t_symbol* s, size_t inlet) + { + clearAll(); + pd::External::sendSymbolTo(s, inlet); + } + + void sendSymbolTo(const char* s, size_t inlet) + { + sendSymbolTo(gensym(s), inlet); + } + + void sendListTo(const AtomList& l, size_t inlet) + { + clearAll(); + pd::External::sendListTo(l, inlet); + } + ListenerExternal* addListener(const char* l) { return addListener(gensym(l)); @@ -412,6 +447,11 @@ class TestPdExternal : public pd::External { return it->second->msg().anyValue(); } + std::vector messagesAt(size_t n) const + { + return outs_.at(n)->msgList(); + } + bool hasOutputAt(size_t n) const { return !outs_.at(n)->msg().isNone(); diff --git a/ceammc/ext/tests/test_external_log_output.cpp b/ceammc/ext/tests/test_external_log_output.cpp new file mode 100644 index 0000000000..dfe6d5a30d --- /dev/null +++ b/ceammc/ext/tests/test_external_log_output.cpp @@ -0,0 +1,189 @@ +/***************************************************************************** + * Copyright 2019 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#include "test_external_log_output.h" + +static t_class* log_output_single = nullptr; +static t_class* log_output_multi = nullptr; + +#define LOG_MULTI 1 + +#ifdef LOG_MULTI +#define LOG_NAME "log_output_multi" +#else +#define LOG_NAME "log_output_single" +#endif + +using namespace ceammc; + +void LogExternalOutput::setup() +{ + if (!log_output_single) + setup_log_output_single(); + + if (!log_output_multi) + setup_log_output_multi(); +} + +LogExternalOutput::LogExternalOutput() + : External(LOG_NAME) +{ +} + +Message LogExternalOutput::msg() +{ +#if LOG_MULTI + t_log_output_multi* obj = (t_log_output_multi*)object(); + if (!obj || !obj->msg_list || obj->msg_list->empty()) + return Message(); + + return obj->msg_list->back(); +#else + t_log_output_single* obj = (t_log_output_single*)object(); + return obj ? *obj->msg : Message(); +#endif +} + +LogExternalOutput::MessageList LogExternalOutput::msgList() +{ +#if LOG_MULTI + t_log_output_multi* obj = (t_log_output_multi*)object(); + if (!obj || !obj->msg_list) + return {}; + + return *obj->msg_list; +#else + t_log_output_single* obj = (t_log_output_single*)object(); + return obj ? MessageList(*obj->msg, 1) : {}; +#endif +} + +void LogExternalOutput::reset() +{ +#if LOG_MULTI + t_log_output_multi* obj = (t_log_output_multi*)object(); + if (obj && obj->msg_list) + obj->msg_list->clear(); + +#else + t_log_output_single* obj = (t_log_output_single*)object(); + if (obj) + *obj->msg = Message(); +#endif +} + +static void* log_output_single_new() +{ + auto x = reinterpret_cast(pd_new(log_output_single)); + x->msg = new Message(); + return static_cast(x); +} + +static void log_output_single_free(t_log_output_single* x) +{ + delete x->msg; +} + +static void log_output_single_bang(t_log_output_single* x) +{ + x->msg->setSymbol(&s_bang); +} + +static void log_output_single_float(t_log_output_single* x, t_float f) +{ + x->msg->setFloat(f); +} + +static void log_output_single_symbol(t_log_output_single* x, t_symbol* s) +{ + x->msg->setSymbol(s); +} + +static void log_output_single_list(t_log_output_single* x, t_symbol*, int argc, t_atom* argv) +{ + x->msg->setList(argc, argv); +} + +static void log_output_single_any(t_log_output_single* x, t_symbol* s, int argc, t_atom* argv) +{ + x->msg->setAny(s, argc, argv); +} + +bool setup_log_output_single() +{ + log_output_single = class_new(gensym("log_output_single"), + reinterpret_cast(log_output_single_new), + reinterpret_cast(log_output_single_free), + sizeof(t_log_output_single), 0, A_NULL); + class_addbang(log_output_single, log_output_single_bang); + class_addfloat(log_output_single, log_output_single_float); + class_addlist(log_output_single, log_output_single_list); + class_addsymbol(log_output_single, log_output_single_symbol); + class_addanything(log_output_single, log_output_single_any); + return true; +} + +// +// multi +// + +static void* log_output_multi_new() +{ + auto x = reinterpret_cast(pd_new(log_output_multi)); + x->msg_list = new std::vector(); + return static_cast(x); +} + +static void log_output_multi_free(t_log_output_multi* x) +{ + delete x->msg_list; +} + +static void log_output_multi_bang(t_log_output_multi* x) +{ + x->msg_list->push_back(Message(&s_bang)); +} + +static void log_output_multi_float(t_log_output_multi* x, t_float f) +{ + x->msg_list->push_back(Message(f)); +} + +static void log_output_multi_symbol(t_log_output_multi* x, t_symbol* s) +{ + x->msg_list->push_back(Message(s)); +} + +static void log_output_multi_list(t_log_output_multi* x, t_symbol*, int argc, t_atom* argv) +{ + x->msg_list->push_back(Message(argc, argv)); +} + +static void log_output_multi_any(t_log_output_multi* x, t_symbol* s, int argc, t_atom* argv) +{ + x->msg_list->push_back(Message(s, argc, argv)); +} + +bool setup_log_output_multi() +{ + log_output_multi = class_new(gensym("log_output_multi"), + reinterpret_cast(log_output_multi_new), + reinterpret_cast(log_output_multi_free), + sizeof(t_log_output_multi), 0, A_NULL); + class_addbang(log_output_multi, log_output_multi_bang); + class_addfloat(log_output_multi, log_output_multi_float); + class_addlist(log_output_multi, log_output_multi_list); + class_addsymbol(log_output_multi, log_output_multi_symbol); + class_addanything(log_output_multi, log_output_multi_any); + return true; +} diff --git a/ceammc/ext/tests/test_external_log_output.h b/ceammc/ext/tests/test_external_log_output.h new file mode 100644 index 0000000000..4cfae7b7d4 --- /dev/null +++ b/ceammc/ext/tests/test_external_log_output.h @@ -0,0 +1,53 @@ +/***************************************************************************** + * Copyright 2019 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#ifndef TEST_EXTERNAL_LOG_OUTPUT_H +#define TEST_EXTERNAL_LOG_OUTPUT_H + +#include "ceammc_message.h" +#include "ceammc_pd.h" + +template +std::vector messageList(Args... args) +{ + return std::vector({ Message(args)... }); +} + +class LogExternalOutput : public ceammc::pd::External { +public: + typedef std::vector MessageList; + +public: + LogExternalOutput(); + ceammc::Message msg(); + MessageList msgList(); + void reset(); + +public: + static void setup(); +}; + +struct t_log_output_single { + t_object x_obj; + ceammc::Message* msg; +}; + +struct t_log_output_multi { + t_object x_obj; + std::vector* msg_list; +}; + +bool setup_log_output_single(); +bool setup_log_output_multi(); + +#endif // TEST_EXTERNAL_LOG_OUTPUT_H diff --git a/ceammc/ext/tests/test_external_output.cpp b/ceammc/ext/tests/test_external_output.cpp new file mode 100644 index 0000000000..17f3304d6a --- /dev/null +++ b/ceammc/ext/tests/test_external_output.cpp @@ -0,0 +1,13 @@ +/***************************************************************************** + * Copyright 2019 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ diff --git a/ceammc/ext/tests/test_factory.cpp b/ceammc/ext/tests/test_factory.cpp index 407a45a4e6..5f2945e347 100644 --- a/ceammc/ext/tests/test_factory.cpp +++ b/ceammc/ext/tests/test_factory.cpp @@ -14,11 +14,10 @@ #include -#include "../base/debug_gensym.h" -#include "test_base.h" #include "catch.hpp" -#include "ceammc.hpp" #include "ceammc_factory.h" +#include "ceammc_pd.h" +#include "test_base.h" using namespace ceammc; @@ -57,6 +56,45 @@ class ExceptionTest : public TestClass { } }; +class TestListMethodClass : public TestClass { + int method_called_; + t_symbol* sel_; + AtomList args_; + +public: + TestListMethodClass(const PdArgs& a) + : TestClass(a) + , method_called_(0) + , sel_(nullptr) + { + } + + int methodCalled() const { return method_called_; } + t_symbol* methodSel() { return sel_; } + const AtomList& methodArgs() const { return args_; } + + void m_method(t_symbol* sel, const AtomList& args) + { + method_called_++; + args_ = args; + sel_ = sel; + } +}; + +template +class PdExternalT : public ceammc::pd::External { +public: + PdExternalT(const char* name, const AtomList& args = AtomList()) + : ceammc::pd::External(name, args) + { + } + + T* operator->() + { + return reinterpret_cast*>(object())->impl; + } +}; + TEST_CASE("ceammc_factory", "[PureData]") { obj_init(); @@ -76,7 +114,8 @@ TEST_CASE("ceammc_factory", "[PureData]") REQUIRE(ext != 0); REQUIRE(ext->impl != 0); REQUIRE(ext->impl->owner() == &ext->pd_obj); - REQUIRE(ext->impl->className() == "test.new"); + REQUIRE(ext->impl->className() == gensym("test.new")); + REQUIRE(ext->impl->classPointer() == ext->pd_obj.te_g.g_pd); REQUIRE(ext->impl->positionalArguments() == LA(2, "a")); REQUIRE_PROPERTY((*ext->impl), @test_prop, -1); @@ -119,7 +158,7 @@ TEST_CASE("ceammc_factory", "[PureData]") REQUIRE(ext != 0); REQUIRE(ext->impl != 0); REQUIRE(ext->impl->owner() == &ext->pd_obj); - REQUIRE(ext->impl->className() == "test.new"); + REQUIRE(ext->impl->className() == gensym("test.new")); REQUIRE(ext->impl->positionalArguments() == LA(2, "a")); REQUIRE_PROPERTY((*ext->impl), @test_prop, 33); @@ -127,4 +166,25 @@ TEST_CASE("ceammc_factory", "[PureData]") REQUIRE(destructor_called); } + + SECTION("list method") + { + test::pdPrintToStdError(true); + + ObjectFactory f("test.list_method"); + + typedef PdExternalT External; + External t("test.list_method"); + REQUIRE(!t.isNull()); + REQUIRE(t->methodCalled() == 0); + + t.sendMessage(gensym("msg"), LA(1, 2, 3)); + REQUIRE(t->methodCalled() == 0); + + f.addMethod("msg", &TestListMethodClass::m_method); + t.sendMessage(gensym("msg"), LA(1, 2, 3)); + REQUIRE(t->methodCalled() == 1); + REQUIRE(t->methodSel() == gensym("msg")); + REQUIRE(t->methodArgs() == LA(1, 2, 3)); + } } diff --git a/ceammc/ext/tests/test_fn_list2.cpp b/ceammc/ext/tests/test_fn_list2.cpp index 990a570d0f..e67d711bb8 100644 --- a/ceammc/ext/tests/test_fn_list2.cpp +++ b/ceammc/ext/tests/test_fn_list2.cpp @@ -228,6 +228,57 @@ TEST_CASE("list functions", "[ceammc::list]") REQUIRE_RLE(LF(1, 1, 1, 1)); REQUIRE_RLE(LF(1, 2, 3, 3, 2, 2, 1, 1, 1)); REQUIRE_RLE(LA("a", "b", "a", "a")); + } + SECTION("canConvertToType") + { + REQUIRE_FALSE(list::canConvertToType(L())); + REQUIRE_FALSE(list::canConvertToType(LF(1, 2, 3))); + REQUIRE_FALSE(list::canConvertToType(LA("test"))); + REQUIRE(list::canConvertToType(LF(1))); + REQUIRE(list::canConvertToType(LF(0))); + REQUIRE(list::canConvertToType(LF(-0.1))); + REQUIRE(list::canConvertToType(LA("true"))); + REQUIRE(list::canConvertToType(LA("false"))); + + REQUIRE_FALSE(list::canConvertToType(L())); + REQUIRE_FALSE(list::canConvertToType(LF(1, 2))); + REQUIRE_FALSE(list::canConvertToType(LA("abc"))); + REQUIRE(list::canConvertToType(LF(1.123))); + + REQUIRE_FALSE(list::canConvertToType(L())); + REQUIRE_FALSE(list::canConvertToType(LF(1, 2))); + REQUIRE_FALSE(list::canConvertToType(LA("abc"))); + REQUIRE(list::canConvertToType(LF(1.123))); + + REQUIRE_FALSE(list::canConvertToType(L())); + REQUIRE_FALSE(list::canConvertToType(LF(1, 2))); + REQUIRE_FALSE(list::canConvertToType(LA("abc"))); + REQUIRE(list::canConvertToType(LF(-100))); + REQUIRE(list::canConvertToType(LF(1.123))); + + REQUIRE_FALSE(list::canConvertToType(L())); + REQUIRE_FALSE(list::canConvertToType(LF(1, 2))); + REQUIRE_FALSE(list::canConvertToType(LA("abc"))); + REQUIRE_FALSE(list::canConvertToType(LF(-100))); + REQUIRE(list::canConvertToType(LF(100))); + REQUIRE(list::canConvertToType(LF(1.123))); + + REQUIRE_FALSE(list::canConvertToType(L())); + REQUIRE_FALSE(list::canConvertToType(LA(1))); + REQUIRE_FALSE(list::canConvertToType(LA(1, 2))); + REQUIRE_FALSE(list::canConvertToType(LA("abc", 1))); + REQUIRE_FALSE(list::canConvertToType(LA("abc", "def"))); + REQUIRE(list::canConvertToType(LA("A"))); + + REQUIRE_FALSE(list::canConvertToType(L())); + REQUIRE_FALSE(list::canConvertToType(LA(1, 2))); + REQUIRE(list::canConvertToType(LA(1))); + REQUIRE(list::canConvertToType(LA("test"))); + + REQUIRE(list::canConvertToType(L())); + REQUIRE(list::canConvertToType(LA(1))); + REQUIRE(list::canConvertToType(LA(1, 2))); + REQUIRE(list::canConvertToType(LA(1, 2, "ABC"))); } } diff --git a/ceammc/ext/tests/test_list_walk.cpp b/ceammc/ext/tests/test_list_walk.cpp index 10ae59e912..17f4a177f9 100644 --- a/ceammc/ext/tests/test_list_walk.cpp +++ b/ceammc/ext/tests/test_list_walk.cpp @@ -16,20 +16,20 @@ #include "catch.hpp" #include "ceammc.hpp" #include "test_base.h" +#include "test_external.h" -#include +PD_COMPLETE_TEST_SETUP(ListWalk, list, walk) -typedef TestExternal ListWalkTest; - -TEST_CASE("list.walk", "[PureData]") +TEST_CASE("list.walk", "[externals]") { + pd_test_init(); + SECTION("test single") { - AtomList args; - ListWalkTest t("list.walk", args); + TestListWalk t("list.walk", L()); REQUIRE(t.numInlets() == 1); - REQUIRE(t.numOutlets() == 1); + REQUIRE(t.numOutlets() == 2); REQUIRE(t.hasProperty("@direction")); REQUIRE(t.hasProperty("@index")); REQUIRE(t.hasProperty("@value")); @@ -41,6 +41,7 @@ TEST_CASE("list.walk", "[PureData]") REQUIRE(t.hasProperty("@clip")); REQUIRE(t.hasProperty("@fold")); REQUIRE(t.hasProperty("@size")); + REQUIRE_PROPERTY_FLOAT(t, @single, 1); REQUIRE(t.property("@size")->readonly()); REQUIRE(!t.property("@index")->readonly()); @@ -49,20 +50,20 @@ TEST_CASE("list.walk", "[PureData]") t.sendList(LF(1.0, 2.0, 3.0)); CALL(t, current); - REQUIRE_LIST_MSG(t, LF(1)); + REQUIRE_FLOAT_AT_OUTLET(0, t, 1); REQUIRE_INDEX(t, 0); CALL(t, next); - REQUIRE_LIST_MSG(t, LF(2)); + REQUIRE_FLOAT_AT_OUTLET(0, t, 2); REQUIRE_INDEX(t, 1); CALL(t, current); - REQUIRE_LIST_MSG(t, LF(2)); + REQUIRE_FLOAT_AT_OUTLET(0, t, 2); CALL(t, next); - REQUIRE_LIST_MSG(t, LF(3)); + REQUIRE_FLOAT_AT_OUTLET(0, t, 3); REQUIRE_INDEX(t, 2); CALL(t, current); - REQUIRE_LIST_MSG(t, LF(3)); + REQUIRE_FLOAT_AT_OUTLET(0, t, 3); CALL(t, next); REQUIRE_NO_MSG(t); @@ -74,11 +75,11 @@ TEST_CASE("list.walk", "[PureData]") CALL(t, reset); REQUIRE_INDEX(t, 0); CALL(t, current); - REQUIRE_LIST_MSG(t, LF(1)); + REQUIRE_FLOAT_AT_OUTLET(0, t, 1); CALL(t, next); - REQUIRE_LIST_MSG(t, LF(2)); + REQUIRE_FLOAT_AT_OUTLET(0, t, 2); CALL(t, next); - REQUIRE_LIST_MSG(t, LF(3)); + REQUIRE_FLOAT_AT_OUTLET(0, t, 3); CALL(t, next); REQUIRE_NO_MSG(t); @@ -91,9 +92,9 @@ TEST_CASE("list.walk", "[PureData]") REQUIRE_INDEX(t, 2); CALL(t, prev); - REQUIRE_LIST_MSG(t, LF(2)); + REQUIRE_FLOAT_AT_OUTLET(0, t, 2); CALL(t, prev); - REQUIRE_LIST_MSG(t, LF(1)); + REQUIRE_FLOAT_AT_OUTLET(0, t, 1); CALL(t, prev); REQUIRE_NO_MSG(t); @@ -103,33 +104,32 @@ TEST_CASE("list.walk", "[PureData]") REQUIRE_INDEX(t, 0); CALL(t, next); - REQUIRE_LIST_MSG(t, LF(2)); + REQUIRE_FLOAT_AT_OUTLET(0, t, 2); REQUIRE_INDEX(t, 1); SECTION("test single step") { - AtomList args; - ListWalkTest t("list.walk", args); + TestListWalk t("list.walk"); t.sendList(LF(1.0, 2.0, 3.0, 4.0, 5.0)); CALL(t, current); - REQUIRE_LIST_MSG(t, LF(1)); + REQUIRE_FLOAT_AT_OUTLET(0, t, 1); CALL_N(t, next, 2); - REQUIRE_LIST_MSG(t, LF(3)); + REQUIRE_FLOAT_AT_OUTLET(0, t, 3); CALL_N(t, next, 2); - REQUIRE_LIST_MSG(t, LF(5)); + REQUIRE_FLOAT_AT_OUTLET(0, t, 5); CALL_N(t, next, 2); REQUIRE_NO_MSG(t); CALL_N(t, prev, 2); - REQUIRE_LIST_MSG(t, LF(3)); + REQUIRE_FLOAT_AT_OUTLET(0, t, 3); CALL_N(t, prev, 2); - REQUIRE_LIST_MSG(t, LF(1)); + REQUIRE_FLOAT_AT_OUTLET(0, t, 1); CALL_N(t, prev, 2); REQUIRE_NO_MSG(t); @@ -138,11 +138,9 @@ TEST_CASE("list.walk", "[PureData]") SECTION("test single length 2") { - AtomList args(gensym("@length"), 2); - SECTION("step 1") { - ListWalkTest t("list.walk", args); + TestListWalk t("list.walk", LA("@length", 2)); t.sendList(LF(1.0, 2.0, 3.0, 4.0, 5.0)); @@ -159,7 +157,7 @@ TEST_CASE("list.walk", "[PureData]") REQUIRE_LIST_MSG(t, AtomList(4, 5)); CALL(t, next); - REQUIRE_LIST_MSG(t, LF(5)); + REQUIRE_FLOAT_AT_OUTLET(0, t, 5); CALL(t, next); REQUIRE_NO_MSG(t); @@ -183,7 +181,7 @@ TEST_CASE("list.walk", "[PureData]") SECTION("step 2") { - ListWalkTest t("list.walk", args); + TestListWalk t("list.walk", LA("@length", 2)); t.sendList(LF(1.0, 2.0, 3.0, 4.0, 5.0)); @@ -194,7 +192,7 @@ TEST_CASE("list.walk", "[PureData]") REQUIRE_LIST_MSG(t, AtomList(3, 4)); CALL_N(t, next, 2); - REQUIRE_LIST_MSG(t, LF(5)); + REQUIRE_FLOAT_AT_OUTLET(0, t, 5); CALL_N(t, next, 2); REQUIRE_NO_MSG(t); @@ -217,8 +215,7 @@ TEST_CASE("list.walk", "[PureData]") { SECTION("basic") { - AtomList args(gensym("@wrap")); - ListWalkTest t("list.walk", args); + TestListWalk t("list.walk", LA("@wrap")); CALL(t, current); REQUIRE_NO_MSG(t); @@ -229,47 +226,46 @@ TEST_CASE("list.walk", "[PureData]") t.sendList(LF(1.0, 2.0, 3.0)); CALL(t, current); - REQUIRE_LIST_MSG(t, LF(1)); + REQUIRE_FLOAT_AT_OUTLET(0, t, 1); REQUIRE_INDEX(t, 0); CALL(t, next); - REQUIRE_LIST_MSG(t, LF(2)); + REQUIRE_FLOAT_AT_OUTLET(0, t, 2); REQUIRE_INDEX(t, 1); CALL(t, next); - REQUIRE_LIST_MSG(t, LF(3)); + REQUIRE_FLOAT_AT_OUTLET(0, t, 3); REQUIRE_INDEX(t, 2); CALL(t, next); - REQUIRE_LIST_MSG(t, LF(1)); + REQUIRE_FLOAT_AT_OUTLET(0, t, 1); REQUIRE_INDEX(t, 0); CALL(t, next); - REQUIRE_LIST_MSG(t, LF(2)); + REQUIRE_FLOAT_AT_OUTLET(0, t, 2); REQUIRE_INDEX(t, 1); CALL(t, next); - REQUIRE_LIST_MSG(t, LF(3)); + REQUIRE_FLOAT_AT_OUTLET(0, t, 3); REQUIRE_INDEX(t, 2); CALL(t, prev); - REQUIRE_LIST_MSG(t, LF(2)); + REQUIRE_FLOAT_AT_OUTLET(0, t, 2); CALL(t, prev); - REQUIRE_LIST_MSG(t, LF(1)); + REQUIRE_FLOAT_AT_OUTLET(0, t, 1); CALL(t, prev); - REQUIRE_LIST_MSG(t, LF(3)); + REQUIRE_FLOAT_AT_OUTLET(0, t, 3); CALL(t, prev); - REQUIRE_LIST_MSG(t, LF(2)); + REQUIRE_FLOAT_AT_OUTLET(0, t, 2); CALL(t, reset); CALL(t, prev); - REQUIRE_LIST_MSG(t, LF(3)); + REQUIRE_FLOAT_AT_OUTLET(0, t, 3); CALL(t, prev); - REQUIRE_LIST_MSG(t, LF(2)); + REQUIRE_FLOAT_AT_OUTLET(0, t, 2); CALL(t, prev); - REQUIRE_LIST_MSG(t, LF(1)); + REQUIRE_FLOAT_AT_OUTLET(0, t, 1); } SECTION("step 2") { - AtomList args(gensym("@wrap")); - ListWalkTest t("list.walk", args); + TestListWalk t("list.walk", LA("@wrap")); CALL(t, current); REQUIRE_NO_MSG(t); @@ -279,33 +275,31 @@ TEST_CASE("list.walk", "[PureData]") t.sendList(LF(1.0, 2.0, 3.0)); CALL(t, current); - REQUIRE_LIST_MSG(t, LF(1)); + REQUIRE_FLOAT_AT_OUTLET(0, t, 1); REQUIRE_INDEX(t, 0); CALL_N(t, next, 2); - REQUIRE_LIST_MSG(t, LF(3)); + REQUIRE_FLOAT_AT_OUTLET(0, t, 3); REQUIRE_INDEX(t, 2); CALL_N(t, next, 2); - REQUIRE_LIST_MSG(t, LF(2)); + REQUIRE_FLOAT_AT_OUTLET(0, t, 2); REQUIRE_INDEX(t, 1); CALL_N(t, next, 2); - REQUIRE_LIST_MSG(t, LF(1)); + REQUIRE_FLOAT_AT_OUTLET(0, t, 1); REQUIRE_INDEX(t, 0); CALL_N(t, prev, 3); - REQUIRE_LIST_MSG(t, LF(1)); + REQUIRE_FLOAT_AT_OUTLET(0, t, 1); REQUIRE_INDEX(t, 0); CALL_N(t, prev, 4); - REQUIRE_LIST_MSG(t, LF(3)); + REQUIRE_FLOAT_AT_OUTLET(0, t, 3); REQUIRE_INDEX(t, 2); } SECTION("length 2") { - AtomList args(gensym("@wrap")); - args.append(AtomList(gensym("@length"), 2)); - ListWalkTest t("list.walk", args); + TestListWalk t("list.walk", LA("@wrap", "@length", 2)); CALL(t, current); REQUIRE_NO_MSG(t); @@ -341,8 +335,7 @@ TEST_CASE("list.walk", "[PureData]") { SECTION("basic") { - AtomList args(gensym("@clip")); - ListWalkTest t("list.walk", args); + TestListWalk t("list.walk", LA("@clip")); CALL(t, current); REQUIRE_NO_MSG(t); @@ -353,50 +346,49 @@ TEST_CASE("list.walk", "[PureData]") t.sendList(LF(1.0, 2.0, 3.0)); CALL(t, current); - REQUIRE_LIST_MSG(t, LF(1)); + REQUIRE_FLOAT_AT_OUTLET(0, t, 1); REQUIRE_INDEX(t, 0); CALL(t, next); - REQUIRE_LIST_MSG(t, LF(2)); + REQUIRE_FLOAT_AT_OUTLET(0, t, 2); REQUIRE_INDEX(t, 1); CALL(t, next); - REQUIRE_LIST_MSG(t, LF(3)); + REQUIRE_FLOAT_AT_OUTLET(0, t, 3); REQUIRE_INDEX(t, 2); CALL(t, next); - REQUIRE_LIST_MSG(t, LF(3)); + REQUIRE_FLOAT_AT_OUTLET(0, t, 3); REQUIRE_INDEX(t, 2); CALL(t, next); - REQUIRE_LIST_MSG(t, LF(3)); + REQUIRE_FLOAT_AT_OUTLET(0, t, 3); REQUIRE_INDEX(t, 2); CALL(t, next); - REQUIRE_LIST_MSG(t, LF(3)); + REQUIRE_FLOAT_AT_OUTLET(0, t, 3); REQUIRE_INDEX(t, 2); CALL(t, prev); - REQUIRE_LIST_MSG(t, LF(2)); + REQUIRE_FLOAT_AT_OUTLET(0, t, 2); CALL(t, prev); - REQUIRE_LIST_MSG(t, LF(1)); + REQUIRE_FLOAT_AT_OUTLET(0, t, 1); REQUIRE_INDEX(t, 0); CALL(t, prev); - REQUIRE_LIST_MSG(t, LF(1)); + REQUIRE_FLOAT_AT_OUTLET(0, t, 1); REQUIRE_INDEX(t, 0); CALL(t, prev); - REQUIRE_LIST_MSG(t, LF(1)); + REQUIRE_FLOAT_AT_OUTLET(0, t, 1); REQUIRE_INDEX(t, 0); CALL(t, reset); CALL(t, prev); - REQUIRE_LIST_MSG(t, LF(1)); + REQUIRE_FLOAT_AT_OUTLET(0, t, 1); CALL(t, prev); - REQUIRE_LIST_MSG(t, LF(1)); + REQUIRE_FLOAT_AT_OUTLET(0, t, 1); CALL(t, prev); - REQUIRE_LIST_MSG(t, LF(1)); + REQUIRE_FLOAT_AT_OUTLET(0, t, 1); } SECTION("step 2") { - AtomList args(gensym("@clip")); - ListWalkTest t("list.walk", args); + TestListWalk t("list.walk", LA("@clip")); CALL(t, current); REQUIRE_NO_MSG(t); @@ -406,29 +398,28 @@ TEST_CASE("list.walk", "[PureData]") t.sendList(LF(1.0, 2.0, 3.0)); CALL(t, current); - REQUIRE_LIST_MSG(t, LF(1)); + REQUIRE_FLOAT_AT_OUTLET(0, t, 1); CALL_N(t, next, 2); - REQUIRE_LIST_MSG(t, LF(3)); + REQUIRE_FLOAT_AT_OUTLET(0, t, 3); CALL_N(t, next, 2); - REQUIRE_LIST_MSG(t, LF(3)); + REQUIRE_FLOAT_AT_OUTLET(0, t, 3); CALL_N(t, next, 2); - REQUIRE_LIST_MSG(t, LF(3)); + REQUIRE_FLOAT_AT_OUTLET(0, t, 3); REQUIRE_INDEX(t, 2); CALL_N(t, prev, 2); - REQUIRE_LIST_MSG(t, LF(1)); + REQUIRE_FLOAT_AT_OUTLET(0, t, 1); CALL_N(t, prev, 4); - REQUIRE_LIST_MSG(t, LF(1)); + REQUIRE_FLOAT_AT_OUTLET(0, t, 1); REQUIRE_INDEX(t, 0); } SECTION("length 2") { - AtomList args(gensym("@clip")); - args.append(AtomList(gensym("@length"), 2)); - ListWalkTest t("list.walk", args); + TestListWalk t("list.walk", LA("@clip", "@length", 2)); + REQUIRE_PROPERTY_FLOAT(t, @clip, 1); CALL(t, current); REQUIRE_NO_MSG(t); diff --git a/ceammc/ext/tests/test_list_walk2.cpp b/ceammc/ext/tests/test_list_walk2.cpp index fc13b80bc0..0fb2487ee6 100644 --- a/ceammc/ext/tests/test_list_walk2.cpp +++ b/ceammc/ext/tests/test_list_walk2.cpp @@ -13,13 +13,10 @@ *****************************************************************************/ #include "../list/list_walk.h" -#include "catch.hpp" -#include "ceammc.hpp" #include "test_base.h" +#include "test_external.h" -#include - -typedef TestExternal ListWalkTest; +PD_COMPLETE_TEST_SETUP(ListWalk, list, walk) #define REQUIRE_LIST_MSG(obj, lst) \ { \ @@ -28,6 +25,13 @@ typedef TestExternal ListWalkTest; REQUIRE(obj.lastMessage().listValue() == lst); \ } +#define REQUIRE_FLOAT(obj, f) \ + { \ + REQUIRE(obj.hasNewMessages()); \ + REQUIRE(obj.lastMessage().isFloat()); \ + REQUIRE(obj.lastMessage().atomValue().asFloat() == f); \ + } + #define REQUIRE_PROP(obj, name, val) \ { \ Property* p = obj.property(gensym("@" #name)); \ @@ -42,15 +46,15 @@ typedef TestExternal ListWalkTest; #define REQUIRE_NO_MSG(obj) REQUIRE_FALSE(obj.hasNewMessages()) -TEST_CASE("list.walk 2", "[PureData]") +TEST_CASE("list.walk 2", "[externals]") { + pd_test_init(); SECTION("test fold") { SECTION("basic") { - AtomList args(gensym("@fold")); - ListWalkTest t("list.walk", args); + TestListWalk t("list.walk", LA("@fold")); CALL(t, current); REQUIRE_NO_MSG(t); @@ -59,135 +63,132 @@ TEST_CASE("list.walk 2", "[PureData]") REQUIRE_NO_MSG(t); REQUIRE_INDEX(t, 0); - t.sendList(LF(1.0, 2.0, 3.0)); - REQUIRE_PROP(t, index, AtomList(0.f)); + t.sendList(LF(1, 2, 3)); + REQUIRE_PROP(t, index, LF(0)); CALL(t, current); - REQUIRE_LIST_MSG(t, LF(1)); + REQUIRE_FLOAT(t, 1); REQUIRE_INDEX(t, 0); CALL(t, next); - REQUIRE_LIST_MSG(t, LF(2)); + REQUIRE_FLOAT(t, 2); REQUIRE_INDEX(t, 1); CALL(t, next); - REQUIRE_LIST_MSG(t, LF(3)); + REQUIRE_FLOAT(t, 3); REQUIRE_INDEX(t, 2); CALL(t, next); - REQUIRE_LIST_MSG(t, LF(2)); + REQUIRE_FLOAT(t, 2); REQUIRE_INDEX(t, 1); CALL(t, next); - REQUIRE_LIST_MSG(t, LF(1)); + REQUIRE_FLOAT(t, 1); REQUIRE_INDEX(t, 0); CALL(t, next); - REQUIRE_LIST_MSG(t, LF(2)); + REQUIRE_FLOAT(t, 2); REQUIRE_INDEX(t, 1); CALL(t, prev); - REQUIRE_LIST_MSG(t, LF(1)); + REQUIRE_FLOAT(t, 1); REQUIRE_INDEX(t, 0); CALL(t, prev); - REQUIRE_LIST_MSG(t, LF(2)); + REQUIRE_FLOAT(t, 2); REQUIRE_INDEX(t, 1); CALL(t, prev); - REQUIRE_LIST_MSG(t, LF(3)); + REQUIRE_FLOAT(t, 3); REQUIRE_INDEX(t, 2); CALL(t, prev); - REQUIRE_LIST_MSG(t, LF(2)); + REQUIRE_FLOAT(t, 2); REQUIRE_INDEX(t, 1); CALL(t, reset); - REQUIRE_PROP(t, index, AtomList(0.f)); + REQUIRE_PROP(t, index, LF(0)); CALL(t, prev); REQUIRE_PROP(t, index, LF(1)); - REQUIRE_LIST_MSG(t, LF(2)); + REQUIRE_FLOAT(t, 2); CALL(t, prev); - REQUIRE_LIST_MSG(t, LF(3)); + REQUIRE_FLOAT(t, 3); CALL(t, prev); - REQUIRE_LIST_MSG(t, LF(2)); + REQUIRE_FLOAT(t, 2); CALL(t, prev); - REQUIRE_LIST_MSG(t, LF(1)); + REQUIRE_FLOAT(t, 1); REQUIRE_INDEX(t, 0); } SECTION("step 2") { - AtomList args(gensym("@fold")); - ListWalkTest t("list.walk", args); + TestListWalk t("list.walk", LA("@fold")); CALL(t, current); REQUIRE_NO_MSG(t); CALL_N(t, next, 2); REQUIRE_NO_MSG(t); - t.sendList(LF(1.0, 2.0, 3.0)); + t.sendList(LF(1, 2, 3)); CALL(t, current); - REQUIRE_LIST_MSG(t, LF(1)); + REQUIRE_FLOAT(t, 1); // 1 2 3 2 1 2 3 2 1 CALL_N(t, next, 2); - REQUIRE_LIST_MSG(t, LF(3)); + REQUIRE_FLOAT(t, 3); CALL_N(t, next, 2); - REQUIRE_LIST_MSG(t, LF(1)); + REQUIRE_FLOAT(t, 1); CALL_N(t, next, 3); - REQUIRE_LIST_MSG(t, LF(2)); + REQUIRE_FLOAT(t, 2); REQUIRE_INDEX(t, 1); CALL_N(t, prev, 3); - REQUIRE_LIST_MSG(t, LF(1)); + REQUIRE_FLOAT(t, 1); REQUIRE_INDEX(t, 0); CALL_N(t, prev, 4); - REQUIRE_LIST_MSG(t, LF(1)); + REQUIRE_FLOAT(t, 1); REQUIRE_INDEX(t, 0); } SECTION("length 2") { - AtomList args(gensym("@fold")); - args.append(AtomList(gensym("@length"), 2)); - ListWalkTest t("list.walk", args); + TestListWalk t("list.walk", LA("@fold", "@length", 2)); CALL(t, current); REQUIRE_NO_MSG(t); CALL(t, next); REQUIRE_NO_MSG(t); - t.sendList(LF(1.0, 2.0, 3.0, 4.0, 5.0)); + t.sendList(LF(1, 2, 3, 4, 5)); CALL(t, current); - REQUIRE_LIST_MSG(t, AtomList(1, 2)); + REQUIRE_LIST_MSG(t, LF(1, 2)); // 1 2 3 4 5 4 3 2 1 2 3 4 5 4 3 2 1 CALL_N(t, next, 2); - REQUIRE_LIST_MSG(t, AtomList(3, 4)); + REQUIRE_LIST_MSG(t, LF(3, 4)); CALL_N(t, next, 2); - REQUIRE_LIST_MSG(t, AtomList(5, 4)); + REQUIRE_LIST_MSG(t, LF(5, 4)); CALL_N(t, next, 2); - REQUIRE_LIST_MSG(t, AtomList(3, 2)); + REQUIRE_LIST_MSG(t, LF(3, 2)); CALL_N(t, prev, 3); - REQUIRE_LIST_MSG(t, AtomList(4, 5)); + REQUIRE_LIST_MSG(t, LF(4, 5)); CALL_N(t, prev, 3); - REQUIRE_LIST_MSG(t, AtomList(1, 2)); + REQUIRE_LIST_MSG(t, LF(1, 2)); CALL_N(t, prev, 3); - REQUIRE_LIST_MSG(t, AtomList(4, 3)); + REQUIRE_LIST_MSG(t, LF(4, 3)); } } SECTION("test length < 1") { - ListWalkTest t("list.walk", L()); - REQUIRE(t.setProperty("@length", AtomList(0.f))); + TestListWalk t("list.walk", L()); + REQUIRE(t.setProperty("@length", LF(0))); CALL(t, current); REQUIRE_NO_MSG(t); - t.sendList(LF(1.0, 2.0)); + t.sendList(LF(1, 2)); CALL(t, current); REQUIRE_NO_MSG(t); - REQUIRE(t.setProperty("@length", AtomList(-10))); + REQUIRE(t.setProperty("@length", LF(-10))); CALL(t, current); REQUIRE_NO_MSG(t); @@ -195,8 +196,8 @@ TEST_CASE("list.walk 2", "[PureData]") SECTION("test @size") { - ListWalkTest t("list.walk", L()); - REQUIRE_PROP(t, size, AtomList(0.f)); + TestListWalk t("list.walk", L()); + REQUIRE_PROP(t, size, LF(0)); t.sendList(LF(1.0, 2.0)); REQUIRE_PROP(t, size, LF(2)); @@ -204,135 +205,135 @@ TEST_CASE("list.walk 2", "[PureData]") SECTION("test bang") { - ListWalkTest t("list.walk", AtomList(1, 2)); - REQUIRE(t.property("@mode")->get() == AtomList(gensym("single"))); + TestListWalk t("list.walk", LF(1, 2)); + REQUIRE(t.property("@mode")->get() == LA("single")); REQUIRE(t.setProperty("@loop", L())); - REQUIRE(t.property("@mode")->get() == AtomList(gensym("wrap"))); + REQUIRE(t.property("@mode")->get() == LA("wrap")); t.sendBang(); - REQUIRE_LIST_MSG(t, LF(1)); + REQUIRE_FLOAT(t, 1); t.sendBang(); - REQUIRE_LIST_MSG(t, LF(2)); + REQUIRE_FLOAT(t, 2); t.sendBang(); - REQUIRE_LIST_MSG(t, LF(1)); + REQUIRE_FLOAT(t, 1); } SECTION("test @direction") { - ListWalkTest t("list.walk", LF(1.0, 2.0, 3.0)); - REQUIRE_PROP(t, direction, AtomList(1.f)); - REQUIRE(t.setProperty("@direction", AtomList(0.f))); + TestListWalk t("list.walk", LF(1, 2, 3)); + REQUIRE_PROP(t, direction, LF(1)); + REQUIRE(t.setProperty("@direction", LF(0))); REQUIRE(t.setProperty("@loop", L())); t.sendBang(); - REQUIRE_LIST_MSG(t, LF(1)); + REQUIRE_FLOAT(t, 1); t.sendBang(); - REQUIRE_LIST_MSG(t, LF(3)); + REQUIRE_FLOAT(t, 3); t.sendBang(); - REQUIRE_LIST_MSG(t, LF(2)); + REQUIRE_FLOAT(t, 2); CALL(t, prev); - REQUIRE_LIST_MSG(t, LF(2)); + REQUIRE_FLOAT(t, 2); CALL(t, next); - REQUIRE_LIST_MSG(t, LF(1)); + REQUIRE_FLOAT(t, 1); - REQUIRE(t.setProperty("@direction", AtomList(1.f))); + REQUIRE(t.setProperty("@direction", LF(1))); t.sendBang(); - REQUIRE_LIST_MSG(t, LF(1)); + REQUIRE_FLOAT(t, 1); t.sendBang(); - REQUIRE_LIST_MSG(t, LF(2)); + REQUIRE_FLOAT(t, 2); CALL(t, prev); - REQUIRE_LIST_MSG(t, LF(2)); + REQUIRE_FLOAT(t, 2); CALL(t, next); - REQUIRE_LIST_MSG(t, LF(3)); + REQUIRE_FLOAT(t, 3); } SECTION("test float") { SECTION("forward") { - ListWalkTest t("list.walk", LF(1.0, 2.0, 3.0, 4.0, 5.0)); - REQUIRE_PROP(t, direction, AtomList(1.f)); + TestListWalk t("list.walk", LF(1, 2, 3, 4, 5)); + REQUIRE_PROP(t, direction, LF(1)); REQUIRE(t.setProperty("@loop", L())); t.sendFloat(1); - REQUIRE_LIST_MSG(t, LF(1)); + REQUIRE_FLOAT(t, 1); CALL(t, current); - REQUIRE_LIST_MSG(t, LF(2)); + REQUIRE_FLOAT(t, 2); t.sendFloat(0); - REQUIRE_LIST_MSG(t, LF(2)); + REQUIRE_FLOAT(t, 2); t.sendFloat(2); - REQUIRE_LIST_MSG(t, LF(2)); + REQUIRE_FLOAT(t, 2); CALL(t, current); - REQUIRE_LIST_MSG(t, LF(4)); + REQUIRE_FLOAT(t, 4); t.sendFloat(-4); - REQUIRE_LIST_MSG(t, LF(4)); + REQUIRE_FLOAT(t, 4); CALL(t, current); - REQUIRE_LIST_MSG(t, LF(5)); + REQUIRE_FLOAT(t, 5); t.sendFloat(-1); - REQUIRE_LIST_MSG(t, LF(5)); + REQUIRE_FLOAT(t, 5); CALL(t, current); - REQUIRE_LIST_MSG(t, LF(4)); + REQUIRE_FLOAT(t, 4); } SECTION("backward") { - ListWalkTest t("list.walk", LF(1.0, 2.0, 3.0, 4.0, 5.0)); - REQUIRE_PROP(t, direction, AtomList(1.f)); - REQUIRE(t.setProperty("@direction", AtomList(0.f))); + TestListWalk t("list.walk", LF(1, 2, 3, 4, 5)); + REQUIRE_PROP(t, direction, LF(1)); + REQUIRE(t.setProperty("@direction", LF(0))); REQUIRE(t.setProperty("@loop", L())); t.sendFloat(1); - REQUIRE_LIST_MSG(t, LF(1)); + REQUIRE_FLOAT(t, 1); CALL(t, current); - REQUIRE_LIST_MSG(t, LF(5)); + REQUIRE_FLOAT(t, 5); t.sendFloat(2); - REQUIRE_LIST_MSG(t, LF(5)); + REQUIRE_FLOAT(t, 5); CALL(t, current); - REQUIRE_LIST_MSG(t, LF(3)); + REQUIRE_FLOAT(t, 3); t.sendFloat(-4); - REQUIRE_LIST_MSG(t, LF(3)); + REQUIRE_FLOAT(t, 3); CALL(t, current); - REQUIRE_LIST_MSG(t, LF(2)); + REQUIRE_FLOAT(t, 2); t.sendFloat(-1); - REQUIRE_LIST_MSG(t, LF(2)); + REQUIRE_FLOAT(t, 2); CALL(t, current); - REQUIRE_LIST_MSG(t, LF(3)); + REQUIRE_FLOAT(t, 3); } } SECTION("test set index") { - ListWalkTest t("list.walk", L()); + TestListWalk t("list.walk", L()); t.p_set_index(LF(2)); - REQUIRE_PROP(t, index, AtomList(0.0f)); + REQUIRE_PROP(t, index, LF(0)); t.p_set_index(AtomList(-2)); - REQUIRE(t.p_index() == AtomList(0.0f)); - - t.sendList(AtomList(2, 3)); - t.p_set_index(AtomList(0.0f)); - REQUIRE_PROP(t, index, AtomList(0.0f)); - t.p_set_index(AtomList(1.0f)); - REQUIRE_PROP(t, index, AtomList(1.0f)); - t.p_set_index(AtomList(2.0f)); - REQUIRE_PROP(t, index, AtomList(1.0f)); - t.p_set_index(AtomList(3.0f)); - REQUIRE_PROP(t, index, AtomList(1.0f)); - t.p_set_index(AtomList(4.0f)); - REQUIRE_PROP(t, index, AtomList(1.0f)); - - t.p_set_index(AtomList(-1.0f)); - REQUIRE_PROP(t, index, AtomList(1.0f)); - t.p_set_index(AtomList(-2.0f)); - REQUIRE_PROP(t, index, AtomList(0.0f)); - t.p_set_index(AtomList(-3.0f)); - REQUIRE_PROP(t, index, AtomList(0.0f)); - t.p_set_index(AtomList(-4.0f)); - REQUIRE_PROP(t, index, AtomList(0.0f)); + REQUIRE(t.p_index() == LF(0)); + + t.sendList(LF(2, 3)); + t.p_set_index(LF(0)); + REQUIRE_PROP(t, index, LF(0)); + t.p_set_index(LF(1)); + REQUIRE_PROP(t, index, LF(1)); + t.p_set_index(LF(2)); + REQUIRE_PROP(t, index, LF(1)); + t.p_set_index(LF(3)); + REQUIRE_PROP(t, index, LF(1)); + t.p_set_index(LF(4)); + REQUIRE_PROP(t, index, LF(1)); + + t.p_set_index(LF(-1)); + REQUIRE_PROP(t, index, LF(1)); + t.p_set_index(LF(-2)); + REQUIRE_PROP(t, index, LF(0)); + t.p_set_index(LF(-3)); + REQUIRE_PROP(t, index, LF(0)); + t.p_set_index(LF(-4)); + REQUIRE_PROP(t, index, LF(0)); } } diff --git a/ceammc/ext/tests/test_message.cpp b/ceammc/ext/tests/test_message.cpp index e190bbbe35..e720590123 100644 --- a/ceammc/ext/tests/test_message.cpp +++ b/ceammc/ext/tests/test_message.cpp @@ -59,6 +59,14 @@ TEST_CASE("Message", "[ceammc::Message]") Message v12(&s_bang); REQUIRE(v12.isBang()); + SECTION("template") + { + Message m("msg", 1, 2, 3); + REQUIRE(m.isAny()); + REQUIRE(m.atomValue() == A("msg")); + REQUIRE(m.listValue() == LF(1, 2, 3)); + } + SECTION("compare") { REQUIRE(v1 == v1); diff --git a/ceammc/ext/tests/test_pd_external.cpp b/ceammc/ext/tests/test_pd_external.cpp index c84c427b4f..2bb2dc8ce2 100644 --- a/ceammc/ext/tests/test_pd_external.cpp +++ b/ceammc/ext/tests/test_pd_external.cpp @@ -25,7 +25,14 @@ static CanvasPtr cnv = PureData::instance().createTopCanvas("test_canvas"); TEST_CASE("pd external", "[pd::External]") { pd_init(); - ExternalOutput::setup(); + LogExternalOutput::setup(); + + SECTION("coords") + { + External t("*"); + REQUIRE(t.xPos() == 0); + REQUIRE(t.yPos() == 0); + } SECTION("connectTo") { @@ -73,4 +80,53 @@ TEST_CASE("pd external", "[pd::External]") REQUIRE_FALSE(t2.connectFrom(2, t3, 0)); REQUIRE_FALSE(t2.connectFrom(0, t3, 2)); } + + SECTION("abstraction") + { + External t1(TEST_DATA_DIR "/test_canvas_01"); + REQUIRE_FALSE(t1.isNull()); + REQUIRE(t1.numInlets() == 1); + REQUIRE(t1.numOutlets() == 2); + } + + SECTION("object functions") + { + REQUIRE(pd::object_class(nullptr) == nullptr); + REQUIRE(pd::object_name(nullptr) == &s_); + REQUIRE(pd::object_dir(nullptr) == &s_); + + External t("+"); + REQUIRE(pd::object_class(t.object())); + REQUIRE(pd::object_name(t.object()) == gensym("+")); + REQUIRE(pd::object_dir(t.object()) == &s_); + } + + SECTION("methods") + { + External t("delwrite~"); + REQUIRE_FALSE(t.isNull()); + REQUIRE_FALSE(t.methods().empty()); + REQUIRE(t.methods().size() == 2); + REQUIRE(t.methods()[0]->s_name == std::string("dsp")); + REQUIRE(t.methods()[1]->s_name == std::string("clear")); + } + + SECTION("ceammc") + { + } + + SECTION("send") + { + External t("+"); + t.sendBang(); + t.sendFloat(10); + t.sendList(LF(10, 20)); + + t.sendBangTo(0); + t.sendBangTo(1); + t.sendFloatTo(-1, 0); + t.sendFloatTo(-1, 1); + t.sendListTo(LF(10, 20), 0); + t.sendListTo(LF(10, 20), 1); + } } diff --git a/ceammc/ext/tests/test_shareddata.cpp b/ceammc/ext/tests/test_shareddata.cpp index cd126898ab..e80592a9f7 100644 --- a/ceammc/ext/tests/test_shareddata.cpp +++ b/ceammc/ext/tests/test_shareddata.cpp @@ -37,48 +37,48 @@ int TestRef::count = 0; TEST_CASE("NamedDataDict", "[ceammc::NamedDataDict]") { NamedTestDict dict; - REQUIRE_FALSE(dict.contains("test")); - REQUIRE(dict.refCount("test") == 0); - REQUIRE(dict.acquire("test") == 0); - REQUIRE_FALSE(dict.release("test")); + REQUIRE_FALSE(dict.contains(gensym("test"))); + REQUIRE(dict.refCount(gensym("test")) == 0); + REQUIRE(dict.acquire(gensym("test")) == 0); + REQUIRE_FALSE(dict.release(gensym("test"))); REQUIRE(TestRef::count == 0); TestRef* t = new TestRef(0xBEEF); REQUIRE(TestRef::count == 1); - REQUIRE(dict.create("test", t)); - REQUIRE(dict.create("test2", new TestRef(0xDAD))); + REQUIRE(dict.create(gensym("test"), t)); + REQUIRE(dict.create(gensym("test2"), new TestRef(0xDAD))); REQUIRE(TestRef::count == 2); // second creation - REQUIRE_FALSE(dict.create("test", t)); + REQUIRE_FALSE(dict.create(gensym("test"), t)); - REQUIRE(dict.contains("test")); - REQUIRE(dict.refCount("test") == 0); + REQUIRE(dict.contains(gensym("test"))); + REQUIRE(dict.refCount(gensym("test")) == 0); // + - REQUIRE(dict.acquire("test")->value == 0xBEEF); - REQUIRE(dict.refCount("test") == 1); + REQUIRE(dict.acquire(gensym("test"))->value == 0xBEEF); + REQUIRE(dict.refCount(gensym("test")) == 1); // - - REQUIRE(dict.release("test")); - REQUIRE(dict.refCount("test") == 0); + REQUIRE(dict.release(gensym("test"))); + REQUIRE(dict.refCount(gensym("test")) == 0); // failed - - REQUIRE_FALSE(dict.release("test")); - REQUIRE(dict.refCount("test") == 0); - REQUIRE_FALSE(dict.contains("test")); + REQUIRE_FALSE(dict.release(gensym("test"))); + REQUIRE(dict.refCount(gensym("test")) == 0); + REQUIRE_FALSE(dict.contains(gensym("test"))); // not acquired data REQUIRE(TestRef::count == 1); // release not acquired - REQUIRE(dict.release("test2")); + REQUIRE(dict.release(gensym("test2"))); REQUIRE(TestRef::count == 0); } TEST_CASE("SharedData", "[ceammc::SharedData]") { - GlobalInt int1("id1"); + GlobalInt int1(gensym("id1")); // default constructor REQUIRE(int1.ref() == 0); int1.ref() = 200; // Same ID - GlobalInt int2("id1"); + GlobalInt int2(gensym("id1")); REQUIRE(int2.ref() == 200); // same pointer REQUIRE(&int1.ref() == &int2.ref()); diff --git a/ceammc/ext/tests/test_ui.h b/ceammc/ext/tests/test_ui.h index 059d33f35e..6f83ace15a 100644 --- a/ceammc/ext/tests/test_ui.h +++ b/ceammc/ext/tests/test_ui.h @@ -2,7 +2,6 @@ #define UI_EXTERNAL_TEST_H #include "ceammc_atomlist.h" -#include "ceammc_dsp_ui.h" #include "ceammc_format.h" #include "ceammc_pd.h" #include "ceammc_ui.h" @@ -28,20 +27,7 @@ using namespace ceammc; pd_init(); \ epd_init(); \ UI##T::setup(); \ - ExternalOutput::setup(); \ - ListenerExternal::setup(); \ - } - -#define UI_COMPLETE_DSP_TEST_SETUP(T) \ - using namespace ceammc; \ - typedef TestUIPtr > Test##T; \ - typedef TestUIExternal TestExt##T; \ - static CanvasPtr cnv = PureData::instance().createTopCanvas("test_canvas"); \ - static void ui_test_init() \ - { \ - pd_init(); \ - UI##T::setup(); \ - ExternalOutput::setup(); \ + LogExternalOutput::setup(); \ ListenerExternal::setup(); \ } @@ -129,7 +115,7 @@ template class TestUIExternal : public TestPdExternal { typedef std::map ListenerMap; - std::vector outs_; + std::vector outs_; ListenerMap listeners_; public: @@ -182,6 +168,16 @@ class TestUIExternal : public TestPdExternal { p.y = y; (*this)->onDblClick(0, p, mod); } + + void show() + { + ebox_wvis((*this)->asGObj(), (*this)->canvas(), 1); + } + + void hide() + { + ebox_wvis((*this)->asGObj(), (*this)->canvas(), 0); + } }; #define HAS_PROPERTY(t, name) REQUIRE(t->hasProperty(gensym(name))) diff --git a/ceammc/ext/tests/tests.cmake b/ceammc/ext/tests/tests.cmake index df96ffe8fb..a0bc6b7e62 100644 --- a/ceammc/ext/tests/tests.cmake +++ b/ceammc/ext/tests/tests.cmake @@ -101,13 +101,13 @@ if(${WITH_COVERAGE}) COMMAND mkdir -p ${CMAKE_BINARY_DIR}/coverage COMMAND ${GCOVR} --html --html-details --output "${CMAKE_BINARY_DIR}/coverage/index.html" - --exclude "ceammc/ext/src/tests/*" - --exclude "ceammc/ext/src/lib/utf8rewind*" - --exclude "firmata_bison*" + --exclude-directories "lib/utf8rewind" + --exclude-directories "lib/json" --sort-percentage - --use-gcov-files - -k - --root "${CMAKE_SOURCE_DIR}" +# --use-gcov-files +# --verbose + --object-directory "${CMAKE_BINARY_DIR}" + --root "${CMAKE_SOURCE_DIR}/ceammc/ext/src" COMMAND open ${CMAKE_BINARY_DIR}/coverage/index.html) endif() else() diff --git a/ceammc/extra/CMakeLists.txt b/ceammc/extra/CMakeLists.txt index d43e78043a..5298588297 100644 --- a/ceammc/extra/CMakeLists.txt +++ b/ceammc/extra/CMakeLists.txt @@ -5,7 +5,6 @@ add_subdirectory(autotune) add_subdirectory(comport) add_subdirectory(fftease) add_subdirectory(flext) -add_subdirectory(hcs) add_subdirectory(helmholtz) add_subdirectory(import) add_subdirectory(libdir) @@ -13,14 +12,18 @@ add_subdirectory(lyonpotpourri) add_subdirectory(midifile) add_subdirectory(serial) add_subdirectory(sf2) -add_subdirectory(speech) add_subdirectory(stk) add_subdirectory(subprocess) add_subdirectory(fmt) option(RE2_BUILD_TESTING "" OFF) +set(RE2_BUILD_TESTING OFF CACHE BOOL "" FORCE) add_subdirectory(re2) +option(HOA_BUILD_TESTS "" OFF) +set(HOA_BUILD_TESTS OFF CACHE BOOL "" FORCE) +add_subdirectory(HoaLibrary-Light) + if(UNIX) set_target_properties(re2 PROPERTIES COMPILE_FLAGS "-fPIC") endif() @@ -37,7 +40,9 @@ if(WITH_FLUIDSYNTH) add_subdirectory(fluidsynth) endif() +if(WITH_TTS_FLITE) + add_subdirectory(speech) +endif() set(EXTRA_COMPLETION "extra_objects.txt") add_custom_target(_ceammc_extra_misc SOURCES ${EXTRA_COMPLETION}) -install(FILES ${EXTRA_COMPLETION} DESTINATION ${PD_GUI_PLUGINS_PATH}/ceammc) diff --git a/ceammc/extra/HoaLibrary-Light b/ceammc/extra/HoaLibrary-Light new file mode 160000 index 0000000000..a4c3c484bf --- /dev/null +++ b/ceammc/extra/HoaLibrary-Light @@ -0,0 +1 @@ +Subproject commit a4c3c484bf2162a3768ee1869cd13962ca78e194 diff --git a/ceammc/extra/flext/flext b/ceammc/extra/flext/flext index fa8bde0268..4280d93e94 160000 --- a/ceammc/extra/flext/flext +++ b/ceammc/extra/flext/flext @@ -1 +1 @@ -Subproject commit fa8bde0268a5cb3292feba693fe0c394e0770308 +Subproject commit 4280d93e941903647752d97b7904c12163604a2f diff --git a/ceammc/extra/fluidsynth/CMakeLists.txt b/ceammc/extra/fluidsynth/CMakeLists.txt index 000efbe46c..10c0b7d23d 100644 --- a/ceammc/extra/fluidsynth/CMakeLists.txt +++ b/ceammc/extra/fluidsynth/CMakeLists.txt @@ -71,6 +71,7 @@ set(config_SOURCES ${CMAKE_CURRENT_BINARY_DIR}/config.h) set(libfluidsynth_SOURCES fluidsynth/src/utils/fluid_conv.c fluidsynth/src/utils/fluid_conv.h + fluidsynth/src/utils/fluid_conv_tables.h fluidsynth/src/utils/fluid_hash.c fluidsynth/src/utils/fluid_hash.h fluidsynth/src/utils/fluid_list.c @@ -79,13 +80,11 @@ set(libfluidsynth_SOURCES fluidsynth/src/utils/fluid_ringbuffer.h fluidsynth/src/utils/fluid_settings.c fluidsynth/src/utils/fluid_settings.h - fluidsynth/src/utils/fluidsynth_priv.h fluidsynth/src/utils/fluid_sys.c fluidsynth/src/utils/fluid_sys.h + fluidsynth/src/utils/fluidsynth_priv.h fluidsynth/src/sfloader/fluid_defsfont.c fluidsynth/src/sfloader/fluid_defsfont.h - fluidsynth/src/sfloader/fluid_ramsfont.c - fluidsynth/src/sfloader/fluid_ramsfont.h fluidsynth/src/sfloader/fluid_sfont.h fluidsynth/src/sfloader/fluid_sfont.c fluidsynth/src/sfloader/fluid_sffile.c @@ -113,7 +112,6 @@ set(libfluidsynth_SOURCES fluidsynth/src/synth/fluid_chan.c fluidsynth/src/synth/fluid_chan.h fluidsynth/src/synth/fluid_event.c - fluidsynth/src/synth/fluid_event_priv.h fluidsynth/src/synth/fluid_gen.c fluidsynth/src/synth/fluid_gen.h fluidsynth/src/synth/fluid_mod.c @@ -155,7 +153,6 @@ set(public_HEADERS fluidsynth/include/fluidsynth/midi.h fluidsynth/include/fluidsynth/misc.h fluidsynth/include/fluidsynth/mod.h - fluidsynth/include/fluidsynth/ramsfont.h fluidsynth/include/fluidsynth/seq.h fluidsynth/include/fluidsynth/seqbind.h fluidsynth/include/fluidsynth/settings.h @@ -191,12 +188,31 @@ if(LIBFLUID_CPPFLAGS) set_target_properties (fluidsynth PROPERTIES COMPILE_FLAGS ${LIBFLUID_CPPFLAGS}) endif() +if(APPLE) + target_link_directories(fluidsynth PUBLIC ${GLIB_LIBRARY_DIRS}) +endif() + target_link_libraries(fluidsynth ${GLIB_LIBRARIES} ${WINDOWS_LIBS} ${LIBFLUID_LIBS} ) +add_executable(fluidsynth_make_table + fluidsynth/src/gentables/gen_conv.c + fluidsynth/src/gentables/gen_rvoice_dsp.c + fluidsynth/src/gentables/make_tables.c + fluidsynth/src/gentables/make_tables.h) +target_link_libraries(fluidsynth_make_table m) + +add_custom_command(OUTPUT fluid_conv_tables.c + DEPENDS fluidsynth_make_table + COMMAND ${CMAKE_CURRENT_BINARY_DIR}/fluidsynth_make_table "${CMAKE_CURRENT_BINARY_DIR}/" + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) + +add_custom_target(fluid_gen_tables DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/fluid_conv_tables.c") +add_dependencies(fluidsynth fluid_gen_tables) + if(UNIX) set_target_properties(fluidsynth PROPERTIES COMPILE_FLAGS "-fPIC") endif() diff --git a/ceammc/extra/fluidsynth/fluidsynth b/ceammc/extra/fluidsynth/fluidsynth index a95a4864fd..9ab3e3ab51 160000 --- a/ceammc/extra/fluidsynth/fluidsynth +++ b/ceammc/extra/fluidsynth/fluidsynth @@ -1 +1 @@ -Subproject commit a95a4864fd55ba0733c1152457419353b586fd51 +Subproject commit 9ab3e3ab5195d1abbcffbde4f9c26eac49cbcaa5 diff --git a/ceammc/extra/fmt b/ceammc/extra/fmt index 6e37c20030..b55ea58705 160000 --- a/ceammc/extra/fmt +++ b/ceammc/extra/fmt @@ -1 +1 @@ -Subproject commit 6e37c20030f78b7ada1e6e580d9df839fb88168c +Subproject commit b55ea587053a01e242c8a83d84fa81e0acf7d973 diff --git a/ceammc/extra/hcs/CMakeLists.txt b/ceammc/extra/hcs/CMakeLists.txt deleted file mode 100644 index c44c6f7f8c..0000000000 --- a/ceammc/extra/hcs/CMakeLists.txt +++ /dev/null @@ -1,14 +0,0 @@ -include(PdExternal) -include(../../ext/src/ceammc_pd.cmake) -# for m_pd.h and others -include_directories(${PROJECT_SOURCE_DIR}/src) - -ceammc_c_extension(system colorpanel) -ceammc_c_extension(system cursor) - -file(GLOB _hcs_tcl_files "*.tcl") -file(GLOB _hcs_help_files "*.pd") -add_custom_target(hcs_misc_files SOURCES ${_hcs_tcl_files} ${_hcs_help_files}) - -install(FILES ${_hcs_tcl_files} ${_hcs_help_files} - DESTINATION ${PD_INTERNAL_EXT_INSTALL_PATH}/ceammc) diff --git a/ceammc/extra/hcs/LICENSE.txt b/ceammc/extra/hcs/LICENSE.txt deleted file mode 100644 index 94a9ed024d..0000000000 --- a/ceammc/extra/hcs/LICENSE.txt +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - 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 3 of the License, or - (at your option) 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. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/ceammc/extra/hcs/system.colorpanel-help.pd b/ceammc/extra/hcs/system.colorpanel-help.pd deleted file mode 100644 index 53dbf5253c..0000000000 --- a/ceammc/extra/hcs/system.colorpanel-help.pd +++ /dev/null @@ -1,25 +0,0 @@ -#N canvas 274 159 494 344 10; -#X msg 99 56 bang; -#X obj 112 198 ui.display; -#X obj 98 226 unpack float float float; -#X obj 30 278 nbx 8 20 -1e+37 1e+37 0 0 empty empty red 0 28 0 14 -261234 --1 -1 0 256; -#X obj 150 278 nbx 8 20 -1e+37 1e+37 0 0 empty empty green 0 28 0 14 --204786 -1 -1 0 256; -#X obj 270 278 nbx 8 20 -1e+37 1e+37 0 0 empty empty blue 0 28 0 14 --203904 -1 -1 0 256; -#X text 35 16 pop up a color picker and output the red \, green \, -blue values as a list of three floats ranging from 0 to 1; -#X text 129 177 the list:; -#X text 202 78 or open the window with an initial color; -#X msg 108 78 symbol #beefee; -#X msg 160 107 0.5 0.5 0.5; -#X obj 99 139 system.colorpanel; -#X connect 0 0 11 0; -#X connect 2 0 3 0; -#X connect 2 1 4 0; -#X connect 2 2 5 0; -#X connect 9 0 11 0; -#X connect 10 0 11 0; -#X connect 11 0 1 0; -#X connect 11 0 2 0; diff --git a/ceammc/extra/hcs/system.colorpanel.tcl b/ceammc/extra/hcs/system.colorpanel.tcl deleted file mode 100644 index 23bc9e52dd..0000000000 --- a/ceammc/extra/hcs/system.colorpanel.tcl +++ /dev/null @@ -1,8 +0,0 @@ - -namespace eval ::hcs::colorpanel:: { -} - -proc ::hcs::colorpanel::open {objectid initialcolor} { - set color [tk_chooseColor -initialcolor $initialcolor] - pdsend "$objectid callback $color" -} diff --git a/ceammc/extra/hcs/system.cursor.tcl b/ceammc/extra/hcs/system.cursor.tcl deleted file mode 100644 index 9c0a0d5569..0000000000 --- a/ceammc/extra/hcs/system.cursor.tcl +++ /dev/null @@ -1,73 +0,0 @@ - -namespace eval ::hcs::cursor:: { - variable continue_pollmotion 0 - variable last_x 0 - variable last_y 0 - variable receive_symbol -} - -# idea from #tcl for a Tcl unbind -proc ::hcs::cursor::unbind {tag event script} { - set bind {} - foreach x [split [bind $tag $event] \"\n\"] { - if {$x != $script} { - lappend bind $x - } - } - bind $tag $event {} - foreach x $bind {bind $tag $event $x} -} - -proc ::hcs::cursor::button {button state} { - variable receive_symbol - pdsend "$receive_symbol button $button $state" -} - -proc ::hcs::cursor::mousewheel {delta} { - variable receive_symbol - pdsend "$receive_symbol mousewheel $delta" -} - -proc ::hcs::cursor::motion {x y} { - variable last_x - variable last_y - variable receive_symbol - if { $x != $last_x || $y != $last_y} { - pdsend "$receive_symbol motion $x $y" - set last_x $x - set last_y $y - } -} - -proc ::hcs::cursor::pollmotion {} { - variable continue_pollmotion - motion [winfo pointerx .] [winfo pointery .] - if {$continue_pollmotion != 0} { - after 10 ::hcs::cursor::pollmotion - } -} - -proc ::hcs::cursor::startpolling {} { - variable continue_pollmotion 1 - pollmotion - bind all {+::hcs::cursor::button %b 1} - bind all {+::hcs::cursor::button %b 0} - bind all {+::hcs::cursor::mousewheel %D} -} - -proc ::hcs::cursor::stoppolling {} { - variable continue_pollmotion 0 - unbind all {::hcs::cursor::button %b 1} - unbind all {::hcs::cursor::button %b 0} - unbind all {::hcs::cursor::mousewheel %D} -} - -# in Pd 0.43, the internal proc changed from 'pd' to 'pdsend' -proc ::hcs::cursor::setup {symbol} { - variable receive_symbol $symbol - # check if we are Pd < 0.43, which has no 'pdsend', but a 'pd' coded in C - if {[llength [info procs "::pdsend"]] == 0} { - pdtk_post "creating 0.43+ 'pdsend' using legacy 'pd' proc" - proc ::pdsend {args} {pd "[join $args { }] ;"} - } -} diff --git a/ceammc/extra/hcs/system_colorpanel.c b/ceammc/extra/hcs/system_colorpanel.c deleted file mode 100644 index 91daa6c8e6..0000000000 --- a/ceammc/extra/hcs/system_colorpanel.c +++ /dev/null @@ -1,107 +0,0 @@ -#include -#include -#include -#include -#include "m_imp.h" - -#define DEBUG(x) - -static t_class *colorpanel_class; - -typedef struct _colorpanel -{ - t_object x_obj; - t_symbol *x_s; - char current_color[MAXPDSTRING]; -} t_colorpanel; - -static void colorpanel_bang(t_colorpanel *x) -{ - sys_vgui("after idle [list after 100 ::hcs::colorpanel::open %s %s]\n", - x->x_s->s_name, x->current_color); -} - -static void colorpanel_symbol(t_colorpanel *x, t_symbol *s) -{ - strncpy(x->current_color, s->s_name, MAXPDSTRING); - colorpanel_bang(x); -} - -static void colorpanel_list(t_colorpanel *x, t_symbol *s, int argc, t_atom *argv) -{ - t_symbol *tmp_symbol = s; /* <-- this gets rid of the unused variable warning */ - int i; - unsigned int tmp_int; - char color_buffer[3]; - char color_string[MAXPDSTRING]; - - strncpy(color_string,"#",MAXPDSTRING); - if(argc > 3) - logpost(x, 2, "[colorpanel] warning more than three elements in list"); - for(i=0; i<3; i++) - { - tmp_symbol = atom_getsymbolarg(i, argc, argv); - if(tmp_symbol == &s_) - { - tmp_int = (unsigned int)(atom_getfloatarg(i, argc , argv) * 255); - snprintf(color_buffer, 3, "%02x", (tmp_int > 255 ? 255 : tmp_int)); - strncat(color_string, color_buffer, 3); - } - else - { - pd_error(x,"[colorpanel] symbols are not allowed in the color list"); - return; - } - } - memcpy(x->current_color, color_string, 7); - colorpanel_bang(x); -} - -static void colorpanel_callback(t_colorpanel *x, t_symbol *color) -{ - t_atom output_atoms[3]; - unsigned int red, green, blue; - - if(color != &s_) - { - strncpy(x->current_color, color->s_name, MAXPDSTRING); - sscanf(x->current_color, "#%02x%02x%02x", &red, &green, &blue); - SETFLOAT(output_atoms, (t_float) red / 255); - SETFLOAT(output_atoms + 1, (t_float) green / 255); - SETFLOAT(output_atoms + 2, (t_float) blue / 255); - outlet_list(x->x_obj.ob_outlet, &s_list, 3, output_atoms); - } -} - -static void colorpanel_free(t_colorpanel *x) -{ - pd_unbind(&x->x_obj.ob_pd, x->x_s); -} - -static void *colorpanel_new( void) -{ - char buf[MAXPDSTRING]; - t_colorpanel *x = (t_colorpanel *)pd_new(colorpanel_class); - sprintf(buf, "#%lx", (t_int)x); - x->x_s = gensym(buf); - pd_bind(&x->x_obj.ob_pd, x->x_s); - outlet_new(&x->x_obj, &s_list); - strcpy(x->current_color,"#ffffff"); - return(x); -} - -void setup_system0x2ecolorpanel(void) -{ - colorpanel_class = class_new(gensym("system.colorpanel"), - (t_newmethod)colorpanel_new, (t_method)colorpanel_free, - sizeof(t_colorpanel), CLASS_PATCHABLE, A_GIMME, 0); - class_addbang(colorpanel_class, (t_method)colorpanel_bang); - class_addsymbol(colorpanel_class, (t_method)colorpanel_symbol); - class_addlist(colorpanel_class, (t_method)colorpanel_list); - class_addmethod(colorpanel_class, (t_method)colorpanel_callback, - gensym("callback"), A_DEFSYMBOL, 0); - - sys_vgui("eval [read [open {%s/%s.tcl}]]\n", - colorpanel_class->c_externdir->s_name, - colorpanel_class->c_name->s_name); -} diff --git a/ceammc/extra/hcs/system_cursor.c b/ceammc/extra/hcs/system_cursor.c deleted file mode 100644 index 2f26ea93c4..0000000000 --- a/ceammc/extra/hcs/system_cursor.c +++ /dev/null @@ -1,136 +0,0 @@ -/* TODO add reset method for cursor icons, this should probably be done in -pd.tk, or cursor reset method could be done in help patch */ - -#include - -#include "g_canvas.h" -#include "m_imp.h" - -#include -#include -#include - -#define POLLTIME 10 - -static t_symbol* button_symbol; -static t_symbol* mousewheel_symbol; -static t_symbol* motion_symbol; -static t_symbol* cursor_receive_symbol; - -t_int cursor_instances_polling; - -static t_class* cursor_class; - -typedef struct _cursor { - t_object x_obj; - t_int am_polling; - t_symbol* receive_symbol; - t_canvas* parent_canvas; - t_outlet* data_outlet; -} t_cursor; - -static void cursor_bang(t_cursor* x) -{ - sys_vgui("pdsend \"%s motion [winfo pointerxy .]\"", - x->receive_symbol->s_name); -} - -static void cursor_float(t_cursor* x, t_float f) -{ - /* "bind all only gives data when over windows, so its commented - * out. See the cursor_bang function to see the pointer x,y data getting */ - if (f == 0) { - if (x->am_polling) { - x->am_polling = 0; - cursor_instances_polling--; - /* if no more objects are listening, stop sending the events */ - if (cursor_instances_polling == 0) - sys_gui("::hcs::cursor::stoppolling \n"); - pd_unbind(&x->x_obj.ob_pd, cursor_receive_symbol); - } - } else { - if (!x->am_polling) { - x->am_polling = 1; - pd_bind(&x->x_obj.ob_pd, cursor_receive_symbol); - cursor_instances_polling++; - /* if this is the first instance to start, set up Tcl binding and polling */ - if (cursor_instances_polling == 1) - sys_gui("::hcs::cursor::startpolling\n"); - } - } -} - -static void cursor_button_callback(t_cursor* x, t_float button, t_float state) -{ - t_atom output_atoms[2]; - - SETFLOAT(output_atoms, button); - SETFLOAT(output_atoms + 1, state); - outlet_anything(x->data_outlet, button_symbol, 2, output_atoms); -} - -static void cursor_motion_callback(t_cursor* x, t_float x_position, t_float y_position) -{ - t_atom output_atoms[2]; - - SETFLOAT(&output_atoms[0], x_position); - SETFLOAT(&output_atoms[1], y_position); - outlet_anything(x->data_outlet, motion_symbol, 2, output_atoms); -} - -static void cursor_mousewheel_callback(t_cursor* x, t_float f) -{ - t_atom output_atom; - - SETFLOAT(&output_atom, f); - outlet_anything(x->data_outlet, mousewheel_symbol, 1, &output_atom); -} - -static void cursor_free(t_cursor* x) -{ - cursor_float(x, 0); - pd_unbind(&x->x_obj.ob_pd, x->receive_symbol); -} - -static void* cursor_new(void) -{ - char buf[MAXPDSTRING]; - t_cursor* x = (t_cursor*)pd_new(cursor_class); - - x->parent_canvas = canvas_getcurrent(); - - sprintf(buf, "#%lx", (t_int)x); - x->receive_symbol = gensym(buf); - pd_bind(&x->x_obj.ob_pd, x->receive_symbol); - x->data_outlet = outlet_new(&x->x_obj, 0); - x->am_polling = 0; - - return (x); -} - -void setup_system0x2ecursor(void) -{ - cursor_class = class_new(gensym("system.cursor"), - (t_newmethod)cursor_new, (t_method)cursor_free, - sizeof(t_cursor), CLASS_PATCHABLE, A_GIMME, 0); - - class_addbang(cursor_class, (t_method)cursor_bang); - class_addfloat(cursor_class, (t_method)cursor_float); - - button_symbol = gensym("button"); - mousewheel_symbol = gensym("mousewheel"); - motion_symbol = gensym("motion"); - cursor_receive_symbol = gensym("#hcs_cursor_class_receive"); - - class_addmethod(cursor_class, (t_method)cursor_button_callback, - button_symbol, A_DEFFLOAT, A_DEFFLOAT, 0); - class_addmethod(cursor_class, (t_method)cursor_motion_callback, - motion_symbol, A_DEFFLOAT, A_DEFFLOAT, 0); - class_addmethod(cursor_class, (t_method)cursor_mousewheel_callback, - mousewheel_symbol, A_DEFFLOAT, 0); - - sys_vgui("eval [read [open {%s/%s.tcl}]]\n", - cursor_class->c_externdir->s_name, - cursor_class->c_name->s_name); - sys_vgui("::hcs::cursor::setup %s\n", cursor_receive_symbol->s_name); -} diff --git a/ceammc/extra/re2 b/ceammc/extra/re2 index 71d549bc4d..e17af7789e 160000 --- a/ceammc/extra/re2 +++ b/ceammc/extra/re2 @@ -1 +1 @@ -Subproject commit 71d549bc4da0a8ac72d37649aa8fdc41e28dbfca +Subproject commit e17af7789e126ddbe0209ab94634d81aff402f0b diff --git a/ceammc/extra/readerwriterqueue b/ceammc/extra/readerwriterqueue index 2ae710de99..265ec3ca37 160000 --- a/ceammc/extra/readerwriterqueue +++ b/ceammc/extra/readerwriterqueue @@ -1 +1 @@ -Subproject commit 2ae710de996a1d02bbc7696b2cdff2c6078e76f8 +Subproject commit 265ec3ca37fd530f4d042bc8a23c03382b0f954c diff --git a/ceammc/extra/speech/flite b/ceammc/extra/speech/flite index f6be7bf1b6..7093633d3a 160000 --- a/ceammc/extra/speech/flite +++ b/ceammc/extra/speech/flite @@ -1 +1 @@ -Subproject commit f6be7bf1b6e3a2cd370bc6665241c2b916bfb054 +Subproject commit 7093633d3a4c099ecacb1ef86e1aca07f78d31fd diff --git a/ceammc/extra/stk/CMakeLists.txt b/ceammc/extra/stk/CMakeLists.txt index 389b4b9706..d13ca48d21 100644 --- a/ceammc/extra/stk/CMakeLists.txt +++ b/ceammc/extra/stk/CMakeLists.txt @@ -54,6 +54,7 @@ set(STK_SOURCES stk/src/Plucked.cpp stk/src/PoleZero.cpp stk/src/PRCRev.cpp + stk/src/Recorder.cpp stk/src/Resonate.cpp stk/src/Rhodey.cpp stk/src/Sampler.cpp diff --git a/ceammc/extra/stk/stk b/ceammc/extra/stk/stk index 8de7543266..f489451660 160000 --- a/ceammc/extra/stk/stk +++ b/ceammc/extra/stk/stk @@ -1 +1 @@ -Subproject commit 8de7543266131a030411d52fa39d1da0b717a59a +Subproject commit f489451660931b0371744b991fc3e39e5bda89cc diff --git a/ceammc/extra/subprocess/tiny-process-library b/ceammc/extra/subprocess/tiny-process-library index 273270d0f9..a6773276ef 160000 --- a/ceammc/extra/subprocess/tiny-process-library +++ b/ceammc/extra/subprocess/tiny-process-library @@ -1 +1 @@ -Subproject commit 273270d0f9d0cf4a8282fadd589060a7b0eab425 +Subproject commit a6773276efdbc322f1abb0159301f5502647eb52 diff --git a/ceammc/faust/dyn_comp.dsp.json b/ceammc/faust/dyn_comp.dsp.json index 49f9c5a4fd..2d22e92643 100644 --- a/ceammc/faust/dyn_comp.dsp.json +++ b/ceammc/faust/dyn_comp.dsp.json @@ -1,22 +1,22 @@ { "name": "dyn.comp", - "filename": "dyn_comp", - "version": "2.15.10", - "compile_options": "cpp, -scal -ftz 0", + "filename": "dyn_comp.dsp", + "version": "2.22.1", + "compile_options": "-lang cpp -scal -ftz 0", "library_list": ["/Users/serj/work/music/pure-data/ceammc/faust/ceammc.lib","/usr/local/share/faust/compressors.lib","/usr/local/share/faust/analyzers.lib","/usr/local/share/faust/signals.lib","/usr/local/share/faust/basics.lib","/usr/local/share/faust/maths.lib"], "include_pathnames": ["/usr/local/share/faust","/usr/local/share/faust","/usr/share/faust","/Users/serj/work/music/pure-data/ceammc/faust","/Users/serj/work/music/pure-data/ceammc/faust"], - "inputs": "1", - "outputs": "1", + "inputs": 1, + "outputs": 1, "meta": [ { "analyzers.lib/name": "Faust Analyzer Library" }, { "analyzers.lib/version": "0.0" }, { "basics.lib/name": "Faust Basic Element Library" }, - { "basics.lib/version": "0.0" }, + { "basics.lib/version": "0.1" }, { "ceammc.lib/name": "Ceammc PureData misc utils" }, { "ceammc.lib/version": "0.1.1" }, { "compressors.lib/name": "Faust Compressor Effect Library" }, { "compressors.lib/version": "0.0" }, - { "filename": "dyn_comp" }, + { "filename": "dyn_comp.dsp" }, { "maths.lib/author": "GRAME" }, { "maths.lib/copyright": "GRAME" }, { "maths.lib/license": "LGPL with exception" }, @@ -38,19 +38,19 @@ "meta": [ { "unit": "ms" } ], - "init": "10", - "min": "1", - "max": "100", - "step": "0.1" + "init": 10, + "min": 1, + "max": 100, + "step": 0.1 }, { "type": "vslider", "label": "ratio", "address": "/dyn.comp/ratio", - "init": "1", - "min": "1", - "max": "10", - "step": "0.001" + "init": 1, + "min": 1, + "max": 10, + "step": 0.001 }, { "type": "vslider", @@ -59,10 +59,10 @@ "meta": [ { "unit": "ms" } ], - "init": "50", - "min": "1", - "max": "500", - "step": "0.1" + "init": 50, + "min": 1, + "max": 500, + "step": 0.1 }, { "type": "vslider", @@ -71,10 +71,10 @@ "meta": [ { "unit": "db" } ], - "init": "100", - "min": "0", - "max": "100", - "step": "0.1" + "init": 100, + "min": 0, + "max": 100, + "step": 0.1 } ] } diff --git a/ceammc/faust/dyn_comp2.dsp.json b/ceammc/faust/dyn_comp2.dsp.json index b391c4cac9..2a10c61ed6 100644 --- a/ceammc/faust/dyn_comp2.dsp.json +++ b/ceammc/faust/dyn_comp2.dsp.json @@ -1,22 +1,22 @@ { "name": "dyn.comp2", - "filename": "dyn_comp2", - "version": "2.15.10", - "compile_options": "cpp, -scal -ftz 0", + "filename": "dyn_comp2.dsp", + "version": "2.22.1", + "compile_options": "-lang cpp -scal -ftz 0", "library_list": ["/Users/serj/work/music/pure-data/ceammc/faust/ceammc.lib","/usr/local/share/faust/compressors.lib","/usr/local/share/faust/analyzers.lib","/usr/local/share/faust/signals.lib","/usr/local/share/faust/basics.lib","/usr/local/share/faust/maths.lib"], "include_pathnames": ["/usr/local/share/faust","/usr/local/share/faust","/usr/share/faust","/Users/serj/work/music/pure-data/ceammc/faust","/Users/serj/work/music/pure-data/ceammc/faust"], - "inputs": "2", - "outputs": "2", + "inputs": 2, + "outputs": 2, "meta": [ { "analyzers.lib/name": "Faust Analyzer Library" }, { "analyzers.lib/version": "0.0" }, { "basics.lib/name": "Faust Basic Element Library" }, - { "basics.lib/version": "0.0" }, + { "basics.lib/version": "0.1" }, { "ceammc.lib/name": "Ceammc PureData misc utils" }, { "ceammc.lib/version": "0.1.1" }, { "compressors.lib/name": "Faust Compressor Effect Library" }, { "compressors.lib/version": "0.0" }, - { "filename": "dyn_comp2" }, + { "filename": "dyn_comp2.dsp" }, { "maths.lib/author": "GRAME" }, { "maths.lib/copyright": "GRAME" }, { "maths.lib/license": "LGPL with exception" }, @@ -38,19 +38,19 @@ "meta": [ { "unit": "ms" } ], - "init": "10", - "min": "1", - "max": "100", - "step": "0.1" + "init": 10, + "min": 1, + "max": 100, + "step": 0.1 }, { "type": "vslider", "label": "ratio", "address": "/dyn.comp2/ratio", - "init": "1", - "min": "1", - "max": "10", - "step": "0.001" + "init": 1, + "min": 1, + "max": 10, + "step": 0.001 }, { "type": "vslider", @@ -59,10 +59,10 @@ "meta": [ { "unit": "ms" } ], - "init": "50", - "min": "1", - "max": "500", - "step": "0.1" + "init": 50, + "min": 1, + "max": 500, + "step": 0.1 }, { "type": "vslider", @@ -71,10 +71,10 @@ "meta": [ { "unit": "db" } ], - "init": "100", - "min": "0", - "max": "100", - "step": "0.1" + "init": 100, + "min": 0, + "max": 100, + "step": 0.1 } ] } diff --git a/ceammc/faust/dyn_gate.dsp.json b/ceammc/faust/dyn_gate.dsp.json index b5a57cd779..9fafb76622 100644 --- a/ceammc/faust/dyn_gate.dsp.json +++ b/ceammc/faust/dyn_gate.dsp.json @@ -1,20 +1,20 @@ { "name": "dyn.gate", - "filename": "dyn_gate", - "version": "2.15.10", - "compile_options": "cpp, -scal -ftz 0", + "filename": "dyn_gate.dsp", + "version": "2.22.1", + "compile_options": "-lang cpp -scal -ftz 0", "library_list": ["/Users/serj/work/music/pure-data/ceammc/faust/ceammc.lib","/usr/local/share/faust/misceffects.lib","/usr/local/share/faust/signals.lib","/usr/local/share/faust/analyzers.lib","/usr/local/share/faust/basics.lib","/usr/local/share/faust/maths.lib"], "include_pathnames": ["/usr/local/share/faust","/usr/local/share/faust","/usr/share/faust","/Users/serj/work/music/pure-data/ceammc/faust","/Users/serj/work/music/pure-data/ceammc/faust"], - "inputs": "1", - "outputs": "1", + "inputs": 1, + "outputs": 1, "meta": [ { "analyzers.lib/name": "Faust Analyzer Library" }, { "analyzers.lib/version": "0.0" }, { "basics.lib/name": "Faust Basic Element Library" }, - { "basics.lib/version": "0.0" }, + { "basics.lib/version": "0.1" }, { "ceammc.lib/name": "Ceammc PureData misc utils" }, { "ceammc.lib/version": "0.1.1" }, - { "filename": "dyn_gate" }, + { "filename": "dyn_gate.dsp" }, { "maths.lib/author": "GRAME" }, { "maths.lib/copyright": "GRAME" }, { "maths.lib/license": "LGPL with exception" }, @@ -38,10 +38,10 @@ "meta": [ { "unit": "ms" } ], - "init": "0.1", - "min": "0", - "max": "500", - "step": "0.1" + "init": 0.1, + "min": 0, + "max": 500, + "step": 0.1 }, { "type": "vslider", @@ -50,10 +50,10 @@ "meta": [ { "unit": "ms" } ], - "init": "100", - "min": "1", - "max": "500", - "step": "0.1" + "init": 100, + "min": 1, + "max": 500, + "step": 0.1 }, { "type": "vslider", @@ -62,10 +62,10 @@ "meta": [ { "unit": "ms" } ], - "init": "20", - "min": "1", - "max": "500", - "step": "0.1" + "init": 20, + "min": 1, + "max": 500, + "step": 0.1 }, { "type": "vslider", @@ -74,10 +74,10 @@ "meta": [ { "unit": "db" } ], - "init": "40", - "min": "0", - "max": "100", - "step": "0.1" + "init": 40, + "min": 0, + "max": 100, + "step": 0.1 } ] } diff --git a/ceammc/faust/dyn_gate2.dsp.json b/ceammc/faust/dyn_gate2.dsp.json index bf14cfea8f..cab2ba6121 100644 --- a/ceammc/faust/dyn_gate2.dsp.json +++ b/ceammc/faust/dyn_gate2.dsp.json @@ -1,20 +1,20 @@ { "name": "dyn.gate2", - "filename": "dyn_gate2", - "version": "2.15.10", - "compile_options": "cpp, -scal -ftz 0", + "filename": "dyn_gate2.dsp", + "version": "2.22.1", + "compile_options": "-lang cpp -scal -ftz 0", "library_list": ["/Users/serj/work/music/pure-data/ceammc/faust/ceammc.lib","/usr/local/share/faust/misceffects.lib","/usr/local/share/faust/signals.lib","/usr/local/share/faust/analyzers.lib","/usr/local/share/faust/basics.lib","/usr/local/share/faust/maths.lib"], "include_pathnames": ["/usr/local/share/faust","/usr/local/share/faust","/usr/share/faust","/Users/serj/work/music/pure-data/ceammc/faust","/Users/serj/work/music/pure-data/ceammc/faust"], - "inputs": "2", - "outputs": "2", + "inputs": 2, + "outputs": 2, "meta": [ { "analyzers.lib/name": "Faust Analyzer Library" }, { "analyzers.lib/version": "0.0" }, { "basics.lib/name": "Faust Basic Element Library" }, - { "basics.lib/version": "0.0" }, + { "basics.lib/version": "0.1" }, { "ceammc.lib/name": "Ceammc PureData misc utils" }, { "ceammc.lib/version": "0.1.1" }, - { "filename": "dyn_gate2" }, + { "filename": "dyn_gate2.dsp" }, { "maths.lib/author": "GRAME" }, { "maths.lib/copyright": "GRAME" }, { "maths.lib/license": "LGPL with exception" }, @@ -38,10 +38,10 @@ "meta": [ { "unit": "ms" } ], - "init": "0.1", - "min": "0", - "max": "500", - "step": "0.1" + "init": 0.1, + "min": 0, + "max": 500, + "step": 0.1 }, { "type": "vslider", @@ -50,10 +50,10 @@ "meta": [ { "unit": "ms" } ], - "init": "100", - "min": "1", - "max": "500", - "step": "0.1" + "init": 100, + "min": 1, + "max": 500, + "step": 0.1 }, { "type": "vslider", @@ -62,10 +62,10 @@ "meta": [ { "unit": "ms" } ], - "init": "20", - "min": "1", - "max": "500", - "step": "0.1" + "init": 20, + "min": 1, + "max": 500, + "step": 0.1 }, { "type": "vslider", @@ -74,10 +74,10 @@ "meta": [ { "unit": "db" } ], - "init": "40", - "min": "0", - "max": "100", - "step": "0.1" + "init": 40, + "min": 0, + "max": 100, + "step": 0.1 } ] } diff --git a/ceammc/faust/flt_bpf12.dsp.json b/ceammc/faust/flt_bpf12.dsp.json index 6257c6da21..d146bae1e2 100644 --- a/ceammc/faust/flt_bpf12.dsp.json +++ b/ceammc/faust/flt_bpf12.dsp.json @@ -1,18 +1,36 @@ { "name": "flt.bpf12", - "filename": "flt_bpf12", - "version": "2.15.10", - "compile_options": "cpp, -scal -ftz 0", + "filename": "flt_bpf12.dsp", + "version": "2.22.1", + "compile_options": "-lang cpp -scal -ftz 0", "library_list": ["/usr/local/share/faust/filters.lib","/usr/local/share/faust/maths.lib","/Users/serj/work/music/pure-data/ceammc/faust/ceammc_ui.lib","/usr/local/share/faust/signals.lib"], "include_pathnames": ["/usr/local/share/faust","/usr/local/share/faust","/usr/share/faust","/Users/serj/work/music/pure-data/ceammc/faust","/Users/serj/work/music/pure-data/ceammc/faust"], - "inputs": "1", - "outputs": "1", + "inputs": 1, + "outputs": 1, "meta": [ { "ceammc_ui.lib/name": "CEAMMC faust default UI elements" }, { "ceammc_ui.lib/version": "0.1.1" }, - { "filename": "flt_bpf12" }, + { "filename": "flt_bpf12.dsp" }, + { "filters.lib/bandpass0_bandstop1:author": "Julius O. Smith III" }, + { "filters.lib/bandpass0_bandstop1:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/bandpass0_bandstop1:license": "MIT-style STK-4.3 license" }, + { "filters.lib/bandpass:author": "Julius O. Smith III" }, + { "filters.lib/bandpass:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/bandpass:license": "MIT-style STK-4.3 license" }, + { "filters.lib/fir:author": "Julius O. Smith III" }, + { "filters.lib/fir:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/fir:license": "MIT-style STK-4.3 license" }, + { "filters.lib/iir:author": "Julius O. Smith III" }, + { "filters.lib/iir:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/iir:license": "MIT-style STK-4.3 license" }, + { "filters.lib/lowpass0_highpass1": "Copyright (C) 2003-2019 by Julius O. Smith III " }, { "filters.lib/name": "Faust Filters Library" }, - { "filters.lib/version": "0.0" }, + { "filters.lib/tf1sb:author": "Julius O. Smith III" }, + { "filters.lib/tf1sb:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/tf1sb:license": "MIT-style STK-4.3 license" }, + { "filters.lib/tf2:author": "Julius O. Smith III" }, + { "filters.lib/tf2:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/tf2:license": "MIT-style STK-4.3 license" }, { "maths.lib/author": "GRAME" }, { "maths.lib/copyright": "GRAME" }, { "maths.lib/license": "LGPL with exception" }, @@ -34,19 +52,19 @@ "meta": [ { "unit": "Hz" } ], - "init": "1000", - "min": "20", - "max": "20000", - "step": "0.1" + "init": 1000, + "min": 20, + "max": 20000, + "step": 0.1 }, { "type": "vslider", "label": "q", "address": "/flt.bpf12/q", - "init": "2", - "min": "0.01", - "max": "100", - "step": "0.1" + "init": 2, + "min": 0.01, + "max": 100, + "step": 0.1 } ] } diff --git a/ceammc/faust/flt_bpf24.dsp.json b/ceammc/faust/flt_bpf24.dsp.json index 9fd1282080..3f9b645046 100644 --- a/ceammc/faust/flt_bpf24.dsp.json +++ b/ceammc/faust/flt_bpf24.dsp.json @@ -1,18 +1,33 @@ { "name": "flt.bpf24", - "filename": "flt_bpf24", - "version": "2.15.10", - "compile_options": "cpp, -scal -ftz 0", + "filename": "flt_bpf24.dsp", + "version": "2.22.1", + "compile_options": "-lang cpp -scal -ftz 0", "library_list": ["/usr/local/share/faust/filters.lib","/usr/local/share/faust/maths.lib","/Users/serj/work/music/pure-data/ceammc/faust/ceammc_ui.lib","/usr/local/share/faust/signals.lib"], "include_pathnames": ["/usr/local/share/faust","/usr/local/share/faust","/usr/share/faust","/Users/serj/work/music/pure-data/ceammc/faust","/Users/serj/work/music/pure-data/ceammc/faust"], - "inputs": "1", - "outputs": "1", + "inputs": 1, + "outputs": 1, "meta": [ { "ceammc_ui.lib/name": "CEAMMC faust default UI elements" }, { "ceammc_ui.lib/version": "0.1.1" }, - { "filename": "flt_bpf24" }, + { "filename": "flt_bpf24.dsp" }, + { "filters.lib/bandpass0_bandstop1:author": "Julius O. Smith III" }, + { "filters.lib/bandpass0_bandstop1:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/bandpass0_bandstop1:license": "MIT-style STK-4.3 license" }, + { "filters.lib/bandpass:author": "Julius O. Smith III" }, + { "filters.lib/bandpass:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/bandpass:license": "MIT-style STK-4.3 license" }, + { "filters.lib/fir:author": "Julius O. Smith III" }, + { "filters.lib/fir:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/fir:license": "MIT-style STK-4.3 license" }, + { "filters.lib/iir:author": "Julius O. Smith III" }, + { "filters.lib/iir:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/iir:license": "MIT-style STK-4.3 license" }, + { "filters.lib/lowpass0_highpass1": "Copyright (C) 2003-2019 by Julius O. Smith III " }, { "filters.lib/name": "Faust Filters Library" }, - { "filters.lib/version": "0.0" }, + { "filters.lib/tf2sb:author": "Julius O. Smith III" }, + { "filters.lib/tf2sb:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/tf2sb:license": "MIT-style STK-4.3 license" }, { "maths.lib/author": "GRAME" }, { "maths.lib/copyright": "GRAME" }, { "maths.lib/license": "LGPL with exception" }, @@ -34,19 +49,19 @@ "meta": [ { "unit": "Hz" } ], - "init": "1000", - "min": "20", - "max": "20000", - "step": "0.1" + "init": 1000, + "min": 20, + "max": 20000, + "step": 0.1 }, { "type": "vslider", "label": "q", "address": "/flt.bpf24/q", - "init": "2", - "min": "0.01", - "max": "100", - "step": "0.1" + "init": 2, + "min": 0.01, + "max": 100, + "step": 0.1 } ] } diff --git a/ceammc/faust/flt_c_bpf.dsp.json b/ceammc/faust/flt_c_bpf.dsp.json index 85e1c6efc5..57cffcc8bf 100644 --- a/ceammc/faust/flt_c_bpf.dsp.json +++ b/ceammc/faust/flt_c_bpf.dsp.json @@ -1,16 +1,16 @@ { "name": "flt_c_bpf", - "filename": "flt_c_bpf", - "version": "2.15.10", - "compile_options": "cpp, -scal -ftz 0", + "filename": "flt_c_bpf.dsp", + "version": "2.22.1", + "compile_options": "-lang cpp -scal -ftz 0", "library_list": ["/usr/local/share/faust/maxmsp.lib","/Users/serj/work/music/pure-data/ceammc/faust/ceammc_ui.lib","/usr/local/share/faust/signals.lib","/usr/local/share/faust/maths.lib"], "include_pathnames": ["/usr/local/share/faust","/usr/local/share/faust","/usr/share/faust","/Users/serj/work/music/pure-data/ceammc/faust","/Users/serj/work/music/pure-data/ceammc/faust"], - "inputs": "1", - "outputs": "5", + "inputs": 1, + "outputs": 5, "meta": [ { "ceammc_ui.lib/name": "CEAMMC faust default UI elements" }, { "ceammc_ui.lib/version": "0.1.1" }, - { "filename": "flt_c_bpf" }, + { "filename": "flt_c_bpf.dsp" }, { "maths.lib/author": "GRAME" }, { "maths.lib/copyright": "GRAME" }, { "maths.lib/license": "LGPL with exception" }, @@ -38,19 +38,19 @@ "meta": [ { "unit": "Hz" } ], - "init": "1000", - "min": "20", - "max": "20000", - "step": "0.1" + "init": 1000, + "min": 20, + "max": 20000, + "step": 0.1 }, { "type": "vslider", "label": "q", "address": "/flt_c_bpf/q", - "init": "0.1", - "min": "0.01", - "max": "100", - "step": "0.1" + "init": 0.1, + "min": 0.01, + "max": 100, + "step": 0.1 } ] } diff --git a/ceammc/faust/flt_c_highshelf.dsp.json b/ceammc/faust/flt_c_highshelf.dsp.json index 3f92269df5..11d53da987 100644 --- a/ceammc/faust/flt_c_highshelf.dsp.json +++ b/ceammc/faust/flt_c_highshelf.dsp.json @@ -1,16 +1,16 @@ { "name": "flt_c_highshelf", - "filename": "flt_c_highshelf", - "version": "2.15.10", - "compile_options": "cpp, -scal -ftz 0", + "filename": "flt_c_highshelf.dsp", + "version": "2.22.1", + "compile_options": "-lang cpp -scal -ftz 0", "library_list": ["/usr/local/share/faust/maxmsp.lib","/usr/local/share/faust/signals.lib","/Users/serj/work/music/pure-data/ceammc/faust/ceammc_ui.lib","/usr/local/share/faust/maths.lib"], "include_pathnames": ["/usr/local/share/faust","/usr/local/share/faust","/usr/share/faust","/Users/serj/work/music/pure-data/ceammc/faust","/Users/serj/work/music/pure-data/ceammc/faust"], - "inputs": "1", - "outputs": "5", + "inputs": 1, + "outputs": 5, "meta": [ { "ceammc_ui.lib/name": "CEAMMC faust default UI elements" }, { "ceammc_ui.lib/version": "0.1.1" }, - { "filename": "flt_c_highshelf" }, + { "filename": "flt_c_highshelf.dsp" }, { "maths.lib/author": "GRAME" }, { "maths.lib/copyright": "GRAME" }, { "maths.lib/license": "LGPL with exception" }, @@ -38,10 +38,10 @@ "meta": [ { "unit": "Hz" } ], - "init": "10000", - "min": "20", - "max": "20000", - "step": "0.1" + "init": 10000, + "min": 20, + "max": 20000, + "step": 0.1 }, { "type": "vslider", @@ -50,19 +50,19 @@ "meta": [ { "unit": "db" } ], - "init": "0", - "min": "-15", - "max": "15", - "step": "0.1" + "init": 0, + "min": -15, + "max": 15, + "step": 0.1 }, { "type": "hslider", "label": "q", "address": "/flt_c_highshelf/q", - "init": "1", - "min": "0.5", - "max": "2", - "step": "0.1" + "init": 1, + "min": 0.5, + "max": 2, + "step": 0.1 } ] } diff --git a/ceammc/faust/flt_c_hpf.dsp.json b/ceammc/faust/flt_c_hpf.dsp.json index bc0557fae0..c78643b1cc 100644 --- a/ceammc/faust/flt_c_hpf.dsp.json +++ b/ceammc/faust/flt_c_hpf.dsp.json @@ -1,16 +1,16 @@ { "name": "flt_c_hpf", - "filename": "flt_c_hpf", - "version": "2.15.10", - "compile_options": "cpp, -scal -ftz 0", + "filename": "flt_c_hpf.dsp", + "version": "2.22.1", + "compile_options": "-lang cpp -scal -ftz 0", "library_list": ["/usr/local/share/faust/maxmsp.lib","/Users/serj/work/music/pure-data/ceammc/faust/ceammc_ui.lib","/usr/local/share/faust/signals.lib","/usr/local/share/faust/maths.lib"], "include_pathnames": ["/usr/local/share/faust","/usr/local/share/faust","/usr/share/faust","/Users/serj/work/music/pure-data/ceammc/faust","/Users/serj/work/music/pure-data/ceammc/faust"], - "inputs": "1", - "outputs": "5", + "inputs": 1, + "outputs": 5, "meta": [ { "ceammc_ui.lib/name": "CEAMMC faust default UI elements" }, { "ceammc_ui.lib/version": "0.1.1" }, - { "filename": "flt_c_hpf" }, + { "filename": "flt_c_hpf.dsp" }, { "maths.lib/author": "GRAME" }, { "maths.lib/copyright": "GRAME" }, { "maths.lib/license": "LGPL with exception" }, @@ -38,19 +38,19 @@ "meta": [ { "unit": "Hz" } ], - "init": "1000", - "min": "20", - "max": "20000", - "step": "0.1" + "init": 1000, + "min": 20, + "max": 20000, + "step": 0.1 }, { "type": "vslider", "label": "q", "address": "/flt_c_hpf/q", - "init": "1", - "min": "0.01", - "max": "100", - "step": "0.1" + "init": 1, + "min": 0.01, + "max": 100, + "step": 0.1 } ] } diff --git a/ceammc/faust/flt_c_lowshelf.dsp.json b/ceammc/faust/flt_c_lowshelf.dsp.json index 7c2a2cf5c0..1badda4e29 100644 --- a/ceammc/faust/flt_c_lowshelf.dsp.json +++ b/ceammc/faust/flt_c_lowshelf.dsp.json @@ -1,16 +1,16 @@ { "name": "flt_c_lowshelf", - "filename": "flt_c_lowshelf", - "version": "2.15.10", - "compile_options": "cpp, -scal -ftz 0", + "filename": "flt_c_lowshelf.dsp", + "version": "2.22.1", + "compile_options": "-lang cpp -scal -ftz 0", "library_list": ["/usr/local/share/faust/maxmsp.lib","/usr/local/share/faust/signals.lib","/Users/serj/work/music/pure-data/ceammc/faust/ceammc_ui.lib","/usr/local/share/faust/maths.lib"], "include_pathnames": ["/usr/local/share/faust","/usr/local/share/faust","/usr/share/faust","/Users/serj/work/music/pure-data/ceammc/faust","/Users/serj/work/music/pure-data/ceammc/faust"], - "inputs": "1", - "outputs": "5", + "inputs": 1, + "outputs": 5, "meta": [ { "ceammc_ui.lib/name": "CEAMMC faust default UI elements" }, { "ceammc_ui.lib/version": "0.1.1" }, - { "filename": "flt_c_lowshelf" }, + { "filename": "flt_c_lowshelf.dsp" }, { "maths.lib/author": "GRAME" }, { "maths.lib/copyright": "GRAME" }, { "maths.lib/license": "LGPL with exception" }, @@ -38,10 +38,10 @@ "meta": [ { "unit": "Hz" } ], - "init": "1000", - "min": "20", - "max": "20000", - "step": "0.1" + "init": 1000, + "min": 20, + "max": 20000, + "step": 0.1 }, { "type": "vslider", @@ -50,19 +50,19 @@ "meta": [ { "unit": "db" } ], - "init": "0", - "min": "-15", - "max": "15", - "step": "0.1" + "init": 0, + "min": -15, + "max": 15, + "step": 0.1 }, { "type": "hslider", "label": "q", "address": "/flt_c_lowshelf/q", - "init": "1", - "min": "0.5", - "max": "2", - "step": "0.1" + "init": 1, + "min": 0.5, + "max": 2, + "step": 0.1 } ] } diff --git a/ceammc/faust/flt_c_lpf.dsp.json b/ceammc/faust/flt_c_lpf.dsp.json index b5007acf14..630f00f824 100644 --- a/ceammc/faust/flt_c_lpf.dsp.json +++ b/ceammc/faust/flt_c_lpf.dsp.json @@ -1,16 +1,16 @@ { "name": "flt_c_lpf", - "filename": "flt_c_lpf", - "version": "2.15.10", - "compile_options": "cpp, -scal -ftz 0", + "filename": "flt_c_lpf.dsp", + "version": "2.22.1", + "compile_options": "-lang cpp -scal -ftz 0", "library_list": ["/usr/local/share/faust/maxmsp.lib","/Users/serj/work/music/pure-data/ceammc/faust/ceammc_ui.lib","/usr/local/share/faust/signals.lib","/usr/local/share/faust/maths.lib"], "include_pathnames": ["/usr/local/share/faust","/usr/local/share/faust","/usr/share/faust","/Users/serj/work/music/pure-data/ceammc/faust","/Users/serj/work/music/pure-data/ceammc/faust"], - "inputs": "1", - "outputs": "5", + "inputs": 1, + "outputs": 5, "meta": [ { "ceammc_ui.lib/name": "CEAMMC faust default UI elements" }, { "ceammc_ui.lib/version": "0.1.1" }, - { "filename": "flt_c_lpf" }, + { "filename": "flt_c_lpf.dsp" }, { "maths.lib/author": "GRAME" }, { "maths.lib/copyright": "GRAME" }, { "maths.lib/license": "LGPL with exception" }, @@ -38,19 +38,19 @@ "meta": [ { "unit": "Hz" } ], - "init": "1000", - "min": "20", - "max": "20000", - "step": "0.1" + "init": 1000, + "min": 20, + "max": 20000, + "step": 0.1 }, { "type": "vslider", "label": "q", "address": "/flt_c_lpf/q", - "init": "1", - "min": "0.01", - "max": "100", - "step": "0.1" + "init": 1, + "min": 0.01, + "max": 100, + "step": 0.1 } ] } diff --git a/ceammc/faust/flt_c_notch.dsp.json b/ceammc/faust/flt_c_notch.dsp.json index b76cc4175e..739e4cbf97 100644 --- a/ceammc/faust/flt_c_notch.dsp.json +++ b/ceammc/faust/flt_c_notch.dsp.json @@ -1,16 +1,16 @@ { "name": "flt_c_notch", - "filename": "flt_c_notch", - "version": "2.15.10", - "compile_options": "cpp, -scal -ftz 0", + "filename": "flt_c_notch.dsp", + "version": "2.22.1", + "compile_options": "-lang cpp -scal -ftz 0", "library_list": ["/usr/local/share/faust/maxmsp.lib","/Users/serj/work/music/pure-data/ceammc/faust/ceammc_ui.lib","/usr/local/share/faust/signals.lib","/usr/local/share/faust/maths.lib"], "include_pathnames": ["/usr/local/share/faust","/usr/local/share/faust","/usr/share/faust","/Users/serj/work/music/pure-data/ceammc/faust","/Users/serj/work/music/pure-data/ceammc/faust"], - "inputs": "1", - "outputs": "5", + "inputs": 1, + "outputs": 5, "meta": [ { "ceammc_ui.lib/name": "CEAMMC faust default UI elements" }, { "ceammc_ui.lib/version": "0.1.1" }, - { "filename": "flt_c_notch" }, + { "filename": "flt_c_notch.dsp" }, { "maths.lib/author": "GRAME" }, { "maths.lib/copyright": "GRAME" }, { "maths.lib/license": "LGPL with exception" }, @@ -38,19 +38,19 @@ "meta": [ { "unit": "Hz" } ], - "init": "1000", - "min": "20", - "max": "20000", - "step": "0.1" + "init": 1000, + "min": 20, + "max": 20000, + "step": 0.1 }, { "type": "vslider", "label": "q", "address": "/flt_c_notch/q", - "init": "1", - "min": "0.01", - "max": "100", - "step": "0.1" + "init": 1, + "min": 0.01, + "max": 100, + "step": 0.1 } ] } diff --git a/ceammc/faust/flt_c_peak.dsp.json b/ceammc/faust/flt_c_peak.dsp.json index b1b7d1b689..1f8cc086c1 100644 --- a/ceammc/faust/flt_c_peak.dsp.json +++ b/ceammc/faust/flt_c_peak.dsp.json @@ -1,16 +1,16 @@ { "name": "flt_c_peak", - "filename": "flt_c_peak", - "version": "2.15.10", - "compile_options": "cpp, -scal -ftz 0", + "filename": "flt_c_peak.dsp", + "version": "2.22.1", + "compile_options": "-lang cpp -scal -ftz 0", "library_list": ["/usr/local/share/faust/maxmsp.lib","/Users/serj/work/music/pure-data/ceammc/faust/ceammc_ui.lib","/usr/local/share/faust/signals.lib","/usr/local/share/faust/maths.lib"], "include_pathnames": ["/usr/local/share/faust","/usr/local/share/faust","/usr/share/faust","/Users/serj/work/music/pure-data/ceammc/faust","/Users/serj/work/music/pure-data/ceammc/faust"], - "inputs": "1", - "outputs": "5", + "inputs": 1, + "outputs": 5, "meta": [ { "ceammc_ui.lib/name": "CEAMMC faust default UI elements" }, { "ceammc_ui.lib/version": "0.1.1" }, - { "filename": "flt_c_peak" }, + { "filename": "flt_c_peak.dsp" }, { "maths.lib/author": "GRAME" }, { "maths.lib/copyright": "GRAME" }, { "maths.lib/license": "LGPL with exception" }, @@ -38,10 +38,10 @@ "meta": [ { "unit": "Hz" } ], - "init": "1000", - "min": "20", - "max": "20000", - "step": "0.1" + "init": 1000, + "min": 20, + "max": 20000, + "step": 0.1 }, { "type": "vslider", @@ -50,19 +50,19 @@ "meta": [ { "unit": "db" } ], - "init": "0", - "min": "-15", - "max": "15", - "step": "0.1" + "init": 0, + "min": -15, + "max": 15, + "step": 0.1 }, { "type": "vslider", "label": "q", "address": "/flt_c_peak/q", - "init": "1", - "min": "0.01", - "max": "100", - "step": "0.1" + "init": 1, + "min": 0.01, + "max": 100, + "step": 0.1 } ] } diff --git a/ceammc/faust/flt_eq10.dsp.json b/ceammc/faust/flt_eq10.dsp.json index 3ef1dfa810..af767a1283 100644 --- a/ceammc/faust/flt_eq10.dsp.json +++ b/ceammc/faust/flt_eq10.dsp.json @@ -1,20 +1,53 @@ { "name": "flt.eq10", - "filename": "flt_eq10", - "version": "2.15.10", - "compile_options": "cpp, -scal -ftz 0", + "filename": "flt_eq10.dsp", + "version": "2.22.1", + "compile_options": "-lang cpp -scal -ftz 0", "library_list": ["/usr/local/share/faust/stdfaust.lib","/usr/local/share/faust/filters.lib","/usr/local/share/faust/analyzers.lib","/usr/local/share/faust/maths.lib","/usr/local/share/faust/basics.lib","/usr/local/share/faust/signals.lib"], "include_pathnames": ["/usr/local/share/faust","/usr/local/share/faust","/usr/share/faust","/Users/serj/work/music/pure-data/ceammc/faust","/Users/serj/work/music/pure-data/ceammc/faust"], - "inputs": "1", - "outputs": "1", + "inputs": 1, + "outputs": 1, "meta": [ { "analyzers.lib/name": "Faust Analyzer Library" }, { "analyzers.lib/version": "0.0" }, { "basics.lib/name": "Faust Basic Element Library" }, - { "basics.lib/version": "0.0" }, - { "filename": "flt_eq10" }, + { "basics.lib/version": "0.1" }, + { "filename": "flt_eq10.dsp" }, + { "filters.lib/fir:author": "Julius O. Smith III" }, + { "filters.lib/fir:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/fir:license": "MIT-style STK-4.3 license" }, + { "filters.lib/highpass:author": "Julius O. Smith III" }, + { "filters.lib/highpass:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/highpass_plus_lowpass:author": "Julius O. Smith III" }, + { "filters.lib/highpass_plus_lowpass:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/highpass_plus_lowpass:license": "MIT-style STK-4.3 license" }, + { "filters.lib/iir:author": "Julius O. Smith III" }, + { "filters.lib/iir:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/iir:license": "MIT-style STK-4.3 license" }, + { "filters.lib/lowpass0_highpass1": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/lowpass0_highpass1:author": "Julius O. Smith III" }, + { "filters.lib/lowpass:author": "Julius O. Smith III" }, + { "filters.lib/lowpass:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/lowpass:license": "MIT-style STK-4.3 license" }, + { "filters.lib/mth_octave_filterbank5:author": "Julius O. Smith III" }, + { "filters.lib/mth_octave_filterbank5:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/mth_octave_filterbank5:license": "MIT-style STK-4.3 license" }, + { "filters.lib/mth_octave_filterbank:author": "Julius O. Smith III" }, + { "filters.lib/mth_octave_filterbank:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/mth_octave_filterbank:license": "MIT-style STK-4.3 license" }, { "filters.lib/name": "Faust Filters Library" }, - { "filters.lib/version": "0.0" }, + { "filters.lib/tf1:author": "Julius O. Smith III" }, + { "filters.lib/tf1:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/tf1:license": "MIT-style STK-4.3 license" }, + { "filters.lib/tf1s:author": "Julius O. Smith III" }, + { "filters.lib/tf1s:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/tf1s:license": "MIT-style STK-4.3 license" }, + { "filters.lib/tf2:author": "Julius O. Smith III" }, + { "filters.lib/tf2:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/tf2:license": "MIT-style STK-4.3 license" }, + { "filters.lib/tf2s:author": "Julius O. Smith III" }, + { "filters.lib/tf2s:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/tf2s:license": "MIT-style STK-4.3 license" }, { "maths.lib/author": "GRAME" }, { "maths.lib/copyright": "GRAME" }, { "maths.lib/license": "LGPL with exception" }, @@ -36,10 +69,10 @@ "meta": [ { "unit": "db" } ], - "init": "0", - "min": "-70", - "max": "10", - "step": "0.1" + "init": 0, + "min": -70, + "max": 10, + "step": 0.1 }, { "type": "vslider", @@ -48,10 +81,10 @@ "meta": [ { "unit": "db" } ], - "init": "0", - "min": "-70", - "max": "10", - "step": "0.1" + "init": 0, + "min": -70, + "max": 10, + "step": 0.1 }, { "type": "vslider", @@ -60,10 +93,10 @@ "meta": [ { "unit": "db" } ], - "init": "0", - "min": "-70", - "max": "10", - "step": "0.1" + "init": 0, + "min": -70, + "max": 10, + "step": 0.1 }, { "type": "vslider", @@ -72,10 +105,10 @@ "meta": [ { "unit": "db" } ], - "init": "0", - "min": "-70", - "max": "10", - "step": "0.1" + "init": 0, + "min": -70, + "max": 10, + "step": 0.1 }, { "type": "vslider", @@ -84,10 +117,10 @@ "meta": [ { "unit": "db" } ], - "init": "0", - "min": "-70", - "max": "10", - "step": "0.1" + "init": 0, + "min": -70, + "max": 10, + "step": 0.1 }, { "type": "vslider", @@ -96,10 +129,10 @@ "meta": [ { "unit": "db" } ], - "init": "0", - "min": "-70", - "max": "10", - "step": "0.1" + "init": 0, + "min": -70, + "max": 10, + "step": 0.1 }, { "type": "vslider", @@ -108,10 +141,10 @@ "meta": [ { "unit": "db" } ], - "init": "0", - "min": "-70", - "max": "10", - "step": "0.1" + "init": 0, + "min": -70, + "max": 10, + "step": 0.1 }, { "type": "vslider", @@ -120,10 +153,10 @@ "meta": [ { "unit": "db" } ], - "init": "0", - "min": "-70", - "max": "10", - "step": "0.1" + "init": 0, + "min": -70, + "max": 10, + "step": 0.1 }, { "type": "vslider", @@ -132,10 +165,10 @@ "meta": [ { "unit": "db" } ], - "init": "0", - "min": "-70", - "max": "10", - "step": "0.1" + "init": 0, + "min": -70, + "max": 10, + "step": 0.1 }, { "type": "vslider", @@ -144,10 +177,10 @@ "meta": [ { "unit": "db" } ], - "init": "0", - "min": "-70", - "max": "10", - "step": "0.1" + "init": 0, + "min": -70, + "max": 10, + "step": 0.1 } ] } diff --git a/ceammc/faust/flt_eq_peak.dsp.json b/ceammc/faust/flt_eq_peak.dsp.json index d48bee989e..f0ca1fa884 100644 --- a/ceammc/faust/flt_eq_peak.dsp.json +++ b/ceammc/faust/flt_eq_peak.dsp.json @@ -1,20 +1,35 @@ { "name": "flt.eq_peak", - "filename": "flt_eq_peak", - "version": "2.15.10", - "compile_options": "cpp, -scal -ftz 0", + "filename": "flt_eq_peak.dsp", + "version": "2.22.1", + "compile_options": "-lang cpp -scal -ftz 0", "library_list": ["/usr/local/share/faust/filters.lib","/usr/local/share/faust/signals.lib","/Users/serj/work/music/pure-data/ceammc/faust/ceammc_ui.lib","/usr/local/share/faust/maths.lib","/usr/local/share/faust/basics.lib"], "include_pathnames": ["/usr/local/share/faust","/usr/local/share/faust","/usr/share/faust","/Users/serj/work/music/pure-data/ceammc/faust","/Users/serj/work/music/pure-data/ceammc/faust"], - "inputs": "1", - "outputs": "1", + "inputs": 1, + "outputs": 1, "meta": [ { "basics.lib/name": "Faust Basic Element Library" }, - { "basics.lib/version": "0.0" }, + { "basics.lib/version": "0.1" }, { "ceammc_ui.lib/name": "CEAMMC faust default UI elements" }, { "ceammc_ui.lib/version": "0.1.1" }, - { "filename": "flt_eq_peak" }, + { "filename": "flt_eq_peak.dsp" }, + { "filters.lib/fir:author": "Julius O. Smith III" }, + { "filters.lib/fir:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/fir:license": "MIT-style STK-4.3 license" }, + { "filters.lib/iir:author": "Julius O. Smith III" }, + { "filters.lib/iir:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/iir:license": "MIT-style STK-4.3 license" }, + { "filters.lib/lowpass0_highpass1": "Copyright (C) 2003-2019 by Julius O. Smith III " }, { "filters.lib/name": "Faust Filters Library" }, - { "filters.lib/version": "0.0" }, + { "filters.lib/peak_eq:author": "Julius O. Smith III" }, + { "filters.lib/peak_eq:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/peak_eq:license": "MIT-style STK-4.3 license" }, + { "filters.lib/tf2:author": "Julius O. Smith III" }, + { "filters.lib/tf2:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/tf2:license": "MIT-style STK-4.3 license" }, + { "filters.lib/tf2s:author": "Julius O. Smith III" }, + { "filters.lib/tf2s:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/tf2s:license": "MIT-style STK-4.3 license" }, { "maths.lib/author": "GRAME" }, { "maths.lib/copyright": "GRAME" }, { "maths.lib/license": "LGPL with exception" }, @@ -36,10 +51,10 @@ "meta": [ { "unit": "Hz" } ], - "init": "100", - "min": "1", - "max": "5000", - "step": "0.1" + "init": 100, + "min": 1, + "max": 5000, + "step": 0.1 }, { "type": "vslider", @@ -48,10 +63,10 @@ "meta": [ { "unit": "Hz" } ], - "init": "1000", - "min": "20", - "max": "20000", - "step": "0.1" + "init": 1000, + "min": 20, + "max": 20000, + "step": 0.1 }, { "type": "vslider", @@ -60,10 +75,10 @@ "meta": [ { "unit": "db" } ], - "init": "0", - "min": "-15", - "max": "15", - "step": "0.1" + "init": 0, + "min": -15, + "max": 15, + "step": 0.1 } ] } diff --git a/ceammc/faust/flt_eq_peak_cq.dsp.json b/ceammc/faust/flt_eq_peak_cq.dsp.json index 3f9efe5443..e2ef7eca1b 100644 --- a/ceammc/faust/flt_eq_peak_cq.dsp.json +++ b/ceammc/faust/flt_eq_peak_cq.dsp.json @@ -1,20 +1,38 @@ { "name": "flt.eq_peak_cq", - "filename": "flt_eq_peak_cq", - "version": "2.15.0", - "compile_options": "cpp, -scal -ftz 0", + "filename": "flt_eq_peak_cq.dsp", + "version": "2.22.1", + "compile_options": "-lang cpp -scal -ftz 0", "library_list": ["/usr/local/share/faust/filters.lib","/usr/local/share/faust/signals.lib","/Users/serj/work/music/pure-data/ceammc/faust/ceammc_ui.lib","/usr/local/share/faust/maths.lib","/usr/local/share/faust/basics.lib"], "include_pathnames": ["/usr/local/share/faust","/usr/local/share/faust","/usr/share/faust","/Users/serj/work/music/pure-data/ceammc/faust","/Users/serj/work/music/pure-data/ceammc/faust"], - "inputs": "1", - "outputs": "1", + "inputs": 1, + "outputs": 1, "meta": [ { "basics.lib/name": "Faust Basic Element Library" }, - { "basics.lib/version": "0.0" }, + { "basics.lib/version": "0.1" }, { "ceammc_ui.lib/name": "CEAMMC faust default UI elements" }, { "ceammc_ui.lib/version": "0.1.1" }, - { "filename": "flt_eq_peak_cq" }, + { "filename": "flt_eq_peak_cq.dsp" }, + { "filters.lib/fir:author": "Julius O. Smith III" }, + { "filters.lib/fir:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/fir:license": "MIT-style STK-4.3 license" }, + { "filters.lib/iir:author": "Julius O. Smith III" }, + { "filters.lib/iir:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/iir:license": "MIT-style STK-4.3 license" }, + { "filters.lib/lowpass0_highpass1": "Copyright (C) 2003-2019 by Julius O. Smith III " }, { "filters.lib/name": "Faust Filters Library" }, - { "filters.lib/version": "0.0" }, + { "filters.lib/peak_eq:author": "Julius O. Smith III" }, + { "filters.lib/peak_eq:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/peak_eq:license": "MIT-style STK-4.3 license" }, + { "filters.lib/peak_eq_cq:author": "Julius O. Smith III" }, + { "filters.lib/peak_eq_cq:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/peak_eq_cq:license": "MIT-style STK-4.3 license" }, + { "filters.lib/tf2:author": "Julius O. Smith III" }, + { "filters.lib/tf2:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/tf2:license": "MIT-style STK-4.3 license" }, + { "filters.lib/tf2s:author": "Julius O. Smith III" }, + { "filters.lib/tf2s:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/tf2s:license": "MIT-style STK-4.3 license" }, { "maths.lib/author": "GRAME" }, { "maths.lib/copyright": "GRAME" }, { "maths.lib/license": "LGPL with exception" }, @@ -36,10 +54,10 @@ "meta": [ { "unit": "Hz" } ], - "init": "1000", - "min": "20", - "max": "20000", - "step": "0.1" + "init": 1000, + "min": 20, + "max": 20000, + "step": 0.1 }, { "type": "vslider", @@ -48,19 +66,19 @@ "meta": [ { "unit": "db" } ], - "init": "0", - "min": "-15", - "max": "15", - "step": "0.1" + "init": 0, + "min": -15, + "max": 15, + "step": 0.1 }, { "type": "vslider", "label": "q", "address": "/flt.eq_peak_cq/q", - "init": "3", - "min": "0.1", - "max": "100", - "step": "0.1" + "init": 3, + "min": 0.1, + "max": 100, + "step": 0.1 } ] } diff --git a/ceammc/faust/flt_highshelf.dsp.json b/ceammc/faust/flt_highshelf.dsp.json index 7fbc7c0339..4d7f49e795 100644 --- a/ceammc/faust/flt_highshelf.dsp.json +++ b/ceammc/faust/flt_highshelf.dsp.json @@ -1,16 +1,16 @@ { "name": "flt.highshelf", - "filename": "flt_highshelf", - "version": "2.15.0", - "compile_options": "cpp, -scal -ftz 0", + "filename": "flt_highshelf.dsp", + "version": "2.22.1", + "compile_options": "-lang cpp -scal -ftz 0", "library_list": ["/usr/local/share/faust/maxmsp.lib","/Users/serj/work/music/pure-data/ceammc/faust/ceammc_ui.lib","/usr/local/share/faust/signals.lib","/usr/local/share/faust/maths.lib"], "include_pathnames": ["/usr/local/share/faust","/usr/local/share/faust","/usr/share/faust","/Users/serj/work/music/pure-data/ceammc/faust","/Users/serj/work/music/pure-data/ceammc/faust"], - "inputs": "1", - "outputs": "1", + "inputs": 1, + "outputs": 1, "meta": [ { "ceammc_ui.lib/name": "CEAMMC faust default UI elements" }, { "ceammc_ui.lib/version": "0.1.1" }, - { "filename": "flt_highshelf" }, + { "filename": "flt_highshelf.dsp" }, { "maths.lib/author": "GRAME" }, { "maths.lib/copyright": "GRAME" }, { "maths.lib/license": "LGPL with exception" }, @@ -37,10 +37,10 @@ "meta": [ { "unit": "Hz" } ], - "init": "10000", - "min": "20", - "max": "20000", - "step": "0.1" + "init": 10000, + "min": 20, + "max": 20000, + "step": 0.1 }, { "type": "vslider", @@ -49,10 +49,10 @@ "meta": [ { "unit": "db" } ], - "init": "0", - "min": "-15", - "max": "15", - "step": "0.1" + "init": 0, + "min": -15, + "max": 15, + "step": 0.1 } ] } diff --git a/ceammc/faust/flt_hpf12.dsp.json b/ceammc/faust/flt_hpf12.dsp.json index f38db0d216..40071810e0 100644 --- a/ceammc/faust/flt_hpf12.dsp.json +++ b/ceammc/faust/flt_hpf12.dsp.json @@ -1,18 +1,33 @@ { "name": "flt.hpf12", - "filename": "flt_hpf12", - "version": "2.15.0", - "compile_options": "cpp, -scal -ftz 0", + "filename": "flt_hpf12.dsp", + "version": "2.22.1", + "compile_options": "-lang cpp -scal -ftz 0", "library_list": ["/usr/local/share/faust/filters.lib","/Users/serj/work/music/pure-data/ceammc/faust/ceammc_ui.lib","/usr/local/share/faust/signals.lib","/usr/local/share/faust/maths.lib"], "include_pathnames": ["/usr/local/share/faust","/usr/local/share/faust","/usr/share/faust","/Users/serj/work/music/pure-data/ceammc/faust","/Users/serj/work/music/pure-data/ceammc/faust"], - "inputs": "1", - "outputs": "1", + "inputs": 1, + "outputs": 1, "meta": [ { "ceammc_ui.lib/name": "CEAMMC faust default UI elements" }, { "ceammc_ui.lib/version": "0.1.1" }, - { "filename": "flt_hpf12" }, + { "filename": "flt_hpf12.dsp" }, + { "filters.lib/fir:author": "Julius O. Smith III" }, + { "filters.lib/fir:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/fir:license": "MIT-style STK-4.3 license" }, + { "filters.lib/highpass:author": "Julius O. Smith III" }, + { "filters.lib/highpass:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/iir:author": "Julius O. Smith III" }, + { "filters.lib/iir:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/iir:license": "MIT-style STK-4.3 license" }, + { "filters.lib/lowpass0_highpass1": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/lowpass0_highpass1:author": "Julius O. Smith III" }, { "filters.lib/name": "Faust Filters Library" }, - { "filters.lib/version": "0.0" }, + { "filters.lib/tf2:author": "Julius O. Smith III" }, + { "filters.lib/tf2:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/tf2:license": "MIT-style STK-4.3 license" }, + { "filters.lib/tf2s:author": "Julius O. Smith III" }, + { "filters.lib/tf2s:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/tf2s:license": "MIT-style STK-4.3 license" }, { "maths.lib/author": "GRAME" }, { "maths.lib/copyright": "GRAME" }, { "maths.lib/license": "LGPL with exception" }, @@ -34,10 +49,10 @@ "meta": [ { "unit": "Hz" } ], - "init": "10000", - "min": "20", - "max": "20000", - "step": "0.1" + "init": 10000, + "min": 20, + "max": 20000, + "step": 0.1 } ] } diff --git a/ceammc/faust/flt_hpf24.dsp.json b/ceammc/faust/flt_hpf24.dsp.json index 03ed1af014..6305bb9758 100644 --- a/ceammc/faust/flt_hpf24.dsp.json +++ b/ceammc/faust/flt_hpf24.dsp.json @@ -1,18 +1,33 @@ { "name": "flt.hpf24", - "filename": "flt_hpf24", - "version": "2.15.0", - "compile_options": "cpp, -scal -ftz 0", + "filename": "flt_hpf24.dsp", + "version": "2.22.1", + "compile_options": "-lang cpp -scal -ftz 0", "library_list": ["/usr/local/share/faust/filters.lib","/Users/serj/work/music/pure-data/ceammc/faust/ceammc_ui.lib","/usr/local/share/faust/signals.lib","/usr/local/share/faust/maths.lib"], "include_pathnames": ["/usr/local/share/faust","/usr/local/share/faust","/usr/share/faust","/Users/serj/work/music/pure-data/ceammc/faust","/Users/serj/work/music/pure-data/ceammc/faust"], - "inputs": "1", - "outputs": "1", + "inputs": 1, + "outputs": 1, "meta": [ { "ceammc_ui.lib/name": "CEAMMC faust default UI elements" }, { "ceammc_ui.lib/version": "0.1.1" }, - { "filename": "flt_hpf24" }, + { "filename": "flt_hpf24.dsp" }, + { "filters.lib/fir:author": "Julius O. Smith III" }, + { "filters.lib/fir:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/fir:license": "MIT-style STK-4.3 license" }, + { "filters.lib/highpass:author": "Julius O. Smith III" }, + { "filters.lib/highpass:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/iir:author": "Julius O. Smith III" }, + { "filters.lib/iir:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/iir:license": "MIT-style STK-4.3 license" }, + { "filters.lib/lowpass0_highpass1": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/lowpass0_highpass1:author": "Julius O. Smith III" }, { "filters.lib/name": "Faust Filters Library" }, - { "filters.lib/version": "0.0" }, + { "filters.lib/tf2:author": "Julius O. Smith III" }, + { "filters.lib/tf2:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/tf2:license": "MIT-style STK-4.3 license" }, + { "filters.lib/tf2s:author": "Julius O. Smith III" }, + { "filters.lib/tf2s:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/tf2s:license": "MIT-style STK-4.3 license" }, { "maths.lib/author": "GRAME" }, { "maths.lib/copyright": "GRAME" }, { "maths.lib/license": "LGPL with exception" }, @@ -34,10 +49,10 @@ "meta": [ { "unit": "Hz" } ], - "init": "10000", - "min": "20", - "max": "20000", - "step": "0.1" + "init": 10000, + "min": 20, + "max": 20000, + "step": 0.1 } ] } diff --git a/ceammc/faust/flt_lowshelf.dsp.json b/ceammc/faust/flt_lowshelf.dsp.json index 23fc9c90c2..e2b1025f7e 100644 --- a/ceammc/faust/flt_lowshelf.dsp.json +++ b/ceammc/faust/flt_lowshelf.dsp.json @@ -1,16 +1,16 @@ { "name": "flt.lowshelf", - "filename": "flt_lowshelf", - "version": "2.15.0", - "compile_options": "cpp, -scal -ftz 0", + "filename": "flt_lowshelf.dsp", + "version": "2.22.1", + "compile_options": "-lang cpp -scal -ftz 0", "library_list": ["/usr/local/share/faust/maxmsp.lib","/Users/serj/work/music/pure-data/ceammc/faust/ceammc_ui.lib","/usr/local/share/faust/signals.lib","/usr/local/share/faust/maths.lib"], "include_pathnames": ["/usr/local/share/faust","/usr/local/share/faust","/usr/share/faust","/Users/serj/work/music/pure-data/ceammc/faust","/Users/serj/work/music/pure-data/ceammc/faust"], - "inputs": "1", - "outputs": "1", + "inputs": 1, + "outputs": 1, "meta": [ { "ceammc_ui.lib/name": "CEAMMC faust default UI elements" }, { "ceammc_ui.lib/version": "0.1.1" }, - { "filename": "flt_lowshelf" }, + { "filename": "flt_lowshelf.dsp" }, { "maths.lib/author": "GRAME" }, { "maths.lib/copyright": "GRAME" }, { "maths.lib/license": "LGPL with exception" }, @@ -37,10 +37,10 @@ "meta": [ { "unit": "Hz" } ], - "init": "1000", - "min": "20", - "max": "20000", - "step": "0.1" + "init": 1000, + "min": 20, + "max": 20000, + "step": 0.1 }, { "type": "vslider", @@ -49,10 +49,10 @@ "meta": [ { "unit": "db" } ], - "init": "0", - "min": "-15", - "max": "15", - "step": "0.1" + "init": 0, + "min": -15, + "max": 15, + "step": 0.1 } ] } diff --git a/ceammc/faust/flt_lpf12.dsp.json b/ceammc/faust/flt_lpf12.dsp.json index 095b9294d9..17878ab393 100644 --- a/ceammc/faust/flt_lpf12.dsp.json +++ b/ceammc/faust/flt_lpf12.dsp.json @@ -1,18 +1,34 @@ { "name": "flt.lpf12", - "filename": "flt_lpf12", - "version": "2.15.0", - "compile_options": "cpp, -scal -ftz 0", + "filename": "flt_lpf12.dsp", + "version": "2.22.1", + "compile_options": "-lang cpp -scal -ftz 0", "library_list": ["/usr/local/share/faust/filters.lib","/Users/serj/work/music/pure-data/ceammc/faust/ceammc_ui.lib","/usr/local/share/faust/signals.lib","/usr/local/share/faust/maths.lib"], "include_pathnames": ["/usr/local/share/faust","/usr/local/share/faust","/usr/share/faust","/Users/serj/work/music/pure-data/ceammc/faust","/Users/serj/work/music/pure-data/ceammc/faust"], - "inputs": "1", - "outputs": "1", + "inputs": 1, + "outputs": 1, "meta": [ { "ceammc_ui.lib/name": "CEAMMC faust default UI elements" }, { "ceammc_ui.lib/version": "0.1.1" }, - { "filename": "flt_lpf12" }, + { "filename": "flt_lpf12.dsp" }, + { "filters.lib/fir:author": "Julius O. Smith III" }, + { "filters.lib/fir:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/fir:license": "MIT-style STK-4.3 license" }, + { "filters.lib/iir:author": "Julius O. Smith III" }, + { "filters.lib/iir:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/iir:license": "MIT-style STK-4.3 license" }, + { "filters.lib/lowpass0_highpass1": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/lowpass0_highpass1:author": "Julius O. Smith III" }, + { "filters.lib/lowpass:author": "Julius O. Smith III" }, + { "filters.lib/lowpass:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/lowpass:license": "MIT-style STK-4.3 license" }, { "filters.lib/name": "Faust Filters Library" }, - { "filters.lib/version": "0.0" }, + { "filters.lib/tf2:author": "Julius O. Smith III" }, + { "filters.lib/tf2:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/tf2:license": "MIT-style STK-4.3 license" }, + { "filters.lib/tf2s:author": "Julius O. Smith III" }, + { "filters.lib/tf2s:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/tf2s:license": "MIT-style STK-4.3 license" }, { "maths.lib/author": "GRAME" }, { "maths.lib/copyright": "GRAME" }, { "maths.lib/license": "LGPL with exception" }, @@ -34,10 +50,10 @@ "meta": [ { "unit": "Hz" } ], - "init": "1000", - "min": "20", - "max": "20000", - "step": "0.1" + "init": 1000, + "min": 20, + "max": 20000, + "step": 0.1 } ] } diff --git a/ceammc/faust/flt_lpf24.dsp.json b/ceammc/faust/flt_lpf24.dsp.json index 89ccf7f992..bf5967499e 100644 --- a/ceammc/faust/flt_lpf24.dsp.json +++ b/ceammc/faust/flt_lpf24.dsp.json @@ -1,18 +1,34 @@ { "name": "flt.lpf24", - "filename": "flt_lpf24", - "version": "2.15.0", - "compile_options": "cpp, -scal -ftz 0", + "filename": "flt_lpf24.dsp", + "version": "2.22.1", + "compile_options": "-lang cpp -scal -ftz 0", "library_list": ["/usr/local/share/faust/filters.lib","/Users/serj/work/music/pure-data/ceammc/faust/ceammc_ui.lib","/usr/local/share/faust/signals.lib","/usr/local/share/faust/maths.lib"], "include_pathnames": ["/usr/local/share/faust","/usr/local/share/faust","/usr/share/faust","/Users/serj/work/music/pure-data/ceammc/faust","/Users/serj/work/music/pure-data/ceammc/faust"], - "inputs": "1", - "outputs": "1", + "inputs": 1, + "outputs": 1, "meta": [ { "ceammc_ui.lib/name": "CEAMMC faust default UI elements" }, { "ceammc_ui.lib/version": "0.1.1" }, - { "filename": "flt_lpf24" }, + { "filename": "flt_lpf24.dsp" }, + { "filters.lib/fir:author": "Julius O. Smith III" }, + { "filters.lib/fir:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/fir:license": "MIT-style STK-4.3 license" }, + { "filters.lib/iir:author": "Julius O. Smith III" }, + { "filters.lib/iir:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/iir:license": "MIT-style STK-4.3 license" }, + { "filters.lib/lowpass0_highpass1": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/lowpass0_highpass1:author": "Julius O. Smith III" }, + { "filters.lib/lowpass:author": "Julius O. Smith III" }, + { "filters.lib/lowpass:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/lowpass:license": "MIT-style STK-4.3 license" }, { "filters.lib/name": "Faust Filters Library" }, - { "filters.lib/version": "0.0" }, + { "filters.lib/tf2:author": "Julius O. Smith III" }, + { "filters.lib/tf2:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/tf2:license": "MIT-style STK-4.3 license" }, + { "filters.lib/tf2s:author": "Julius O. Smith III" }, + { "filters.lib/tf2s:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/tf2s:license": "MIT-style STK-4.3 license" }, { "maths.lib/author": "GRAME" }, { "maths.lib/copyright": "GRAME" }, { "maths.lib/license": "LGPL with exception" }, @@ -34,10 +50,10 @@ "meta": [ { "unit": "Hz" } ], - "init": "1000", - "min": "20", - "max": "20000", - "step": "0.1" + "init": 1000, + "min": 20, + "max": 20000, + "step": 0.1 } ] } diff --git a/ceammc/faust/flt_moog_vcf.dsp.json b/ceammc/faust/flt_moog_vcf.dsp.json index c323c95262..414cd91de9 100644 --- a/ceammc/faust/flt_moog_vcf.dsp.json +++ b/ceammc/faust/flt_moog_vcf.dsp.json @@ -1,18 +1,24 @@ { "name": "flt.moog_vcf", - "filename": "flt_moog_vcf", - "version": "2.15.0", - "compile_options": "cpp, -scal -ftz 0", + "filename": "flt_moog_vcf.dsp", + "version": "2.22.1", + "compile_options": "-lang cpp -scal -ftz 0", "library_list": ["/usr/local/share/faust/vaeffects.lib","/usr/local/share/faust/signals.lib","/usr/local/share/faust/filters.lib","/usr/local/share/faust/maths.lib","/usr/local/share/faust/basics.lib"], "include_pathnames": ["/usr/local/share/faust","/usr/local/share/faust","/usr/share/faust","/Users/serj/work/music/pure-data/ceammc/faust","/Users/serj/work/music/pure-data/ceammc/faust"], - "inputs": "2", - "outputs": "1", + "inputs": 2, + "outputs": 1, "meta": [ { "basics.lib/name": "Faust Basic Element Library" }, - { "basics.lib/version": "0.0" }, - { "filename": "flt_moog_vcf" }, + { "basics.lib/version": "0.1" }, + { "filename": "flt_moog_vcf.dsp" }, + { "filters.lib/allpassnnlt:author": "Julius O. Smith III" }, + { "filters.lib/allpassnnlt:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/allpassnnlt:license": "MIT-style STK-4.3 license" }, + { "filters.lib/lowpass0_highpass1": "Copyright (C) 2003-2019 by Julius O. Smith III " }, { "filters.lib/name": "Faust Filters Library" }, - { "filters.lib/version": "0.0" }, + { "filters.lib/tf2np:author": "Julius O. Smith III" }, + { "filters.lib/tf2np:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/tf2np:license": "MIT-style STK-4.3 license" }, { "maths.lib/author": "GRAME" }, { "maths.lib/copyright": "GRAME" }, { "maths.lib/license": "LGPL with exception" }, @@ -21,6 +27,9 @@ { "name": "flt.moog_vcf" }, { "signals.lib/name": "Faust Signal Routing Library" }, { "signals.lib/version": "0.0" }, + { "vaeffects.lib/moog_vcf_2bn:author": "Julius O. Smith III" }, + { "vaeffects.lib/moog_vcf_2bn:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "vaeffects.lib/moog_vcf_2bn:license": "MIT-style STK-4.3 license" }, { "vaeffects.lib/name": "Faust Virtual Analog Filter Effect Library" }, { "vaeffects.lib/version": "0.0" } ], @@ -33,10 +42,10 @@ "type": "vslider", "label": "res", "address": "/flt.moog_vcf/res", - "init": "0.4", - "min": "0", - "max": "1", - "step": "0.001" + "init": 0.4, + "min": 0, + "max": 1, + "step": 0.001 } ] } diff --git a/ceammc/faust/flt_notch.dsp.json b/ceammc/faust/flt_notch.dsp.json index 43c406edb3..2900eeb3bc 100644 --- a/ceammc/faust/flt_notch.dsp.json +++ b/ceammc/faust/flt_notch.dsp.json @@ -1,14 +1,14 @@ { "name": "flt.notch", - "filename": "flt_notch", - "version": "2.15.0", - "compile_options": "cpp, -scal -ftz 0", + "filename": "flt_notch.dsp", + "version": "2.22.1", + "compile_options": "-lang cpp -scal -ftz 0", "library_list": ["/usr/local/share/faust/filter.lib","/usr/local/share/faust/music.lib","/usr/local/share/faust/math.lib","/usr/local/share/faust/signals.lib"], "include_pathnames": ["/usr/local/share/faust","/usr/local/share/faust","/usr/share/faust","/Users/serj/work/music/pure-data/ceammc/faust","/Users/serj/work/music/pure-data/ceammc/faust"], - "inputs": "1", - "outputs": "1", + "inputs": 1, + "outputs": 1, "meta": [ - { "filename": "flt_notch" }, + { "filename": "flt_notch.dsp" }, { "filter.lib/author": "Julius O. Smith (jos at ccrma.stanford.edu)" }, { "filter.lib/copyright": "Julius O. Smith III" }, { "filter.lib/deprecated": "This library is deprecated and is not maintained anymore. It will be removed in August 2017." }, @@ -44,10 +44,10 @@ "meta": [ { "unit": "Hz" } ], - "init": "1000", - "min": "20", - "max": "20000", - "step": "0.1" + "init": 1000, + "min": 20, + "max": 20000, + "step": 0.1 }, { "type": "vslider", @@ -56,10 +56,10 @@ "meta": [ { "unit": "Hz" } ], - "init": "50", - "min": "1", - "max": "10000", - "step": "0.1" + "init": 50, + "min": 1, + "max": 10000, + "step": 0.1 } ] } diff --git a/ceammc/faust/flt_resonbp.dsp.json b/ceammc/faust/flt_resonbp.dsp.json index 2cce25c2ef..d032717d74 100644 --- a/ceammc/faust/flt_resonbp.dsp.json +++ b/ceammc/faust/flt_resonbp.dsp.json @@ -1,16 +1,31 @@ { "name": "flt.resonbp", - "filename": "flt_resonbp", - "version": "2.15.0", - "compile_options": "cpp, -scal -ftz 0", + "filename": "flt_resonbp.dsp", + "version": "2.22.1", + "compile_options": "-lang cpp -scal -ftz 0", "library_list": ["/usr/local/share/faust/stdfaust.lib","/usr/local/share/faust/filters.lib","/usr/local/share/faust/signals.lib","/usr/local/share/faust/maths.lib"], "include_pathnames": ["/usr/local/share/faust","/usr/local/share/faust","/usr/share/faust","/Users/serj/work/music/pure-data/ceammc/faust","/Users/serj/work/music/pure-data/ceammc/faust"], - "inputs": "1", - "outputs": "1", + "inputs": 1, + "outputs": 1, "meta": [ - { "filename": "flt_resonbp" }, + { "filename": "flt_resonbp.dsp" }, + { "filters.lib/fir:author": "Julius O. Smith III" }, + { "filters.lib/fir:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/fir:license": "MIT-style STK-4.3 license" }, + { "filters.lib/iir:author": "Julius O. Smith III" }, + { "filters.lib/iir:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/iir:license": "MIT-style STK-4.3 license" }, + { "filters.lib/lowpass0_highpass1": "Copyright (C) 2003-2019 by Julius O. Smith III " }, { "filters.lib/name": "Faust Filters Library" }, - { "filters.lib/version": "0.0" }, + { "filters.lib/resonbp:author": "Julius O. Smith III" }, + { "filters.lib/resonbp:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/resonbp:license": "MIT-style STK-4.3 license" }, + { "filters.lib/tf2:author": "Julius O. Smith III" }, + { "filters.lib/tf2:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/tf2:license": "MIT-style STK-4.3 license" }, + { "filters.lib/tf2s:author": "Julius O. Smith III" }, + { "filters.lib/tf2s:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/tf2s:license": "MIT-style STK-4.3 license" }, { "maths.lib/author": "GRAME" }, { "maths.lib/copyright": "GRAME" }, { "maths.lib/license": "LGPL with exception" }, @@ -32,19 +47,19 @@ "meta": [ { "unit": "Hz" } ], - "init": "1000", - "min": "20", - "max": "20000", - "step": "0.1" + "init": 1000, + "min": 20, + "max": 20000, + "step": 0.1 }, { "type": "vslider", "label": "q", "address": "/flt.resonbp/q", - "init": "80", - "min": "0.1", - "max": "300", - "step": "0.1" + "init": 80, + "min": 0.1, + "max": 300, + "step": 0.1 } ] } diff --git a/ceammc/faust/fx_bitdown.dsp.json b/ceammc/faust/fx_bitdown.dsp.json index 6760e11837..f6df98c65b 100644 --- a/ceammc/faust/fx_bitdown.dsp.json +++ b/ceammc/faust/fx_bitdown.dsp.json @@ -1,21 +1,21 @@ { "name": "fx.bitdown", - "filename": "fx_bitdown", - "version": "2.8.5", - "compile_options": "cpp, -scal -ftz 0", - "library_list": ["/usr/local/share/faust/stdfaust.lib","/usr/local/share/faust/basics.lib","/Users/serj/work/music/pd-exp/pure-data/ceammc/faust/ceammc_ui.lib"], - "include_pathnames": ["/Users/serj/work/music/pd-exp/pure-data/ceammc/faust","/usr/local/share/faust","/usr/share/faust"], - "inputs": "1", - "outputs": "1", + "filename": "fx_bitdown.dsp", + "version": "2.22.1", + "compile_options": "-lang cpp -scal -ftz 0", + "library_list": ["/usr/local/share/faust/stdfaust.lib","/usr/local/share/faust/basics.lib","/Users/serj/work/music/pure-data/ceammc/faust/ceammc_ui.lib"], + "include_pathnames": ["/usr/local/share/faust","/usr/local/share/faust","/usr/share/faust","/Users/serj/work/music/pure-data/ceammc/faust","/Users/serj/work/music/pure-data/ceammc/faust"], + "inputs": 1, + "outputs": 1, "meta": [ { "author": "Viacheslav Lotsmanov (unclechu)" }, { "basics.lib/name": "Faust Basic Element Library" }, - { "basics.lib/version": "0.0" }, + { "basics.lib/version": "0.1" }, { "category": "Distortion" }, { "ceammc_ui.lib/name": "CEAMMC faust default UI elements" }, { "ceammc_ui.lib/version": "0.1.1" }, { "copyright": "(c) Viacheslav Lotsmanov, 2015" }, - { "filename": "fx_bitdown" }, + { "filename": "fx_bitdown.dsp" }, { "license": "BSD" }, { "name": "fx.bitdown" } ], @@ -28,10 +28,10 @@ "type": "vslider", "label": "bits", "address": "/fx.bitdown/bits", - "init": "16", - "min": "1", - "max": "16", - "step": "0.1" + "init": 16, + "min": 1, + "max": 16, + "step": 0.1 }, { "type": "checkbox", @@ -42,10 +42,10 @@ "type": "vslider", "label": "downsamp", "address": "/fx.bitdown/downsamp", - "init": "1", - "min": "1", - "max": "200", - "step": "1" + "init": 1, + "min": 1, + "max": 200, + "step": 1 } ] } diff --git a/ceammc/faust/fx_chorus.dsp.json b/ceammc/faust/fx_chorus.dsp.json index 80e1d1ed6f..b873e3eefb 100644 --- a/ceammc/faust/fx_chorus.dsp.json +++ b/ceammc/faust/fx_chorus.dsp.json @@ -1,23 +1,23 @@ { "name": "fx.chorus", - "filename": "fx_chorus", - "version": "2.8.5", - "compile_options": "cpp, -scal -ftz 0", - "library_list": ["/usr/local/share/faust/stdfaust.lib","/Users/serj/work/music/pd-exp/pure-data/ceammc/faust/ceammc.lib","/usr/local/share/faust/signals.lib","/Users/serj/work/music/pd-exp/pure-data/ceammc/faust/ceammc_ui.lib","/usr/local/share/faust/basics.lib","/usr/local/share/faust/delays.lib","/usr/local/share/faust/maths.lib"], - "include_pathnames": ["/Users/serj/work/music/pd-exp/pure-data/ceammc/faust","/usr/local/share/faust","/usr/share/faust"], - "inputs": "1", - "outputs": "1", + "filename": "fx_chorus.dsp", + "version": "2.22.1", + "compile_options": "-lang cpp -scal -ftz 0", + "library_list": ["/usr/local/share/faust/stdfaust.lib","/Users/serj/work/music/pure-data/ceammc/faust/ceammc.lib","/usr/local/share/faust/signals.lib","/Users/serj/work/music/pure-data/ceammc/faust/ceammc_ui.lib","/usr/local/share/faust/basics.lib","/usr/local/share/faust/delays.lib","/usr/local/share/faust/maths.lib"], + "include_pathnames": ["/usr/local/share/faust","/usr/local/share/faust","/usr/share/faust","/Users/serj/work/music/pure-data/ceammc/faust","/Users/serj/work/music/pure-data/ceammc/faust"], + "inputs": 1, + "outputs": 1, "meta": [ { "author": "Albert Graef" }, { "basics.lib/name": "Faust Basic Element Library" }, - { "basics.lib/version": "0.0" }, + { "basics.lib/version": "0.1" }, { "ceammc.lib/name": "Ceammc PureData misc utils" }, { "ceammc.lib/version": "0.1.1" }, { "ceammc_ui.lib/name": "CEAMMC faust default UI elements" }, { "ceammc_ui.lib/version": "0.1.1" }, { "delays.lib/name": "Faust Delay Library" }, - { "delays.lib/version": "0.0" }, - { "filename": "fx_chorus" }, + { "delays.lib/version": "0.1" }, + { "filename": "fx_chorus.dsp" }, { "maths.lib/author": "GRAME" }, { "maths.lib/copyright": "GRAME" }, { "maths.lib/license": "LGPL with exception" }, @@ -45,10 +45,10 @@ "meta": [ { "unit": "ms" } ], - "init": "25", - "min": "0", - "max": "200", - "step": "0.001" + "init": 25, + "min": 0, + "max": 200, + "step": 0.001 }, { "type": "hslider", @@ -57,10 +57,10 @@ "meta": [ { "style": "knob" } ], - "init": "0.02", - "min": "0", - "max": "1", - "step": "0.001" + "init": 0.02, + "min": 0, + "max": 1, + "step": 0.001 }, { "type": "hslider", @@ -69,10 +69,10 @@ "meta": [ { "style": "knob" } ], - "init": "1", - "min": "0", - "max": "1", - "step": "0.01" + "init": 1, + "min": 0, + "max": 1, + "step": 0.01 }, { "type": "hslider", @@ -81,10 +81,10 @@ "meta": [ { "unit": "Hz" } ], - "init": "3", - "min": "0", - "max": "10", - "step": "0.01" + "init": 3, + "min": 0, + "max": 10, + "step": 0.01 } ] } diff --git a/ceammc/faust/fx_distortion.dsp.json b/ceammc/faust/fx_distortion.dsp.json index 966f6eda47..3614166785 100644 --- a/ceammc/faust/fx_distortion.dsp.json +++ b/ceammc/faust/fx_distortion.dsp.json @@ -1,22 +1,31 @@ { "name": "fx.distortion", - "filename": "fx_distortion", - "version": "2.8.5", - "compile_options": "cpp, -scal -ftz 0", - "library_list": ["/Users/serj/work/music/pd-exp/pure-data/ceammc/faust/ceammc.lib","/usr/local/share/faust/misceffects.lib","/usr/local/share/faust/signals.lib","/usr/local/share/faust/filters.lib","/Users/serj/work/music/pd-exp/pure-data/ceammc/faust/ceammc_ui.lib","/usr/local/share/faust/basics.lib"], - "include_pathnames": ["/Users/serj/work/music/pd-exp/pure-data/ceammc/faust","/usr/local/share/faust","/usr/share/faust"], - "inputs": "1", - "outputs": "1", + "filename": "fx_distortion.dsp", + "version": "2.22.1", + "compile_options": "-lang cpp -scal -ftz 0", + "library_list": ["/Users/serj/work/music/pure-data/ceammc/faust/ceammc.lib","/usr/local/share/faust/misceffects.lib","/usr/local/share/faust/signals.lib","/usr/local/share/faust/filters.lib","/Users/serj/work/music/pure-data/ceammc/faust/ceammc_ui.lib","/usr/local/share/faust/basics.lib"], + "include_pathnames": ["/usr/local/share/faust","/usr/local/share/faust","/usr/share/faust","/Users/serj/work/music/pure-data/ceammc/faust","/Users/serj/work/music/pure-data/ceammc/faust"], + "inputs": 1, + "outputs": 1, "meta": [ { "basics.lib/name": "Faust Basic Element Library" }, - { "basics.lib/version": "0.0" }, + { "basics.lib/version": "0.1" }, { "ceammc.lib/name": "Ceammc PureData misc utils" }, { "ceammc.lib/version": "0.1.1" }, { "ceammc_ui.lib/name": "CEAMMC faust default UI elements" }, { "ceammc_ui.lib/version": "0.1.1" }, - { "filename": "fx_distortion" }, + { "filename": "fx_distortion.dsp" }, + { "filters.lib/dcblocker:author": "Julius O. Smith III" }, + { "filters.lib/dcblocker:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/dcblocker:license": "MIT-style STK-4.3 license" }, + { "filters.lib/lowpass0_highpass1": "Copyright (C) 2003-2019 by Julius O. Smith III " }, { "filters.lib/name": "Faust Filters Library" }, - { "filters.lib/version": "0.0" }, + { "filters.lib/pole:author": "Julius O. Smith III" }, + { "filters.lib/pole:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/pole:license": "MIT-style STK-4.3 license" }, + { "filters.lib/zero:author": "Julius O. Smith III" }, + { "filters.lib/zero:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/zero:license": "MIT-style STK-4.3 license" }, { "misceffects.lib/name": "Faust Math Library" }, { "misceffects.lib/version": "2.0" }, { "name": "fx.distortion" }, @@ -37,10 +46,10 @@ "type": "vslider", "label": "drive", "address": "/fx.distortion/drive", - "init": "0.5", - "min": "0", - "max": "1", - "step": "0.001" + "init": 0.5, + "min": 0, + "max": 1, + "step": 0.001 }, { "type": "hslider", @@ -49,19 +58,19 @@ "meta": [ { "style": "knob" } ], - "init": "1", - "min": "0", - "max": "1", - "step": "0.01" + "init": 1, + "min": 0, + "max": 1, + "step": 0.01 }, { "type": "vslider", "label": "offset", "address": "/fx.distortion/offset", - "init": "0", - "min": "0", - "max": "0.5", - "step": "0.001" + "init": 0, + "min": 0, + "max": 0.5, + "step": 0.001 } ] } diff --git a/ceammc/faust/fx_distortion1.dsp.json b/ceammc/faust/fx_distortion1.dsp.json index d6619f3cc7..87670962c0 100644 --- a/ceammc/faust/fx_distortion1.dsp.json +++ b/ceammc/faust/fx_distortion1.dsp.json @@ -1,23 +1,56 @@ { "name": "fx.distortion1", - "filename": "fx_distortion1", - "version": "2.17.3", - "compile_options": "cpp, -scal -ftz 0", + "filename": "fx_distortion1.dsp", + "version": "2.22.1", + "compile_options": "-lang cpp -scal -ftz 0", "library_list": ["/usr/local/share/faust/maxmsp.lib","/Users/serj/work/music/pure-data/ceammc/faust/guitarix.lib","/usr/local/share/faust/stdfaust.lib","/usr/local/share/faust/delays.lib","/usr/local/share/faust/basics.lib","/usr/local/share/faust/filters.lib","/usr/local/share/faust/maths.lib","/usr/local/share/faust/misceffects.lib","/Users/serj/work/music/pure-data/ceammc/faust/HighShelf.dsp"], "include_pathnames": ["/usr/local/share/faust","/usr/local/share/faust","/usr/share/faust","/Users/serj/work/music/pure-data/ceammc/faust","/Users/serj/work/music/pure-data/ceammc/faust"], - "inputs": "1", - "outputs": "1", + "inputs": 1, + "outputs": 1, "meta": [ { "HighShelf.dsp/id": "HighShelf" }, { "author": "brummer" }, { "basics.lib/name": "Faust Basic Element Library" }, - { "basics.lib/version": "0.0" }, + { "basics.lib/version": "0.1" }, { "copyright": "(c)brummer 2008" }, { "delays.lib/name": "Faust Delay Library" }, { "delays.lib/version": "0.1" }, - { "filename": "fx_distortion1" }, + { "filename": "fx_distortion1.dsp" }, + { "filters.lib/dcblockerat:author": "Julius O. Smith III" }, + { "filters.lib/dcblockerat:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/dcblockerat:license": "MIT-style STK-4.3 license" }, + { "filters.lib/fir:author": "Julius O. Smith III" }, + { "filters.lib/fir:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/fir:license": "MIT-style STK-4.3 license" }, + { "filters.lib/highpass:author": "Julius O. Smith III" }, + { "filters.lib/highpass:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/iir:author": "Julius O. Smith III" }, + { "filters.lib/iir:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/iir:license": "MIT-style STK-4.3 license" }, + { "filters.lib/lowpass0_highpass1": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/lowpass0_highpass1:author": "Julius O. Smith III" }, + { "filters.lib/lowpass:author": "Julius O. Smith III" }, + { "filters.lib/lowpass:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/lowpass:license": "MIT-style STK-4.3 license" }, { "filters.lib/name": "Faust Filters Library" }, - { "filters.lib/version": "0.0" }, + { "filters.lib/pole:author": "Julius O. Smith III" }, + { "filters.lib/pole:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/pole:license": "MIT-style STK-4.3 license" }, + { "filters.lib/tf1:author": "Julius O. Smith III" }, + { "filters.lib/tf1:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/tf1:license": "MIT-style STK-4.3 license" }, + { "filters.lib/tf1s:author": "Julius O. Smith III" }, + { "filters.lib/tf1s:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/tf1s:license": "MIT-style STK-4.3 license" }, + { "filters.lib/tf2:author": "Julius O. Smith III" }, + { "filters.lib/tf2:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/tf2:license": "MIT-style STK-4.3 license" }, + { "filters.lib/tf2s:author": "Julius O. Smith III" }, + { "filters.lib/tf2s:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/tf2s:license": "MIT-style STK-4.3 license" }, + { "filters.lib/zero:author": "Julius O. Smith III" }, + { "filters.lib/zero:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/zero:license": "MIT-style STK-4.3 license" }, { "license": "BSD" }, { "maths.lib/author": "GRAME" }, { "maths.lib/copyright": "GRAME" }, @@ -43,10 +76,10 @@ "type": "vslider", "label": "drive", "address": "/fx.distortion1/drive", - "init": "0.64", - "min": "0", - "max": "1", - "step": "0.01" + "init": 0.64, + "min": 0, + "max": 1, + "step": 0.01 }, { "type": "vslider", @@ -55,19 +88,19 @@ "meta": [ { "unit": "db" } ], - "init": "2", - "min": "-10", - "max": "10", - "step": "0.1" + "init": 2, + "min": -10, + "max": 10, + "step": 0.1 }, { "type": "vslider", "label": "high_drive", "address": "/fx.distortion1/high_drive", - "init": "1", - "min": "0", - "max": "1", - "step": "0.01" + "init": 1, + "min": 0, + "max": 1, + "step": 0.01 }, { "type": "vslider", @@ -76,28 +109,28 @@ "meta": [ { "unit": "db" } ], - "init": "10", - "min": "-10", - "max": "20", - "step": "0.1" + "init": 10, + "min": -10, + "max": 20, + "step": 0.1 }, { "type": "vslider", "label": "level", "address": "/fx.distortion1/level", - "init": "0.01", - "min": "0", - "max": "0.5", - "step": "0.01" + "init": 0.01, + "min": 0, + "max": 0.5, + "step": 0.01 }, { "type": "vslider", "label": "low_drive", "address": "/fx.distortion1/low_drive", - "init": "1", - "min": "0", - "max": "1", - "step": "0.01" + "init": 1, + "min": 0, + "max": 1, + "step": 0.01 }, { "type": "vslider", @@ -106,10 +139,10 @@ "meta": [ { "unit": "db" } ], - "init": "10", - "min": "-10", - "max": "20", - "step": "0.1" + "init": 10, + "min": -10, + "max": 20, + "step": 0.1 }, { "type": "hgroup", @@ -122,10 +155,10 @@ "meta": [ { "unit": "Hz" } ], - "init": "5000", - "min": "1000", - "max": "12000", - "step": "10" + "init": 5000, + "min": 1000, + "max": 12000, + "step": 10 }, { "type": "vslider", @@ -134,10 +167,10 @@ "meta": [ { "unit": "Hz" } ], - "init": "130", - "min": "20", - "max": "1000", - "step": "10" + "init": 130, + "min": 20, + "max": 1000, + "step": 10 }, { "type": "checkbox", @@ -162,10 +195,10 @@ "meta": [ { "unit": "Hz" } ], - "init": "130", - "min": "20", - "max": "7040", - "step": "10" + "init": 130, + "min": 20, + "max": 7040, + "step": 10 }, { "type": "nentry", @@ -174,10 +207,10 @@ "meta": [ { "unit": "Hz" } ], - "init": "5000", - "min": "20", - "max": "12000", - "step": "10" + "init": 5000, + "min": 20, + "max": 12000, + "step": 10 } ] }, @@ -185,10 +218,10 @@ "type": "vslider", "label": "middle_h_drive", "address": "/fx.distortion1/middle_h_drive", - "init": "1", - "min": "0", - "max": "1", - "step": "0.01" + "init": 1, + "min": 0, + "max": 1, + "step": 0.01 }, { "type": "vslider", @@ -197,19 +230,19 @@ "meta": [ { "unit": "db" } ], - "init": "10", - "min": "-10", - "max": "20", - "step": "0.1" + "init": 10, + "min": -10, + "max": 20, + "step": 0.1 }, { "type": "vslider", "label": "middle_l_drive", "address": "/fx.distortion1/middle_l_drive", - "init": "1", - "min": "0", - "max": "1", - "step": "0.01" + "init": 1, + "min": 0, + "max": 1, + "step": 0.01 }, { "type": "vslider", @@ -218,10 +251,10 @@ "meta": [ { "unit": "db" } ], - "init": "10", - "min": "-10", - "max": "20", - "step": "0.1" + "init": 10, + "min": -10, + "max": 20, + "step": 0.1 }, { "type": "checkbox", @@ -235,10 +268,10 @@ "meta": [ { "unit": "Hz" } ], - "init": "1250", - "min": "1250", - "max": "12000", - "step": "10" + "init": 1250, + "min": 1250, + "max": 12000, + "step": 10 }, { "type": "nentry", @@ -247,10 +280,10 @@ "meta": [ { "unit": "Hz" } ], - "init": "250", - "min": "20", - "max": "600", - "step": "10" + "init": 250, + "min": 20, + "max": 600, + "step": 10 }, { "type": "nentry", @@ -259,28 +292,28 @@ "meta": [ { "unit": "Hz" } ], - "init": "650", - "min": "600", - "max": "1250", - "step": "10" + "init": 650, + "min": 600, + "max": 1250, + "step": 10 }, { "type": "vslider", "label": "trigger", "address": "/fx.distortion1/trigger", - "init": "0.12", - "min": "0", - "max": "1", - "step": "0.01" + "init": 0.12, + "min": 0, + "max": 1, + "step": 0.01 }, { "type": "vslider", "label": "vibrato", "address": "/fx.distortion1/vibrato", - "init": "1", - "min": "0", - "max": "1", - "step": "0.01" + "init": 1, + "min": 0, + "max": 1, + "step": 0.01 } ] } diff --git a/ceammc/faust/fx_distortion2.dsp.json b/ceammc/faust/fx_distortion2.dsp.json index 27a37172cd..9d511449db 100644 --- a/ceammc/faust/fx_distortion2.dsp.json +++ b/ceammc/faust/fx_distortion2.dsp.json @@ -1,23 +1,56 @@ { "name": "fx.distortion2", - "filename": "fx_distortion2", - "version": "2.17.3", - "compile_options": "cpp, -scal -ftz 0", + "filename": "fx_distortion2.dsp", + "version": "2.22.1", + "compile_options": "-lang cpp -scal -ftz 0", "library_list": ["/Users/serj/work/music/pure-data/ceammc/faust/guitarix.lib","/usr/local/share/faust/stdfaust.lib","/usr/local/share/faust/delays.lib","/usr/local/share/faust/basics.lib","/usr/local/share/faust/filters.lib","/usr/local/share/faust/maths.lib","/usr/local/share/faust/misceffects.lib","/Users/serj/work/music/pure-data/ceammc/faust/HighShelf.dsp","/usr/local/share/faust/maxmsp.lib","/usr/local/share/faust/signals.lib"], "include_pathnames": ["/usr/local/share/faust","/usr/local/share/faust","/usr/share/faust","/Users/serj/work/music/pure-data/ceammc/faust","/Users/serj/work/music/pure-data/ceammc/faust"], - "inputs": "1", - "outputs": "1", + "inputs": 1, + "outputs": 1, "meta": [ { "HighShelf.dsp/id": "HighShelf" }, { "author": "brummer" }, { "basics.lib/name": "Faust Basic Element Library" }, - { "basics.lib/version": "0.0" }, + { "basics.lib/version": "0.1" }, { "copyright": "(c)brummer 2008" }, { "delays.lib/name": "Faust Delay Library" }, { "delays.lib/version": "0.1" }, - { "filename": "fx_distortion2" }, + { "filename": "fx_distortion2.dsp" }, + { "filters.lib/dcblockerat:author": "Julius O. Smith III" }, + { "filters.lib/dcblockerat:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/dcblockerat:license": "MIT-style STK-4.3 license" }, + { "filters.lib/fir:author": "Julius O. Smith III" }, + { "filters.lib/fir:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/fir:license": "MIT-style STK-4.3 license" }, + { "filters.lib/highpass:author": "Julius O. Smith III" }, + { "filters.lib/highpass:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/iir:author": "Julius O. Smith III" }, + { "filters.lib/iir:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/iir:license": "MIT-style STK-4.3 license" }, + { "filters.lib/lowpass0_highpass1": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/lowpass0_highpass1:author": "Julius O. Smith III" }, + { "filters.lib/lowpass:author": "Julius O. Smith III" }, + { "filters.lib/lowpass:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/lowpass:license": "MIT-style STK-4.3 license" }, { "filters.lib/name": "Faust Filters Library" }, - { "filters.lib/version": "0.0" }, + { "filters.lib/pole:author": "Julius O. Smith III" }, + { "filters.lib/pole:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/pole:license": "MIT-style STK-4.3 license" }, + { "filters.lib/tf1:author": "Julius O. Smith III" }, + { "filters.lib/tf1:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/tf1:license": "MIT-style STK-4.3 license" }, + { "filters.lib/tf1s:author": "Julius O. Smith III" }, + { "filters.lib/tf1s:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/tf1s:license": "MIT-style STK-4.3 license" }, + { "filters.lib/tf2:author": "Julius O. Smith III" }, + { "filters.lib/tf2:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/tf2:license": "MIT-style STK-4.3 license" }, + { "filters.lib/tf2s:author": "Julius O. Smith III" }, + { "filters.lib/tf2s:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/tf2s:license": "MIT-style STK-4.3 license" }, + { "filters.lib/zero:author": "Julius O. Smith III" }, + { "filters.lib/zero:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/zero:license": "MIT-style STK-4.3 license" }, { "license": "BSD" }, { "maths.lib/author": "GRAME" }, { "maths.lib/copyright": "GRAME" }, @@ -45,10 +78,10 @@ "type": "vslider", "label": "drive", "address": "/fx.distortion2/drive", - "init": "0.64", - "min": "0", - "max": "1", - "step": "0.01" + "init": 0.64, + "min": 0, + "max": 1, + "step": 0.01 }, { "type": "vslider", @@ -57,19 +90,19 @@ "meta": [ { "unit": "db" } ], - "init": "2", - "min": "-10", - "max": "10", - "step": "0.1" + "init": 2, + "min": -10, + "max": 10, + "step": 0.1 }, { "type": "vslider", "label": "level", "address": "/fx.distortion2/level", - "init": "0.01", - "min": "0", - "max": "0.5", - "step": "0.01" + "init": 0.01, + "min": 0, + "max": 0.5, + "step": 0.01 }, { "type": "hgroup", @@ -82,10 +115,10 @@ "meta": [ { "unit": "Hz" } ], - "init": "5000", - "min": "1000", - "max": "12000", - "step": "10" + "init": 5000, + "min": 1000, + "max": 12000, + "step": 10 }, { "type": "vslider", @@ -94,10 +127,10 @@ "meta": [ { "unit": "Hz" } ], - "init": "130", - "min": "20", - "max": "1000", - "step": "10" + "init": 130, + "min": 20, + "max": 1000, + "step": 10 }, { "type": "checkbox", @@ -122,10 +155,10 @@ "meta": [ { "unit": "Hz" } ], - "init": "130", - "min": "20", - "max": "7040", - "step": "10" + "init": 130, + "min": 20, + "max": 7040, + "step": 10 }, { "type": "nentry", @@ -134,10 +167,10 @@ "meta": [ { "unit": "Hz" } ], - "init": "5000", - "min": "20", - "max": "12000", - "step": "10" + "init": 5000, + "min": 20, + "max": 12000, + "step": 10 } ] }, @@ -150,19 +183,19 @@ "type": "vslider", "label": "trigger", "address": "/fx.distortion2/trigger", - "init": "0.12", - "min": "0", - "max": "1", - "step": "0.01" + "init": 0.12, + "min": 0, + "max": 1, + "step": 0.01 }, { "type": "vslider", "label": "vibrato", "address": "/fx.distortion2/vibrato", - "init": "1", - "min": "0", - "max": "1", - "step": "0.01" + "init": 1, + "min": 0, + "max": 1, + "step": 0.01 } ] } diff --git a/ceammc/faust/fx_distortion3.dsp.json b/ceammc/faust/fx_distortion3.dsp.json index 70ea0c5198..b3f8c98ad8 100644 --- a/ceammc/faust/fx_distortion3.dsp.json +++ b/ceammc/faust/fx_distortion3.dsp.json @@ -1,24 +1,48 @@ { "name": "fx.distortion3", - "filename": "fx_distortion3", - "version": "2.17.3", - "compile_options": "cpp, -scal -ftz 0", + "filename": "fx_distortion3.dsp", + "version": "2.22.1", + "compile_options": "-lang cpp -scal -ftz 0", "library_list": ["/Users/serj/work/music/pure-data/ceammc/faust/guitarix.lib","/usr/local/share/faust/stdfaust.lib","/Users/serj/work/music/pure-data/ceammc/faust/ceammc.lib","/usr/local/share/faust/filters.lib","/usr/local/share/faust/maths.lib","/usr/local/share/faust/basics.lib","/usr/local/share/faust/signals.lib","/Users/serj/work/music/pure-data/ceammc/faust/ceammc_ui.lib"], "include_pathnames": ["/usr/local/share/faust","/usr/local/share/faust","/usr/share/faust","/Users/serj/work/music/pure-data/ceammc/faust","/Users/serj/work/music/pure-data/ceammc/faust"], - "inputs": "1", - "outputs": "1", + "inputs": 1, + "outputs": 1, "meta": [ { "basics.lib/name": "Faust Basic Element Library" }, - { "basics.lib/version": "0.0" }, + { "basics.lib/version": "0.1" }, { "category": "Distortion" }, { "ceammc.lib/name": "Ceammc PureData misc utils" }, { "ceammc.lib/version": "0.1.1" }, { "ceammc_ui.lib/name": "CEAMMC faust default UI elements" }, { "ceammc_ui.lib/version": "0.1.1" }, { "description": "A simple Wavesharper distortion" }, - { "filename": "fx_distortion3" }, + { "filename": "fx_distortion3.dsp" }, + { "filters.lib/fir:author": "Julius O. Smith III" }, + { "filters.lib/fir:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/fir:license": "MIT-style STK-4.3 license" }, + { "filters.lib/highpass:author": "Julius O. Smith III" }, + { "filters.lib/highpass:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/iir:author": "Julius O. Smith III" }, + { "filters.lib/iir:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/iir:license": "MIT-style STK-4.3 license" }, + { "filters.lib/lowpass0_highpass1": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/lowpass0_highpass1:author": "Julius O. Smith III" }, + { "filters.lib/lowpass:author": "Julius O. Smith III" }, + { "filters.lib/lowpass:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/lowpass:license": "MIT-style STK-4.3 license" }, { "filters.lib/name": "Faust Filters Library" }, - { "filters.lib/version": "0.0" }, + { "filters.lib/tf1:author": "Julius O. Smith III" }, + { "filters.lib/tf1:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/tf1:license": "MIT-style STK-4.3 license" }, + { "filters.lib/tf1s:author": "Julius O. Smith III" }, + { "filters.lib/tf1s:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/tf1s:license": "MIT-style STK-4.3 license" }, + { "filters.lib/tf2:author": "Julius O. Smith III" }, + { "filters.lib/tf2:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/tf2:license": "MIT-style STK-4.3 license" }, + { "filters.lib/tf2s:author": "Julius O. Smith III" }, + { "filters.lib/tf2s:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/tf2s:license": "MIT-style STK-4.3 license" }, { "id": "distortion3" }, { "maths.lib/author": "GRAME" }, { "maths.lib/copyright": "GRAME" }, @@ -46,10 +70,10 @@ "meta": [ { "tooltip": "Distortion Level" } ], - "init": "0.5", - "min": "0", - "max": "1", - "step": "1" + "init": 0.5, + "min": 0, + "max": 1, + "step": 1 }, { "type": "hslider", @@ -58,10 +82,10 @@ "meta": [ { "style": "knob" } ], - "init": "1", - "min": "0", - "max": "1", - "step": "0.01" + "init": 1, + "min": 0, + "max": 1, + "step": 0.01 }, { "type": "vslider", @@ -70,10 +94,10 @@ "meta": [ { "unit": "db" } ], - "init": "0", - "min": "-30", - "max": "10", - "step": "0.1" + "init": 0, + "min": -30, + "max": 10, + "step": 0.1 }, { "type": "vslider", @@ -82,10 +106,10 @@ "meta": [ { "unit": "Hz" } ], - "init": "30", - "min": "20", - "max": "2000", - "step": "1.08" + "init": 30, + "min": 20, + "max": 2000, + "step": 1.08 }, { "type": "vslider", @@ -94,10 +118,10 @@ "meta": [ { "unit": "Hz" } ], - "init": "10000", - "min": "1000", - "max": "20000", - "step": "1.08" + "init": 10000, + "min": 1000, + "max": 20000, + "step": 1.08 } ] } diff --git a/ceammc/faust/fx_drive.dsp.json b/ceammc/faust/fx_drive.dsp.json index 976f68dc09..722034ffb9 100644 --- a/ceammc/faust/fx_drive.dsp.json +++ b/ceammc/faust/fx_drive.dsp.json @@ -1,18 +1,18 @@ { "name": "fx.drive", - "filename": "fx_drive", - "version": "2.8.5", - "compile_options": "cpp, -scal -ftz 0", - "library_list": ["/Users/serj/work/music/pd-exp/pure-data/ceammc/faust/guitarix.lib","/usr/local/share/faust/basics.lib","/usr/local/share/faust/signals.lib","/Users/serj/work/music/pd-exp/pure-data/ceammc/faust/ceammc_ui.lib"], - "include_pathnames": ["/Users/serj/work/music/pd-exp/pure-data/ceammc/faust","/usr/local/share/faust","/usr/share/faust"], - "inputs": "1", - "outputs": "1", + "filename": "fx_drive.dsp", + "version": "2.22.1", + "compile_options": "-lang cpp -scal -ftz 0", + "library_list": ["/Users/serj/work/music/pure-data/ceammc/faust/guitarix.lib","/usr/local/share/faust/basics.lib","/usr/local/share/faust/signals.lib","/Users/serj/work/music/pure-data/ceammc/faust/ceammc_ui.lib"], + "include_pathnames": ["/usr/local/share/faust","/usr/local/share/faust","/usr/share/faust","/Users/serj/work/music/pure-data/ceammc/faust","/Users/serj/work/music/pure-data/ceammc/faust"], + "inputs": 1, + "outputs": 1, "meta": [ { "basics.lib/name": "Faust Basic Element Library" }, - { "basics.lib/version": "0.0" }, + { "basics.lib/version": "0.1" }, { "ceammc_ui.lib/name": "CEAMMC faust default UI elements" }, { "ceammc_ui.lib/version": "0.1.1" }, - { "filename": "fx_drive" }, + { "filename": "fx_drive.dsp" }, { "name": "fx.drive" }, { "signals.lib/name": "Faust Signal Routing Library" }, { "signals.lib/version": "0.0" } @@ -31,10 +31,10 @@ "type": "vslider", "label": "drive", "address": "/fx.drive/drive", - "init": "1", - "min": "1", - "max": "10", - "step": "1" + "init": 1, + "min": 1, + "max": 10, + "step": 1 } ] } diff --git a/ceammc/faust/fx_drone_box.dsp.json b/ceammc/faust/fx_drone_box.dsp.json index 5246da27d7..7df36bb4cc 100644 --- a/ceammc/faust/fx_drone_box.dsp.json +++ b/ceammc/faust/fx_drone_box.dsp.json @@ -1,25 +1,25 @@ { "name": "fx.drone_box", - "filename": "fx_drone_box", - "version": "2.15.0", - "compile_options": "cpp, -scal -ftz 0", + "filename": "fx_drone_box.dsp", + "version": "2.22.1", + "compile_options": "-lang cpp -scal -ftz 0", "library_list": ["/usr/local/share/faust/stdfaust.lib","/Users/serj/work/music/pure-data/ceammc/faust/ceammc.lib","/Users/serj/work/music/pure-data/ceammc/faust/ceammc_ui.lib","/usr/local/share/faust/basics.lib","/usr/local/share/faust/signals.lib","/usr/local/share/faust/delays.lib","/usr/local/share/faust/maths.lib"], "include_pathnames": ["/usr/local/share/faust","/usr/local/share/faust","/usr/share/faust","/Users/serj/work/music/pure-data/ceammc/faust","/Users/serj/work/music/pure-data/ceammc/faust"], - "inputs": "1", - "outputs": "1", + "inputs": 1, + "outputs": 1, "meta": [ { "author": "Oli Larkin (contact@olilarkin.co.uk)" }, { "basics.lib/name": "Faust Basic Element Library" }, - { "basics.lib/version": "0.0" }, + { "basics.lib/version": "0.1" }, { "ceammc.lib/name": "Ceammc PureData misc utils" }, { "ceammc.lib/version": "0.1.1" }, { "ceammc_ui.lib/name": "CEAMMC faust default UI elements" }, { "ceammc_ui.lib/version": "0.1.1" }, { "copyright": "Oliver Larkin" }, { "delays.lib/name": "Faust Delay Library" }, - { "delays.lib/version": "0.0" }, + { "delays.lib/version": "0.1" }, { "description": "Mono Sympathetic Resonance Generator" }, - { "filename": "fx_drone_box" }, + { "filename": "fx_drone_box.dsp" }, { "licence": "GPL" }, { "maths.lib/author": "GRAME" }, { "maths.lib/copyright": "GRAME" }, @@ -48,10 +48,10 @@ "meta": [ { "unit": "ms" } ], - "init": "4000", - "min": "100", - "max": "120000", - "step": "1" + "init": 4000, + "min": 100, + "max": 120000, + "step": 1 }, { "type": "hslider", @@ -60,10 +60,10 @@ "meta": [ { "style": "knob" } ], - "init": "0.5", - "min": "0", - "max": "1", - "step": "0.01" + "init": 0.5, + "min": 0, + "max": 1, + "step": 0.01 }, { "type": "hslider", @@ -72,10 +72,10 @@ "meta": [ { "unit": "semitones" } ], - "init": "48", - "min": "36", - "max": "60", - "step": "0.001" + "init": 48, + "min": 36, + "max": 60, + "step": 0.001 } ] } diff --git a/ceammc/faust/fx_echo.dsp.json b/ceammc/faust/fx_echo.dsp.json index b61ee2793a..deeaa1ddc1 100644 --- a/ceammc/faust/fx_echo.dsp.json +++ b/ceammc/faust/fx_echo.dsp.json @@ -1,22 +1,22 @@ { "name": "fx.echo", - "filename": "fx_echo", - "version": "2.8.5", - "compile_options": "cpp, -scal -ftz 0", - "library_list": ["/usr/local/share/faust/stdfaust.lib","/Users/serj/work/music/pd-exp/pure-data/ceammc/faust/ceammc.lib","/usr/local/share/faust/misceffects.lib","/usr/local/share/faust/signals.lib","/usr/local/share/faust/delays.lib","/usr/local/share/faust/basics.lib","/usr/local/share/faust/maths.lib","/Users/serj/work/music/pd-exp/pure-data/ceammc/faust/ceammc_ui.lib"], - "include_pathnames": ["/Users/serj/work/music/pd-exp/pure-data/ceammc/faust","/usr/local/share/faust","/usr/share/faust"], - "inputs": "1", - "outputs": "1", + "filename": "fx_echo.dsp", + "version": "2.22.1", + "compile_options": "-lang cpp -scal -ftz 0", + "library_list": ["/usr/local/share/faust/stdfaust.lib","/Users/serj/work/music/pure-data/ceammc/faust/ceammc.lib","/usr/local/share/faust/misceffects.lib","/usr/local/share/faust/signals.lib","/usr/local/share/faust/delays.lib","/usr/local/share/faust/maths.lib","/Users/serj/work/music/pure-data/ceammc/faust/ceammc_ui.lib","/usr/local/share/faust/basics.lib"], + "include_pathnames": ["/usr/local/share/faust","/usr/local/share/faust","/usr/share/faust","/Users/serj/work/music/pure-data/ceammc/faust","/Users/serj/work/music/pure-data/ceammc/faust"], + "inputs": 1, + "outputs": 1, "meta": [ { "basics.lib/name": "Faust Basic Element Library" }, - { "basics.lib/version": "0.0" }, + { "basics.lib/version": "0.1" }, { "ceammc.lib/name": "Ceammc PureData misc utils" }, { "ceammc.lib/version": "0.1.1" }, { "ceammc_ui.lib/name": "CEAMMC faust default UI elements" }, { "ceammc_ui.lib/version": "0.1.1" }, { "delays.lib/name": "Faust Delay Library" }, - { "delays.lib/version": "0.0" }, - { "filename": "fx_echo" }, + { "delays.lib/version": "0.1" }, + { "filename": "fx_echo.dsp" }, { "maths.lib/author": "GRAME" }, { "maths.lib/copyright": "GRAME" }, { "maths.lib/license": "LGPL with exception" }, @@ -45,10 +45,10 @@ "meta": [ { "unit": "ms" } ], - "init": "500", - "min": "10", - "max": "10000", - "step": "1" + "init": 500, + "min": 10, + "max": 10000, + "step": 1 }, { "type": "hslider", @@ -57,19 +57,19 @@ "meta": [ { "style": "knob" } ], - "init": "1", - "min": "0", - "max": "1", - "step": "0.01" + "init": 1, + "min": 0, + "max": 1, + "step": 0.01 }, { "type": "hslider", "label": "feedback", "address": "/fx.echo/feedback", - "init": "0.3", - "min": "0", - "max": "0.99", - "step": "0.001" + "init": 0.3, + "min": 0, + "max": 0.99, + "step": 0.001 } ] } diff --git a/ceammc/faust/fx_flanger.dsp.json b/ceammc/faust/fx_flanger.dsp.json index 582149b5f4..f55499cb15 100644 --- a/ceammc/faust/fx_flanger.dsp.json +++ b/ceammc/faust/fx_flanger.dsp.json @@ -1,24 +1,27 @@ { "name": "fx.flanger", - "filename": "fx_flanger", - "version": "2.15.0", - "compile_options": "cpp, -scal -ftz 0", + "filename": "fx_flanger.dsp", + "version": "2.22.1", + "compile_options": "-lang cpp -scal -ftz 0", "library_list": ["/Users/serj/work/music/pure-data/ceammc/faust/ceammc.lib","/usr/local/share/faust/phaflangers.lib","/usr/local/share/faust/signals.lib","/usr/local/share/faust/maths.lib","/usr/local/share/faust/oscillators.lib","/usr/local/share/faust/filters.lib","/usr/local/share/faust/delays.lib","/Users/serj/work/music/pure-data/ceammc/faust/ceammc_ui.lib","/usr/local/share/faust/basics.lib"], "include_pathnames": ["/usr/local/share/faust","/usr/local/share/faust","/usr/share/faust","/Users/serj/work/music/pure-data/ceammc/faust","/Users/serj/work/music/pure-data/ceammc/faust"], - "inputs": "1", - "outputs": "1", + "inputs": 1, + "outputs": 1, "meta": [ { "basics.lib/name": "Faust Basic Element Library" }, - { "basics.lib/version": "0.0" }, + { "basics.lib/version": "0.1" }, { "ceammc.lib/name": "Ceammc PureData misc utils" }, { "ceammc.lib/version": "0.1.1" }, { "ceammc_ui.lib/name": "CEAMMC faust default UI elements" }, { "ceammc_ui.lib/version": "0.1.1" }, { "delays.lib/name": "Faust Delay Library" }, - { "delays.lib/version": "0.0" }, - { "filename": "fx_flanger" }, + { "delays.lib/version": "0.1" }, + { "filename": "fx_flanger.dsp" }, + { "filters.lib/lowpass0_highpass1": "Copyright (C) 2003-2019 by Julius O. Smith III " }, { "filters.lib/name": "Faust Filters Library" }, - { "filters.lib/version": "0.0" }, + { "filters.lib/nlf2:author": "Julius O. Smith III" }, + { "filters.lib/nlf2:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/nlf2:license": "MIT-style STK-4.3 license" }, { "maths.lib/author": "GRAME" }, { "maths.lib/copyright": "GRAME" }, { "maths.lib/license": "LGPL with exception" }, @@ -50,10 +53,10 @@ { "style": "knob" }, { "unit": "ms" } ], - "init": "10", - "min": "0", - "max": "20", - "step": "0.001" + "init": 10, + "min": 0, + "max": 20, + "step": 0.001 }, { "type": "hslider", @@ -62,10 +65,10 @@ "meta": [ { "style": "knob" } ], - "init": "1", - "min": "0", - "max": "1", - "step": "0.01" + "init": 1, + "min": 0, + "max": 1, + "step": 0.01 }, { "type": "hslider", @@ -74,10 +77,10 @@ "meta": [ { "style": "knob" } ], - "init": "0", - "min": "0", - "max": "1", - "step": "0.001" + "init": 0, + "min": 0, + "max": 1, + "step": 0.001 }, { "type": "checkbox", @@ -92,10 +95,10 @@ { "style": "knob" }, { "unit": "ms" } ], - "init": "1", - "min": "0", - "max": "20", - "step": "0.001" + "init": 1, + "min": 0, + "max": 20, + "step": 0.001 }, { "type": "hslider", @@ -105,10 +108,10 @@ { "style": "knob" }, { "unit": "Hz" } ], - "init": "0.5", - "min": "0", - "max": "10", - "step": "0.01" + "init": 0.5, + "min": 0, + "max": 10, + "step": 0.01 } ] } diff --git a/ceammc/faust/fx_freeverb.dsp.json b/ceammc/faust/fx_freeverb.dsp.json index 5144d5e6b1..0ef79ac43e 100644 --- a/ceammc/faust/fx_freeverb.dsp.json +++ b/ceammc/faust/fx_freeverb.dsp.json @@ -1,24 +1,27 @@ { "name": "fx.freeverb", - "filename": "fx_freeverb", - "version": "2.15.0", - "compile_options": "cpp, -scal -ftz 0", + "filename": "fx_freeverb.dsp", + "version": "2.22.1", + "compile_options": "-lang cpp -scal -ftz 0", "library_list": ["/Users/serj/work/music/pure-data/ceammc/faust/ceammc.lib","/usr/local/share/faust/reverbs.lib","/usr/local/share/faust/signals.lib","/usr/local/share/faust/maths.lib","/usr/local/share/faust/filters.lib","/usr/local/share/faust/delays.lib","/Users/serj/work/music/pure-data/ceammc/faust/ceammc_ui.lib","/usr/local/share/faust/basics.lib"], "include_pathnames": ["/usr/local/share/faust","/usr/local/share/faust","/usr/share/faust","/Users/serj/work/music/pure-data/ceammc/faust","/Users/serj/work/music/pure-data/ceammc/faust"], - "inputs": "1", - "outputs": "1", + "inputs": 1, + "outputs": 1, "meta": [ { "basics.lib/name": "Faust Basic Element Library" }, - { "basics.lib/version": "0.0" }, + { "basics.lib/version": "0.1" }, { "ceammc.lib/name": "Ceammc PureData misc utils" }, { "ceammc.lib/version": "0.1.1" }, { "ceammc_ui.lib/name": "CEAMMC faust default UI elements" }, { "ceammc_ui.lib/version": "0.1.1" }, { "delays.lib/name": "Faust Delay Library" }, - { "delays.lib/version": "0.0" }, - { "filename": "fx_freeverb" }, + { "delays.lib/version": "0.1" }, + { "filename": "fx_freeverb.dsp" }, + { "filters.lib/allpass_comb:author": "Julius O. Smith III" }, + { "filters.lib/allpass_comb:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/allpass_comb:license": "MIT-style STK-4.3 license" }, + { "filters.lib/lowpass0_highpass1": "Copyright (C) 2003-2019 by Julius O. Smith III " }, { "filters.lib/name": "Faust Filters Library" }, - { "filters.lib/version": "0.0" }, { "maths.lib/author": "GRAME" }, { "maths.lib/copyright": "GRAME" }, { "maths.lib/license": "LGPL with exception" }, @@ -47,10 +50,10 @@ "meta": [ { "style": "knob" } ], - "init": "0.5", - "min": "0", - "max": "1", - "step": "0.001" + "init": 0.5, + "min": 0, + "max": 1, + "step": 0.001 }, { "type": "hslider", @@ -59,10 +62,10 @@ "meta": [ { "style": "knob" } ], - "init": "0.33", - "min": "0", - "max": "1", - "step": "0.01" + "init": 0.33, + "min": 0, + "max": 1, + "step": 0.01 }, { "type": "hslider", @@ -71,10 +74,10 @@ "meta": [ { "stye": "knob" } ], - "init": "0.5", - "min": "0", - "max": "1", - "step": "0.001" + "init": 0.5, + "min": 0, + "max": 1, + "step": 0.001 } ] } diff --git a/ceammc/faust/fx_freeverb2.dsp.json b/ceammc/faust/fx_freeverb2.dsp.json index 42d7b079e0..6cef19afd8 100644 --- a/ceammc/faust/fx_freeverb2.dsp.json +++ b/ceammc/faust/fx_freeverb2.dsp.json @@ -1,24 +1,27 @@ { "name": "fx.freeverb2", - "filename": "fx_freeverb2", - "version": "2.15.0", - "compile_options": "cpp, -scal -ftz 0", + "filename": "fx_freeverb2.dsp", + "version": "2.22.1", + "compile_options": "-lang cpp -scal -ftz 0", "library_list": ["/Users/serj/work/music/pure-data/ceammc/faust/ceammc.lib","/usr/local/share/faust/reverbs.lib","/usr/local/share/faust/signals.lib","/usr/local/share/faust/maths.lib","/usr/local/share/faust/filters.lib","/usr/local/share/faust/delays.lib","/Users/serj/work/music/pure-data/ceammc/faust/ceammc_ui.lib","/usr/local/share/faust/basics.lib","/usr/local/share/faust/routes.lib"], "include_pathnames": ["/usr/local/share/faust","/usr/local/share/faust","/usr/share/faust","/Users/serj/work/music/pure-data/ceammc/faust","/Users/serj/work/music/pure-data/ceammc/faust"], - "inputs": "2", - "outputs": "2", + "inputs": 2, + "outputs": 2, "meta": [ { "basics.lib/name": "Faust Basic Element Library" }, - { "basics.lib/version": "0.0" }, + { "basics.lib/version": "0.1" }, { "ceammc.lib/name": "Ceammc PureData misc utils" }, { "ceammc.lib/version": "0.1.1" }, { "ceammc_ui.lib/name": "CEAMMC faust default UI elements" }, { "ceammc_ui.lib/version": "0.1.1" }, { "delays.lib/name": "Faust Delay Library" }, - { "delays.lib/version": "0.0" }, - { "filename": "fx_freeverb2" }, + { "delays.lib/version": "0.1" }, + { "filename": "fx_freeverb2.dsp" }, + { "filters.lib/allpass_comb:author": "Julius O. Smith III" }, + { "filters.lib/allpass_comb:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/allpass_comb:license": "MIT-style STK-4.3 license" }, + { "filters.lib/lowpass0_highpass1": "Copyright (C) 2003-2019 by Julius O. Smith III " }, { "filters.lib/name": "Faust Filters Library" }, - { "filters.lib/version": "0.0" }, { "maths.lib/author": "GRAME" }, { "maths.lib/copyright": "GRAME" }, { "maths.lib/license": "LGPL with exception" }, @@ -28,7 +31,7 @@ { "reverbs.lib/name": "Faust Reverb Library" }, { "reverbs.lib/version": "0.0" }, { "routes.lib/name": "Faust Signal Routing Library" }, - { "routes.lib/version": "0.0" }, + { "routes.lib/version": "0.1" }, { "signals.lib/name": "Faust Signal Routing Library" }, { "signals.lib/version": "0.0" } ], @@ -46,10 +49,10 @@ "type": "hslider", "label": "damp", "address": "/fx.freeverb2/damp", - "init": "0.5", - "min": "0", - "max": "1", - "step": "0.001" + "init": 0.5, + "min": 0, + "max": 1, + "step": 0.001 }, { "type": "hslider", @@ -58,19 +61,19 @@ "meta": [ { "style": "knob" } ], - "init": "0.33", - "min": "0", - "max": "1", - "step": "0.01" + "init": 0.33, + "min": 0, + "max": 1, + "step": 0.01 }, { "type": "hslider", "label": "room", "address": "/fx.freeverb2/room", - "init": "0.5", - "min": "0", - "max": "1", - "step": "0.001" + "init": 0.5, + "min": 0, + "max": 1, + "step": 0.001 } ] } diff --git a/ceammc/faust/fx_granulator.dsp.json b/ceammc/faust/fx_granulator.dsp.json index 322946d532..027877c783 100644 --- a/ceammc/faust/fx_granulator.dsp.json +++ b/ceammc/faust/fx_granulator.dsp.json @@ -1,19 +1,19 @@ { "name": "fx.granulator", - "filename": "fx_granulator", - "version": "2.8.5", - "compile_options": "cpp, -scal -ftz 0", - "library_list": ["/usr/local/share/faust/stdfaust.lib","/usr/local/share/faust/maths.lib","/Users/serj/work/music/pd-exp/pure-data/ceammc/faust/ceammc.lib","/usr/local/share/faust/signals.lib","/usr/local/share/faust/basics.lib"], - "include_pathnames": ["/Users/serj/work/music/pd-exp/pure-data/ceammc/faust","/usr/local/share/faust","/usr/share/faust"], - "inputs": "1", - "outputs": "2", + "filename": "fx_granulator.dsp", + "version": "2.22.1", + "compile_options": "-lang cpp -scal -ftz 0", + "library_list": ["/usr/local/share/faust/stdfaust.lib","/usr/local/share/faust/maths.lib","/Users/serj/work/music/pure-data/ceammc/faust/ceammc.lib","/usr/local/share/faust/signals.lib","/usr/local/share/faust/basics.lib"], + "include_pathnames": ["/usr/local/share/faust","/usr/local/share/faust","/usr/share/faust","/Users/serj/work/music/pure-data/ceammc/faust","/Users/serj/work/music/pure-data/ceammc/faust"], + "inputs": 1, + "outputs": 2, "meta": [ { "author": "Mayank Sanganeria" }, { "basics.lib/name": "Faust Basic Element Library" }, - { "basics.lib/version": "0.0" }, + { "basics.lib/version": "0.1" }, { "ceammc.lib/name": "Ceammc PureData misc utils" }, { "ceammc.lib/version": "0.1.1" }, - { "filename": "fx_granulator" }, + { "filename": "fx_granulator.dsp" }, { "maths.lib/author": "GRAME" }, { "maths.lib/copyright": "GRAME" }, { "maths.lib/license": "LGPL with exception" }, @@ -36,19 +36,19 @@ "meta": [ { "unit": "sec" } ], - "init": "10", - "min": "0.5", - "max": "10", - "step": "0.1" + "init": 10, + "min": 0.5, + "max": 10, + "step": 0.1 }, { "type": "hslider", "label": "density", "address": "/fx.granulator/density", - "init": "10", - "min": "1", - "max": "64", - "step": "1" + "init": 10, + "min": 1, + "max": 64, + "step": 1 }, { "type": "hslider", @@ -57,10 +57,10 @@ "meta": [ { "unit": "ms" } ], - "init": "100", - "min": "10", - "max": "500", - "step": "0.01" + "init": 100, + "min": 10, + "max": 500, + "step": 0.01 } ] } diff --git a/ceammc/faust/fx_greyhole.dsp.json b/ceammc/faust/fx_greyhole.dsp.json index bf1249c769..fa0b3e52f6 100644 --- a/ceammc/faust/fx_greyhole.dsp.json +++ b/ceammc/faust/fx_greyhole.dsp.json @@ -1,26 +1,32 @@ { "name": "fx.greyhole", - "filename": "fx_greyhole", - "version": "2.15.0", - "compile_options": "cpp, -scal -ftz 0", + "filename": "fx_greyhole.dsp", + "version": "2.22.1", + "compile_options": "-lang cpp -scal -ftz 0", "library_list": ["/usr/local/share/faust/stdfaust.lib","/Users/serj/work/music/pure-data/ceammc/faust/ceammc.lib","/usr/local/share/faust/signals.lib","/usr/local/share/faust/maths.lib","/usr/local/share/faust/delays.lib","/usr/local/share/faust/oscillators.lib","/usr/local/share/faust/filters.lib","/Users/serj/work/music/pure-data/ceammc/faust/ceammc_ui.lib","/usr/local/share/faust/basics.lib","/usr/local/share/faust/routes.lib"], "include_pathnames": ["/usr/local/share/faust","/usr/local/share/faust","/usr/share/faust","/Users/serj/work/music/pure-data/ceammc/faust","/Users/serj/work/music/pure-data/ceammc/faust"], - "inputs": "2", - "outputs": "2", + "inputs": 2, + "outputs": 2, "meta": [ { "author": "Julian Parker, bug fixes by Till Bovermann" }, { "basics.lib/name": "Faust Basic Element Library" }, - { "basics.lib/version": "0.0" }, + { "basics.lib/version": "0.1" }, { "ceammc.lib/name": "Ceammc PureData misc utils" }, { "ceammc.lib/version": "0.1.1" }, { "ceammc_ui.lib/name": "CEAMMC faust default UI elements" }, { "ceammc_ui.lib/version": "0.1.1" }, { "copyright": "(c) Julian Parker 2013" }, { "delays.lib/name": "Faust Delay Library" }, - { "delays.lib/version": "0.0" }, - { "filename": "fx_greyhole" }, + { "delays.lib/version": "0.1" }, + { "filename": "fx_greyhole.dsp" }, + { "filters.lib/lowpass0_highpass1": "Copyright (C) 2003-2019 by Julius O. Smith III " }, { "filters.lib/name": "Faust Filters Library" }, - { "filters.lib/version": "0.0" }, + { "filters.lib/nlf2:author": "Julius O. Smith III" }, + { "filters.lib/nlf2:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/nlf2:license": "MIT-style STK-4.3 license" }, + { "filters.lib/tf1:author": "Julius O. Smith III" }, + { "filters.lib/tf1:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/tf1:license": "MIT-style STK-4.3 license" }, { "license": "GPL2+" }, { "maths.lib/author": "GRAME" }, { "maths.lib/copyright": "GRAME" }, @@ -31,7 +37,7 @@ { "oscillators.lib/name": "Faust Oscillator Library" }, { "oscillators.lib/version": "0.0" }, { "routes.lib/name": "Faust Signal Routing Library" }, - { "routes.lib/version": "0.0" }, + { "routes.lib/version": "0.1" }, { "signals.lib/name": "Faust Signal Routing Library" }, { "signals.lib/version": "0.0" }, { "version": "1.0" } @@ -50,28 +56,28 @@ "type": "hslider", "label": "damping", "address": "/fx.greyhole/damping", - "init": "0", - "min": "0", - "max": "0.99", - "step": "0.001" + "init": 0, + "min": 0, + "max": 0.99, + "step": 0.001 }, { "type": "hslider", "label": "delaytime", "address": "/fx.greyhole/delaytime", - "init": "0.2", - "min": "0.001", - "max": "1.45", - "step": "0.0001" + "init": 0.2, + "min": 0.001, + "max": 1.45, + "step": 0.0001 }, { "type": "hslider", "label": "diffusion", "address": "/fx.greyhole/diffusion", - "init": "0.5", - "min": "0", - "max": "0.99", - "step": "0.0001" + "init": 0.5, + "min": 0, + "max": 0.99, + "step": 0.0001 }, { "type": "hslider", @@ -80,46 +86,46 @@ "meta": [ { "style": "knob" } ], - "init": "1", - "min": "0", - "max": "1", - "step": "0.01" + "init": 1, + "min": 0, + "max": 1, + "step": 0.01 }, { "type": "hslider", "label": "feedback", "address": "/fx.greyhole/feedback", - "init": "0.9", - "min": "0", - "max": "1", - "step": "0.01" + "init": 0.9, + "min": 0, + "max": 1, + "step": 0.01 }, { "type": "hslider", "label": "moddepth", "address": "/fx.greyhole/moddepth", - "init": "0.1", - "min": "0", - "max": "1", - "step": "0.001" + "init": 0.1, + "min": 0, + "max": 1, + "step": 0.001 }, { "type": "hslider", "label": "modfreq", "address": "/fx.greyhole/modfreq", - "init": "2", - "min": "0", - "max": "10", - "step": "0.01" + "init": 2, + "min": 0, + "max": 10, + "step": 0.01 }, { "type": "hslider", "label": "size", "address": "/fx.greyhole/size", - "init": "1", - "min": "0.5", - "max": "3", - "step": "0.0001" + "init": 1, + "min": 0.5, + "max": 3, + "step": 0.0001 } ] } diff --git a/ceammc/faust/fx_pitchshift.dsp.json b/ceammc/faust/fx_pitchshift.dsp.json index 0d1fe2fc65..bc795f7c26 100644 --- a/ceammc/faust/fx_pitchshift.dsp.json +++ b/ceammc/faust/fx_pitchshift.dsp.json @@ -1,22 +1,22 @@ { "name": "fx.pitchshift", - "filename": "fx_pitchshift", - "version": "2.8.5", - "compile_options": "cpp, -scal -ftz 0", - "library_list": ["/usr/local/share/faust/stdfaust.lib","/Users/serj/work/music/pd-exp/pure-data/ceammc/faust/ceammc.lib","/usr/local/share/faust/misceffects.lib","/usr/local/share/faust/signals.lib","/usr/local/share/faust/maths.lib","/Users/serj/work/music/pd-exp/pure-data/ceammc/faust/ceammc_ui.lib","/usr/local/share/faust/delays.lib","/usr/local/share/faust/basics.lib"], - "include_pathnames": ["/Users/serj/work/music/pd-exp/pure-data/ceammc/faust","/usr/local/share/faust","/usr/share/faust"], - "inputs": "1", - "outputs": "1", + "filename": "fx_pitchshift.dsp", + "version": "2.22.1", + "compile_options": "-lang cpp -scal -ftz 0", + "library_list": ["/usr/local/share/faust/stdfaust.lib","/Users/serj/work/music/pure-data/ceammc/faust/ceammc.lib","/usr/local/share/faust/misceffects.lib","/usr/local/share/faust/signals.lib","/usr/local/share/faust/maths.lib","/Users/serj/work/music/pure-data/ceammc/faust/ceammc_ui.lib","/usr/local/share/faust/delays.lib","/usr/local/share/faust/basics.lib"], + "include_pathnames": ["/usr/local/share/faust","/usr/local/share/faust","/usr/share/faust","/Users/serj/work/music/pure-data/ceammc/faust","/Users/serj/work/music/pure-data/ceammc/faust"], + "inputs": 1, + "outputs": 1, "meta": [ { "basics.lib/name": "Faust Basic Element Library" }, - { "basics.lib/version": "0.0" }, + { "basics.lib/version": "0.1" }, { "ceammc.lib/name": "Ceammc PureData misc utils" }, { "ceammc.lib/version": "0.1.1" }, { "ceammc_ui.lib/name": "CEAMMC faust default UI elements" }, { "ceammc_ui.lib/version": "0.1.1" }, { "delays.lib/name": "Faust Delay Library" }, - { "delays.lib/version": "0.0" }, - { "filename": "fx_pitchshift" }, + { "delays.lib/version": "0.1" }, + { "filename": "fx_pitchshift.dsp" }, { "maths.lib/author": "GRAME" }, { "maths.lib/copyright": "GRAME" }, { "maths.lib/license": "LGPL with exception" }, @@ -45,10 +45,10 @@ "meta": [ { "style": "knob" } ], - "init": "1", - "min": "0", - "max": "1", - "step": "0.01" + "init": 1, + "min": 0, + "max": 1, + "step": 0.01 }, { "type": "vslider", @@ -57,19 +57,19 @@ "meta": [ { "unit": "ms" } ], - "init": "100", - "min": "0", - "max": "1000", - "step": "0.1" + "init": 100, + "min": 0, + "max": 1000, + "step": 0.1 }, { "type": "vslider", "label": "pitch", "address": "/fx.pitchshift/pitch", - "init": "0", - "min": "-38", - "max": "60", - "step": "0.001" + "init": 0, + "min": -38, + "max": 60, + "step": 0.001 }, { "type": "vslider", @@ -78,10 +78,10 @@ "meta": [ { "unit": "ms" } ], - "init": "200", - "min": "10", - "max": "2000", - "step": "0.1" + "init": 200, + "min": 10, + "max": 2000, + "step": 0.1 } ] } diff --git a/ceammc/faust/fx_sdelay.dsp b/ceammc/faust/fx_sdelay.dsp index 4a2d34bbed..f795fc45d9 100644 --- a/ceammc/faust/fx_sdelay.dsp +++ b/ceammc/faust/fx_sdelay.dsp @@ -1,4 +1,4 @@ -declare name "sdelay"; +declare name "fx.sdelay"; declare author "Yann Orlarey"; declare copyright "Grame"; declare version "1.0"; diff --git a/ceammc/faust/fx_sdelay.dsp.json b/ceammc/faust/fx_sdelay.dsp.json new file mode 100644 index 0000000000..a8372cd9af --- /dev/null +++ b/ceammc/faust/fx_sdelay.dsp.json @@ -0,0 +1,85 @@ +{ + "name": "fx.sdelay", + "filename": "fx_sdelay.dsp", + "version": "2.22.1", + "compile_options": "-lang cpp -scal -ftz 0", + "library_list": ["/usr/local/share/faust/stdfaust.lib","/Users/serj/work/music/pure-data/ceammc/faust/ceammc.lib","/usr/local/share/faust/delays.lib","/usr/local/share/faust/maths.lib","/usr/local/share/faust/signals.lib","/Users/serj/work/music/pure-data/ceammc/faust/ceammc_ui.lib","/usr/local/share/faust/basics.lib"], + "include_pathnames": ["/usr/local/share/faust","/usr/local/share/faust","/usr/share/faust","/Users/serj/work/music/pure-data/ceammc/faust","/Users/serj/work/music/pure-data/ceammc/faust"], + "inputs": 1, + "outputs": 1, + "meta": [ + { "author": "Yann Orlarey" }, + { "basics.lib/name": "Faust Basic Element Library" }, + { "basics.lib/version": "0.1" }, + { "ceammc.lib/name": "Ceammc PureData misc utils" }, + { "ceammc.lib/version": "0.1.1" }, + { "ceammc_ui.lib/name": "CEAMMC faust default UI elements" }, + { "ceammc_ui.lib/version": "0.1.1" }, + { "copyright": "Grame" }, + { "delays.lib/name": "Faust Delay Library" }, + { "delays.lib/version": "0.1" }, + { "filename": "fx_sdelay.dsp" }, + { "license": "STK-4.3" }, + { "maths.lib/author": "GRAME" }, + { "maths.lib/copyright": "GRAME" }, + { "maths.lib/license": "LGPL with exception" }, + { "maths.lib/name": "Faust Math Library" }, + { "maths.lib/version": "2.1" }, + { "name": "fx.sdelay" }, + { "signals.lib/name": "Faust Signal Routing Library" }, + { "signals.lib/version": "0.0" }, + { "version": "1.0" } + ], + "ui": [ + { + "type": "vgroup", + "label": "fx.sdelay", + "items": [ + { + "type": "checkbox", + "label": "bypass", + "address": "/fx.sdelay/bypass" + }, + { + "type": "hslider", + "label": "delay", + "address": "/fx.sdelay/delay", + "init": 1, + "min": 0, + "max": 6000, + "step": 0.1 + }, + { + "type": "hslider", + "label": "drywet", + "address": "/fx.sdelay/drywet", + "meta": [ + { "style": "knob" } + ], + "init": 1, + "min": 0, + "max": 1, + "step": 0.01 + }, + { + "type": "hslider", + "label": "feedback", + "address": "/fx.sdelay/feedback", + "init": 0, + "min": 0, + "max": 1, + "step": 0.001 + }, + { + "type": "hslider", + "label": "interpolation", + "address": "/fx.sdelay/interpolation", + "init": 20, + "min": 1, + "max": 200, + "step": 0.1 + } + ] + } + ] +} \ No newline at end of file diff --git a/ceammc/faust/fx_vocoder.dsp.json b/ceammc/faust/fx_vocoder.dsp.json index a778b15789..e5b8a2eea1 100644 --- a/ceammc/faust/fx_vocoder.dsp.json +++ b/ceammc/faust/fx_vocoder.dsp.json @@ -1,22 +1,37 @@ { "name": "fx.vocoder", - "filename": "fx_vocoder", - "version": "2.15.0", - "compile_options": "cpp, -scal -ftz 0", + "filename": "fx_vocoder.dsp", + "version": "2.22.1", + "compile_options": "-lang cpp -scal -ftz 0", "library_list": ["/usr/local/share/faust/stdfaust.lib","/usr/local/share/faust/vaeffects.lib","/Users/serj/work/music/pure-data/ceammc/faust/ceammc.lib","/usr/local/share/faust/signals.lib","/usr/local/share/faust/analyzers.lib","/usr/local/share/faust/basics.lib","/usr/local/share/faust/maths.lib","/usr/local/share/faust/filters.lib"], "include_pathnames": ["/usr/local/share/faust","/usr/local/share/faust","/usr/share/faust","/Users/serj/work/music/pure-data/ceammc/faust","/Users/serj/work/music/pure-data/ceammc/faust"], - "inputs": "2", - "outputs": "1", + "inputs": 2, + "outputs": 1, "meta": [ { "analyzers.lib/name": "Faust Analyzer Library" }, { "analyzers.lib/version": "0.0" }, { "basics.lib/name": "Faust Basic Element Library" }, - { "basics.lib/version": "0.0" }, + { "basics.lib/version": "0.1" }, { "ceammc.lib/name": "Ceammc PureData misc utils" }, { "ceammc.lib/version": "0.1.1" }, - { "filename": "fx_vocoder" }, + { "filename": "fx_vocoder.dsp" }, + { "filters.lib/fir:author": "Julius O. Smith III" }, + { "filters.lib/fir:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/fir:license": "MIT-style STK-4.3 license" }, + { "filters.lib/iir:author": "Julius O. Smith III" }, + { "filters.lib/iir:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/iir:license": "MIT-style STK-4.3 license" }, + { "filters.lib/lowpass0_highpass1": "Copyright (C) 2003-2019 by Julius O. Smith III " }, { "filters.lib/name": "Faust Filters Library" }, - { "filters.lib/version": "0.0" }, + { "filters.lib/resonbp:author": "Julius O. Smith III" }, + { "filters.lib/resonbp:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/resonbp:license": "MIT-style STK-4.3 license" }, + { "filters.lib/tf2:author": "Julius O. Smith III" }, + { "filters.lib/tf2:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/tf2:license": "MIT-style STK-4.3 license" }, + { "filters.lib/tf2s:author": "Julius O. Smith III" }, + { "filters.lib/tf2s:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/tf2s:license": "MIT-style STK-4.3 license" }, { "maths.lib/author": "GRAME" }, { "maths.lib/copyright": "GRAME" }, { "maths.lib/license": "LGPL with exception" }, @@ -40,19 +55,19 @@ "meta": [ { "unit": "ms" } ], - "init": "5", - "min": "0.1", - "max": "100", - "step": "0.01" + "init": 5, + "min": 0.1, + "max": 100, + "step": 0.01 }, { "type": "hslider", "label": "bwratio", "address": "/fx.vocoder/bwratio", - "init": "0.5", - "min": "0.1", - "max": "2", - "step": "0.01" + "init": 0.5, + "min": 0.1, + "max": 2, + "step": 0.01 }, { "type": "hslider", @@ -61,10 +76,10 @@ "meta": [ { "unit": "ms" } ], - "init": "5", - "min": "0.1", - "max": "100", - "step": "0.01" + "init": 5, + "min": 0.1, + "max": 100, + "step": 0.01 } ] } diff --git a/ceammc/faust/fx_wahwah.dsp.json b/ceammc/faust/fx_wahwah.dsp.json index a8b7c79493..6fc2202dc7 100644 --- a/ceammc/faust/fx_wahwah.dsp.json +++ b/ceammc/faust/fx_wahwah.dsp.json @@ -1,22 +1,31 @@ { "name": "fx.wahwah", - "filename": "fx_wahwah", - "version": "2.15.0", - "compile_options": "cpp, -scal -ftz 0", + "filename": "fx_wahwah.dsp", + "version": "2.22.1", + "compile_options": "-lang cpp -scal -ftz 0", "library_list": ["/usr/local/share/faust/stdfaust.lib","/Users/serj/work/music/pure-data/ceammc/faust/ceammc.lib","/usr/local/share/faust/vaeffects.lib","/usr/local/share/faust/basics.lib","/usr/local/share/faust/signals.lib","/usr/local/share/faust/maths.lib","/usr/local/share/faust/filters.lib","/Users/serj/work/music/pure-data/ceammc/faust/ceammc_ui.lib"], "include_pathnames": ["/usr/local/share/faust","/usr/local/share/faust","/usr/share/faust","/Users/serj/work/music/pure-data/ceammc/faust","/Users/serj/work/music/pure-data/ceammc/faust"], - "inputs": "1", - "outputs": "1", + "inputs": 1, + "outputs": 1, "meta": [ { "basics.lib/name": "Faust Basic Element Library" }, - { "basics.lib/version": "0.0" }, + { "basics.lib/version": "0.1" }, { "ceammc.lib/name": "Ceammc PureData misc utils" }, { "ceammc.lib/version": "0.1.1" }, { "ceammc_ui.lib/name": "CEAMMC faust default UI elements" }, { "ceammc_ui.lib/version": "0.1.1" }, - { "filename": "fx_wahwah" }, + { "filename": "fx_wahwah.dsp" }, + { "filters.lib/fir:author": "Julius O. Smith III" }, + { "filters.lib/fir:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/fir:license": "MIT-style STK-4.3 license" }, + { "filters.lib/iir:author": "Julius O. Smith III" }, + { "filters.lib/iir:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/iir:license": "MIT-style STK-4.3 license" }, + { "filters.lib/lowpass0_highpass1": "Copyright (C) 2003-2019 by Julius O. Smith III " }, { "filters.lib/name": "Faust Filters Library" }, - { "filters.lib/version": "0.0" }, + { "filters.lib/tf2:author": "Julius O. Smith III" }, + { "filters.lib/tf2:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/tf2:license": "MIT-style STK-4.3 license" }, { "maths.lib/author": "GRAME" }, { "maths.lib/copyright": "GRAME" }, { "maths.lib/license": "LGPL with exception" }, @@ -37,10 +46,10 @@ "type": "hslider", "label": "angle", "address": "/fx.wahwah/angle", - "init": "0.6", - "min": "0", - "max": "1", - "step": "0.01" + "init": 0.6, + "min": 0, + "max": 1, + "step": 0.01 }, { "type": "checkbox", @@ -54,10 +63,10 @@ "meta": [ { "style": "knob" } ], - "init": "1", - "min": "0", - "max": "1", - "step": "0.01" + "init": 1, + "min": 0, + "max": 1, + "step": 0.01 }, { "type": "hslider", @@ -66,10 +75,10 @@ "meta": [ { "unit": "bpm" } ], - "init": "540", - "min": "360", - "max": "780", - "step": "0.1" + "init": 540, + "min": 360, + "max": 780, + "step": 0.1 } ] } diff --git a/ceammc/faust/fx_zita_rev1.dsp.json b/ceammc/faust/fx_zita_rev1.dsp.json index 12321cbeb5..70c19f5b69 100644 --- a/ceammc/faust/fx_zita_rev1.dsp.json +++ b/ceammc/faust/fx_zita_rev1.dsp.json @@ -1,24 +1,37 @@ { "name": "fx.zita_rev1", - "filename": "fx_zita_rev1", - "version": "2.8.5", - "compile_options": "cpp, -scal -ftz 0", - "library_list": ["/Users/serj/work/music/pd-exp/pure-data/ceammc/faust/ceammc.lib","/usr/local/share/faust/reverbs.lib","/usr/local/share/faust/signals.lib","/usr/local/share/faust/delays.lib","/usr/local/share/faust/maths.lib","/usr/local/share/faust/filters.lib","/usr/local/share/faust/basics.lib","/usr/local/share/faust/routes.lib","/Users/serj/work/music/pd-exp/pure-data/ceammc/faust/ceammc_ui.lib"], - "include_pathnames": ["/Users/serj/work/music/pd-exp/pure-data/ceammc/faust","/usr/local/share/faust","/usr/share/faust"], - "inputs": "2", - "outputs": "2", + "filename": "fx_zita_rev1.dsp", + "version": "2.22.1", + "compile_options": "-lang cpp -scal -ftz 0", + "library_list": ["/Users/serj/work/music/pure-data/ceammc/faust/ceammc.lib","/usr/local/share/faust/reverbs.lib","/usr/local/share/faust/signals.lib","/usr/local/share/faust/delays.lib","/usr/local/share/faust/maths.lib","/usr/local/share/faust/filters.lib","/usr/local/share/faust/basics.lib","/usr/local/share/faust/routes.lib","/Users/serj/work/music/pure-data/ceammc/faust/ceammc_ui.lib"], + "include_pathnames": ["/usr/local/share/faust","/usr/local/share/faust","/usr/share/faust","/Users/serj/work/music/pure-data/ceammc/faust","/Users/serj/work/music/pure-data/ceammc/faust"], + "inputs": 2, + "outputs": 2, "meta": [ { "basics.lib/name": "Faust Basic Element Library" }, - { "basics.lib/version": "0.0" }, + { "basics.lib/version": "0.1" }, { "ceammc.lib/name": "Ceammc PureData misc utils" }, { "ceammc.lib/version": "0.1.1" }, { "ceammc_ui.lib/name": "CEAMMC faust default UI elements" }, { "ceammc_ui.lib/version": "0.1.1" }, { "delays.lib/name": "Faust Delay Library" }, - { "delays.lib/version": "0.0" }, - { "filename": "fx_zita_rev1" }, + { "delays.lib/version": "0.1" }, + { "filename": "fx_zita_rev1.dsp" }, + { "filters.lib/allpass_comb:author": "Julius O. Smith III" }, + { "filters.lib/allpass_comb:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/allpass_comb:license": "MIT-style STK-4.3 license" }, + { "filters.lib/lowpass0_highpass1": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/lowpass0_highpass1:author": "Julius O. Smith III" }, + { "filters.lib/lowpass:author": "Julius O. Smith III" }, + { "filters.lib/lowpass:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/lowpass:license": "MIT-style STK-4.3 license" }, { "filters.lib/name": "Faust Filters Library" }, - { "filters.lib/version": "0.0" }, + { "filters.lib/tf1:author": "Julius O. Smith III" }, + { "filters.lib/tf1:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/tf1:license": "MIT-style STK-4.3 license" }, + { "filters.lib/tf1s:author": "Julius O. Smith III" }, + { "filters.lib/tf1s:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/tf1s:license": "MIT-style STK-4.3 license" }, { "maths.lib/author": "GRAME" }, { "maths.lib/copyright": "GRAME" }, { "maths.lib/license": "LGPL with exception" }, @@ -28,7 +41,7 @@ { "reverbs.lib/name": "Faust Reverb Library" }, { "reverbs.lib/version": "0.0" }, { "routes.lib/name": "Faust Signal Routing Library" }, - { "routes.lib/version": "0.0" }, + { "routes.lib/version": "0.1" }, { "signals.lib/name": "Faust Signal Routing Library" }, { "signals.lib/version": "0.0" } ], @@ -51,10 +64,10 @@ { "style": "knob" }, { "unit": "s" } ], - "init": "3", - "min": "1", - "max": "25", - "step": "0.1" + "init": 3, + "min": 1, + "max": 25, + "step": 0.1 }, { "type": "vslider", @@ -65,10 +78,10 @@ { "style": "knob" }, { "unit": "s" } ], - "init": "2", - "min": "1", - "max": "25", - "step": "0.1" + "init": 2, + "min": 1, + "max": 25, + "step": 0.1 }, { "type": "vslider", @@ -78,10 +91,10 @@ { "style": "knob" }, { "unit": "ms" } ], - "init": "60", - "min": "20", - "max": "100", - "step": "1" + "init": 60, + "min": 20, + "max": 100, + "step": 1 }, { "type": "hslider", @@ -90,10 +103,10 @@ "meta": [ { "style": "knob" } ], - "init": "1", - "min": "0", - "max": "1", - "step": "0.01" + "init": 1, + "min": 0, + "max": 1, + "step": 0.01 }, { "type": "vslider", @@ -104,10 +117,10 @@ { "style": "knob" }, { "unit": "Hz" } ], - "init": "6000", - "min": "1500", - "max": "47040", - "step": "1" + "init": 6000, + "min": 1500, + "max": 47040, + "step": 1 }, { "type": "vslider", @@ -118,10 +131,10 @@ { "style": "knob" }, { "unit": "Hz" } ], - "init": "200", - "min": "50", - "max": "1000", - "step": "1" + "init": 200, + "min": 50, + "max": 1000, + "step": 1 } ] } diff --git a/ceammc/faust/noise_crackle.dsp.json b/ceammc/faust/noise_crackle.dsp.json index b4390557ee..0945f62e13 100644 --- a/ceammc/faust/noise_crackle.dsp.json +++ b/ceammc/faust/noise_crackle.dsp.json @@ -1,16 +1,16 @@ { "name": "noise.crackle", - "filename": "noise_crackle", - "version": "2.15.0", - "compile_options": "cpp, -scal -ftz 0", + "filename": "noise_crackle.dsp", + "version": "2.22.1", + "compile_options": "-lang cpp -scal -ftz 0", "library_list": ["/usr/local/share/faust/noises.lib","/usr/local/share/faust/oscillators.lib","/usr/local/share/faust/maths.lib","/usr/local/share/faust/basics.lib"], "include_pathnames": ["/usr/local/share/faust","/usr/local/share/faust","/usr/share/faust","/Users/serj/work/music/pure-data/ceammc/faust","/Users/serj/work/music/pure-data/ceammc/faust"], - "inputs": "0", - "outputs": "1", + "inputs": 0, + "outputs": 1, "meta": [ { "basics.lib/name": "Faust Basic Element Library" }, - { "basics.lib/version": "0.0" }, - { "filename": "noise_crackle" }, + { "basics.lib/version": "0.1" }, + { "filename": "noise_crackle.dsp" }, { "maths.lib/author": "GRAME" }, { "maths.lib/copyright": "GRAME" }, { "maths.lib/license": "LGPL with exception" }, @@ -35,10 +35,10 @@ { "style": "knob" }, { "unit": "Hz" } ], - "init": "10", - "min": "0", - "max": "100", - "step": "0.01" + "init": 10, + "min": 0, + "max": 100, + "step": 0.01 } ] } diff --git a/ceammc/faust/noise_lfreq.dsp.json b/ceammc/faust/noise_lfreq.dsp.json index 422f37d27b..d59c323f6d 100644 --- a/ceammc/faust/noise_lfreq.dsp.json +++ b/ceammc/faust/noise_lfreq.dsp.json @@ -1,18 +1,31 @@ { "name": "noise.lfreq", - "filename": "noise_lfreq", - "version": "2.15.0", - "compile_options": "cpp, -scal -ftz 0", + "filename": "noise_lfreq.dsp", + "version": "2.22.1", + "compile_options": "-lang cpp -scal -ftz 0", "library_list": ["/usr/local/share/faust/noises.lib","/usr/local/share/faust/signals.lib","/usr/local/share/faust/basics.lib","/usr/local/share/faust/oscillators.lib","/usr/local/share/faust/filters.lib","/usr/local/share/faust/maths.lib"], "include_pathnames": ["/usr/local/share/faust","/usr/local/share/faust","/usr/share/faust","/Users/serj/work/music/pure-data/ceammc/faust","/Users/serj/work/music/pure-data/ceammc/faust"], - "inputs": "0", - "outputs": "1", + "inputs": 0, + "outputs": 1, "meta": [ { "basics.lib/name": "Faust Basic Element Library" }, - { "basics.lib/version": "0.0" }, - { "filename": "noise_lfreq" }, + { "basics.lib/version": "0.1" }, + { "filename": "noise_lfreq.dsp" }, + { "filters.lib/lowpass0_highpass1": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/lowpass0_highpass1:author": "Julius O. Smith III" }, + { "filters.lib/lowpass:author": "Julius O. Smith III" }, + { "filters.lib/lowpass:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/lowpass:license": "MIT-style STK-4.3 license" }, { "filters.lib/name": "Faust Filters Library" }, - { "filters.lib/version": "0.0" }, + { "filters.lib/nlf2:author": "Julius O. Smith III" }, + { "filters.lib/nlf2:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/nlf2:license": "MIT-style STK-4.3 license" }, + { "filters.lib/tf1:author": "Julius O. Smith III" }, + { "filters.lib/tf1:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/tf1:license": "MIT-style STK-4.3 license" }, + { "filters.lib/tf1s:author": "Julius O. Smith III" }, + { "filters.lib/tf1s:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/tf1s:license": "MIT-style STK-4.3 license" }, { "maths.lib/author": "GRAME" }, { "maths.lib/copyright": "GRAME" }, { "maths.lib/license": "LGPL with exception" }, @@ -38,10 +51,10 @@ "meta": [ { "unit": "Hz" } ], - "init": "1000", - "min": "5", - "max": "22050", - "step": "0.1" + "init": 1000, + "min": 5, + "max": 22050, + "step": 0.1 } ] } diff --git a/ceammc/faust/noise_lfreq0.dsp.json b/ceammc/faust/noise_lfreq0.dsp.json index 02973dd378..ae42cb9f07 100644 --- a/ceammc/faust/noise_lfreq0.dsp.json +++ b/ceammc/faust/noise_lfreq0.dsp.json @@ -1,18 +1,21 @@ { "name": "noise.lfreq0", - "filename": "noise_lfreq0", - "version": "2.15.0", - "compile_options": "cpp, -scal -ftz 0", + "filename": "noise_lfreq0.dsp", + "version": "2.22.1", + "compile_options": "-lang cpp -scal -ftz 0", "library_list": ["/usr/local/share/faust/noises.lib","/usr/local/share/faust/basics.lib","/usr/local/share/faust/oscillators.lib","/usr/local/share/faust/filters.lib","/usr/local/share/faust/maths.lib"], "include_pathnames": ["/usr/local/share/faust","/usr/local/share/faust","/usr/share/faust","/Users/serj/work/music/pure-data/ceammc/faust","/Users/serj/work/music/pure-data/ceammc/faust"], - "inputs": "0", - "outputs": "1", + "inputs": 0, + "outputs": 1, "meta": [ { "basics.lib/name": "Faust Basic Element Library" }, - { "basics.lib/version": "0.0" }, - { "filename": "noise_lfreq0" }, + { "basics.lib/version": "0.1" }, + { "filename": "noise_lfreq0.dsp" }, + { "filters.lib/lowpass0_highpass1": "Copyright (C) 2003-2019 by Julius O. Smith III " }, { "filters.lib/name": "Faust Filters Library" }, - { "filters.lib/version": "0.0" }, + { "filters.lib/nlf2:author": "Julius O. Smith III" }, + { "filters.lib/nlf2:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/nlf2:license": "MIT-style STK-4.3 license" }, { "maths.lib/author": "GRAME" }, { "maths.lib/copyright": "GRAME" }, { "maths.lib/license": "LGPL with exception" }, @@ -36,10 +39,10 @@ "meta": [ { "unit": "Hz" } ], - "init": "1000", - "min": "5", - "max": "22050", - "step": "0.1" + "init": 1000, + "min": 5, + "max": 22050, + "step": 0.1 } ] } diff --git a/ceammc/faust/spat_pan4.dsp.json b/ceammc/faust/spat_pan4.dsp.json index 6d1e4577c7..1cbae9c5b5 100644 --- a/ceammc/faust/spat_pan4.dsp.json +++ b/ceammc/faust/spat_pan4.dsp.json @@ -1,14 +1,14 @@ { "name": "spat.pan4", - "filename": "spat_pan4", - "version": "2.15.10", - "compile_options": "cpp, -scal -ftz 0", + "filename": "spat_pan4.dsp", + "version": "2.22.1", + "compile_options": "-lang cpp -scal -ftz 0", "library_list": ["/usr/local/share/faust/spats.lib","/usr/local/share/faust/maths.lib","/usr/local/share/faust/signals.lib"], "include_pathnames": ["/usr/local/share/faust","/usr/local/share/faust","/usr/share/faust","/Users/serj/work/music/pure-data/ceammc/faust","/Users/serj/work/music/pure-data/ceammc/faust"], - "inputs": "1", - "outputs": "4", + "inputs": 1, + "outputs": 4, "meta": [ - { "filename": "spat_pan4" }, + { "filename": "spat_pan4.dsp" }, { "maths.lib/author": "GRAME" }, { "maths.lib/copyright": "GRAME" }, { "maths.lib/license": "LGPL with exception" }, @@ -32,19 +32,19 @@ "meta": [ { "unit": "rad" } ], - "init": "0", - "min": "0", - "max": "6.28319", - "step": "0.0001" + "init": 0, + "min": 0, + "max": 6.28319, + "step": 0.0001 }, { "type": "vslider", "label": "dist", "address": "/spat.pan4/dist", - "init": "1", - "min": "0", - "max": "1", - "step": "0.0001" + "init": 1, + "min": 0, + "max": 1, + "step": 0.0001 } ] } diff --git a/ceammc/faust/spat_pan8.dsp.json b/ceammc/faust/spat_pan8.dsp.json index 8bf5005ba4..005555b5e6 100644 --- a/ceammc/faust/spat_pan8.dsp.json +++ b/ceammc/faust/spat_pan8.dsp.json @@ -1,14 +1,14 @@ { "name": "spat.pan8", - "filename": "spat_pan8", - "version": "2.15.10", - "compile_options": "cpp, -scal -ftz 0", + "filename": "spat_pan8.dsp", + "version": "2.22.1", + "compile_options": "-lang cpp -scal -ftz 0", "library_list": ["/usr/local/share/faust/spats.lib","/usr/local/share/faust/maths.lib","/usr/local/share/faust/signals.lib"], "include_pathnames": ["/usr/local/share/faust","/usr/local/share/faust","/usr/share/faust","/Users/serj/work/music/pure-data/ceammc/faust","/Users/serj/work/music/pure-data/ceammc/faust"], - "inputs": "1", - "outputs": "8", + "inputs": 1, + "outputs": 8, "meta": [ - { "filename": "spat_pan8" }, + { "filename": "spat_pan8.dsp" }, { "maths.lib/author": "GRAME" }, { "maths.lib/copyright": "GRAME" }, { "maths.lib/license": "LGPL with exception" }, @@ -32,19 +32,19 @@ "meta": [ { "unit": "rad" } ], - "init": "0", - "min": "0", - "max": "6.28319", - "step": "0.0001" + "init": 0, + "min": 0, + "max": 6.28319, + "step": 0.0001 }, { "type": "vslider", "label": "dist", "address": "/spat.pan8/dist", - "init": "1", - "min": "0", - "max": "1", - "step": "0.0001" + "init": 1, + "min": 0, + "max": 1, + "step": 0.0001 } ] } diff --git a/ceammc/faust/synth_birds.dsp.json b/ceammc/faust/synth_birds.dsp.json index 65316412ae..9a0e780f53 100644 --- a/ceammc/faust/synth_birds.dsp.json +++ b/ceammc/faust/synth_birds.dsp.json @@ -1,19 +1,32 @@ { "name": "synth.birds", - "filename": "synth_birds", - "version": "2.15.0", - "compile_options": "cpp, -scal -ftz 0", + "filename": "synth_birds.dsp", + "version": "2.22.1", + "compile_options": "-lang cpp -scal -ftz 0", "library_list": ["/usr/local/share/faust/stdfaust.lib","/usr/local/share/faust/basics.lib","/usr/local/share/faust/signals.lib","/usr/local/share/faust/maths.lib","/usr/local/share/faust/noises.lib","/usr/local/share/faust/filters.lib","/usr/local/share/faust/oscillators.lib"], "include_pathnames": ["/usr/local/share/faust","/usr/local/share/faust","/usr/share/faust","/Users/serj/work/music/pure-data/ceammc/faust","/Users/serj/work/music/pure-data/ceammc/faust"], - "inputs": "0", - "outputs": "2", + "inputs": 0, + "outputs": 2, "meta": [ { "author": "Pierre Cochard" }, { "basics.lib/name": "Faust Basic Element Library" }, - { "basics.lib/version": "0.0" }, - { "filename": "synth_birds" }, + { "basics.lib/version": "0.1" }, + { "filename": "synth_birds.dsp" }, + { "filters.lib/lowpass0_highpass1": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/lowpass0_highpass1:author": "Julius O. Smith III" }, + { "filters.lib/lowpass:author": "Julius O. Smith III" }, + { "filters.lib/lowpass:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/lowpass:license": "MIT-style STK-4.3 license" }, { "filters.lib/name": "Faust Filters Library" }, - { "filters.lib/version": "0.0" }, + { "filters.lib/pole:author": "Julius O. Smith III" }, + { "filters.lib/pole:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/pole:license": "MIT-style STK-4.3 license" }, + { "filters.lib/tf1:author": "Julius O. Smith III" }, + { "filters.lib/tf1:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/tf1:license": "MIT-style STK-4.3 license" }, + { "filters.lib/tf1s:author": "Julius O. Smith III" }, + { "filters.lib/tf1s:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/tf1s:license": "MIT-style STK-4.3 license" }, { "maths.lib/author": "GRAME" }, { "maths.lib/copyright": "GRAME" }, { "maths.lib/license": "LGPL with exception" }, @@ -41,10 +54,10 @@ { "style": "knob" }, { "unit": "%" } ], - "init": "50", - "min": "25", - "max": "100", - "step": "1" + "init": 50, + "min": 25, + "max": 100, + "step": 1 }, { "type": "hslider", @@ -54,10 +67,10 @@ { "acc": "0 1 -10 0 10" }, { "style": "knob" } ], - "init": "240", - "min": "120", - "max": "480", - "step": "0.1" + "init": 240, + "min": 120, + "max": 480, + "step": 0.1 } ] } diff --git a/ceammc/faust/synth_church_bell.dsp.json b/ceammc/faust/synth_church_bell.dsp.json index ca057e8d24..bb8e1113cb 100644 --- a/ceammc/faust/synth_church_bell.dsp.json +++ b/ceammc/faust/synth_church_bell.dsp.json @@ -1,23 +1,42 @@ { "name": "synth.church_bell", - "filename": "synth_church_bell", - "version": "2.15.0", - "compile_options": "cpp, -scal -ftz 0", + "filename": "synth_church_bell.dsp", + "version": "2.22.1", + "compile_options": "-lang cpp -scal -ftz 0", "library_list": ["/usr/local/share/faust/physmodels.lib","/usr/local/share/faust/stdfaust.lib","/usr/local/share/faust/noises.lib","/usr/local/share/faust/filters.lib","/usr/local/share/faust/maths.lib","/usr/local/share/faust/envelopes.lib","/usr/local/share/faust/basics.lib"], "include_pathnames": ["/usr/local/share/faust","/usr/local/share/faust","/usr/share/faust","/Users/serj/work/music/pure-data/ceammc/faust","/Users/serj/work/music/pure-data/ceammc/faust"], - "inputs": "0", - "outputs": "1", + "inputs": 0, + "outputs": 1, "meta": [ { "basics.lib/name": "Faust Basic Element Library" }, - { "basics.lib/version": "0.0" }, + { "basics.lib/version": "0.1" }, + { "envelopes.lib/ar:author": "Yann Orlarey, Stéphane Letz" }, { "envelopes.lib/author": "GRAME" }, { "envelopes.lib/copyright": "GRAME" }, { "envelopes.lib/license": "LGPL with exception" }, { "envelopes.lib/name": "Faust Envelope Library" }, { "envelopes.lib/version": "0.0" }, - { "filename": "synth_church_bell" }, + { "filename": "synth_church_bell.dsp" }, + { "filters.lib/fir:author": "Julius O. Smith III" }, + { "filters.lib/fir:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/fir:license": "MIT-style STK-4.3 license" }, + { "filters.lib/highpass:author": "Julius O. Smith III" }, + { "filters.lib/highpass:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/iir:author": "Julius O. Smith III" }, + { "filters.lib/iir:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/iir:license": "MIT-style STK-4.3 license" }, + { "filters.lib/lowpass0_highpass1": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/lowpass0_highpass1:author": "Julius O. Smith III" }, + { "filters.lib/lowpass:author": "Julius O. Smith III" }, + { "filters.lib/lowpass:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/lowpass:license": "MIT-style STK-4.3 license" }, { "filters.lib/name": "Faust Filters Library" }, - { "filters.lib/version": "0.0" }, + { "filters.lib/tf2:author": "Julius O. Smith III" }, + { "filters.lib/tf2:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/tf2:license": "MIT-style STK-4.3 license" }, + { "filters.lib/tf2s:author": "Julius O. Smith III" }, + { "filters.lib/tf2s:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/tf2s:license": "MIT-style STK-4.3 license" }, { "maths.lib/author": "GRAME" }, { "maths.lib/copyright": "GRAME" }, { "maths.lib/license": "LGPL with exception" }, @@ -36,19 +55,19 @@ "type": "hslider", "label": "cutoff", "address": "/synth.church_bell/cutoff", - "init": "6500", - "min": "20", - "max": "20000", - "step": "1" + "init": 6500, + "min": 20, + "max": 20000, + "step": 1 }, { "type": "hslider", "label": "gain", "address": "/synth.church_bell/gain", - "init": "1", - "min": "0", - "max": "1", - "step": "0.01" + "init": 1, + "min": 0, + "max": 1, + "step": 0.01 }, { "type": "button", @@ -59,19 +78,19 @@ "type": "nentry", "label": "pos", "address": "/synth.church_bell/pos", - "init": "0", - "min": "0", - "max": "6", - "step": "1" + "init": 0, + "min": 0, + "max": 6, + "step": 1 }, { "type": "hslider", "label": "sharp", "address": "/synth.church_bell/sharp", - "init": "0.5", - "min": "0.01", - "max": "5", - "step": "0.01" + "init": 0.5, + "min": 0.01, + "max": 5, + "step": 0.01 } ] } diff --git a/ceammc/faust/synth_dubdub.dsp.json b/ceammc/faust/synth_dubdub.dsp.json index 3334f7a92b..8b766b79f8 100644 --- a/ceammc/faust/synth_dubdub.dsp.json +++ b/ceammc/faust/synth_dubdub.dsp.json @@ -1,15 +1,15 @@ { "name": "synth.dubdub", - "filename": "synth_dubdub", - "version": "2.15.0", - "compile_options": "cpp, -scal -ftz 0", + "filename": "synth_dubdub.dsp", + "version": "2.22.1", + "compile_options": "-lang cpp -scal -ftz 0", "library_list": ["/usr/local/share/faust/synths.lib","/Users/serj/work/music/pure-data/ceammc/faust/ceammc_ui.lib","/usr/local/share/faust/signals.lib","/Users/serj/work/music/pure-data/ceammc/faust/spn.lib","/usr/local/share/faust/basics.lib","/usr/local/share/faust/oscillators.lib","/usr/local/share/faust/maths.lib","/usr/local/share/faust/envelopes.lib","/usr/local/share/faust/filters.lib"], "include_pathnames": ["/usr/local/share/faust","/usr/local/share/faust","/usr/share/faust","/Users/serj/work/music/pure-data/ceammc/faust","/Users/serj/work/music/pure-data/ceammc/faust"], - "inputs": "0", - "outputs": "1", + "inputs": 0, + "outputs": 1, "meta": [ { "basics.lib/name": "Faust Basic Element Library" }, - { "basics.lib/version": "0.0" }, + { "basics.lib/version": "0.1" }, { "ceammc_ui.lib/name": "CEAMMC faust default UI elements" }, { "ceammc_ui.lib/version": "0.1.1" }, { "envelopes.lib/author": "GRAME" }, @@ -17,9 +17,24 @@ { "envelopes.lib/license": "LGPL with exception" }, { "envelopes.lib/name": "Faust Envelope Library" }, { "envelopes.lib/version": "0.0" }, - { "filename": "synth_dubdub" }, + { "filename": "synth_dubdub.dsp" }, + { "filters.lib/fir:author": "Julius O. Smith III" }, + { "filters.lib/fir:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/fir:license": "MIT-style STK-4.3 license" }, + { "filters.lib/iir:author": "Julius O. Smith III" }, + { "filters.lib/iir:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/iir:license": "MIT-style STK-4.3 license" }, + { "filters.lib/lowpass0_highpass1": "Copyright (C) 2003-2019 by Julius O. Smith III " }, { "filters.lib/name": "Faust Filters Library" }, - { "filters.lib/version": "0.0" }, + { "filters.lib/resonlp:author": "Julius O. Smith III" }, + { "filters.lib/resonlp:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/resonlp:license": "MIT-style STK-4.3 license" }, + { "filters.lib/tf2:author": "Julius O. Smith III" }, + { "filters.lib/tf2:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/tf2:license": "MIT-style STK-4.3 license" }, + { "filters.lib/tf2s:author": "Julius O. Smith III" }, + { "filters.lib/tf2s:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/tf2s:license": "MIT-style STK-4.3 license" }, { "maths.lib/author": "GRAME" }, { "maths.lib/copyright": "GRAME" }, { "maths.lib/license": "LGPL with exception" }, @@ -44,10 +59,10 @@ "type": "hslider", "label": "cutoff", "address": "/synth.dubdub/cutoff", - "init": "3000", - "min": "20", - "max": "20000", - "step": "1" + "init": 3000, + "min": 20, + "max": 20000, + "step": 1 }, { "type": "button", @@ -58,19 +73,19 @@ "type": "hslider", "label": "pitch", "address": "/synth.dubdub/pitch", - "init": "48", - "min": "24", - "max": "84", - "step": "0.001" + "init": 48, + "min": 24, + "max": 84, + "step": 0.001 }, { "type": "vslider", "label": "q", "address": "/synth.dubdub/q", - "init": "0.1", - "min": "0.01", - "max": "100", - "step": "0.1" + "init": 0.1, + "min": 0.01, + "max": 100, + "step": 0.1 } ] } diff --git a/ceammc/faust/synth_dx7.dsp.json b/ceammc/faust/synth_dx7.dsp.json index 29fa3c7adb..91e9330bd9 100644 --- a/ceammc/faust/synth_dx7.dsp.json +++ b/ceammc/faust/synth_dx7.dsp.json @@ -1,17 +1,17 @@ { "name": "synth.dx7", - "filename": "synth_dx7", - "inputs": "0", - "outputs": "1", + "filename": "synth_dx7.dsp", + "inputs": 0, + "outputs": 1, "meta": [ { "basics.lib/name": "Faust Basic Element Library" }, - { "basics.lib/version": "0.0" }, + { "basics.lib/version": "0.1" }, { "envelopes.lib/author": "GRAME" }, { "envelopes.lib/copyright": "GRAME" }, { "envelopes.lib/license": "LGPL with exception" }, { "envelopes.lib/name": "Faust Envelope Library" }, { "envelopes.lib/version": "0.0" }, - { "filename": "synth_dx7" }, + { "filename": "synth_dx7.dsp" }, { "maths.lib/author": "GRAME" }, { "maths.lib/copyright": "GRAME" }, { "maths.lib/license": "LGPL with exception" }, @@ -30,37 +30,37 @@ "type": "nentry", "label": "algorithm", "address": "/synth.dx7/algorithm", - "init": "0", - "min": "0", - "max": "31", - "step": "1" + "init": 0, + "min": 0, + "max": 31, + "step": 1 }, { "type": "nentry", "label": "feedback", "address": "/synth.dx7/feedback", - "init": "0", - "min": "0", - "max": "99", - "step": "1" + "init": 0, + "min": 0, + "max": 99, + "step": 1 }, { "type": "hslider", "label": "freq", "address": "/synth.dx7/freq", - "init": "400", - "min": "50", - "max": "1000", - "step": "0.01" + "init": 400, + "min": 50, + "max": 1000, + "step": 0.01 }, { "type": "hslider", "label": "gain", "address": "/synth.dx7/gain", - "init": "0.8", - "min": "0", - "max": "1", - "step": "0.01" + "init": 0.8, + "min": 0, + "max": 1, + "step": 0.01 }, { "type": "button", @@ -71,757 +71,757 @@ "type": "nentry", "label": "op0:egL1", "address": "/synth.dx7/op0:egL1", - "init": "0", - "min": "0", - "max": "99", - "step": "1" + "init": 0, + "min": 0, + "max": 99, + "step": 1 }, { "type": "nentry", "label": "op0:egL2", "address": "/synth.dx7/op0:egL2", - "init": "90", - "min": "0", - "max": "99", - "step": "1" + "init": 90, + "min": 0, + "max": 99, + "step": 1 }, { "type": "nentry", "label": "op0:egL3", "address": "/synth.dx7/op0:egL3", - "init": "90", - "min": "0", - "max": "99", - "step": "1" + "init": 90, + "min": 0, + "max": 99, + "step": 1 }, { "type": "nentry", "label": "op0:egL4", "address": "/synth.dx7/op0:egL4", - "init": "0", - "min": "0", - "max": "99", - "step": "1" + "init": 0, + "min": 0, + "max": 99, + "step": 1 }, { "type": "nentry", "label": "op0:egR1", "address": "/synth.dx7/op0:egR1", - "init": "90", - "min": "0", - "max": "99", - "step": "1" + "init": 90, + "min": 0, + "max": 99, + "step": 1 }, { "type": "nentry", "label": "op0:egR2", "address": "/synth.dx7/op0:egR2", - "init": "90", - "min": "0", - "max": "99", - "step": "1" + "init": 90, + "min": 0, + "max": 99, + "step": 1 }, { "type": "nentry", "label": "op0:egR3", "address": "/synth.dx7/op0:egR3", - "init": "90", - "min": "0", - "max": "99", - "step": "1" + "init": 90, + "min": 0, + "max": 99, + "step": 1 }, { "type": "nentry", "label": "op0:egR4", "address": "/synth.dx7/op0:egR4", - "init": "90", - "min": "0", - "max": "99", - "step": "1" + "init": 90, + "min": 0, + "max": 99, + "step": 1 }, { "type": "nentry", "label": "op0:keyVelSens", "address": "/synth.dx7/op0:keyVelSens", - "init": "1", - "min": "0", - "max": "8", - "step": "1" + "init": 1, + "min": 0, + "max": 8, + "step": 1 }, { "type": "nentry", "label": "op0:level", "address": "/synth.dx7/op0:level", - "init": "95", - "min": "0", - "max": "99", - "step": "1" + "init": 95, + "min": 0, + "max": 99, + "step": 1 }, { "type": "nentry", "label": "op0:opDetune", "address": "/synth.dx7/op0:opDetune", - "init": "1", - "min": "-10", - "max": "10", - "step": "1" + "init": 1, + "min": -10, + "max": 10, + "step": 1 }, { "type": "nentry", "label": "op0:opFreq", "address": "/synth.dx7/op0:opFreq", - "init": "1", - "min": "0", - "max": "2", - "step": "0.01" + "init": 1, + "min": 0, + "max": 2, + "step": 0.01 }, { "type": "nentry", "label": "op0:opMode", "address": "/synth.dx7/op0:opMode", - "init": "0", - "min": "0", - "max": "1", - "step": "1" + "init": 0, + "min": 0, + "max": 1, + "step": 1 }, { "type": "nentry", "label": "op0:opRateScale", "address": "/synth.dx7/op0:opRateScale", - "init": "0", - "min": "0", - "max": "10", - "step": "1" + "init": 0, + "min": 0, + "max": 10, + "step": 1 }, { "type": "nentry", "label": "op1:egL1", "address": "/synth.dx7/op1:egL1", - "init": "0", - "min": "0", - "max": "99", - "step": "1" + "init": 0, + "min": 0, + "max": 99, + "step": 1 }, { "type": "nentry", "label": "op1:egL2", "address": "/synth.dx7/op1:egL2", - "init": "90", - "min": "0", - "max": "99", - "step": "1" + "init": 90, + "min": 0, + "max": 99, + "step": 1 }, { "type": "nentry", "label": "op1:egL3", "address": "/synth.dx7/op1:egL3", - "init": "90", - "min": "0", - "max": "99", - "step": "1" + "init": 90, + "min": 0, + "max": 99, + "step": 1 }, { "type": "nentry", "label": "op1:egL4", "address": "/synth.dx7/op1:egL4", - "init": "0", - "min": "0", - "max": "99", - "step": "1" + "init": 0, + "min": 0, + "max": 99, + "step": 1 }, { "type": "nentry", "label": "op1:egR1", "address": "/synth.dx7/op1:egR1", - "init": "90", - "min": "0", - "max": "99", - "step": "1" + "init": 90, + "min": 0, + "max": 99, + "step": 1 }, { "type": "nentry", "label": "op1:egR2", "address": "/synth.dx7/op1:egR2", - "init": "90", - "min": "0", - "max": "99", - "step": "1" + "init": 90, + "min": 0, + "max": 99, + "step": 1 }, { "type": "nentry", "label": "op1:egR3", "address": "/synth.dx7/op1:egR3", - "init": "90", - "min": "0", - "max": "99", - "step": "1" + "init": 90, + "min": 0, + "max": 99, + "step": 1 }, { "type": "nentry", "label": "op1:egR4", "address": "/synth.dx7/op1:egR4", - "init": "90", - "min": "0", - "max": "99", - "step": "1" + "init": 90, + "min": 0, + "max": 99, + "step": 1 }, { "type": "nentry", "label": "op1:keyVelSens", "address": "/synth.dx7/op1:keyVelSens", - "init": "1", - "min": "0", - "max": "8", - "step": "1" + "init": 1, + "min": 0, + "max": 8, + "step": 1 }, { "type": "nentry", "label": "op1:level", "address": "/synth.dx7/op1:level", - "init": "95", - "min": "0", - "max": "99", - "step": "1" + "init": 95, + "min": 0, + "max": 99, + "step": 1 }, { "type": "nentry", "label": "op1:opDetune", "address": "/synth.dx7/op1:opDetune", - "init": "1", - "min": "-10", - "max": "10", - "step": "1" + "init": 1, + "min": -10, + "max": 10, + "step": 1 }, { "type": "nentry", "label": "op1:opFreq", "address": "/synth.dx7/op1:opFreq", - "init": "1", - "min": "0", - "max": "2", - "step": "0.01" + "init": 1, + "min": 0, + "max": 2, + "step": 0.01 }, { "type": "nentry", "label": "op1:opMode", "address": "/synth.dx7/op1:opMode", - "init": "0", - "min": "0", - "max": "1", - "step": "1" + "init": 0, + "min": 0, + "max": 1, + "step": 1 }, { "type": "nentry", "label": "op1:opRateScale", "address": "/synth.dx7/op1:opRateScale", - "init": "0", - "min": "0", - "max": "10", - "step": "1" + "init": 0, + "min": 0, + "max": 10, + "step": 1 }, { "type": "nentry", "label": "op2:egL1", "address": "/synth.dx7/op2:egL1", - "init": "0", - "min": "0", - "max": "99", - "step": "1" + "init": 0, + "min": 0, + "max": 99, + "step": 1 }, { "type": "nentry", "label": "op2:egL2", "address": "/synth.dx7/op2:egL2", - "init": "90", - "min": "0", - "max": "99", - "step": "1" + "init": 90, + "min": 0, + "max": 99, + "step": 1 }, { "type": "nentry", "label": "op2:egL3", "address": "/synth.dx7/op2:egL3", - "init": "90", - "min": "0", - "max": "99", - "step": "1" + "init": 90, + "min": 0, + "max": 99, + "step": 1 }, { "type": "nentry", "label": "op2:egL4", "address": "/synth.dx7/op2:egL4", - "init": "0", - "min": "0", - "max": "99", - "step": "1" + "init": 0, + "min": 0, + "max": 99, + "step": 1 }, { "type": "nentry", "label": "op2:egR1", "address": "/synth.dx7/op2:egR1", - "init": "90", - "min": "0", - "max": "99", - "step": "1" + "init": 90, + "min": 0, + "max": 99, + "step": 1 }, { "type": "nentry", "label": "op2:egR2", "address": "/synth.dx7/op2:egR2", - "init": "90", - "min": "0", - "max": "99", - "step": "1" + "init": 90, + "min": 0, + "max": 99, + "step": 1 }, { "type": "nentry", "label": "op2:egR3", "address": "/synth.dx7/op2:egR3", - "init": "90", - "min": "0", - "max": "99", - "step": "1" + "init": 90, + "min": 0, + "max": 99, + "step": 1 }, { "type": "nentry", "label": "op2:egR4", "address": "/synth.dx7/op2:egR4", - "init": "90", - "min": "0", - "max": "99", - "step": "1" + "init": 90, + "min": 0, + "max": 99, + "step": 1 }, { "type": "nentry", "label": "op2:keyVelSens", "address": "/synth.dx7/op2:keyVelSens", - "init": "1", - "min": "0", - "max": "8", - "step": "1" + "init": 1, + "min": 0, + "max": 8, + "step": 1 }, { "type": "nentry", "label": "op2:level", "address": "/synth.dx7/op2:level", - "init": "95", - "min": "0", - "max": "99", - "step": "1" + "init": 95, + "min": 0, + "max": 99, + "step": 1 }, { "type": "nentry", "label": "op2:opDetune", "address": "/synth.dx7/op2:opDetune", - "init": "1", - "min": "-10", - "max": "10", - "step": "1" + "init": 1, + "min": -10, + "max": 10, + "step": 1 }, { "type": "nentry", "label": "op2:opFreq", "address": "/synth.dx7/op2:opFreq", - "init": "1", - "min": "0", - "max": "2", - "step": "0.01" + "init": 1, + "min": 0, + "max": 2, + "step": 0.01 }, { "type": "nentry", "label": "op2:opMode", "address": "/synth.dx7/op2:opMode", - "init": "0", - "min": "0", - "max": "1", - "step": "1" + "init": 0, + "min": 0, + "max": 1, + "step": 1 }, { "type": "nentry", "label": "op2:opRateScale", "address": "/synth.dx7/op2:opRateScale", - "init": "0", - "min": "0", - "max": "10", - "step": "1" + "init": 0, + "min": 0, + "max": 10, + "step": 1 }, { "type": "nentry", "label": "op3:egL1", "address": "/synth.dx7/op3:egL1", - "init": "0", - "min": "0", - "max": "99", - "step": "1" + "init": 0, + "min": 0, + "max": 99, + "step": 1 }, { "type": "nentry", "label": "op3:egL2", "address": "/synth.dx7/op3:egL2", - "init": "90", - "min": "0", - "max": "99", - "step": "1" + "init": 90, + "min": 0, + "max": 99, + "step": 1 }, { "type": "nentry", "label": "op3:egL3", "address": "/synth.dx7/op3:egL3", - "init": "90", - "min": "0", - "max": "99", - "step": "1" + "init": 90, + "min": 0, + "max": 99, + "step": 1 }, { "type": "nentry", "label": "op3:egL4", "address": "/synth.dx7/op3:egL4", - "init": "0", - "min": "0", - "max": "99", - "step": "1" + "init": 0, + "min": 0, + "max": 99, + "step": 1 }, { "type": "nentry", "label": "op3:egR1", "address": "/synth.dx7/op3:egR1", - "init": "90", - "min": "0", - "max": "99", - "step": "1" + "init": 90, + "min": 0, + "max": 99, + "step": 1 }, { "type": "nentry", "label": "op3:egR2", "address": "/synth.dx7/op3:egR2", - "init": "90", - "min": "0", - "max": "99", - "step": "1" + "init": 90, + "min": 0, + "max": 99, + "step": 1 }, { "type": "nentry", "label": "op3:egR3", "address": "/synth.dx7/op3:egR3", - "init": "90", - "min": "0", - "max": "99", - "step": "1" + "init": 90, + "min": 0, + "max": 99, + "step": 1 }, { "type": "nentry", "label": "op3:egR4", "address": "/synth.dx7/op3:egR4", - "init": "90", - "min": "0", - "max": "99", - "step": "1" + "init": 90, + "min": 0, + "max": 99, + "step": 1 }, { "type": "nentry", "label": "op3:keyVelSens", "address": "/synth.dx7/op3:keyVelSens", - "init": "1", - "min": "0", - "max": "8", - "step": "1" + "init": 1, + "min": 0, + "max": 8, + "step": 1 }, { "type": "nentry", "label": "op3:level", "address": "/synth.dx7/op3:level", - "init": "95", - "min": "0", - "max": "99", - "step": "1" + "init": 95, + "min": 0, + "max": 99, + "step": 1 }, { "type": "nentry", "label": "op3:opDetune", "address": "/synth.dx7/op3:opDetune", - "init": "1", - "min": "-10", - "max": "10", - "step": "1" + "init": 1, + "min": -10, + "max": 10, + "step": 1 }, { "type": "nentry", "label": "op3:opFreq", "address": "/synth.dx7/op3:opFreq", - "init": "1", - "min": "0", - "max": "2", - "step": "0.01" + "init": 1, + "min": 0, + "max": 2, + "step": 0.01 }, { "type": "nentry", "label": "op3:opMode", "address": "/synth.dx7/op3:opMode", - "init": "0", - "min": "0", - "max": "1", - "step": "1" + "init": 0, + "min": 0, + "max": 1, + "step": 1 }, { "type": "nentry", "label": "op3:opRateScale", "address": "/synth.dx7/op3:opRateScale", - "init": "0", - "min": "0", - "max": "10", - "step": "1" + "init": 0, + "min": 0, + "max": 10, + "step": 1 }, { "type": "nentry", "label": "op4:egL1", "address": "/synth.dx7/op4:egL1", - "init": "0", - "min": "0", - "max": "99", - "step": "1" + "init": 0, + "min": 0, + "max": 99, + "step": 1 }, { "type": "nentry", "label": "op4:egL2", "address": "/synth.dx7/op4:egL2", - "init": "90", - "min": "0", - "max": "99", - "step": "1" + "init": 90, + "min": 0, + "max": 99, + "step": 1 }, { "type": "nentry", "label": "op4:egL3", "address": "/synth.dx7/op4:egL3", - "init": "90", - "min": "0", - "max": "99", - "step": "1" + "init": 90, + "min": 0, + "max": 99, + "step": 1 }, { "type": "nentry", "label": "op4:egL4", "address": "/synth.dx7/op4:egL4", - "init": "0", - "min": "0", - "max": "99", - "step": "1" + "init": 0, + "min": 0, + "max": 99, + "step": 1 }, { "type": "nentry", "label": "op4:egR1", "address": "/synth.dx7/op4:egR1", - "init": "90", - "min": "0", - "max": "99", - "step": "1" + "init": 90, + "min": 0, + "max": 99, + "step": 1 }, { "type": "nentry", "label": "op4:egR2", "address": "/synth.dx7/op4:egR2", - "init": "90", - "min": "0", - "max": "99", - "step": "1" + "init": 90, + "min": 0, + "max": 99, + "step": 1 }, { "type": "nentry", "label": "op4:egR3", "address": "/synth.dx7/op4:egR3", - "init": "90", - "min": "0", - "max": "99", - "step": "1" + "init": 90, + "min": 0, + "max": 99, + "step": 1 }, { "type": "nentry", "label": "op4:egR4", "address": "/synth.dx7/op4:egR4", - "init": "90", - "min": "0", - "max": "99", - "step": "1" + "init": 90, + "min": 0, + "max": 99, + "step": 1 }, { "type": "nentry", "label": "op4:keyVelSens", "address": "/synth.dx7/op4:keyVelSens", - "init": "1", - "min": "0", - "max": "8", - "step": "1" + "init": 1, + "min": 0, + "max": 8, + "step": 1 }, { "type": "nentry", "label": "op4:level", "address": "/synth.dx7/op4:level", - "init": "95", - "min": "0", - "max": "99", - "step": "1" + "init": 95, + "min": 0, + "max": 99, + "step": 1 }, { "type": "nentry", "label": "op4:opDetune", "address": "/synth.dx7/op4:opDetune", - "init": "1", - "min": "-10", - "max": "10", - "step": "1" + "init": 1, + "min": -10, + "max": 10, + "step": 1 }, { "type": "nentry", "label": "op4:opFreq", "address": "/synth.dx7/op4:opFreq", - "init": "1", - "min": "0", - "max": "2", - "step": "0.01" + "init": 1, + "min": 0, + "max": 2, + "step": 0.01 }, { "type": "nentry", "label": "op4:opMode", "address": "/synth.dx7/op4:opMode", - "init": "0", - "min": "0", - "max": "1", - "step": "1" + "init": 0, + "min": 0, + "max": 1, + "step": 1 }, { "type": "nentry", "label": "op4:opRateScale", "address": "/synth.dx7/op4:opRateScale", - "init": "0", - "min": "0", - "max": "10", - "step": "1" + "init": 0, + "min": 0, + "max": 10, + "step": 1 }, { "type": "nentry", "label": "op5:egL1", "address": "/synth.dx7/op5:egL1", - "init": "0", - "min": "0", - "max": "99", - "step": "1" + "init": 0, + "min": 0, + "max": 99, + "step": 1 }, { "type": "nentry", "label": "op5:egL2", "address": "/synth.dx7/op5:egL2", - "init": "90", - "min": "0", - "max": "99", - "step": "1" + "init": 90, + "min": 0, + "max": 99, + "step": 1 }, { "type": "nentry", "label": "op5:egL3", "address": "/synth.dx7/op5:egL3", - "init": "90", - "min": "0", - "max": "99", - "step": "1" + "init": 90, + "min": 0, + "max": 99, + "step": 1 }, { "type": "nentry", "label": "op5:egL4", "address": "/synth.dx7/op5:egL4", - "init": "0", - "min": "0", - "max": "99", - "step": "1" + "init": 0, + "min": 0, + "max": 99, + "step": 1 }, { "type": "nentry", "label": "op5:egR1", "address": "/synth.dx7/op5:egR1", - "init": "90", - "min": "0", - "max": "99", - "step": "1" + "init": 90, + "min": 0, + "max": 99, + "step": 1 }, { "type": "nentry", "label": "op5:egR2", "address": "/synth.dx7/op5:egR2", - "init": "90", - "min": "0", - "max": "99", - "step": "1" + "init": 90, + "min": 0, + "max": 99, + "step": 1 }, { "type": "nentry", "label": "op5:egR3", "address": "/synth.dx7/op5:egR3", - "init": "90", - "min": "0", - "max": "99", - "step": "1" + "init": 90, + "min": 0, + "max": 99, + "step": 1 }, { "type": "nentry", "label": "op5:egR4", "address": "/synth.dx7/op5:egR4", - "init": "90", - "min": "0", - "max": "99", - "step": "1" + "init": 90, + "min": 0, + "max": 99, + "step": 1 }, { "type": "nentry", "label": "op5:keyVelSens", "address": "/synth.dx7/op5:keyVelSens", - "init": "1", - "min": "0", - "max": "8", - "step": "1" + "init": 1, + "min": 0, + "max": 8, + "step": 1 }, { "type": "nentry", "label": "op5:level", "address": "/synth.dx7/op5:level", - "init": "95", - "min": "0", - "max": "99", - "step": "1" + "init": 95, + "min": 0, + "max": 99, + "step": 1 }, { "type": "nentry", "label": "op5:opDetune", "address": "/synth.dx7/op5:opDetune", - "init": "1", - "min": "-10", - "max": "10", - "step": "1" + "init": 1, + "min": -10, + "max": 10, + "step": 1 }, { "type": "nentry", "label": "op5:opFreq", "address": "/synth.dx7/op5:opFreq", - "init": "1", - "min": "0", - "max": "2", - "step": "0.01" + "init": 1, + "min": 0, + "max": 2, + "step": 0.01 }, { "type": "nentry", "label": "op5:opMode", "address": "/synth.dx7/op5:opMode", - "init": "0", - "min": "0", - "max": "1", - "step": "1" + "init": 0, + "min": 0, + "max": 1, + "step": 1 }, { "type": "nentry", "label": "op5:opRateScale", "address": "/synth.dx7/op5:opRateScale", - "init": "0", - "min": "0", - "max": "10", - "step": "1" + "init": 0, + "min": 0, + "max": 10, + "step": 1 } ] } diff --git a/ceammc/faust/synth_eguitar.dsp.json b/ceammc/faust/synth_eguitar.dsp.json index 590c2a26dd..7962aed240 100644 --- a/ceammc/faust/synth_eguitar.dsp.json +++ b/ceammc/faust/synth_eguitar.dsp.json @@ -1,25 +1,42 @@ { "name": "synth.eguitar", - "filename": "synth_eguitar", - "version": "2.15.0", - "compile_options": "cpp, -scal -ftz 0", - "library_list": ["/usr/local/share/faust/physmodels.lib","/usr/local/share/faust/stdfaust.lib","/Users/serj/work/music/pure-data/ceammc/faust/spn.lib","/usr/local/share/faust/basics.lib","/usr/local/share/faust/noises.lib","/usr/local/share/faust/filters.lib","/usr/local/share/faust/maths.lib","/usr/local/share/faust/envelopes.lib","/usr/local/share/faust/routes.lib","/usr/local/share/faust/signals.lib","/usr/local/share/faust/delays.lib"], + "filename": "synth_eguitar.dsp", + "version": "2.22.1", + "compile_options": "-lang cpp -scal -ftz 0", + "library_list": ["/usr/local/share/faust/physmodels.lib","/usr/local/share/faust/stdfaust.lib","/Users/serj/work/music/pure-data/ceammc/faust/spn.lib","/usr/local/share/faust/basics.lib","/usr/local/share/faust/noises.lib","/usr/local/share/faust/filters.lib","/usr/local/share/faust/maths.lib","/usr/local/share/faust/envelopes.lib","/usr/local/share/faust/routes.lib","/usr/local/share/faust/delays.lib","/usr/local/share/faust/signals.lib"], "include_pathnames": ["/usr/local/share/faust","/usr/local/share/faust","/usr/share/faust","/Users/serj/work/music/pure-data/ceammc/faust","/Users/serj/work/music/pure-data/ceammc/faust"], - "inputs": "0", - "outputs": "1", + "inputs": 0, + "outputs": 1, "meta": [ { "basics.lib/name": "Faust Basic Element Library" }, - { "basics.lib/version": "0.0" }, + { "basics.lib/version": "0.1" }, { "delays.lib/name": "Faust Delay Library" }, - { "delays.lib/version": "0.0" }, + { "delays.lib/version": "0.1" }, + { "envelopes.lib/ar:author": "Yann Orlarey, Stéphane Letz" }, { "envelopes.lib/author": "GRAME" }, { "envelopes.lib/copyright": "GRAME" }, { "envelopes.lib/license": "LGPL with exception" }, { "envelopes.lib/name": "Faust Envelope Library" }, { "envelopes.lib/version": "0.0" }, - { "filename": "synth_eguitar" }, + { "filename": "synth_eguitar.dsp" }, + { "filters.lib/fir:author": "Julius O. Smith III" }, + { "filters.lib/fir:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/fir:license": "MIT-style STK-4.3 license" }, + { "filters.lib/iir:author": "Julius O. Smith III" }, + { "filters.lib/iir:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/iir:license": "MIT-style STK-4.3 license" }, + { "filters.lib/lowpass0_highpass1": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/lowpass0_highpass1:author": "Julius O. Smith III" }, + { "filters.lib/lowpass:author": "Julius O. Smith III" }, + { "filters.lib/lowpass:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/lowpass:license": "MIT-style STK-4.3 license" }, { "filters.lib/name": "Faust Filters Library" }, - { "filters.lib/version": "0.0" }, + { "filters.lib/tf2:author": "Julius O. Smith III" }, + { "filters.lib/tf2:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/tf2:license": "MIT-style STK-4.3 license" }, + { "filters.lib/tf2s:author": "Julius O. Smith III" }, + { "filters.lib/tf2s:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/tf2s:license": "MIT-style STK-4.3 license" }, { "maths.lib/author": "GRAME" }, { "maths.lib/copyright": "GRAME" }, { "maths.lib/license": "LGPL with exception" }, @@ -29,7 +46,7 @@ { "noises.lib/name": "Faust Noise Generator Library" }, { "noises.lib/version": "0.0" }, { "routes.lib/name": "Faust Signal Routing Library" }, - { "routes.lib/version": "0.0" }, + { "routes.lib/version": "0.1" }, { "signals.lib/name": "Faust Signal Routing Library" }, { "signals.lib/version": "0.0" }, { "spn.lib/name": "Standart Pitch Notation constants" }, @@ -44,10 +61,10 @@ "type": "hslider", "label": "gain", "address": "/synth.eguitar/gain", - "init": "1", - "min": "0", - "max": "1", - "step": "0.001" + "init": 1, + "min": 0, + "max": 1, + "step": 0.001 }, { "type": "button", @@ -58,28 +75,28 @@ "type": "hslider", "label": "mute", "address": "/synth.eguitar/mute", - "init": "0", - "min": "0", - "max": "1", - "step": "0.001" + "init": 0, + "min": 0, + "max": 1, + "step": 0.001 }, { "type": "hslider", "label": "pitch", "address": "/synth.eguitar/pitch", - "init": "48", - "min": "36", - "max": "84", - "step": "0.001" + "init": 48, + "min": 36, + "max": 84, + "step": 0.001 }, { "type": "hslider", "label": "pos", "address": "/synth.eguitar/pos", - "init": "0.5", - "min": "0", - "max": "1", - "step": "0.01" + "init": 0.5, + "min": 0, + "max": 1, + "step": 0.01 } ] } diff --git a/ceammc/faust/synth_ks.dsp.json b/ceammc/faust/synth_ks.dsp.json index 06fda6a2d5..b7e2934f97 100644 --- a/ceammc/faust/synth_ks.dsp.json +++ b/ceammc/faust/synth_ks.dsp.json @@ -1,25 +1,44 @@ { "name": "synth.ks", - "filename": "synth_ks", - "version": "2.15.0", - "compile_options": "cpp, -scal -ftz 0", - "library_list": ["/usr/local/share/faust/physmodels.lib","/usr/local/share/faust/stdfaust.lib","/Users/serj/work/music/pure-data/ceammc/faust/spn.lib","/usr/local/share/faust/basics.lib","/usr/local/share/faust/noises.lib","/usr/local/share/faust/filters.lib","/usr/local/share/faust/maths.lib","/usr/local/share/faust/envelopes.lib","/usr/local/share/faust/delays.lib","/usr/local/share/faust/routes.lib","/usr/local/share/faust/signals.lib"], + "filename": "synth_ks.dsp", + "version": "2.22.1", + "compile_options": "-lang cpp -scal -ftz 0", + "library_list": ["/usr/local/share/faust/physmodels.lib","/usr/local/share/faust/stdfaust.lib","/Users/serj/work/music/pure-data/ceammc/faust/spn.lib","/usr/local/share/faust/basics.lib","/usr/local/share/faust/noises.lib","/usr/local/share/faust/filters.lib","/usr/local/share/faust/maths.lib","/usr/local/share/faust/envelopes.lib","/usr/local/share/faust/delays.lib","/usr/local/share/faust/routes.lib"], "include_pathnames": ["/usr/local/share/faust","/usr/local/share/faust","/usr/share/faust","/Users/serj/work/music/pure-data/ceammc/faust","/Users/serj/work/music/pure-data/ceammc/faust"], - "inputs": "0", - "outputs": "1", + "inputs": 0, + "outputs": 1, "meta": [ { "basics.lib/name": "Faust Basic Element Library" }, - { "basics.lib/version": "0.0" }, + { "basics.lib/version": "0.1" }, { "delays.lib/name": "Faust Delay Library" }, - { "delays.lib/version": "0.0" }, + { "delays.lib/version": "0.1" }, + { "envelopes.lib/ar:author": "Yann Orlarey, Stéphane Letz" }, { "envelopes.lib/author": "GRAME" }, { "envelopes.lib/copyright": "GRAME" }, { "envelopes.lib/license": "LGPL with exception" }, { "envelopes.lib/name": "Faust Envelope Library" }, { "envelopes.lib/version": "0.0" }, - { "filename": "synth_ks" }, + { "filename": "synth_ks.dsp" }, + { "filters.lib/fir:author": "Julius O. Smith III" }, + { "filters.lib/fir:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/fir:license": "MIT-style STK-4.3 license" }, + { "filters.lib/highpass:author": "Julius O. Smith III" }, + { "filters.lib/highpass:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/iir:author": "Julius O. Smith III" }, + { "filters.lib/iir:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/iir:license": "MIT-style STK-4.3 license" }, + { "filters.lib/lowpass0_highpass1": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/lowpass0_highpass1:author": "Julius O. Smith III" }, + { "filters.lib/lowpass:author": "Julius O. Smith III" }, + { "filters.lib/lowpass:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/lowpass:license": "MIT-style STK-4.3 license" }, { "filters.lib/name": "Faust Filters Library" }, - { "filters.lib/version": "0.0" }, + { "filters.lib/tf2:author": "Julius O. Smith III" }, + { "filters.lib/tf2:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/tf2:license": "MIT-style STK-4.3 license" }, + { "filters.lib/tf2s:author": "Julius O. Smith III" }, + { "filters.lib/tf2s:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/tf2s:license": "MIT-style STK-4.3 license" }, { "maths.lib/author": "GRAME" }, { "maths.lib/copyright": "GRAME" }, { "maths.lib/license": "LGPL with exception" }, @@ -29,9 +48,7 @@ { "noises.lib/name": "Faust Noise Generator Library" }, { "noises.lib/version": "0.0" }, { "routes.lib/name": "Faust Signal Routing Library" }, - { "routes.lib/version": "0.0" }, - { "signals.lib/name": "Faust Signal Routing Library" }, - { "signals.lib/version": "0.0" }, + { "routes.lib/version": "0.1" }, { "spn.lib/name": "Standart Pitch Notation constants" }, { "spn.lib/version": "0.1" } ], @@ -44,19 +61,19 @@ "type": "hslider", "label": "cutoff", "address": "/synth.ks/cutoff", - "init": "1", - "min": "0.1", - "max": "1", - "step": "0.001" + "init": 1, + "min": 0.1, + "max": 1, + "step": 0.001 }, { "type": "hslider", "label": "gain", "address": "/synth.ks/gain", - "init": "1", - "min": "0", - "max": "1", - "step": "0.001" + "init": 1, + "min": 0, + "max": 1, + "step": 0.001 }, { "type": "button", @@ -67,46 +84,46 @@ "type": "hslider", "label": "mode", "address": "/synth.ks/mode", - "init": "0", - "min": "0", - "max": "1", - "step": "1" + "init": 0, + "min": 0, + "max": 1, + "step": 1 }, { "type": "hslider", "label": "mute", "address": "/synth.ks/mute", - "init": "0", - "min": "0", - "max": "1", - "step": "0.001" + "init": 0, + "min": 0, + "max": 1, + "step": 0.001 }, { "type": "hslider", "label": "pitch", "address": "/synth.ks/pitch", - "init": "48", - "min": "36", - "max": "84", - "step": "0.001" + "init": 48, + "min": 36, + "max": 84, + "step": 0.001 }, { "type": "hslider", "label": "pos", "address": "/synth.ks/pos", - "init": "0.7", - "min": "0", - "max": "1", - "step": "0.01" + "init": 0.7, + "min": 0, + "max": 1, + "step": 0.01 }, { "type": "hslider", "label": "sharp", "address": "/synth.ks/sharp", - "init": "0.25", - "min": "0.01", - "max": "1", - "step": "0.001" + "init": 0.25, + "min": 0.01, + "max": 1, + "step": 0.001 } ] } diff --git a/ceammc/faust/synth_marimba.dsp.json b/ceammc/faust/synth_marimba.dsp.json index efc63b8e84..9b926914e7 100644 --- a/ceammc/faust/synth_marimba.dsp.json +++ b/ceammc/faust/synth_marimba.dsp.json @@ -1,25 +1,44 @@ { "name": "synth.marimba", - "filename": "synth_marimba", - "version": "2.15.0", - "compile_options": "cpp, -scal -ftz 0", + "filename": "synth_marimba.dsp", + "version": "2.22.1", + "compile_options": "-lang cpp -scal -ftz 0", "library_list": ["/usr/local/share/faust/physmodels.lib","/usr/local/share/faust/stdfaust.lib","/Users/serj/work/music/pure-data/ceammc/faust/spn.lib","/usr/local/share/faust/basics.lib","/usr/local/share/faust/noises.lib","/usr/local/share/faust/filters.lib","/usr/local/share/faust/maths.lib","/usr/local/share/faust/envelopes.lib","/usr/local/share/faust/signals.lib","/usr/local/share/faust/delays.lib","/usr/local/share/faust/routes.lib"], "include_pathnames": ["/usr/local/share/faust","/usr/local/share/faust","/usr/share/faust","/Users/serj/work/music/pure-data/ceammc/faust","/Users/serj/work/music/pure-data/ceammc/faust"], - "inputs": "0", - "outputs": "1", + "inputs": 0, + "outputs": 1, "meta": [ { "basics.lib/name": "Faust Basic Element Library" }, - { "basics.lib/version": "0.0" }, + { "basics.lib/version": "0.1" }, { "delays.lib/name": "Faust Delay Library" }, - { "delays.lib/version": "0.0" }, + { "delays.lib/version": "0.1" }, + { "envelopes.lib/ar:author": "Yann Orlarey, Stéphane Letz" }, { "envelopes.lib/author": "GRAME" }, { "envelopes.lib/copyright": "GRAME" }, { "envelopes.lib/license": "LGPL with exception" }, { "envelopes.lib/name": "Faust Envelope Library" }, { "envelopes.lib/version": "0.0" }, - { "filename": "synth_marimba" }, + { "filename": "synth_marimba.dsp" }, + { "filters.lib/fir:author": "Julius O. Smith III" }, + { "filters.lib/fir:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/fir:license": "MIT-style STK-4.3 license" }, + { "filters.lib/highpass:author": "Julius O. Smith III" }, + { "filters.lib/highpass:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/iir:author": "Julius O. Smith III" }, + { "filters.lib/iir:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/iir:license": "MIT-style STK-4.3 license" }, + { "filters.lib/lowpass0_highpass1": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/lowpass0_highpass1:author": "Julius O. Smith III" }, + { "filters.lib/lowpass:author": "Julius O. Smith III" }, + { "filters.lib/lowpass:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/lowpass:license": "MIT-style STK-4.3 license" }, { "filters.lib/name": "Faust Filters Library" }, - { "filters.lib/version": "0.0" }, + { "filters.lib/tf2:author": "Julius O. Smith III" }, + { "filters.lib/tf2:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/tf2:license": "MIT-style STK-4.3 license" }, + { "filters.lib/tf2s:author": "Julius O. Smith III" }, + { "filters.lib/tf2s:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III " }, + { "filters.lib/tf2s:license": "MIT-style STK-4.3 license" }, { "maths.lib/author": "GRAME" }, { "maths.lib/copyright": "GRAME" }, { "maths.lib/license": "LGPL with exception" }, @@ -29,7 +48,7 @@ { "noises.lib/name": "Faust Noise Generator Library" }, { "noises.lib/version": "0.0" }, { "routes.lib/name": "Faust Signal Routing Library" }, - { "routes.lib/version": "0.0" }, + { "routes.lib/version": "0.1" }, { "signals.lib/name": "Faust Signal Routing Library" }, { "signals.lib/version": "0.0" }, { "spn.lib/name": "Standart Pitch Notation constants" }, @@ -44,19 +63,19 @@ "type": "hslider", "label": "cutoff", "address": "/synth.marimba/cutoff", - "init": "7000", - "min": "1000", - "max": "10000", - "step": "1" + "init": 7000, + "min": 1000, + "max": 10000, + "step": 1 }, { "type": "hslider", "label": "gain", "address": "/synth.marimba/gain", - "init": "1", - "min": "0", - "max": "1", - "step": "0.001" + "init": 1, + "min": 0, + "max": 1, + "step": 0.001 }, { "type": "button", @@ -67,28 +86,28 @@ "type": "hslider", "label": "pitch", "address": "/synth.marimba/pitch", - "init": "48", - "min": "36", - "max": "84", - "step": "0.001" + "init": 48, + "min": 36, + "max": 84, + "step": 0.001 }, { "type": "hslider", "label": "pos", "address": "/synth.marimba/pos", - "init": "0", - "min": "0", - "max": "4", - "step": "0.01" + "init": 0, + "min": 0, + "max": 4, + "step": 0.01 }, { "type": "hslider", "label": "sharp", "address": "/synth.marimba/sharp", - "init": "0.25", - "min": "0.01", - "max": "1", - "step": "0.001" + "init": 0.25, + "min": 0.01, + "max": 1, + "step": 0.001 } ] } diff --git a/ceammc/faust/synth_risset_arp.dsp.json b/ceammc/faust/synth_risset_arp.dsp.json index 5a63c3512c..93560c2e96 100644 --- a/ceammc/faust/synth_risset_arp.dsp.json +++ b/ceammc/faust/synth_risset_arp.dsp.json @@ -1,19 +1,19 @@ { "name": "synth.risset_arp", - "filename": "synth_risset_arp", - "version": "2.15.0", - "compile_options": "cpp, -scal -ftz 0", + "filename": "synth_risset_arp.dsp", + "version": "2.22.1", + "compile_options": "-lang cpp -scal -ftz 0", "library_list": ["/usr/local/share/faust/stdfaust.lib","/usr/local/share/faust/oscillators.lib","/usr/local/share/faust/signals.lib","/usr/local/share/faust/maths.lib","/usr/local/share/faust/basics.lib"], "include_pathnames": ["/usr/local/share/faust","/usr/local/share/faust","/usr/share/faust","/Users/serj/work/music/pure-data/ceammc/faust","/Users/serj/work/music/pure-data/ceammc/faust"], - "inputs": "0", - "outputs": "2", + "inputs": 0, + "outputs": 2, "meta": [ { "author": "Oli Larkin (contact@olilarkin.co.uk)" }, { "basics.lib/name": "Faust Basic Element Library" }, - { "basics.lib/version": "0.0" }, + { "basics.lib/version": "0.1" }, { "copyright": "Oliver Larkin" }, { "description": "Jean Claude Risset's Harmonic Arpeggio Effect" }, - { "filename": "synth_risset_arp" }, + { "filename": "synth_risset_arp.dsp" }, { "licence": "GPL" }, { "maths.lib/author": "GRAME" }, { "maths.lib/copyright": "GRAME" }, @@ -36,100 +36,100 @@ "type": "hslider", "label": "detune", "address": "/synth.risset_arp/detune", - "init": "5", - "min": "0", - "max": "1000", - "step": "0.01" + "init": 5, + "min": 0, + "max": 1000, + "step": 0.01 }, { "type": "hslider", "label": "freq", "address": "/synth.risset_arp/freq", - "init": "100", - "min": "40", - "max": "500", - "step": "1" + "init": 100, + "min": 40, + "max": 500, + "step": 1 }, { "type": "hslider", "label": "harmonic1", "address": "/synth.risset_arp/harmonic1", - "init": "1", - "min": "0", - "max": "1", - "step": "0.01" + "init": 1, + "min": 0, + "max": 1, + "step": 0.01 }, { "type": "hslider", "label": "harmonic2", "address": "/synth.risset_arp/harmonic2", - "init": "1", - "min": "0", - "max": "1", - "step": "0.01" + "init": 1, + "min": 0, + "max": 1, + "step": 0.01 }, { "type": "hslider", "label": "harmonic3", "address": "/synth.risset_arp/harmonic3", - "init": "1", - "min": "0", - "max": "1", - "step": "0.01" + "init": 1, + "min": 0, + "max": 1, + "step": 0.01 }, { "type": "hslider", "label": "harmonic4", "address": "/synth.risset_arp/harmonic4", - "init": "1", - "min": "0", - "max": "1", - "step": "0.01" + "init": 1, + "min": 0, + "max": 1, + "step": 0.01 }, { "type": "hslider", "label": "harmonic5", "address": "/synth.risset_arp/harmonic5", - "init": "1", - "min": "0", - "max": "1", - "step": "0.01" + "init": 1, + "min": 0, + "max": 1, + "step": 0.01 }, { "type": "hslider", "label": "harmonic6", "address": "/synth.risset_arp/harmonic6", - "init": "1", - "min": "0", - "max": "1", - "step": "0.01" + "init": 1, + "min": 0, + "max": 1, + "step": 0.01 }, { "type": "hslider", "label": "harmonic7", "address": "/synth.risset_arp/harmonic7", - "init": "1", - "min": "0", - "max": "1", - "step": "0.01" + "init": 1, + "min": 0, + "max": 1, + "step": 0.01 }, { "type": "hslider", "label": "harmonic8", "address": "/synth.risset_arp/harmonic8", - "init": "1", - "min": "0", - "max": "1", - "step": "0.01" + "init": 1, + "min": 0, + "max": 1, + "step": 0.01 }, { "type": "hslider", "label": "spread", "address": "/synth.risset_arp/spread", - "init": "1", - "min": "0", - "max": "1", - "step": "0.01" + "init": 1, + "min": 0, + "max": 1, + "step": 0.01 } ] } diff --git a/ceammc/faust/synth_risset_tone.dsp.json b/ceammc/faust/synth_risset_tone.dsp.json index 57e4754110..60d6cefbfd 100644 --- a/ceammc/faust/synth_risset_tone.dsp.json +++ b/ceammc/faust/synth_risset_tone.dsp.json @@ -1,21 +1,21 @@ { "name": "synth.risset_tone", - "filename": "synth_risset_tone", - "version": "2.15.0", - "compile_options": "cpp, -scal -ftz 0", + "filename": "synth_risset_tone.dsp", + "version": "2.22.1", + "compile_options": "-lang cpp -scal -ftz 0", "library_list": ["/usr/local/share/faust/stdfaust.lib","/usr/local/share/faust/maths.lib","/Users/serj/work/music/pure-data/ceammc/faust/ceammc.lib","/usr/local/share/faust/basics.lib","/usr/local/share/faust/oscillators.lib"], "include_pathnames": ["/usr/local/share/faust","/usr/local/share/faust","/usr/share/faust","/Users/serj/work/music/pure-data/ceammc/faust","/Users/serj/work/music/pure-data/ceammc/faust"], - "inputs": "0", - "outputs": "1", + "inputs": 0, + "outputs": 1, "meta": [ { "author": "Oli Larkin (contact@olilarkin.co.uk)" }, { "basics.lib/name": "Faust Basic Element Library" }, - { "basics.lib/version": "0.0" }, + { "basics.lib/version": "0.1" }, { "ceammc.lib/name": "Ceammc PureData misc utils" }, { "ceammc.lib/version": "0.1.1" }, { "copyright": "Oliver Larkin" }, { "description": "Jean Claude Risset's endless glissando" }, - { "filename": "synth_risset_tone" }, + { "filename": "synth_risset_tone.dsp" }, { "licence": "GPL" }, { "maths.lib/author": "GRAME" }, { "maths.lib/copyright": "GRAME" }, @@ -36,28 +36,28 @@ "type": "hslider", "label": "centroid", "address": "/synth.risset_tone/centroid", - "init": "60", - "min": "20", - "max": "120", - "step": "0.001" + "init": 60, + "min": 20, + "max": 120, + "step": 0.001 }, { "type": "hslider", "label": "range", "address": "/synth.risset_tone/range", - "init": "120", - "min": "1", - "max": "120", - "step": "0.001" + "init": 120, + "min": 1, + "max": 120, + "step": 0.001 }, { "type": "hslider", "label": "rate", "address": "/synth.risset_tone/rate", - "init": "0.01", - "min": "-2", - "max": "2", - "step": "0.001" + "init": 0.01, + "min": -2, + "max": 2, + "step": 0.001 } ] } diff --git a/ceammc/gui/plugins/CMakeLists.txt b/ceammc/gui/plugins/CMakeLists.txt index 3a5eceb754..e896080a6a 100644 --- a/ceammc/gui/plugins/CMakeLists.txt +++ b/ceammc/gui/plugins/CMakeLists.txt @@ -4,11 +4,12 @@ add_custom_target(buttonbar file(GLOB GUI_PLUGINS "${CMAKE_CURRENT_SOURCE_DIR}/*-plugin.tcl") list(APPEND GUI_PLUGINS "${CMAKE_CURRENT_SOURCE_DIR}/ceammc_popup_menu_tree.tcl") -list(APPEND GUI_PLUGINS "${CMAKE_CURRENT_SOURCE_DIR}/completion.cfg") +file(GLOB GUI_COMPLETION_PLUGIN "${CMAKE_CURRENT_SOURCE_DIR}/completion-plugin/*-plugin.tcl") +list(APPEND GUI_COMPLETION_PLUGIN "${CMAKE_CURRENT_SOURCE_DIR}/completion-plugin/completion.cfg") -install(FILES ${GUI_PLUGINS} DESTINATION ${PD_GUI_PLUGINS_PATH}/ceammc) +install(FILES ${GUI_PLUGINS} ${GUI_COMPLETION_PLUGIN} DESTINATION ${PD_GUI_PLUGINS_PATH}/ceammc) -add_custom_target(gui_plugins SOURCES ${GUI_PLUGINS} check_popup_list.py) +add_custom_target(gui_plugins SOURCES ${GUI_PLUGINS} ${GUI_COMPLETION_PLUGIN} check_popup_list.py) add_custom_target(popup_gen COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/gen_ceammc_popup_list.py COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/gen_popup_menu.sh diff --git a/ceammc/gui/plugins/ceammc_popup_menu_ceammc.tcl b/ceammc/gui/plugins/ceammc_popup_menu_ceammc.tcl index fb40ae8756..368ec87079 100644 --- a/ceammc/gui/plugins/ceammc_popup_menu_ceammc.tcl +++ b/ceammc/gui/plugins/ceammc_popup_menu_ceammc.tcl @@ -9,13 +9,14 @@ }} {base { function function.call gain~ matrix~ metro.pattern metro.seq mix~ - obj.props radio window xfade2~ xfade~ + obj.props radio window xdac~ xfade2~ xfade~ }} {conv { array.p2s array.s2p conv.amp2dbfs conv.bpm2hz conv.bpm2ms conv.bpm2sec - conv.cc2amp conv.dbfs2amp conv.lin2curve conv.lin2exp conv.lin2lin - conv.list2props conv.midi2freq conv.pitch2midi conv.samp2sec - conv.sec2samp conv.sec2str conv.str2sec + conv.car2pol conv.cc2amp conv.dbfs2amp conv.lin2curve conv.lin2exp + conv.lin2lin conv.list2props conv.midi2freq conv.phase2rad + conv.phase2rad~ conv.pitch2midi conv.pol2car conv.rad2phase + conv.rad2phase~ conv.samp2sec conv.sec2samp conv.sec2str conv.str2sec }} {data { data.dict data.fifo data.float data.int data.list data.mlist data.set @@ -36,10 +37,10 @@ {flow { expand_env flow.append flow.change flow.count flow.demultiplex flow.demultiplex2~ flow.demultiplex~ flow.gate flow.group - flow.interval flow.less flow.less_eq flow.multiplex flow.multiplex2~ - flow.multiplex~ flow.once flow.pass flow.pass_if flow.reject - flow.reject_if flow.route flow.speedlim flow.split flow.sync flow.tee~ - replace + flow.interval flow.less flow.less_eq flow.match flow.multiplex + flow.multiplex2~ flow.multiplex~ flow.once flow.pack flow.pass + flow.pass_if flow.reject flow.reject_if flow.route flow.speedlim + flow.split flow.sync flow.sync_pack flow.tee~ replace }} {flt { flt.biquad~ flt.bpf12~ flt.bpf24~ flt.c_bpf~ flt.c_highshelf~ @@ -94,7 +95,10 @@ math.expr math.floor math.gcd math.inf math.lcm math.log math.log10 math.log2 math.mul math.nan math.neg math.or math.pi math.polyeval math.reciprocal math.round math.round~ math.sign math.sin math.sinh - math.sqrt math.squared math.tan math.tanh math.trunc + math.sqrt math.squared math.sync_add math.sync_and math.sync_div + math.sync_eq math.sync_ge math.sync_gt math.sync_le math.sync_lt + math.sync_mod math.sync_mul math.sync_ne math.sync_or math.sync_sub + math.sync_xor math.tan math.tanh math.trunc }} {midi { midi.ctl2str midi.event2ctl midi.event2note midi.event2prg midi.file @@ -117,7 +121,8 @@ osc.sin~ osc.square~ osc.tri~ }} {patch { - canvas.current canvas.top patch.args + canvas.current canvas.dir canvas.name canvas.path canvas.top + patch.args }} {path { path.basename path.dirname path.exists path.lsdir @@ -133,7 +138,7 @@ patch.props prop prop.declare prop.get prop.get~ prop.set }} {proto { - proto.firmata + proto.firmata proto.sp.alpaca }} {random { random.discrete random.float random.gauss random.int random.linear @@ -143,6 +148,9 @@ snd.file }} {spat { + hoa.2d.decoder~ hoa.2d.encoder~ hoa.2d.map~ hoa.2d.optim~ + hoa.2d.projector~ hoa.2d.recomposer~ hoa.2d.rotate~ hoa.2d.wider~ + hoa.@process hoa.in hoa.in~ hoa.out hoa.out~ hoa.process~ hoa.scope~ pan.cos~ pan.linsig~ pan.lin~ pan.spread~ pan.sqrt~ spat.pan4~ spat.pan8~ }} @@ -160,8 +168,8 @@ synth.risset_arp~ synth.risset_tone~ synth.shakers~ synth.wurley~ }} {system { - system.cursor system.getenv system.hostname system.memsize - system.memused system.screen_size system.shell + system.colorpanel system.cursor system.getenv system.hostname + system.memsize system.memused system.screen_size system.shell }} {tl { tl.bang tl.cue tl.timeline tl.toggle tl.transport @@ -169,8 +177,8 @@ {ui { ui.aview ui.bang ui.colorpanel ui.display ui.dsp~ ui.env ui.gain2~ ui.gain~ ui.icon ui.incdec ui.keyboard ui.knob ui.label ui.link - ui.matrix ui.menu ui.meter~ ui.number ui.number~ ui.preset ui.radio - ui.rslider ui.scope~ ui.slider ui.slider2d ui.sliders ui.spectroscope~ - ui.tab ui.toggle + ui.matrix ui.menu ui.meter~ ui.mouse_filter ui.mouse_route ui.number + ui.number~ ui.polar ui.preset ui.radio ui.rslider ui.scope~ ui.slider + ui.slider2d ui.sliders ui.spectroscope~ ui.tab ui.toggle }} } diff --git a/ceammc/gui/plugins/ceammc_popup_menu_tree.tcl b/ceammc/gui/plugins/ceammc_popup_menu_tree.tcl index d19633dfde..14e1824202 100644 --- a/ceammc/gui/plugins/ceammc_popup_menu_tree.tcl +++ b/ceammc/gui/plugins/ceammc_popup_menu_tree.tcl @@ -41,13 +41,14 @@ }} {base { function function.call gain~ matrix~ metro.pattern metro.seq mix~ - obj.props radio window xfade2~ xfade~ + obj.props radio window xdac~ xfade2~ xfade~ }} {conv { array.p2s array.s2p conv.amp2dbfs conv.bpm2hz conv.bpm2ms conv.bpm2sec - conv.cc2amp conv.dbfs2amp conv.lin2curve conv.lin2exp conv.lin2lin - conv.list2props conv.midi2freq conv.pitch2midi conv.samp2sec - conv.sec2samp conv.sec2str conv.str2sec + conv.car2pol conv.cc2amp conv.dbfs2amp conv.lin2curve conv.lin2exp + conv.lin2lin conv.list2props conv.midi2freq conv.phase2rad + conv.phase2rad~ conv.pitch2midi conv.pol2car conv.rad2phase + conv.rad2phase~ conv.samp2sec conv.sec2samp conv.sec2str conv.str2sec }} {data { data.dict data.fifo data.float data.int data.list data.mlist data.set @@ -68,10 +69,10 @@ {flow { expand_env flow.append flow.change flow.count flow.demultiplex flow.demultiplex2~ flow.demultiplex~ flow.gate flow.group - flow.interval flow.less flow.less_eq flow.multiplex flow.multiplex2~ - flow.multiplex~ flow.once flow.pass flow.pass_if flow.reject - flow.reject_if flow.route flow.speedlim flow.split flow.sync flow.tee~ - replace + flow.interval flow.less flow.less_eq flow.match flow.multiplex + flow.multiplex2~ flow.multiplex~ flow.once flow.pack flow.pass + flow.pass_if flow.reject flow.reject_if flow.route flow.speedlim + flow.split flow.sync flow.sync_pack flow.tee~ replace }} {flt { flt.biquad~ flt.bpf12~ flt.bpf24~ flt.c_bpf~ flt.c_highshelf~ @@ -126,7 +127,10 @@ math.expr math.floor math.gcd math.inf math.lcm math.log math.log10 math.log2 math.mul math.nan math.neg math.or math.pi math.polyeval math.reciprocal math.round math.round~ math.sign math.sin math.sinh - math.sqrt math.squared math.tan math.tanh math.trunc + math.sqrt math.squared math.sync_add math.sync_and math.sync_div + math.sync_eq math.sync_ge math.sync_gt math.sync_le math.sync_lt + math.sync_mod math.sync_mul math.sync_ne math.sync_or math.sync_sub + math.sync_xor math.tan math.tanh math.trunc }} {midi { midi.ctl2str midi.event2ctl midi.event2note midi.event2prg midi.file @@ -149,7 +153,8 @@ osc.sin~ osc.square~ osc.tri~ }} {patch { - canvas.current canvas.top patch.args + canvas.current canvas.dir canvas.name canvas.path canvas.top + patch.args }} {path { path.basename path.dirname path.exists path.lsdir @@ -165,7 +170,7 @@ patch.props prop prop.declare prop.get prop.get~ prop.set }} {proto { - proto.firmata + proto.firmata proto.sp.alpaca }} {random { random.discrete random.float random.gauss random.int random.linear @@ -175,6 +180,9 @@ snd.file }} {spat { + hoa.2d.decoder~ hoa.2d.encoder~ hoa.2d.map~ hoa.2d.optim~ + hoa.2d.projector~ hoa.2d.recomposer~ hoa.2d.rotate~ hoa.2d.wider~ + hoa.@process hoa.in hoa.in~ hoa.out hoa.out~ hoa.process~ hoa.scope~ pan.cos~ pan.linsig~ pan.lin~ pan.spread~ pan.sqrt~ spat.pan4~ spat.pan8~ }} @@ -192,8 +200,8 @@ synth.risset_arp~ synth.risset_tone~ synth.shakers~ synth.wurley~ }} {system { - system.cursor system.getenv system.hostname system.memsize - system.memused system.screen_size system.shell + system.colorpanel system.cursor system.getenv system.hostname + system.memsize system.memused system.screen_size system.shell }} {tl { tl.bang tl.cue tl.timeline tl.toggle tl.transport @@ -201,9 +209,9 @@ {ui { ui.aview ui.bang ui.colorpanel ui.display ui.dsp~ ui.env ui.gain2~ ui.gain~ ui.icon ui.incdec ui.keyboard ui.knob ui.label ui.link - ui.matrix ui.menu ui.meter~ ui.number ui.number~ ui.preset ui.radio - ui.rslider ui.scope~ ui.slider ui.slider2d ui.sliders ui.spectroscope~ - ui.tab ui.toggle + ui.matrix ui.menu ui.meter~ ui.mouse_filter ui.mouse_route ui.number + ui.number~ ui.polar ui.preset ui.radio ui.rslider ui.scope~ ui.slider + ui.slider2d ui.sliders ui.spectroscope~ ui.tab ui.toggle }} } {extra diff --git a/ceammc/gui/plugins/completion-plugin.tcl b/ceammc/gui/plugins/completion-plugin.tcl deleted file mode 100644 index be71bfafed..0000000000 --- a/ceammc/gui/plugins/completion-plugin.tcl +++ /dev/null @@ -1,632 +0,0 @@ -# Copyright (c) 2011 yvan volochine -# -# This file is part of completion-plugin. -# -# completion-plugin 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 3 of the License, or -# (at your option) 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. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . - -# META NAME completion plugin -# META DESCRIPTION enables completion for objects -# META AUTHOR yvan.volochine@gmail.com -# META VERSION 0.42 - -# TODO -# - add user arguments (tabread $1 ...) - - -namespace eval ::completion:: { - variable ::completion::config - variable external_filetype "" -} - -########################################################### -# overwritten -rename pdtk_text_editing pdtk_text_editing_old -rename ::dialog_font::ok ::dialog_font::ok_old - -############################################################ -# GLOBALS - -# default -set ::completion::config(save_mode) 1 ;# save keywords (s/r/array/table/...) -set ::completion::config(lines) 8 -set ::completion::config(font) "DejaVu Sans Mono" -set ::completion::config(font_size) 10 ;# FIXME ??? -set ::completion::config(bg) "#418bd4" -set ::completion::config(fg) white -set ::completion::config(offset) 0 - -set ::completion::config(border_width) 1 -switch -- $::windowingsystem { - "aqua" { - set ::completion::config(border_width) 0 - set ::completion::config(font) "Monaco" - set ::completion::config(font_size) 12 - } - "win32" { - set ::completion::config(font_size) 10 - } - "x11" { } -} - -# private -set ::toplevel "" -set ::current_canvas "" -set ::current_tag "" -set ::current_text "" -set ::erase_text "" -set ::completions {"(none)"} -set ::new_object false -set ::editx 0 -set ::edity 0 -set ::focus "" -set ::completion_text_updated 0 - -# all pd internals (hopefully) -set ::all_externals {abs abs~ adc~ append array {array get} {array max} {array min} \ -{array quantile} {array random} {array set} {array size} {array sum} \ -atan atan2 bag bang~ bendin bendout biquad~ block~ bng bob~ bonk~ \ -bp~ catch~ change choice clip clip~ clone cnv cos cos~ cpole~ cputime \ -ctlin ctlout czero_rev~ czero~ dac~ dbtopow dbtopow~ dbtorms dbtorms~ \ -declare del delay delread4~ delread~ delwrite~ div drawcurve drawnumber \ -drawpolygon drawsymbol drawtext element env~ exp expr expr~ exp~ fexpr~ \ -fft~ fiddle~ filledcurve filledpolygon framp~ fswap ftom ftom~ get getsize \ -hdl hip~ hradio hsl hslider ifft~ inlet inlet~ int key keyname keyup \ -line line~ {list append} {list fromsymbol} {list length} {list prepend} \ -{list split} {list tosymbol} {list trim} loadbang log log~ loop~ lop~ \ -lrshift~ makefilename makenote max max~ metro midiclkin midiin midiout \ -midirealtimein min min~ mod moses mtof mtof~ \ -namecanvas nbx netreceive netsend noise~ notein noteout openpanel \ -oscformat oscparse osc~ outlet outlet~ pack page pd~ pgmin pgmout phasor~ \ -pipe pique plot pointer poly polytouchin polytouchout pow powtodb powtodb~ \ -pow~ print print~ q8_rsqrt~ q8_sqrt~ qlist radiobut radiobutton random \ -rdb readsf~ realtime receive receive~ rfft~ rifft~ rmstodb rmstodb~ \ -route rpole~ rsqrt~ rzero_rev~ rzero~ samphold~ samplerate~ savepanel \ -scalar sel select send send~ set setsize sigmund~ sig~ sin snapshot~ \ -soundfiler spigot sqrt sqrt~ stdout stripnote struct swap switch~ \ -sysexin table tabosc4~ tabplay~ tabread tabread4 tabread4~ tabread~ \ -tabreceive~ tabsend~ tabwrite tabwrite~ tan template text {text define} \ -{text delete} {text fromlist} {text get} {text search} {text sequence} \ -{text set} {text size} {text tolist} textfile tgl threshold~ throw~ \ -timer toggle touchin touchout trigger unpack until value vcf~ vdl vd~ \ -vline~ vradio vsl vslider vsnapshot~ wrap wrap~ writesf~} - - -proc ::completion::init {} { - variable external_filetype - ::completion::read_config - switch -- $::windowingsystem { - "aqua" { set external_filetype *.d_fat } - "win32" { set external_filetype *.dll } - "x11" { set external_filetype *.pd_linux } - } - - ::completion::add_user_externals - ::completion::add_libraries_externals - ::completion::add_user_objectlist - ::completion::add_ceammc_externals - set ::all_externals [lsort $::all_externals] -} - -proc ::completion::loaded {mytoplevel} { - bind ${mytoplevel} {+::completion::trigger } -} - -# taken from kiosk-plugin.tcl by Iohannes -proc ::completion::read_config {{filename completion.cfg}} { - if {[file exists $filename]} { - set fp [open $filename r] - } else { - set filename [file join $::current_plugin_loadpath $filename] - if {[file exists $filename]} { - set fp [open $filename r] - } else { - puts "completion.cfg not found" - return False - } - } - while {![eof $fp]} { - set data [gets $fp] - if { [string is list $data ] } { - if { [llength $data ] > 1 } { - set ::completion::config([lindex $data 0]) [lindex $data 1] - } - } - } - close $fp - return True -} - -proc ::completion::add_user_externals {} { - variable external_filetype - foreach pathdir [concat $::sys_searchpath $::sys_staticpath] { - set dir [file normalize $pathdir] - if { ! [file isdirectory $dir]} {continue} - foreach filename [glob -directory $dir -nocomplain -types {f} -- $external_filetype] { - set basename [file tail $filename] - set name [file rootname $basename] - lappend ::all_externals $name - } - } -} - -proc ::completion::add_libraries_externals {} { - foreach lib $::startup_libraries { - set filename [file join $::current_plugin_loadpath "extra_objects" $lib] - ::completion::read_objectlist_file [format "%s.txt" $filename] - } -} - -proc ::completion::add_ceammc_externals {} { - set filename [file join $::current_plugin_loadpath "ceammc_objects"] - ::completion::read_objectlist_file [format "%s.txt" $filename] - - set filename [file join $::current_plugin_loadpath "extra_objects"] - ::completion::read_objectlist_file [format "%s.txt" $filename] -} - -proc ::completion::add_user_objectlist {} { - set userdir [file join $::current_plugin_loadpath "user_objects"] - foreach filename [glob -directory $userdir -nocomplain -types {f} -- \ - *.txt] { - ::completion::read_objectlist_file $filename - } -} - -proc ::completion::read_objectlist_file {afile} { - if {[file exists $afile] - && [file readable $afile] - } { - set fl [open $afile r] - while {[gets $fl line] >= 0} { - if {[string index $line 0] ne ";" - && [string index $line 0] ne " " - && [lsearch -exact $::all_externals $line] == -1} { - lappend ::all_externals $line - } - } - close $fl - } -} - -proc ::completion::trigger {} { - if {$::current_canvas ne "" - && $::current_text eq "" - && ! $::completion_text_updated - } { - set ::current_text \ - [$::current_canvas itemcget $::current_tag -text] - ::completion::trimspaces - } - - - if {$::new_object && $::current_text ne ""} { - bind $::current_canvas {::completion::text_keys %K} - - if {![winfo exists .pop]} { - ::completion::popup_draw - ::completion::search - ::completion::try_common_prefix - ::completion::update_gui - set first [lindex $::completions 0] - if {[::completion::unique] } { - ::completion::replace_text ${first} - ::completion::popup_destroy 1 - ::completion::disable - } - } { - if {[::completion::unique]} { - ::completion::choose_selected - } elseif { [llength $::completions] > 1 } { - if {![::completion::try_common_prefix]} { - ::completion::increment - } - } - } - } -} - -proc ::completion::search {{text ""}} { - # without the arg there are some bugs when keys come from listbox - set ::erase_text $::current_text - if {$text ne ""} { - set ::current_text $text - set ::erase_text $text - } elseif { !$::completion_text_updated } { - set ::current_text \ - [$::current_canvas itemcget $::current_tag -text] - } - ::completion::trimspaces - if {$::current_text ne ""} { - # prevent wildcards ? ;# FIXME - set ::completions [lsearch -all -inline -glob \ - $::all_externals $::current_text*] - } { set ::completions {} } - ::completion::update_gui -} - -proc ::completion::update_gui {} { - if {[winfo exists .pop.f.lb]} { - ::completion::scrollbar_check - if {$::completions == {}} { ::completion::disable } - if {[llength $::completions] > 1} { - .pop.f.lb configure -state normal - .pop.f.lb select clear 0 end - .pop.f.lb select set 0 0 - .pop.f.lb yview scroll -100 page - } - } -} - -proc ::completion::unique {} { - return [expr {[llength $::completions] == 1 - && [::completion::valid]}] -} - -proc ::completion::valid {} { - return [expr {[lindex $::completions 0] ne "(none)"}] -} - -proc ::completion::disable {} { - if {[winfo exists .pop.f.lb]} { - ::completion::scrollbar_check - .pop.f.lb configure -state disabled - } - set ::completions {"(none)"} -} - -proc ::completion::increment {} { - if {$::focus != "pop"} { - focus .pop.f.lb - set ::focus "pop" - } { - set selected [.pop.f.lb curselection] - set updated [expr {($selected + 1) % [llength $::completions]}] - .pop.f.lb selection clear 0 end - .pop.f.lb selection set $updated - # wrap - if {$updated >= $::completion::config(lines)} { - .pop.f.lb yview scroll 1 units - } elseif {$updated == 0} { - .pop.f.lb yview scroll -100 page - } - } -} - -# store keywords (send/receive or array) -proc ::completion_store {tag} { - set name 0 - set kind(sr) {s r} - set kind(sra) {send~ receive~} - set kind(tc) {throw~ catch~} - set kind(arr) {tabosc4~ tabplay~ tabread tabread4 \ - tabread4~ tabread~ tabwrite tabwrite~} - set kind(del) {delread~ delwrite~} - - if {[regexp {^(s|r|send|receive)\s(\S+)$} $tag -> any name]} { - set which sr - } - if {[regexp {^(send\~|receive\~)\s(\S+)$} $tag -> any name]} { - set which sra - } - if {[regexp {^(throw\~|catch\~)\s(\S+)$} $tag -> any name]} { - set which tc - } - if {[regexp {^table\s(\S+)$} $tag -> name]} { - set which arr - } - if {[regexp {^(delread\~|delwrite\~)\s(\S+)\s*\S*$} $tag -> any name]} { - set which del - } - - if {$name != 0} { - foreach key $kind($which) { - if {[lsearch -all -inline -glob $::all_externals [list $key $name]] eq ""} { - lappend ::all_externals [list $key $name] - set ::all_externals [lsort $::all_externals] - } - } - } -} - -proc ::completion::choose_selected {} { - if {[::completion::valid]} { - set selected [.pop.f.lb curselection] - ::completion::popup_destroy 1 - ::completion::replace_text [lindex $::completions $selected] - set ::current_text [lindex $::completions $selected] - ::completion::disable - focus -force $::current_canvas - set ::focus "canvas" - } -} - -# keys with listbox focus -proc ::completion::lb_keys {key} { - set ::completion_text_updated 0 - if {[regexp {^[a-zA-Z0-9~/\._\+]{1}$} $key]} { - ::completion::insert_key $key; return - } - switch -- $key { - "space" { ::completion::insert_key " " } ;# search - "Return" { ::completion::choose_selected } - "BackSpace" { ::completion::chop } ;# search - } -} - -# keys from textbox -proc ::completion::text_keys {key} { - set ::completion_text_updated 0 - switch -- $key { - "plus" { set key "+" } - "minus" { set key "-" } - "Escape" { ::completion::popup_destroy 1 } - } - if {[regexp {^[a-zA-Z0-9~/\._\+\-\*]{1}$} $key]} { - ::completion::search - } elseif {$key eq "space"} { - ::completion::search - } elseif {$key eq "BackSpace"} { - after 10; ::completion::search ;# FIXME - } elseif {$key eq "Return"} { - ::completion::choose_or_unedit - } -} - -proc ::completion::insert_key {key} { - scan $key %c keynum - pdsend "pd key 1 $keynum 0" - append ::current_text $key - # for some reason this does not work without passing the arg - ::completion::search $::current_text - focus -force $::toplevel - focus -force $::current_canvas ;# FIXME - set ::focus "canvas" - pdtk_text_editing $::toplevel $::current_tag 1 - set ::completion_text_updated 0 -} - -proc ::completion::erase_text {} { - # simulate backspace keys - set i [expr {[string length $::erase_text] + 2}] ;# FIXME - while {--$i > 0} { - event generate $::toplevel [expr {""}] -# pdsend "$::toplevel key 1 8 0" -# pdsend "$::toplevel key 0 8 0" - incr i -1 - } -} - -# replace text from object box -proc ::completion::replace_text {args} { - set text "" - ::completion::erase_text - # in case of spaces - foreach arg $args { set text [concat $text $arg] } - - foreach c [split $text ""] { - event generate $::toplevel [switch $c { - " " { expr {""} } - "-" { expr {""} } - "<" { expr {""} } - ">" { expr {""} } - default { expr {$c} } - } - ] - } -# for {set i 0} {$i < [string length $text]} {incr i 1} { -# set cha [string index $text $i] -# scan $cha %c keynum -# pdsend "pd key 1 $keynum 0" -# pdsend "pd key 0 $keynum 0" -# } - - # to be able to erase it later - set ::erase_text $text - # nasty hack: the widget does not update his text because we pretend - # we typed the text although we faked it so pd gets it as well (mmh) - set ::completion_text_updated 1 - set ::current_text $text -} - -proc ::completion::choose_or_unedit {} { - if {[winfo exists .pop] && [::completion::valid]} { - ::completion::choose_selected - } { - ::completion::text_unedit - } -} - -proc ::completion::text_unedit {} { - pdsend "$::focused_window reselect" - set ::new_object 0 - set ::completion_text_updated 0 -} - -proc ::completion::chop {} { -# pdsend "$::toplevel key 1 8 0" ;# BackSpace -# pdsend "$::toplevel key 0 8 0" - event generate $::toplevel [expr {""}] - set ::current_text [string replace $::current_text end end] - ::completion::search $::current_text - if {[winfo exists .pop]} { - .pop.f.lb selection clear 0 end - .pop.f.lb selection set 0 - } - focus -force $::current_canvas - set ::focus "canvas" -} - -proc ::completion::popup_draw {} { - if {![winfo exists .pop]} { - set menuheight 32 - if {$::windowingsystem ne "aqua"} { incr menuheight 24 } - incr menuheight $::completion::config(offset) - set geom [wm geometry $::toplevel] - # fix weird bug on osx - set decoLeft 0 - set decoTop 0 - regexp -- {([0-9]+)x([0-9]+)\+([0-9]+)\+([0-9]+)} $geom -> width height decoLeft decoTop - set left [expr {$decoLeft + $::editx}] - set top [expr {$decoTop + $::edity + $menuheight}] - - catch { destroy .pop } - toplevel .pop - wm overrideredirect .pop 1 - wm geometry .pop +$left+$top - raise .pop - wm attributes .pop -topmost 1 - - frame .pop.f -takefocus 0 - - pack configure .pop.f - .pop.f configure -relief solid -borderwidth $::completion::config(border_width) -background gray - - listbox .pop.f.lb \ - -selectmode browse -height $::completion::config(lines) \ - -listvariable ::completions -activestyle none \ - -highlightcolor $::completion::config(fg) \ - -selectbackground $::completion::config(bg) \ - -selectforeground $::completion::config(fg) -width 24 \ - -yscrollcommand [list .pop.f.sb set] -takefocus 1 \ - -disabledforeground #333333 - - pack .pop.f.lb -side left -expand 1 -fill both - .pop.f.lb configure -relief flat \ - -font [list $::completion::config(font) $::completion::config(font_size)] \ - -state normal - - pack .pop.f.lb [scrollbar ".pop.f.sb" -command [list .pop.f.lb yview] -takefocus 0] \ - -side left -fill y -anchor w - bind .pop.f.lb {after idle { ::completion::popup_destroy 1 }} - bind .pop.f.lb { ::completion::lb_keys %K } - bind .pop.f.lb {after idle {::completion::choose_selected }} - focus .pop.f.lb - set ::focus "pop" - .pop.f.lb selection set 0 0 - } -} - -proc ::completion::popup_destroy {{unbind 0}} { - catch { destroy .pop } - focus -force $::current_canvas - set ::focus "canvas" - if {$unbind} { - bind $::current_canvas {} - } -} - -proc ::completion::scrollbar_check {} { - if {[winfo exists .pop]} { - if {[llength $::completions] < $::completion::config(lines)} { - pack forget .pop.f.sb - } else { - pack .pop.f.sb -side left -fill y - } - } -} - -########################################################### -# overwritten - -proc pdtk_text_editing {mytoplevel tag editing} { - set ::toplevel $mytoplevel - set tkcanvas [tkcanvas_name $mytoplevel] - set rectcoords [$tkcanvas bbox $tag] - if {$rectcoords ne ""} { - set ::editx [expr {int([lindex $rectcoords 0])}] - set ::edity [expr {int([lindex $rectcoords 3])}] - } - if {$editing == 0} { - selection clear $tkcanvas - # completion - ::completion::disable - ::completion::popup_destroy 1 - set ::completion_text_updated 0 - # store keywords - if {$::completion::config(save_mode)} { - set text [$tkcanvas itemcget $::current_tag -text] - ::completion_store $text - } - } { - set ::editingtext($mytoplevel) $editing - # completion - set ::current_canvas $tkcanvas - if {$tag ne ""} { - # unbind Keys if new object - if {$tag ne $::current_tag} { - bind $::current_canvas {} - } - - set ::current_tag $tag - } - } - set ::new_object $editing - $tkcanvas focus $tag - set ::focus "tag" -} - -proc ::dialog_font::ok {gfxstub} { - variable fontsize - apply $gfxstub $fontsize - cancel $gfxstub - # completion - set ::completion::config(font_size) [expr {$fontsize}]; - # linux only ? -} - -############################################################ -# utils - -# `prefix' from Bruce Hartweg -proc ::completion::prefix {s1 s2} { - regexp {^(.*).*\0\1} "$s1\0$s2" all pref - return $pref -} - -proc ::completion::try_common_prefix {} { - set found 0 - set prefix [::completion::common_prefix] - if {$prefix ne $::current_text && $prefix ne ""} { - ::completion::replace_text $prefix - # prevent errors in pdtk_text_editing - catch { focus .pop.f.lb } - set ::current_text $prefix - set found 1 - } - return $found -} - -proc ::completion::common_prefix {} { - set prefix "" - if {[llength $::completions] > 1} { - set prefix [::completion::prefix \ - [lindex $::completions 0] \ - [lindex $::completions end]] - } - return $prefix -} - -proc ::completion::trimspaces {} { - set ::current_text [string trimright $::current_text " "] -} - -# just in case.. -bind all <$::modifier-Key-Return> {pdsend "$::focused_window reselect"} - -########################################################### -# main - -::completion::init - -bind PatchWindow <> {+::completion::loaded %W} diff --git a/ceammc/gui/plugins/completion-plugin/COPYING b/ceammc/gui/plugins/completion-plugin/COPYING new file mode 100644 index 0000000000..2d0c65c075 --- /dev/null +++ b/ceammc/gui/plugins/completion-plugin/COPYING @@ -0,0 +1,24 @@ +Copyright (c) 2018 by the respective owner. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of the nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/ceammc/gui/plugins/completion-plugin/README.deken.pd b/ceammc/gui/plugins/completion-plugin/README.deken.pd new file mode 100644 index 0000000000..6139778b3e --- /dev/null +++ b/ceammc/gui/plugins/completion-plugin/README.deken.pd @@ -0,0 +1,14 @@ +#N canvas 637 121 611 343 10; +#X obj 69 66 cnv 11 476 17 empty empty Please restart pure data after installing the plugin +2 9 0 14 -184748 -262144 0; +#X text 130 149 [completion-plugin] version 0.46.0 [completion-plugin] +finished scanning externals; +#X text 75 101 After restarting you can confirm in the console window +the plugin was successfully loaded by seeing something like that:; +#X obj 69 190 cnv 11 476 17 empty empty see the help file 2 9 0 +14 -34555 -262144 0; +#X obj 69 18 cnv 11 278 17 empty empty Pure Data Auto Complete Tcl plugin +2 9 0 14 -33289 -262144 0; +#X text 133 275 File->Preferences->Auto Complete settings; +#X text 70 226 You can open the help file by clicking on the "Help" +button after going to; diff --git a/ceammc/gui/plugins/completion-plugin/README.md b/ceammc/gui/plugins/completion-plugin/README.md new file mode 100644 index 0000000000..997c2a7b5a --- /dev/null +++ b/ceammc/gui/plugins/completion-plugin/README.md @@ -0,0 +1,114 @@ +# PD AutoComplete Plugin + +This Gui-Plugin enables auto-completion for [pure-data](http://puredata.info) objects. + +* **Does it run on Vanilla?** Yes. It is a Tk/Tcl pluging made to run in Vanilla. +* **What about Purr Data?** Purr Data uses [nw.js](https://nwjs.io/) for it's GUI. So this pluging doesn't work in Purr Data. But if you're on windows you can use [PD AutoComplete Script](https://github.com/HenriAugusto/PD-AutoComplete-Script) + +Here is a link to the [original repo by Yvan Volochine](https://github.com/gusano/completion-plugin). + +## Gif + +![PD AutoComplete Plugin gif](https://github.com/HenriAugusto/completion-plugin/blob/master/images/PD_completion-plugin_gif_demo.gif) + +## How to install: + +*After* you install the plugin **you must restart Pure Data**. + +### Deken (easy way) + + - just search for the completion-plugin on deken <3 + - **you need at least Deken 0.3.1** to download the completion plugin. **Pd-0.48-1 comes with deken-0.2.4**! So either + - download Pd-0.48-2 + - open Deken on PD 0.48-1 or older and search for deken. Then install the newer Deken version through Deken. + +### Manually (not so easy way) + + - just [download](https://github.com/HenriAugusto/completion-plugin/releases) the plugin and put the whole `PD-AutoComplete-plugin` folder anywhere and add it to your pd paths in **file->Preferences->Path** + - The easiest way is it on the "extras" folders of your pd install. If you do this you don't need to set the path. + - Yet i recommend having a "shared extras" folder and add it to your PD Path. This way if you have more than 1 pd installs (example: if you've used the zip distributions to have more than one PD version) + + +## How to use: + +Just hit the TAB key while typing into an object to trigger completion mode. + +Use up and down to move through the suggestions. Use shift+arrows for faster navigation. + +### Search modes + +There are three search modes + +* **normal:** search for exact matches +* **skip:** search for anything containing the input chars in order. Ex: plf matches zexy/[p]o[l]y[f]un +* **monolithic:** search for objects contained in **multi-object** ("monolithic") distributions (.dll, pd_darwin, .pdlinux). Those are read from monolithicLibs.txt. The respective library must be loaded! See [this link](https://github.com/pure-data/externals-howto#library) on that matter. + +How to use each one: + +* Just type normally to use **normal** +* Start your search with an "**.**" to use **skip** +* Start your search with an "**,**" to use **monolithic** + +### Externals scanning + +The plugin intelligently scans the paths set by the user (file->preferences->path) to scan for externals without the need for the user to type their name on a file. Consequently the script doesn't need a list of objects. + +It searches the static default paths (ex: *C:/PureData/pd-0.48-0.msw/pd/extra/*) for libraries and then searches any path you've set in *file->preferences->path* or that Deken have set for you. + +#### duplicates + +Some objects **by design** might be scanned twice as this reflects Pure Data objection instantiation. + +If you've ser for example the following folder in *file->preferences->path* + +``` +C:/Users/Stravinsky/Dropbox/pd-0.48-0.msw/pd/extra/iemguts/ +``` + +You can use the canvasargs external in two ways (regardless of the autocomplete plugin): + +[canvasargs] +[iemguts/canvasargs] + +The first use the path you've set. The second uses the standard path. So the autocomplete plugin will show two options for canvasargs. +Notice that the first method doesn't avoid naming conflicts while the seconds does. For that reason the latter is usually preferred. + +#### Extra keywords + +You can define useful stuff in any .txt inside the folder *custom_completions*. I've already added some useful keywords like "anything", "adddollar", etc and even some constants like Pi and the golden ratio. + +### Settings + +* now you can configure the plugin under preferences->PD AutoComplete Settings. + + - **auto complete library names:** + - *on:* [list-abs/list-clip] + - *off:* [list-clip] + - *When the "autocomplete libraries" option is *enabled*: you can use shift+enter to type obj with the library* + - *When the "autocomplete libraries" option is *disabled*: you can use shift+enter to type only the object name (withouh the library)* +- **Number of lines to display:** number of completion suggestions the plugin will display +- **Font size:** the size of the font used for the suggestions window +- **Maximum scan depth:** how deep the plugin will look inside a search path. + - *Example:* the *iemguts* libraries's folder contains a subfolder "example" with some explanatory patches that you might not want to scan. + - So if you set a path to the iemguts folder and use a value of 1 for max scan depth it will only scan the stuff inside the *iemguts/* folder. If you set 2 or more it will also scan *iemguts/examples* +- **bkg color options:** change the background color for each search mode. + +- **rescan:** update the completions after you installed/uninstalled externals. +- **default:** reset the plugin settings to the default +- **save to file:** save your settings to the HD. The settings are saved in the `completion.cfg` config file. + - Even if you change the pluging settings the new settings won't be remembered between pd sessions unless you save them to the file. + +Settings are applied immediately after you change them but are only saved when you click "save to file". That means, unless you save them to the file, the next time you run PD the plugin will use the previous settings. + + +### Development + +Please fill in an issue on the github repository if you find a bug. + +#### Development Guide + +I've written a [developtment guide](https://github.com/HenriAugusto/completion-plugin/blob/master/development%20guide.md) to make it easier to tackle on the code. + +#### Change log + +You can find it [here.](https://github.com/HenriAugusto/completion-plugin/blob/master/changelog.md) diff --git a/ceammc/gui/plugins/completion-plugin/README.pd b/ceammc/gui/plugins/completion-plugin/README.pd new file mode 100644 index 0000000000..1f68b40e89 --- /dev/null +++ b/ceammc/gui/plugins/completion-plugin/README.pd @@ -0,0 +1,35 @@ +#N canvas 353 15 728 715 10; +#X obj 70 131 cnv 11 116 17 empty empty normal search 5 9 0 14 -1 +-262144 0; +#X obj 70 241 cnv 11 130 17 empty empty skipping search 5 9 0 14 -1 +-262144 0; +#X obj 70 401 cnv 11 150 17 empty empty monolithic search 5 9 0 14 +-1 -262144 0; +#X text 65 615 https://github.com/HenriAugusto/completion-plugin; +#X text 210 241 searches starting with a "." (period); +#X text 210 241 searches starting with a "." (period); +#X obj 66 584 cnv 11 476 17 empty empty See the full readme on +2 9 0 14 -2498 -262144 0; +#X text 367 438 \,; +#X text 231 401 searches starting with a " " (comma); +#X text 387 401 \,; +#X text 69 86 There are 3 search modes. The plugin will change it's +color to indicate which search mode is being used. You can edit those +colors in Preferences -> Auto Complete Settings, f 90; +#X obj 72 13 cnv 11 232 17 empty empty PD Auto Complete plugin Help +2 9 0 14 -90150 -262144 0; +#X text 70 63 Click with the LMB or press enter to choose an completion. +; +#X text 66 156 1 - Create an object box and press Ctrl+space. Then +type poly to see the suggestions; +#X text 66 279 2 - Create an object box and press Ctrl+space. Then +type ".mfn" to find the [makefilename] object. It searches for anything +that contains the 'm' \, 'f' and 'n' chars in that order., f 89; +#X text 66 439 3 - Create an object box and press Ctrl+space. Then +type  demu to find the [demultiplex] object located in zexy. You need +to load the desired library to use those objects because they are located +inside a 'monolithic' distribution (.dll \, pd_linux or pd_darwin) +, f 78; +#X text 72 37 Create a new object box \, place it and then press Ctrl+space +anytime to start seeing suggestions. (you can edit this hotkey in preferences) +, f 89; diff --git a/ceammc/gui/plugins/completion-plugin/changelog.md b/ceammc/gui/plugins/completion-plugin/changelog.md new file mode 100644 index 0000000000..75c9a29aec --- /dev/null +++ b/ceammc/gui/plugins/completion-plugin/changelog.md @@ -0,0 +1,168 @@ +# Changelog for Pure Data auto completion tcl plugin + +## v0.47.1 (Henri Augusto) + +### Bug Fixes + + * fixes a bug where the plugin would not save/read the configs from the right folder if the user had any plugin load after the completion-plugin (it was reading "$::current_plugin_loadpath") + +### Improvements + + * Now Control+Shift+Up/Down are used to skip 10 rows up/down (consistent with Ctrl+Left/Right) + +## v0.47.0 (Henri Augusto) + +### Bug Fixes + + * Now that you can set custom-hotkeys this exposed an issue where the keys being used for trigger the plugin would also be typed in the object box. That was fixed by waiting 200ms without processing any KeyRelease event (which should be enough for the user to release the keys used to trigger the plugin) + * users with kbds with languages where "~" is a MultiKey: you can type ~ while seeing the suggestions window by pressing ~ twice (just like you could type ~ in PD <=0.49) + * ex: Portuguese, French, spanish, etc. I've only tested it with my pt-br keyboard, though. + * added some support for typing more chars in ::completion::lb_keyrelease + * fixed bug on parcial completions (completing a common prefix of all suggestions) + +### improvements + + * improvements for the object box deletion when using a special message (options, rescan, debug, etc) + * general cleanup of code + + +## v0.47.0-test1 (Henri Augusto) + +### new features + + * Changes related to pd 0.50 + * in this version the Tab key switches the selected object so now we bind the completion window to **Ctrl+SPace** + * aditionally you can change the binding in the configurations + * [pdcontrol] and [slop~] added to the vanilla object list + -now you can use the suggestion window to access functionality + * **completion::options**: open the options windows + * **completion::rescan**: rescan the externals + * **completion::help**: open the help patch + * **completion::debug**: enter and exit debug mode + * _the plugin automatically deletes the leftover object_ + * that might be optional in the future + * it deletes the object by simulating user input. It is a **hack** so it will delete any object under the one you're typing + +### Bug fixes + + -[namecanvas] suggestion, which was missing, was added + +## v0.46.1 (Henri Augusto) + +### Bug fixes + +* fixes a bug where the plugin tried to bind to _.pop_ after auto completing when **::completion::unique** was true. + +## v0.46.0 (Henri Augusto) + +### new features + +* added help button on settings that opens the help patch. + +### Bug fixes + +* popup is now destroyed when it loses keyboard focus +* now the plugin won't be triggered when the user is typing on comments +* complying with pd 0.49 now we add our setting menu to file->preferences instead of the duplicated (and now gone) edit->preferences +* fixed a bug where scrolling with the mouse wheel was calling choose_selected. Fixed by checking `%b eq 1` inside the event! + + +## v0.45.0 (Henri Augusto) + +### new features +* now you can use shift+enter when **auto complete library names** is *false* to complete the library name. +* added a rescan button to the settings window +* now the plugin detect which multi-object ('monolithic') libraries are actually installed before loading them into the completions +* now the plugin has a readme.pd file that deken can open at startup + +### Bug fixes + +* Fixed a bug where you would get an error when trying to save the settings + + +## v0.44.0 (Henri Augusto) + +* *Major* overhaul and bugfix to the code to bring it up to working condition in par with pd 0.48 API. +* Now the plugin seems to be working on Windows, Linux and OSX! + +### new features + +* now you can configure the plugin under preferences->PD AutoComplete Settings +* Now *::completion::read_config* ignores any line that doesn't start with a char. +* While reading the cfg file it reads lists of arguments instead of just one. Pprevents reading "DejaVu" instead of "DejaVu Sans Mono", for example. +* Now the plugin is able to run witout the .cfg file. It creates the .cfg file in it's absence +* I've implemented three search modes + * **normal:** search for exact matches + * **skip:** search for anything containing the input chars in order. Ex: plf matches zexy/[p]o[l]y[f]un + * **monolithic:** search for objects contained in monolithic distributions (.dll, pd_darwin, .pdlinux). Those need to be declared in monolithicLibs.txt. +* Each search mode has a color +* The plugin intelligently scans the paths set by the user (edit->preferences->path) to scan for externals without the need for the user to type their name on a file. Consequently the script doesn't need a list of objects. +* Yet you can still define useful stuff in any .txt inside the folder *custom_completions*. I've already added some useful keywords like 'anything', 'adddollar', etc and even some constants like Pi and the golden ratio. +* Added navigating faster with shift+up/down +* added warping the listbox ends (overriding the bindings) +* If the completions window would be drawed off-screen we adjust it's position so it is enterily visible. +* I'm disabling the unique names completion for now because i don't think it is desireable. While it does detects when the user type a new name it **doesn't** when those names are not used any more (user closed their containing patch, deleted their objects, etc). In future versions we should be able to do that communicating with PD directly. +* Flexible debugging options (see development guide.md) + + + +## Yvan Volochine version history: + +![original project on GitHub](https://github.com/gusano/ + +## v0.43 + + - new BSD License + + +## 0.42: + + - add `user_objects` file support + - add optional offset for popup position + - add forgotten drawpolygon + +## 0.41: + + - cleanup, simplify focus behavior, remove unused proc, better bindings + - add support to remember `send, receive, table, delread, ...` argument names + - add libraries objects lists (Gem, gridflow, py) + - various fixes + +## 0.40: + + - new GUI + - rename to 'completion-plugin.tcl' + - add bash completion mode + - add support for osx and win32 + - add *.cfg file for user options + - TODO add support for user arguments (like [tabread foo], etc) ?? + +## 0.33: + + - cosmetic fixes for osx + - better box coordinates + - bugfix: popup menu wrongly placed with huge fonts + +## 0.32: + + - add colors + - bugfix: cycling has 1 step too much + - bugfix: first completed doesn't erase typed text + +## 0.31: + + - add TAB support to cycle through completions + +## 0.3: + + - simplify cycling code + - bugfix: nameclash with right-click popup (sic) + - bugfix: missing or mispelled internals + +## 0.2: + + - add popup menu for completion + +## 0.12: + + - fix namespace \ No newline at end of file diff --git a/ceammc/gui/plugins/completion-plugin/completion-plugin.tcl b/ceammc/gui/plugins/completion-plugin/completion-plugin.tcl new file mode 100644 index 0000000000..fcb896968a --- /dev/null +++ b/ceammc/gui/plugins/completion-plugin/completion-plugin.tcl @@ -0,0 +1,1554 @@ +# Copyright (c) 2011 yvan volochine +# +# This file is part of completion-plugin. +# +# completion-plugin 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 3 of the License, or +# (at your option) 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. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# META NAME completion plugin +# META DESCRIPTION enables completion for objects +# META AUTHOR yvan.volochine@gmail.com +# META VERSION 0.42 + +# TODO +# - add user arguments (tabread $1 ...) + +# ========================================== + +# The original version was developed by Yvan Volochine a long time ago (as the time of writing: 7 years ago) +# I then embraced the project and i'm willing to mantain it for as long as i can. +# Right now i'm kind of new to .tcl so i'm trying to stay true to the original code. +# When reasonable i will comment talking about changes i did and why. +# +# https://github.com/HenriAugusto/completion-plugin +# +# Henri Augusto + + +package require Tcl 8.5 +package require pd_menucommands 0.1 + +namespace eval ::completion:: { + variable ::completion::config + variable external_filetype "" +} + +########################################################### +# overwritten +rename pdtk_text_editing pdtk_text_editing_old + +############################################################ +# GLOBALS + +set ::completion::plugin_version "0.47.1" + +# default +set ::completion::config(save_mode) 1 ;# save keywords (s/r/array/table/...) +set ::completion::config(max_lines) 20 +set ::completion::config(font) "DejaVu Sans Mono" +set ::completion::config(font_size) 8 ;# should load pd's default +set ::completion::config(bg) "#0a85fe" +set ::completion::config(skipbg) "#0ad871" +set ::completion::config(monobg) "#9832ff" +set ::completion::config(fg) white +set ::completion::config(offset) 0 +set ::completion::config(max_scan_depth) 1 +set ::completion::config(auto_complete_libs) 1 + +# some nice colors to try: #0a85fe #0ad871 #9832ff ; those are great: #ff9831 #ff00ee #012345 + +# private variables + +set ::completion_plugin_path "" +set ::toplevel "" +set ::current_canvas "" +set ::current_tag "" +set ::current_text "" +set ::erase_text "" +set ::completions {"(empty)"} +set ::new_object false +set ::editx 0 +set ::edity 0 +set ::focus "" +set ::completion_text_updated 0 +set ::is_shift_down 0 +set ::is_ctrl_down 0 +set ::is_alt_down 0 +set ::waiting_trigger_keyrelease 0 +# =========== [DEBUG mode on/off] ============ +#1 = true 0 = false +set ::completion_debug 0 ; +# debug categories +set ::debug_loaded_externals 0 ;#prints loaded externals +set ::debug_entering_procs 1 ;#prints a message when entering a proc +set ::debug_key_event 0 ;#prints a message when a key event is processed +set ::debug_searches 0 ;#messages about the performed searches +set ::debug_popup_gui 0 ;#messages related to the popup containing the code suggestions +set ::debug_char_manipulation 0 ;#messages related to what we are doing with the text on the obj boxes (inserting/deleting chars) +set ::debug_unique_names 0 ;#messages related to storing [send/receive] names [tabread] names and alike. +set ::debug_settings 1 ;#messages related to storing [send/receive] names [tabread] names and alike. +set ::debug_prefix 0 ;#messages related to storing [send/receive] names [tabread] names and alike. + +#0 = normal +#1 = skipping +#2 = monolithic +set ::current_search_mode 0 + +# all pd VANILLA objects +set ::all_externals {} + +set ::monolithic_externals {} + +set ::loaded_libs {} + +#useful function for debugging +proc ::completion::debug_msg {dbgMsg {debugKey "none"}} { + switch -- $debugKey { + "none" {} + "loaded_externals" { if { !$::debug_loaded_externals } { return } } + "entering_procs" { if { !$::debug_entering_procs } { return } } + "key_event" { if { !$::debug_key_event } { return } } + "searches" { if { !$::debug_searches } { return } } + "popup_gui" { if { !$::debug_popup_gui } { return } } + "char_manipulation" { if { !$::debug_char_manipulation } { return } } + "unique_names" { if { !$::debug_unique_names } { return } } + "settings" { if { !$::debug_settings } { return } } + "prefix" { if { !$::debug_prefix } { return } } + } + if { $::completion_debug } { + ::pdwindow::post "autocmpl_dbg: $dbgMsg\n" + } +} + +# This function sends keydown messages to pd +# It is better to use a separate function instead of hardcoded pdsend messages like Yvan was doing because the pd tcl api might change. +# In fact when i took the project that was one of the major bugs with it. It was using pdsend "pd key 1 $keynum 0" which where not working. +# So using functions (procs) promotes mantainability because you only have to change their implementation to fix the code after api changes. +proc ::completion::sendKeyDown {keynum} { + pdsend "[winfo toplevel $::current_canvas] key 1 $keynum 0" +} + +# This function sends keydown and then keyup messages to pd +proc ::completion::sendKeyDownAndUp {keynum} { + pdsend "[winfo toplevel $::current_canvas] key 1 $keynum 0" + pdsend "[winfo toplevel $::current_canvas] key 0 $keynum 0" +} + +#called once upon plugin initialization +proc ::completion::init {} { + set initTime [clock milliseconds] + variable external_filetype + set ::completion_plugin_path "$::current_plugin_loadpath" + ::pdwindow::post "\[completion-plugin\] version $::completion::plugin_version\n" + ::completion::read_config + #::completion::read_extras + switch -- $::windowingsystem { + "aqua" { set external_filetype *.pd_darwin } + "win32" { set external_filetype *.dll} + "x11" { set external_filetype *.pd_linux } + } + if {[catch {bind "completion-plugin" <$completion::config(hotkey)> {::completion::trigger; break;}} err]} { + ::pdwindow::post "\n---Error while trying to bind the completion plugin hotkey---\n" + ::pdwindow::post " hotkey: $::completion::config(hotkey)\n" + ::pdwindow::post " err: $err\n\n" + } + + + ::completion::scan_all_completions + ::completion::init_options_menu + set finalTime [clock milliseconds] + set delta [expr {$finalTime-$initTime}] + set count [llength $::all_externals] + set count [expr {$count+[llength $::monolithic_externals]}] + ::pdwindow::post "\[completion-plugin\] loaded $count completions in $delta milliseconds\n" +} + +proc ::completion::scan_all_completions {} { + set ::all_externals {hslider vslider bng cnv bang float symbol int send receive select route pack unpack trigger spigot moses until print makefilename change swap value list {list append} {list fromsybmol} {list length} {list prepend} {list split} {list store} {list tosymbol} {list trim} delay metro line timer cputime realtime \ + pipe + - * / pow == != > < >= <= & && | || % << >> mtof powtodb rmstodb ftom dbtopow dbtorms mod div sin cos tan atan atan2 sqrt log exp abs random max min clip wrap notein ctlin pgmin bendin touchin polytouchin midiin sysexin midirealtimein midiclkin noteout ctlout pgmout bendout touchout polytouchout midiout makenote stripnote \ + oscparse oscformat tabread tabread4 tabwrite soundfiler table array loadbang netsend netreceive glist textfile text openpanel savepanel bag poly key keyup keyname declare +~ -~ *~ /~ max~ min~ clip~ sqrt~ rsqrt~ q8_sqrt~ q8_rsqrt~ wrap~ fft~ ifft~ rfft~ rifft~ pow~ log~ exp~ abs~ framp~ mtof~ ftom~ rmstodb~ dbtorms~ dac~ adc~ sig~ line~ vline~ \ + threshdold~ snapshot~ vsnapshot~ bang~ samplerate~ send~ receive~ throw~ catch~ block~ switch~ readsf~ writesf~ phasor~ cos~ osc~ tabwrite~ tabplay~ tabread~ tabread4~ tabosc4~ tabsend~ tabreceive~ vcf~ noise~ env~ hip~ lop~ bp~ biquad~ samphold~ print~ rpole~ rzero~ rzero_rev~ cpole~ czero~ czero_rev~ delwrite~ delread~ delread4~ vd~ inlet outlet inlet~ outlet~ clone \ + struct drawcurve filledcurve drawpolygon filledpolygon plot drawnumber drawsymbol pointer get set element getsize setsize append scalar sigmund~ bonk~ choice hilbert~ complet-mod~ expr expr~ fexpr~ loop~ lrshift~ pd~ stdout~ rev1~ rev2~ rev3~ bob~ namecanvas savestate pdcontrol slop~} + set ::monolithic_externals {} + ::completion::add_user_externals + ::completion::add_user_customcompletions + ::completion::add_user_monolithiclist + set ::loaded_libs {} ;#clear the loaded_libs because it was only used to scan the right objects located in multi-object distributions + set ::all_externals [lsort $::all_externals] + ::completion::add_special_messages ;#AFTER sorting +} + +proc ::completion::init_options_menu {} { + if {$::windowingsystem eq "aqua"} { + set mymenu .menubar.apple.preferences + } else { + set mymenu .menubar.file.preferences + } + + if { [catch { + $mymenu entryconfigure [_ "Auto Complete settings"] -command {::completion::show_options_gui} + } _ ] } { + $mymenu add separator + $mymenu add command -label [_ "Auto Complete settings"] -command {::completion::show_options_gui} + } +} + +#opens the plugin's help file (as called from the configuration window) +proc ::completion::open_help_file {} { + set filename [file join $::completion_plugin_path "README.pd"] + open_file "$filename" +} + +proc ::completion::show_options_gui {} { + if {[winfo exists .options]} { + focus .options + return + } + toplevel .options + wm title .options "Pd AutoComplete Settings" + + frame .options.f -padx 5 -pady 5 + label .options.f.title_label -text "PD AutoComplete Settings" + .options.f.title_label configure -font [list $::completion::config(font) [expr {$::completion::config(font_size)+3}]] + + label .options.f.status_label -text "" -foreground "#cc2222" + + # COLORS + #note that we are using KeyRelease bindings because using "-validate key" would not validate in the right time. + #ex: you would type a valid string #aabbcc and it would be invalid. Then on the next keypress (whichever it was) it would process #aabbcc + + #Options for background color + label .options.f.click_to_choose_label -text "click to\nchoose" + + label .options.f.bg_label -text "bkg color" + entry .options.f.bg_entry -width 8 + frame .options.f.bg_demo -background $::completion::config(bg) -width 40 -height 40 + bind .options.f.bg_demo { ::completion::user_select_color "bg"} + bind .options.f.bg_entry { ::completion::gui_options_update_color ".options.f.bg_entry" ".options.f.bg_demo" "bg" } + + + #Options for skipping mode background color + label .options.f.skip_bg_label -text "skipping bkg color" + entry .options.f.skip_bg_entry -width 8 + frame .options.f.skip_bg_demo -background $::completion::config(skipbg) -width 40 -height 40 + bind .options.f.skip_bg_demo { ::completion::user_select_color "skipbg"} + bind .options.f.skip_bg_entry { ::completion::gui_options_update_color ".options.f.skip_bg_entry" ".options.f.skip_bg_demo" "skipbg" } + + #Options for monolithic mode background color + label .options.f.mono_bg_label -text "mono-object bkg color" + entry .options.f.mono_bg_entry -width 8 + frame .options.f.mono_bg_demo -background $::completion::config(monobg) -width 40 -height 40 + bind .options.f.mono_bg_demo { ::completion::user_select_color "monobg"} + bind .options.f.mono_bg_entry { ::completion::gui_options_update_color ".options.f.mono_bg_entry" ".options.f.mono_bg_demo" "monobg" } + + + #Misc + checkbutton .options.f.auto_complete_libs -variable ::completion::config(auto_complete_libs) -onvalue 1 -offvalue 0 + label .options.f.auto_complete_libs_label -text "auto complete library names" + + spinbox .options.f.number_of_lines -width 6 -from 3 -to 30 -textvariable ::completion::config(max_lines) + label .options.f.number_of_lines_label -text "number of lines to display" + + spinbox .options.f.maximum_scan_depth -width 6 -from 0 -to 10 -textvariable ::completion::config(max_scan_depth) + label .options.f.maximum_scan_depth_label -text "maximum scan depth" + + spinbox .options.f.font_size -width 6 -from 7 -to 20 -textvariable ::completion::config(font_size) + label .options.f.font_size_label -text "font size" + + #Hotkey + label .options.f.hotkeylabel -text "hotkey (require save&restart)" + entry .options.f.hotkeyentry -width 22 + .options.f.hotkeyentry insert 0 "$::completion::config(hotkey)" + bind .options.f.hotkeyentry { + set ::completion::config(hotkey) [.options.f.hotkeyentry get] + } + + #Buttons + button .options.f.save_btn -text "save to file" -command ::completion::write_config + button .options.f.default_btn -text "default" -command ::completion::restore_default_option + button .options.f.rescan_btn -text "rescan" -command ::completion::scan_all_completions + button .options.f.help_btn -text "help" -command ::completion::open_help_file + #.options.f.help_btn configure -font {-family courier -size 12 -weight bold -slant italic} + .options.f.help_btn configure -font {-weight bold} + + + set padding 2 + + # ::::GRID:::: + + #setup main frame stuff + grid .options.f -column 0 -row 0 + grid .options.f.title_label -column 0 -row 0 -columnspan 3 -padx $padding -pady $padding + + #setup the rest + set current_row 1 + + #auto complete libs + grid .options.f.auto_complete_libs_label -column 0 -row $current_row -padx $padding -pady $padding -sticky "e" + grid .options.f.auto_complete_libs -column 1 -row $current_row -padx $padding -pady $padding -sticky "w" + incr current_row + + #number of lines + grid .options.f.number_of_lines_label -column 0 -row $current_row -padx $padding -pady $padding -sticky "e" + grid .options.f.number_of_lines -column 1 -row $current_row -padx $padding -pady $padding -sticky "w" + incr current_row + + #font size + grid .options.f.font_size_label -column 0 -row $current_row -padx $padding -pady $padding -sticky "e" + grid .options.f.font_size -column 1 -row $current_row -padx $padding -pady $padding -sticky "w" + incr current_row + + #maximum scan depth + grid .options.f.maximum_scan_depth_label -column 0 -row $current_row -padx $padding -pady $padding -sticky "e" + grid .options.f.maximum_scan_depth -column 1 -row $current_row -padx $padding -pady $padding -sticky "w" + + grid .options.f.click_to_choose_label -column 2 -row $current_row -padx $padding -pady $padding + incr current_row + + # change background color + grid .options.f.bg_label -column 0 -row $current_row -padx $padding -pady $padding -sticky "e" + grid .options.f.bg_entry -column 1 -row $current_row -padx $padding -pady $padding -sticky "w" + grid .options.f.bg_demo -column 2 -row $current_row -padx $padding -pady $padding + incr current_row + + # change skip mode background color + grid .options.f.skip_bg_label -column 0 -row $current_row -padx $padding -pady $padding -sticky "e" + grid .options.f.skip_bg_entry -column 1 -row $current_row -padx $padding -pady $padding -sticky "w" + grid .options.f.skip_bg_demo -column 2 -row $current_row -padx $padding -pady $padding + incr current_row + + # change mono mode background color + grid .options.f.mono_bg_label -column 0 -row $current_row -padx $padding -pady $padding -sticky "e" + grid .options.f.mono_bg_entry -column 1 -row $current_row -padx $padding -pady $padding -sticky "w" + grid .options.f.mono_bg_demo -column 2 -row $current_row -padx $padding -pady $padding + incr current_row + + #hotkey stuff + grid .options.f.hotkeylabel -column 0 -row $current_row -padx $padding -pady $padding + grid .options.f.hotkeyentry -column 1 -row $current_row -padx $padding -pady $padding + incr current_row + + # Status labels and buttons + #Is the status label used? + #grid .options.f.status_label -column 0 -row $current_row -padx $padding -pady 8 -sticky "e" + grid .options.f.default_btn -column 1 -row $current_row -padx $padding -pady 8 -sticky "e" + grid .options.f.save_btn -column 2 -row $current_row -padx $padding -pady 8 -sticky "w" + grid .options.f.help_btn -column 0 -row $current_row -padx $padding -pady 8 -sticky "w" + incr current_row + grid .options.f.rescan_btn -column 2 -row $current_row -padx $padding -pady 4 -sticky "ew" + + ::completion::update_options_gui +} + +proc ::completion::update_options_gui {} { + .options.f.status_label configure -text "" + .options.f.bg_demo configure -background $::completion::config(bg) + .options.f.skip_bg_demo configure -background $::completion::config(skipbg) + .options.f.mono_bg_demo configure -background $::completion::config(monobg) + .options.f.bg_entry delete 0 end + .options.f.bg_entry insert 0 $::completion::config(bg) + .options.f.skip_bg_entry delete 0 end + .options.f.skip_bg_entry insert 0 $::completion::config(skipbg) + .options.f.mono_bg_entry delete 0 end + .options.f.mono_bg_entry insert 0 $::completion::config(monobg) + .options.f.hotkeyentry delete 0 end + .options.f.hotkeyentry insert 0 $::completion::config(hotkey) +} + +proc ::completion::restore_default_option {} { + set ::completion::config(hotkey) "Control-space" + set ::completion::config(max_lines) 20 + set ::completion::config(font) "DejaVu Sans Mono" + set ::completion::config(font_size) 8 + set ::completion::config(bg) "#0a85fe" + set ::completion::config(skipbg) "#0ad871" + set ::completion::config(monobg) "#9832ff" + set ::completion::config(fg) white + set ::completion::config(offset) 0 + set ::completion::config(max_scan_depth) 1 + set ::completion::config(auto_complete_libs) 1 + ::completion::update_options_gui +} + +proc ::completion::gui_options_update_color {entryWidget frameWidget configTag} { + if { [regexp {^\#(\d|[a-f]){6}$} [$entryWidget get]] } { + set ::completion::config($configTag) [$entryWidget get] + $frameWidget configure -background $::completion::config($configTag) + # chagne color to show it's valid + $entryWidget configure -foreground #000000 + } else { + # chagne color to show it's INvalid + $entryWidget configure -foreground #de2233 + } +} + +# taken from kiosk-plugin.tcl by Iohannes +proc ::completion::read_config {{filename completion.cfg}} { + if {[file exists $filename]} { + set fp [open $filename r] + } else { + set filename [file join $::completion_plugin_path $filename] + if {[file exists $filename]} { + set fp [open $filename r] + } else { + ::completion::debug_msg "completion.cfg not found" + return False + } + } + while {![eof $fp]} { + set data [gets $fp] + if { ![regexp {^\w} $data] } { + continue ;#this line doesn't start with a char + } + # if the user provided the key value pair + ::completion::debug_msg "data length = [llength $data]" "settings" + if { [llength $data ] == 2} { + set ::completion::config([lindex $data 0]) [lindex $data 1] + ::completion::debug_msg "::completion::config([lindex $data 0]) = $::completion::config([lindex $data 0])" "settings" + } elseif { [llength $data ] > 2} { + set ::completion::config([lindex $data 0]) [lrange $data 1 end] + ::completion::debug_msg "::completion::config([lindex $data 0]) = $::completion::config([lindex $data 0])" "settings" + } else { + ::completion::debug_msg "ERROR reading ::completion::config([lindex $data 0]) => data = $data" "settings" + } + } + close $fp + return True +} + +proc ::completion::write_config {{filename completion.cfg}} { + if { [file exists $filename] } { + set fp [open $filename r] + set had_to_create_file false + } else { + set filename [file join $::completion_plugin_path $filename] + if {[file exists $filename]} { + set fp [open $filename r] + set had_to_create_file false + } else { + set fp [open $filename w+] + set had_to_create_file true ;#file will get overwritten so we need to append to $lines + } + } + #read the lines from the file + set lines [split [read $fp] "\n"] + close $fp + + #process the lines + set lines [::completion::write_config_variable $lines "hotkey"] + set lines [::completion::write_config_variable $lines "max_lines"] + set lines [::completion::write_config_variable $lines "font"] + set lines [::completion::write_config_variable $lines "font_size"] + set lines [::completion::write_config_variable $lines "max_scan_depth"] + set lines [::completion::write_config_variable $lines "auto_complete_libs"] + set lines [::completion::write_config_variable $lines "bg"] + set lines [::completion::write_config_variable $lines "fg"] + set lines [::completion::write_config_variable $lines "skipbg"] + set lines [::completion::write_config_variable $lines "monobg"] + set lines [::completion::write_config_variable $lines "offset"] + + #write the file + set fp [open $filename w] + if { $had_to_create_file } { + set lines [linsert $lines 0 "This file was generated by PD AutoComplete in the absence of the original file that comes with the plugin.\n"] + } + puts $fp [join $lines "\n"] + close $fp + #.options.f.status_label configure -text "saved!" + #after 1000 { .options.f.status_label configure -text "" } +} + +proc ::completion::write_config_variable {file_lines name} { + #https://stackoverflow.com/a/37812995/5818209 for writing to specific lines + ::completion::debug_msg "Saving config($name)" "settings" + set pattern ^$name\\s ;# do NOT enclose this in brackets + ::completion::debug_msg "pattern = $pattern" "settings" + set index 0 + set found false + foreach line $file_lines { + #::completion::debug_msg "line = $line" + if {[regexp $pattern $line]} { + ::completion::debug_msg "current variable's line = $line" "settings" + set file_lines [lreplace $file_lines $index $index "$name $::completion::config($name)"] + ::completion::debug_msg "line AFTER = $line" "settings" + set found true + } + incr index + } + if { !$found } { + #if there is no line for that variable, write it + lappend file_lines "$name $::completion::config($name)" + } + return $file_lines +} + +proc ::completion::user_select_color {target} { + set color [tk_chooseColor -title "AutoComplete settings: Choose a color" -initialcolor $::completion::config($target)] + if { $color eq ""} { + return + } + set ::completion::config($target) $color + ::completion::update_options_gui +} + +# this function looks for objects in the current folder and recursively call itself for each subfolder +# we read the subfolders because pd reads the subpatches! +proc ::completion::add_user_externalsOnFolder {{dir .} depth} { + variable external_filetype + if { [expr {$depth > $::completion::config(max_scan_depth)}] } { + return + } + #::completion::debug_msg "external_filetype = $external_filetype" ;#just for debugging + ::completion::debug_msg "===add_user_externalsOnFolder $dir===" "loaded_externals" + ::completion::debug_msg "depth = $depth" "loaded_externals" + + # i concatenate the result of two globs because for some reason i can't use glob with two patterns. I've tried using: {$external_filetype,*.pd} + # list of pd files on the folder + set pd_files [glob -directory $dir -nocomplain -types {f} -- *.pd] + #List of system depentent (*.pd_darwin, *.dll, *.pd_linux) files on the folder + set sys_dependent_files [glob -directory $dir -nocomplain -types {f} -- $external_filetype] + set all_files [concat $pd_files $sys_dependent_files] + # for both types of files + foreach filepath $all_files { + ::completion::debug_msg " external = $filepath" "loaded_externals" + set file_tail [file tail $filepath] ;#this one contains the file extension + set name_without_extension [file rootname $file_tail] + set dir_name [file dirname $filepath] + set how_many_folders_to_get [expr {$depth+0}] + set folder_name [lrange [file split $filepath] end-$how_many_folders_to_get end-1 ] + set extension_path [join $folder_name \/] + if {$extension_path ne ""} { + set extension_path $extension_path\/ + } + ::completion::debug_msg " depth = $depth" "loaded_externals" + ::completion::debug_msg " filepath = $filepath" "loaded_externals" + ::completion::debug_msg " dir_name = $dir_name" "loaded_externals" + ::completion::debug_msg " folder_name = $folder_name" "loaded_externals" + ::completion::debug_msg " extension_path = $extension_path" "loaded_externals" + ::completion::debug_msg " file_tail = $file_tail" "loaded_externals" + ::completion::debug_msg " name_without_extension = $name_without_extension" "loaded_externals" + if {[string range $name_without_extension end-4 end] ne "-help"} { + lappend ::all_externals $extension_path$name_without_extension + lappend ::loaded_libs $extension_path + } + } + #do the same for each subfolder (recursively) + set depth [expr {$depth+1}] + foreach subdir [glob -nocomplain -directory $dir -type d *] { + ::completion::add_user_externalsOnFolder $subdir $depth + } +} + +# this proc runs the main search ::completion::add_user_externalsOnFolder into each main folder +proc ::completion::add_user_externals {} { + ::completion::debug_msg "-----searching externals on the following directories:-----" "loaded_externals" + foreach DIR $::sys_searchpath { + ::completion::debug_msg "$DIR" "loaded_externals" + } + foreach DIR $::sys_staticpath { + ::completion::debug_msg "static path $DIR" "loaded_externals" + } + #for each directory the user set in edit->preferences->path + set dynamic_and_static_paths [concat $::sys_searchpath $::sys_staticpath] + set pathlist $::sys_staticpath + set pathlist $dynamic_and_static_paths + foreach pathdir $pathlist { + set dir [file normalize $pathdir] + if { ! [file isdirectory $dir]} { ;#why Yvan was doing this check? + continue + } + ::completion::add_user_externalsOnFolder $pathdir 0 + #foreach subdir [glob -directory $dir -nocomplain -types {d} *] { + # ::completion::add_user_externalsOnFolder $subdir 1 + #} + } + #remove duplicates from the loaded_libs + set ::loaded_libs [lsort -unique $::loaded_libs] +} + + + +#adds any completion set in any txt file under "custom_completions" +proc ::completion::add_user_customcompletions {} { + ::completion::debug_msg "entering add user object list" "entering_procs" + set userdir [file join $::completion_plugin_path "custom_completions"] + foreach filename [glob -directory $userdir -nocomplain -types {f} -- \ + *.txt] { + ::completion::read_completionslist_file $filename + } +} + +#reads objects stored into monolithic files (*.pd_darwin, *.dll, *.pd_linux) +proc ::completion::add_user_monolithiclist {} { + ::completion::debug_msg "entering add user monolithic list" "entering_procs" + ::completion::debug_msg "::loaded_libs = $::loaded_libs" "loaded_externals" + set userdir [file join $::completion_plugin_path "monolithic_objects"] + + # for each .txt file in /monolithic_objects + foreach filename [glob -directory $userdir -nocomplain -types {f} -- \ + *.txt] { + # Slurp up the data file + set fp [open $filename r] + set file_data [read $fp] + foreach line $file_data { + + # gets the lib name from the string + set lib [lindex [split $line /] 0] + set lib ${lib}/ ;# turns libName into libName/ + + # only if the user actually have that library installed + if { [expr [lsearch -nocase $::loaded_libs $lib] >= 0 ] } { + lappend ::monolithic_externals [split $line /] + } + + } + close $fp + ::completion::debug_msg "======monolithic externals=======\n$::monolithic_externals" "loaded_externals" + } +} + +# Reads anything located in the .txt files in the subfolders +proc ::completion::read_completionslist_file {afile} { + if {[file exists $afile] + && [file readable $afile] + } { + set fl [open $afile r] + while {[gets $fl line] >= 0} { + if {[string index $line 0] ne ";" + && [string index $line 0] ne " " + && [string index $line 0] ne "" + && [lsearch -exact $::all_externals $line] == -1} { + lappend ::all_externals $line + } + } + close $fl + } +} + +########################################################### +# overwritten # +########################################################### +proc pdtk_text_editing {mytoplevel tag editing} { + ::completion::debug_msg "entering overwritten pdtk text editing" "entering_procs" + #::completion::debug_msg " mytoplevel = $mytoplevel" + #::completion::debug_msg " tag = $tag" + #::completion::debug_msg " editing = $editing" + set ::toplevel $mytoplevel + set tkcanvas [tkcanvas_name $mytoplevel] + set rectcoords [$tkcanvas bbox $tag] + if {$rectcoords ne ""} { + set ::editx [expr {int([lindex $rectcoords 0])}] + set ::edity [expr {int([lindex $rectcoords 3])}] + } + if {$editing == 0} { + selection clear $tkcanvas + # completion + # Henri: Yvan originally called set_empty_listbox. Doens't seem to make sense. It wouldn't even reset ::current_text + ::completion::popup_destroy + set ::completion_text_updated 0 + # store keywords. Henri: i'm disabling that. See developmentGuide.md + #if {$::completion::config(save_mode)} { + # set text [$tkcanvas itemcget $::current_tag -text] + # ::completion_store $text + #} + } { + set ::editingtext($mytoplevel) $editing + # completion + set ::current_canvas $tkcanvas + if {$tag ne ""} { + # unbind Keys if new object + if {$tag ne $::current_tag} { + bind $::current_canvas {} + } + set ::current_tag $tag + } + + if {[string first "completion-plugin" [bindtags $::current_canvas] ] eq -1} { + bindtags $::current_canvas "completion-plugin [bindtags $::current_canvas]" + } + #delete_if {[string first [bindtags $::current_canvas] "test"] eq -1} { + #delete_ bindtags $::current_canvas "test [bindtags $::current_canvas]" + #delete_} + #delete_#bind $::current_canvas <$completion::config(hotkey)> {+::completion::trigger;break;} + #delete_::pdwindow::post "-----EDITING------\n" + #delete_::pdwindow::post "current_canvas: $::current_canvas\n" + #delete_set dbg [bindtags $::current_canvas] + #delete_::pdwindow::post "bindtags: $dbg\n" + } + set ::new_object $editing + $tkcanvas focus $tag + set ::focus "tag" +} + +# this is called when the user enters the auto completion mode +proc ::completion::trigger {} { + ::completion::debug_msg "===entering trigger===" "entering_procs" + set ::waiting_trigger_keyrelease 1 + + set ::is_shift_down 0 + set ::is_ctrl_down 0 + set ::is_alt_down 0 + if {$::current_canvas ne "" + && $::current_text eq "" + && ! $::completion_text_updated + } { + #this code is responsible for reading any text already present in the object when you enter the autocomplete mode + set ::current_text [$::current_canvas itemcget $::current_tag -text] + ::completion::trimspaces + ::completion::debug_msg "Text that was already in the box = $::current_text\n" "searches" + } + + ::completion::debug_msg "-----TRIGGER------\n" + ::completion::debug_msg "current_canvas: $::current_canvas\n" + set dbg [bindtags $::current_canvas] + ::completion::debug_msg "bindtags: $dbg\n" + + #if the user is typing into an object box + if {$::new_object} { + + # detect if the user is typing on an object, message or comment + set ::tags_on_object_being_edited [$::current_canvas itemcget $::current_tag -tags] + ::completion::debug_msg "\[$::current_canvas itemcget $::current_tag -tags\] = $::tags_on_object_being_edited" + set ::type_of_object_being_edited [lindex $::tags_on_object_being_edited 1] + ::completion::debug_msg "------>::type_of_object_being_edited = $::type_of_object_being_edited \n" + if { ($::type_of_object_being_edited ne "obj") && ($::type_of_object_being_edited ne "msg") } { + ::completion::debug_msg "the completion-plugin does not trigger for objects of type $::type_of_object_being_edited" + return + } + + bind $::current_canvas {::completion::text_keys %K} + set completed_because_was_unique 0 + if {![winfo exists .pop]} { + ::completion::popup_draw + ::completion::search $::current_text + ::completion::try_common_prefix + ::completion::update_completions_gui + if {[::completion::unique] } { + ::completion::choose_selected ;#Henri: was replace_text. This is needed for the three modes + ::completion::popup_destroy + ::completion::set_empty_listbox + set completed_because_was_unique 1 + } + } else { + + if {[::completion::unique]} { + ::completion::choose_selected + set completed_because_was_unique 1 + } elseif { [llength $::completions] > 1 } { + if {![::completion::try_common_prefix]} { + ::completion::debug_msg "IF not common prefix\n" + #::completion::increment ;#Henri: this would allow to cycle through the completions with Tab. I'm disabling that in favor of the arrow keys + } else { + ::completion::debug_msg "IF INDEED common prefix\n" + } + } + } + # if the unique completion was used there will be no .pop to bind! + if { !$completed_because_was_unique } { + # work in progress + # bind .pop {::completion::debug_msg "the user has unfocused the popup"; ::completion::popup_destroy } + # bind $::current_canvas {::completion::debug_msg "the user has unfocused the canvas"} + } + } else { + ::completion::debug_msg "the user is NOT typing into an object box" "key_event" + } + # this should be time enough for the user to release the keys (so we don't capture the release keys of the plugin hotkey) + after 200 { + ::completion::debug_msg "accepting keys\n" + set ::waiting_trigger_keyrelease 0 + } +} + +proc ::completion::monolithic_search {{text ""}} { + #set variables related to monolithic_search + ::completion::debug_msg "::completion::monolithic_search($text)" "searches" + set ::current_search_mode 2 + if {[winfo exists .pop]} { + .pop.f.lb configure -selectbackground $::completion::config(monobg) + } + #do the search + set text [string range $text 1 end] + set results {} + ::completion::debug_msg "::completion::monolithic_search($text)" "searches" + foreach elem $::monolithic_externals { + #those are stored into a {libName objName} fashion + set libraryName [lindex $elem 0] + set objName [lindex $elem 1] + ::completion::debug_msg "::completion::monolithic_search\[$libraryName\/$objName\]" "searches" + lappend results "$libraryName\/$objName" + } + #::completion::debug_msg "----------results=\[$results" + set pattern "$text" + set pattern [::completion::fix_pattern $pattern] + set ::completions [lsearch -all -inline -regexp -nocase $results $pattern] +} + +proc ::completion::skipping_search {{text ""}} { + #set variables related to skipping_search + ::completion::debug_msg "::completion::skipping_search($text)" "searches" + set ::current_search_mode 1 + # do we really need to check if the popup exists? + if {[winfo exists .pop]} { + .pop.f.lb configure -selectbackground $::completion::config(skipbg) + } + #do the search + set text [string range $text 1 end] + set text [::completion::fix_pattern $text] + set chars [split $text {}] + set pattern "" + foreach char $chars { + ::completion::debug_msg "--------------char = $char" + set pattern "$pattern$char.*" + } + ::completion::debug_msg "RegExp pattern = $pattern" "searches" + ::completion::debug_msg "--------------chars = $chars" "searches" + set ::completions [lsearch -all -inline -regexp -nocase $::all_externals $pattern] +} + +# Searches for matches. +# (this method detects the current search mode and returns after calling the right one it it happens to be monolithic or skipping.) +proc ::completion::search {{text ""}} { + ::completion::debug_msg "::completion::search($text)" "searches" + ::completion::debug_msg "::completion_text_updated = $::completion_text_updated" "searches" + # without the arg there are some bugs when keys come from listbox ;# what Yvan meant? + set ::erase_text $::current_text + #if starts with a . it is a skipping search + #if starts with a , it is a monolithic search + if {[string range $text 0 0] eq ","} { + ::completion::monolithic_search $text + return + } elseif {[string range $text 0 0] eq "."} { + ::completion::skipping_search $text + return + } + # Else just do the normal search + if {[winfo exists .pop.f.lb]} { + .pop.f.lb configure -selectbackground $::completion::config(bg) + } + set ::current_search_mode 0 + if {$text ne ""} { + ::completion::debug_msg "=searching for $text=" "searches" + set ::current_text $text + set ::erase_text $text + set ::should_restore False + } elseif { !$::completion_text_updated } { + ::completion::debug_msg "searching for empty string" "searches" + #set ::current_text \ + [$::current_canvas itemcget $::current_tag -text] + set ::previous_current_text $::current_text ;# saves the current text + ::completion::debug_msg "original current_text: $::current_text" "searches" + set ::current_text "" + ::completion::debug_msg "replaced current_text is $::current_text" "searches" + set ::should_restore True + } + ::completion::trimspaces + + # Now this part will always run so you can perform "empty searchs" which will return all objects. In Yvan's code it would clear completions on an "empty search" + #Yvan was using -glob patterns but they wouldn't match stuff with forward slashes (/) + #for example if you type "freq" it wouldn't match cyclone/freqshift~ + #using -regexp now allows for that + #Also i've added case insensitive searching (since PD object creation IS case-insensitive). + set pattern "$::current_text" + set pattern [::completion::fix_pattern $pattern] + + set ::completions [lsearch -all -inline -regexp -nocase $::all_externals $pattern] + if {$::should_restore} { + set ::current_text $::previous_current_text ;# restores the current text + ::completion::debug_msg "restored current_text: $::current_text" "searches" + } + ::completion::update_completions_gui + ::completion::debug_msg "SEARCH END! Current text is $::current_text" "searches" +} + +# This is a method that edits a string used as a regex pattern escaping chars in order to correcly compile the regexp; +# example: we must escape "++" to "\\+\\+". +proc ::completion::fix_pattern {pattern} { + ::completion::debug_msg "================== - pattern = $pattern" "searches" + set pattern [string map {"+" "\\+"} $pattern] + ::completion::debug_msg "+ - pattern = $pattern" "searches" + set pattern [string map {"*" "\\*"} $pattern] + ::completion::debug_msg "* - pattern = $pattern" "searches" + set skippingPrefix [string range $pattern 0 0] + ::completion::debug_msg "skippingPrefix = $skippingPrefix" "searches" + set skippingString [string range $pattern 1 end] + ::completion::debug_msg "skippingString = $skippingString" "searches" + set skippingString [string map {"." "\\."} $skippingString] + ::completion::debug_msg ". skippingString = $skippingString" "searches" + set pattern "$skippingPrefix$skippingString" + ::completion::debug_msg ". - pattern = $pattern" "searches" + return $pattern +} + +proc ::completion::update_completions_gui {} { + ::completion::debug_msg "entering update_completions_gui" "entering_procs" + if {[winfo exists .pop.f.lb]} { + ::completion::scrollbar_check + if {$::completions == {}} { ::completion::set_empty_listbox } + if {[llength $::completions] > 1} { + .pop.f.lb configure -state normal + .pop.f.lb select clear 0 end + .pop.f.lb select set 0 0 + .pop.f.lb yview scroll -100 page + } + } +} + +proc ::completion::unique {} { + ::completion::debug_msg "entering unique" "entering_procs" + return [expr {[llength $::completions] == 1 + && [::completion::valid]}] +} + +proc ::completion::valid {} { + ::completion::debug_msg "entering valid" "entering_procs" + return [expr {[lindex $::completions 0] ne "(empty)"}] +} + +# this is run when there are no results to display +proc ::completion::set_empty_listbox {} { + ::completion::debug_msg "entering set_empty_listbox" "entering_procs" + if {[winfo exists .pop.f.lb]} { + ::completion::scrollbar_check + .pop.f.lb configure -state disabled + } + set ::completions {"(empty)"} +} + +#this proc moves the selection down (incrementing the index) +proc ::completion::increment {{amount 1}} { + ::completion::debug_msg "entering increment" "entering_procs" + ::completion::debug_msg "amount = $amount" "popup_gui" + if {$::focus != "pop"} { + focus .pop.f.lb + set ::focus "pop" + } + ::completion::debug_msg "bindtags = [bindtags .pop.f.lb]" "popup_gui" + ::completion::debug_msg "bindings on .pop.f.lb = [bind .pop.f.lb]" "popup_gui" + set selected [.pop.f.lb curselection] + ::completion::debug_msg "selected = $selected" "popup_gui" + + #if completion list is empty then "selected" will be empty + if { ![ string is integer -strict $selected] } { + return + } + set updated [expr {($selected + $amount) % [llength $::completions]}] + ::completion::debug_msg "updated = $updated" "popup_gui" + .pop.f.lb selection clear 0 end + .pop.f.lb selection set $updated + ::completion::debug_msg "curselection after selection set = [.pop.f.lb curselection]" "popup_gui" + .pop.f.lb see $updated +} + +# store keywords (send/receive or array) +proc ::completion_store {tag} { + # I'm disabling the unique names completion for now because i don't think it is desireable. + # While it does detects when the user type a new name it **doesn't** when those names are not + # used any more (user closed their containing patch, deleted their objects, etc). + # Also it doesn't detect those names when the user loads an patch. + # In future versions we should be able to do that communicating with PD directly. + return + ::completion::debug_msg "entering completion store" "entering_procs" + ::completion::debug_msg " tag = $tag" "unique_names" + set name 0 + set kind(sr) {s r send receive} + set kind(sra) {send~ receive~} + set kind(tc) {throw~ catch~} + set kind(arr) {tabosc4~ tabplay~ tabread tabread4 \ + tabread4~ tabread~ tabwrite tabwrite~} + set kind(del) {delread~ delwrite~} + + if {[regexp {^(s|r|send|receive)\s(\S+)$} $tag -> do_not_matter name]} { + set which sr + } + if {[regexp {^(send\~|receive\~)\s(\S+)$} $tag -> do_not_matter name]} { + set which sra + } + if {[regexp {^(throw\~|catch\~)\s(\S+)$} $tag -> do_not_matter name]} { + set which tc + } + if {[regexp {^tab\S+\s(\S+)$} $tag -> name]} { + set which arr + } + if {[regexp {^(delread\~|delwrite\~)\s(\S+)\s*\S*$} $tag -> do_not_matter name]} { + set which del + ::completion::debug_msg "4 do_not_matter = $do_not_matter" "unique_names" + ::completion::debug_msg "4 name = $name" "unique_names" + } + ::completion::debug_msg "Unique name = $name" "unique_names" + if {$name != 0} { + foreach key $kind($which) { + ::completion::debug_msg "key = $key" "unique_names" + if {[lsearch -all -inline -glob $::all_externals [list $key $name]] eq ""} { + lappend ::all_externals [list $key $name] + set ::all_externals [lsort $::all_externals] + } + } + } +} + +#this is called when the user selects the desired external +proc ::completion::choose_selected {} { + ::completion::debug_msg "entering choose selected" "entering_procs" + if {[::completion::valid]} { + set selected_index [.pop.f.lb curselection] + ::completion::popup_destroy + set choosen_item [lindex $::completions $selected_index] + #if we are on monolithic mode we should not write the "libName/" + if {$::current_search_mode eq 2} { + set libName [lindex [split $choosen_item /] 0] + set choosen_item [lindex [split $choosen_item /] 1] + # I'm addind this line just to have the option to print the lib name on the console but i don't think this is needed it apperas on the completions list. + #::pdwindow::post "auto complete: [lindex [split $choosen_item /] 0] is part of the $libName library\n\n" + } + set isSpecialMsg [::completion::is_special_msg $choosen_item] + if { $isSpecialMsg } { + ::completion::erase_text + ::completion::delete_obj_onspecialmsg + } else { + ::completion::replace_text $choosen_item + } + ::completion::debug_msg "----------->Selected word: $choosen_item" "char_manipulation" + set ::current_text "" ;# clear for next search + ::completion::set_empty_listbox + #focus -force $::current_canvas + #set ::focus "canvas" + ::completion::debug_msg "end of choose_selected current_text: $::current_text" "char_manipulation" + } +} + +proc ::completion::delete_obj_onspecialmsg {} { + # will anybody ever read this mess? heh + # well, this is still experimental software. I'll clean this up in the future :) + # (dreaming of pd 1.0) + + #$::current_canvas configure -bg #00ff00 + set rectangle "$::current_tag" + append rectangle "R" + ::completion::debug_msg "rectangle = $rectangle\n" + + $::current_canvas itemconfigure $rectangle -fill red + + + # mimicking PD messages (using -d 1) + # pdtk_undomenu $::current_canvas clear no + # pdtk_undomenu $::current_canvas clear no + # $::current_canvas itemconfigure $rectangle -fill black + # $::current_canvas itemconfigure $::current_tag -fill black + # pdtk_undomenu $::current_canvas clear no + + #$::current_canvas delete $::current_tag ;#THIS ACTUALLY REMOVES THE TEXT THE USER IS TYPING + #$::current_canvas delete $rectangle ;#THIS removes the rectangle + + #BUT they are created again when i exit exit mode + #BUT they are created again when i exit exit mode + #BUT they are created again when i exit exit mode + + set coords [$::current_canvas coords $rectangle] + ::completion::debug_msg "coords = $coords\n" + + ::completion::debug_msg "::current_canvas = $::current_canvas\n" + set winfo_test "[winfo toplevel $::current_canvas]" + ::completion::debug_msg "winfo_test = $winfo_test\n" + + set offset 1 ;# how much we're backing off before starting the selection + set x [lindex $coords 0] + set x [expr {$x-$offset}] + set y [lindex $coords 1] + set y [expr {$y-$offset}] + set w [expr $offset+1] ;# how much to go right, then + set h [expr $offset+1] ;# how much to go down, then + ::completion::debug_msg "x = $x\n" + ::completion::debug_msg "y = $y\n" + ::completion::debug_msg "w = $w\n" + ::completion::debug_msg "h = $h\n" + ::completion::debug_msg "\[expr \{$x+$w\}\] = [expr {$x+$w}]\n" + + + pdsend "[winfo toplevel $::current_canvas] motion $x $y 0" + pdsend "[winfo toplevel $::current_canvas] mouse $x $y 1 0" + pdsend "[winfo toplevel $::current_canvas] motion [expr {$x+$w}] [expr {$y+$h}] 0" + pdsend "[winfo toplevel $::current_canvas] mouseup [expr {$x+$w}] [expr {$y+$h}] 1" + + + pdsend "[winfo toplevel $::current_canvas] key 1 127 0" ;#delete = 127 + pdsend "[winfo toplevel $::current_canvas] key 0 127 0" ; + #pdsend "[winfo toplevel $::current_canvas] text 0" ; + + #WORK AROUND + + #QUERY INFORMATION ABOUT THE $rectlange position and mimic mouse and keyboard behavior (ghostPatching) by sendin input messages do pd engine to delete the object! + + #$::current_canvas itemconfigure $::current_tag TK_CONFIG_COLOR #ff0000 + + #$::current_canvas delete "all" ;#delete everything but the selected object is recreated + +} + +# The keypressed and key released methods just route their input to this proc and it does the rest +proc ::completion::update_modifiers {key pressed_or_released} { + switch -- $key { + "Shift_L" { set ::is_shift_down $pressed_or_released } + "Shift_R" { set ::is_shift_down $pressed_or_released } + "Control_L" { set ::is_ctrl_down $pressed_or_released } + "Control_R" { set ::is_ctrl_down $pressed_or_released } + "Alt_L" { set ::is_alt_down $pressed_or_released } + "Alt_R" { set ::is_alt_down $pressed_or_released } + } +} + +# receives events while listbox has focus +# some stuff is passed correctly only on KeyRelease and other stuff only on KeyPress +# so that's why there is both a lb_keyrelease and a lb_keypress procs +proc ::completion::keypress {key unicode} { + ::completion::debug_msg "key pressed was $key. Unicode = $unicode\n" "key_event" + ::completion::update_modifiers $key 1 + # this is needed for users with keyboards in languages where ~ is a Multi_Key (ex: portuguese, french, etc) - only tested on PT-BR keyboard + # tested on Windows 7 with a pt-br keyboard. This unicode "~~" is not caught on key release + switch -- $unicode { + "~~" { ::completion::insert_key "~" } + } +} + +# receives events while listbox has focus +# some stuff is passed correctly only on KeyRelease and other stuff only on KeyPress +# so that's why there is both a lb_keyrelease and a lb_keypress procs +proc ::completion::lb_keyrelease {key unicode} { + ::completion::debug_msg "~lb_keys~ key released was $key unicode = $unicode\n" "key_event" + # We don't want to receive a key if the user pressed the plugin-activation hotkey. + # otherwise (let's say the user is using Control+space as the hotkey) when the user activates the plugin it would output a space + # so when we get the keydown event we wait for the keyrelease and do nothing. + if {$::waiting_trigger_keyrelease eq 1} { + ::completion::debug_msg "got the key release. \[$key, $unicode\]\n" + return + } + ::completion::update_modifiers $key 0 + set ::completion_text_updated 0 + #validate keys (currently we can't detect "~" in windows because it results in a "Multi_key") + if {[regexp {^[a-zA-Z0-9~/\._\+\-]{1}$} $key]} { + ::completion::insert_key $key; return + } + switch -- $key { + "space" { ::completion::insert_key " " } + "Return" { ::completion::choose_selected } + "BackSpace" { ::completion::chop } + "comma" { ::completion::insert_key "," } + "semicolon" { ::completion::insert_key ";" } + "period" { ::completion::insert_key "." } + "underscore" { ::completion::insert_key "_" } + "equal" { ::completion::insert_key "+" } + "minus" { ::completion::insert_key "-" } + "slash" { ::completion::insert_key "/" } + "exclam" { ::completion::insert_key "!" } + "at" { ::completion::insert_key "@" } + "numbersign" { ::completion::insert_key "#" } + "dollar" { ::completion::insert_key "$" } + "percent" { ::completion::insert_key "%" } + "ampersand" { ::completion::insert_key "&" } + "percent" { ::completion::insert_key "%" } + "underscore" { ::completion::insert_key "_" } + "plus" { ::completion::insert_key "+" } + "minus" { ::completion::insert_key "-" } + } + # I've tried adding those but without success + # maybe i should do like the solution i've used for this: + # https://github.com/HenriAugusto/completion-plugin/issues/21 + # "parenleft" { ::completion::insert_key "\(" } + # "parenright" { ::completion::insert_key "\)" } + # "bracketleft" { ::completion::insert_key "\[" } + # "bracketright" { ::completion::insert_key "\]" } + # "braceleft" { ::completion::insert_key "\{" } + # "braceright" { ::completion::insert_key "\}" } + # "backslash" { ::completion::insert_key "\\" } +} + +# keys from textbox (the box where you tipe stuff in PD) +proc ::completion::text_keys {key} { + ::completion::debug_msg "~text_keys~ key pressed was $key\n" "key_event" + set ::completion_text_updated 0 + switch -- $key { + "plus" { set key "+" } + "minus" { set key "-" } + "Escape" { ::completion::popup_destroy 1 } + } + if {[regexp {^[a-zA-Z0-9~/\._\+\-\*]{1}$} $key]} { + ::completion::search + } elseif {$key eq "space"} { + ::completion::search + } elseif {$key eq "BackSpace"} { + after 10; ::completion::search ;# FIXME + } elseif {$key eq "Return"} { + ::completion::choose_or_unedit + } +} + +# this inserts the key +proc ::completion::insert_key {key} { + ::completion::debug_msg "entering ::completion::insert_key" "entering_procs" + scan $key %c keynum + # pdsend "pd key 1 $keynum 0" ; notworking + ::completion::sendKeyDown $keynum + ::completion::debug_msg "inserting key $keynum" "char_manipulation" + + append ::current_text $key + # set ::current_text [$::current_canvas itemcget $::current_tag -text] ;# why does this line doesn't work? + + # to debug the right line + ::completion::search $::current_text + set ::focus "canvas" + pdtk_text_editing $::toplevel $::current_tag 1 + set ::completion_text_updated 0 + # for some reason this does not work without passing the arg ;# what Yvan meant? + #Those lines were making the completion windom vanish! + #focus -force $::toplevel + #focus -force $::current_canvas +} + +# erases what the user typed since it started the pluging +proc ::completion::erase_text {} { + ::completion::debug_msg "entering erase text" "entering_procs" + # simulate backspace keys + ::completion::debug_msg "erase_text = $::erase_text" "char_manipulation" + set i [expr {[string length $::erase_text] + 2}] ;# FIXME + while {--$i > 0} { + ::completion::sendKeyDownAndUp 8 ;#8 = BackSpace + incr i -1 + } +} + +# this is the proc that types the object name for the user. It runs in two steps +# 1: by erasing what the user typed (calling erase_text) +# 2: typing the match chosen by the user +# Why not just send the remaining chars, you ask? It would not make sense in "skip" search mode! +# You might also wonder why not use +# pdtk_text_selectall $::current_canvas $::current_tag +# OR +# pdtk_text_set $::current_canvas $::current_tag "" +# to select everything and delete it or directly clear the text object. +# I've tried it but it doesn't work (idky yet). +proc ::completion::replace_text {args} { + ::completion::debug_msg "===Entering replace_text" "entering_procs" + ::completion::erase_text + set text "" + if { ( !$::completion::config(auto_complete_libs) && !$::is_shift_down) || + ( $::completion::config(auto_complete_libs) && $::is_shift_down) + } { + set args [split $args /] + set args [lindex $args end] + } + # if there are spaces the args variable will arrive as a list. + # Example: {"list" "append" "3" "4" "5"} + # this foreach concatenates it back to a string: "list append 3 4 5" + foreach arg $args { set text [concat $text $arg] } + #for each char send a keydown event to PD to simulate user key presses + for {set i 0} {$i < [string length $text]} {incr i 1} { + set cha [string index $text $i] + # ::completion::debug_msg "current char = $cha" + scan $cha %c keynum + ::completion::sendKeyDown $keynum + } + set ::erase_text $text + ::completion::debug_msg "erase_text = $::erase_text" "char_manipulation" + # nasty hack: the widget does not update his text because we pretend + # we typed the text although we faked it so pd gets it as well (mmh) + set ::completion_text_updated 1 + #set ::current_text "" ; Not needed because choose_selected will empty that +} + +proc ::completion::is_special_msg { msg } { + switch -- $msg { + "plugin::rescan" { + ::completion::scan_all_completions + return 1 + } + "plugin::options" { + ::completion::show_options_gui + return 1 + } + "plugin::help" { + ::completion::open_help_file + return 1 + } + "plugin::debug" { + set ::completion_debug [expr {!$::completion_debug}] + return 1 + } + } + return 0 +} + +proc ::completion::add_special_messages {} { + set ::all_externals [linsert $::all_externals 0 "plugin::debug"] + set ::all_externals [linsert $::all_externals 0 "plugin::help"] + set ::all_externals [linsert $::all_externals 0 "plugin::options"] + set ::all_externals [linsert $::all_externals 0 "plugin::rescan"] +} + +# called when user press Enter +proc ::completion::choose_or_unedit {} { + ::completion::debug_msg "entering choose or unedit" "entering_procs" + if {[winfo exists .pop] && [::completion::valid]} { + ::completion::choose_selected + } { + ::completion::text_unedit + } +} + +proc ::completion::text_unedit {} { + ::completion::debug_msg "entering text unedit" "entering_procs" + pdsend "$::focused_window reselect" + set ::new_object 0 + set ::completion_text_updated 0 +} + +# this is called when the user press the BackSpace key (erases on char) +proc ::completion::chop {} { + ::completion::debug_msg "entering chop" "entering_procs" + #if the user press shift+backspace restart search + if {$::is_shift_down} { + ::completion::debug_msg "shift+BackSpace = clearing search" "char_manipulation" + ::completion::erase_text + set ::current_text "" + ::completion::search + return + } + ::completion::sendKeyDownAndUp 8 ;#8 = BackSpace + #::completion::debug_msg "current_text before chopping $::current_text" + set ::current_text [string replace $::current_text end end] ;#this removes the last char (?!) + ::completion::debug_msg "current_text after choping = $::current_text" "char_manipulation" + #::completion::debug_msg "current_text after chopping $::current_text" + ::completion::search $::current_text + #what does it do? + if {[winfo exists .pop]} { + .pop.f.lb selection clear 0 end + .pop.f.lb selection set 0 + } + # focus -force $::current_canvas ;# THIS IS THE LINE THAT MAKES THE AUTOCOMPLETE VANISH AFTER BACKSPACE + set ::focus "canvas" +} + +proc ::completion::popup_draw {} { + ::completion::debug_msg "entering popup draw" "entering_procs" + if {![winfo exists .pop]} { + set screen_w [winfo screenwidth $::current_canvas] + set screen_h [winfo screenheight $::current_canvas] + ::completion::debug_msg "Screen width = $screen_w" "popup_gui" + #::completion::debug_msg "Screen height = $screen_h" + set popup_width 40 + set menuheight 32 + if {$::windowingsystem ne "aqua"} { incr menuheight 24 } + incr menuheight $::completion::config(offset) + set geom [wm geometry $::toplevel] + # fix weird bug on osx + set decoLeft 0 + set decoTop 0 + regexp -- {([0-9]+)x([0-9]+)\+([0-9]+)\+([0-9]+)} $geom -> \ + width height decoLeft decoTop + set left [expr {$decoLeft + $::editx}] + set top [expr {$decoTop + $::edity + $menuheight}] + ::completion::debug_msg "left = $left" "popup_gui" + ::completion::debug_msg "top = $top" "popup_gui" + catch { destroy .pop } + toplevel .pop + wm overrideredirect .pop 1 + if {$::windowingsystem eq "aqua"} { + raise .pop ;# without this the gui would NOT be displayed on OS X + } + wm geometry .pop +$left+$top + frame .pop.f -takefocus 0 + + pack configure .pop.f + .pop.f configure -relief solid -borderwidth 1 -background white + + #is this needed? + switch -- $::current_search_mode { + 0 { set currentbackground $::completion::config(bg) } + 1 { set currentbackground $::completion::config(skipbg) } + 2 { set currentbackground $::completion::config(monobg) } + } + + listbox .pop.f.lb \ + -selectmode browse \ + -width $popup_width \ + -height $::completion::config(max_lines) \ + -listvariable ::completions -activestyle none \ + -highlightcolor $::completion::config(fg) \ + -selectbackground $currentbackground \ + -selectforeground $::completion::config(fg) \ + -yscrollcommand [list .pop.f.sb set] -takefocus 1 \ + -disabledforeground #333333 + + pack .pop.f.lb -side left -expand 1 -fill both + .pop.f.lb configure -relief flat \ + -font [list $::completion::config(font) $::completion::config(font_size)] \ + -state normal + + pack .pop.f.lb [scrollbar ".pop.f.sb" -command [list .pop.f.lb yview] -takefocus 0] \ + -side left -fill y -anchor w + bind .pop.f.lb {after idle { ::completion::popup_destroy 1 }} + bind .pop.f.lb {::completion::lb_keyrelease %K %A} + bind .pop.f.lb {after idle {::completion::keypress %K %A}} + # ButtonReleases: + # LMB = 1 MMB (click) = 2 RMB = 3 ScrollUp = 4 ScrollDown = 5 + bind .pop.f.lb { + if { %b eq 1} { + after idle {::completion::choose_selected} + } + } + + # Overriding the Up and Down key due to a bug: + # the .pop.f.lb selection set $updated call in ::completion::increment + # works but on the next non-overridden Up/Down event it would resume from the last + # index BEFORE the ::increment call. It would happend because of the event being dispatch + # to the next bindtag which would be ListBox. + + # for that reason we could remove the ListBox bindtag. It would also avoids strange behaviour with home and end keys (that for some reason can't be overriden) + # yet if we do this the user wouldn't be able to select the suggestions with the mouse so we leave the ListBox on the bindtags. + #bindtags .pop.f.lb {.pop.f.lb .pop all} + + # and then set my own bindings (Those Up and Down binds would override the Up and Down on the ListBox bindtags if they weren't removed) + bind .pop.f.lb {::completion::increment -1 ; break} + bind .pop.f.lb {::completion::increment 1 ; break} + bind .pop.f.lb {after idle {::completion::increment -10} ; break} + bind .pop.f.lb {after idle {::completion::increment 10} ; break} + + # I could NOT override the Next and Prior keys (Pg Up and Pg Down) without removing the ListBox bindtag. Strange hmmm probably a bug + # also even after removing the ListBox from the bindtags those don't work! Only if i hold some modifier (so it becomes more specific). + # probably part of the same bug + bind .pop.f.lb {after idle {::completion::increment -20} ; break} + bind .pop.f.lb {after idle {::completion::increment 20} ; break} + + # bindings for Home and End + bind .pop.f.lb {after idle { + .pop.f.lb selection clear 0 end + .pop.f.lb selection set 0 + .pop.f.lb see 0 + } ; break} + bind .pop.f.lb {after idle { + .pop.f.lb selection clear 0 end + .pop.f.lb selection set end + .pop.f.lb see end + } ; break} + focus .pop.f.lb + set ::focus "pop" + .pop.f.lb selection set 0 0 + ::completion::debug_msg "top = $top" "popup_gui" + set height [winfo reqheight .pop.f.lb] + # if the popup windows were going to be displayed partly off-screen let's move it left so it doesn't + #the width is given in units of 8 pixels + #https://core.tcl.tk/bwidget/doc/bwidget/BWman/ListBox.html#-width + if { [expr {$left+$popup_width*8>$screen_w}] } { + set left [expr {$screen_w-$popup_width*8} ] + ::completion::debug_msg "left = $left" "popup_gui" + } + if {$::windowingsystem eq "win32"} { + # here we assume the user did not set the taskbark on the sides and also did not set it's size to be more than 1/7 of the screen + incr screen_h [ expr {-1*$screen_h/7} ] + } + #winfo height window + #Returns a decimal string giving window's height in pixels. When a window is first created its height will be 1 pixel; the height will eventually be changed by a geometry manager to fulfil the window's needs. If you need the true height immediately after creating a widget, invoke update to force the geometry manager to arrange it, or use winfo reqheight to get the window's requested height instead of its actual height. + ::completion::debug_msg "@screen_h = $screen_h\n @height = $height" "popup_gui" + if { [expr {$top+$height>$screen_h}] } { + set top [expr {$screen_h-$height} ] + wm geometry .pop +$left+$top + #.pop.f.lb configure -+ + ::completion::debug_msg "top = $top" "popup_gui" + } + } +} + +proc ::completion::popup_destroy {{unbind 0}} { + ::completion::debug_msg "entering popup_destroy" "entering_procs" + catch { destroy .pop } + focus -force $::current_canvas + set ::focus "canvas" + if {$unbind} { + bind $::current_canvas {} + } + set ::current_text "" +} + +# Henri: i don't get exactly what this does. Commenting out those packs seems to have absolutely no effect in my system +# pack documentation: https://www.tcl.tk/man/tcl/TkCmd/pack.htm#M11 +proc ::completion::scrollbar_check {} { + ::completion::debug_msg "entering scrollbar_check" "entering_procs" + if {[winfo exists .pop]} { + if {[llength $::completions] < $::completion::config(max_lines)} { + #::completion::debug_msg "completions < max numer of lines" + pack forget .pop.f.sb + } else { + #::completion::debug_msg "completions >= max numer of lines" + pack .pop.f.sb -side left -fill y + } + } +} + +############################################################ +# utils + +# `prefix' from Bruce Hartweg +proc ::completion::prefix {s1 s2} { + regexp {^(.*).*\0\1} "$s1\0$s2" all pref + ::completion::debug_msg "prefix output = $pref" "prefix" + return $pref +} + +proc ::completion::try_common_prefix {} { + set found 0 + set prefix [::completion::common_prefix] + if {$prefix ne $::current_text && $prefix ne ""} { + ::completion::replace_text $prefix + # prevent errors in pdtk_text_editing + catch { focus .pop.f.lb } + set ::current_text $prefix + set found 1 + } + ::completion::debug_msg "try common prefix output = $found" "prefix" + return $found +} + +proc ::completion::common_prefix {} { + set prefix "" + if {[llength $::completions] > 1} { + set prefix [::completion::prefix \ + [lindex $::completions 0] \ + [lindex $::completions end]] + } + ::completion::debug_msg "common prefix output = $prefix" "prefix" + return $prefix +} + +proc ::completion::trimspaces {} { + set ::current_text [string trimright $::current_text " "] +} + +# just for testing purposes. Code would need to become more robust before +# being used to display stuff for the user +proc ::completion::msgbox {str} { + toplevel .cpMsgBox$str + frame .cpMsgBox$str.f + label .cpMsgBox$str.f.l -text "$str" -padx 3m -pady 2m + button .cpMsgBox$str.f.okbtn -text "okay" -command "destroy .cpMsgBox$str" + + pack .cpMsgBox$str.f + pack .cpMsgBox$str.f.l + pack .cpMsgBox$str.f.okbtn +} + + +# just in case. +bind all <$::modifier-Key-Return> {pdsend "$::focused_window reselect"} + +########################################################### +# main + +::completion::init diff --git a/ceammc/gui/plugins/completion-plugin/completion.cfg b/ceammc/gui/plugins/completion-plugin/completion.cfg new file mode 100644 index 0000000000..619b72390b --- /dev/null +++ b/ceammc/gui/plugins/completion-plugin/completion.cfg @@ -0,0 +1,46 @@ +# ===== Completion Plugin ===== + +# you can change this settings on this file but it is recommended to use the plugin menu while using PD + +# hotkey for bringing the completion window. +# for syntax check: +# https://www.tcl.tk/man/tcl8.4/TkCmd/bind.htm +# some examples: "Tab", "Control-Alt-space", "Control" +hotkey Tab + +# maximum lines shown in completion window +max_lines 16 + +# completion font family +font DejaVu Sans Mono + +# fontsize (it usually looks bigger in the completion window so you might need to use a smaller size here) +font_size 12 + +# The max depth the plugin will scan for externals when descending a folder tree. +max_scan_depth 1 + +# Auto complete library names. Example: +# On: "[list-abs/list-compare]" +# Off: "[list-compare]" +auto_complete_libs 1 + +# ===== Colors ===== + +# selected completion background color (the color used in the current selected element) +bg #0a85fe + +# selected completion background color in the skipping search +skipbg #0ad871 + +# selected completion background color in the monolithic search +monobg #9832ff + +# selected completion foreground color +fg white + +# ===== Positions ===== + +# (vertical) offset for the popup position +# this can be needed if your window manager removes title bar (like awesome, etc) +offset 0 diff --git a/ceammc/gui/plugins/completion-plugin/custom_completions/custom_completions.txt b/ceammc/gui/plugins/completion-plugin/custom_completions/custom_completions.txt new file mode 100644 index 0000000000..0189049c60 --- /dev/null +++ b/ceammc/gui/plugins/completion-plugin/custom_completions/custom_completions.txt @@ -0,0 +1,33 @@ +; put in here any extra object that you would like to add to your completion list. + +; one line per object, no commas or special characters. + +; all lines starting with a semi-colon are comments. + +;some useful stuff used in message boxes + +set +add +add2 +addcomma +addsemi +adddollar +adddollsym + +;general keywords + +anything +set +clear +start +stop + +;some useful constants + +;pi +1.57079632679489661923 +3.14159265358979323846 +6.28318530717958647692 + +;golden ratio +1.6180339887498948 \ No newline at end of file diff --git a/ceammc/gui/plugins/completion-plugin/development guide.md b/ceammc/gui/plugins/completion-plugin/development guide.md new file mode 100644 index 0000000000..2d5c33d947 --- /dev/null +++ b/ceammc/gui/plugins/completion-plugin/development guide.md @@ -0,0 +1,81 @@ +## completion-plugin development guide + +The original version was developed by Yvan Volochine a long ago (as the time of writing: 7 years ago). I then embraced the project and i'm willing to mantain it for as long as i can. +I will be hosting it on [github](https://github.com/HenriAugusto/completion-plugin) + +I wrote this as a guide to make easier to people to colaborate on the completion-plugin. Specially if they're new to TCL (as i was when i took the project) that might help a lot. + +## TCL + +First of all i wanna point that this one is the most newbie-friendly among the TCL documentation: [TCL Tutorial](http://www.tcl.tk/man/tcl8.5/tutorial/tcltutorial.html) + +Also don't miss this one specific to Pure Data [GUIPlugins](https://puredata.info/docs/guiplugins/GUIPlugins/) + +### Some important things i will break down here + +* **whitespaces are important and can break your code!** +* Ones does not simply write math. You must use 'expr' + +## How it works + +The pluging overwriting the *pdtk_text_editing* proc located in pdtk_text.tcl in the PD sources. This it is able to "plug" into puredata and set important variables like + +* ::current_canvas - the canvas where the user is typing +* rectcoords - thee coordinates of the object where he/she is typing + +Inside *::completion::popup_draw* we create the listbox (that window with the code suggestions) and add event listeners (called *bindings* in TCL) so we are able to process user input. + +We then store userinput into **::current_text** and later use it perform searches among the stored object names. They're into *::all_externals*. It contains a hardcoded list of vanilla objects. Also on startup we call *::completion::add_user_externals* which scans the folders and subfolders (recursively) of all the external paths that the user have set into "edit->preferences->path" or were added by Deken. + +I've added ::completions::debug_msg for an toggable debug function that prints to the PD console. It is controled by the variable **::completion_debug** that should be false (or 0) in final releases but can be set to true (or 1) while developing. + +## debugging + +I've added a *::completion::debug_msg* method that can be used to post messages to the pd console with a "autocmpl_dbg:" prefix. + +```tcl +::completion::debug_msg "this message will be posted to the pd console" +``` + +I've also added a variable for toggling debug mode on/off + +```tcl +set ::completion_debug 1 ;#1 = true 0 = false +``` + +Furthermore sometimes you may only want to debug a single aspect of the plugin. So for that i've added specific variables that are used to set that kind of thinks you want to debug + +```tcl +set ::completion_debug 1 ; +set ::debug_loaded_externals 0 ;#prints loaded externals +set ::debug_entering_procs 0 ;#prints a message when entering a proc +set ::debug_key_event 0 ;#prints a message when a key event is processed +set ::debug_searches 0 ;#messages about the performed searches +set ::debug_popup_gui 0 ;#messages related to the popup containing the code suggestions +set ::debug_char_manipulation 0 ;#messages related to what we are doing with the text on the obj boxes (inserting/deleting chars) +``` + +This way you can add a debug message and set it's "tag" so you can control when to debug it + +```tcl +# debug variables on the beggining of the code +set ::debug_loaded_externals 1 ;#prints loaded externals +set ::debug_key_event 0 ;#prints a message when a key event is processed +# some calls on the middle of the code +::completion::debug_msg "this message will be posted" "loaded_externals" +::completion::debug_msg "this will not" "key_event" +``` + +*(notice you don't include ::debug_ on the tags!)* + +Of course if *::completion_debug * is set to 0 (or false) no debug message will be posted regardless of the specific debug configuration + +## Some minor comments on the changes i've made to Yvan's code + +1. I'm disabling the unique names completion for now because i don't think it is desireable. While it does detects when the user type a new name it **doesn't** when those names are not used any more (user closed their containing patch, deleted their objects, etc). In future versions we should be able to do that communicating with PD directly. +1. There seems to be a bug on the ListBox widget. + * you can't override the and keys (even if you remove all bindtags except for .pop.f.lb) + +### Useful links + +[List of keysyms you can use to bind keyevents](https://www.tcl.tk/man/tcl8.5/TkCmd/keysyms.htm) diff --git a/ceammc/gui/plugins/completion-plugin/images/PD_completion-plugin_gif_demo.gif b/ceammc/gui/plugins/completion-plugin/images/PD_completion-plugin_gif_demo.gif new file mode 100644 index 0000000000..31d35740fc Binary files /dev/null and b/ceammc/gui/plugins/completion-plugin/images/PD_completion-plugin_gif_demo.gif differ diff --git a/ceammc/gui/plugins/completion-plugin/monolithic_objects/monolithicLibs.txt b/ceammc/gui/plugins/completion-plugin/monolithic_objects/monolithicLibs.txt new file mode 100644 index 0000000000..6ee004414a --- /dev/null +++ b/ceammc/gui/plugins/completion-plugin/monolithic_objects/monolithicLibs.txt @@ -0,0 +1,130 @@ +zexy/a2l +zexy/any2list +zexy/atoi +zexy/demultiplex +zexy/demux +zexy/drip +zexy/fifop +zexy/glue +zexy/index +zexy/length +zexy/lifop +zexy/list2int +zexy/l2i +zexy/list2symbol +zexy/l2s +zexy/symbol2list +zexy/s2l +zexy/lister +zexy/l +zexy/lpt +zexy/makesymbol +zexy/multiplex +zexy/mux +zexy/niagara +zexy/packel +zexy/relay +zexy/repack +zexy/repeat +zexy/sort +zexy/strcmp +zexy/mavg +zexy/mean +zexy/minmax +zexy/prime +zexy/sum +zexy/date +zexy/time +zexy/tabdump +zexy/tabminmax +zexy/tabset +zexy/msgfile +zexy/operating_system +zexy/blockmirror~ +zexy/blockswap~ +zexy/dfreq~ +zexy/envrms~ +zexy/pack~ +zexy/unpack~ +zexy/pdf~ +zexy/sfplay +zexy/sfrecord +zexy/sigzero~ +zexy/tavg~ +zexy/abs~ +zexy/absgn~ +zexy/avg~ +zexy/multiline~ +zexy/sgn~ +zexy/dirac~ +zexy/noish~ +zexy/noisi~ +zexy/step~ +zexy/limiter~ +zexy/quantize~ +zexy/swap~ +zexy/z~ +hoa/hoa.2d.decoder~ +hoa/hoa.2d.encoder~ +hoa/hoa.2d.exchanger~ +hoa/hoa.2d.map~ +hoa/hoa.2d.meter~ +hoa/hoa.2d.optim~ +hoa/hoa.2d.projector~ +hoa/hoa.2d.recomposer~ +hoa/hoa.2d.rotate~ +hoa/hoa.2d.scope~ +hoa/hoa.2d.space +hoa/hoa.2d.wider~ +hoa/hoa.3d.decoder~ +hoa/hoa.3d.encoder~ +hoa/hoa.3d.exchanger~ +hoa/hoa.3d.map~ +hoa/hoa.3d.meter~ +hoa/hoa.3d.optim~ +hoa/hoa.3d.scope~ +hoa/hoa.3d.wider~ +hoa/hoa.connect +hoa/hoa.dac~ +hoa/hoa.fx.convolve~ +hoa/hoa.fx.delay~ +hoa/hoa.fx.dephaser~ +hoa/hoa.fx.freeverb~ +hoa/hoa.fx.gain~ +hoa/hoa.fx.mirror~ +hoa/hoa.fx.ringmod~ +hoa/hoa.io +hoa/hoa.map +hoa/hoa.pi +hoa/hoa.pi~ +hoa/hoa.process~ +hoa/hoa.syn.delay~ +hoa/hoa.syn.grain~ +hoa/hoa.syn.ringmod~ +hoa/hoa.thisprocess~ +cream/c.bang +cream/c.blackboard +cream/c.breakpoints +cream/c.colorpanel +cream/c.convolve~ +cream/c.dsp~ +cream/c.freeverb~ +cream/c.gain~ +cream/c.incdec +cream/c.knob +cream/c.matrix +cream/c.menu +cream/c.meter~ +cream/c.number +cream/c.number~ +cream/c.pak +cream/c.patcherargs +cream/c.patcherinfos +cream/c.plane +cream/c.preset +cream/c.radio +cream/c.rslider +cream/c.scope~ +cream/c.slider +cream/c.tab +cream/c.toggle \ No newline at end of file diff --git a/ceammc/gui/plugins/completion.cfg b/ceammc/gui/plugins/completion.cfg deleted file mode 100644 index c2fd24ecea..0000000000 --- a/ceammc/gui/plugins/completion.cfg +++ /dev/null @@ -1,42 +0,0 @@ -# Copyright (c) 2011 yvan volochine -# -# This file is part of completion-plugin. -# -# completion-plugin 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 3 of the License, or -# (at your option) 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. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . - - -# store mode: completions will remember special keywords for: -# send, receive, throw~, catch~, table, tabread4~, etc.. -# default is 1 (on) -save_mode 1 - -# maximum lines number in completion window -lines 7 - -# completion font family -# font "DejaVu Sans Mono" - -# fontsize (it usually looks bigger in the completion window so you might need to use a smaller size here) -# if you change the font size via 'Edit>Font' menu in pd, this wil be overwritten by the new one -# font_size 9 - -# selected completion background color -# bg "#418bd4" - -# selected completion foreground color -# fg white - -# (vertical) offset for the popup position -# this can be needed if your window manager removes title bar (like awesome, etc) -# offset 0 diff --git a/ceammc/py/ceammc/template.py b/ceammc/py/ceammc/template.py index 03049274be..090772f14a 100644 --- a/ceammc/py/ceammc/template.py +++ b/ceammc/py/ceammc/template.py @@ -45,13 +45,12 @@ def generate(self, methods='common'): def generate_header(self): print '#include "ceammc.h"' - print "#include " + print "#include \"m_pd.h\"" for f in self.headers: print "#include <{}>".format(f) macro = ''' -#define OBJ_NAME "{mod}.{ext}" -#define MSG_PREFIX "[" OBJ_NAME "]"''' +#define OBJ_NAME "{mod}.{ext}"''' print macro.format(mod=self.module, ext=self.extension) def generate_struct(self, fields=[]): diff --git a/ceammc/py/extension_generator.py b/ceammc/py/extension_generator.py index 3d2221a554..28b2bb2d64 100755 --- a/ceammc/py/extension_generator.py +++ b/ceammc/py/extension_generator.py @@ -65,15 +65,15 @@ def generate_common(args): if not func32: code = ' ' - g = ceammc.PdMathUnaryExtension(args.name, func32, func64, code) + g = ceammc.PdMathUnaryExternal(args.name, func32, func64, code) g.gen_cpp = args.cpp g.generate() elif args.type == 'const': - g = ceammc.PdMathConstExtension(args.name, args.code) + g = ceammc.PdMathConstExternal(args.name, args.code) g.generate() elif args.type == 'empty': code = ' ' - g = ceammc.PdMathUnaryExtension(args.name, None, None, code) + g = ceammc.PdMathUnaryExternal(args.name, None, None, code) g.generate() else: generate_common(args) diff --git a/ceammc/scripts/CMakeLists.txt b/ceammc/scripts/CMakeLists.txt new file mode 100644 index 0000000000..868b4c598b --- /dev/null +++ b/ceammc/scripts/CMakeLists.txt @@ -0,0 +1,2 @@ +file(GLOB _scripts "*.sh") +add_custom_target(ceammc_scripts SOURCES ${_scripts}) diff --git a/ceammc/scripts/travis_coveralls.sh b/ceammc/scripts/travis_coveralls.sh index ef3f6410cf..8d107e2fd3 100755 --- a/ceammc/scripts/travis_coveralls.sh +++ b/ceammc/scripts/travis_coveralls.sh @@ -5,7 +5,7 @@ echo "\${CEAMMC_COVERAGE} = \"${CEAMMC_COVERAGE}\"" if [[ ${CEAMMC_COVERAGE} == "ON" ]] then echo "Upload coverage to coveralls.io ..." - coveralls --exclude . --include ceammc/ext/src/lib --root .. --build-root . --gcov-options '\-lp' + coveralls --exclude . --include ceammc/ext/src/lib --root .. --build-root . --gcov-options '\-lp' > /dev/null else echo "Skip coveralls.io ..." fi diff --git a/cmake/FindGLIB.cmake b/cmake/FindGLIB.cmake index 0d9b3e92f8..94dedb2700 100644 --- a/cmake/FindGLIB.cmake +++ b/cmake/FindGLIB.cmake @@ -75,7 +75,7 @@ else() # search via pkg-config pkg_check_modules(PKGCONFIG_ICONV iconv QUIET) endif() - if(PKGCONFIG_GLIB_FOUND AND PKGCONFIG_GTHREAD_FOUND AND PKGCONFIG_ICONV_FOUND) + if(PKGCONFIG_GLIB_FOUND AND PKGCONFIG_GTHREAD_FOUND) set(GLIB_CONFIG_INCLUDE_DIR ${PKGCONFIG_GLIB_INCLUDEDIR} ${PKGCONFIG_GLIB_INCLUDE_DIRS}) set(GLIB_INCLUDE_DIR ${PKGCONFIG_GLIB_INCLUDEDIR} ${PKGCONFIG_GLIB_INCLUDE_DIRS}) @@ -85,8 +85,6 @@ else() # search via pkg-config set(GTHREAD_INCLUDE_DIR ${PKGCONFIG_GTHREAD_INCLUDEDIR} ${PKGCONFIG_GTHREAD_INCLUDE_DIRS}) set(GTHREAD_LIBRARIES ${PKGCONFIG_GTHREAD_LIBRARIES}) set(GTHREAD_LIBRARY_DIRS ${PKGCONFIG_GTHREAD_LIBRARY_DIRS}) - - set(ICONV_INCLUDE_DIR ${PKGCONFIG_ICONV_INCLUDEDIR} ${PKGCONFIG_ICONV_INCLUDE_DIRS}) else() set(_include_paths ${INCLUDE_INSTALL_DIR} @@ -110,12 +108,6 @@ else() # search via pkg-config PATH_SUFFIXES glib-2.0 glib-2.0/include glib-2.0/include/glib include/glib-2.0 NO_DEFAULT_PATH) - find_path(ICONV_INCLUDE_DIR - NAMES iconv.h - HINTS ${PKGCONFIG_GLIB_INCLUDEDIR} ${PKGCONFIG_GLIB_INCLUDE_DIRS} - PATHS ${_include_paths} ${_lib_paths} - NO_DEFAULT_PATH) - find_path(GLIB_CONFIG_INCLUDE_DIR NAMES glibconfig.h HINTS ${PKGCONFIG_GLIB_INCLUDEDIR} ${PKGCONFIG_GLIB_INCLUDE_DIRS} @@ -144,13 +136,6 @@ else() # search via pkg-config NO_DEFAULT_PATH ) - find_library(ICONV_LIBRARIES - NAMES libiconv iconv - HINTS ${PKGCONFIG_GLIB_INCLUDEDIR} ${PKGCONFIG_GLIB_LIBRARY_DIRS} - PATHS ${_lib_paths} - NO_DEFAULT_PATH - ) - find_library(INTL_LIBRARIES NAMES intl HINTS ${PKGCONFIG_GLIB_INCLUDEDIR} ${PKGCONFIG_GLIB_LIBRARY_DIRS} @@ -158,6 +143,35 @@ else() # search via pkg-config NO_DEFAULT_PATH ) endif() + + if(PKGCONFIG_ICONV_FOUND) + set(ICONV_INCLUDE_DIR ${PKGCONFIG_ICONV_INCLUDEDIR} ${PKGCONFIG_ICONV_INCLUDE_DIRS}) + else() + set(_include_paths + ${INCLUDE_INSTALL_DIR} + /usr/include + /opt/local/include + /sw/include + /usr/local/mingw/i686-w64-mingw32/include) + + set(_lib_paths + ${LIB_INSTALL_DIR} + /usr/lib + /usr/local/lib + /opt/local/lib + /sw/lib + /usr/local/mingw/i686-w64-mingw32/lib) + + find_path(ICONV_INCLUDE_DIR + NAMES iconv.h + HINTS ${PKGCONFIG_GLIB_INCLUDEDIR} ${PKGCONFIG_GLIB_INCLUDE_DIRS} + PATHS ${_include_paths} ${_lib_paths}) + + find_library(ICONV_LIBRARIES + NAMES libiconv iconv + HINTS ${PKGCONFIG_GLIB_INCLUDEDIR} ${PKGCONFIG_GLIB_LIBRARY_DIRS} + PATHS ${_lib_paths}) + endif() endif() include(FindPackageHandleStandardArgs) diff --git a/cmake/PdPlatform.cmake b/cmake/PdPlatform.cmake index 18ede57ca0..f534c5e800 100644 --- a/cmake/PdPlatform.cmake +++ b/cmake/PdPlatform.cmake @@ -6,12 +6,14 @@ if(NOT ${IS_BIG_ENDIAN}) add_definitions(-DLITTLE_ENDIAN=0x0001 -DBYTE_ORDER=LITTLE_ENDIAN) endif() +# needed for math constants in : M_PI etc. +add_definitions(-D_USE_MATH_DEFINES) + set(CMAKE_THREAD_PREFER_PTHREAD ON) find_package(Threads) set(PLATFORM_LINK_LIBRARIES) - if(UNIX AND NOT APPLE) add_definitions(-D_GNU_SOURCE) list(APPEND PLATFORM_LINK_LIBRARIES m) @@ -19,17 +21,27 @@ if(UNIX AND NOT APPLE) set(LINUX True) endif() -if(CMAKE_CXX_COMPILER_ID MATCHES "Clang") - option(WITH_ASAN "Use Address Sanitizer for Clang" OFF) +function(ceammc_remove_duplicate_substring stringIn stringOut) + separate_arguments(stringIn) + list(REMOVE_DUPLICATES stringIn) + string(REPLACE ";" " " stringIn "${stringIn}") + set(${stringOut} "${stringIn}" PARENT_SCOPE) +endfunction() - if(WITH_ASAN) - set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -fno-omit-frame-pointer -fsanitize=address") - set (CMAKE_LINKER_FLAGS_DEBUG "${CMAKE_STATIC_LINKER_FLAGS_DEBUG} -fno-omit-frame-pointer -fsanitize=address") - set (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -fno-omit-frame-pointer -fsanitize=address") - set (CMAKE_LINKER_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -fno-omit-frame-pointer -fsanitize=address") - set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-omit-frame-pointer -fsanitize=address") - set (CMAKE_LINKER_FLAGS "${CMAKE_LINKER_FLAGS} -fno-omit-frame-pointer -fsanitize=address") - endif() +# address sanitizer +if(WITH_ASAN) + set (CEAMMC_ASAN "-fno-omit-frame-pointer -fsanitize=undefined -fsanitize=address") + set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${CEAMMC_ASAN}") + set (CMAKE_LINKER_FLAGS_DEBUG "${CMAKE_STATIC_LINKER_FLAGS_DEBUG} ${CEAMMC_ASAN}") + set (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} ${CEAMMC_ASAN}") + set (CMAKE_LINKER_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} ${CEAMMC_ASAN}") + set (CMAKE_LINKER_FLAGS "${CMAKE_LINKER_FLAGS} ${CEAMMC_ASAN}") + + ceammc_remove_duplicate_substring(${CMAKE_CXX_FLAGS_DEBUG} CMAKE_CXX_FLAGS_DEBUG) + ceammc_remove_duplicate_substring(${CMAKE_LINKER_FLAGS_DEBUG} CMAKE_LINKER_FLAGS_DEBUG) + ceammc_remove_duplicate_substring(${CMAKE_CXX_FLAGS_RELEASE} CMAKE_CXX_FLAGS_RELEASE) + ceammc_remove_duplicate_substring(${CMAKE_LINKER_FLAGS_RELEASE} CMAKE_LINKER_FLAGS_RELEASE) + ceammc_remove_duplicate_substring(${CMAKE_LINKER_FLAGS} CMAKE_LINKER_FLAGS) endif() function(find_and_install_dll mask dir) @@ -128,29 +140,47 @@ if(WIN32) set(CMAKE_C_STANDARD_LIBRARIES ${CMAKE_CXX_STANDARD_LIBRARIES}) endif() - add_definitions(-DPD_INTERNAL -DWINVER=0x0502 -D_WIN32_WINNT=0x0502) + add_definitions(-DPD_INTERNAL -DWINVER=0x0502 -D_WIN32_WINNT=0x0502 -D_USE_MATH_DEFINES) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mms-bitfields") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -mms-bitfields -Wno-incompatible-ms-struct") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -mms-bitfields") set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -mms-bitfields -O2 -funroll-loops -fomit-frame-pointer") - set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -std=c++11 -mms-bitfields -O2 -funroll-loops -fomit-frame-pointer -Wno-incompatible-ms-struct") + set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -std=c++11 -mms-bitfields -O2 -funroll-loops -fomit-frame-pointer") set(CMAKE_SHARED_LINKER_FLAGS "-Wl,--export-all-symbols -lpthread") set(CMAKE_EXE_LINKER_FLAGS "-shared-libgcc -lpthread") list(APPEND PLATFORM_LINK_LIBRARIES ${CMAKE_THREAD_LIBS_INIT}) + + # MSYS64 clang flags: + if(CMAKE_CXX_COMPILER_ID MATCHES "Clang") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-incompatible-ms-struct") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-incompatible-ms-struct") + endif() + + add_custom_target(prepare_win_tests + COMMAND ${CMAKE_COMMAND} -E copy "$" "${PROJECT_BINARY_DIR}/ceammc/ext/tests" + COMMAND ${CMAKE_COMMAND} -E copy "$" "${PROJECT_BINARY_DIR}/ceammc/ext/tests" + COMMAND ${CMAKE_COMMAND} -E copy "$" "${PROJECT_BINARY_DIR}/ceammc/ext/tests" + COMMAND ${CMAKE_COMMAND} -E copy "$" "${PROJECT_BINARY_DIR}/ceammc/ext/tests" + ) endif() if(APPLE) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -funroll-loops -fomit-frame-pointer") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -funroll-loops -fomit-frame-pointer") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -funroll-loops") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -funroll-loops") set(CMAKE_C_FLAGS_RELEASE "-O2 -DNDEBUG -ffast-math -funroll-loops -fomit-frame-pointer") set(CMAKE_CXX_FLAGS_RELEASE "-std=c++11 -O2 -DNDEBUG -ffast-math -funroll-loops -fomit-frame-pointer") + if(NOT WITH_ASAN) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fomit-frame-pointer") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fomit-frame-pointer") + endif() + set(BUNDLE "Pd-${PD_MACOSX_BUNDLE_SUFFIX}.app") set(BUNDLE_FULL_PATH "${PROJECT_BINARY_DIR}/dist/${BUNDLE}") - set(MAKE_BUNDLE_SCRIPT ${PROJECT_BINARY_DIR}/dist/build_mac.sh) + set(MAKE_BUNDLE_SCRIPT ${PROJECT_BINARY_DIR}/dist/ceammc_build.sh) # copy and substitute variables to Info.plist file(MAKE_DIRECTORY ${PROJECT_BINARY_DIR}/dist) @@ -209,11 +239,11 @@ if(APPLE) -DTK_PATH=${TK_PATH} -DIS_SYSTEM_TK=${IS_SYSTEM_TK} -DTK_VERSION=${TK_VERSION} - -P ${PROJECT_SOURCE_DIR}/cmake/cmake-build-mac.cmake) + -P ${PROJECT_SOURCE_DIR}/cmake/cmake_build_mac.cmake) add_custom_command( OUTPUT ${BUNDLE_FULL_PATH} - COMMAND sh ${PROJECT_BINARY_DIR}/dist/build_mac.sh + COMMAND sh ${MAKE_BUNDLE_SCRIPT} COMMAND ${CMAKE_COMMAND} -DBUNDLE=${BUNDLE_FULL_PATH} -P ${PROJECT_SOURCE_DIR}/cmake/bundle.cmake diff --git a/cmake/build_options.cmake b/cmake/build_options.cmake index e2c01266be..edfc2d7b1e 100644 --- a/cmake/build_options.cmake +++ b/cmake/build_options.cmake @@ -1,5 +1,14 @@ option(WITH_COVERAGE "Build with coverage and profiling flags" OFF) -option(WITH_FLUIDLITE "Build with FluidLite support" TRUE) option(WITH_EXPERIMENTAL "Build with experimental objects" OFF) option(WITH_BENCHMARK "Build with benchmarks" ON) + +option(WITH_TTS_FLITE "Build with Flite TTS support" ON) +option(WITH_FLUIDSYNTH "Build with FluidSynth support" ON) +option(WITH_FFTW "Use fftw3 library (http://www.fftw.org/)" ON) +option(WITH_MODPLUG "Build with libmodplug support" ON) + +if(UNIX) + option(WITH_ASAN "Build with address sanitizer" OFF) +endif() + option(ENABLE_TESTS "Enable tests" ON) diff --git a/cmake/cmake-build-mac.cmake b/cmake/cmake-build-mac.cmake deleted file mode 100644 index 55c5b22505..0000000000 --- a/cmake/cmake-build-mac.cmake +++ /dev/null @@ -1 +0,0 @@ -configure_file(${PROJECT_SOURCE_DIR}/mac/cmake-build-mac.sh.in ${PROJECT_BINARY_DIR}/dist/build_mac.sh @ONLY) diff --git a/cmake/cmake_build_mac.cmake b/cmake/cmake_build_mac.cmake new file mode 100644 index 0000000000..dfa05b7643 --- /dev/null +++ b/cmake/cmake_build_mac.cmake @@ -0,0 +1 @@ +configure_file(${PROJECT_SOURCE_DIR}/mac/ceammc_build.sh.in ${PROJECT_BINARY_DIR}/dist/ceammc_build.sh @ONLY) diff --git a/cmake/config.cmake b/cmake/config.cmake index 11a8545dcc..fa1d219276 100644 --- a/cmake/config.cmake +++ b/cmake/config.cmake @@ -38,26 +38,29 @@ check_include_file(unistd.h HAVE_UNISTD_H) check_function_exists(nanosleep HAVE_NANOSLEEP) check_function_exists(setenv HAVE_SETENV) -find_package(ModPlug) -if(MODPLUG_FOUND) - set(CEAMMC_HAVE_MODPLUG ON) +if(WITH_FLUIDSYNTH) + find_package(GLIB REQUIRED) + if(GLIB_FOUND) + set(CEAMMC_HAVE_FLUIDSYNTH ON) + #include paths + list(APPEND FLUIDSYNTH_INCLUDES + ${GLIB_INCLUDES} + ${PROJECT_BINARY_DIR}/ceammc/extra/fluidsynth + ${PROJECT_SOURCE_DIR}/ceammc/extra/fluidsynth/fluidsynth/include) + # libs + list(APPEND FLUIDSYNTH_LIBRARIES fluidsynth ${GLIB_LIBRARIES}) + else() + message(FATAL "Glib is not found: no fluidsynth build") + endif() endif() -# FluidSynth -find_package(GLIB) -if(GLIB_FOUND) - set(CEAMMC_HAVE_FLUIDSYNTH ON) - set(WITH_FLUIDSYNTH TRUE) +if(WITH_TTS_FLITE) + set(CEAMMC_HAVE_TTS_FLITE ON) #include paths - list(APPEND FLUIDSYNTH_INCLUDES - ${GLIB_INCLUDES} - ${PROJECT_BINARY_DIR}/ceammc/extra/fluidsynth - ${PROJECT_SOURCE_DIR}/ceammc/extra/fluidsynth/fluidsynth/include) + list(APPEND FLITE_INCLUDES + ${PROJECT_SOURCE_DIR}/ceammc/extra/speech/flite/include) # libs - list(APPEND FLUIDSYNTH_LIBRARIES fluidsynth ${GLIB_LIBRARIES}) -else() - set(WITH_FLUIDSYNTH FALSE) - message(WARNING "Glib is not found: no fluidsynth build") + list(APPEND FLITE_LIBRARIES flite) endif() if(CMAKE_SIZEOF_VOID_P EQUAL 8) diff --git a/cmake/package.cmake b/cmake/package.cmake index 0f63a7508d..adb83d0801 100644 --- a/cmake/package.cmake +++ b/cmake/package.cmake @@ -61,13 +61,13 @@ if(DPKG_FOUND AND NOT WIN32) set(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA "${POSTINST_FILE};${POSTRM_FILE}") - install(FILES "${CMAKE_SOURCE_DIR}/debian/copyright" - DESTINATION share/doc/${CPACK_DEBIAN_PACKAGE_NAME}/copyright - PERMISSIONS - OWNER_WRITE OWNER_READ - GROUP_READ - WORLD_READ - ) +# install(FILES "${CMAKE_SOURCE_DIR}/debian/copyright" +# DESTINATION share/doc/${CPACK_DEBIAN_PACKAGE_NAME}/copyright +# PERMISSIONS +# OWNER_WRITE OWNER_READ +# GROUP_READ +# WORLD_READ +# ) endif() include(CPack) diff --git a/cmake/summary.cmake b/cmake/summary.cmake index e499905120..9ab7ebcd22 100644 --- a/cmake/summary.cmake +++ b/cmake/summary.cmake @@ -48,11 +48,12 @@ message(STATUS " portmidi: ${WITH_PORTMIDI}") message(STATUS " oss: ${WITH_OSS}") message(STATUS "") message(STATUS " Libraries:") -message(STATUS " fftw3: ${FFTW_FOUND}") -message(STATUS " modplug: ${MODPLUG_FOUND}") +message(STATUS " fftw3: ${WITH_FFTW} (WITH_FFTW=${WITH_FFTW})") +message(STATUS " modplug: ${WITH_MODPLUG} (WITH_MODPLUG=${WITH_MODPLUG})") message(STATUS " libsndfile: ${LIBSNDFILE_FOUND}") message(STATUS " LeapMotion: ${LEAPMOTION_FOUND}") -message(STATUS " FluidSynth: ${WITH_FLUIDSYNTH}") +message(STATUS " FluidSynth: ${WITH_FLUIDSYNTH} (WITH_FLUIDSYNTH=${WITH_FLUIDSYNTH})") +message(STATUS " flite: ${WITH_TTS_FLITE} (WITH_TTS_FLITE=${WITH_TTS_FLITE})") message(STATUS " libusb: ${LIBUSB_1_FOUND}") message(STATUS "===========================================") message(STATUS "Build info:") diff --git a/cmake/version.cmake b/cmake/version.cmake index 389f749c87..a31f270044 100644 --- a/cmake/version.cmake +++ b/cmake/version.cmake @@ -1,11 +1,11 @@ set(PD_MAJOR_VERSION 0) -set(PD_MINOR_VERSION 49) +set(PD_MINOR_VERSION 50) set(PD_BUGFIX_VERSION 1) set(PD_BUILD_SUFFIX "ceammc") set(PD_TEXT_VERSION_SHORT "${PD_MAJOR_VERSION}.${PD_MINOR_VERSION}.${PD_BUGFIX_VERSION}") set(PD_TEXT_VERSION_FULL "${PD_TEXT_VERSION_SHORT}_${PD_BUILD_SUFFIX}") -set(CEAMMC_DISTRIB_VERSION "2019.04") +set(CEAMMC_DISTRIB_VERSION "2020.02") set(PD_MACOSX_BUNDLE_VERSION ${PD_TEXT_VERSION_SHORT}) set(PD_MACOSX_BUNDLE_SUFFIX "ceammc_${CEAMMC_DISTRIB_VERSION}") diff --git a/configure.ac b/configure.ac index 7a6d607e02..b47d26a66f 100644 --- a/configure.ac +++ b/configure.ac @@ -2,7 +2,7 @@ ##### Prelude ##### AC_PREREQ(2.59) -AC_INIT([pd], [0.49.0]) +AC_INIT([pd], [0.50.1]) AC_CONFIG_SRCDIR(src/m_pd.c) AC_CONFIG_AUX_DIR([m4/config]) AC_CONFIG_MACRO_DIR([m4/generated]) @@ -279,7 +279,7 @@ else CFLAGS="$CFLAGS $RELEASE_CFLAGS" fi -##### Universal/multi architecture build on OSX ##### +##### Universal/multi architecture build on macOS ##### PD_CHECK_UNIVERSAL(ARCH, [universal=yes], [universal=no]) AM_CONDITIONAL(UNIVERSAL, test x$universal = xyes) if test x$universal = xyes ; then @@ -290,7 +290,8 @@ fi ##### Gettext ##### # Gettext is needed to build language localizations. AC_ARG_ENABLE([locales], - [AS_HELP_STRING([--disable-locales], [do not compile localizations (requires gettext)])], + [AS_HELP_STRING([--disable-locales], + [do not compile localizations (requires gettext)])], [locales=$enableval]) if test x$locales = xyes ; then AC_CHECK_PROG(HAVE_MSGFMT, [msgfmt], yes, no) @@ -325,7 +326,8 @@ fi # on macOS, use the JackOSX.com Jackmp.framework not the jack lib by default # this is set in src/Makefile.am based on the JACK & JACK_FRAMEWORK vars AC_ARG_ENABLE([jack-framework], - [AS_HELP_STRING([--disable-jack-framework], [do not weak link to Jackmp.framework on macOS])], + [AS_HELP_STRING([--disable-jack-framework], + [do not weak link to Jackmp.framework on macOS])], [jack_framework=$enableval]) test x$MACOSX = xyes || jack_framework=no if test x$jack_framework = xyes ; then @@ -339,7 +341,9 @@ AC_ARG_ENABLE([jack], if [ test x$jack_framework != xyes ] && [ test x$jack = xyes ] ; then AC_CHECK_LIB([rt], [shm_open], [LIBS="$LIBS -lrt"]) AC_CHECK_LIB([jack], [jack_set_xrun_callback], [JACK_LIBS="-ljack" ; jack=xrun]) - AC_CHECK_LIB([jack], [jack_set_error_function], [JACK_LIBS="-ljack" ; jack=yes], [jack=no]) + AC_CHECK_LIB([jack], [jack_set_error_function], [JACK_LIBS="-ljack" ; jack=yes], + [AC_MSG_WARN([JACK development files not found... skipping (See INSTALL.txt)]) + jack=no]) fi ##### MMIO ##### @@ -355,7 +359,8 @@ AC_ARG_ENABLE([asio], test x$WINDOWS = xyes || asio=no AS_IF([test x$asio = xyes], test -f "${srcdir}"/asio/ASIOSDK/common/asio.h || asio=no - AS_IF([test x$asio = xno], AC_MSG_WARN([ASIO SDK not found! See asio/README.txt])) + AS_IF([test x$asio = xno], + AC_MSG_WARN([ASIO SDK not found... skipping (See asio/README.txt)])) ) ##### PortAudio ##### @@ -363,7 +368,8 @@ AC_ARG_ENABLE([portaudio], [AS_HELP_STRING([--disable-portaudio], [do not use portaudio])], [portaudio=$enableval]) AC_ARG_WITH([local-portaudio], - [AS_HELP_STRING([--without-local-portaudio], [do not use the portaudio included with pd])], + [AS_HELP_STRING([--without-local-portaudio], + [do not use the portaudio included with Pd])], [local_portaudio=$withval]) if test x$portaudio = xyes ; then if test x$local_portaudio = xno ; then @@ -375,7 +381,7 @@ if test x$portaudio = xyes ; then if test -d "$srcdir/portaudio" ; then AC_MSG_NOTICE([Using included PortAudio]) else - AC_MSG_WARN([PortAudio not found in pd source directory]) + AC_MSG_WARN([PortAudio not found in Pd source directory]) portaudio=no fi fi @@ -386,11 +392,12 @@ AC_ARG_ENABLE([portmidi], [AS_HELP_STRING([--enable-portmidi], [use portmidi])], [portmidi=$enableval]) AC_ARG_WITH([local-portmidi], - [AS_HELP_STRING([--without-local-portmidi], [do not use the portmidi included with pd])], + [AS_HELP_STRING([--without-local-portmidi], + [do not use the portmidi included with Pd])], [local_portmidi=$withval]) # don't allow portmidi if already using oss AS_IF([test x$oss = xyes -a x$portmidi != xno], - [AC_MSG_WARN([Cannot enable both OSS-midi and PortMidi..preferring OSS]) + [AC_MSG_WARN([Cannot enable both OSS-midi and PortMidi... preferring OSS]) portmidi=no]) if test x$portmidi = xyes ; then if test x$local_portmidi = xno ; then @@ -402,7 +409,7 @@ if test x$portmidi = xyes ; then if test -d "$srcdir/portmidi" ; then AC_MSG_NOTICE([Using included PortMidi]) else - AC_MSG_WARN([PortMidi not found in pd source directory]) + AC_MSG_WARN([PortMidi not found in Pd source directory]) portmidi=no fi fi @@ -415,13 +422,15 @@ AC_ARG_ENABLE([fftw], if test x$fftw = xyes; then AC_CHECK_LIB([fftw3f], [fftwf_execute], [LIBS="$LIBS -lfftw3f"], - [AC_MSG_NOTICE([fftw package not found, using built-in FFT]) ; fftw=no]) + [AC_MSG_WARN([FFTW development files not found... using built-in FFT]) + fftw=no]) fi AM_CONDITIONAL(FFTW, test x$fftw = xyes) ##### Wish ##### AC_ARG_WITH([wish], - [AS_HELP_STRING([--with-wish=WISH], [which Tk Wish application to use for the Pd GUI])], + [AS_HELP_STRING([--with-wish=WISH], + [which Tk Wish application to use for the Pd GUI])], [WISH=$withval]) AS_IF([test "x${WISH}" = "xyes" -o "x${WISH}" = "xno"], [AC_MSG_NOTICE([--with-wish requires an application, ignoring '${WISH}']) @@ -435,8 +444,7 @@ AC_SUBST([WISH]) # Cygwin has a function OSS /dev/dsp, but not MIDI, # and Pd is only set up to handle a single MIDI API AS_IF([test x$WINDOW = xyes -a x$oss != xno], - [AC_MSG_WARN([OSS not working on W32..disabling]) - oss=no]) + [AC_MSG_WARN([OSS not working on W32... disabling]) ; oss=no]) AM_CONDITIONAL(OSS, test x$oss = xyes) AS_IF([test x$oss = xyes], [audio_backends="OSS ${audio_backends}"]) AS_IF([test x$oss = xyes], [midi_backends="OSS ${midi_backends}"]) @@ -461,9 +469,9 @@ AM_CONDITIONAL(ASIO, test x$asio = xyes) AS_IF([test x$asio = xyes], [audio_backends="ASIO ${audio_backends}"]) ##### CoreAudio ##### -# portaudio doesn't work with iPhone, so don't bother with CoreAudio +# portaudio doesn't work with iOS, so don't bother with CoreAudio AS_IF([test x$IPHONEOS = xyes -a x$coreaudio != xno], - [AC_MSG_WARN([PortAudio not working on iPhone..disabling CoreAudio]) + [AC_MSG_WARN([PortAudio not working on iOS... disabling CoreAudio]) coreaudio=no]) AM_CONDITIONAL(COREAUDIO, test x$coreaudio = xyes) @@ -568,3 +576,30 @@ AC_MSG_NOTICE([ audio APIs: $audio_backends midi APIs: $midi_backends ]) + + Platform: $platform + Debug build: $debug + Universal build: $universal + Localizations: $locales + Source directory: $srcdir + Installation prefix: $prefix + +AS_IF([test x$enable_locales = xyes -a x$locales = xno ], + AC_MSG_WARN([localization requested but no GNU gettext with msgfmt found... disabled])) +AS_IF([test x$enable_oss = xyes -a x$oss = xno ], + AC_MSG_WARN([OSS requested but no development files found... disabled])) +AS_IF([test x$enable_alsa = xyes -a x$alsa = xno ], + AC_MSG_WARN([ALSA requested but no development files found... disabled (See INSTALL.txt)])) +AS_IF([test x$enable_jack = xyes -a x$jack = xno ], + AC_MSG_WARN([JACK requested but no development files found... disabled (See INSTALL.txt)])) +AS_IF([test x$enable_jack_framework = xyes -a x$jack_jack != xyes ], + AC_MSG_WARN([JACK-Framework requested but no development files found... disabled (See INSTALL.txt)])) +AS_IF([test x$enable_mmio = xyes -a x$mmio = xno ], + AC_MSG_WARN([MMIO requested but not available... disabled (requires Windows)])) +AS_IF([test x$enable_asio = xyes -a x$asio = xno ], + AC_MSG_WARN([ASIO requested but no SDK found... disabled (see asio/README.txt)])) + +# TODO portaudio + +AS_IF([test x$enable_fftw = xyes -a x$fftw = xno ], + AC_MSG_WARN([FFTW requested but no development files found... disabled])) diff --git a/debian/README.Debian b/debian/README.Debian deleted file mode 100644 index e7b7d5da14..0000000000 --- a/debian/README.Debian +++ /dev/null @@ -1,40 +0,0 @@ -pd for Debian ----------------------- - -Soundcards and Drivers -======================= - -Pd uses your soundcard in a way to reduce the latency introduced by -audio buffering. This may in some circumstances introduce distortions. - -There are different methods to solve this problem. - -1) starting pd with certain flags: - - -audiobuf - - sets the number of fragments used in the OSS driver, and additionally - triggers the "good old and stable" device interface. - - -noadc - - start pd in output only mode. - - -2) Using ALSA with OSS emulation - - -Configuration -============== - -Instead of passing your command line flags to pd, you can write them -into your ~/.pdrc file. Each commandline switch on its own line like - - -path /usr/local/lib/pd-externals - -frags 4 - -noadc - -lib Gem - - - - -- Guenter Geiger , Tue, 3 Aug 1999 14:33:26 +0200 diff --git a/debian/README.source b/debian/README.source deleted file mode 100644 index 8520415fd1..0000000000 --- a/debian/README.source +++ /dev/null @@ -1,5 +0,0 @@ -This package uses quilt to manage all modifications to the upstream -source. Changes are stored in the source package as diffs in -debian/patches and applied during the build. - -Read more about this on /usr/share/doc/quilt/README.source. diff --git a/debian/changelog b/debian/changelog deleted file mode 100644 index cc0e2c0363..0000000000 --- a/debian/changelog +++ /dev/null @@ -1,630 +0,0 @@ -puredata (0.43.0-1~hcs0) unstable; urgency=low - - * debian/control: let's see what 0.43 does in .deb format - - -- Hans-Christoph Steiner Sat, 09 Jan 2010 19:58:00 -0400 - -puredata (0.42.5-4) unstable; urgency=low - - * debian/install: changed binary from /usr/bin/pd to /usr/bin/puredata - * debian/links: made /usr/bin/pd a link to /usr/bin/puredata - * debian/menu: made use /usr/bin/puredata to always start this version - * debian/puredata.desktop: - - added translations for the Comment - - use the /usr/bin/puredata binary - * debian/patches/05_user-install-paths.diff: - - added standard paths for people to install their own externals - * debian/patches/06_bin-puredata.diff: - - patched pd to call binary /usr/bin/puredata - - -- Hans-Christoph Steiner Sat, 09 Jan 2010 19:58:00 -0400 - -puredata (0.42.5-3) unstable; urgency=low - - * debian/control: - - add community site to homepage field - - improve long description - - remove Replaces and Conflicts fields - - add Suggests on pd-csound, pd-pdp, pd-zexy, pd-aubio - * debian/rules: add per-arch configuration flags - * debian/patches/02_kfreebsd.diff: - - also define pd_tilde_dllextent on FreeBSD - - fix typo (really closing #414414 this time) - - also add hurd glue - * debian/patches/04_hurd.diff: - - add hurd glue and s_midi_dummy.c - - -- Paul Brossier Tue, 22 Dec 2009 21:29:31 +0100 - -puredata (0.42.5-2) unstable; urgency=low - - [Paul Brossier] - * debian/control: add Build-Depends on quilt - * debian/rules: pass --with quilt to dh - * debian/README.source: add reference to quilt documentation - * debian/patches/01_big_endian.diff: fix FTBFS on big endian machines - * debian/control: add Vcs-Git and Vcs-Browser fields - * debian/watch: bump to version 3, add uversionmangle - - [IOhannes m Zmölnig] - * debian/patches/02_kfreebsd.diff: added patch for kfreebsd (closes: #414414) - * debian/patches/03_nostrip.diff: do not strip externals (closes: #437833) - - -- Paul Brossier Sun, 13 Dec 2009 22:56:41 +0100 - -puredata (0.42.5-1) unstable; urgency=low - - * New upstream release (closes: #473763, #458287, #349314) - * Adopt package (closes: #547030) - * Drop Build-Depends on libjack100.0-dev (closes: #527427) - * Package ships m_pd.h since 1999 (closes: #405488) - * debian/rules: switch from cdbs to debhelper - * debian/compat: bump to 7 - * debian/puredata.preinst: remove all ancient doc locations - * debian/control: span Build-Depends on multiple lines - * debian/control: bump Standards-Version - * debian/control: bump to tcl/tk 8.5 - * debian/control: add ${misc:Depends} - * debian/install: updated doc/4 location - * debian/docs: move most documentation to /usr/share/doc/puredata - except 5.reference for now - * debian/rules: do not compress .pd, .wav, .aiff and .txt files - * debian/puredata.desktop: remove obsolete encoding - * debian/doc-base.puredata: remove top section Apps - * debian/copyright: detail of different files - * debian/rules: fix pd.tk permissions in dh_fixperms - * debian/puredata.xpm: transparent background - * debian/links: add link from puredata to pd - - -- Paul Brossier Thu, 10 Dec 2009 06:32:59 +0100 - -puredata (0.41.4-1) unstable; urgency=low - - * New upstream version - * Minimal changes in the README.Debian file - - -- Guenter Geiger (Debian/GNU) Mon, 21 Jul 2008 11:00:16 +0200 - -puredata (0.41.0-2) unstable; urgency=low - - * First 0.41 upload to unstable - - -- Guenter Geiger (Debian/GNU) Fri, 08 Feb 2008 12:00:47 +0100 - -puredata (0.41.0-1) experimental; urgency=low - - * New upstream release - - -- Guenter Geiger (Debian/GNU) Thu, 07 Feb 2008 17:38:40 +0100 - -puredata (0.40.0~test05-1) experimental; urgency=low - - * New upstream version - - -- Guenter Geiger (Debian/GNU) Fri, 25 Aug 2006 17:11:52 +0200 - -puredata (0.40.0~test04-1) experimental; urgency=low - - * New upstream version - * removed empty 64_bit_arrays patch - * removed fix_s_stuff_include.patch - * build depends conditionally on libasound2-dev - - -- Guenter Geiger (Debian/GNU) Thu, 24 Aug 2006 11:53:48 +0200 - -puredata (0.40.0~test03-1) experimental; urgency=low - - * New upstream version - * added debhelper token to preinst - - -- Guenter Geiger (Debian/GNU) Wed, 23 Aug 2006 12:23:00 +0200 - -puredata (0.39.2-3) unstable; urgency=low - - * Added 64bit.patch, deals with problems on 64 bit architectures and - arrays - - -- Guenter Geiger (Debian/GNU) Tue, 1 Aug 2006 18:52:19 +0200 - -puredata (0.39.2-2) unstable; urgency=low - - * Added desktop file (thanks to Emmet Hkory) - - -- Guenter Geiger (Debian/GNU) Wed, 29 Mar 2006 16:43:59 +0200 - -puredata (0.39.2-1) unstable; urgency=low - - * New upstream version - - -- Guenter Geiger (Debian/GNU) Tue, 13 Dec 2005 16:11:21 +0100 - -puredata (0.39.1-1) unstable; urgency=low - - * New upstream version - - -- Guenter Geiger (Debian/GNU) Mon, 14 Nov 2005 12:27:12 +0100 - -puredata (0.39.0test4) unstable; urgency=low - - * New upstream version - * Added libjack-dev as build option (backporting) - - -- Guenter Geiger (Debian/GNU) Wed, 2 Nov 2005 17:42:39 +0100 - -puredata (0.38.4+amidi-4) unstable; urgency=low - - * recompile with new JACK API (closes: #317214) - * Fixed wrong path to html docs in manual (closes: #301689) - - -- Guenter Geiger (Debian/GNU) Fri, 8 Jul 2005 11:02:23 +0200 - -puredata (0.38.4+amidi-3) unstable; urgency=low - - * Incorporated mlock fix for 2.6 kernels - * moved allocation/deallocation out of midi poll() call for ALSA (this - cause problems on 2.6 kernel series when using -rt) - - -- Guenter Geiger (Debian/GNU) Fri, 8 Apr 2005 16:21:52 +0200 - -puredata (0.38.4+amidi-2) unstable; urgency=low - - * Fixed -nomidi behaviour - - -- Guenter Geiger (Debian/GNU) Fri, 8 Apr 2005 16:11:29 +0200 - -puredata (0.38.4+amidi-1) unstable; urgency=low - - * New upstream version - * Cleaned up ALSA midi patch - * Added icon (closes: #299411) - - -- Guenter Geiger (Debian/GNU) Tue, 22 Mar 2005 12:09:45 +0100 - -puredata (0.38.2+amidi-3) unstable; urgency=low - - * fixed CONFIGURE_EXTRA_FLAGS - - -- Guenter Geiger (Debian/GNU) Wed, 16 Feb 2005 16:44:55 +0100 - -puredata (0.38.2+amidi-2) unstable; urgency=low - - * Added patch to fix loading of documentation patches 04_helpdir.patch - - -- Guenter Geiger (Debian/GNU) Thu, 10 Feb 2005 12:30:00 +0100 - -puredata (0.38.2+amidi-1) unstable; urgency=low - - * New upstream version - - -- Guenter Geiger (Debian/GNU) Thu, 10 Feb 2005 10:03:04 +0100 - -puredata (0.38.0+amidi-3) unstable; urgency=low - - * Fixed segfault when no alsa midi devices found - - -- Guenter Geiger (Debian/GNU) Thu, 13 Jan 2005 13:51:44 +0100 - -puredata (0.38.0+amidi-2) unstable; urgency=low - - * fixed problem with gui crashes, see debian/patches/03_fixgui.patch - - -- Guenter Geiger (Debian/GNU) Fri, 7 Jan 2005 16:38:00 +0100 - -puredata (0.38.0+amidi-1) unstable; urgency=low - - * New upstream version - * removed the -mcpu flag for alpha (closes: 265452) - * preinst now removes the doc/1.manual directory so it can be properly - linked by dh_link (closes: 283988) - - -- Guenter Geiger (Debian/GNU) Tue, 4 Jan 2005 10:18:03 +0100 - -puredata (0.38.0test13-1) experimental; urgency=low - - * New upstream test release - - -- Guenter Geiger (Debian/GNU) Tue, 14 Dec 2004 15:26:45 +0100 - -puredata (0.38.0test10-1) experimental; urgency=low - - * New upstream version - - -- Guenter Geiger (Debian/GNU) Thu, 11 Nov 2004 11:15:39 +0100 - -puredata (0.38.0test8-2) experimental; urgency=low - - * Applied alsa midi patch - * patched tabreceive to fill whole signal block - - -- Guenter Geiger (Debian/GNU) Thu, 4 Nov 2004 13:22:50 +0100 - -puredata (0.38.0test8-1) experimental; urgency=low - - * New upstream version - - -- Guenter Geiger (Debian/GNU) Thu, 14 Oct 2004 11:45:18 +0200 - -puredata (0.38.0test7-1) experimental; urgency=low - - * New upstream version - - -- Guenter Geiger (Debian/GNU) Mon, 4 Oct 2004 18:25:05 +0200 - -puredata (0.38.0test4-1) experimental; urgency=low - - * New upstream version - * removed the xterm dependency, changed menu entry - * Removed -mcpu=ev56 from alpha build - - -- Guenter Geiger (Debian/GNU) Thu, 16 Sep 2004 11:43:27 +0200 - -puredata (0.37.r4-1) unstable; urgency=low - - * New upstream version - * added audiobuf message in README.Debian - * Moved to cdbs - * readded expr external, seems to compile again with gcc-3.3.4 - * 64 bit clean patch now in debian/patches directory - * files are installed only through debian/install - - -- Guenter Geiger (Debian/GNU) Thu, 12 Aug 2004 16:52:15 +0200 - -puredata (0.37.cvs1-5) unstable; urgency=low - - * Fixed watch file - * Changed layout for html documentation (the whole manual is now in - /usr/share/doc/puredata, and gets linked to /usr/lib/pd) - - -- Guenter Geiger (Debian/GNU) Tue, 27 Jul 2004 11:25:59 +0200 - -puredata (0.37.cvs1-4) unstable; urgency=low - - * vexp.c causes gcc segfault, temporarily disabled (closes: 248412) - - -- Guenter Geiger (Debian/GNU) Mon, 14 Jun 2004 10:51:47 +0200 - -puredata (0.37.cvs1-3) unstable; urgency=low - - * Fixed 64 bit problem with %x formater - - -- Guenter Geiger (Debian/GNU) Sun, 16 May 2004 17:50:24 +0200 - -puredata (0.37.cvs1-2) unstable; urgency=low - - * Recompiled using JACK - - -- Guenter Geiger (Debian/GNU) Mon, 10 May 2004 12:58:22 +0200 - -puredata (0.37.cvs1-1) unstable; urgency=low - - * New CVS snapshot - - -- Guenter Geiger (Debian/GNU) Thu, 6 May 2004 11:50:44 +0200 - -puredata (0.37.cvs-13) unstable; urgency=low - - * updated jack support, fixes a bug with GUI updates - * fixed documentation locate (was still in /usr/share/doc/pd) - * adapted menu layout (Testtone in Media Menu) - * removed quoting feature - - -- Guenter Geiger (Debian/GNU) Tue, 24 Feb 2004 11:26:12 +0100 - -puredata (0.37.cvs-12) unstable; urgency=low - - * fixed priority problem with lowlatency jack settings - - -- Guenter Geiger (Debian/GNU) Mon, 19 Jan 2004 13:08:25 +0100 - -puredata (0.37.cvs-11) unstable; urgency=low - - * recompile for new JACK - - -- Guenter Geiger (Debian/GNU) Fri, 16 Jan 2004 19:25:19 +0100 - -puredata (0.37.cvs-10) unstable; urgency=low - - * I am just too stupid for this, reupload with the jack package that - is actually in unstable - - -- Guenter Geiger (Debian/GNU) Wed, 17 Dec 2003 09:10:38 +0100 - -puredata (0.37.cvs-9) unstable; urgency=low - - * Upload to unstable - - -- Guenter Geiger (Debian/GNU) Wed, 17 Dec 2003 08:30:53 +0100 - -puredata (0.37.cvs-8) experimental; urgency=low - - * fixed deletion error for bang - * removed Werror, because gcc 3.3.2 spits out very strange warnings - - -- Guenter Geiger (Debian/GNU) Fri, 7 Nov 2003 17:48:34 +0100 - -puredata (0.37.cvs-7) unstable; urgency=low - - * patched to actually work on 64 bit architectures - * changed %x formatters to %lx - - -- Guenter Geiger (Debian/GNU) Wed, 29 Oct 2003 22:29:52 +0100 - -puredata (0.37.cvs-6) unstable; urgency=low - - * fixed 64 bit compilation problems (closes: #217840) - - -- Guenter Geiger (Debian/GNU) Wed, 29 Oct 2003 13:31:11 +0100 - -puredata (0.37.cvs-5) unstable; urgency=low - - * fixed problems with jack - - -- Guenter Geiger (Debian/GNU) Tue, 7 Oct 2003 17:18:31 +0200 - -puredata (0.37.cvs-4) unstable; urgency=low - - * roll another one .. forgot to update pd.tk - - -- Guenter Geiger (Debian/GNU) Tue, 5 Aug 2003 12:01:20 +0200 - -puredata (0.37.cvs-3) unstable; urgency=low - - * exchanged ld with cc in expr externals - - -- Guenter Geiger (Debian/GNU) Sat, 2 Aug 2003 23:29:29 +0200 - -puredata (0.37.cvs-2) unstable; urgency=low - - * fixed build of extra -fPIC (closes: #203416) - * changed t_int to long in m_pd.h - - -- Guenter Geiger (Debian/GNU) Wed, 30 Jul 2003 10:41:01 +0200 - -puredata (0.37.cvs-1) unstable; urgency=low - - * new upstream and renaming to puredata - - -- Guenter Geiger (Debian/GNU) Tue, 08 Jul 2003 15:13:58 +0200 - -pd (0.36.cvs-9) unstable; urgency=low - - * makes -nosound option work (closes: #182888) - * remove -Werror, hopefully a quick fix for 64 bit architectures - * add -fPIC to external, fixed strip - - -- Guenter Geiger (Debian/GNU) Fri, 28 Mar 2003 10:58:39 +0100 - -pd (0.36.cvs-8) unstable; urgency=low - - * I'm to stupid for this world, now I hope it really compiles (removed - sa_restorer and SIGSTKFTL in s_inter.c) - - -- Guenter Geiger (Debian/GNU) Wed, 26 Mar 2003 13:29:29 +0100 - -pd (0.36.cvs-7) unstable; urgency=low - - * removed handling of SIGSTKFLT - * fixed jack behaviour (DIO errors) - - -- Guenter Geiger (Debian/GNU) Tue, 25 Mar 2003 18:08:04 +0100 - -pd (0.36.cvs-6) unstable; urgency=low - - * New snapshot - - -- Guenter Geiger (Debian/GNU) Mon, 17 Mar 2003 16:48:33 +0100 - -pd (0.36.cvs-5) unstable; urgency=low - - * Remove manpages from /usr/man (closes: 181190) - - -- Guenter Geiger (Debian/GNU) Mon, 17 Feb 2003 17:25:45 +0100 - -pd (0.36.cvs-4) unstable; urgency=low - - * Recompilation for new libjack - - -- Guenter Geiger (Debian/GNU) Wed, 12 Feb 2003 10:49:16 +0100 - -pd (0.36.cvs-3) unstable; urgency=low - - * Fixed compilation for Debian libjackX.XX.X-dev packages - - -- Guenter Geiger (Debian/GNU) Tue, 7 Jan 2003 12:49:22 +0100 - -pd (0.36.cvs-2) unstable; urgency=low - - * Included patches for different Debian architectures (got lost somehow) - (closes: #173311) - - -- Guenter Geiger (Debian/GNU) Mon, 16 Dec 2002 16:57:03 +0100 - -pd (0.36.cvs-1) unstable; urgency=low - - * new upstream (closes: * #172085). pd now checks for jack, then alsa and - finally oss. This doesnt fix the bug that is in ALSA OSS emulation, - but it uses the ALSA native driver if available. - - -- Guenter Geiger (Debian/GNU) Tue, 10 Dec 2002 10:50:55 +0100 - -pd (0.36-1) unstable; urgency=low - - * new upstream - - -- Guenter Geiger (Debian/GNU) Mon, 25 Nov 2002 18:47:02 +0100 - -pd (0.35.1-1) unstable; urgency=low - - * new upstream, jack patched - - -- Guenter Geiger (Debian/GNU) Fri, 26 Jul 2002 16:15:14 +0200 - -pd (0.35.test23-1) unstable; urgency=low - - * new upstream release - - -- Guenter Geiger (Debian/GNU) Tue, 7 May 2002 18:47:04 +0200 - -pd (0.34.4-1) unstable; urgency=low - - * new upstream release - - -- Guenter Geiger (Debian/GNU) Tue, 7 May 2002 18:47:04 +0200 - -pd (0.34.2-4) unstable; urgency=low - - * SIGFLTK doesn exist on all platforms, remove handler for it. - (closes: #144081) - - -- Guenter Geiger (Debian/GNU) Mon, 22 Apr 2002 19:48:05 +0200 - -pd (0.34.2-3) unstable; urgency=low - - * added tag in documentation (closes: #135911) - - -- Guenter Geiger (Debian/GNU) Thu, 18 Apr 2002 13:13:00 +0200 - -pd (0.34.2-2) unstable; urgency=low - - * FTBFS: build-depends, gcc errors, etc (hppa/unstable) patch applied LaMont - Jones (closes: #143323) - - -- Guenter Geiger (Debian/GNU) Wed, 17 Apr 2002 16:44:32 +0200 - -pd (0.34.2-1) unstable; urgency=low - - * new upstream version, only compiles with libffm on Alpha if it - is available (closes: #112232), added build depends - * added -fPIC to pd externals (closes: #124140) - * removed warning treated as errors flag (closes: #142635) - - -- Guenter Geiger (Debian/GNU) Fri, 2 Nov 2001 11:36:47 +0100 - -pd (0.32p1-5) unstable; urgency=low - - * fixed build on hurd (bstring.h) (closes: #108598) - man page link for pdsend, pdreceive (closes: #99566) - added jpeg files to html documentation (closes: #102171) - - -- Guenter Geiger (Debian/GNU) Wed, 15 Aug 2001 10:31:02 +0200 - -pd (0.32p1-4) unstable; urgency=low - - * don't set sa_restorer on any architecture .. it seems like this - field is only available for i386. (closes: #104984) - - -- Guenter Geiger (Debian/GNU) Mon, 16 Jul 2001 11:30:02 +0200 - -pd (0.32p1-3) unstable; urgency=low - - * make it clean the sources proberly (closes: #94525) - - -- Guenter Geiger (Debian/GNU) Fri, 20 Apr 2001 17:09:02 +0200 - -pd (0.32p1-2) unstable; urgency=low - - * make it compilable on sparc (SIGFLTK) (closes: #89274) - - -- Guenter Geiger (Debian/GNU) Sat, 14 Mar 2001 10:37:02 +0100 - -pd (0.32p1-1) unstable; urgency=low - - * folded table patches in, make the whole compilable on Alpha, added devfs compatibility - - -- Guenter Geiger (Debian/GNU) Sat, 12 Mar 2001 11:30:07 +0100 - -pd (0.32-1) unstable; urgency=low - - * new upstream (test) release - - -- Guenter Geiger Sat, 4 Nov 2000 12:30:07 +0100 - -pd (0.31-3) unstable; urgency=low - - * make it compileable with ccc under Alpha (extras) - - -- Guenter Geiger Fri, 13 Oct 2000 14:13:05 +0200 - -pd (0.31-2) unstable; urgency=low - - * improvments for nogui mode - - -- Guenter Geiger Tue, 12 Sep 2000 22:24:01 +0200 - -pd (0.31-1) unstable; urgency=low - - * new upstream - - -- Guenter Geiger Fri, 21 Jul 2000 18:34:45 +0200 - -pd (0.30-1) unstable; urgency=low - - * new upstream version - - -- Guenter Geiger Mon, 13 Mar 2000 13:45:01 +0100 - -pd (0.28-4) unstable frozen; urgency=low - - * applied patch for building on sparc from Ben Collins , - fixed bug in audio output with RME card - - -- Guenter Geiger Mon, 14 Feb 2000 13:34:01 +0100 - -pd (0.28-3) unstable frozen; urgency=low - - * now installs m_pd.h into /usr/include. Uses x-terminal-emulater to provide console. - - -- Guenter Geiger Tue, 25 Jan 2000 15:30:00 +0100 - -pd (0.28-2) unstable; urgency=low - - * changed permissions of configure script - - -- Guenter Geiger Fri, 14 Jan 1999 17:35:10 +0100 - -pd (0.28-1) unstable; urgency=low - - * new upstream version - - -- Guenter Geiger Mon, 22 Nov 1999 11:23:43 +0100 - -pd (0.27-3) unstable; urgency=low - - * minor bugfixes - - -- Guenter Geiger Wed, 13 Oct 1999 11:34:50 +0200 - -pd (0.27-2) unstable; urgency=low - - * added Gem recommendation , menu entry - - -- Guenter Geiger Wed, 15 Sep 1999 15:34:43 +0200 - -pd (0.27-1) unstable; urgency=low - - * new upstream version - - -- Guenter Geiger Mon, 6 Sep 1999 13:10:00 +0200 - -pd (0.26-3) unstable; urgency=low - - * added m_pd.h to the distribution - - -- Guenter Geiger Thu, 26 Aug 1999 16:45:48 +0200 - -pd (0.26-2) unstable; urgency=low - - * patched in the buggy sounddriver patch, fixed Bug#43379, cannot build from - source. - - -- Guenter Geiger Mon, 23 Aug 1999 17:21:34 +0200 - -pd (0.26-1) unstable; urgency=low - - * Initial Release. - - -- Guenter Geiger Tue, 3 Aug 1999 14:33:26 +0200 - -Local variables: -mode: debian-changelog -End: diff --git a/debian/compat b/debian/compat deleted file mode 100644 index 7f8f011eb7..0000000000 --- a/debian/compat +++ /dev/null @@ -1 +0,0 @@ -7 diff --git a/debian/copyright b/debian/copyright deleted file mode 100644 index ad328020dc..0000000000 --- a/debian/copyright +++ /dev/null @@ -1,155 +0,0 @@ -This package was debianized by Guenter Geiger on -Tue, 3 Aug 1999 14:33:26 +0200. - -It was downloaded from - -Author: Miller Puckette - -The following copyright and terms apply to all files associated with the -software unless specified in the "Additional copyrights and licenses" section -below. - -Copyright: - - Copyright (c) 1997-1999 Miller Puckette and others. - -License: - -The authors hereby grant permission to use, copy, modify, distribute, -and license this software and its documentation for any purpose, provided -that existing copyright notices are retained in all copies and that this -notice is included verbatim in any distributions. No written agreement, -license, or royalty fee is required for any of the authorized uses. -Modifications to this software may be copyrighted by their authors -and need not follow the licensing terms described here, provided that -the new terms are clearly indicated on the first page of each file where -they apply. - -IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY -FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY -DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. - -THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES, -INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE -IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE -NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR -MODIFICATIONS. - -RESTRICTED RIGHTS: Use, duplication or disclosure by the government -is subject to the restrictions as set forth in subparagraph (c) (1) (ii) -of the Rights in Technical Data and Computer Software Clause as DFARS -252.227-7013 and FAR 52.227-19. - -Additional copyrights and licenses: - -extra/expr~: - - Authors: Maurizio De Cecco, Francois Dechelle, Enzo Maggi, Norbert Schnell. - - Copyright (C) 1994, 1995, 1998, 1999 by IRCAM-Centre Georges Pompidou, - Paris, France. - - expr~ is released under the GNU General Public License Version 2 or above: - - 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 the file `/usr/share/common-licenses/GPL-2'. - -src/d_fft_fftsg.c - - Copyright(C) 1996-2001 Takuya OOURA - - Download: http://momonga.t.u-tokyo.ac.jp/~ooura/fft.html - - You may use, copy, modify this code for any purpose and without fee. You may - distribute this ORIGINAL package. - -src/d_fft_mayer.c - - Copyright 1988, 1993; Ron Mayer - - NOTE: This routine uses at least 2 patented algorithms, and may be - under the restrictions of a bunch of different organizations. - Although I wrote it completely myself, it is kind of a derivative - of a routine I once authored and released under the GPL, so it - may fall under the free software foundation's restrictions; - it was worked on as a Stanford Univ project, so they claim - some rights to it; it was further optimized at work here, so - I think this company claims parts of it. The patents are - held by R. Bracewell (the FHT algorithm) and O. Buneman (the - trig generator), both at Stanford Univ. - If it were up to me, I'd say go do whatever you want with it; - but it would be polite to give credit to the following people - if you use this anywhere: - Euler - probable inventor of the fourier transform. - Gauss - probable inventor of the FFT. - Hartley - probable inventor of the hartley transform. - Buneman - for a really cool trig generator - Mayer(me) - for authoring this particular version and - including all the optimizations in one package. - Thanks, - Ron Mayer; mayer@acuson.com - -src/s_audio_paring.c: - - Author: Phil Burk, http://www.softsynth.com - - This program uses the PortAudio Portable Audio Library. - For more information see: http://www.audiomulch.com/portaudio/ - Copyright (c) 1999-2000 Ross Bencina and Phil Burk - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files - (the "Software"), to deal in the Software without restriction, - including without limitation the rights to use, copy, modify, merge, - publish, distribute, sublicense, and/or sell copies of the Software, - and to permit persons to whom the Software is furnished to do so, - subject to the following conditions: - - The above copyright notice and this permission notice shall be - included in all copies or substantial portions of the Software. - - Any person wishing to distribute modifications to the Software is - requested to send the modifications to the original developer so that - they can be incorporated into the canonical version. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR - ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF - CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -extra/choice/choice.c: - - Copyright 1999 Miller Puckette. - Permission is granted to use this software for any purpose provided you - keep this copyright notice intact. - - THE AUTHOR AND HIS EMPLOYERS MAKE NO WARRANTY, EXPRESS OR IMPLIED, - IN CONNECTION WITH THIS SOFTWARE. - - This file is downloadable from http://www.crca.ucsd.edu/~msp . - -extra/sigmund~/sigmund~.c: - Copyright (c) 2005 Miller Puckette. BSD licensed. No warranties. - -Additional copyrights: - -The following files have the same license as most source files, but have -specific copyright notices. - -src/s_midi_pm.c, src/s_midi_oss.c, src/s_midi_alsa.c, s_audio_alsa.h - Copyright (c) 1997-2003 Guenter Geiger, Miller Puckette, Larry Troxler, - Winfried Ritsch, Karl MacMillan, and others. - - Copyright (c) 1997-1999 Guenter Geiger, Miller Puckette, Larry Troxler, - Winfried Ritsch, Karl MacMillan, and others. - -src/s_path.c - Copyright (c) 1999 Guenter Geiger and others. - diff --git a/debian/docs b/debian/docs deleted file mode 100644 index 71dfd5bac5..0000000000 --- a/debian/docs +++ /dev/null @@ -1 +0,0 @@ -README.txt diff --git a/debian/patches/01_big_endian.diff b/debian/patches/01_big_endian.diff deleted file mode 100644 index fc6cf67598..0000000000 --- a/debian/patches/01_big_endian.diff +++ /dev/null @@ -1,22 +0,0 @@ -diff --git a/src/s_audio_alsa.c b/src/s_audio_alsa.c -index a5034c8..bc694b0 100644 ---- a/src/s_audio_alsa.c -+++ b/src/s_audio_alsa.c -@@ -469,7 +469,7 @@ int alsa_send_dacs(void) - ((char *)(alsa_snd_buf))[3*j+1] = ((s>>8) & 255); - ((char *)(alsa_snd_buf))[3*j+2] = ((s>>16) & 255); - #else -- fprintf(stderr("big endian 24-bit not supported"); -+ fprintf(stderr,"big endian 24-bit not supported"); - #endif - } - for (; i < thisdevchans; i++, ch++) -@@ -581,7 +581,7 @@ int alsa_send_dacs(void) - * (1./ INT32_MAX); - } - #else -- fprintf(stderr("big endian 24-bit not supported"); -+ fprintf(stderr,"big endian 24-bit not supported"); - #endif - } - else diff --git a/debian/patches/04_hurd.diff b/debian/patches/04_hurd.diff deleted file mode 100644 index 1c5c87ae9e..0000000000 --- a/debian/patches/04_hurd.diff +++ /dev/null @@ -1,13 +0,0 @@ ---- a/src/s_stuff.h -+++ b/src/s_stuff.h -@@ -200,6 +200,10 @@ void sys_setvirtualalarm( void); - #define API_DEFAULT API_SGI - #define API_DEFSTRING "SGI Digital Media" - #endif -+#ifdef __GNU__ -+#define API_DEFAULT API_JACK -+#define API_DEFSTRING "Jack audio connection kit" -+#endif - #define DEFAULTAUDIODEV 0 - - #define MAXAUDIOINDEV 4 diff --git a/debian/patches/05_user-install-paths.diff b/debian/patches/05_user-install-paths.diff deleted file mode 100644 index 9893e94490..0000000000 --- a/debian/patches/05_user-install-paths.diff +++ /dev/null @@ -1,72 +0,0 @@ -diff --git a/src/s_path.c b/src/s_path.c -index d74aa0f..fc2eb6a 100644 ---- a/src/s_path.c -+++ b/src/s_path.c -@@ -69,6 +69,31 @@ void sys_unbashfilename(const char *from, char *to) - *to = 0; - } - -+/* expand env vars and ~ at the beginning of a path and make a copy to return */ -+static void sys_expandpath(const char *from, char *to) -+{ -+ if ((strlen(from) == 1 && from[0] == '~') || (strncmp(from,"~/", 2) == 0)) -+ { -+#ifdef MSW -+ const char *home = getenv("USERPROFILE"); -+#else -+ const char *home = getenv("HOME"); -+#endif -+ if(home) -+ { -+ strncpy(to, home, FILENAME_MAX - 1); -+ strncat(to, from + 1, FILENAME_MAX - strlen(from) - 2); -+ } -+ } -+ else -+ strncpy(to, from, FILENAME_MAX - 1); -+#ifdef MSW -+ char buf[FILENAME_MAX]; -+ ExpandEnvironmentStrings(to, buf, FILENAME_MAX - 2); -+ strncpy(to, buf, FILENAME_MAX - 1); -+#endif -+} -+ - /* test if path is absolute or relative, based on leading /, env vars, ~, etc */ - int sys_isabsolutepath(const char *dir) - { -@@ -193,8 +218,16 @@ int sys_usestdpath = 1; - - void sys_setextrapath(const char *p) - { -+ char pathbuf[FILENAME_MAX]; - namelist_free(pd_extrapath); -- pd_extrapath = namelist_append(0, p, 0); -+ /* add standard place for users to install stuff first */ -+ -+ sys_expandpath("~/pd-externals", pathbuf); -+ pd_extrapath = namelist_append(0, pathbuf, 0); -+ pd_extrapath = namelist_append(pd_extrapath, "/usr/local/lib/pd-externals", 0); -+ -+ /* add built-in "extra" path last so its checked last */ -+ pd_extrapath = namelist_append(pd_extrapath, p, 0); - } - - #ifdef MSW -@@ -319,11 +352,12 @@ static int do_open_via_path(const char *dir, const char *name, - dirresult, nameresult, size, bin)) >= 0) - return (fd); - -- /* next look in "extra" */ -- if (sys_usestdpath && -- (fd = sys_trytoopenone(pd_extrapath->nl_string, name, ext, -- dirresult, nameresult, size, bin)) >= 0) -- return (fd); -+ /* next look in built-in paths like "extra" */ -+ if (sys_usestdpath) -+ for (nl = pd_extrapath; nl; nl = nl->nl_next) -+ if ((fd = sys_trytoopenone(nl->nl_string, name, ext, -+ dirresult, nameresult, size, bin)) >= 0) -+ return (fd); - - *dirresult = 0; - *nameresult = dirresult; diff --git a/debian/patches/series b/debian/patches/series deleted file mode 100644 index cedd95f3d1..0000000000 --- a/debian/patches/series +++ /dev/null @@ -1,3 +0,0 @@ -01_big_endian.diff -04_hurd.diff -05_user-install-paths.diff diff --git a/debian/puredata.manpages b/debian/puredata.manpages deleted file mode 100644 index 12d4ead1f4..0000000000 --- a/debian/puredata.manpages +++ /dev/null @@ -1,3 +0,0 @@ -man/pd.1 -man/pdsend.1 -man/pdreceive.1 diff --git a/debian/puredata.xpm b/debian/puredata.xpm deleted file mode 100644 index bd6a9fe757..0000000000 --- a/debian/puredata.xpm +++ /dev/null @@ -1,38 +0,0 @@ -/* XPM */ -static char * pd_xpm[] = { -"32 32 3 1", -" c None", -". c #FFFFFF", -"+ c #000000", -" ", -" ", -" ", -" ", -" ", -" ", -" ", -" ", -" ++++++++++++++++++++++++++++ ", -" ++++++++..................+ ", -" +........................+ ", -" +...........+++.........+ ", -" +++++++......++........+ ", -" +.++..++.....++........+ ", -" +.++..++..+++++........+ ", -" +.++..++.++..++........+ ", -" +.+++++..++..++........+ ", -" +.++.....++..++........+ ", -" +.++.....++..++........+ ", -" ++++++....++++++.......+ ", -" +......................+ ", -" +......................+ ", -" +.......................+ ", -" +........................+ ", -" ++++++++..................+ ", -" ++++++++++++++++++++++++++++ ", -" ", -" ", -" ", -" ", -" ", -" "}; diff --git a/debian/rules b/debian/rules deleted file mode 100755 index a1ff314215..0000000000 --- a/debian/rules +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/make -f -# -*- makefile -*- - -ARCHITECTURE := $(shell dpkg-architecture -qDEB_HOST_ARCH) - -archconfflags := --prefix=/usr - -ifeq ($(ARCHITECTURE), hurd-i386) - archconfflags := $(archconfflags) --enable-jack --disable-alsa --disable-oss -else -ifeq ($(ARCHITECTURE), kfreebsd-amd64) - archconfflags := $(archconfflags) --enable-jack --disable-alsa -else -ifeq ($(ARCHITECTURE), kfreebsd-i386) - archconfflags := $(archconfflags) --enable-jack --disable-alsa -else - archconfflags := $(archconfflags) --enable-jack --enable-alsa -endif -endif -endif - -# Uncomment this to turn on verbose mode. -export DH_VERBOSE=1 - -%: - dh --with quilt $@ - -override_dh_compress: - dh_compress -X.pd -X.wav -X.aiff -X.txt diff --git a/debian/watch b/debian/watch deleted file mode 100644 index 3f3136c7ca..0000000000 --- a/debian/watch +++ /dev/null @@ -1,3 +0,0 @@ -version=3 -opts="uversionmangle=s/-/./" \ - http://crca.ucsd.edu/~msp/Software/pd-(.*).src.tar.gz diff --git a/doc/1.manual/1.introduction.txt b/doc/1.manual/1.introduction.txt index f3979d2344..d8a7e9e004 100644 --- a/doc/1.manual/1.introduction.txt +++ b/doc/1.manual/1.introduction.txt @@ -1,23 +1,23 @@ PD_VERSION A real-time graphical programming environment for live interactive -computer music, Pd works on Linux, Macintosh OSX, and Microsoft Windows. +computer music, Pd works on Linux, Apple macOS, and Microsoft Windows. Pd is copyrighted, but is free for you to use for any reasonable purpose. See the file: PD_BASEDIR/LICENSE.txt Reference documentation for Pd lives in: - file:PD_BASEDIR/doc/1.manual/index.htm -or: - http://www.crca.ucsd.edu/~msp/Pd_documentation/index.htm + PD_BASEDIR/doc/1.manual/index.htm +or online: + http://msp.ucsd.edu/Pd_documentation/ More extensive FLOSS documentation is available on: - http://en.flossmanuals.net/PureData/ (English) - http://fr.flossmanuals.net/PureData/ (Francais) + http://en.flossmanuals.net/PureData (English) + http://fr.flossmanuals.net/PureData (Francais) Information of all sorts (guides, development, meetings, etc): - http://puredata.org + http://puredata.info The Pd mailing list archive lives in: - http://iem.at/mailinglists/pd-list/ + https://lists.puredata.info/pipermail/pd-list diff --git a/doc/1.manual/fig4.1.png b/doc/1.manual/fig4.1.png new file mode 100644 index 0000000000..7797047ad5 Binary files /dev/null and b/doc/1.manual/fig4.1.png differ diff --git a/doc/1.manual/fig4.2.png b/doc/1.manual/fig4.2.png new file mode 100644 index 0000000000..7c243ef72b Binary files /dev/null and b/doc/1.manual/fig4.2.png differ diff --git a/doc/1.manual/fig4.3.png b/doc/1.manual/fig4.3.png new file mode 100644 index 0000000000..72981ed8ad Binary files /dev/null and b/doc/1.manual/fig4.3.png differ diff --git a/doc/1.manual/fig4.4.png b/doc/1.manual/fig4.4.png new file mode 100644 index 0000000000..84f91ec52d Binary files /dev/null and b/doc/1.manual/fig4.4.png differ diff --git a/doc/1.manual/fig4.5.png b/doc/1.manual/fig4.5.png new file mode 100644 index 0000000000..96b65a3539 Binary files /dev/null and b/doc/1.manual/fig4.5.png differ diff --git a/doc/1.manual/fig4.6.png b/doc/1.manual/fig4.6.png new file mode 100644 index 0000000000..c0666e96f3 Binary files /dev/null and b/doc/1.manual/fig4.6.png differ diff --git a/doc/1.manual/fig4.7.png b/doc/1.manual/fig4.7.png new file mode 100644 index 0000000000..d2cf8e068a Binary files /dev/null and b/doc/1.manual/fig4.7.png differ diff --git a/doc/1.manual/index.htm b/doc/1.manual/index.htm index f764985f80..a4d5411e51 100644 --- a/doc/1.manual/index.htm +++ b/doc/1.manual/index.htm @@ -2,6 +2,9 @@ + + + Pd Documentation @@ -100,8 +103,51 @@

Pd Documentation

  • preferences and startup options
  • how Pd searches for files -
  • writing Pd objects in C + + + +
  • externals + +
      +
    1. external objects & libraries +
        +
      1. what are: vanilla objects, internals & externals? +
      2. what are the types of external objects? +
          +
        1. compiled objects: +
        2. abstractions: +
        +
      3. what are external libraries? +
      4. what are the types of external libraries? +
      + + +
    2. writing Pd objects in C + +
    3. installing external objects and libraries +
        +
      1. where to include the externals? +
      2. how to download externals from Pd vanilla? +
      + +
    4. loading externals +
        +
      1. using the [declare] object +
          +
        1. [declare -path] +
        2. [declare -lib] +
        +
      2. using path and startup +
          +
        1. user added path +
        2. startp +
        +
      3. slash declarations + +
      + +
  • current status
    1. release notes @@ -125,7 +171,7 @@

      Pd Documentation

      one-off and abstractions blocking for signals data - + Making Pd work how to get and install Pd IRIX @@ -161,4 +207,3 @@

      Pd Documentation

      - diff --git a/doc/1.manual/x1.htm b/doc/1.manual/x1.htm index 3a6e24c6e9..2d4381be80 100644 --- a/doc/1.manual/x1.htm +++ b/doc/1.manual/x1.htm @@ -2,6 +2,9 @@ + + + Pd Documentation 1 diff --git a/doc/1.manual/x2.htm b/doc/1.manual/x2.htm index c125954dd6..cd38776420 100644 --- a/doc/1.manual/x2.htm +++ b/doc/1.manual/x2.htm @@ -2,6 +2,9 @@ + + + Pd Documentation 2 diff --git a/doc/1.manual/x3.htm b/doc/1.manual/x3.htm index b1ee08dd3c..d3470b8d74 100644 --- a/doc/1.manual/x3.htm +++ b/doc/1.manual/x3.htm @@ -2,6 +2,9 @@ + + + Pd Documentation 3 @@ -66,7 +69,7 @@

      3.1. Audio and MIDI

      will show up as level unless you turn on the "input hipass" toggle at right; then the DC component is filtered out before metering. -

      To test the quality of audio input and output, turn on "monitor" +

      To test the quality of audio input and output, turn on "monitor" (also at right) which causes the inputs to be played to the outputs at unit gain. You should hear a faithful, non-distorted copy of whatever is sent through the patch. @@ -104,10 +107,10 @@

      3.1. Audio and MIDI

      under your OS below.) For the second, start up your favorite performance monitor program; and for the third, try starting Pd up with ADCs disabled. -

      In addition to the "test audio and MIDI" patch, the "Media" menu +

      In addition to the "test audio and MIDI" patch, the "Media" menu contains items for controlling audio and MIDI settings. The first two items, "Audio on" and "Audio off", open or close the audio devices and -start or stop Pd's audio computation. +start or stop Pd's audio computation.

      If there is a choice of audio API to make, the Media menu will display them. (On Linux, they are @@ -203,11 +206,11 @@

      3.3. Installing Pd in Linux

      What to do depends on which flavor of Linux you are running (e.g., Debian or Red Hat). The instructions here should work for Pd 0.33 and up regardless of -your situation. (If not, you can read the Pd mailing list archives for -recent problems; if you have found a new problem you're welcome to post it +your situation. (If not, you can read the Pd mailing list archives for +recent problems; if you have found a new problem you're welcome to post it to the list.) -

      Pd is available via the package systems for some Linux distributions, +

      Pd is available via the package systems for some Linux distributions, but not always in the most recent version possible. It's relatively easy to compile your own copy of Pd and that is the approach described here. @@ -216,7 +219,7 @@

      Getting Pd as a .tar.gz

      Before you start, you might want to check that you have the resources Pd needs. The main things you need are the C compiler, X windows (including the X development package for Pd to link against), TK, and the ALSA "devel" -headers. It should be +headers. It should be enough to load "tcl-devel", "tk-devel", and "alsa-devel" packages using yum or apt-get. @@ -225,7 +228,7 @@

      Getting Pd as a .tar.gz

      0.44 and start using only the new one. The following description applies to the old one. Look in the INSTALL.txt file to see how to use the new one. -

      +

      Download Pd, perhaps from http://msp.ucsd.edu/software.html , @@ -266,7 +269,7 @@

      Testing audio and MIDI.

      Next try audio. We want to know whether audio output works, whether audio input works, and whether they work simultaneously. First run "aumix" (or -any newer audio mixer app) to +any newer audio mixer app) to check audio input and output gains and learn which input (mic; line; etc.) is "recording". Then test audio output by running @@ -301,7 +304,7 @@

      Audio hardware in Linux

      information on Linux audio.

      -There are two widely-used driver sets, called "OSS" and "ALSA". ALSA is +There are two widely-used driver sets, called "OSS" and "ALSA". ALSA is included in the standard Linux kernel since 2.4 or so. However, for some audio cards you can find newer versions than are included in the kernel releases. You can get ALSA from @@ -335,7 +338,7 @@

      RME 9652 (Hammerfall)
      the "9632." DO NOT CONFUSE THE 9652/9632 WITH OTHER RME BOARDS WHICH MIGHT NOT WORK WITH PD. -

      The easiest way to use +

      The easiest way to use Hammerfall boards in Pd is via ALSA and jack; but you can use ALSA alone:

           pd -alsa -channels 26
      @@ -393,9 +396,9 @@ 

      3.4. Installing Pd in macOS

      To install on macOS from source:

      -

      -Whether you've downloaded the source or the "package" you can -always compile Pd for yourself, whether to make your own improvements, or +

      +Whether you've downloaded the source or the "package" you can +always compile Pd for yourself, whether to make your own improvements, or possibly so that you can get the newest version before it shows up compiled for macOS. @@ -414,7 +417,7 @@

      To install on macOS from source:

      Then type ~/pd-0.47-1/bin/pd to a shell and enjoy!

      Detailed build instructions can be found in the INSTALL.txt included with -the Pd source distribution. +the Pd source distribution.

      If you wish you can put a line such as, @@ -447,13 +450,13 @@

      3.6. Preferences and startup options

      on the "startup" dialog and some of them, too cranky to put in a GUI, must be typed as command line arguments . -

      In addition to the Audio and MIDI settings (see +

      In addition to the Audio and MIDI settings (see Audio and MIDI ), you can customize font size (from the -"edit" menu), directories to search for files (see +"edit" menu), directories to search for files (see How Pd searches for files ), and additional startup parameters described below. -

      All of these settings may be saved automatically between Pd sessions. +

      All of these settings may be saved automatically between Pd sessions. It is also possible to specify settings directly via the command line . (A third mechanism, using configuration files, is deprecated and isn't described here.) The Pd command line is described in the next @@ -514,7 +517,7 @@

      Command line arguments
      audio configuration flags: -r <n> -- specify sample rate -audioindev ... -- sound in device list; e.g., "2,1" for second and first --audiooutdev ... -- sound out device list, same as above +-audiooutdev ... -- sound out device list, same as above -audiodev ... -- specify both -audioindev and -audiooutdev together -inchannels ... -- number of audio in channels (by device, like "2" or "16,8") -outchannels ... -- number of audio out channels (by device) @@ -524,7 +527,7 @@
      Command line arguments
      -sleepgrain <n> -- specify number of milliseconds to sleep when idle -nodac -- suppress audio output -noadc -- suppress audio input --noaudio -- suppress audio input and output (-nosound is synonym) +-noaudio -- suppress audio input and output (-nosound is synonym) -listdev -- list audio and MIDI devices (linux specific audio:) @@ -569,7 +572,7 @@
      Command line arguments
      -nrt -- don't use real-time priority -nosleep -- never relinquish CPU (only for multiprocessors!) -
      +

      Here are some details on some of the audio, MIDI, and scheduler options (but see also the next section on file management.) @@ -578,7 +581,7 @@

      multiple devices.

      You can specify multiple MIDI input and output devices. For example, "pd -midiindev 3 -midioutdev 4,2" asks for the third MIDI input device and the -fourth and second MIDI output device. +fourth and second MIDI output device.

      Audio device selection is similar, except that you can also specify channels by device: "-audioindev 1,3 -inchannels 2,8" will try to open device 1 @@ -602,7 +605,7 @@

      audio buffer size and block size

      and/or control inputs (MIDI, GUI) and the audio coming out.

      You can also specify the audio block size in sample frames. This is 64 by -default (except for MMIO for which it's 256), and may be 64, 128, or 256. +default (except for MMIO for which it's 256), and may be 64, 128, or 256.

      MIDI and sleepgrain

      @@ -617,14 +620,14 @@

      MIDI and sleepgrain

      periods of computation. This is normally the audio buffer divided by 4, but no less than 0.1 and no more than 5. On most OSes, ingoing and outgoing MIDI is quantized to this value, so if you care about MIDI timing, reduce this to 1 -or less. +or less.

      3.7. How Pd searches for files

      Pd has a search path feature; you specify the path on the command line using the "-path" option. Paths may contain any number of files. If you specify several files in a single "-path" option they're separated by colons -in Unix or semicolons in Windows. +in Unix or semicolons in Windows.

      You can see and edit the path while Pd is running using the "path..." item in the "File" menu: @@ -666,8 +669,8 @@

      3.7. How Pd searches for files

      specify a filename on the command line (as in "pd -path c:\pdlib") the file separator should agree with the operating system.
      -

      A filename specified in a patch with any "/" characters in it (such as -"../sounds/sample1.wav") causes Pd to to look both in the path and relative +

      A filename specified in a patch with any "/" characters in it (such as +"../sounds/sample1.wav") causes Pd to to look both in the path and relative to the directory containing the patch. You may also invoke externs that way.

      As of version 0.35, there may be spaces in the path to Pd itself; also, @@ -676,5 +679,3 @@

      3.7. How Pd searches for files

      - - diff --git a/doc/1.manual/x4.htm b/doc/1.manual/x4.htm index a10c820911..10dffa6e9e 100644 --- a/doc/1.manual/x4.htm +++ b/doc/1.manual/x4.htm @@ -2,6 +2,9 @@ + + + Pd Documentation 4 @@ -10,13 +13,121 @@ -

      Pd Documentation chapter 4: writing Pd objects in C

      +

      Pd Documentation chapter 4: externals

      back to table of contents

      + +

      4. External Objects & Libraries

      + +

      4.1. What are: Vanilla Objects, Internals & Externals?

      + +

      Basically, internals are the objects that come as part of the Pd Vanilla (the main binary distribution of Pure Data, provided by Miller Puckette : http://msp.ucsd.edu/software.html ) +, whereas external objects are not! Besides internals, the Pd Vanilla +distribution also comes with a few "extra" objects that are not part of its +binary. Therefore, Vanilla objects (the built-in objects in Pd) include internals +and externals. + +

      Nonetheless, "externals" most commonly refer to objects that do not +available in the Pd Vanilla distribution, meaning that usually you have to +download these objects and install them properly so they can be loaded into +Pd patches. + + +

      + +

      Figure 4.1 - Excerpt from list of Vanilla objects (help-intro.pd file) + +

      To get a full list of all objects in Pd Vanilla, go to the Help menu and +then select List of Objects, or alternatively right click on an empty spot of a +patch's window and select "help" - this loads the help-intro.pd file. + +

      +

      Figure 4.2 - Extra objects from Pd Vanilla + +

      The extra objects, which reside in a folder named "extra" inside the Pd +application, are presented at the very end of the "help-intro.pd". They can +also be viewed in the Help Browser menu (Help => Browser). See Figure 4.2 +above, which shows how the browser looks in a fresh install of Pd and lists +the objects in the extra folder. + +

      4.1.2. What are the Types of External Objects?

      + +

      An object in Pd can be either a patch - meaning a Pd file (a.k.a +abstraction) - or a compiled binary (note that a binary can contain only one or +several external objects, as discussed further on). More details about these +two possible types below. + +

      4.1.2.1. Compiled objects:

      + +

      These are Pd objects compiled to binaries from programming code (like +in C or C++). They have to be compiled for your operating system, which +means the binaries have different extensions according to each platform. For +instance: + + +

        +
      • .pd_darwin: macOS binary extension +
      • .dll: Windows binary extension +
      • .pd_linux: Linux binary extension + +
      + +

      4.1.2.2. Abstractions:

      + +

      You can save pd patches and make them behave like objects by +loading them into your patches, these are usually called "Abstractions". Note +that some of the "extra" objects from Vanilla that you can see in Figure 4.2 are +Pd files/patches. Note that abstractions, like any other Pd file, may contain +any kind of objects (internals, compiled externals and even other +abstractions). + + + +

      4.1.3. What are External Libraries?

      + +

      In practical terms, an external library is a collection of external objects of any kind (abstractions or compiled objects). But when it comes to compiled objects, a library can provide several objects as a single binary pack or as a set of +separate binaries (where each object has its own binary). + +

      The "classic" library is a single binary pack (with two or more externals), but splitting into separate binaries became very common. A single external binary (not part of any set of objects) is still technically a library with just one object, and a library with separate binaries could be considered as a set of libraries. But again, in practical terms, the more general concept of a library is that it is just a set of objects. What’s important to note is that there are significant differences for loading externals wether if they are a single binary pack or a set of separate binaries (as we’ll see in this tutorial later on). + +

      4.1.4. What are the types of External Libraries?

      + +

      Libraries can come in all sorts of ways; as only a collection of +abstractions (like "list-abs"), only compiled objects, or both. It can even mix +compiled externals both as a set of separate binaries and a single binary +pack. Basically, any combination is possible for a set of external. + +

      One example that combines all external options is cyclone 0.3, which +provides most of its objects as a set of separate binaries, but also includes +a small collection of 12 objects as a single binary pack plus a few +abstractions. + +

      Wrapping up Part 1)

      +
        + +
      • Internal objects: Objects that are part of Pd Vanilla's binary. +
      • External objects: Objects that are NOT part of Pd Vanilla's binary. +
      • Vanilla objects: Built-in objects in the Pd Vanilla distribution +(including internals and a small collection of externals - the "extra" objects). +
      • Types of external objects: Compiled binaries or Abstractions. +
      • External Library: Collection of external objects in any form, be it a +single binary pack containing several objects, a set of separate binaries / +abstractions or any combination of them. +
      +
      +
      +
      + + + + + +

      4.2. Writing Pd objects in C

      +

      You can write your own objects that you and others can use in their Pd applications. You can write them in C or (if you're smart and brave) in C++ or FORTRAN. @@ -46,6 +157,249 @@

      Pd Documentation chapter 4: writing Pd objects in C

      IOhannes zmölnig has written an excellent guide to writing externs at http://pdstatic.iem.at/externals-HOWTO/ . + + + +


      + +

      4.3. Installing External Objects and Libraries

      + +

      Installing externals in Pd is quite simple, all you need to do is download +your externals from somewhere, such as from Pd Vanilla directly, and include +them in a proper folder. + +

      4.3.1. Where to include the externals?

      + +

      You can have externals basically anywhere in your computer, but Pd +must know where to look for them. Since Pd 0.48, Pd can automatically +create a documents directory for patches and external libraries. At launching +Pd for the first time, it asks you to create this folder, which is the current best +practice. This automatically includes the folder in the search paths (under +Preferences => Path). + +

      + +

      Figure 4.3 - Preferences => Path window + +

      If you accept that Pd creates that folder for you, you should have +something like this in a fresh install of Pd under Preferences => Path. This is +for macOS, where the "Pd" folder is created under ~/Documents, and inside it +we have a folder for externals. Even if you did not create this folder, here is +where you can create it by clicking the "Reset" button under "Pd Documents +Directory". + +

      Pd can actually search for externals anywhere, they just need to be +included in the search paths. Nontheless, Pd also has other places it can +search for externals. This can be the same folder that your patch is saved on +(the Relative Path) or the Standard Paths, which are: +

        +
      • A) Application-specific: The "extra" folder inside a particular Pure Data +application. +
      • B) User-specific: A system folder for a specific user in the machine. +
      • C) Global: A system folder for all users on the machine. +
      + +

      The Standard Paths are not listed in Preferences => Path, as those +only include paths added by the user. And again, the current best practice is +to have external folders inside an external folder added to Pd search paths +(as ~/Documents/Pd/externals). Earlier practices made use of these standard +paths above, but note that the user-specific and global standard paths are not +automatically created by Pd. + +

      This structure is still kept as an old heritage of Pd and is documented +here because of that. It may also serve some edge cases. The Global folder +affects all Pure Data Applications for all users. The User-specific folder affects +all Pure Data Applications for that user. And since you can have different +versions of Pd installed in your system, the Application-specific folder affects +only that particular Pd Application. This can be not only an older and a newer +version of Pd, but also both 32-bit and 64-bit versions. For reference, here's +the list of the Standard Paths for all operating systems: + +

      A) macOS: +

        +
      • Application-specific: /$PdPath/Contents/Resources/extra - this is +inside the Pd Application (like Pd-0.49-1 in ~/Applications); right click it and +choose "Show Package Contents", then navigate to "Resources/extra". +
      • User-specific: ~/Library/Pd (/Users/user_name/Library/Pd) +
      • Global: /Library/Pd + +
      + +

      B) Windows: +

        +
      • Application-specific: %ProgramFiles(x86)%\Pd\extra (for 64-bit +OS and 32-bit Pd) or %ProgramFiles%\Pd\extra; this is +inside the Pd Application (usually in C:\Program Files). +This folder needs to be set to writeable. +
      • User-specific: %AppData%\Pd +(usually in C:\Users\user_name\AppData\Roaming\Pd). +
      • Global: %CommonProgramFiles%\Pd +(usually in C:\Program Files\Common Files\Pd). + +
      + +C) GNU/Linux: + +
        + +
      • Application-specific: /usr/lib/pd/extra if installed via a package +manager (apt-get) or /usr/local/lib/pd/extra if compiled by yourself. +
      • User-specific: ~/.local/lib/pd/extra (preferred since version Pd-0.47-1) +or ~/pd-externals (deprecated but still usable). +
      • Global: /usr/local/lib/pd-externals. +
      + +

      4.3.2. How to Download Externals from Pd Vanilla?

      + +

      Since version 0.47-0, Pd Vanilla has its own external manager! This is a +built in .tcl plug-in named "deken" that +has been incorporated into the Pd Vanilla distribution to manage the +download of external libraries and externals. + +

      So you can just open Pd, click on the "Help" menu and select Help > +Find externals. Then you can just type the library's name you want and hit +enter or click "search". You can also look for an external name and the library +that contains it might be shown. All available versions of the library specific for +your operating system will be shown to you. See figure below. + +

      +

      Figure 4.4 - Searching for External Libraries from Pd Vanilla + +

      When you click on the version you want, by default, Pd asks if you want +to download it to the external folder set under Preferences => Path. If you say +no, you can specify somewhere else to download it to. If you say yes, there is +where it gets downloaded to. +
      +
      +


      +

      4.4. Loading Externals

      + +

      The current best practice is to use the [declare] object, but there are +alternatives. If the library is a single binary pack, it needs to be loaded so you +can create externals. This is done either via the [declare] object or manually +via Preferences => Startup. + +

      Now, if the external library only contains abstractions or objects +compiled as a set of separate binaries, Pd just needs to know its. Again, this +can be done with [declare] or manually (via Preferences => Path). + +

      4.4.1. Using the [declare] object:

      + +

      The [declare] object from Pd Vanilla behaves quite similarly to adding +search paths to the user added paths (under Preferences => Path) or adding +libraries (under Preferences => Startup). The difference is that it'll only work +for the patch containing the [declare]. This means that when you add +manually via preferences, it installs it permanently and for any patch. + +

      4.4.1.1. [declare -path]:

      + +

      Let's take for an example the ELSE library (http://github.com/porres/pd-else) . This library contains 2 +separate binaries and abstractions, so Pd only needs to know its location +path. So we can do something like [declare -path else] and Pd will look for a +folder named else to add it to the search path. + +

      But where does Pd look the else folder? In the locations it knows where +to look (the Relative Path, the Standard Paths or the User Added Paths). So +let's say you downloaded the else library folder into "~/Documents/Pd/ +externals", which is the current best practice. Pd will know to look for it there +and will find it! + +

      4.4.1.2. [declare -lib]:

      + +

      This is needed for the classic Pd library format, which is a single binary +pack with many externals. One such example is the "zexy" library. So once +you have downloaded it, you can use [declare -lib zexy]. In the same way, Pd +will search for the zexy binary in locations it knows where to look (as in "~/ +Documents/Pd/externals"). + +

      Does this mean you need to also include the zexy folder path, so Pd +knows to search for the zexy binary inside? Not really, because there's a trick +here. If Pd finda a 'zexy' location, it knows it can look inside it for the 'zexy' +binary, so it will succeed in finding it just with that! + +

      4.4.2. Using Path and Startup:

      + +

      This is basically the same as using [declare] but it will permanently work +every time Pd starts and for any patch. + +

      4.4.2.1. User added Path:

      + +

      You can add User Added Paths in Preferences => Path. We've seen +that even if you have a folder into "~/Documents/Pd/externals" you still need +to tell Pd to look for it. You can do this manually added to Pd's search paths +so it can be automatically by clicking "New". + +

      Another possibility is that "Deken"offers a preference tabs where you +can click once on "Should newly installed libraries be added to Pd's search +Path?" to prompt you if you want to add a downloaded library to the user +added search paths after you download it. By default, it never asks you to do +it. You can also click twice so it always add anything you download from +deken to the search path, which is not quite recomended as sometimes you'll +download a single binary pack, where adding it to the search path doesn't +really help. + +

      4.4.2.2. Startup:

      + +

      In "Preferences => Startup", you load a window that says "Pd libraries +to load on startup". This is where you can manually and permanently load +single binary pack libraries. As we've seen with 'zexy', it's common that the +name of the binary is the same as the library's, so you don't need to worry +about setting the path. Another example is the 'cyclone' library, + +

      +

      Figure 4.5 - Loading the cyclone and zexy binaries/libraries in "Startup" + +

      As previously mentioned, cyclone 0.3 is a special case that includes +objects as abstractions, as a set of separate binaries but also has a set a +single binary pack that loads objects with non alphanumeric names, which +need to be loaded as a single binary pack to avoid issues. One particularity of +cylone is that loading its binary will also force Pd to add its path to the search +paths, so you don't need to bother adding it to the path as well so you can +load its abstractions or separate binaries. + +

      It depends on the developer, but it is common and a good practice that +when you load a library, Pd's terminal window will print something to tell us +that the libraries were loaded successfully. Here's a screenshot of the result +of loading cyclone and zexy via the startup (same happens if you load them +via [declare], clearly). + +

      +

      Figure 4.6 - Pd's terminal window after loading cyclone and zexy + +

      4.4.3. Slash declarations:

      + +

      You can also use slash declarations to search for libraries in +paths that are relative to these. For instance, let's say you downloaded the +ELSE library into ~/Documents/Pd/externals, or any other folder Pd will +eventually search for. Instead of using [declare -path] or adding the ELSE +folder to the user added paths, you can just prepend "else/" before an object +name that Pd will try to find this object in a folder called else in one of its +search paths! Here's an example: + +

      + + + +

      Note that if you do that, you can still add the 'else' folder to Pd's search +path or use [declare -path else], but it will just be redundanct. Now, what are +the diffences of this method over using [declare] or adding the path to the +user added paths? The only use case is if you have two externals with the +same name from two different libraries in the same patch. With this method +you can specify which one is which! + +

      A library name prefix may also be pertinent in the context of single +binary packs. The cyclone library has a set of 12 objects with non +alphanumeric names, such as [>~]. But it uses an internal trick of adding a +class creator, so creating the object as [cyclone/>~] also works. But note that +the library still needs to be loaded anyway (via startup or [declare]). + +

      There's also the case where you can find a single binary pack that has +a different name than that of the library. One example is timbreID, which has +a timbreIDLib as the binary file. In this case you need to specify the timbreID +folder with a slash declaration as in "timbreID/timbreiIDLib" in Startup. This +also works in declare as in [declare -lib timbreID/timbreiIDLib]. + + diff --git a/doc/1.manual/x5.htm b/doc/1.manual/x5.htm index 1e96e69349..eadcf200ad 100644 --- a/doc/1.manual/x5.htm +++ b/doc/1.manual/x5.htm @@ -2,11 +2,14 @@ + + + Pd Documentation 5 - +

      Pd Documentation chapter 5. current status

      @@ -14,12 +17,43 @@

      Pd Documentation chapter 5. current status

      back to table of contents

      -

      +

      This section tracks changes in Pd's current implementation.

      5.1. release notes

      +

      ------------------ 0.50-1 ------------------------------ + +

      improved handling of tilde chartacters for Portugues and Spanish keyboard +maps + +

      handling spaces in path to HTML file open message to pdcontrol object + +

      ------------------ 0.50-0 ------------------------------ + +

      new pdcontrol object allows getting patch's owning directory and calling +arguments, and opening files in web browser under patch control (useful in help +files). + +

      new nonlinear low-pass filter, slop~, for use in designing envelope +followers and dynamics processors. + +

      attempted to fix limitations on incoming MIDI and network packets. +Things seem to be improved but the improvements aren't exhaustively tested yet. + +

      improved HTML style in documentation and more info on writing externs. + +

      updates to Iohannes's smart patching features + +

      sort method for text object. Also text searching can deal with restricted +range of lines (so that, for instance, you can iteratively get all the matches, +not just the first one). + +

      internal changes to improve scheduler behavior and memory management. + +

      "zoom" feature updates to handle data structs better. +

      ------------------ 0.49-0 ------------------------------

      "Undo" and "Redo" menu items now may be repeated to undo/redo @@ -27,7 +61,7 @@

      5.1. release notes

      Bukvic and ported to Pd vanilla by Johannes Zmoelnig.

      Various editing shortcuts, also from Johannes. - +

      "Declare" -path & -lib flags now search user search paths.

      Search path handling made easier and more consistent between user @@ -382,7 +416,7 @@

      5.1. release notes

      ------------------ 0.44-2 ---------------------------

      Fix underflow problem for Raspberry Pi (no effect on other platforms) - +

      ------------------ 0.44-1 ---------------------------

      Fixed default API settings to prefer MMIO over ASIO for MS Windows and @@ -484,7 +518,7 @@

      5.1. release notes

      The 'struct' object can now be used to catch a small but growing variety of events (mouse clicks on data, selection/deselection). -

      The 'tabread4~' object was fixed to allow message-time onset into the table. +

      The 'tabread4~' object was fixed to allow message-time onset into the table. This makes it possible (at last) to use tabread4~ effectively with large (> 1 second) samples. New help files 3.audio.examples/B15 and B16 show how to use it. It's not pretty but it's at least possible. @@ -536,7 +570,7 @@

      5.1. release notes

      Binbufs fixed to handle arbitrary length messages. (This fixed a problem reloading data structures with huge arrays). -

      various fixes to +

      various fixes to

      ------------------ 0.41-3,4 ---------------------------

      2 fixes for PC: no bonk~, and the audio device selection @@ -573,7 +607,7 @@

      5.1. release notes

      fixed crash bug closing patches with open GOPs. -

      changed selection strategy so that, right after duplicating a collection +

      changed selection strategy so that, right after duplicating a collection of objects, clicking tends to select an already-selected object.

      the cursor changes slightly more appropriately when switching between edit @@ -623,14 +657,14 @@

      5.1. release notes

      "$1-$2.$3". Meanwhile, naming subpatches as in "pd $1-foo" now seems to work correctly. -

      The switch~ object takes a "bang" message to compute one block of DSP on -demand. Also, block sizes are no longer required to be powers of two +

      The switch~ object takes a "bang" message to compute one block of DSP on +demand. Also, block sizes are no longer required to be powers of two (although reblocking only works between powers of two.)

      Externs may have characters in their names that aren't part of valid C variable names (i.e., outsize the range a-z,A-Z,0-9, _). -

      Openpanel and savepanel take an argument to set the initial directory to +

      Openpanel and savepanel take an argument to set the initial directory to search.

      Support for large (>2G) soundfiles, in operating systems that offer it. @@ -826,7 +860,7 @@

      5.1. release notes

      fixed a bug in soundfile reading (soundfiles now default to wav better.) -

      fixed gfx update problem in hradio and vradio +

      fixed gfx update problem in hradio and vradio

      minor changes to built-in Max import feature (but you should still use cyclone's instead.) @@ -863,9 +897,9 @@

      5.1. release notes

      Pd is finally fixed so that it can open and close audio and MIDI devices on-the-fly (previously it opened them once at startup and hogged them until -Pd quit). Starting DSP causes audio devices to be opened, and +Pd quit). Starting DSP causes audio devices to be opened, and stopping it closes them. -There are dialog panels in the "Media" menu (which used to be called +There are dialog panels in the "Media" menu (which used to be called "Audio") for choosing audio and MIDI settings. The "path" also can be changed on the fly via a dialog in the "File" menu. @@ -873,7 +907,7 @@

      5.1. release notes

      the audio example, C04.control.to.signal.pd (and/or chapter 3 of Theory and Techniques of Electronic Music ). - +

      The block~/switch~ object now takes a "set" message to dynamically change block size, etc. @@ -904,7 +938,7 @@

      5.1. release notes

      distributions (debian users previously had to use a special configure script.)

      (developers) Pd now exits cleanly from its main loop instead of bailing -out. A mutex protects Pd's data so it can be accessed from other threads. +out. A mutex protects Pd's data so it can be accessed from other threads. (Thomas Grill's improvements.)

      (developers) The "savefunction" and "dialog" widget behaviors @@ -940,7 +974,7 @@

      5.1. release notes

      "Help" files renamed "help-xxx.pd", so that help files are now possible for abstractions. The "help path" feature from CVS (I forgot who contributed that) is also included but should now not be needed: Pd remembers where it got -externs and abstractions and looks back in the same directory for a help file. +externs and abstractions and looks back in the same directory for a help file. See the way "extras" is organized.

      Pd refuses to connect signal outlets to non-signal inlets. @@ -981,7 +1015,7 @@

      5.1. release notes

      "Classic" number boxes now can have labels and send/receive signals, which work in the same way as the IEMGUI controls do. I think "$1" style label/send/receive names work too. I fixed a related bug -in the IEM code (typing at boxes sometimes crashed Pd). +in the IEM code (typing at boxes sometimes crashed Pd).

      "vdial" and "hdial" were renamed "vradio" and "hradio", and fixed to output numbers, not lists, like the other GUIs. The old ones are still around @@ -990,7 +1024,7 @@

      5.1. release notes

      "Make install" should now actually make Pd before trying to install it.

      "expr" is updated to Shahrokh's 0.4test3 version (which I modified somewhat -to get it to compile.) +to get it to compile.)

      The problem of CPU usage skyrocketing on underflows in P4s should be fixed. @@ -1013,7 +1047,7 @@

      5.1. release notes

      The soundfile reading routine (used in readsf~ and soundfiler) is much better at opening wav files with different header sizes and odd chunks. -You can now read floating-point "wav" files -- although you can't write them +You can now read floating-point "wav" files -- although you can't write them yet.

      Templates and data structures are extensively reworked. A "struct" @@ -1049,7 +1083,7 @@

      5.1. release notes

      In Linux, "help" now can invoke either mozilla or netscape to start up the HTML documentation. This doesn't work in Windows or Mac land yet. -

      In Linux, the "-32bit" flag was added, which you must now use if +

      In Linux, the "-32bit" flag was added, which you must now use if running Guenter's OSS RME Hammerfall driver. (This was necessary because OSS went and used the same "bit" for a different purpose, so that Pd tried to open some other cards in 32bit mode inappropriately.) @@ -1285,7 +1319,7 @@

      5.1. release notes

      if Pd is run "-verbose". -

      +

      ------------------ 0.32 PATCH 2, 3, 4 -------------------

      Hassled more with font size differences between NT and Linux, and updated @@ -1302,7 +1336,7 @@

      5.1. release notes

      bug fix in which RME driver always thought sample rate was 44100. -

      +

      ------------------ 0.32 PATCH 1 -------------------

      bug fixes (bugs flagged by mik): vcf~ help window crashed; writesf~ @@ -1316,10 +1350,10 @@

      5.1. release notes

      clicks drag values around. The cursor changes to show you what will happen if you click. -

      +

      ------------------- 0.32 ----------------- -

      New objects: +

      New objects:

      midiin, sysexin, midiout. (I don't think MIDI sysex is working in Windows yet though.) @@ -1330,7 +1364,7 @@

      5.1. release notes

      writesf as in Jmax. -

      New startup flags: +

      New startup flags:

      -sleepgrain: if you aren't using audio I/O, this can reduce time jitter in MIDI I/O. Otherwise, MIDI I/O jitter is limited by the audio buffer size. @@ -1363,7 +1397,7 @@

      5.1. release notes

      Pd now knows to de-iconify windows if you "vis" them from the parent. -

      in general: +

      in general:

      In Linux the treatment of MIDI input is now much more efficient. Also, bugs were fixed in notein and (for SGI) bendin. @@ -1398,7 +1432,7 @@

      5.1. release notes

      When you hit "copy" with nothing selected, the copy buffer used to be cleared. This is fixed to do nothing. -

      +

      ------------------- 0.31 -----------------

      ALSA support in Linux has been completely overhauled. It now works with @@ -1446,7 +1480,7 @@

      5.1. release notes

      The FFT examples have been reworked and the "pique" and "shift" objects are moved to "extra". -

      +

      ------------------- 0.30 -----------------

      in Linux, you can get Pd to promote itself to "real time" priority. A "watchdog" process protects you from having Pd lock your machine up. You @@ -1479,7 +1513,7 @@

      5.1. release notes

      a bug was fixed in expanding symbols such as "$1-foo". -

      +

      ------------------- 0.29 -----------------

      readsf~ - a MAX/FTS style soundfile player, which reads multichannel @@ -1507,7 +1541,7 @@

      5.1. release notes

      Signal objects now automatically convert scalars to vectors, so that you can just run a number box into a signal input. One caveat is that the binops "+~", "-~", "*~", "/~", "max~", "min~" run slightly faster if you give them -an argument to tell them that their right inlet will be scalar; so the +an argument to tell them that their right inlet will be scalar; so the construction "+~ 0" is still meaningful. This will get fixed at some later date... @@ -1542,7 +1576,7 @@

      5.1. release notes

      samphold_set and tabwrite_stop methods added. There turned out to be no help window for samphold~ so one was supplied. -

      +

      ------------------- 0.28 -----------------

      Version 0.28 has a primitive in-box text editor... about time! @@ -1570,14 +1604,14 @@

      5.1. release notes

      BUG FIX: the "read16" message to tables was broken on NT and is now fixed. -

      BUG FIX: In Linux, starting Pd up sometimes changed the audio mixer +

      BUG FIX: In Linux, starting Pd up sometimes changed the audio mixer setting.

      BUG FIX: sending "floats" to inlets expecting lists now works correctly.

      BUG FIX: "route" on symbols now deals better with symbols, floats and lists. -

      +

      ------------------- 0.27 -----------------

      The main new feature is the "find" menu stuff. You can search for boxes @@ -1588,7 +1622,7 @@

      5.1. release notes

      New objects written: change, max, max~, min, min~, and swap.

      -I looked in 0.INTRO.txt in 5.reference, and found that the objects +I looked in 0.INTRO.txt in 5.reference, and found that the objects bag, cputime, realtime, pipe, symbol, poly, and bang were missing.

      @@ -1605,7 +1639,7 @@

      5.1. release notes

      "resync" events. I don't know what causes this but I added a "-noresync" option which simply never resyncs at all. -

      +

      ------------------- 0.26 -----------------

      phasor~ and osc~ can be configured to take floating point messages to set @@ -1679,7 +1713,7 @@

      5.1. release notes

      Alt-clicking a table gives you a dialog to set its x and y range and pixel size. -

      +

      ------------------- 0.25 -----------------

      Lots of minor, under-the-hood improvements and bug fixes... @@ -1704,7 +1738,7 @@

      5.1. release notes

      The SGI version contains an n32 binary (look at the "bin" directory). -

      +

      ------------------- 0.24 ---------------

      new objects: @@ -1723,7 +1757,7 @@

      5.1. release notes


      - bug fix in "key" object
      - bug fix in ifft~ (thanks to Peter Lunden)
      - "print" object fixed to distinguish between lists starting with symbols and - other messages + other messages
      - polygon, curve, fpolygon, fcurve renamed to fix name clash with Gem
      - improved "new object" placement on screen
      - fixed help dialog to remember previous directory (thanks to Harry Castle) @@ -1734,7 +1768,7 @@

      5.1. release notes

      binary files. See ../2.starter/2G for an overview.

      -Guenter Geiger has contributed a Max-style "table" object which +Guenter Geiger has contributed a Max-style "table" object which creates an "array" object in a subwindow.

      @@ -1782,9 +1816,9 @@

      5.1. release notes

      inlet to set the internal phase. This is so that I can later fix all tilde objects to convert messages to signals automatically at all signal inputs. -

      +

      ------------------- 0.22 ------------------- -
      +
      bug fixes
      - parsing 1e+006 gave symbol (now float)
      - "." parsed as number, should be symbol @@ -1797,8 +1831,8 @@

      5.1. release notes


      - ftom range to 1500
      - bug in pack, unpack
      - windows restore bigger than saved -
      -
      +
      +
      Nt-specific bug fixes:
      - getsockopt for netreceive fails. Just omitted it for NT. @@ -1808,7 +1842,7 @@

      5.1. release notes


      - deal with bell sound
      - turn on optimization
      - looked for audio timeout bug but couldn't find it. -

      +

      ------------------- 0.21 ------------------- @@ -1844,7 +1878,7 @@

      5.1. release notes


      canvas_makefilename() (used, e.g., by array_read and write)
      "stuff" directory with examples of real Pd applications. -

      +

      ------------------- 0.20 -------------------

      @@ -1854,7 +1888,7 @@

      5.1. release notes

      Also, the array_write routine was fixed. -

      +

      ------------------- 0.19 -------------------
      @@ -1922,7 +1956,7 @@

      5.1. release notes

      MATH: + - * / == != > < >= <= & && | || % mod div sin cos tan atan atan2 sqrt log exp abs -mtof ftom powtodb rmstodb dbtopow dbtorms +mtof ftom powtodb rmstodb dbtopow dbtorms

      MIDI: @@ -1935,7 +1969,7 @@

      5.1. release notes

      lop~ bp~ biquad~ samphold~ clip~ rsqrt~ sqrt~ wrap~ print~ scope~ tabwrite~ tabread4~ send~ receive~ catch~ throw~ delwrite~ delread~ vd~ -

      +

      ------------------- 0.18 -------------------
      @@ -1949,14 +1983,14 @@

      5.1. release notes

      Got rid of "dll" error printout when loading abstractions -

      +

      ------------------- 0.12 - 0.17 -------------------
      got Pd running under NT, although driver problems remain. Gem is also distributed for both platforms. -

      +

      ------------------- 0.11 -------------------
      @@ -1985,13 +2019,13 @@

      5.1. release notes

      "spigot" replaces "gate" but has the inputs reversed. -

      +

      ------------------- 0.10 -------------------
      Many bug fixes. This was the first pre-release to be put on the FTP site. -

      +

      ------------------- 0.09 -------------------
      set up the "Help" menu @@ -2000,7 +2034,7 @@

      5.1. release notes


      Comments from the Put menu say "comment" (they were invisible before)
      The scheduler deals better when sound I/O malfunctions -

      +

      ------------------- 0.08 -------------------
      metro bug @@ -2009,13 +2043,13 @@

      5.1. release notes


      text box wraparound at 80 chars.
      fixed boxes to reconnect on retype -

      +

      ------------------- 0.07 -------------------
      - made an adc~ object -

      +

      ------------------- 0.06 -------------------
      @@ -2125,7 +2159,7 @@

      5.3. differences from Max/MSP

      (see Section 2.7. abstractions)

      In Pd, to make current all instantiations of the -abstraction, either delete and recreate them or close and open the patch; +abstraction, either delete and recreate them or close and open the patch; this is done automatically in Max/MSP.

      In Pd, if you select "save" while in a subpatch, the parent is saved. In @@ -2159,11 +2193,11 @@

      5.3. differences from Max/MSP

      In Pd there's no "preset" object (I now think it's basically a bad idea) and you have to use explicit sends and receives to restore values to number -boxes. Then just make a "message" box to re-send the values you want. +boxes. Then just make a "message" box to re-send the values you want.

      In Macintosh land, instead of getting tabosc4~ and arrays, you get cycle~ and buffer~. The only gotcha is that you probably can't draw in buffer~ with -the mouse as you can with arrays, but at least it's possible to +the mouse as you can with arrays, but at least it's possible to make a patch that copies a "table" into a "buffer~".

      The "bpatcher" feature in Max has a correlate, "graph on parent" subpatches, diff --git a/doc/4.data.structures/14.partialtracer.pd b/doc/4.data.structures/14.partialtracer.pd index 77b41c5e9a..7af3c9f859 100644 --- a/doc/4.data.structures/14.partialtracer.pd +++ b/doc/4.data.structures/14.partialtracer.pd @@ -3,233 +3,213 @@ ampimag float used; #N struct trace-template float x float y float voiceno array bazoo point-template; #N struct point-template float y float amp; -#N canvas 51 52 913 595 12; +#N canvas 7 94 920 608 12; #X declare -path lib; -#X floatatom 777 74 0 0 100 0 - - -; +#X floatatom 777 72 0 0 100 0 - - -; #N canvas 516 98 663 557 (subpatch) 0; #X obj 103 108 outlet; #X msg 101 80 set \$1; #X obj 103 57 r osc-amp; #X connect 1 0 0 0; #X connect 2 0 1 0; -#X restore 777 52 pd; +#X restore 777 50 pd; #X obj 777 100 s osc-amp; #X obj 121 511 pack 0 100; #X obj 122 533 line~; #X obj 121 489 dbtorms; #X obj 122 573 *~; -#X floatatom 827 245 0 0 0 0 - - -; +#X floatatom 790 232 0 0 0 0 - - -; #X msg 668 269 0; -#X floatatom 737 224 0 0 0 0 - - -; -#X floatatom 838 290 0 0 0 0 - - -; -#X floatatom 647 74 0 0 110 0 - - -; +#X floatatom 737 235 0 0 0 0 - - -; +#X floatatom 812 285 0 0 0 0 - - -; +#X floatatom 647 72 0 0 110 0 - - -; #N canvas 516 98 663 555 (subpatch) 0; #X obj 103 108 outlet; #X msg 101 80 set \$1; #X obj 103 57 r grain-amp; #X connect 1 0 0 0; #X connect 2 0 1 0; -#X restore 647 51 pd; +#X restore 647 49 pd; #N canvas 168 244 589 236 peak-template 0; #X obj 81 52 filledpolygon 3 3 3 0 0 0 amp 0 0; #X obj 74 10 struct peak-template float x float y float amp float ampreal float ampimag float used; -#X restore 417 525 pd peak-template; +#X restore 418 515 pd peak-template; #N canvas 0 50 600 386 peak-list 0; -#X scalar peak-template 15.9467 330 -253.674 -0.0844134 0.146417 0 +#X scalar peak-template 15.8504 330 -245.112 -0.0207472 -0.119892 0 \;; -#X scalar peak-template 8.09598 330 -245.031 -0.108977 0.0532605 0 -\;; -#X scalar peak-template 21.9063 330 -199.607 0.00667672 -0.0201446 -0 \;; -#X scalar peak-template 31.1714 330 -199.12 -0.0160738 -0.0132465 0 -\;; -#X scalar peak-template 37.8022 330 -186.266 0.0101767 -0.00762842 +#X scalar peak-template 7.98949 330 -239.826 -0.0778046 -0.0617583 0 \;; -#X scalar peak-template 45.3485 330 -173.243 0.00456202 0.00622276 +#X scalar peak-template 21.616 330 -193.937 -0.0165937 -0.00401233 0 \;; -#X scalar peak-template 220.731 330 -164.961 0.00271995 0.00491236 +#X scalar peak-template 27.6496 330 -186.434 0.002352 0.0125829 0 \; +; +#X scalar peak-template 29.353 330 -188.837 0.00232959 0.0138426 0 +\;; +#X scalar peak-template 36.7648 330 -168.953 0.00650031 0.0007604 0 +\;; +#X scalar peak-template 44.6982 330 -161.828 -0.0049781 -8.54236e-05 0 \;; -#X scalar peak-template 55.8179 330 -162.658 -0.00364487 -0.00362429 +#X scalar peak-template 219.473 330 -147.151 0.00253815 -0.00126231 0 \;; -#X scalar peak-template 214.238 330 -156.636 0.00401103 0.000744068 +#X scalar peak-template 56.6795 330 -141.862 0.00152683 0.00173882 0 \;; -#X scalar peak-template 230.388 330 -142.193 -0.00175354 -0.0015548 +#X scalar peak-template 217.17 330 -133.351 0.00110252 -0.00125331 0 \;; -#X scalar peak-template 205.698 330 -136.685 -0.000451969 -0.00184241 +#X scalar peak-template 213.997 330 -128.333 -0.00122024 -0.000637785 0 \;; -#X scalar peak-template 236.853 330 -132.195 -0.00080052 -0.00138166 +#X scalar peak-template 230.992 330 -127.034 -0.00100576 -0.000839202 0 \;; -#X scalar peak-template 70.1927 330 -129.01 0.000948858 -0.00104714 +#X scalar peak-template 206.082 330 -109.838 0.000126197 0.000665197 0 \;; -#X scalar peak-template 60.6268 330 -128.771 -0.000107757 -0.00139601 +#X scalar peak-template 229.329 330 -117.993 -0.000513533 -0.000770419 0 \;; -#X scalar peak-template 199.238 330 -125.184 -5.52664e-05 -0.00121886 +#X scalar peak-template 101.451 330 -107.543 -0.000123912 0.00060747 0 \;; -#X scalar peak-template 102.316 330 -124.61 -0.000913632 -0.000768002 +#X scalar peak-template 242.713 330 -99.1109 -6.14282e-05 0.000444362 0 \;; -#X scalar peak-template 244.64 330 -122.316 0.000568954 -0.000933158 +#X scalar peak-template 233.635 330 -104.504 -0.000136849 -0.000534507 0 \;; -#X scalar peak-template 183.608 330 -113.564 -0.000686299 0.000373102 +#X scalar peak-template 82.2527 330 -98.3187 -0.000186712 0.000393063 0 \;; -#X scalar peak-template 190.466 330 -112.684 -0.00070255 0.000277037 +#X scalar peak-template 70.4688 330 -109.867 0.000667392 -0.000118439 0 \;; -#X scalar peak-template 84.4484 330 -116.207 0.000855315 -0.000125832 +#X scalar peak-template 199.182 330 -94.8701 -0.000184374 -0.000333661 0 \;; -#X scalar peak-template 110.15 330 -115.035 -0.000124898 -0.000817018 +#X scalar peak-template 764.434 330 -102.949 -0.00046942 -0.000223205 0 \;; -#X scalar peak-template 174.384 330 -107.641 0.000516576 0.00034702 +#X scalar peak-template 64.1887 330 -95.4566 0.000189989 0.000340469 0 \;; -#X scalar peak-template 80.1102 330 -113.14 0.000618533 0.000456135 +#X scalar peak-template 71.0596 330 -95.7678 -0.000164401 -0.000358694 0 \;; -#X scalar peak-template 739.645 330 -113.263 -0.000612479 0.000470234 +#X scalar peak-template 138.626 330 -94.8248 0.000322947 -0.000201308 0 \;; -#X scalar peak-template 141.831 330 -105.395 -0.000346356 0.000453872 +#X scalar peak-template 752.571 330 -97.5196 0.000379348 -0.000184908 0 \;; #X restore 298 457 pd peak-list; -#N canvas 405 331 745 526 trace-list 1; -#X scalar trace-template 0 0 0 \; 43.3302 66.0521 \; 44.6492 75.851 -\; 44.6956 82.9816 \; 44.3137 85.9148 \; 43.4352 86.2268 \; 43.1128 -85.6468 \; 43.0306 84.9578 \; 42.9591 84.0919 \; 42.7109 82.2432 \; -42.1735 78.3134 \; 40.6273 72.9205 \; 38.4355 66.4194 \; 36.987 66.0861 -\; 36.0526 69.5062 \; 35.3811 70.993 \; 38.3488 67.3509 \; \;; -#X scalar trace-template 0 0 1 \; 35.7851 60.3245 \; 28.7656 48.9997 -\; \;; -#X scalar trace-template 0 0 2 \; 67.1596 61.9347 \; 68.1884 69.7498 -\; 68.1342 72.6229 \; 67.7473 73.3704 \; 66.8125 73.2892 \; 66.663 -71.9773 \; 66.6789 70.454 \; 66.3016 68.1836 \; 66.3651 62.1891 \; -\;; -#X scalar trace-template 0 0 3 \; 66.5367 62.9806 \; \;; -#X scalar trace-template 0 0 4 \; 60.9143 60.0013 \; 62.0291 63.7387 -\; 63.1022 70.4535 \; 62.5499 72.8329 \; 61.8771 73.6051 \; 61.6928 -72.9177 \; 61.6889 70.965 \; 60.6265 68.0588 \; \;; -#X scalar trace-template 0 0 5 \; 60.0435 58.3026 \; 57.4756 71.1499 +#N canvas 164 315 748 508 trace-list 1; +#X scalar trace-template 0 0 5 \; 35.7851 60.3245 \; 28.7656 48.9997 +\; \;; +#X scalar trace-template 0 0 6 \; 66.5367 62.9806 \; \;; +#X scalar trace-template 0 0 7 \; 60.0435 58.3026 \; 57.4756 71.1499 \; 56.6996 79.7329 \; \;; -#X scalar trace-template 0 0 6 \; 50.4538 53.6763 \; \;; -#X scalar trace-template 0 0 7 \; 64.792 52.6242 \; 65.105 64.364 \; +#X scalar trace-template 0 0 8 \; 64.792 52.6242 \; 65.105 64.364 \; 65.3278 66.1787 \; \;; -#X scalar trace-template 0 0 8 \; 69.4266 52.4696 \; \;; #X scalar trace-template 0 0 9 \; 93.3934 53.7858 \; 93.3129 57.494 \; 93.3866 62.3986 \; 93.4731 62.6514 \; 93.6311 57.6541 \; \;; -#X scalar trace-template 0 0 10 \; 98.0801 52.803 \; 98.0787 57.9338 +#X scalar trace-template 0 0 11 \; 98.0801 52.803 \; 98.0787 57.9338 \; 97.978 58.3166 \; 97.9167 59.7057 \; 97.8158 54.9004 \; 97.7138 56.6168 \; \;; -#X scalar trace-template 0 0 11 \; 98.6797 52.4833 \; 98.7476 55.3555 +#X scalar trace-template 0 0 12 \; 98.6797 52.4833 \; 98.7476 55.3555 \; 98.7456 58.0097 \; 98.6729 58.3025 \; 98.5137 55.6623 \; 98.3772 57.2168 \; 98.3283 56.7836 \; 98.4639 50.9759 \; \;; -#X scalar trace-template 0 0 12 \; 93.5856 53.4024 \; \;; -#X scalar trace-template 0 0 13 \; 94.0962 53.1939 \; 94.1801 51.7142 -\; \;; +#X scalar trace-template 0 0 13 \; 93.5856 53.4024 \; \;; #X scalar trace-template 0 0 14 \; 94.5618 52.1363 \; 94.6656 56.0829 \; 94.655 58.4145 \; 94.7741 54.2222 \; \;; #X scalar trace-template 0 0 15 \; 70.2788 51.815 \; \;; -#X scalar trace-template 0 0 16 \; 92.4035 49.4034 \; 92.5834 50.7802 -\; 92.6197 58.0994 \; 92.8153 56.7736 \; 92.69 53.7227 \; \;; -#X scalar trace-template 0 0 17 \; 97.0111 52.4514 \; 97.1464 53.205 -\; 97.1322 55.8306 \; 97.1939 58.9246 \; \;; -#X scalar trace-template 0 0 18 \; 103.63 48.7534 \; \;; -#X scalar trace-template 0 0 19 \; 106.708 52.5447 \; 106.667 50.9117 +#X scalar trace-template 0 0 16 \; 103.63 48.7534 \; \;; +#X scalar trace-template 0 0 17 \; 106.708 52.5447 \; 106.667 50.9117 \; 106.615 54.0484 \; 106.573 56.6712 \; 106.572 53.7509 \; \;; -#X scalar trace-template 0 0 20 \; 107.375 52.4933 \; 107.452 52.97 +#X scalar trace-template 0 0 18 \; 107.375 52.4933 \; 107.452 52.97 \; 107.479 53.8338 \; \;; -#X scalar trace-template 0 0 21 \; 104.889 52.4301 \; 104.798 50.6847 +#X scalar trace-template 0 0 19 \; 104.889 52.4301 \; 104.798 50.6847 \; 104.738 53.6064 \; 104.694 55.5078 \; \;; -#X scalar trace-template 0 0 22 \; 93.1125 49.8142 \; \;; -#X scalar trace-template 0 0 23 \; 106.168 52.0262 \; 106.168 51.845 +#X scalar trace-template 0 0 20 \; 93.1125 49.8142 \; \;; +#X scalar trace-template 0 0 21 \; 106.168 52.0262 \; 106.168 51.845 \; 106.168 53.5205 \; 106.133 55.4745 \; \;; -#X scalar trace-template 0 0 24 \; 103.564 53.0485 \; 103.522 52.3184 +#X scalar trace-template 0 0 23 \; 103.564 53.0485 \; 103.522 52.3184 \; \;; -#X scalar trace-template 5 0 3 \; 58.434 71.4234 \; \;; -#X scalar trace-template 5 0 6 \; 68.7958 68.5415 \; \;; -#X scalar trace-template 5 0 8 \; 72.1585 54.0198 \; 72.027 60.6226 +#X scalar trace-template 5 0 0 \; 58.434 71.4234 \; \;; +#X scalar trace-template 5 0 2 \; 68.7958 68.5415 \; \;; +#X scalar trace-template 5 0 6 \; 72.1585 54.0198 \; 72.027 60.6226 \; 71.5842 61.862 \; 71.091 60.5141 \; 70.3611 60.3523 \; 70.9366 54.7085 \; 71.0735 52.2826 \; 71.3993 48.898 \; 70.4122 43.0506 \; 70.6467 35.4039 \; \;; -#X scalar trace-template 5 0 12 \; 75.1361 54.1268 \; 74.826 58.9083 +#X scalar trace-template 5 0 13 \; 75.1361 54.1268 \; 74.826 58.9083 \; 74.8015 58.2652 \; \;; #X scalar trace-template 5 0 15 \; 93.8916 49.7957 \; \;; -#X scalar trace-template 5 0 18 \; 104.549 52.3586 \; \;; -#X scalar trace-template 5 0 22 \; 107.047 51.1394 \; 107.037 52.8323 +#X scalar trace-template 5 0 16 \; 104.549 52.3586 \; \;; +#X scalar trace-template 5 0 20 \; 107.047 51.1394 \; 107.037 52.8323 \; 107.007 55.1471 \; \;; -#X scalar trace-template 10 0 1 \; 55.8012 81.4728 \; 55.5341 82.4149 +#X scalar trace-template 10 0 0 \; 55.8012 81.4728 \; 55.5341 82.4149 \; 55.0362 84.3325 \; 54.925 85.5837 \; 54.9055 86.3615 \; 54.6702 85.9042 \; 54.1036 83.7372 \; 53.7571 78.7488 \; 53.3201 72.8738 \; 54.8047 58.1952 \; \;; -#X scalar trace-template 10 0 3 \; 98.2897 56.9831 \; 98.2967 56.5387 +#X scalar trace-template 10 0 2 \; 98.2897 56.9831 \; 98.2967 56.5387 \; 98.12 61.6584 \; 98.0759 59.3161 \; 97.9283 57.2672 \; 97.9042 54.345 \; 97.9775 46.6193 \; 98.0437 30.8392 \; \;; -#X scalar trace-template 10 0 6 \; 105.674 54.2495 \; 105.673 56.157 +#X scalar trace-template 10 0 5 \; 105.674 54.2495 \; 105.673 56.157 \; 105.679 54.3729 \; 105.672 45.7686 \; \;; -#X scalar trace-template 10 0 13 \; 105.203 57.7523 \; 105.214 57.8342 +#X scalar trace-template 10 0 15 \; 105.203 57.7523 \; 105.214 57.8342 \; 105.26 54.0331 \; \;; -#X scalar trace-template 10 0 15 \; 105.27 55.7998 \; \;; -#X scalar trace-template 10 0 18 \; 96.3372 53.1138 \; \;; -#X scalar trace-template 10 0 24 \; 91.5376 52.4183 \; 91.6323 55.6354 +#X scalar trace-template 10 0 16 \; 105.27 55.7998 \; \;; +#X scalar trace-template 10 0 22 \; 96.3372 53.1138 \; \;; +#X scalar trace-template 10 0 23 \; 91.5376 52.4183 \; 91.6323 55.6354 \; \;; -#X scalar trace-template 15 0 5 \; 73.8193 56.4623 \; 74.0778 57.8288 +#X scalar trace-template 15 0 7 \; 73.8193 56.4623 \; 74.0778 57.8288 \; 73.8012 54.3914 \; 73.8703 48.2022 \; \;; -#X scalar trace-template 15 0 7 \; 92.4832 57.2131 \; \;; -#X scalar trace-template 15 0 15 \; 97.4895 56.1181 \; 97.4097 61.4156 +#X scalar trace-template 15 0 8 \; 92.4832 57.2131 \; \;; +#X scalar trace-template 15 0 16 \; 97.4895 56.1181 \; 97.4097 61.4156 \; 97.5703 59.4746 \; 97.639 61.3037 \; 97.5821 52.7503 \; 97.4317 49.262 \; 97.3345 37.6363 \; \;; #X scalar trace-template 15 0 18 \; 94.5248 54.9649 \; \;; -#X scalar trace-template 15 0 20 \; 99.3492 54.9459 \; \;; -#X scalar trace-template 20 0 7 \; 58.751 69.2183 \; \;; -#X scalar trace-template 20 0 12 \; 68.7707 65.5664 \; 69.4343 58.9916 +#X scalar trace-template 15 0 22 \; 99.3492 54.9459 \; \;; +#X scalar trace-template 20 0 8 \; 58.751 69.2183 \; \;; +#X scalar trace-template 20 0 10 \; 68.7707 65.5664 \; 69.4343 58.9916 \; 69.2403 51.8567 \; 69.4641 51.8688 \; \;; -#X scalar trace-template 20 0 14 \; 64.2458 66.3536 \; 64.7097 63.8999 +#X scalar trace-template 20 0 13 \; 64.2458 66.3536 \; 64.7097 63.8999 \; \;; -#X scalar trace-template 20 0 17 \; 98.2076 57.7703 \; \;; +#X scalar trace-template 20 0 14 \; 98.2076 57.7703 \; \;; #X scalar trace-template 20 0 18 \; 72.1465 57.592 \; 72.7218 50.7256 \; 72.6739 45.1631 \; 72.827 47.7164 \; 72.347 45.3634 \; 73.2437 34.8942 \; 72.4919 36.8733 \; \;; -#X scalar trace-template 20 0 20 \; 93.4187 56.559 \; \;; -#X scalar trace-template 20 0 21 \; 96.7609 53.9646 \; 96.7573 57.3216 +#X scalar trace-template 20 0 19 \; 93.4187 56.559 \; \;; +#X scalar trace-template 20 0 20 \; 96.7609 53.9646 \; 96.7573 57.3216 \; 96.901 56.4167 \; 96.8986 50.763 \; 96.7653 41.0124 \; 96.6051 27.4919 \; 96.6915 31.3267 \; \;; -#X scalar trace-template 20 0 22 \; 96.6599 57.643 \; \;; -#X scalar trace-template 20 0 23 \; 98.7288 54.3033 \; 98.819 52.9457 +#X scalar trace-template 20 0 21 \; 96.6599 57.643 \; \;; +#X scalar trace-template 20 0 22 \; 98.7288 54.3033 \; 98.819 52.9457 \; \;; -#X scalar trace-template 20 0 24 \; 25.162 51.7721 \; \;; -#X scalar trace-template 25 0 7 \; 97.3372 59.4565 \; 97.2453 55.0281 +#X scalar trace-template 20 0 23 \; 25.162 51.7721 \; \;; +#X scalar trace-template 25 0 8 \; 97.3372 59.4565 \; 97.2453 55.0281 \; 97.1582 53.561 \; \;; #X scalar trace-template 25 0 9 \; 99.0862 52.1441 \; 98.9966 52.2653 \; 98.9366 43.5301 \; 98.7499 39.1149 \; \;; -#X scalar trace-template 25 0 13 \; 88.7439 52.1357 \; 88.6063 48.607 +#X scalar trace-template 25 0 14 \; 88.7439 52.1357 \; 88.6063 48.607 \; 88.4629 45.3163 \; 88.5646 37.1753 \; \;; -#X scalar trace-template 25 0 16 \; 76.6582 50.6773 \; 76.4757 47.9655 +#X scalar trace-template 25 0 15 \; 76.6582 50.6773 \; 76.4757 47.9655 \; 76.0797 45.6933 \; 76.0124 41.2622 \; 76.111 34.2795 \; 76.485 38.5394 \; \;; #X scalar trace-template 25 0 17 \; 89.9143 50.7512 \; 89.8175 48.7246 \; 89.5803 46.0486 \; 89.5973 36.885 \; \;; #X scalar trace-template 25 0 19 \; 90.3997 50.241 \; 90.3685 46.0385 \; \;; -#X scalar trace-template 25 0 20 \; 92.007 47.4144 \; \;; -#X scalar trace-template 25 0 22 \; 95.9485 49.755 \; 96.1285 47.8386 +#X scalar trace-template 25 0 21 \; 92.007 47.4144 \; \;; +#X scalar trace-template 25 0 23 \; 95.9485 49.755 \; 96.1285 47.8386 \; 96.1404 43.5474 \; \;; #X scalar trace-template 25 0 24 \; 90.9179 47.4232 \; 90.9154 45.4841 \; 90.6842 43.4723 \; 90.7132 33.3246 \; \;; -#X scalar trace-template 30 0 6 \; 96.4763 48.1872 \; \;; -#X scalar trace-template 30 0 10 \; 89.3172 47.7196 \; \;; -#X scalar trace-template 30 0 14 \; 82.8228 46.0375 \; 82.846 40.9498 +#X scalar trace-template 30 0 5 \; 96.4763 48.1872 \; \;; +#X scalar trace-template 30 0 11 \; 89.3172 47.7196 \; \;; +#X scalar trace-template 30 0 13 \; 82.8228 46.0375 \; 82.846 40.9498 \; 83.1092 38.7591 \; \;; -#X scalar trace-template 30 0 20 \; 95.2468 44.5831 \; \;; -#X scalar trace-template 30 0 23 \; 99.7228 45.2257 \; \;; +#X scalar trace-template 30 0 21 \; 95.2468 44.5831 \; \;; +#X scalar trace-template 30 0 22 \; 99.7228 45.2257 \; \;; #X scalar trace-template 35 0 5 \; 97.7405 56.7114 \; \;; -#X scalar trace-template 35 0 6 \; 98.2853 50.0495 \; \;; -#X scalar trace-template 35 0 10 \; 99.0794 45.8889 \; \;; +#X scalar trace-template 35 0 7 \; 98.2853 50.0495 \; \;; +#X scalar trace-template 35 0 11 \; 99.0794 45.8889 \; \;; #X scalar trace-template 35 0 19 \; 91.7936 43.9899 \; 91.9119 38.476 \; 91.7941 27.6638 \; \;; -#X scalar trace-template 35 0 20 \; 96.3046 44.1244 \; \;; -#X scalar trace-template 35 0 23 \; 84.3615 43.0986 \; 84.4914 38.6378 +#X scalar trace-template 35 0 21 \; 96.3046 44.1244 \; \;; +#X scalar trace-template 35 0 22 \; 84.3615 43.0986 \; 84.4914 38.6378 \; 84.5763 32.2108 \; \;; #X scalar trace-template 40 0 4 \; 64.8609 62.0142 \; 64.3096 52.2251 \; 62.8352 45.6144 \; 61.4115 49.4288 \; \;; #X scalar trace-template 40 0 5 \; 67.279 52.6475 \; 67.0166 51.557 \; 66.7609 42.7254 \; 66.2104 53.6697 \; \;; -#X scalar trace-template 40 0 6 \; 79.7413 38.9881 \; 79.9646 31.0069 +#X scalar trace-template 40 0 7 \; 79.7413 38.9881 \; 79.9646 31.0069 \; \;; -#X scalar trace-template 40 0 7 \; 117.599 38.2206 \; 117.635 33.6855 +#X scalar trace-template 40 0 8 \; 117.599 38.2206 \; 117.635 33.6855 \; \;; #X scalar trace-template 40 0 10 \; 117.527 36.493 \; 117.488 26.9096 \; \;; @@ -237,21 +217,21 @@ float ampimag float used; \; 83.5749 37.3988 \; \;; #X scalar trace-template 40 0 12 \; 117.755 36.44 \; 117.837 33.3774 \; \;; -#X scalar trace-template 40 0 20 \; 95.2338 33.5163 \; \;; -#X scalar trace-template 40 0 22 \; 107.704 35.4627 \; 107.784 31.1939 +#X scalar trace-template 40 0 21 \; 95.2338 33.5163 \; \;; +#X scalar trace-template 40 0 23 \; 107.704 35.4627 \; 107.784 31.1939 \; \;; -#X scalar trace-template 45 0 2 \; 59.333 58.5199 \; \;; +#X scalar trace-template 45 0 3 \; 59.333 58.5199 \; \;; #X scalar trace-template 45 0 9 \; 4.76558 44.7982 \; \;; #X scalar trace-template 45 0 13 \; 97.1803 35.0264 \; \;; #X scalar trace-template 45 0 14 \; 117.68 34.5832 \; \;; #X scalar trace-template 45 0 17 \; 98.3911 24.5617 \; \;; -#X scalar trace-template 45 0 20 \; 84.8597 30.5339 \; \;; +#X scalar trace-template 45 0 21 \; 84.8597 30.5339 \; \;; #X scalar trace-template 45 0 24 \; 107.721 31.1631 \; \;; #X scalar trace-template 50 0 2 \; 51.6483 69.8412 \; \;; #X scalar trace-template 50 0 3 \; 63.9179 47.4607 \; 65.1468 51.9224 \; \;; -#X scalar trace-template 50 0 6 \; 75.815 34.9297 \; \;; -#X scalar trace-template 50 0 7 \; 67.5764 45.6307 \; 67.4924 51.162 +#X scalar trace-template 50 0 7 \; 75.815 34.9297 \; \;; +#X scalar trace-template 50 0 8 \; 67.5764 45.6307 \; 67.4924 51.162 \; \;; #X scalar trace-template 50 0 9 \; 82.1746 36.9205 \; \;; #X scalar trace-template 50 0 10 \; 74.7603 34.7385 \; \;; @@ -259,13 +239,13 @@ float ampimag float used; \; \;; #X scalar trace-template 50 0 13 \; 106.111 31.5629 \; \;; #X scalar trace-template 50 0 14 \; 119.166 39.5628 \; \;; -#X scalar trace-template 50 0 15 \; 106.523 30.4059 \; 106.52 52.0421 +#X scalar trace-template 50 0 16 \; 106.523 30.4059 \; 106.52 52.0421 \; 106.622 58.7555 \; 106.654 60.575 \; 106.665 57.6211 \; \;; #X scalar trace-template 50 0 17 \; 104.801 29.8914 \; 104.741 48.5498 \; \;; #X scalar trace-template 50 0 19 \; 119.205 37.0858 \; 119.193 51.4049 \; \;; -#X scalar trace-template 50 0 20 \; 109.541 29.1446 \; 109.544 47.4596 +#X scalar trace-template 50 0 21 \; 109.541 29.1446 \; 109.544 47.4596 \; \;; #X scalar trace-template 50 0 22 \; 119.001 26.3198 \; \;; #X scalar trace-template 50 0 23 \; 118.523 28.1975 \; \;; @@ -273,7 +253,7 @@ float ampimag float used; #X scalar trace-template 55 0 2 \; 113.879 55.3717 \; 113.876 63.208 \; 113.879 63.7127 \; 113.913 58.2536 \; 113.967 54.0574 \; \;; #X scalar trace-template 55 0 6 \; 105.25 56.3462 \; \;; -#X scalar trace-template 55 0 8 \; 114.186 56.2486 \; 114.17 61.7646 +#X scalar trace-template 55 0 7 \; 114.186 56.2486 \; 114.17 61.7646 \; \;; #X scalar trace-template 55 0 9 \; 115.369 51.8212 \; 115.396 58.0459 \; 115.404 58.493 \; \;; @@ -281,15 +261,15 @@ float ampimag float used; #X scalar trace-template 55 0 11 \; 59.7326 50.1853 \; \;; #X scalar trace-template 55 0 13 \; 113.553 48.8139 \; \;; #X scalar trace-template 55 0 14 \; 114.65 48.9427 \; \;; -#X scalar trace-template 55 0 16 \; 105.745 48.636 \; 105.679 57.4135 +#X scalar trace-template 55 0 15 \; 105.745 48.636 \; 105.679 57.4135 \; 105.528 61.5143 \; 105.528 62.5137 \; 105.518 58.751 \; 105.472 52.909 \; \;; #X scalar trace-template 55 0 18 \; 114.444 47.8306 \; \;; -#X scalar trace-template 55 0 21 \; 116.679 45.6275 \; \;; +#X scalar trace-template 55 0 20 \; 116.679 45.6275 \; \;; #X scalar trace-template 55 0 22 \; 118.699 52.0081 \; \;; #X scalar trace-template 55 0 23 \; 118.669 51.6062 \; \;; #X scalar trace-template 55 0 24 \; 104.27 43.0815 \; \;; -#X scalar trace-template 60 0 1 \; 108.535 61.6816 \; 108.532 63.3951 +#X scalar trace-template 60 0 0 \; 108.535 61.6816 \; 108.532 63.3951 \; 108.509 58.7369 \; \;; #X scalar trace-template 60 0 3 \; 43.4621 60.557 \; \;; #X scalar trace-template 60 0 4 \; 111.754 62.3488 \; 111.753 62.0433 @@ -301,7 +281,7 @@ float ampimag float used; \; 105.764 61.2428 \; 105.791 63.1944 \; 105.735 64.2197 \; 105.685 67.6098 \; 105.628 69.7158 \; 105.762 63.5753 \; 105.802 57.0624 \; \;; -#X scalar trace-template 60 0 7 \; 94.0043 59.8076 \; 94.0496 64.4823 +#X scalar trace-template 60 0 8 \; 94.0043 59.8076 \; 94.0496 64.4823 \; 94.0766 67.4586 \; 94.0832 66.5082 \; 94.0858 60.4824 \; 94.0519 57.3767 \; 93.9501 59.9649 \; 93.8858 62.4423 \; 93.9548 61.1516 \; \;; @@ -333,7 +313,7 @@ float ampimag float used; #X scalar trace-template 60 0 24 \; 108.273 57.9692 \; \;; #X scalar trace-template 65 0 3 \; 104.792 60.4364 \; 104.882 49.0181 \; 104.859 55.5088 \; \;; -#X scalar trace-template 65 0 8 \; 92.8342 60.3298 \; 92.8528 60.5127 +#X scalar trace-template 65 0 7 \; 92.8342 60.3298 \; 92.8528 60.5127 \; 92.5407 53.981 \; \;; #X scalar trace-template 65 0 13 \; 94.4643 58.0916 \; 94.6355 58.0613 \; 94.679 57.0481 \; 94.74 56.2747 \; 94.5523 55.6712 \; \;; @@ -357,11 +337,11 @@ float ampimag float used; \; \;; #X scalar trace-template 70 0 24 \; 103.921 58.4253 \; 103.965 56.4895 \; \;; -#X scalar trace-template 75 0 1 \; 28.7656 65.6265 \; 30.4187 56.1352 +#X scalar trace-template 75 0 0 \; 28.7656 65.6265 \; 30.4187 56.1352 \; 20.9307 55.7277 \; \;; #X scalar trace-template 75 0 10 \; 44.3816 62.7999 \; 47.1446 79.2267 \; \;; -#X scalar trace-template 75 0 15 \; 66.028 56.9894 \; 65.9473 66.2473 +#X scalar trace-template 75 0 16 \; 66.028 56.9894 \; 65.9473 66.2473 \; 66.2148 73.5068 \; 66.3251 79.2535 \; 66.3195 82.2919 \; 66.223 82.904 \; 66.1099 82.4279 \; 66.0253 81.3052 \; 65.9722 78.2544 \; 66.2036 72.5636 \; 66.3236 66.8396 \; 66.0337 64.6209 \; 65.5822 67.3236 @@ -386,7 +366,7 @@ float ampimag float used; #X scalar trace-template 75 0 21 \; 100.908 55.2177 \; 100.895 50.5504 \; \;; #X scalar trace-template 75 0 22 \; 60.661 57.6485 \; \;; -#X scalar trace-template 80 0 0 \; 45.3064 79.4637 \; 46.0318 82.7263 +#X scalar trace-template 80 0 1 \; 45.3064 79.4637 \; 46.0318 82.7263 \; 46.2638 86.5013 \; 46.6024 87.3288 \; 46.8569 86.6402 \; 46.917 85.573 \; 47.0133 84.9324 \; 47.2429 84.8494 \; 47.5238 85.098 \; 47.6638 85.1508 \; 47.4935 84.5333 \; 47.0848 83.4253 \; 46.5846 82.5027 \; @@ -402,7 +382,7 @@ float ampimag float used; \; 70.923 70.6645 \; 70.9625 74.8792 \; 70.9973 76.3398 \; 71.041 75.3628 \; 71.1063 71.4505 \; 71.4828 64.4961 \; 71.664 55.6991 \; 71.1539 56.093 \; \;; -#X scalar trace-template 80 0 8 \; 74.5842 53.7224 \; 74.6798 60.9324 +#X scalar trace-template 80 0 7 \; 74.5842 53.7224 \; 74.6798 60.9324 \; 74.7701 65.088 \; 74.8205 66.5031 \; 74.8536 66.2739 \; 74.9078 65.5817 \; 75.0981 63.6081 \; 75.36 58.2125 \; 75.5816 50.9285 \; 75.0917 48.3284 \; 74.6947 52.0563 \; 74.5236 54.0149 \; \;; @@ -420,7 +400,7 @@ float ampimag float used; \; 96.0624 72.5341 \; 96.1505 74.4534 \; 96.249 74.4393 \; 96.3181 71.6039 \; 96.323 64.0989 \; 96.2302 54.6293 \; \;; #X scalar trace-template 85 0 11 \; 96.211 61.8841 \; \;; -#X scalar trace-template 85 0 16 \; 98.7364 57.2459 \; 98.7772 64 \; +#X scalar trace-template 85 0 15 \; 98.7364 57.2459 \; 98.7772 64 \; 98.835 69.2622 \; 98.9775 71.0388 \; 99.0667 71.2528 \; 99.1468 68.4925 \; 99.2247 61.5751 \; 99.2735 53.0332 \; 99.1813 42.7543 \; 99.3925 56.1553 \; \;; @@ -432,7 +412,7 @@ float ampimag float used; #X scalar trace-template 85 0 23 \; 119.147 52.8507 \; \;; #X scalar trace-template 85 0 24 \; 105.139 50.5351 \; 105.163 59.2938 \; 105.221 64.0555 \; 105.163 62.8698 \; 105.09 64.5973 \; \;; -#X scalar trace-template 90 0 1 \; 100.422 57.9845 \; 100.491 63.3379 +#X scalar trace-template 90 0 0 \; 100.422 57.9845 \; 100.491 63.3379 \; 100.573 64.3463 \; 100.697 64.1111 \; 100.779 61.2922 \; 100.846 53.0746 \; \;; #X scalar trace-template 90 0 5 \; 106.282 57.177 \; 106.331 60.5044 @@ -460,7 +440,7 @@ float ampimag float used; \; 106.133 64.6438 \; 106.031 58.503 \; \;; #X scalar trace-template 100 0 23 \; 104.307 58.6226 \; 104.297 62.9229 \; \;; -#X scalar trace-template 105 0 7 \; 102.933 61.6534 \; 103.043 60.5042 +#X scalar trace-template 105 0 8 \; 102.933 61.6534 \; 103.043 60.5042 \; 103.149 53.9428 \; \;; #X scalar trace-template 105 0 20 \; 105.893 57.9727 \; \;; #X scalar trace-template 110 0 5 \; 63.6483 57.9829 \; \;; @@ -481,9 +461,9 @@ float ampimag float used; #X scalar trace-template 115 0 24 \; 97.8258 55.2253 \; 97.7615 56.9729 \; 97.7798 56.1292 \; 97.7046 57.0451 \; 97.7385 58.6266 \; 97.7286 63.1467 \; 97.6773 65.5081 \; \;; -#X scalar trace-template 120 0 1 \; 68.2533 59.2205 \; \;; +#X scalar trace-template 120 0 0 \; 68.2533 59.2205 \; \;; #X scalar trace-template 120 0 5 \; 105.729 54.4994 \; \;; -#X scalar trace-template 120 0 7 \; 98.7789 54.5448 \; 98.6909 54.5418 +#X scalar trace-template 120 0 8 \; 98.7789 54.5448 \; 98.6909 54.5418 \; 98.6698 56.6369 \; 98.6558 61.9572 \; 98.6089 66.107 \; 98.5499 65.5083 \; 98.5333 60.7304 \; \;; #X scalar trace-template 120 0 9 \; 96.7716 53.6612 \; 96.7862 48.729 @@ -496,7 +476,7 @@ float ampimag float used; #X scalar trace-template 120 0 18 \; 95.6152 47.3413 \; 95.7933 40.2091 \; 95.8117 52.2763 \; 96.0363 62.5129 \; 95.9603 64.1765 \; 95.86 64.5745 \; \;; -#X scalar trace-template 125 0 1 \; 63.9916 57.0381 \; 64.2159 50.3829 +#X scalar trace-template 125 0 0 \; 63.9916 57.0381 \; 64.2159 50.3829 \; \;; #X scalar trace-template 125 0 2 \; 70.6556 54.4364 \; 70.771 57.7957 \; 70.6885 60.2903 \; 70.5159 61.3918 \; 70.1955 61.5167 \; 69.6017 @@ -530,12 +510,12 @@ float ampimag float used; 52.9112 \; \;; #X scalar trace-template 130 0 23 \; 100.84 44.8828 \; 100.971 52.5872 \; \;; -#X scalar trace-template 135 0 1 \; 96.9296 68.2025 \; 96.9229 70.7526 +#X scalar trace-template 135 0 0 \; 96.9296 68.2025 \; 96.9229 70.7526 \; 96.911 71.2325 \; 96.8475 67.6464 \; 96.6719 57.2885 \; \;; #X scalar trace-template 135 0 3 \; 55.7407 61.8333 \; \;; #X scalar trace-template 135 0 9 \; 96.1424 61.1484 \; 96.3859 59.4198 \; \;; -#X scalar trace-template 135 0 16 \; 105.169 58.025 \; 105.18 59.8246 +#X scalar trace-template 135 0 15 \; 105.169 58.025 \; 105.18 59.8246 \; 105.219 61.1852 \; 105.308 61.9676 \; 105.257 55.4418 \; 105.368 44.5374 \; \;; #X scalar trace-template 135 0 20 \; 103.749 51.8393 \; 103.689 58.5917 @@ -543,11 +523,11 @@ float ampimag float used; 48.2698 \; 103.569 21.2136 \; \;; #X scalar trace-template 140 0 3 \; 94.826 60.4828 \; 94.8546 62.6004 \; 94.671 62.0785 \; 94.4878 54.123 \; \;; -#X scalar trace-template 140 0 8 \; 103.052 56.8622 \; \;; +#X scalar trace-template 140 0 7 \; 103.052 56.8622 \; \;; #X scalar trace-template 140 0 21 \; 94.6802 56.5378 \; \;; #X scalar trace-template 140 0 23 \; 104.556 55.3201 \; 104.64 58.9501 \; 104.721 59.9894 \; 104.677 29.848 \; 104.84 42.1598 \; \;; -#X scalar trace-template 145 0 8 \; 97.574 67.4101 \; 97.583 67.5659 +#X scalar trace-template 145 0 7 \; 97.574 67.4101 \; 97.583 67.5659 \; 97.4339 62.0541 \; 97.1835 51.5837 \; 97.2382 42.6143 \; 97.3407 41.9578 \; 97.2803 46.3782 \; 97.2462 54.9285 \; 97.2405 60.8982 \; 97.186 61.9162 \; 97.1356 58.9903 \; 97.0654 54.4072 \; \;; @@ -572,7 +552,7 @@ float ampimag float used; \; 105.84 31.6255 \; \;; #X scalar trace-template 155 0 6 \; 104.1 54.8238 \; 104.292 41.62 \; \;; -#X scalar trace-template 155 0 7 \; 104.659 52.0965 \; \;; +#X scalar trace-template 155 0 8 \; 104.659 52.0965 \; \;; #X scalar trace-template 155 0 9 \; 79.2186 53.3809 \; 79.0163 49.2866 \; 79.3079 43.6751 \; 79.3195 45.32 \; 79.2421 57.8438 \; 78.7816 61.5107 \; 78.5544 60.7085 \; 78.2576 61.3503 \; 78.1299 60.9071 \; 78.0477 @@ -581,13 +561,13 @@ float ampimag float used; #X scalar trace-template 155 0 17 \; 76.7088 51.9108 \; 76.8432 46.4259 \; 77.8523 44.1406 \; 78.197 49.433 \; \;; #X scalar trace-template 155 0 24 \; 91.0294 50.8573 \; \;; -#X scalar trace-template 160 0 1 \; 58.7854 73.5324 \; \;; +#X scalar trace-template 160 0 0 \; 58.7854 73.5324 \; \;; #X scalar trace-template 160 0 3 \; 97.4373 50.5792 \; \;; #X scalar trace-template 160 0 5 \; 69.8033 52.0408 \; 69.0208 43.5237 \; 68.9326 56.827 \; 68.9851 66.3004 \; 69.1314 74.2815 \; 68.9457 79.5783 \; 68.5964 82.7769 \; 68.3265 83.2435 \; 68.1623 80.7762 \; 67.827 75.7023 \; 67.6299 67.8599 \; 67.7025 58.6257 \; \;; -#X scalar trace-template 160 0 7 \; 97.8242 45.7325 \; 97.6397 42.3616 +#X scalar trace-template 160 0 8 \; 97.8242 45.7325 \; 97.6397 42.3616 \; 97.7207 41.898 \; 97.6372 45.4791 \; \;; #X scalar trace-template 160 0 11 \; 81.072 47.1297 \; 80.2749 37.1673 \; 80.1904 41.7085 \; \;; @@ -605,23 +585,23 @@ float ampimag float used; \; 83.2355 39.4904 \; \;; #X scalar trace-template 160 0 22 \; 103.089 41.5226 \; \;; #X scalar trace-template 160 0 24 \; 87.6398 41.8453 \; \;; -#X scalar trace-template 165 0 1 \; 67.279 60.564 \; \;; +#X scalar trace-template 165 0 0 \; 67.279 60.564 \; \;; #X scalar trace-template 165 0 3 \; 78.8806 43.5405 \; \;; #X scalar trace-template 165 0 6 \; 77.1702 39.9933 \; \;; #X scalar trace-template 165 0 13 \; 96.8905 39.4582 \; 96.9248 36.8833 \; \;; -#X scalar trace-template 165 0 16 \; 81.4454 34.6657 \; \;; +#X scalar trace-template 165 0 15 \; 81.4454 34.6657 \; \;; #X scalar trace-template 165 0 18 \; 71.4971 44.8011 \; \;; #X scalar trace-template 165 0 22 \; 74.1322 29.2826 \; \;; #X scalar trace-template 165 0 23 \; 84.3907 32.3293 \; \;; #X scalar trace-template 165 0 24 \; 98.425 30.714 \; \;; -#X scalar trace-template 170 0 1 \; 63.0613 51.8605 \; \;; +#X scalar trace-template 170 0 0 \; 63.0613 51.8605 \; \;; #X scalar trace-template 170 0 3 \; 69.8808 52.7738 \; \;; #X scalar trace-template 170 0 4 \; 72.8347 42.8028 \; 73.3294 60.0839 \; \;; #X scalar trace-template 170 0 6 \; 83.6038 40.2629 \; 83.7488 60.8388 \; 83.6118 61.1732 \; 83.6416 59.2213 \; \;; -#X scalar trace-template 170 0 16 \; 98.0969 33.0531 \; 98.0865 44.3888 +#X scalar trace-template 170 0 15 \; 98.0969 33.0531 \; 98.0865 44.3888 \; 98.0603 54.4928 \; 98.052 60.8425 \; 98.0076 63.9834 \; 97.9835 63.2399 \; 97.919 58.6122 \; \;; #X scalar trace-template 170 0 18 \; 95.5827 32.4406 \; \;; @@ -632,7 +612,7 @@ float ampimag float used; \; 86.3862 53.5239 \; 86.3392 62.3554 \; 86.2914 64.6131 \; 85.9585 62.4475 \; 85.826 55.4383 \; \;; #X scalar trace-template 170 0 24 \; 92.9538 29.4611 \; \;; -#X scalar trace-template 175 0 1 \; 83.9354 58.8144 \; \;; +#X scalar trace-template 175 0 0 \; 83.9354 58.8144 \; \;; #X scalar trace-template 175 0 2 \; 85.1639 47.1991 \; 84.9908 61.3567 \; 84.8308 66.4198 \; 84.6646 64.7867 \; 84.4705 58.0568 \; \;; #X scalar trace-template 175 0 3 \; 76.4174 52.7469 \; 77.4491 51.5702 @@ -648,9 +628,9 @@ float ampimag float used; #X scalar trace-template 175 0 22 \; 105.307 37.6238 \; \;; #X scalar trace-template 175 0 24 \; 96.3502 37.7664 \; 96.3927 47.8998 \; \;; -#X scalar trace-template 180 0 1 \; 53.8911 67.3249 \; \;; +#X scalar trace-template 180 0 0 \; 53.8911 67.3249 \; \;; #X scalar trace-template 180 0 4 \; 82.1272 66.4862 \; \;; -#X scalar trace-template 180 0 7 \; 82.4572 61.6346 \; 82.2939 65.5493 +#X scalar trace-template 180 0 8 \; 82.4572 61.6346 \; 82.2939 65.5493 \; 82.4371 61.8962 \; 82.4334 57.5816 \; 82.2831 53.503 \; \;; #X scalar trace-template 180 0 11 \; 81.3092 64.7334 \; 81.0542 63.1777 \; 80.5738 60.1169 \; 80.3458 57.9887 \; 80.2331 54.4228 \; \;; @@ -660,7 +640,7 @@ float ampimag float used; #X scalar trace-template 180 0 22 \; 87.6305 50.6796 \; 87.6824 61.3363 \; 87.7738 65.5553 \; 87.6706 63.9521 \; 87.5926 58.3977 \; 87.4044 49.0299 \; \;; -#X scalar trace-template 185 0 1 \; 41.5517 64.6704 \; 30.5406 67.801 +#X scalar trace-template 185 0 0 \; 41.5517 64.6704 \; 30.5406 67.801 \; 31.2086 64.8856 \; 38.4538 57.4354 \; \;; #X scalar trace-template 185 0 3 \; 88.9938 55.8587 \; 89.0075 64.1778 \; 89.0137 67.1789 \; 89.0181 64.5468 \; 89.0589 58.319 \; \;; @@ -685,7 +665,7 @@ float ampimag float used; \; \;; #X scalar trace-template 200 0 17 \; 99.0175 54.5166 \; \;; #X scalar trace-template 200 0 20 \; 99.4227 53.3752 \; \;; -#X scalar trace-template 205 0 1 \; 17.8806 55.9034 \; \;; +#X scalar trace-template 205 0 0 \; 17.8806 55.9034 \; \;; #X scalar trace-template 205 0 2 \; 111.325 51.4995 \; 111.249 57.7763 \; \;; #X scalar trace-template 205 0 7 \; 115.645 52.6935 \; 115.652 55.3135 @@ -695,7 +675,7 @@ float ampimag float used; #X scalar trace-template 205 0 12 \; 111.534 48.8612 \; 111.503 60.7063 \; 111.473 64.4167 \; 111.44 64.4249 \; 111.429 65.1964 \; 111.435 64.716 \; 111.461 59.5964 \; \;; -#X scalar trace-template 205 0 16 \; 107.192 51.3543 \; \;; +#X scalar trace-template 205 0 15 \; 107.192 51.3543 \; \;; #X scalar trace-template 205 0 17 \; 107.725 51.722 \; \;; #X scalar trace-template 205 0 20 \; 110.775 53.9938 \; 110.765 60.1593 \; 110.863 62.3883 \; 110.884 62.5401 \; 110.892 64.4451 \; 110.865 @@ -706,7 +686,7 @@ float ampimag float used; #X scalar trace-template 205 0 23 \; 110.3 49.7937 \; 110.212 59.207 \; 110.234 64.4164 \; 110.251 69.1681 \; 110.258 71.0713 \; 110.247 67.8894 \; 110.231 62.9948 \; \;; -#X scalar trace-template 210 0 1 \; 119.046 57.9889 \; 119.026 63.4287 +#X scalar trace-template 210 0 0 \; 119.046 57.9889 \; 119.026 63.4287 \; 119.028 63.1849 \; 119.031 60.9702 \; \;; #X scalar trace-template 210 0 3 \; 115.101 56.6111 \; 115.102 63.0497 \; \;; @@ -728,7 +708,7 @@ float ampimag float used; \; 114.929 61.7452 \; \;; #X scalar trace-template 210 0 14 \; 118.813 53.5036 \; 118.787 60.0132 \; 118.784 61.2655 \; \;; -#X scalar trace-template 210 0 16 \; 114.025 58.6071 \; \;; +#X scalar trace-template 210 0 15 \; 114.025 58.6071 \; \;; #X scalar trace-template 210 0 17 \; 114.038 59.1291 \; \;; #X scalar trace-template 210 0 18 \; 115.32 54.0326 \; 115.315 60.519 \; 115.303 63.62 \; 115.288 63.4663 \; 115.299 60.4082 \; \;; @@ -1804,7 +1784,8 @@ float ampimag float used; \; \;; #X scalar trace-template 630 0 3 \; 42.4282 53.9733 \; 44.6587 65.9304 \; 44.7895 77.695 \; 42.4643 81.9832 \; 40.836 83.2193 \; 39.8599 82.6942 -\; 39.5713 82.3959 \; 39.5654 82.2658 \; 39.6933 81.6769 \; \;; +\; 39.5713 82.3959 \; 39.5654 82.2658 \; 39.6933 81.6769 \; 39.4641 +79.9421 \; \;; #X scalar trace-template 630 0 7 \; 111.166 55.1646 \; 111.132 56.4644 \; 111.061 52.1002 \; \;; #X scalar trace-template 630 0 10 \; 118.087 54.7511 \; \;; @@ -1814,18 +1795,22 @@ float ampimag float used; #X scalar trace-template 630 0 20 \; 119.199 55.0985 \; \;; #X scalar trace-template 635 0 4 \; 58.4266 71.0592 \; 59.0486 70.6632 \; 59.0168 73.4254 \; 58.9273 73.1853 \; 58.1736 74.0071 \; 58.3129 -72.2041 \; 58.3643 70.189 \; 56.9261 66.5358 \; \;; +72.2041 \; 58.3643 70.189 \; 56.9261 66.5358 \; 56.6951 64.6457 \; +\;; #X scalar trace-template 635 0 5 \; 57.4861 71.4524 \; 55.1139 72.7167 \; 52.0038 84.0201 \; 51.9024 85.0374 \; 51.8134 85.7674 \; 51.547 -85.8245 \; 51.477 85.583 \; 51.4291 84.5581 \; \;; +85.8245 \; 51.477 85.583 \; 51.4291 84.5581 \; 51.3241 81.7039 \; \; +; #X scalar trace-template 635 0 6 \; 65.9162 68.9938 \; \;; #X scalar trace-template 635 0 8 \; 65.3277 69.1431 \; 64.7843 70.5406 \; 64.2028 71.6783 \; 63.733 71.4284 \; 63.2432 70.7821 \; 63.1979 -70.0653 \; 63.1048 69.7311 \; 63.0327 66.3733 \; \;; +70.0653 \; 63.1048 69.7311 \; 63.0327 66.3733 \; 60.9571 62.1447 \; +\;; #X scalar trace-template 635 0 9 \; 35.7725 59.4376 \; \;; #X scalar trace-template 635 0 10 \; 69.9342 59.7387 \; 68.5482 72.5399 \; 67.8286 72.7588 \; 67.6787 73.4941 \; 67.161 72.6799 \; 67.0163 -69.9039 \; 66.7503 66.0932 \; 66.3716 62.0886 \; \;; +69.9039 \; 66.7503 66.0932 \; 66.3716 62.0886 \; 65.8899 56.3177 \; +\;; #X scalar trace-template 635 0 11 \; 92.9541 57.5759 \; 93.3157 64.5774 \; 93.2577 61.7797 \; 93.2324 57.1403 \; 93.1224 48.6124 \; \;; #X scalar trace-template 635 0 14 \; 113.879 52.0058 \; \;; @@ -1846,10 +1831,10 @@ float ampimag float used; \; 93.7326 37.8548 \; \;; #X scalar trace-template 640 0 9 \; 97.0131 58.7974 \; 97.0936 63.091 \; 97.0854 61.4434 \; 97.0195 57.5923 \; 96.8883 60.8413 \; 96.9412 -59.1049 \; 96.9206 54.9872 \; \;; +59.1049 \; 96.9206 54.9872 \; 96.8216 49.0502 \; \;; #X scalar trace-template 640 0 12 \; 95.7121 58.1855 \; 95.7866 62.1503 \; 95.802 60.6281 \; 95.9891 57.3853 \; 96.2532 55.7833 \; 96.3873 -55.2429 \; 96.4037 52.212 \; \;; +55.2429 \; 96.4037 52.212 \; 96.3841 42.7778 \; \;; #X scalar trace-template 640 0 13 \; 94.2517 62.278 \; 94.1561 59.1415 \; 93.9766 57.232 \; 93.8438 54.297 \; \;; #X scalar trace-template 640 0 14 \; 94.3441 59.5835 \; 94.4502 57.4434 @@ -1865,7 +1850,7 @@ float ampimag float used; #X scalar trace-template 640 0 20 \; 91.6198 52.5509 \; \;; #X scalar trace-template 640 0 21 \; 76.7735 51.5719 \; 76.928 52.9243 \; 77.1241 51.2043 \; 77.3901 51.3419 \; 77.3609 50.3932 \; 77.3166 -48.0167 \; 77.0858 43.0034 \; \;; +48.0167 \; 77.0858 43.0034 \; 77.1538 36.6223 \; \;; #X scalar trace-template 640 0 23 \; 118.519 49.7004 \; \;; #X scalar trace-template 640 0 24 \; 79.0453 50.9433 \; \;; #X scalar trace-template 645 0 0 \; 53.4769 82.0777 \; \;; @@ -1873,35 +1858,37 @@ float ampimag float used; #X scalar trace-template 645 0 19 \; 93.532 61.6672 \; \;; #X scalar trace-template 645 0 20 \; 72.4406 60.6394 \; 73.1711 63.8493 \; 73.1219 63.4485 \; 73.005 60.9634 \; 72.9752 58.2399 \; 73.1187 -54.2194 \; \;; +54.2194 \; 73.3839 47.2874 \; \;; #X scalar trace-template 645 0 23 \; 98.3726 54.6578 \; 98.4334 56.3528 \; 98.4641 55.9416 \; 98.4242 52.0511 \; \;; #X scalar trace-template 645 0 24 \; 23.7851 54.8485 \; \;; #X scalar trace-template 650 0 0 \; 97.3061 58.5622 \; 97.2776 59.1141 -\; 97.492 54.2353 \; 97.5989 51.8676 \; 97.6619 47.3976 \; \;; +\; 97.492 54.2353 \; 97.5989 51.8676 \; 97.6619 47.3976 \; 97.7072 +42.3447 \; \;; #X scalar trace-template 650 0 1 \; 95.4167 56.8196 \; 95.3126 55.3792 -\; 95.3283 46.7388 \; 95.1306 46.7253 \; 95.147 41.728 \; \;; +\; 95.3283 46.7388 \; 95.1306 46.7253 \; 95.147 41.728 \; 95.1422 31.6234 +\; \;; #X scalar trace-template 650 0 7 \; 89.5699 53.2536 \; \;; #X scalar trace-template 650 0 19 \; 88.6175 52.5698 \; \;; #X scalar trace-template 650 0 22 \; 79.2767 52.119 \; 79.3102 49.5639 \; \;; #X scalar trace-template 650 0 24 \; 98.8685 51.0232 \; \;; #X scalar trace-template 655 0 7 \; 70.258 62.8691 \; 70.374 60.7793 -\; 70.0017 59.3662 \; 69.5226 57.7477 \; \;; +\; 70.0017 59.3662 \; 69.5226 57.7477 \; 69.2726 53.9426 \; \;; #X scalar trace-template 655 0 15 \; 95.7851 55.4228 \; 95.6031 52.903 -\; 95.7044 50.4609 \; 95.6995 45.5615 \; \;; +\; 95.7044 50.4609 \; 95.6995 45.5615 \; 95.7317 36.6126 \; \;; #X scalar trace-template 655 0 19 \; 94.3768 51.2544 \; 94.1946 47.8939 \; 94.328 44.6819 \; 94.3675 37.5612 \; \;; #X scalar trace-template 655 0 24 \; 98.1845 50.7136 \; 98.0865 53.434 \; 98.1691 51.3942 \; 98.141 44.0651 \; \;; #X scalar trace-template 660 0 11 \; 98.6655 52.1347 \; 98.7443 47.6732 -\; 98.701 40.7718 \; \;; +\; 98.701 40.7718 \; 98.5641 33.037 \; \;; #X scalar trace-template 660 0 13 \; 89.1909 46.575 \; \;; #X scalar trace-template 660 0 14 \; 91.9512 47.5126 \; 91.8357 44.1274 \; \;; #X scalar trace-template 660 0 22 \; 74.884 44.8679 \; \;; #X scalar trace-template 665 0 13 \; 83.71 44.657 \; 83.6094 41.5368 -\; \;; +\; 83.4625 35.8475 \; \;; #X scalar trace-template 665 0 16 \; 85.0166 43.8889 \; 84.8868 38.345 \; \;; #X scalar trace-template 665 0 17 \; 92.0268 44.2326 \; \;; @@ -1909,11 +1896,21 @@ float ampimag float used; \; \;; #X scalar trace-template 665 0 23 \; 80.9979 42.8421 \; 80.2868 38.7355 \; \;; -#X scalar trace-template 670 0 2 \; 74.5494 42.9236 \; \;; -#X scalar trace-template 670 0 14 \; 79.3738 37.7132 \; \;; +#X scalar trace-template 670 0 2 \; 74.5494 42.9236 \; 75.5378 31.8189 +\; \;; +#X scalar trace-template 670 0 14 \; 79.3738 37.7132 \; 79.8307 32.7729 +\; \;; #X scalar trace-template 670 0 17 \; 117.855 37.7543 \; \;; -#X scalar trace-template 670 0 18 \; 89.2631 35.1317 \; \;; -#X coords 0 131.5 1 131.25 0 0 0; +#X scalar trace-template 670 0 18 \; 89.2631 35.1317 \; 88.8674 31.6083 +\; \;; +#X scalar trace-template 675 0 6 \; 61.992 62.9456 \; \;; +#X scalar trace-template 675 0 16 \; 96.639 44.4503 \; \;; +#X scalar trace-template 675 0 17 \; 97.5821 39.3311 \; \;; +#X scalar trace-template 675 0 19 \; 97.9042 34.8348 \; \;; +#X scalar trace-template 675 0 22 \; 118.426 34.3165 \; \;; +#X scalar trace-template 675 0 23 \; 77.2983 31.9226 \; \;; +#X scalar trace-template 675 0 24 \; 118.155 32.5065 \; \;; +#X coords 0 127 1 126.75 0 0 0; #X restore 298 436 pd trace-list; #N canvas 375 90 563 188 trace-template 0; #X text 121 93 This template describes a pitch/amplitude trace. The @@ -1923,7 +1920,7 @@ point.; #X obj 125 36 struct trace-template float x float y float voiceno array bazoo point-template; #X obj 121 72 plot bazoo 0 1 0 0 5; -#X restore 417 546 pd trace-template; +#X restore 418 536 pd trace-template; #N canvas 96 258 494 158 point-template 0; #X text 127 56 This template describes a single point on a pitch trace (cf. trace-template w describes the trace itself.); @@ -1931,12 +1928,11 @@ bazoo point-template; - 4 * pitch. You also get an "amp" field in dB \, which you can't see as a plot (yet).; #X obj 212 14 struct point-template float y float amp; -#X restore 417 567 pd point-template; -#X msg 746 506 bang; +#X restore 418 557 pd point-template; #X obj 8 425 pack 0 100; #X obj 8 449 line~; #X obj 8 404 dbtorms; -#X floatatom 545 73 0 0 110 0 - - -; +#X floatatom 545 71 0 0 110 0 - - -; #N canvas 193 52 730 722 output 0; #X obj 295 76 t b f; #X obj 286 100 +; @@ -2002,16 +1998,14 @@ as a plot (yet).; #X obj 103 57 r loop-amp; #X connect 1 0 0 0; #X connect 2 0 1 0; -#X restore 545 50 pd; +#X restore 545 48 pd; #X obj 8 493 *~; #X obj 9 544 hip~ 5; #X obj 9 571 dac~; -#X obj 754 529 adc~; +#X obj 740 531 adc~; #X obj 545 94 s loop-amp; -#X msg 820 48 mute; +#X msg 820 46 mute; #X text 33 110 click here first; -#X text 741 489 live sample; -#X text 677 25 AMPLITUDES; #N canvas 357 94 1152 664 make-trace 0; #X obj 781 133 pointer; #X obj 757 603 setsize trace-template bazoo; @@ -2150,17 +2144,17 @@ as a plot (yet).; #X connect 41 0 15 0; #X connect 42 0 4 0; #X connect 44 0 36 0; -#X restore 417 503 pd make-trace; +#X restore 418 493 pd make-trace; #X floatatom 74 236 0 0 0 0 location location-set location; #X obj 106 417 r loop-amp; #X obj 737 288 f; #X obj 777 288 +; #X msg 695 330 0; #X msg 694 247 1; -#X msg 737 337 \; location \$1 \; snapshot bang; +#X msg 739 372 \; location \$1 \; snapshot bang; #X floatatom 655 305 0 0 0 0 - - -; #X obj 628 231 t b b; -#X obj 838 270 r incr; +#X obj 813 262 r incr; #X obj 8 383 r grain-amp; #X obj 121 467 r osc-amp; #X obj 143 553 catch~ osc-sum; @@ -2370,7 +2364,7 @@ as a plot (yet).; #X connect 33 0 21 0; #X connect 37 0 42 0; #X connect 42 0 28 0; -#X restore 417 458 pd osc-bank; +#X restore 418 448 pd osc-bank; #X obj 647 98 s grain-amp; #N canvas 207 50 820 345 save-list 0; #X floatatom 759 255 0 0 0 0 - - -; @@ -2419,15 +2413,14 @@ as a plot (yet).; #X connect 18 0 15 1; #X connect 20 0 5 0; #X connect 21 0 4 0; -#X restore 417 481 pd save-list; +#X restore 418 471 pd save-list; #X msg 139 349 \; start-resynth bang; #X msg 301 350 \; step-resynth bang; #X msg 461 352 \; osc-stop bang; -#X text 780 116 resynth; -#X text 643 115 analyzed grains; -#X text 545 113 original; +#X text 772 121 resynth; +#X text 643 117 analyzed grains; +#X text 544 114 original; #X text 597 146 ... and here third to analyze; -#X text 310 107 read a sample; #N canvas 189 52 500 453 test-signal 0; #X obj 174 293 tabread4~ sample; #X obj 174 268 line~; @@ -2475,32 +2468,61 @@ as a plot (yet).; #X connect 20 1 11 0; #X connect 20 1 2 1; #X restore 106 440 pd test-signal; -#N canvas 132 255 634 331 insample 0; +#N canvas 468 322 763 322 insample 0; #N canvas 0 50 450 300 (subpatch) 0; #X array sample 62079 float 0; #X coords 0 1 62078 -1 400 150 1; -#X restore 259 18 graph; -#X obj 25 70 r read-sample; -#X obj 25 95 unpack s f; -#X obj 69 121 s insamprate; -#X obj 25 171 soundfiler; -#X msg 25 147 read -resize \$1 sample; -#X obj 25 201 s insamplength; -#X msg 464 197 \; sample resize 220500 \; insamplength 220500; -#X obj 42 272 declare -path lib; +#X restore 326 22 graph; +#X obj 13 10 r read-sample; +#X obj 13 35 unpack s f; +#X obj 57 61 s insamprate; +#X obj 13 111 soundfiler; +#X msg 13 87 read -resize \$1 sample; +#X obj 12 137 s insamplength; +#X obj 604 196 declare -path lib; +#X obj 11 192 t f b; +#X obj 59 193 samplerate~; +#X obj 11 218 /; +#X obj 61 219 r incr; +#X obj 11 243 *; +#X obj 61 244 expr 10000/$f1; +#X obj 184 100 r resize-sample; +#X obj 184 125 t f b; +#X obj 226 126 samplerate~; +#X obj 226 151 / 1000; +#X obj 184 150 *; +#X obj 10 166 r insamplength; +#X msg 185 206 \; sample resize \$1 \; insamplength \$1; +#X floatatom 195 175 6 0 0 0 - - -; +#X msg 172 20 \; resize-sample 2000; +#X obj 11 268 + 60; +#X obj 11 293 s sample-msec; #X connect 1 0 2 0; #X connect 2 0 5 0; #X connect 2 1 3 0; #X connect 4 0 6 0; #X connect 5 0 4 0; +#X connect 8 0 10 0; +#X connect 8 1 9 0; +#X connect 9 0 10 1; +#X connect 10 0 12 0; +#X connect 11 0 13 0; +#X connect 12 0 23 0; +#X connect 13 0 12 1; +#X connect 14 0 15 0; +#X connect 15 0 18 0; +#X connect 15 1 16 0; +#X connect 16 0 17 0; +#X connect 17 0 18 1; +#X connect 18 0 21 0; +#X connect 18 0 20 0; +#X connect 19 0 8 0; +#X connect 23 0 24 0; #X restore 296 509 pd insample; -#X obj 744 553 tabwrite~ sample; +#X obj 727 559 tabwrite~ sample; #X text 152 0 SINUSOID TRACKING; -#X obj 752 268 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 --1; -#X obj 301 306 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 +#X obj 301 306 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1; -#X msg 207 130 \; read-sample ../doc/sound/bell.aiff 44100; #N canvas 143 192 728 480 sigmund 0; #X obj 2 227 spigot; #X obj 165 94 f; @@ -2535,7 +2557,7 @@ as a plot (yet).; #X obj 1 253 print p; #X obj 165 186 sigmund~ -t -npts 1024 -npeak 40 -maxfreq 8000 peaks tracks; -#X floatatom 507 135 5 1 50 0 - - -, f 5; +#X floatatom 507 135 5 1 50 0 - - -; #X msg 507 155 npeak \$1; #X obj 506 109 r nvoice; #X connect 0 0 27 0; @@ -2571,16 +2593,14 @@ tracks; #X connect 29 0 30 0; #X connect 30 0 28 0; #X connect 31 0 29 0; -#X restore 417 436 pd sigmund; -#X msg 206 167 \; read-sample ../doc/sound/voice.wav 44100; -#X msg 206 206 \; read-sample ../doc/sound/voice2.wav 44100; -#X obj 737 311 moses 1350; -#X text 142 246 to resynthesize \, "start" once and "step" ad lib. +#X restore 418 426 pd sigmund; +#X obj 736 338 moses 1350; +#X text 146 249 to resynthesize \, "start" once and "step" ad lib. To stop \, stop stepping and hit osc-stop. Note resynth amplitude control above.; #X msg 24 127 \; pd dsp 1 \; window-size 2048 \; sample-rate 44100 \; incr 10; -#X obj 737 245 metro 50; +#X obj 737 258 metro 50; #X obj 301 326 metro 10; #N canvas 0 50 1028 393 misc 0; #X floatatom 56 120 0 0 0 0 - - -; @@ -2650,7 +2670,7 @@ of tracks may range from 1 to 50. You can edit the tracks (but note that the resynthesizer is limited to 50-voice polyphony.); #X obj 628 170 bng 25 250 50 0 empty empty empty 17 7 0 10 -262144 -1 -1; -#X msg 618 353 \; location 0 \; clear-all bang; +#X msg 622 358 \; location 0 \; clear-all bang; #N canvas 2 261 838 506 grain 0; #X floatatom 305 194 0 0 0 0 - - -; #X obj 454 160 r sample-rate; @@ -2708,50 +2728,70 @@ that the resynthesizer is limited to 50-voice polyphony.); #X connect 25 0 26 0; #X connect 26 0 24 0; #X restore 22 470 pd grain; +#X floatatom 813 339 5 0 0 0 - - -; +#X obj 727 462 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 +-1 -1; +#X text 747 461 live 3" sample; +#X msg 742 490 \; resize-sample 3000; +#X obj 601 486 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 +-1 -1; +#X obj 601 506 openpanel; +#X obj 601 531 s read-sample; +#X text 594 448 browse for soundfile, f 10; +#X text 582 19 AMPLITUDES \, dB \, 100-based; +#X text 210 106 Then read a sample (or record below right); +#X msg 204 128 \; read-sample ../sound/voice.wav 44100; +#X msg 204 169 \; read-sample ../sound/voice2.wav 44100; +#X msg 203 208 \; read-sample ../sound/bell.aiff 44100; +#X obj 814 314 r sample-msec; #X connect 0 0 2 0; #X connect 1 0 0 0; #X connect 3 0 4 0; #X connect 4 0 6 0; #X connect 5 0 3 0; -#X connect 6 0 26 0; -#X connect 7 0 72 1; -#X connect 8 0 37 1; -#X connect 9 0 72 0; -#X connect 10 0 38 1; -#X connect 11 0 49 0; +#X connect 6 0 25 0; +#X connect 7 0 64 1; +#X connect 8 0 34 1; +#X connect 9 0 64 0; +#X connect 10 0 35 1; +#X connect 11 0 46 0; #X connect 12 0 11 0; -#X connect 18 0 61 0; -#X connect 19 0 20 0; -#X connect 20 0 25 0; -#X connect 21 0 19 0; -#X connect 22 0 29 0; -#X connect 24 0 22 0; +#X connect 18 0 19 0; +#X connect 19 0 24 0; +#X connect 20 0 18 0; +#X connect 21 0 28 0; +#X connect 23 0 21 0; +#X connect 24 0 25 0; #X connect 25 0 26 0; -#X connect 26 0 27 0; -#X connect 26 0 27 1; -#X connect 28 0 61 0; -#X connect 30 0 23 0; -#X connect 36 0 59 0; -#X connect 37 0 38 0; -#X connect 37 0 42 0; -#X connect 37 0 69 0; -#X connect 38 0 37 1; -#X connect 39 0 9 0; -#X connect 40 0 9 0; -#X connect 43 0 40 0; -#X connect 43 1 8 0; -#X connect 43 1 82 0; -#X connect 44 0 10 0; -#X connect 45 0 21 0; -#X connect 46 0 5 0; -#X connect 47 0 6 1; -#X connect 59 0 26 0; -#X connect 63 0 37 0; -#X connect 64 0 73 0; -#X connect 69 0 41 0; -#X connect 69 1 39 0; -#X connect 72 0 37 0; -#X connect 73 0 52 0; -#X connect 77 0 73 1; -#X connect 81 0 43 0; -#X connect 83 0 25 1; +#X connect 25 0 26 1; +#X connect 27 0 57 0; +#X connect 29 0 22 0; +#X connect 33 0 55 0; +#X connect 34 0 35 0; +#X connect 34 0 39 0; +#X connect 34 0 61 0; +#X connect 35 0 34 1; +#X connect 36 0 9 0; +#X connect 37 0 9 0; +#X connect 40 0 37 0; +#X connect 40 1 8 0; +#X connect 40 1 74 0; +#X connect 41 0 10 0; +#X connect 42 0 20 0; +#X connect 43 0 5 0; +#X connect 44 0 6 1; +#X connect 55 0 25 0; +#X connect 59 0 65 0; +#X connect 61 0 38 0; +#X connect 61 1 36 0; +#X connect 64 0 34 0; +#X connect 65 0 49 0; +#X connect 69 0 65 1; +#X connect 73 0 40 0; +#X connect 75 0 24 1; +#X connect 76 0 61 1; +#X connect 77 0 57 0; +#X connect 77 0 79 0; +#X connect 80 0 81 0; +#X connect 81 0 82 0; +#X connect 89 0 76 0; diff --git a/doc/5.reference/clone-subpatch.pd b/doc/5.reference/clone-subpatch.pd deleted file mode 100644 index fc28d87d24..0000000000 --- a/doc/5.reference/clone-subpatch.pd +++ /dev/null @@ -1,38 +0,0 @@ -#N canvas 647 320 470 387 10; -#X obj 112 74 inlet; -#X obj 112 171 osc~; -#X obj 112 224 outlet~; -#X obj 112 193 *~; -#X obj 257 195 *~; -#X obj 257 223 *~; -#X obj 257 167 line~; -#X obj 256 122 del 10; -#X obj 112 96 t f b; -#X obj 112 118 mtof; -#X obj 256 144 pack 0 4000; -#X obj 175 124 pack 1 10; -#X text 32 26 This is the subpatch for the clone help patch. It plays -tones at pitches sent to its inlet.; -#X obj 333 303 float \$1; -#X obj 333 281 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 --1 -1; -#X obj 333 325 print; -#X text 129 306 You can access the instance number within the patch: -, f 27; -#X connect 0 0 8 0; -#X connect 1 0 3 0; -#X connect 3 0 2 0; -#X connect 4 0 5 0; -#X connect 4 0 5 1; -#X connect 5 0 3 1; -#X connect 6 0 4 0; -#X connect 6 0 4 1; -#X connect 7 0 10 0; -#X connect 8 0 9 0; -#X connect 8 1 7 0; -#X connect 8 1 11 0; -#X connect 9 0 1 0; -#X connect 10 0 6 0; -#X connect 11 0 6 0; -#X connect 13 0 15 0; -#X connect 14 0 13 0; diff --git a/doc/5.reference/help-intro.pd b/doc/5.reference/help-intro.pd index 671a7f4bc7..1b9d8860e3 100644 --- a/doc/5.reference/help-intro.pd +++ b/doc/5.reference/help-intro.pd @@ -109,23 +109,23 @@ #X text 121 1465 - write a number to a table; #X obj 21 1489 soundfiler; #X text 121 1489 - read and write tables to soundfiles; -#X obj 22 1596 loadbang; -#X text 122 1596 - bang on load; -#X obj 22 1679 netsend; -#X text 122 1679 - send messages over the internet; -#X obj 22 1702 netreceive; -#X text 122 1702 - receive them; -#X obj 22 1733 qlist; -#X text 122 1733 - message sequencer; -#X text 122 1757 - file to message converter; -#X obj 22 1815 openpanel; -#X text 122 1815 - "Open" dialog; -#X obj 22 1838 savepanel; -#X text 122 1838 - "Save as" dialog; -#X obj 22 1870 bag; -#X text 122 1870 - set of numbers; -#X obj 22 1894 poly; -#X text 122 1894 - polyphonic voice allocation; +#X obj 21 1590 loadbang; +#X text 121 1590 - bang on load; +#X obj 20 1690 netsend; +#X text 120 1690 - send messages over the internet; +#X obj 20 1713 netreceive; +#X text 120 1713 - receive them; +#X obj 20 1745 qlist; +#X text 120 1745 - message sequencer; +#X text 120 1769 - file to message converter; +#X obj 20 1822 openpanel; +#X text 120 1822 - "Open" dialog; +#X obj 20 1845 savepanel; +#X text 120 1845 - "Save as" dialog; +#X obj 21 1873 bag; +#X text 121 1873 - set of numbers; +#X obj 21 1897 poly; +#X text 121 1897 - polyphonic voice allocation; #X obj 21 1926 key; #X obj 55 1926 keyup; #X text 121 1926 - numeric key values from keyboard; @@ -205,33 +205,33 @@ #X text 123 3086 - read one block continuously from a table; #X text 18 3121 -------------------- AUDIO FILTERS ------------------------ ; -#X obj 24 3151 vcf~; -#X text 124 3151 - voltage controlled filter; -#X obj 24 3175 noise~; -#X text 124 3175 - white noise generator; -#X obj 24 3199 env~; -#X text 124 3199 - envelope follower; -#X obj 24 3223 hip~; -#X text 124 3223 - high pass filter; -#X obj 24 3247 lop~; -#X text 124 3247 - low pass filter; -#X obj 24 3271 bp~; -#X text 124 3271 - band pass filter; -#X obj 24 3295 biquad~; -#X text 124 3295 - raw filter; -#X obj 24 3319 samphold~; -#X text 124 3319 - sample and hold unit; -#X obj 24 3343 print~; -#X text 124 3343 - print out one or more "blocks"; -#X obj 24 3367 rpole~; -#X text 124 3367 - raw real-valued one-pole filter; -#X obj 24 3391 rzero~; -#X text 124 3391 - raw real-valued one-zero filter; -#X obj 24 3415 rzero_rev~; -#X text 127 3415 - time-reversed; -#X obj 24 3439 cpole~; -#X obj 83 3439 czero~; -#X text 220 3439 - corresponding complex-valued filters; +#X obj 23 3143 vcf~; +#X text 123 3143 - voltage controlled filter; +#X obj 23 3167 noise~; +#X text 123 3167 - white noise generator; +#X obj 23 3191 env~; +#X text 123 3191 - envelope follower; +#X obj 23 3215 hip~; +#X text 123 3215 - high pass filter; +#X obj 23 3239 lop~; +#X text 123 3239 - low pass filter; +#X obj 22 3288 bp~; +#X text 122 3288 - band pass filter; +#X obj 22 3312 biquad~; +#X text 122 3312 - raw filter; +#X obj 22 3336 samphold~; +#X text 122 3336 - sample and hold unit; +#X obj 22 3360 print~; +#X text 122 3360 - print out one or more "blocks"; +#X obj 22 3384 rpole~; +#X text 122 3384 - raw real-valued one-pole filter; +#X obj 22 3408 rzero~; +#X text 122 3408 - raw real-valued one-zero filter; +#X obj 22 3432 rzero_rev~; +#X text 125 3432 - time-reversed; +#X obj 22 3456 cpole~; +#X obj 81 3456 czero~; +#X text 218 3456 - corresponding complex-valued filters; #X text 18 3477 -------------------- AUDIO DELAY ------------------------ ; #X obj 24 3501 delwrite~; @@ -247,7 +247,7 @@ #X obj 23 3645 outlet; #X text 123 3645 - add an outlet to a pd; #X obj 23 3670 inlet~; -#X obj 83 3670 outlet~; +#X obj 77 3671 outlet~; #X obj 24 3798 struct; #X text 124 3798 - define a data structure; #X obj 24 3822 drawcurve; @@ -277,7 +277,7 @@ #X obj 25 4153 scalar; #X text 130 4475 (use tabwrite~ now); #X obj 30 4500 namecanvas; -#X obj 142 3439 czero_rev~; +#X obj 140 3456 czero_rev~; #X obj 26 2568 threshold~; #X text 126 2568 - detect signal thresholds; #X text 21 1970 ---------------------- AUDIO MATH ----------------------- @@ -318,9 +318,9 @@ #X obj 58 2043 -~; #X obj 89 2043 *~; #X obj 121 2043 /~; -#X obj 22 1620 declare; -#X text 122 1620 - set search path and/or load libraries; -#X text 161 3671 - signal versions; +#X obj 21 1614 declare; +#X text 121 1614 - set search path and/or load libraries; +#X text 146 3669 - signal versions; #X obj 22 1119 wrap; #X text 121 1119 - wrap a number to range [0 \, 1); #X text 126 2202 - wraparound (fractional part); @@ -338,7 +338,7 @@ #X text 123 1512 - create a named table; #X text 26 2417 ------------- GENERAL AUDIO MANIPULATION -------------- ; -#X text 122 1781 - general text handling; +#X text 120 1793 - general text handling; #X text 124 1539 - general array creation and manipulation; #X text 17 1393 ----------------- ARRAYS/TABLES ------------------- ; @@ -353,8 +353,8 @@ its "help window".; #X msg 30 4473 scope~; #X msg 30 4525 template; #X text 128 4525 (use struct now); -#X obj 22 1757 textfile; -#X obj 22 1781 text; +#X obj 20 1769 textfile; +#X obj 20 1793 text; #X obj 180 932 <<; #X obj 211 932 >>; #X obj 26 2126 sqrt~; @@ -384,7 +384,6 @@ its "help window".; #X obj 60 4367 stdout; #X obj 27 4421 bob~; #X text 123 4423 - Moog resonant filter model; -#X text 116 3697 - make copies of a subpatch; #X obj 24 3697 clone; #X obj 194 1204 midirealtimein; #X obj 24 3551 delread4~; @@ -408,10 +407,16 @@ its "help window".; #X obj 100 1365 fudiformat; #X text 196 1367 - FUDI messages to and from Pd lists; #X msg 76 3722 switch; -#X text 138 3720 - specify block size and overlap \, or \, if invoked +#X text 141 3721 - specify block size and overlap \, or \, if invoked as "switch" \, also switch subpatches on and off; #X obj 129 3871 drawsymbol; #X obj 24 3871 drawtext; #X text 224 3870 - draw text; -#X obj 22 1643 savestate; -#X text 122 1643 - mechanism for saving state of an abstraction; +#X obj 21 1637 savestate; +#X text 121 1637 - mechanism for saving state of an abstraction; +#X obj 23 3263 slop~; +#X text 122 3263 - slew-limiting (nonlinear) low pass filter; +#X obj 21 1660 pdcontrol; +#X text 121 1660 - communicate with canvas (for example \, to get directory) +; +#X text 116 3697 - multiple copies of a patch; diff --git a/doc/5.reference/list-help.pd b/doc/5.reference/list-help.pd index 92a8db802e..5a3f216078 100644 --- a/doc/5.reference/list-help.pd +++ b/doc/5.reference/list-help.pd @@ -87,7 +87,7 @@ list \, float \, or bang.); #X text 481 38 click for; #N canvas 298 281 608 420 append 0; #X obj 17 324 list append 1 2; -#X floatatom 17 154 5 0 0 0 - - -, f 5; +#X floatatom 17 154 5 0 0 0 - - -; #X msg 17 129 1 2 3; #X msg 17 82 list cis boom bah; #X msg 17 179 bang; @@ -126,7 +126,7 @@ list \, float \, or bang.); #X msg 79 231 list cis boom bah; #X msg 99 263 bang; #X obj 79 421 list split 2; -#X floatatom 182 396 3 0 5 0 - - -, f 3; +#X floatatom 182 396 3 0 5 0 - - -; #X obj 79 469 print split1; #X obj 198 470 print split2; #X msg 79 204 walk the dog; @@ -166,8 +166,8 @@ the split point.; #X connect 10 0 3 0; #X connect 11 0 3 0; #X restore 485 155 pd split; -#N canvas 0 50 640 478 prepend 0; -#X floatatom 17 154 5 0 0 0 - - -, f 5; +#N canvas 999 177 640 478 prepend 1; +#X floatatom 17 154 5 0 0 0 - - -; #X msg 17 129 1 2 3; #X msg 17 82 list cis boom bah; #X msg 17 179 bang; @@ -371,7 +371,7 @@ to its right inlet.; #X msg 126 257 x 1 y; #X msg 126 157 55; #X obj 101 285 list length; -#X floatatom 101 311 5 0 0 0 - - -, f 5; +#X floatatom 101 311 5 0 0 0 - - -; #X text 29 18 length - number of items in list; #X text 27 55 The "list length" object outputs the number of arguments in a list or other message.; @@ -391,14 +391,14 @@ in a list or other message.; #X text 154 235 - convert symbols to/from numeric characters, f 25 ; #N canvas 612 89 552 344 from/to 0; -#X symbolatom 64 254 10 0 0 0 - - -, f 10; +#X symbolatom 64 254 10 0 0 0 - - -; #X obj 64 277 list fromsymbol; #X text 83 9 fromsymbol and tosymbol - symbols to and from lists of numeric character codes, f 41; #X msg 230 232 115 101 118 101 110 116 101 101 110; #X obj 229 260 list tosymbol; #X obj 64 301 print from-symbol; -#X symbolatom 229 286 10 0 0 0 - - -, f 10; +#X symbolatom 229 286 10 0 0 0 - - -; #X msg 64 228 symbol seventeen; #X text 43 162 Neither of these objects promote non-list messages to lists (that would make little sense in this context).; @@ -413,8 +413,8 @@ a filename on a non-ASCII machine) to or from a symbol., f 63; #X connect 7 0 0 0; #X restore 486 250 pd from/to; #X text 140 133 - build up or break down a list; -#N canvas 587 184 629 666 store 0; -#X floatatom 17 137 5 0 0 0 - - -, f 5; +#N canvas 688 179 629 666 store 0; +#X floatatom 17 137 5 0 0 0 - - -; #X msg 17 112 1 2 3; #X msg 17 85 list cis boom bah; #X msg 17 162 bang; @@ -429,7 +429,6 @@ a filename on a non-ASCII machine) to or from a symbol., f 63; #X text 277 468 (note: only the first item; #X text 282 485 need be a number to make this; #X text 284 503 a list.); -#X text 171 525 <- creation args initialize the list to prepend; #X text 20 6 Store - put together or break apart a list to/from sublists ; #X text 270 414 right inlet can take non-list messages; @@ -442,28 +441,29 @@ message with stored list:; #X text 129 255 append a list to the stored list; #X obj 17 523 list store 1 2; #X obj 17 587 print store-left; -#X obj 126 562 print store-right; +#X obj 112 560 print store-right; #X text 105 309 output a sublist \, starting with item 1 (counting from zero) \, of length 3 If there are fewer than 3 items available a "bang" is sent to right outlet.; -#X text 158 588 output of "range" message on success; -#X text 276 561 bang if "range" message fails; #X text 67 164 bang is zero-element list - this output the stored list ; #X msg 17 308 get 1 3; -#X connect 0 0 24 0; -#X connect 1 0 24 0; -#X connect 2 0 24 0; -#X connect 3 0 24 0; -#X connect 4 0 24 1; -#X connect 5 0 24 1; -#X connect 6 0 24 1; -#X connect 7 0 24 1; -#X connect 20 0 24 0; -#X connect 22 0 24 0; -#X connect 24 0 25 0; -#X connect 24 1 26 0; -#X connect 31 0 24 0; +#X text 262 559 bang if "get" message fails; +#X text 158 588 output of "get" message on success; +#X text 171 525 <- creation args initialize the stored list; +#X connect 0 0 23 0; +#X connect 1 0 23 0; +#X connect 2 0 23 0; +#X connect 3 0 23 0; +#X connect 4 0 23 1; +#X connect 5 0 23 1; +#X connect 6 0 23 1; +#X connect 7 0 23 1; +#X connect 19 0 23 0; +#X connect 21 0 23 0; +#X connect 23 0 24 0; +#X connect 23 1 25 0; +#X connect 28 0 23 0; #X restore 484 130 pd store; #X text 356 550 updated for Pd version 0.48; #X obj 22 132 list store; diff --git a/doc/5.reference/out1~.pd b/doc/5.reference/out1~.pd index f3e4698155..f555a8d432 100644 --- a/doc/5.reference/out1~.pd +++ b/doc/5.reference/out1~.pd @@ -1,60 +1,150 @@ -#N canvas 2 52 584 580 12; -#X obj 336 490 t b; -#X obj 336 437 f; -#X obj 336 515 f; -#X msg 450 514 0; -#X obj 336 467 moses 1; -#X obj 450 486 t b f; -#X obj 416 447 moses 1; -#X obj 29 97 dbtorms; -#X obj 114 192 inlet~; -#X msg 444 236 \; pd dsp 1; -#X obj 28 202 line~; -#X obj 64 242 *~; -#X obj 64 272 dac~; -#X obj 29 127 pack 0 50; -#X text 121 146 audio in; -#X text 121 464 test if less than 1 -->; -#X text 87 491 if true convert to bang -->; -#X text 100 96 <-- convert from dB to linear units; -#X floatatom 323 219 3 0 100 0 dB - -, f 3; -#X obj 337 238 bng 15 250 50 0 empty empty mute -38 7 0 12 -262144 --1 -1; -#X text 118 126 <-- make a ramp to avoid clicks or zipper noise; -#X text 356 378 MUTE logic:; -#X obj 323 174 r \$0-master-lvl; -#X obj 336 541 s \$0-master-lvl; -#X obj 323 279 s \$0-master-out; -#X obj 29 71 r \$0-master-out; -#X obj 416 418 r \$0-master-out; -#X text 60 10 Level control abstraction \, used in many of the Pd example -patches. The "level" and "mute" controls show up on the parent \, calling -patch.; -#X text 49 517 previous nonzero master-lvl -->; -#X text 121 421 recall previous; -#X text 121 439 value of master-lvl -->; -#X text 39 319 automatically start DSP -->; -#X obj 114 221 hip~ 3; +#N canvas 371 339 803 575 12; +#X obj 353 490 t b; +#X obj 353 437 f; +#X obj 353 515 f; +#X msg 467 514 0; +#X obj 353 467 moses 1; +#X obj 467 486 t b f; +#X obj 433 447 moses 1; +#X obj 33 182 inlet~; +#X msg 189 179 \; pd dsp 1; +#X obj 111 381 line~; +#X obj 52 415 *~; +#X obj 52 445 dac~; +#X floatatom 33 48 3 0 100 0 - #0-lvl-set #0-lvl; +#X obj 33 69 bng 15 250 50 0 \$0-mute \$0-mute-set empty -38 7 0 12 +-262144 -1 -1; +#X obj 33 204 hip~ 3; +#X obj 33 103 hsl 20 12 1 9 0 0 \$0-pan \$0-pan-set empty -2 -8 0 10 +-262144 -1 -1 950 1; +#X obj 495 15 r \$0-lvl; +#X msg 495 40 set \$1; +#X obj 495 65 s \$0-lvl-set; +#X obj 60 103 bng 12 250 50 0 \$0-ctr-pan \$0-ctr-pan-set empty -38 +7 0 12 -262144 -1 -1; +#X obj 85 32 vu 10 80 \$0-vu empty -1 -8 0 10 -66577 -1 0 0; +#X obj 603 541 s \$0-vu; +#X obj 227 25 inlet; +#X obj 399 12 inlet; +#X msg 591 39 set \$1; +#X obj 591 14 r \$0-pan; +#X obj 591 64 s \$0-pan-set; +#X obj 140 45 r \$0-lvl; +#X obj 140 77 f; +#X obj 399 40 f; +#X obj 290 17 r \$0-pan; +#X obj 111 341 pack 0 30, f 5; +#X text 52 66 mute; +#X text 31 84 pan; +#X obj 578 103 r \$0-ctr-pan; +#X obj 290 42 f; +#X floatatom 291 126 5 0 0 0 - - -; +#X obj 290 67 - 5; +#X obj 290 92 * 0.25; +#X obj 432 418 r \$0-lvl; +#X obj 353 541 s \$0-lvl; +#X obj 353 410 r \$0-mute; +#X obj 579 160 s \$0-pan; +#X obj 112 130 expr pow($f1*0.01 \, 4); +#X obj 140 102 max 0; +#X obj 306 176 expr 1.5*$f1-0.5*($f1*$f1*$f1); +#X obj 291 150 clip -1 1; +#X obj 489 235 expr 0.5*($f1+1); +#X obj 303 236 expr 0.5*(1-$f1); +#X obj 294 285 expr $f1 + 0.25*($f1+$f2); +#X obj 491 286 expr $f2 + 0.25*($f1+$f2); +#X obj 694 103 loadbang; +#X obj 167 381 line~; +#X obj 108 415 *~; +#X obj 167 341 pack 0 30, f 5; +#X text 373 378 MUTE logic; +#X obj 88 205 line~; +#X obj 88 165 pack 0 30, f 5; +#X obj 36 232 *~; +#X obj 306 201 t f f; +#X obj 607 357 abs~; +#X obj 607 382 slop~ 0 0 0.3 0 1e+09; +#X obj 678 420 metro 100; +#X obj 604 420 snapshot~; +#X obj 604 445 rmstodb; +#X obj 604 470 moses 1; +#X msg 605 505 -100; +#X obj 652 500 - 88; +#X msg 578 128 5; +#X obj 209 73 s \$0-lvl; +#X obj 227 50 max 0; +#X obj 399 65 clip 0 100; +#X obj 399 90 / 12.5; +#X obj 399 140 s \$0-pan; +#X obj 399 115 + 1; +#X text 59 48 lvl; #X connect 0 0 2 0; #X connect 1 0 4 0; -#X connect 2 0 23 0; -#X connect 3 0 23 0; +#X connect 2 0 40 0; +#X connect 3 0 40 0; #X connect 4 0 0 0; #X connect 4 1 5 0; #X connect 5 0 3 0; #X connect 6 1 2 1; -#X connect 7 0 13 0; -#X connect 8 0 32 0; +#X connect 7 0 14 0; +#X connect 9 0 10 1; #X connect 10 0 11 0; -#X connect 11 0 12 0; -#X connect 11 0 12 1; -#X connect 13 0 10 0; -#X connect 18 0 9 0; -#X connect 18 0 24 0; -#X connect 19 0 1 0; -#X connect 22 0 18 0; -#X connect 25 0 7 0; -#X connect 26 0 1 1; -#X connect 26 0 6 0; -#X connect 32 0 11 1; -#X coords 0 0 1 1 55 55 1 300 200; +#X connect 14 0 58 0; +#X connect 16 0 17 0; +#X connect 17 0 18 0; +#X connect 22 0 70 0; +#X connect 23 0 29 0; +#X connect 24 0 26 0; +#X connect 25 0 24 0; +#X connect 27 0 28 0; +#X connect 28 0 44 0; +#X connect 29 0 71 0; +#X connect 30 0 35 0; +#X connect 31 0 9 0; +#X connect 34 0 68 0; +#X connect 35 0 37 0; +#X connect 36 0 46 0; +#X connect 37 0 38 0; +#X connect 38 0 36 0; +#X connect 39 0 1 1; +#X connect 39 0 6 0; +#X connect 41 0 1 0; +#X connect 43 0 57 0; +#X connect 43 0 8 0; +#X connect 44 0 43 0; +#X connect 45 0 59 0; +#X connect 46 0 45 0; +#X connect 46 0 8 0; +#X connect 47 0 49 1; +#X connect 47 0 50 1; +#X connect 48 0 49 0; +#X connect 48 0 50 0; +#X connect 49 0 31 0; +#X connect 50 0 54 0; +#X connect 51 0 68 0; +#X connect 51 0 62 0; +#X connect 52 0 53 1; +#X connect 53 0 11 1; +#X connect 54 0 52 0; +#X connect 56 0 58 1; +#X connect 57 0 56 0; +#X connect 58 0 10 0; +#X connect 58 0 53 0; +#X connect 58 0 60 0; +#X connect 59 0 48 0; +#X connect 59 1 47 0; +#X connect 60 0 61 0; +#X connect 61 0 63 0; +#X connect 62 0 63 0; +#X connect 63 0 64 0; +#X connect 64 0 65 0; +#X connect 65 0 66 0; +#X connect 65 1 67 0; +#X connect 66 0 21 0; +#X connect 67 0 21 0; +#X connect 68 0 42 0; +#X connect 70 0 69 0; +#X connect 71 0 72 0; +#X connect 72 0 74 0; +#X connect 74 0 73 0; +#X coords 0 0 1 1 67 85 1 30 30; diff --git a/doc/5.reference/pdcontrol-abs.pd b/doc/5.reference/pdcontrol-abs.pd new file mode 100644 index 0000000000..5c96a5379c --- /dev/null +++ b/doc/5.reference/pdcontrol-abs.pd @@ -0,0 +1,9 @@ +#N canvas 674 311 471 296 12; +#X obj 149 108 inlet; +#X obj 149 228 outlet; +#X obj 149 165 pdcontrol; +#X text 78 28 This is the abstraction for the pdcontrol help patch. +It serves an example on how it gets the arguments of an abstraction. +, f 41; +#X connect 0 0 2 0; +#X connect 2 0 1 0; diff --git a/doc/5.reference/pdcontrol-help.pd b/doc/5.reference/pdcontrol-help.pd new file mode 100644 index 0000000000..a60b013446 --- /dev/null +++ b/doc/5.reference/pdcontrol-help.pd @@ -0,0 +1,57 @@ +#N canvas 404 92 712 514 12; +#X obj 21 14 pdcontrol; +#X text 100 14 -- communicate with pd and/or this patch; +#X text 446 470 updated for Pd version 0.50.; +#X obj 35 275 pdcontrol; +#X obj 35 300 print; +#X msg 43 150 isvisible; +#X msg 34 382 isvisible; +#N canvas 830 272 450 300 subpatch 0; +#X obj 37 37 inlet; +#X obj 37 62 pdcontrol; +#X obj 37 87 print; +#X connect 0 0 1 0; +#X connect 1 0 2 0; +#X restore 34 407 pd subpatch; +#X text 121 381 open and shut the subpatch to test "isvisible" message +; +#X text 131 148 1 if this patch is visible \, 0 if not; +#X msg 51 176 dir; +#X text 98 176 get directory this patch is in; +#X msg 57 214 dir 0 ../3.audio-examples/A00.intro.pd, f 32; +#N canvas 689 91 529 365 args 0; +#X obj 127 209 print; +#X text 185 140 <= get arguments; +#X obj 127 174 pdcontrol-abs foo 100 \$0-x \\\$0 \$1 \$2-x; +#X msg 127 140 args 0; +#X text 40 23 This is useful for managing a variable number of arguments. +When it receives the 'args' message \, [pdcontrol] outputs the loaded +arguments. An optional argument specifies this patch (0) \, owning +patch (1) \, its own owner (2) \, and so on. (Ownership number is silently +reduced if owners don't exist \, so here anything greater than zero +is ignored.), f 65; +#X text 44 247 Above there's a simple abstraction to show how it works. +Note how dollar signs (such as "\$0" \, "\$1" or "\$2-x") get expanded +unless you escape them with a backlash ("\$2-x" may appear as an unexpanded +symbol \, but it actually gets expanded if this abstraction is called +inside another that contains arguments).; +#X connect 2 0 0 0; +#X connect 3 0 2 0; +#X restore 64 338 pd args; +#X text 127 338 get the patch's arguments; +#X text 237 119 open a URL in a browser; +#X msg 35 120 browse http://msp.ucsd.edu; +#X text 306 206 Optional argument to specify this patch (0) \, owning +patch (1) \, its own owner (2) \, and so on \, and optionally also +a filename relative to the patch's directory. (Ownership number is +silently reduced if owners don't exist \, so here anything greater +than zero is ignored.), f 42; +#X text 31 41 pdcontrol lets you communicate with the patch to get +its owning directory \, arguments \, its visible/invisible state \, +or to open a URL in a web browser.; +#X connect 3 0 4 0; +#X connect 5 0 3 0; +#X connect 6 0 7 0; +#X connect 10 0 3 0; +#X connect 12 0 3 0; +#X connect 16 0 3 0; diff --git a/doc/5.reference/setctl.pd b/doc/5.reference/setctl.pd new file mode 100644 index 0000000000..3433b998b0 --- /dev/null +++ b/doc/5.reference/setctl.pd @@ -0,0 +1,6 @@ +#N canvas 2 52 450 300 10; +#X msg 149 151 set \$1; +#X obj 152 96 r \$1; +#X obj 150 176 s \$1-set; +#X connect 0 0 2 0; +#X connect 1 0 0 0; diff --git a/doc/5.reference/slop~-help.pd b/doc/5.reference/slop~-help.pd new file mode 100644 index 0000000000..9c38b7c956 --- /dev/null +++ b/doc/5.reference/slop~-help.pd @@ -0,0 +1,671 @@ +#N canvas 379 87 1020 642 12; +#X obj 64 91 osc~; +#N canvas 0 50 450 250 (subpatch) 0; +#X array \$0-graph 1000 float 3; +#A 0 -0.239854 -0.245719 -0.251574 -0.25742 -0.263255 -0.269079 -0.274893 +-0.280696 -0.286488 -0.292268 -0.298037 -0.303793 -0.309538 -0.315271 +-0.320991 -0.326698 -0.332393 -0.338074 -0.343743 -0.349397 -0.355039 +-0.360666 -0.366279 -0.371878 -0.377463 -0.383033 -0.388588 -0.394128 +-0.399653 -0.405162 -0.410656 -0.416135 -0.421597 -0.427043 -0.432473 +-0.437887 -0.443284 -0.448664 -0.454028 -0.459374 -0.464539 -0.469444 +-0.474091 -0.478482 -0.482619 -0.486504 -0.49014 -0.493527 -0.496669 +-0.499566 -0.502222 -0.504637 -0.506815 -0.508757 -0.510465 -0.511941 +-0.513187 -0.514205 -0.514997 -0.515566 -0.515913 -0.51604 -0.515949 +-0.515643 -0.515123 -0.514391 -0.51345 -0.512302 -0.510949 -0.509392 +-0.507635 -0.505678 -0.503525 -0.501178 -0.498637 -0.495907 -0.492988 +-0.489883 -0.486594 -0.483123 -0.479474 -0.475646 -0.471644 -0.467469 +-0.463124 -0.45861 -0.45393 -0.449086 -0.444081 -0.438916 -0.433594 +-0.428118 -0.422489 -0.41671 -0.410784 -0.404712 -0.398497 -0.392141 +-0.385647 -0.379017 -0.372253 -0.365358 -0.358334 -0.351183 -0.343909 +-0.33661 -0.329311 -0.322012 -0.314713 -0.307414 -0.300115 -0.292816 +-0.285517 -0.278218 -0.27092 -0.263621 -0.256322 -0.249023 -0.241724 +-0.234425 -0.227126 -0.219827 -0.212528 -0.205229 -0.19793 -0.190631 +-0.183332 -0.176033 -0.168734 -0.161435 -0.154136 -0.146837 -0.139538 +-0.132239 -0.12494 -0.117641 -0.110342 -0.103043 -0.0957445 -0.0884455 +-0.0811465 -0.0738476 -0.0665486 -0.0592497 -0.0519507 -0.0446517 -0.0373528 +-0.0300538 -0.0227548 -0.0154559 -0.00815693 -0.000857967 0.00644099 +0.01374 0.0210389 0.0283379 0.0356368 0.0429358 0.0502348 0.0575337 +0.0648327 0.0721316 0.0794306 0.0867296 0.0940285 0.101327 0.108626 +0.115925 0.123224 0.130523 0.137822 0.145121 0.15242 0.159719 0.167018 +0.174317 0.181616 0.188915 0.196214 0.203513 0.210812 0.218111 0.22541 +0.232709 0.240008 0.247307 0.254606 0.261905 0.269204 0.276502 0.283801 +0.2911 0.298399 0.305698 0.312997 0.320296 0.327595 0.334894 0.342193 +0.349492 0.356791 0.36409 0.371389 0.378688 0.385987 0.393286 0.400585 +0.407884 0.415182 0.422481 0.42978 0.437079 0.444378 0.451677 0.458976 +0.466275 0.473574 0.480873 0.488172 0.495471 0.50277 0.510069 0.517368 +0.524667 0.531966 0.539265 0.546564 0.553862 0.561161 0.568403 0.575451 +0.582305 0.588966 0.595432 0.601705 0.607784 0.61367 0.619362 0.624862 +0.630168 0.63528 0.6402 0.644928 0.649463 0.653806 0.657957 0.661916 +0.665684 0.669261 0.672647 0.675842 0.678848 0.681663 0.68429 0.686727 +0.688976 0.691037 0.692911 0.694597 0.696097 0.697411 0.69854 0.699484 +0.700244 0.70082 0.701213 0.701425 0.701454 0.701303 0.700972 0.700462 +0.699774 0.698908 0.697865 0.696646 0.695252 0.693685 0.691944 0.690031 +0.687946 0.685692 0.683268 0.680677 0.677918 0.674994 0.671904 0.668651 +0.665236 0.661659 0.657922 0.654027 0.649974 0.645764 0.6414 0.636882 +0.632212 0.627391 0.622421 0.617302 0.612037 0.606692 0.601337 0.595972 +0.590598 0.585214 0.579821 0.574417 0.569004 0.56358 0.558147 0.552703 +0.54725 0.541787 0.536313 0.53083 0.525336 0.519832 0.514318 0.508794 +0.50326 0.497716 0.492162 0.486597 0.481022 0.475438 0.469843 0.464238 +0.458623 0.452999 0.447364 0.441719 0.436065 0.4304 0.424726 0.419042 +0.413348 0.407645 0.401932 0.39621 0.390478 0.384737 0.378986 0.373226 +0.367457 0.361679 0.355891 0.350095 0.34429 0.338476 0.332654 0.326823 +0.320983 0.315136 0.30928 0.303415 0.297543 0.291663 0.285775 0.279879 +0.273976 0.268065 0.262147 0.256222 0.25029 0.244351 0.238405 0.232453 +0.226494 0.220528 0.214557 0.208579 0.202596 0.196607 0.190612 0.184612 +0.178607 0.172597 0.166582 0.160562 0.154537 0.148508 0.142475 0.136438 +0.130397 0.124353 0.118305 0.112253 0.106199 0.100141 0.0940813 0.0880188 +0.0819539 0.0758868 0.0698179 0.0637472 0.057675 0.0516014 0.0455267 +0.0394512 0.0333749 0.0272982 0.0212211 0.015144 0.00906699 0.00299037 +-0.00308567 -0.00916093 -0.0152352 -0.0213082 -0.0273798 -0.0334498 +-0.0395178 -0.0455838 -0.0516474 -0.0577085 -0.0637668 -0.0698221 -0.0758742 +-0.0819228 -0.0879677 -0.0940088 -0.100046 -0.106078 -0.112106 -0.118129 +-0.124148 -0.130161 -0.136168 -0.14217 -0.148165 -0.154155 -0.160138 +-0.166114 -0.172084 -0.178047 -0.184002 -0.18995 -0.19589 -0.201822 +-0.207745 -0.213661 -0.219567 -0.225465 -0.231353 -0.237233 -0.243102 +-0.248962 -0.254812 -0.260652 -0.266481 -0.2723 -0.278108 -0.283904 +-0.28969 -0.295463 -0.301226 -0.306976 -0.312714 -0.318439 -0.324153 +-0.329853 -0.33554 -0.341214 -0.346875 -0.352523 -0.358156 -0.363776 +-0.369381 -0.374972 -0.380548 -0.38611 -0.391657 -0.397189 -0.402705 +-0.408206 -0.413691 -0.419161 -0.424614 -0.430052 -0.435472 -0.440877 +-0.446265 -0.451636 -0.45699 -0.46227 -0.467291 -0.472052 -0.476557 +-0.480807 -0.484804 -0.48855 -0.492048 -0.495298 -0.498304 -0.501067 +-0.503589 -0.505873 -0.507919 -0.509731 -0.51131 -0.512658 -0.513777 +-0.514669 -0.515337 -0.515782 -0.516007 -0.516013 -0.515802 -0.515377 +-0.514739 -0.513891 -0.512835 -0.511573 -0.510106 -0.508438 -0.50657 +-0.504504 -0.502242 -0.499787 -0.497141 -0.494305 -0.491283 -0.488076 +-0.484686 -0.481116 -0.477367 -0.473442 -0.469344 -0.465074 -0.460635 +-0.456028 -0.451257 -0.446323 -0.441229 -0.435977 -0.430569 -0.425008 +-0.419295 -0.413434 -0.407427 -0.401275 -0.394981 -0.388549 -0.381979 +-0.375274 -0.368437 -0.36147 -0.354375 -0.347156 -0.339857 -0.332558 +-0.325259 -0.31796 -0.310661 -0.303362 -0.296063 -0.288764 -0.281465 +-0.274166 -0.266867 -0.259568 -0.25227 -0.244971 -0.237672 -0.230373 +-0.223074 -0.215775 -0.208476 -0.201177 -0.193878 -0.186579 -0.17928 +-0.171981 -0.164682 -0.157383 -0.150084 -0.142785 -0.135486 -0.128187 +-0.120888 -0.113589 -0.10629 -0.0989913 -0.0916924 -0.0843934 -0.0770945 +-0.0697955 -0.0624965 -0.0551976 -0.0478986 -0.0405997 -0.0333007 -0.0260017 +-0.0187028 -0.0114038 -0.00410485 0.00319411 0.0104931 0.017792 0.025091 +0.03239 0.0396889 0.0469879 0.0542868 0.0615858 0.0688848 0.0761837 +0.0834827 0.0907816 0.0980806 0.10538 0.112679 0.119977 0.127276 0.134575 +0.141874 0.149173 0.156472 0.163771 0.17107 0.178369 0.185668 0.192967 +0.200266 0.207565 0.214864 0.222163 0.229462 0.236761 0.24406 0.251359 +0.258658 0.265957 0.273256 0.280555 0.287854 0.295152 0.302451 0.30975 +0.317049 0.324348 0.331647 0.338946 0.346245 0.353544 0.360843 0.368142 +0.375441 0.38274 0.390039 0.397338 0.404637 0.411936 0.419235 0.426533 +0.433832 0.441131 0.44843 0.455729 0.463028 0.470327 0.477626 0.484925 +0.492224 0.499523 0.506822 0.514121 0.52142 0.528719 0.536018 0.543317 +0.550616 0.557915 0.565214 0.572347 0.579287 0.586034 0.592586 0.598945 +0.605111 0.611082 0.61686 0.622445 0.627837 0.633035 0.638041 0.642854 +0.647475 0.651903 0.656139 0.660184 0.664036 0.667698 0.671169 0.674449 +0.677538 0.680438 0.683149 0.68567 0.688003 0.690147 0.692104 0.693873 +0.695456 0.696853 0.698064 0.69909 0.699931 0.700589 0.701063 0.701356 +0.701466 0.701395 0.701144 0.700714 0.700104 0.699317 0.698352 0.697212 +0.695896 0.694405 0.692741 0.690904 0.688896 0.686717 0.684368 0.681851 +0.679167 0.676316 0.673299 0.670119 0.666776 0.66327 0.659605 0.655779 +0.651796 0.647656 0.643361 0.638911 0.634308 0.629554 0.62465 0.619597 +0.614397 0.609056 0.603705 0.598345 0.592975 0.587595 0.582206 0.576807 +0.571398 0.565979 0.56055 0.555111 0.549662 0.544203 0.538734 0.533255 +0.527766 0.522267 0.516757 0.511238 0.505708 0.500169 0.494619 0.489059 +0.483489 0.477908 0.472318 0.466718 0.461108 0.455487 0.449857 0.444217 +0.438567 0.432907 0.427237 0.421557 0.415868 0.410169 0.40446 0.398742 +0.393014 0.387277 0.38153 0.375775 0.37001 0.364235 0.358452 0.35266 +0.346859 0.341049 0.33523 0.329403 0.323568 0.317723 0.311871 0.30601 +0.300142 0.294265 0.288381 0.282488 0.276588 0.270681 0.264766 0.258844 +0.252915 0.246979 0.241036 0.235087 0.229131 0.223168 0.2172 0.211225 +0.205244 0.199257 0.193265 0.187268 0.181265 0.175257 0.169244 0.163226 +0.157203 0.151176 0.145145 0.13911 0.133071 0.127028 0.120981 0.114931 +0.108878 0.102822 0.0967633 0.0907019 0.084638 0.0785719 0.0725038 +0.0664338 0.0603623 0.0542893 0.0482151 0.04214 0.036064 0.0299874 +0.0239105 0.0178334 0.0117564 0.00567956 -0.000396765 -0.0064724 -0.0125471 +-0.0186207 -0.024693 -0.0307636 -0.0368325 -0.0428995 -0.0489641 -0.0550263 +-0.0610859 -0.0671425 -0.073196 -0.0792462 -0.0852928 -0.0913357 -0.0973744 +-0.103409 -0.109439 -0.115464 -0.121485 -0.1275 -0.13351 -0.139514 +-0.145512 -0.151505 -0.157491 -0.16347 -0.169443 -0.175409 -0.181367 +-0.187318 -0.193262 -0.199197 -0.205125 -0.211044 -0.216954 -0.222856 +-0.228748 -0.234632 -0.240506 -0.24637 -0.252224 -0.258069 -0.263903 +-0.269726 -0.275539 -0.28134 -0.287131 -0.29291 -0.298677 -0.304432 +-0.310176 -0.315907 -0.321626 -0.327332 -0.333025 -0.338705 -0.344372 +-0.350025 -0.355665 -0.36129 -0.366902 -0.372499 -0.378082 -0.383651 +-0.389204 -0.394742 -0.400266 -0.405774 -0.411266 -0.416742 -0.422203 +-0.427647 -0.433076 -0.438487 -0.443883 -0.449261 -0.454623 -0.459967 +-0.465103 -0.469979 -0.474597 -0.47896 -0.483069 -0.486926 -0.490534 +-0.493894 -0.497008 -0.499878 -0.502507 -0.504896 -0.507048 -0.508963 +-0.510645 -0.512095 -0.513316 -0.514309 -0.515076 -0.51562 -0.515942 +-0.516045 -0.51593 -0.515599 -0.515056 -0.514301 -0.513337 -0.512166 +-0.51079 -0.509211 -0.507431 -0.505453 -0.503278 -0.500908 -0.498347 +-0.495595 -0.492655 -0.48953 -0.486221 -0.48273 -0.47906 -0.475214 +-0.471192 -0.466998 -0.462634 -0.458101 -0.453403 -0.448541 -0.443518 +-0.438335 -0.432996 -0.427503 -0.421857 -0.416062 -0.410119 -0.404031 +-0.3978 -0.391429 -0.384919 -0.378274 -0.371496 -0.364586 -0.357548 +-0.350384 -0.343095 -0.335797 -0.328498 -0.321199 -0.3139 -0.306601 +-0.299302; +#X coords 0 1 1000 -1 500 140 1 0 0; +#X restore 23 479 graph; +#X floatatom 64 65 5 0 0 0 - - -; +#X obj 63 428 tabwrite~ \$0-graph; +#X obj 89 397 metro 500; +#X obj 89 371 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 +1; +#X floatatom 100 139 5 0 10000 0 - - -; +#X floatatom 134 165 5 0 10000 0 - - -; +#X floatatom 206 249 5 0 0 0 - - -; +#X msg 72 115 set 0; +#X obj 206 272 / 100; +#X obj 134 188 / 100; +#X obj 63 343 slop~ 1000 1e+09 0 1e+09 0; +#X obj 12 12 slop~; +#X text 73 13 - slew-limiting low-pass filter; +#X text 142 139 cutoff frequency in linear region; +#X floatatom 170 215 5 0 10000 0 - - -; +#X text 180 165 maximum downward slew of linear region; +#X text 213 205 asymptotic downward cutoff frequency (for downward +slews greater than maximum), f 41; +#X text 255 247 maximum upward slew of linear region; +#X text 291 294 asymptotic upward cutoff frequency (for upward slews +greater than maximum), f 41; +#X floatatom 242 299 5 0 10000 0 - - -; +#X text 105 65 frequency of test oscillator; +#X obj 493 9 bng 15 250 50 0 \$0-mainlink empty empty 17 7 0 10 -262144 +-1 -1; +#N canvas 418 87 524 258 works 0; +#X text 14 20 this window implements the link button in the main window. +; +#X obj 107 62 r \$0-mainlink; +#X obj 107 177 pdcontrol; +#X obj 191 178 print; +#X obj 107 112 pdcontrol; +#X msg 107 87 dir; +#X msg 241 87 gui ::pd_menucommands::menu_openfile \$1/../8.topics/slop-tilde.htm +; +#X msg 108 137 browse \$1/../8.topics/slop-tilde.htm; +#X connect 1 0 5 0; +#X connect 4 0 7 0; +#X connect 5 0 4 0; +#X connect 7 0 2 0; +#X connect 7 0 3 0; +#X restore 718 417 pd works; +#N canvas 240 55 1114 912 compander-limiter 0; +#X obj 467 16 bng 15 250 50 0 \$0-compander empty empty 17 7 0 10 -262144 +-1 -1; +#X text 491 13 <- open details in web browser; +#N canvas 622 189 450 300 generate-test 0; +#X obj 84 121 osc~ 440; +#X obj 204 124 line~; +#X msg 205 98 1 \, 0 500; +#X msg 124 86 -0.25; +#X obj 204 149 *~; +#X obj 84 146 *~; +#X obj 84 171 outlet~; +#X obj 101 41 r \$0-testpulse; +#X obj 166 220 tabwrite~ \$0-test-in; +#X connect 0 0 5 0; +#X connect 1 0 4 0; +#X connect 1 0 4 1; +#X connect 2 0 1 0; +#X connect 3 0 0 1; +#X connect 4 0 5 1; +#X connect 5 0 6 0; +#X connect 5 0 8 0; +#X connect 7 0 2 0; +#X connect 7 0 3 0; +#X connect 7 0 8 0; +#X restore 61 129 pd generate-test; +#X obj 60 160 out1~; +#X obj 345 44 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 +1; +#X obj 345 64 metro 500; +#X obj 345 89 s \$0-testpulse; +#N canvas 0 50 450 250 (subpatch) 0; +#X array \$0-test-in 20000 float 2; +#X coords 0 1 20000 -1 500 140 1 0 0; +#X restore 58 452 graph; +#X text 475 50 (under construction...); +#N canvas 323 324 450 300 resize 0; +#X obj 83 45 inlet; +#X msg 83 70 resize \$1; +#X obj 83 95 s \$0-test-in; +#X obj 88 126 s \$0-slop-out; +#X obj 83 159 s \$0-compander-out; +#X connect 0 0 1 0; +#X connect 1 0 2 0; +#X connect 1 0 3 0; +#X connect 1 0 4 0; +#X restore 607 771 pd resize; +#X msg 607 740 20000; +#N canvas 0 50 450 250 (subpatch) 0; +#X array \$0-slop-out 20000 float 2; +#X coords 0 1 20000 0 500 70 1 0 0; +#X restore 58 622 graph; +#N canvas 0 50 450 250 (subpatch) 0; +#X array \$0-compander-out 20000 float 2; +#X coords 0 1 20000 -1 500 140 1 0 0; +#X restore 58 723 graph; +#N canvas 0 50 450 250 (subpatch) 0; +#X array \$0-dynamic-curve 102 float 3; +#A 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 +24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 +47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 +70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 +93 94 95 96 97 98 99 100 100; +#X coords 0 100 102 0 202 200 1 0 0; +#X restore 842 37 graph; +#N canvas 194 66 600 997 parameters 0; +#X obj 366 32 inlet; +#X obj 400 376 setctl \$0-speed; +#X obj 487 83 s \$0-speed; +#X obj 402 253 setctl \$0-limit; +#X obj 402 277 setctl \$0-knee; +#X obj 402 302 setctl \$0-boost; +#X obj 402 326 setctl \$0-ratio; +#X obj 366 222 s \$0-limit; +#X obj 392 198 s \$0-knee; +#X obj 400 351 setctl \$0-thresh; +#X obj 415 174 s \$0-boost; +#X obj 439 147 s \$0-ratio; +#X obj 366 57 unpack 0 0 0 0 0 0; +#X obj 462 116 s \$0-thresh; +#X obj 50 91 r \$0-limit; +#X obj 61 116 r \$0-knee; +#X obj 70 143 r \$0-boost; +#X obj 96 196 r \$0-thresh; +#X obj 82 167 r \$0-ratio; +#X obj 50 224 b; +#X obj 50 249 del 0; +#X obj 50 274 t b b; +#X obj 50 324 until; +#X obj 50 349 f; +#X obj 87 351 + 1; +#X msg 99 325 0; +#X obj 50 374 t f f; +#X obj 24 870 tabwrite \$0-dynamic-curve; +#X obj 193 708 moses; +#X obj 240 706 r \$0-thresh; +#X obj 407 554 r \$0-ratio; +#X obj 407 579 f; +#X obj 407 604 / 100; +#X obj 18 808 +; +#X msg 225 734 0; +#X obj 193 765 expr ($f1-$f2)*$f3; +#X obj 18 833 max 0; +#X obj 407 629 - 1; +#X obj 48 404 +; +#X obj 218 361 r \$0-boost; +#X obj 193 452 r \$0-limit; +#X obj 151 455 f; +#X obj 151 480 -; +#X obj 48 429 t f b; +#X obj 327 428 r \$0-knee; +#X obj 188 535 +; +#X obj 144 535 -; +#X obj 23 569 moses; +#X obj 71 569 moses; +#X obj 102 601 b; +#X obj 195 611 r \$0-limit; +#X obj 102 626 f; +#X obj 302 829 expr $f4 - ($f2-$f1)*($f2-$f1)/(4*$f3); +#X obj 23 594 +; +#X msg 50 299 102; +#X obj 327 453 f; +#X obj 327 478 / 2; +#X obj 226 46 loadbang; +#X msg 226 71 100 0 0 100 0 50; +#X connect 0 0 12 0; +#X connect 12 0 7 0; +#X connect 12 1 8 0; +#X connect 12 2 10 0; +#X connect 12 3 11 0; +#X connect 12 4 13 0; +#X connect 12 5 2 0; +#X connect 14 0 19 0; +#X connect 15 0 19 0; +#X connect 16 0 19 0; +#X connect 17 0 19 0; +#X connect 18 0 19 0; +#X connect 19 0 20 0; +#X connect 20 0 21 0; +#X connect 21 0 54 0; +#X connect 21 1 25 0; +#X connect 22 0 23 0; +#X connect 23 0 24 0; +#X connect 23 0 26 0; +#X connect 24 0 23 1; +#X connect 25 0 23 1; +#X connect 26 0 38 0; +#X connect 26 1 27 1; +#X connect 26 1 28 0; +#X connect 28 0 35 0; +#X connect 28 1 34 0; +#X connect 29 0 28 1; +#X connect 29 0 35 1; +#X connect 30 0 31 0; +#X connect 31 0 32 0; +#X connect 32 0 37 0; +#X connect 33 0 36 0; +#X connect 34 0 33 1; +#X connect 35 0 33 1; +#X connect 36 0 27 0; +#X connect 37 0 35 2; +#X connect 38 0 43 0; +#X connect 39 0 38 1; +#X connect 39 0 42 1; +#X connect 39 0 53 1; +#X connect 40 0 41 1; +#X connect 41 0 42 0; +#X connect 42 0 45 0; +#X connect 42 0 46 0; +#X connect 43 0 47 0; +#X connect 43 1 41 0; +#X connect 44 0 55 0; +#X connect 45 0 48 1; +#X connect 45 0 52 1; +#X connect 46 0 47 1; +#X connect 47 0 53 0; +#X connect 47 1 48 0; +#X connect 48 0 52 0; +#X connect 48 1 49 0; +#X connect 49 0 51 0; +#X connect 50 0 51 1; +#X connect 50 0 52 3; +#X connect 51 0 33 0; +#X connect 52 0 33 0; +#X connect 53 0 33 0; +#X connect 54 0 22 0; +#X connect 55 0 56 0; +#X connect 56 0 46 1; +#X connect 56 0 45 1; +#X connect 56 0 52 2; +#X connect 57 0 58 0; +#X connect 58 0 12 0; +#X restore 856 437 pd parameters; +#X floatatom 680 295 3 0 100 0 limit #0-limit-set #0-limit; +#X floatatom 680 316 3 0 20 0 knee #0-knee-set #0-knee; +#X floatatom 680 337 3 0 50 0 boost #0-boost-set #0-boost; +#X floatatom 680 358 3 0 200 0 ratio #0-ratio-set #0-ratio; +#X floatatom 680 380 3 0 100 0 thresh #0-thresh-set #0-thresh; +#X floatatom 680 401 3 0 200 0 speed #0-speed-set #0-speed; +#N canvas 33 150 617 518 run-compander 0; +#X obj 47 56 inlet~; +#X obj 82 124 slop~ 0 0 0 0 1e+09; +#X obj 160 32 r \$0-speed; +#X obj 160 57 f; +#X obj 160 82 / 10; +#X obj 366 145 r \$0-testpulse; +#X obj 380 203 tabwrite~ \$0-slop-out; +#X obj 83 98 abs~; +#X obj 111 252 tabread4~ \$0-dynamic-curve; +#X obj 80 294 -~; +#X obj 80 319 +~ 100; +#X obj 80 344 dbtorms~; +#X obj 81 222 rmstodb~; +#X obj 45 384 *~; +#X obj 45 409 outlet~; +#X obj 364 416 tabwrite~ \$0-compander-out; +#X text 227 90 same envelope follower as in the peak meter example +; +#X text 145 288 "correct" the level by applying a gain calculated from +the difference between the measured and desired level, f 27; +#X connect 0 0 7 0; +#X connect 0 0 13 0; +#X connect 1 0 6 0; +#X connect 1 0 12 0; +#X connect 2 0 3 0; +#X connect 3 0 4 0; +#X connect 4 0 1 3; +#X connect 5 0 6 0; +#X connect 5 0 15 0; +#X connect 7 0 1 0; +#X connect 8 0 9 0; +#X connect 9 0 10 0; +#X connect 10 0 11 0; +#X connect 11 0 13 1; +#X connect 12 0 9 1; +#X connect 12 0 8 0; +#X connect 13 0 14 0; +#X connect 13 0 15 0; +#X restore 152 156 pd run-compander; +#X msg 607 712 2000; +#X msg 606 686 300; +#X obj 152 200 out1~; +#X msg 856 331 100 0 0 200 100 100; +#X msg 856 275 100 0 0 100 0 50; +#X text 778 275 no change; +#X text 801 304 limit; +#X text 796 332 expand; +#X text 781 362 compress; +#X text 772 399 noise gate; +#X msg 856 400 100 0 0 200 60 30; +#X msg 856 362 100 0 0 50 100 100; +#X text 29 10 Using slop~ to make a compressor/expander/limiter; +#X msg 856 304 90 10 0 100 0 50; +#X connect 2 0 3 0; +#X connect 2 0 21 0; +#X connect 4 0 5 0; +#X connect 5 0 6 0; +#X connect 10 0 9 0; +#X connect 21 0 24 0; +#X connect 22 0 9 0; +#X connect 23 0 9 0; +#X connect 25 0 14 0; +#X connect 26 0 14 0; +#X connect 32 0 14 0; +#X connect 33 0 14 0; +#X connect 35 0 14 0; +#X restore 665 244 pd compander-limiter; +#X text 553 78 The slop~ object is a low-pass filter whose frequency +response (i.e. \, reaction speed) can vary according to the filter's +state. It can be useful for slew limiting \, dynamics processing (companders/limiters/noise +gates) \, and soft saturation. Examples below are explained in the +HTML documentation (linked above).; +#N canvas 550 104 848 759 slew-limiter 0; +#X floatatom 114 148 5 0 1000 0 - - -; +#X obj 114 172 t f b; +#X obj 146 201 samplerate~; +#X obj 114 201 /; +#X obj 89 406 metro 500; +#X obj 89 380 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 +1; +#X text 114 378 <- start metronome to graph output; +#X obj 63 437 tabwrite~ \$0-slew-graph; +#N canvas 0 50 450 250 (subpatch) 0; +#X array \$0-slew-graph 1000 float 2; +#X coords 0 1 1000 -1 500 140 1 0 0; +#X restore 44 558 graph; +#X text 42 7 Using slop~ to make a slew limiter; +#X floatatom 166 236 5 0 1000 0 - - -; +#X obj 166 260 t f b; +#X obj 198 288 samplerate~; +#X obj 166 289 /; +#X obj 62 327 slop~ 1e+09 0 0 0 0; +#X obj 62 106 osc~ 100; +#X text 386 288 See the HTML documentation (link on main page of this +patch) for details.; +#X text 385 205 Here the maximum slope of the 100-Hz. sinusoid is 200pi +\, about 628.3. Setting upward or downward slew limits below that will +replace the waveform with straight line segments on the way up and/or +down.; +#X text 162 147 max downward slope; +#X text 214 235 max upward slope; +#X text 387 56 The slew limiter is a filter whose cutoff frequency +is infinite (so that the output folows teh input exactly) unless the +input varies from the previous output by more than the highest slope +we allow (the slew limit) times the sample period (i.e. \, the maximum +variation allowed over the space of a sample). This limit is therefore +in units of amplitude per sample. The number boxes specify amplitude +change per second \, which we divide by the sample rate to convert +to the units needed by slop~.; +#X connect 0 0 1 0; +#X connect 1 0 3 0; +#X connect 1 1 2 0; +#X connect 2 0 3 1; +#X connect 3 0 14 2; +#X connect 4 0 7 0; +#X connect 5 0 4 0; +#X connect 10 0 11 0; +#X connect 11 0 13 0; +#X connect 11 1 12 0; +#X connect 12 0 13 1; +#X connect 13 0 14 4; +#X connect 14 0 7 0; +#X connect 15 0 14 0; +#X restore 665 192 pd slew-limiter; +#X text 518 6 <- open HTML documentation in web browser; +#X text 725 599 updated for Pd version 0.50.; +#X text 114 369 <- start metronome to graph output; +#X text 530 22 (pd/doc/8.topics/slop-tilde.htm); +#N canvas 204 69 843 697 peak-meter 0; +#X floatatom 189 252 5 0 50 0 - #0-decay-speed-init -; +#N canvas 423 189 450 300 generate-test 0; +#X obj 84 121 osc~ 440; +#X msg 124 86 -0.25; +#X obj 204 149 *~; +#X obj 84 146 *~; +#X obj 84 171 outlet~; +#X obj 101 41 r \$0-meter-testpulse; +#X obj 282 172 setctl \$0-pulse-length; +#X obj 204 124 vline~; +#X obj 204 73 f; +#X obj 268 37 r \$0-pulse-length; +#X msg 205 98 1 \, 0 \$1; +#X obj 318 70 loadbang; +#X obj 300 123 s \$0-pulse-length; +#X msg 294 227 20; +#X obj 294 252 s \$0-decay-speed-init; +#X msg 318 98 30; +#X connect 0 0 3 0; +#X connect 1 0 0 1; +#X connect 2 0 3 1; +#X connect 3 0 4 0; +#X connect 5 0 1 0; +#X connect 5 0 8 0; +#X connect 7 0 2 0; +#X connect 7 0 2 1; +#X connect 8 0 10 0; +#X connect 9 0 8 1; +#X connect 10 0 7 0; +#X connect 11 0 15 0; +#X connect 11 0 13 0; +#X connect 13 0 14 0; +#X connect 15 0 12 0; +#X restore 63 115 pd generate-test; +#X text 42 7 Envelope follower for use in peak metering; +#X text 391 433 See the HTML documentation (link on main page of this +patch) for more details.; +#X obj 193 41 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 +1; +#X obj 193 61 metro 500; +#X obj 193 86 s \$0-meter-testpulse; +#X obj 189 277 / 10; +#X text 232 249 decay speed (10ths of a Hz.), f 16; +#X obj 104 147 out1~; +#X floatatom 121 54 5 1 100 0 pulse-length #0-pulse-length_set #0-pulse-length +; +#X obj 19 354 env~ 1024; +#X obj 63 484 - 88; +#X obj 23 457 moses 1; +#X msg 23 482 -100; +#X obj 24 520 vu 15 120 empty empty -1 -8 0 10 -66577 -1 0 0; +#X obj 110 280 abs~; +#X obj 123 383 metro 22; +#X obj 123 331 loadbang; +#X msg 123 356 1; +#X obj 111 406 snapshot~; +#X obj 111 431 rmstodb; +#X obj 152 485 - 88; +#X obj 112 458 moses 1; +#X msg 112 483 -100; +#X obj 113 521 vu 15 120 empty empty -1 -8 0 10 -66577 -1 0 0; +#X obj 111 306 slop~ 0 0 0 0 1e+09; +#X text 218 37 <- turn on test pulse; +#X text 178 163 <- raise "lvl" to hear; +#X text 398 273 The output is sampled using a snapshot~ object. Both +envelope followers are converted to uits useful for the IEM VU meter +(+12 dB tops \, but zero mapped to -100 so that the bottom "LED" turns +off when the signal hits 0 (100-normed \, Pd-style) dB.; +#X text 398 368 When the pulse is very short (1 msec \, for instance) +the RMS meter acts badly but the slop~-driven one still shows the peak. +; +#X text 401 102 A slew limiter can be used as a fast-rising envelope +follower \, useful for example in peak metering. In this example a +short burst of sound is metered using both the "env" follower (which +measures an average over a time window) and a fast-rising envelope +follower cosisting of an abs~ object (to rectify the signal) followed +by a slop~ object set to rise quickly (1e9 asymptotic rise speed \, +0 up-slew needed to engage it) and with controllable decay (asymptotic +downward speed controlled by a number box). There is no linear region +at all so the linear cutoff frequency has no effect.; +#X connect 0 0 7 0; +#X connect 1 0 9 0; +#X connect 1 0 11 0; +#X connect 1 0 16 0; +#X connect 4 0 5 0; +#X connect 5 0 6 0; +#X connect 7 0 26 3; +#X connect 11 0 13 0; +#X connect 12 0 15 0; +#X connect 13 0 14 0; +#X connect 13 1 12 0; +#X connect 14 0 15 0; +#X connect 16 0 26 0; +#X connect 17 0 20 0; +#X connect 18 0 19 0; +#X connect 19 0 17 0; +#X connect 20 0 21 0; +#X connect 21 0 23 0; +#X connect 22 0 25 0; +#X connect 23 0 24 0; +#X connect 23 1 22 0; +#X connect 24 0 25 0; +#X connect 26 0 20 0; +#X restore 665 217 pd peak-meter; +#X text 118 114 set state (previously stored output); +#N canvas 467 212 848 759 jitter-remover 0; +#X floatatom 114 148 5 0 100 0 - - -; +#X obj 89 406 metro 500; +#X obj 89 380 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 +1; +#X text 114 378 <- start metronome to graph output; +#N canvas 0 50 450 250 (subpatch) 0; +#X array \$0-jitter-graph 1000 float 2; +#X coords 0 1 1000 -1 500 140 1 0 0; +#X restore 81 530 graph; +#X obj 64 52 osc~ 100; +#X obj 63 437 tabwrite~ \$0-jitter-graph; +#X obj 64 83 clip~ -0.3 0.3; +#X obj 182 57 osc~ 1000; +#X obj 182 82 *~ 0.03; +#X obj 65 118 +~; +#X obj 62 327 slop~ 0 0 1e+09 0 1e+09; +#X obj 114 172 / 1000; +#X text 163 147 jitter range \, 0 to 0.1; +#X text 42 7 jitter remover; +#X text 387 56 If you have a noisy sensor \, one approach to smoothing +it is to set slop~ u pto only react to motion past a certain window. +The linear frequeny cutoff is set to zero so that the output only changes +when the input strays by more than the maximum upward or downward slew. +; +#X text 386 147 Set the jitter range to zero to see the original signal +and raise it to see smoothing.; +#X connect 0 0 12 0; +#X connect 1 0 6 0; +#X connect 2 0 1 0; +#X connect 5 0 7 0; +#X connect 7 0 10 0; +#X connect 8 0 9 0; +#X connect 9 0 10 1; +#X connect 10 0 11 0; +#X connect 11 0 6 0; +#X connect 12 0 11 2; +#X connect 12 0 11 4; +#X restore 665 272 pd jitter-remover; +#X connect 0 0 12 0; +#X connect 2 0 0 0; +#X connect 4 0 3 0; +#X connect 5 0 4 0; +#X connect 6 0 12 1; +#X connect 7 0 11 0; +#X connect 8 0 10 0; +#X connect 9 0 12 0; +#X connect 10 0 12 4; +#X connect 11 0 12 2; +#X connect 12 0 3 0; +#X connect 16 0 12 3; +#X connect 21 0 12 5; diff --git a/doc/5.reference/text-object-help.pd b/doc/5.reference/text-object-help.pd index 26bc00b5f8..62a20c150b 100644 --- a/doc/5.reference/text-object-help.pd +++ b/doc/5.reference/text-object-help.pd @@ -1,5 +1,5 @@ #N struct text-help-struct float x float y text z; -#N canvas 65 53 637 594 12; +#N canvas 257 72 637 594 12; #X obj 141 517 list; #X obj 18 6 text; #X text 35 516 see also:; @@ -12,68 +12,106 @@ #X obj 280 217 text define; #X text 81 173 The text object's first argument sets its function: , f 30; -#N canvas 753 80 684 718 define 0; -#X msg 39 106 clear; -#X msg 37 132 read text-object-help.txt; -#X msg 40 161 write text-object-help.txt; +#N canvas 373 69 684 718 define 0; +#X msg 38 80 clear; +#X msg 38 106 read text-object-help.txt; +#X msg 38 132 write text-object-help.txt; #X text 32 20 "text define" maintains a text object and can name it so that other objects can find it (and later should have some alternative \, anonymous way to be found).; -#X text 61 425 click to open and edit text:; -#X text 296 413 creation arguments:; -#X text 324 431 optional -k flag to keep contents; -#X text 326 448 optional name; -#X text 77 268 (optionally you can read or write to/from a file interpreting -carriage returns as separators \; this should allow reading some text -file formats - like this:); -#X text 274 130 read from a file; -#X text 276 161 write to a file; -#X text 277 104 clear; -#X obj 48 193 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 +#X text 66 400 click to open and edit text:; +#X text 296 386 creation arguments:; +#X text 324 404 optional -k flag to keep contents; +#X text 326 421 optional name; +#X text 273 104 read from a file; +#X text 275 135 write to a file; +#X text 276 78 clear; +#X obj 38 265 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 -1; -#X obj 38 513 t b p; -#X obj 38 562 text get -s text t; -#X msg 39 537 0; -#X obj 38 612 print; -#X obj 38 587 list trim; -#X obj 38 449 text define -k text-help-1; -#A set this is a message \; this is another 1 ... \;; -#X msg 79 336 write -c /tmp/test-cr.txt; -#X obj 217 479 print notify-outlet; -#X text 85 612 First outlet is pointer to a "text" scalar containing +#X obj 38 486 t b p; +#X obj 38 535 text get -s text t; +#X msg 39 510 0; +#X obj 38 585 print; +#X obj 38 560 list trim; +#X obj 38 422 text define -k text-help-1; +#A set this is one message \; this is another 1 ... \;; +#X msg 38 191 write -c /tmp/test-cr.txt; +#X obj 217 452 print notify-outlet; +#X text 85 585 First outlet is pointer to a "text" scalar containing the text \, which is output when the object is sent a "bang". For example -\, here's machinery for printing out first line of text., f 30; -#X text 69 187 bang to output a pointer to a scalar (struct) containing +\, here's machinery for printing out first line of text., f 47; +#X text 59 259 bang to output a pointer to a scalar (struct) containing the text - see first outlet below, f 45; -#X text 215 504 Second outlet notifies you when text changes. As of +#X text 215 477 Second outlet notifies you when text changes. As of Pd 0.48 this only outputs the message "updated" when text changes \, but this might be extended to offer more information in the future. -, f 42; -#X msg 79 376 click; -#X msg 127 376 close; -#X text 175 376 open and close text window; -#X msg 59 235 send text-help-send; -#X text 206 235 send pointer to a named receive object; -#X obj 51 481 r text-help-send; -#X connect 0 0 18 0; -#X connect 1 0 18 0; -#X connect 2 0 18 0; -#X connect 12 0 18 0; -#X connect 13 0 15 0; -#X connect 13 1 14 3; -#X connect 14 0 17 0; -#X connect 15 0 14 0; -#X connect 17 0 16 0; -#X connect 18 0 13 0; -#X connect 18 1 20 0; -#X connect 19 0 18 0; -#X connect 24 0 18 0; -#X connect 25 0 18 0; -#X connect 27 0 18 0; -#X connect 29 0 13 0; +, f 49; +#X msg 57 362 click; +#X msg 105 362 close; +#X text 153 362 open and close text window; +#X msg 38 232 send text-help-send; +#X text 239 205 send pointer to a named receive object; +#X obj 51 454 r text-help-send; +#X text 48 156 (optionally you can read or write to/from a file interpreting +carriage returns as separators. This should allow reading some text +file formats - like this:), f 80; +#X msg 38 325 sort; +#X text 85 323 sort the contents. details here:; +#N canvas 1070 128 715 479 sorting-text 0; +#X obj 44 229 text define text-help-sorting; +#X msg 77 46 sort; +#X msg 81 71 sort -r; +#X msg 83 99 sort -k 1; +#X msg 45 11 set zz \\\; yy \\\; 1 2 \\\; 1 2 3 \\\; 2 1 4 \\\; 1 \\\; +2 \\\; 1 2 3; +#X msg 86 181 sort -u; +#X text 41 261 Numbers come before symbols \, which are sorted alphabetically +(in the sense of "strcmp" - this will probably yield nonsense for non-ASCII +symbols \, but even in that case it should give some repeatable order). +Shorter lines come before longer ones that match the entire shorter +lines. As a special case empty lines come before anything else.; +#X text 149 100 only compare contents of line starting at field 1 (counting +from zero). If two lines are identical (even if both are empty) starting +at the first field compared \, we preserve the original order the lines +appeared in \, even if earlier fields then appear out of order.; +#X text 144 176 unique - suppress identical lines if they are sorted +to consecutive positions (this is not always true when "-k" is also +present).; +#X text 152 70 reverse order; +#X text 39 351 If the last line in the text isn't terminated a semicolon +is added to it before sorting.; +#X text 43 390 linee terminated by commas are treated as equal to ones +terminated by semicolons. There is probably only confusion to be won +from sorting texts mixing commas and semicolons.; +#X connect 1 0 0 0; +#X connect 2 0 0 0; +#X connect 3 0 0 0; +#X connect 4 0 0 0; +#X connect 5 0 0 0; +#X restore 328 324 pd sorting-text; +#X msg 38 297 set this is one message \\\; this is another 1 ... \\\; +; +#X connect 0 0 17 0; +#X connect 1 0 17 0; +#X connect 2 0 17 0; +#X connect 11 0 17 0; +#X connect 12 0 14 0; +#X connect 12 1 13 3; +#X connect 13 0 16 0; +#X connect 14 0 13 0; +#X connect 16 0 15 0; +#X connect 17 0 12 0; +#X connect 17 1 19 0; +#X connect 18 0 17 0; +#X connect 23 0 17 0; +#X connect 24 0 17 0; +#X connect 26 0 17 0; +#X connect 28 0 12 0; +#X connect 30 0 17 0; +#X connect 33 0 17 0; #X restore 392 217 pd define; #X obj 280 240 text get; -#N canvas 885 156 859 566 get 0; +#N canvas 923 154 859 566 get 0; #X floatatom 47 115 5 0 5 0 - - -; #X msg 47 84 0; #X msg 123 84 2; @@ -85,7 +123,7 @@ but this might be extended to offer more information in the future. #X text 242 298 "type" is 0 if terminated by a semicolon \, 1 if by a comma \, or 2 if the line number was out of range.; #X obj 72 533 text define -k text-help-get; -#A set; +#A set 1 2 3 \; a b c \; 4 5 6 \, 7 8 9 10 \;; #X obj 47 230 text get text-help-get, f 13; #X floatatom 50 407 5 0 0 0 - - -; #X msg 50 376 0; @@ -268,7 +306,7 @@ If the number n is greater than the number of lines in the text the new line is added.; #X text 241 348 next optional arg to set inlet 2 (field number \, defaults to whole line), f 47; -#X msg 223 165 1e+015; +#X msg 223 165 1e+15; #X text 83 391 If inlet 2 is unset or set to a negative number \, the entire line is replaced \, but if it is set to 0 or more to specify a starting field \, the line is not resized - instead \, as many items @@ -347,19 +385,19 @@ contained is discarded.; #X text 130 386 convert from list; #X text 217 409 search; #X obj 279 407 text search; -#N canvas 626 77 1011 913 search 0; -#X floatatom 60 313 5 0 0 0 - - -; -#X text 385 232 find another text by name or pointer, f 18; -#X text 207 280 arguments: name of the text object or "-s struct-name" +#N canvas 183 101 1069 800 search 0; +#X floatatom 60 351 5 0 0 0 - - -; +#X text 358 279 find another text by name or pointer, f 18; +#X text 207 318 arguments: name of the text object or "-s struct-name" , f 30; #X text 46 11 "text search" outputs the line number of the line that best matches a search key. By default it seeks a line whose leading fields match the incoming list.; -#X obj 52 873 text define -k text-help-search; +#X obj 62 464 text define -k text-help-search; #A set 1 2 3 dog \; 7 8 9 cat \; 4 5 3 dog \; 7 8 9 alligator \; random line that won't match numbers \;; -#X obj 60 270 text search text-help-search, f 16; -#X msg 182 244 symbol text-help-search; +#X obj 60 308 text search text-help-search, f 16; +#X msg 182 282 symbol text-help-search; #X msg 60 77 1; #X msg 60 101 2; #X msg 60 125 4; @@ -369,58 +407,66 @@ line that won't match numbers \;; #X text 110 76 matches first line (number 0); #X text 102 99 doesn't match first field of any line so -1; #X text 113 210 fails on second field so no match; -#X text 211 314 ... then optional search fields. Each is a field number +#X text 207 358 ... then optional search fields. Each is a field number (starting from 0) optionally preceded by ">". ">=" \, "<" \, "<=" \, -or "near".; +or "near"., f 44; #X text 98 150 if two lines match only the first is output (but see below for finding best matches).; -#X msg 47 446 7 cat; -#X msg 47 470 7 alligator; -#X floatatom 47 574 5 0 0 0 - - -; -#X msg 47 494 7 dog; -#X obj 47 518 text search text-help-search 0 3, f 16; -#X floatatom 503 600 5 0 0 0 - - -; -#X obj 503 541 text search text-help-search 1, f 16; -#X msg 504 508 8 9; -#X msg 559 486 8 9 alligator; -#X msg 504 482 8; -#X msg 559 513 symbol line; -#X text 43 392 in this example we ask to match both field 0 and field +#X msg 663 111 7 cat; +#X msg 663 135 7 alligator; +#X floatatom 663 239 5 0 0 0 - - -; +#X msg 663 159 7 dog; +#X obj 663 183 text search text-help-search 0 3, f 16; +#X floatatom 727 487 5 0 0 0 - - -; +#X obj 727 428 text search text-help-search 1, f 16; +#X msg 728 395 8 9; +#X msg 783 373 8 9 alligator; +#X msg 728 369 8; +#X msg 783 400 symbol line; +#X text 659 57 in this example we ask to match both field 0 and field 3 exactly. In field 3 we're testing symbols for equality., f 39; -#X text 401 382 If the search pattern (the incoming list) has more +#X text 625 269 If the search pattern (the incoming list) has more fields than we have specified search fields \, extra search patterns match succeeding fields starting from the last one give as an argument. So for example if there are no arguments we look for matches to any number of fields starting from the beginning of the line in the text. ; -#X floatatom 49 834 5 0 0 0 - - -; -#X obj 49 778 text search text-help-search > 0, f 16; -#X text 45 613 Match a line for which the search key is greater than +#X floatatom 75 764 5 0 0 0 - - -; +#X obj 75 708 text search text-help-search > 0, f 16; +#X text 71 543 Match a line for which the search key is greater than field zero of that line. The line getting closest to the key wins. , f 41; -#X msg 49 671 2; -#X msg 49 713 4; -#X text 86 664 lines 1 \, 2 \, and 3 match \, but 2 wins because its +#X msg 75 601 2; +#X msg 75 643 4; +#X text 112 594 lines 1 \, 2 \, and 3 match \, but 2 wins because its first field (4) is closest to the search key 2, f 48; -#X text 88 703 this matches lines 1 and 3 \, and each is equally good +#X text 114 633 this matches lines 1 and 3 \, and each is equally good \, so line 1 wins., f 43; -#X text 86 744 nobody's first field is greater than 10; -#X msg 49 745 10; -#X obj 507 809 text search text-help-search 2 near 0, f 18; -#X floatatom 507 866 5 0 0 0 - - -; -#X msg 507 685 3 3; -#X msg 507 714 3 2.5 1; -#X msg 507 775 3 3 1; -#X text 506 628 Hear we ask for field 2 to equal 3 and fields starting -at 0 to be 'near' the following arguments., f 33; -#X text 547 684 field 2 is 3 and field 0 nearest 3; -#X text 575 706 here lines 0 and 2 tie over 2.4 (1 and 4 are equally +#X text 112 674 nobody's first field is greater than 10; +#X msg 75 675 10; +#X obj 632 710 text search text-help-search 2 near 0, f 18; +#X floatatom 632 767 5 0 0 0 - - -; +#X msg 632 586 3 3; +#X msg 632 615 3 2.5 1; +#X msg 632 676 3 3 1; +#X text 672 585 field 2 is 3 and field 0 nearest 3; +#X text 700 607 here lines 0 and 2 tie over 2.4 (1 and 4 are equally far from it) so line 0 whose second field is closer to 1 wins., f 40; -#X text 560 766 Here line 2 wins because its field 0 is nearer to 3 +#X text 685 667 Here line 2 wins because its field 0 is nearer to 3 \, notwithstanding that its field 1 is farther from 1; #X text 103 125 matches line number 2 (third line); #X text 114 188 matches two fields of line number 2; +#X msg 74 246 range 0 1; +#X msg 148 245 range 0 1e+10; +#X msg 243 244 range 2 2; +#X text 317 236 set range (first line to check \, number of lines to +check), f 31; +#X text 636 532 Here we ask for field 2 to equal 3 and fields starting +at 0 to be 'near' the following arguments:, f 33; +#X text 62 436 here is the example text we search in:; +#X text 148 525 EXAMPLE:; +#X text 739 18 MORE EXAMPLES:; #X connect 5 0 0 0; #X connect 6 0 5 1; #X connect 7 0 5 0; @@ -446,6 +492,9 @@ far from it) so line 0 whose second field is closer to 1 wins., f #X connect 42 0 40 0; #X connect 43 0 40 0; #X connect 44 0 40 0; +#X connect 50 0 5 0; +#X connect 51 0 5 0; +#X connect 52 0 5 0; #X restore 392 407 pd search; #X text 75 433 sequencer/message-sender; #X obj 279 431 text sequence; @@ -637,7 +686,7 @@ line 4 \\\;; #X obj 54 432 text fromlist text-help-insert; #X obj 52 288 text define -k text-help-insert; #A set line 0 \; line 1 \; line 2 \; line 3 \; line 4 \;; -#X msg 165 142 1e+009; +#X msg 165 142 1e+09; #X text 214 144 insert after end; #X msg 59 82 list x y z w; #X msg 65 108 1 2 3; diff --git a/doc/8.topics/compander-limiter.htm b/doc/8.topics/compander-limiter.htm new file mode 100644 index 0000000000..d50f36ed12 --- /dev/null +++ b/doc/8.topics/compander-limiter.htm @@ -0,0 +1,26 @@ + + + + + + + Companding and limiting + + + + +

      +

      Companding and limiting

      +
      +

      using slop~ in a compander-limiter

      +

      A subpatch of the slop~ help file gives an example that uses slop~ to make a compander-limiter. (The link will only work if you are reading this document as a local file on your machine and if your browser is set up to open .pd files using Pd. Alternatively you can create a slop~ object in a patch and get help for it). Here is additional documentation for the slop~ object itself.

      +

      (TBW… just testing the directory layout and links for now.)

      + + diff --git a/doc/8.topics/slop-compander-patch.png b/doc/8.topics/slop-compander-patch.png new file mode 100644 index 0000000000..0ef5fca4bc Binary files /dev/null and b/doc/8.topics/slop-compander-patch.png differ diff --git a/doc/8.topics/slop-peak-meter-graph.png b/doc/8.topics/slop-peak-meter-graph.png new file mode 100644 index 0000000000..0429ea1b41 Binary files /dev/null and b/doc/8.topics/slop-peak-meter-graph.png differ diff --git a/doc/8.topics/slop-peak-meter-patch.png b/doc/8.topics/slop-peak-meter-patch.png new file mode 100644 index 0000000000..a97b599f3c Binary files /dev/null and b/doc/8.topics/slop-peak-meter-patch.png differ diff --git a/doc/8.topics/slop-slew-limit.png b/doc/8.topics/slop-slew-limit.png new file mode 100644 index 0000000000..fc532d1ecc Binary files /dev/null and b/doc/8.topics/slop-slew-limit.png differ diff --git a/doc/8.topics/slop-slew-limiting-patch.png b/doc/8.topics/slop-slew-limiting-patch.png new file mode 100644 index 0000000000..a38126e7a4 Binary files /dev/null and b/doc/8.topics/slop-slew-limiting-patch.png differ diff --git a/doc/8.topics/slop-tilde-1-curves.png b/doc/8.topics/slop-tilde-1-curves.png new file mode 100644 index 0000000000..903a95da4a Binary files /dev/null and b/doc/8.topics/slop-tilde-1-curves.png differ diff --git a/doc/8.topics/slop-tilde.htm b/doc/8.topics/slop-tilde.htm new file mode 100644 index 0000000000..db9ba91a8b --- /dev/null +++ b/doc/8.topics/slop-tilde.htm @@ -0,0 +1,70 @@ + + + + + + + slop-tilde + + + + +

      Nonlinear filtering using the slop~ slew-limiting low-pass filter

      +

      Tasks such as envelope following, dynamics processing, and soft saturation often rely on low-pass filtering in which the cutoff frequency of the filter (which you can alternatively think of as its reaction speed) varies according to whether the input is rising, stable, or falling. For example, a VU meter design might call for an envelope follower whose output can rise quickly but then drops off more slowly. To make this we could use a low-pass filter to make a moving average of the instantaneous signal level, but the moving average should react faster on rising inputs than on falling ones.

      +

      The simplest type of digital low-pass filter can be understood as a moving average:

      +


      y[n] = y[n − 1] + k ⋅ (x[n] − y[n − 1])

      +

      where 0 ≤ k ≤ 1 is an averaging factor, usually much closer to zero than one. When the value of k is small enough (less than 1/2, say), it is approximately equal to the filter’s rolloff frequency in units of radians per sample. (The theory behind this is explained in Theory and Techniques of Electronic Music, section 8.3, “designing filters”).

      +

      For our purposes we’ll rewrite this equation as:

      +


      y[n] − y[n − 1] = f(x[n] − y[n − 1])

      +

      where the function f is linear:

      +


      f(x) = k ⋅ x

      +

      In words, this equation says, “increment your output by k times the distance you have to travel to reach the goal x[n]”. (So far, we’ve described the action of the linear lop~ object.) In the slop~ object, this linear function is replaced by a nonlinear one with three segments, one for an interval ( − n, p) containing zero, and two others joining this one at the input values  − n and p. The three segments have slopes equal to kn, k, and kp for the negative, middle, and positive regions:

      +
      +response curve for slop~
      response curve for slop~
      +
      +

      Rationale. In general, k could depend on both the previous output y[n − 1] and on the current input x. This would require that the invoking patch somehow specify a function of two variables, a feat for which Pd is ill suited. In slop~ we make the simplifying assumption that adding an offset to both the filter’s state and its input should result in adding the same offset to the output; that is, the filter should be translation-invariant. (As will be seen below, through a bit of skulduggery we can still make translation-dependent effects such as soft saturation). One could also ask why we don’t allow the function f to refer to a stored array instead of restricting it to a 5-parameter family of piecewise linear functions. The reason for choosing the approach taken is that it is often desirable to modulate the parameters at audio rates, and that would be difficult if we used an array.

      +

      The following four examples are demonstrated in subpatches of the slop~ help file. (If your browser is set up to open “.pd” files using Pure Data then you can open it with this link; alternatively you can create a slop~ object in a patch and get help for it, or navigate to it using Pd’s help browser.)

      +

      example: slew limiter

      +

      The output signal y[n] has a time-varying slope equal to (y[n] − y[n − 1])/τ, where τ denotes the elapsed time between two samples, equal to one over the sample rate R. The slope can be rewritten as R ⋅ (y[n] − y[n − 1]). Suppose we wish to create an output signal whose slope is limited between two values  − sn and sp (so sn and sp, both greater than zero, are the maximum downward and upward slope). This implies that we should limit the difference between successive outputs, y[n] − y[n − 1] to lie between  − sn/R and sp/R. We therefore increment the output by a quantity x[n] − y[n − 1] as long as that increment lies between those two limits. Beyond those limits the response speed should be zero so that the increment doesn’t vary past those limits. To do this we set the five filter coefficients to slop~ to k = 1, n = sn/R, p = sp/R, and kn = kp = 0. Since the three speed inputs to slop~ are in units of Hz, we can set k = 1 by giving a linear-response frequency higher than the sample rate. (In practice, “1e9”, meaning a billion, will do fine for any sample rate we expect to encounter.)

      +

      A patch to do this is shown here:

      +
      +slew-limiting patch from slop~ help file
      slew-limiting patch from slop~ help file
      +
      +

      A sample input and output are shown here:

      +
      +slew-limiter input (at top) and its output (bottom)
      slew-limiter input (at top) and its output (bottom)
      +
      +

      The input is a square pulse of unit height lasting 0.7 msec, at a sample rate of 48000. The upward maximum slope is set to 9000. For the first 5 samples of the pulse, the upward increment is limited to 9000/48000 units. At the sixth sample of the pulse the input is within that limit of the previous output, and so the increment becomes exactly what is needed to make the output reach the input in value.

      +

      Note: slew limiting is useful for conditioning time-varting controls to avoid discontinuities. It’s not so useful as a way to generate triangle waves from rectangular pulse trains, because the rising and falling edges are quantized to an integer sample number, making audible (and ugly) non-periodicities.

      +

      example: peak meter

      +

      To make a peak meter, we need an estimate of how strongly a signal has peaked in the recent past. This can be done using slop~ as shown:

      +
      +instant-rise, controlled-decay envelope follower
      instant-rise, controlled-decay envelope follower
      +
      +

      Here the abs~ object takes the input’s absolute value (known in electronics as “rectification”) and the slop~ object is set to have no linear region at all, but a rise region with an infinite (1e9) cutoff (so that it follows a rise in the input instantly), and a decay region with a controllable cutoff frequency that sets the speed of the decay. Here is the response to the same rectangular pulse input as the example above:

      +
      +response to a square pulse
      response to a square pulse
      +
      +

      (In order to keep the same time scale, 100 samples, as above we have here set the decay speed to 1000 Hz, but for an envelope follower this will normally be between 0.1 and 5 Hz. Lower values will result in a less jittery output when an audio signal is input, but higher ones will cause the output to react faster to falling signal levels.) The result is in linear amplitude units, and can be converted to decibels for metering as shown in the help patch.

      +

      using slop~ in a compander-limiter

      +

      Audio engineers make frequent use of dynamics processors such as companders (compressors/expanders) and limiters. Companders are most often used to compress the dynamic range of an audio signal to make it less likely that the level falls outside a useful range, but are also sometimes configured to expand dynamic range below a chosen threshold, so that they act as noise gates. Limiters are often used with instruments such as percussion and guitars whose attacks can have much higher amplitude than the body of the note. To hear the body one turns the gain up, but then one has to limit the attack amplitude in order to avoid distortion.

      +

      There is no one standard design for a dynamics processor, and few makers of modern ones have divulged their secrets, which might take the form of nonlinear transfer functions, carefully tuned filter parameters, and perhaps many other possible fudge factors. There is also a whole industry in which software designers try to emulate analog hardware dynamics processors. There are also stereo compressors (for mastering CDs and LPs) and multi-band ones. Engineers frequently allow one signal to control the level of a different one, in a technique popularly known as “side chaining”. If one is working from recorded tracks (as opposed to live sound), it’s possible to look ahead in the recorded sound to reduce the distortion that inevitably occurs when a limiter is hit too hard. And so on.

      +

      Here we’ll describe a fairly straightforward design based on the instant-attack envelope follower described in the previous example. (This is somewhat atypical; the implications of this approach are discussed a bit later.) Once the envelope is determined (and converted to decibels), a table lookup gives the desired dynamic, and the necessary gain is computed and applied. Thus:

      +
      +compander using instant-rise envelope follower
      compander using instant-rise envelope follower
      +
      +

      Since the envelope follower has an unlimited rise speed, it will report rises in the signal amplitude without delay. Its output is thus always at least equal to the absolute value of the input. A dynamic curve is then used to compute the desired gain - this gain (in decibels) is equal to the difference between the curve value and the envelope follower output itself. When this gain is applied the resulting signal level is at most what is shown on the curve (equal to it when the signal and the envelope follower agree exactly).

      +

      In effect, rising edges of the input signal, when they push outside the currently measured envelope, will be soft-clipped according to the dynamic curve. When the signal drops in amplitude the envelope follower relaxes at a speed decided by the user, and this is heard as a gradual change in gain. (Specifically, a decrease in gain if we are compressing and/or limiting.)

      +

      Because the dynamic curve acts as a saturation curve when the signal level is rising, in a situation when we are using it as a limiter (so that the curve is flat at the right-hand end), it is often desirable to make the dynamic curve level off smoothly. In this patch there are three parameters to configure limiting: the limit itself, a boost in DB to apply before limiting, and a “knee” which is the interval, in decibels, over which the dynamic curve bends from the 45-degree angle at low levels to the flat region where we reach the limit.

      +

      in addition there is a compander function controlled by two other parameters, “thresh” (a threshold, in decibels, below which companding is to be done) and the percentage, normally between 0 and 200, by which the dynamic range should be altered below that threshold. The “speed” parameter is the speed, in tenths of a Hz., at which the envelope follower output decays.

      +

      using slop~ to remove signal jitter

      +

      By setting the linear cutoff frequency to zero and the linear region to an interval of length a (either by setting n = 0, p = 1 or n = p = a/2), and then setting kn = kp = inf , we get a filter that allows its input to jitter over a range of a units before the filter responds to it. This is sometimes useful for quieting down noisy control sources (such as envelope followers or physical sensors). This is analogous to a loose physical linkage.

      + + diff --git a/doc/Makefile.am b/doc/Makefile.am new file mode 100644 index 0000000000..1549b0cc44 --- /dev/null +++ b/doc/Makefile.am @@ -0,0 +1,506 @@ +######################################### +##### Defaults & Paths ##### + +AUTOMAKE_OPTIONS = foreign + +# default doc location is $(prefix)/doc/pd, +# but we want $(prefix)/lib/pd/doc +libpddir = $(pkglibdir)/doc + +# about text file, needed to write version string into +ABOUT_FILE=1.manual/1.introduction.txt + +# location to pd header +M_PD=$(top_srcdir)/src/m_pd.h + +# get version info from m_pd.h to use in doc/1.manual/1.introduction.txt +PD_MAJOR_VERSION = $(shell grep PD_MAJOR_VERSION $(M_PD) | \ + sed 's|^.define *PD_MAJOR_VERSION *\([0-9]*\).*|\1|' ) +PD_MINOR_VERSION = $(shell grep PD_MINOR_VERSION $(M_PD) | \ + sed 's|^.define *PD_MINOR_VERSION *\([0-9]*\).*|\1|' ) +PD_BUGFIX_VERSION = $(shell grep PD_BUGFIX_VERSION $(M_PD) | \ + sed 's|^.define *PD_BUGFIX_VERSION *\([0-9]*\).*|\1|' ) +PD_TEST_VERSION = $(shell grep PD_TEST_VERSION $(M_PD) | \ + sed 's|^.define *PD_TEST_VERSION *"\(.*\)".*|\1|' ) +PD_VERSION = $(PD_MAJOR_VERSION).$(PD_MINOR_VERSION).$(PD_BUGFIX_VERSION) + +######################################### +##### Targets ##### + +# build version string & write into about file during install +install-data-hook: + mv $(DESTDIR)$(libpddir)/$(ABOUT_FILE) $(DESTDIR)$(libpddir)/$(ABOUT_FILE).tmp + if test "x${PD_TEST_VERSION}" == "x" ; then \ + cat $(DESTDIR)$(libpddir)/$(ABOUT_FILE).tmp | \ + sed 's|PD_VERSION|Pd version $(PD_VERSION)|' \ + > $(DESTDIR)$(libpddir)/$(ABOUT_FILE) ; \ + else \ + cat $(DESTDIR)$(libpddir)/$(ABOUT_FILE).tmp | \ + sed 's|PD_VERSION|Pd version $(PD_VERSION)-$(PD_TEST_VERSION)|' \ + > $(DESTDIR)$(libpddir)/$(ABOUT_FILE) ; \ + fi + rm $(DESTDIR)$(libpddir)/$(ABOUT_FILE).tmp + +######################################### +##### Files, Binaries, & Libs ##### + +# empty var for data list footer +empty= + +# this is at the end because its loooong +# these files go into libpddir defined above +# to regenerate: +# cd doc +# find . -type f -not -path "./Makefile*" | sort | awk '{print " ", $1, "\\"}'; echo ' $(empty)' +nobase_dist_libpd_DATA = \ + ./1.manual/1.introduction.txt \ + ./1.manual/fig1.1.png \ + ./1.manual/fig1.2.jpg \ + ./1.manual/fig1.3.jpg \ + ./1.manual/fig1.4.png \ + ./1.manual/fig1.5.jpg \ + ./1.manual/fig11.1.png \ + ./1.manual/fig11.2.png \ + ./1.manual/fig11.3.png \ + ./1.manual/fig11.4.png \ + ./1.manual/fig3.1.jpg \ + ./1.manual/fig3.10.jpg \ + ./1.manual/fig3.2.jpg \ + ./1.manual/fig3.3.jpg \ + ./1.manual/fig3.4.jpg \ + ./1.manual/fig3.5.jpg \ + ./1.manual/fig3.6.jpg \ + ./1.manual/fig3.7.jpg \ + ./1.manual/fig3.8.jpg \ + ./1.manual/fig3.9.jpg \ + ./1.manual/fig4.1.png \ + ./1.manual/fig4.2.png \ + ./1.manual/fig4.3.png \ + ./1.manual/fig4.4.png \ + ./1.manual/fig4.5.png \ + ./1.manual/fig4.6.png \ + ./1.manual/fig4.7.png \ + ./1.manual/fig7.1.jpg \ + ./1.manual/fig7.2.jpg \ + ./1.manual/fig7.3.jpg \ + ./1.manual/fig7.4.jpg \ + ./1.manual/fig7.5.jpg \ + ./1.manual/fig7.6.jpg \ + ./1.manual/fig8.1.jpg \ + ./1.manual/fig8.2.jpg \ + ./1.manual/fig8.3.jpg \ + ./1.manual/fig8.4.jpg \ + ./1.manual/fig8.5.jpg \ + ./1.manual/fig8.6.jpg \ + ./1.manual/fig9.1.jpg \ + ./1.manual/fig9.2.jpg \ + ./1.manual/fig9.3.jpg \ + ./1.manual/index.htm \ + ./1.manual/pdmanual.css \ + ./1.manual/x1.htm \ + ./1.manual/x2.htm \ + ./1.manual/x3.htm \ + ./1.manual/x4.htm \ + ./1.manual/x5.htm \ + ./2.control.examples/00.INTRO.txt \ + ./2.control.examples/01.PART1.hello.pd \ + ./2.control.examples/02.editing.pd \ + ./2.control.examples/03.connections.pd \ + ./2.control.examples/04.messages.pd \ + ./2.control.examples/05.counter.pd \ + ./2.control.examples/06.more.counters.pd \ + ./2.control.examples/07.time.pd \ + ./2.control.examples/08.depthfirst.pd \ + ./2.control.examples/09.send_receive.pd \ + ./2.control.examples/10.more.messages.pd \ + ./2.control.examples/11.review.pd \ + ./2.control.examples/12.PART2.subpatch.pd \ + ./2.control.examples/13.locality.pd \ + ./2.control.examples/14.dollarsigns.pd \ + ./2.control.examples/15.array.pd \ + ./2.control.examples/15.file.txt \ + ./2.control.examples/16.more.arrays.pd \ + ./2.control.examples/17.PART3.midi.pd \ + ./2.control.examples/18.conditional.pd \ + ./2.control.examples/19.random.pd \ + ./2.control.examples/20.weighted-random.pd \ + ./2.control.examples/21.markov.chain.pd \ + ./2.control.examples/22.random-walk.pd \ + ./2.control.examples/23.sequencing.pd \ + ./2.control.examples/24.loops.pd \ + ./2.control.examples/dollarsign.pd \ + ./2.control.examples/dollarsign2.pd \ + ./2.control.examples/sendnumber.pd \ + ./3.audio.examples/A00.intro.pd \ + ./3.audio.examples/A00.intro.txt \ + ./3.audio.examples/A01.sinewave.pd \ + ./3.audio.examples/A02.amplitude.pd \ + ./3.audio.examples/A03.line.pd \ + ./3.audio.examples/A04.line2.pd \ + ./3.audio.examples/A05.output.subpatch.pd \ + ./3.audio.examples/A06.frequency.pd \ + ./3.audio.examples/A07.fusion.pd \ + ./3.audio.examples/A08.beating.pd \ + ./3.audio.examples/A09.frequency.mod.pd \ + ./3.audio.examples/A10.review.pd \ + ./3.audio.examples/B01.wavetables.pd \ + ./3.audio.examples/B02.two-wavetables.pd \ + ./3.audio.examples/B03.tabread4.pd \ + ./3.audio.examples/B04.tabread4.interpolation.pd \ + ./3.audio.examples/B05.tabread.FM.pd \ + ./3.audio.examples/B06.table.switching.pd \ + ./3.audio.examples/B07.sampler.pd \ + ./3.audio.examples/B08.sampler.loop.pd \ + ./3.audio.examples/B09.sampler.loop.smooth.pd \ + ./3.audio.examples/B10.sampler.scratch.pd \ + ./3.audio.examples/B11.sampler.nodoppler.pd \ + ./3.audio.examples/B12.sampler.transpose.pd \ + ./3.audio.examples/B13.sampler.overlap.pd \ + ./3.audio.examples/B14.sampler.rockafella.pd \ + ./3.audio.examples/B15.tabread4~-onset.pd \ + ./3.audio.examples/B16.long-varispeed.pd \ + ./3.audio.examples/C01.nyquist.pd \ + ./3.audio.examples/C02.sawtooth-foldover.pd \ + ./3.audio.examples/C03.zipper.noise.pd \ + ./3.audio.examples/C04.control.to.signal.pd \ + ./3.audio.examples/C05.sampler.oneshot.pd \ + ./3.audio.examples/C06.signal.to.control.pd \ + ./3.audio.examples/C07.envelope.follower.pd \ + ./3.audio.examples/C08.analog.sequencer.pd \ + ./3.audio.examples/C09.sample.hold.pd \ + ./3.audio.examples/C10.monophonic.synth.pd \ + ./3.audio.examples/D01.envelope.gen.pd \ + ./3.audio.examples/D02.adsr.pd \ + ./3.audio.examples/D03.envelope.dB.pd \ + ./3.audio.examples/D04.envelope.quartic.pd \ + ./3.audio.examples/D05.envelope.pitch.pd \ + ./3.audio.examples/D06.envelope.portamento.pd \ + ./3.audio.examples/D07.additive.pd \ + ./3.audio.examples/D08.table.spectrum.pd \ + ./3.audio.examples/D09.shepard.tone.pd \ + ./3.audio.examples/D10.sampler.notes.pd \ + ./3.audio.examples/D11.sampler.poly.pd \ + ./3.audio.examples/D12.sampler.bis.pd \ + ./3.audio.examples/D13.additive.qlist.pd \ + ./3.audio.examples/D14.vibrato.pd \ + ./3.audio.examples/E01.spectrum.pd \ + ./3.audio.examples/E02.ring.modulation.pd \ + ./3.audio.examples/E03.octave.divider.pd \ + ./3.audio.examples/E04.difference.tone.pd \ + ./3.audio.examples/E05.chebychev.pd \ + ./3.audio.examples/E06.exponential.pd \ + ./3.audio.examples/E07.evenodd.pd \ + ./3.audio.examples/E08.phase.mod.pd \ + ./3.audio.examples/E09.FM.spectrum.pd \ + ./3.audio.examples/E10.complex.FM.pd \ + ./3.audio.examples/F01.pulse.pd \ + ./3.audio.examples/F02.just.say.pd \ + ./3.audio.examples/F03.pulse.spectrum.pd \ + ./3.audio.examples/F04.waveshaping.pulse.pd \ + ./3.audio.examples/F05.ring.modulation.pd \ + ./3.audio.examples/F06.packets.pd \ + ./3.audio.examples/F07.packet.spectrum.pd \ + ./3.audio.examples/F08.two.cosines.pd \ + ./3.audio.examples/F09.declickit.pd \ + ./3.audio.examples/F10.sweepable.FM.pd \ + ./3.audio.examples/F11.anharmonic.FM.pd \ + ./3.audio.examples/F12.paf.pd \ + ./3.audio.examples/F13.paf.control.pd \ + ./3.audio.examples/F14.wave.packet.pd \ + ./3.audio.examples/G01.delay.pd \ + ./3.audio.examples/G02.delay.loop.pd \ + ./3.audio.examples/G03.delay.variable.pd \ + ./3.audio.examples/G04.control.blocksize.pd \ + ./3.audio.examples/G05.execution.order.pd \ + ./3.audio.examples/G06.octave.doubler.pd \ + ./3.audio.examples/G07.shaker.pd \ + ./3.audio.examples/G08.reverb.pd \ + ./3.audio.examples/G09.pitchshift.pd \ + ./3.audio.examples/H01.low-pass.pd \ + ./3.audio.examples/H02.high-pass.pd \ + ./3.audio.examples/H03.band-pass.pd \ + ./3.audio.examples/H04.filter.sweep.pd \ + ./3.audio.examples/H05.filter.floyd.pd \ + ./3.audio.examples/H06.envelope.follower.pd \ + ./3.audio.examples/H07.measure.spectrum.pd \ + ./3.audio.examples/H08.heterodyning.pd \ + ./3.audio.examples/H09.ssb.modulation.pd \ + ./3.audio.examples/H10.measurement.pd \ + ./3.audio.examples/H11.shelving.pd \ + ./3.audio.examples/H12.peaking.pd \ + ./3.audio.examples/H13.butterworth.pd \ + ./3.audio.examples/H14.all.pass.pd \ + ./3.audio.examples/H15.phaser.pd \ + ./3.audio.examples/H16.adsr.filter.qlist.pd \ + ./3.audio.examples/I01.Fourier.analysis.pd \ + ./3.audio.examples/I02.Hann.window.pd \ + ./3.audio.examples/I03.resynthesis.pd \ + ./3.audio.examples/I04.noisegate.pd \ + ./3.audio.examples/I05.compressor.pd \ + ./3.audio.examples/I06.timbre.stamp.pd \ + ./3.audio.examples/I07.phase.vocoder.pd \ + ./3.audio.examples/I08.pvoc.reverb.pd \ + ./3.audio.examples/I09.sheep.from.goats.pd \ + ./3.audio.examples/I10.phase.bash.pd \ + ./3.audio.examples/J01.even.odd.pd \ + ./3.audio.examples/J02.trapezoids.pd \ + ./3.audio.examples/J03.pulse.width.mod.pd \ + ./3.audio.examples/J04.corners.pd \ + ./3.audio.examples/J05.triangle.pd \ + ./3.audio.examples/J06.enveloping.pd \ + ./3.audio.examples/J07.oversampling.pd \ + ./3.audio.examples/J08.classicsynth.pd \ + ./3.audio.examples/J09.bandlimited.pd \ + ./3.audio.examples/adsr.pd \ + ./3.audio.examples/buttercoef3.pd \ + ./3.audio.examples/butterworth3~.pd \ + ./3.audio.examples/filter-graph1.pd \ + ./3.audio.examples/filter-graph2.pd \ + ./3.audio.examples/osc-voice.pd \ + ./3.audio.examples/output~.pd \ + ./3.audio.examples/partial.pd \ + ./3.audio.examples/qlist-sampler.txt \ + ./3.audio.examples/qlist.txt \ + ./3.audio.examples/qlist2.txt \ + ./3.audio.examples/reverb-echo.pd \ + ./3.audio.examples/sampvoice.pd \ + ./3.audio.examples/sampvoice2.pd \ + ./3.audio.examples/shepvoice.pd \ + ./3.audio.examples/sinevoice.pd \ + ./3.audio.examples/spectrum-partial.pd \ + ./4.data.structures/00.intro.txt \ + ./4.data.structures/01.scalars.pd \ + ./4.data.structures/02.getting.data.pd \ + ./4.data.structures/03.setting.data.pd \ + ./4.data.structures/04.append.pd \ + ./4.data.structures/05.array.pd \ + ./4.data.structures/06.file.pd \ + ./4.data.structures/07.sequencer.pd \ + ./4.data.structures/08.selection.pd \ + ./4.data.structures/09.scaling.pd \ + ./4.data.structures/10.onoff.pd \ + ./4.data.structures/11.array.controls.pd \ + ./4.data.structures/12.beat-patterns.pd \ + ./4.data.structures/13.sliderule.pd \ + ./4.data.structures/14.partialtracer.pd \ + ./4.data.structures/add-trace.pd \ + ./4.data.structures/beat-maker.pd \ + ./4.data.structures/data-array.pd \ + ./4.data.structures/data-start.pd \ + ./4.data.structures/file.txt \ + ./4.data.structures/osc-voice.pd \ + ./4.data.structures/output~.pd \ + ./4.data.structures/voice.pd \ + ./4.data.structures/z.txt \ + ./5.reference/0_all_guis-INTRO.txt \ + ./5.reference/abs~-help.pd \ + ./5.reference/acoustics-help.pd \ + ./5.reference/acoustics~-help.pd \ + ./5.reference/adc~_dac~-help.pd \ + ./5.reference/append-help.pd \ + ./5.reference/array-object-help.pd \ + ./5.reference/array-object-help.txt \ + ./5.reference/bag-help.pd \ + ./5.reference/bang-help.pd \ + ./5.reference/bang~-help.pd \ + ./5.reference/biquad~-help.pd \ + ./5.reference/block~-help.pd \ + ./5.reference/bng-help.pd \ + ./5.reference/bp~-help.pd \ + ./5.reference/canvas-help.pd \ + ./5.reference/change-help.pd \ + ./5.reference/clip-help.pd \ + ./5.reference/clip~-help.pd \ + ./5.reference/clone-abstraction.pd \ + ./5.reference/clone-help.pd \ + ./5.reference/cos~-help.pd \ + ./5.reference/cpole~-help.pd \ + ./5.reference/cputime-help.pd \ + ./5.reference/czero_rev~-help.pd \ + ./5.reference/czero~-help.pd \ + ./5.reference/declare-help.pd \ + ./5.reference/delay-help.pd \ + ./5.reference/delread4~-help.pd \ + ./5.reference/delread~-help.pd \ + ./5.reference/delwrite~-help.pd \ + ./5.reference/drawpolygon-help.pd \ + ./5.reference/drawtext-help.pd \ + ./5.reference/element-help.pd \ + ./5.reference/env~-help.pd \ + ./5.reference/expr-help.pd \ + ./5.reference/exp~-help.pd \ + ./5.reference/fft~-help.pd \ + ./5.reference/float-help.pd \ + ./5.reference/framp~-help.pd \ + ./5.reference/fudiformat-help.pd \ + ./5.reference/fudiparse-help.pd \ + ./5.reference/gatom-help.pd \ + ./5.reference/get-help.pd \ + ./5.reference/getsize-help.pd \ + ./5.reference/graph-help.pd \ + ./5.reference/hdial-help.pd \ + ./5.reference/help-intro.pd \ + ./5.reference/hip~-help.pd \ + ./5.reference/hradio-help.pd \ + ./5.reference/hslider-help.pd \ + ./5.reference/int-help.pd \ + ./5.reference/key-help.pd \ + ./5.reference/line-help.pd \ + ./5.reference/line~-help.pd \ + ./5.reference/list-help.pd \ + ./5.reference/loadbang-help.pd \ + ./5.reference/log~-help.pd \ + ./5.reference/lop~-help.pd \ + ./5.reference/makefilename-help.pd \ + ./5.reference/makenote-help.pd \ + ./5.reference/math-help.pd \ + ./5.reference/message-help.pd \ + ./5.reference/metro-help.pd \ + ./5.reference/midi-help.pd \ + ./5.reference/moses-help.pd \ + ./5.reference/my_canvas-help.pd \ + ./5.reference/namecanvas-help.pd \ + ./5.reference/netreceive-help.pd \ + ./5.reference/netsend-help.pd \ + ./5.reference/noise~-help.pd \ + ./5.reference/numbox2-help.pd \ + ./5.reference/openpanel-help.pd \ + ./5.reference/operators-help.pd \ + ./5.reference/oscformat-help.pd \ + ./5.reference/oscparse-help.pd \ + ./5.reference/osc~-help.pd \ + ./5.reference/otherbinops-help.pd \ + ./5.reference/out1~.pd \ + ./5.reference/pack-help.pd \ + ./5.reference/pd-help.pd \ + ./5.reference/pdcontrol-abs.pd \ + ./5.reference/pdcontrol-help.pd \ + ./5.reference/phasor~-help.pd \ + ./5.reference/pipe-help.pd \ + ./5.reference/plot-help.pd \ + ./5.reference/pointer-help.pd \ + ./5.reference/poly-help.pd \ + ./5.reference/pow~-help.pd \ + ./5.reference/print-help.pd \ + ./5.reference/print~-help.pd \ + ./5.reference/qlist-help.pd \ + ./5.reference/qlist.txt \ + ./5.reference/random-help.pd \ + ./5.reference/readsf~-help.pd \ + ./5.reference/realtime-help.pd \ + ./5.reference/receive-help.pd \ + ./5.reference/route-help.pd \ + ./5.reference/rpole~-help.pd \ + ./5.reference/rsqrt~-help.pd \ + ./5.reference/rzero_rev~-help.pd \ + ./5.reference/rzero~-help.pd \ + ./5.reference/samphold~-help.pd \ + ./5.reference/samplerate~-help.pd \ + ./5.reference/savepanel-help.pd \ + ./5.reference/savestate-example.pd \ + ./5.reference/savestate-help.pd \ + ./5.reference/scalar-object-help.pd \ + ./5.reference/select-help.pd \ + ./5.reference/send-help.pd \ + ./5.reference/send~-help.pd \ + ./5.reference/set-help.pd \ + ./5.reference/setctl.pd \ + ./5.reference/setsize-help.pd \ + ./5.reference/setsize.txt \ + ./5.reference/sigbinops-help.pd \ + ./5.reference/sig~-help.pd \ + ./5.reference/slop~-help.pd \ + ./5.reference/snapshot~-help.pd \ + ./5.reference/soundfiler-help.pd \ + ./5.reference/spigot-help.pd \ + ./5.reference/sqrt~-help.pd \ + ./5.reference/stripnote-help.pd \ + ./5.reference/struct-help.pd \ + ./5.reference/swap-help.pd \ + ./5.reference/switch~-help.pd \ + ./5.reference/symbol-help.pd \ + ./5.reference/table.txt \ + ./5.reference/tabosc4~-help.pd \ + ./5.reference/tabplay~-help.pd \ + ./5.reference/tabread-help.pd \ + ./5.reference/tabread4-help.pd \ + ./5.reference/tabread4~-help.pd \ + ./5.reference/tabread~-help.pd \ + ./5.reference/tabreceive~-help.pd \ + ./5.reference/tabsend~-help.pd \ + ./5.reference/tabwrite-help.pd \ + ./5.reference/tabwrite~-help.pd \ + ./5.reference/text-help.pd \ + ./5.reference/text-object-help.pd \ + ./5.reference/text-object-help.txt \ + ./5.reference/textfile-help.pd \ + ./5.reference/textfile.txt \ + ./5.reference/threshold~-help.pd \ + ./5.reference/throw~-help.pd \ + ./5.reference/timer-help.pd \ + ./5.reference/toggle-help.pd \ + ./5.reference/trigger-help.pd \ + ./5.reference/unpack-help.pd \ + ./5.reference/until-help.pd \ + ./5.reference/value-help.pd \ + ./5.reference/vcf~-help.pd \ + ./5.reference/vdial-help.pd \ + ./5.reference/vline~-help.pd \ + ./5.reference/vradio-help.pd \ + ./5.reference/vslider-help.pd \ + ./5.reference/vsnapshot~-help.pd \ + ./5.reference/vu-help.pd \ + ./5.reference/wrap~-help.pd \ + ./5.reference/writesf~-help.pd \ + ./5.reference/x_all_guis.pd \ + ./6.externs/0.README.txt \ + ./6.externs/dspobj~.c \ + ./6.externs/makefile \ + ./6.externs/obj1.c \ + ./6.externs/obj2.c \ + ./6.externs/obj3.c \ + ./6.externs/obj4.c \ + ./6.externs/obj5.c \ + ./6.externs/test-dspobj~.pd \ + ./6.externs/test-obj1.pd \ + ./6.externs/test-obj2.pd \ + ./6.externs/test-obj3.pd \ + ./6.externs/test-obj4.pd \ + ./6.externs/test-obj5.pd \ + ./7.stuff/soundfile-tools/1.ring-mod.pd \ + ./7.stuff/soundfile-tools/2.bandpass.pd \ + ./7.stuff/soundfile-tools/3.phase.vocoder.pd \ + ./7.stuff/soundfile-tools/4.looper.pd \ + ./7.stuff/soundfile-tools/5.reverb.pd \ + ./7.stuff/soundfile-tools/6.vocoder.pd \ + ./7.stuff/soundfile-tools/README.txt \ + ./7.stuff/synth/1.poly.synth.pd \ + ./7.stuff/synth/README.txt \ + ./7.stuff/synth/gadsr.pd \ + ./7.stuff/synth/numset.pd \ + ./7.stuff/synth/preset.pd \ + ./7.stuff/synth/preset1.txt \ + ./7.stuff/synth/preset2.txt \ + ./7.stuff/synth/preset3.txt \ + ./7.stuff/synth/preset4.txt \ + ./7.stuff/synth/synthvoice.pd \ + ./7.stuff/synth/test-gadsr.pd \ + ./7.stuff/tools/latency.pd \ + ./7.stuff/tools/load-meter.pd \ + ./7.stuff/tools/miditester.pd \ + ./7.stuff/tools/sizingtest.pd \ + ./7.stuff/tools/testtone.pd \ + ./7.stuff/tools/testtone16.pd \ + ./8.topics/compander-limiter.htm \ + ./8.topics/slop-compander-patch.png \ + ./8.topics/slop-peak-meter-graph.png \ + ./8.topics/slop-peak-meter-patch.png \ + ./8.topics/slop-slew-limit.png \ + ./8.topics/slop-slew-limiting-patch.png \ + ./8.topics/slop-tilde-1-curves.png \ + ./8.topics/slop-tilde.htm \ + ./Makefile.am \ + ./sound/bell.aiff \ + ./sound/voice.wav \ + ./sound/voice2.wav \ + $(empty) diff --git a/extra/Makefile.am b/extra/Makefile.am index bfc51f71d2..4c453ff5e4 100644 --- a/extra/Makefile.am +++ b/extra/Makefile.am @@ -1,12 +1,28 @@ -SUBDIRS=bob~ bonk~ choice fiddle~ loop~ lrshift~ pd~ pique sigmund~ stdout +######################################### +##### Files, Binaries, & Libs ##### -DIST_SUBDIRS=$(SUBDIRS) +SUBDIRS = bob~ bonk~ choice fiddle~ loop~ lrshift~ pd~ pique sigmund~ stdout -PATCHES =complex-mod~.pd hilbert~.pd rev1-final.pd rev1~.pd rev1-stage.pd rev2~.pd rev3~.pd -HELPPATCHES=complex-mod~-help.pd hilbert~-help.pd rev1~-help.pd rev2~-help.pd rev3~-help.pd +DIST_SUBDIRS = $(SUBDIRS) + +PATCHES = \ + complex-mod~.pd \ + hilbert~.pd \ + rev1-final.pd \ + rev1~.pd \ + rev1-stage.pd \ + rev2~.pd \ + rev3~.pd + +HELPPATCHES = \ + complex-mod~-help.pd \ + hilbert~-help.pd \ + rev1~-help.pd \ + rev2~-help.pd \ + rev3~-help.pd EXTRA_DIST = makefile.subdir README.txt libpdextradir = $(pkglibdir)/extra -dist_libpdextra_DATA = $(PATCHES) $(HELPPATCHES) +dist_libpdextra_DATA = $(PATCHES) $(HELPPATCHES) diff --git a/extra/README.txt b/extra/README.txt index 850e3032d8..7370f7b786 100644 --- a/extra/README.txt +++ b/extra/README.txt @@ -1,30 +1,30 @@ -This is the README file for the "extras" library, consisting of Pd -objects which are too specialized or otherwise non-canonical for -inclusion into Pd proper. These files are open source; see -LICENSE.txt in this distribution for details. -Note however that "expr" is GPL (the rest is all BSD). - -This package should run in Pd under linux, MSW, or Mac OSX. -You can additionally compile fiddle~. bonk~, and paf~ for Max/MSP. +This is the README file for the "extras" library, which contains Pd objects +which are too specialized or otherwise non-canonical for inclusion into Pd +proper. This library is part of the regular ("vanilla") Pd distribution. It +is all open source; see LICENSE.txt in the Pd distribution for details. contents: -externs: -fiddle~ -- pitch tracker +generally useful externs: +sigmund~ - pitch and sinusoidal peak analysis bonk~ - percussion detector -choose - find the "best fit" of incoming vector with stored profiles -paf~ -- phase aligned formant generator -loop~ -- sample looper -expr -- arithmetic expression evaluation (Shahrokh Yadegari) -pique - fft-based peak finder -lrshift~ - left or right shift an audio vector +lrshift~ - left or right shift an audio vector (probably should be standard) abstractions: hilbert~ - Hilbert transform for SSB modulation complex-mod~ - ring modulation for complex (real+imaginary) audio signals rev1~, etc. - reverberators -These objects are part of the regular Pd distribution as of Pd version -0.30. Macintosh versions of fiddle~, bonk~, and paf~ are available -from http://www.crca.ucsd.edu/~tapel -- msp@ucsd.edu +externs aimed at particular tasks: +pd~ - embed one Pd inside another one +stdout - send messages to standard out (useful in pd~ sub-process) +bob~ - Moog ladder filter simulation using a Runge-Kutte ODE solver +choose - find the best fit of a vector to a set of example vectors +loop~ - sample looper + +obsolete: +pique - fft-based peak finder (use sigmund~ instead) +fiddle~ - pitch tracker (use sigmund~ instead) + +The sigmund~, bonk~, and fiddle~ objects have also been compiled for Max/MSP +by Ted Apel; see his website for details. diff --git a/extra/complex-mod~-help.pd b/extra/complex-mod~-help.pd index 9e14904d36..f437c77948 100644 --- a/extra/complex-mod~-help.pd +++ b/extra/complex-mod~-help.pd @@ -10,7 +10,7 @@ #X obj 106 138 cos~; #X obj 106 114 -~ 0.25; #X floatatom 145 152; -#X text 93 351 The complex modulator takes two signals in which it considers to be the real and imaginary part of a complex-valued signal. It then does a complex multiplication by a sinusoud to shift all frequencies up or down by any frequency shift in Hz. See also hilbert~.; +#X text 93 351 The complex modulator takes two signals in which it considers to be the real and imaginary part of a complex-valued signal. It then does a complex multiplication by a sinusoid to shift all frequencies up or down by any frequency shift in Hz. See also hilbert~.; #X obj 69 298 tabwrite~ mod-output; #X text 149 204 right outlet; #X text 151 220 gives the other; diff --git a/extra/makefile.subdir b/extra/makefile.subdir index 51400228d5..b46ec9dee0 100644 --- a/extra/makefile.subdir +++ b/extra/makefile.subdir @@ -41,7 +41,7 @@ pd_linux: $(NAME).pd_linux LINUXCFLAGS = -DPD -O2 -funroll-loops -fomit-frame-pointer -fPIC \ -Wall -W -Wshadow -Wstrict-prototypes \ -Wno-unused -Wno-unused-parameter -Wno-parentheses -Wno-switch \ - $(CFLAGS) $(MORECFLAGS) + -Wno-cast-function-type $(CFLAGS) $(MORECFLAGS) LINUXINCLUDE = -I../../src @@ -66,7 +66,8 @@ DARWINCFLAGS = -DPD -O2 -Wall -W -Wshadow -Wstrict-prototypes \ rm -f $*.o .c.d_fat: - $(CC) $(DARWINARCH) $(DARWINCFLAGS) $(LINUXINCLUDE) -o $*.o -c $*.c + $(CC) $(DARWINARCH) $(DARWINCFLAGS) $(LINUXINCLUDE) \ + -Wno-cast-function-type -o $*.o -c $*.c $(CC) $(DARWINARCH) -bundle -undefined suppress -flat_namespace \ -o $*.d_fat $*.o rm -f $*.o diff --git a/extra/pd~/pdsched.c b/extra/pd~/pdsched.c index 90a5159ab5..622e965c7b 100644 --- a/extra/pd~/pdsched.c +++ b/extra/pd~/pdsched.c @@ -4,15 +4,14 @@ file LICENSE.txt in this distribution. */ /* A plug-in scheduler that turns Pd into a filter that inputs and outputs audio and messages. */ -/* todo: +/* todo: fix schedlib code to use extent2 figure out about if (sys_externalschedlib) { return; } in s_audio.c make buffer size ynamically growable -*/ +*/ #include "m_pd.h" #include "s_stuff.h" -#include "m_imp.h" #include #ifdef _WIN32 #include diff --git a/extra/pd~/pd~.c b/extra/pd~/pd~.c index 806c014b15..ed3fb30719 100644 --- a/extra/pd~/pd~.c +++ b/extra/pd~/pd~.c @@ -55,7 +55,7 @@ void *pd_tilde_class; #include "m_pd.h" #include "s_stuff.h" static t_class *pd_tilde_class; -#define PDERROR pd_error(x, +#define PDERROR pd_error(x, #endif @@ -292,13 +292,13 @@ static void pd_tilde_donew(t_pd_tilde *x, const char *pddir, const char *schedli /* but in the argument vector paths must be quoted if they contain whitespace */ if (strchr(pdexecbuf, ' ') && *pdexecbuf != '"' && *pdexecbuf != '\'') { - snprintf(tmpbuf, MAXPDSTRING, "\"%s\"", pdexecbuf); - strcpy(pdexecbuf, tmpbuf); + if (snprintf(tmpbuf, MAXPDSTRING, "\"%s\"", pdexecbuf) >= 0) + strcpy(pdexecbuf, tmpbuf); } if (strchr(schedbuf, ' ') && *schedbuf != '"' && *schedbuf != '\'') { - snprintf(tmpbuf, MAXPDSTRING, "\"%s\"", schedbuf); - strcpy(schedbuf, tmpbuf); + if (snprintf(tmpbuf, MAXPDSTRING, "\"%s\"", schedbuf) >= 0) + strcpy(schedbuf, tmpbuf); } if (strchr(patchdir_c, ' ') && *patchdir_c != '"' && *patchdir_c != '\'') snprintf(patchdir, MAXPDSTRING, "\"%s\"", patchdir_c); @@ -347,18 +347,18 @@ static void pd_tilde_donew(t_pd_tilde *x, const char *pddir, const char *schedli fprintf(stderr, "\n"); #endif #ifdef _WIN32 - if (_pipe(pipe1, 65536, O_BINARY | O_NOINHERIT) < 0) + if (_pipe(pipe1, 65536, O_BINARY | O_NOINHERIT) < 0) #else - if (pipe(pipe1) < 0) + if (pipe(pipe1) < 0) #endif { PDERROR "pd~: can't create pipe"); goto fail1; } #ifdef _WIN32 - if (_pipe(pipe2, 65536, O_BINARY | O_NOINHERIT) < 0) + if (_pipe(pipe2, 65536, O_BINARY | O_NOINHERIT) < 0) #else - if (pipe(pipe2) < 0) + if (pipe(pipe2) < 0) #endif { PDERROR "pd~: can't create pipe"); @@ -415,12 +415,8 @@ static void pd_tilde_donew(t_pd_tilde *x, const char *pddir, const char *schedli execv(cmdbuf, execargv); _exit(1); } - do { - unsigned int i; - for(i=FIXEDARG; execargv[i]; i++) { + for (i=FIXEDARG; execargv[i]; i++) free(execargv[i]); - } - } while(0); #endif /* _WIN32 */ /* done with fork/exec or spawn; parent continues here */ @@ -601,7 +597,7 @@ static void pd_tilde_dsp(t_pd_tilde *x, t_signal **sp) { int i, n = (x->x_ninsig || x->x_noutsig ? sp[0]->s_n : 1); t_sample **g; - + for (i = 0, g = x->x_insig; i < x->x_ninsig; i++, g++) *g = (*(sp++))->s_vec; /* if there were no input signals Pd still provided us with one, @@ -610,7 +606,7 @@ static void pd_tilde_dsp(t_pd_tilde *x, t_signal **sp) sp++; for (i = 0, g = x->x_outsig; i < x->x_noutsig; i++, g++) *g = (*(sp++))->s_vec; - + dsp_add(pd_tilde_perform, 2, x, n); } @@ -897,7 +893,7 @@ static void pd_tilde_anything(t_pd_tilde *x, t_symbol *s, } int main() -{ +{ t_class *c; c = class_new("pd_tilde~", (method)pd_tilde_new, (method)pd_tilde_free, sizeof(t_pd_tilde), (method)0L, A_GIMME, 0); diff --git a/extra/sigmund~/sigmund~.c b/extra/sigmund~/sigmund~.c index 1bdec39adc..13c2c4a383 100644 --- a/extra/sigmund~/sigmund~.c +++ b/extra/sigmund~/sigmund~.c @@ -1329,6 +1329,11 @@ static void sigmund_list(t_sigmund *x, t_symbol *s, int argc, t_atom *argv) error("sigmund: negative onset"); return; } + if (srate <= 0) + { + error("sigmund: bad samplerate"); + return; + } arraypoints = alloca(sizeof(t_float)*npts); if (!(a = (t_garray *)pd_findbyclass(syminput, garray_class)) || !garray_getfloatwords(a, &arraysize, &wordarray) || diff --git a/linux/README.txt b/linux/README.txt index 48f422e51b..165486603d 100644 --- a/linux/README.txt +++ b/linux/README.txt @@ -17,7 +17,8 @@ release checklist scp tarballs back to linux ... compile on windows: cd msw - ./send-msw.sh + ./sbuild-msw-64.sh + ./sbuild-msw-32.sh git tag (to see existing tags) git tag 0.43-3test1 (e.g.) git push origin @@ -42,6 +43,6 @@ rpm building (inactive) rpmbuild -bb rpmspec-alsa check size of compressed files: /usr/src/redhat/SRPMS/pd-0.36-0.src.rpm - /usr/src/redhat/RPMS/i386/pd-0.36-0.i386.rpm + /usr/src/redhat/RPMS/i386/pd-0.36-0.i386.rpm /usr/src/redhat/RPMS/i386/pd-alsa-0.36-0.i386.rpm copy from /usr/src/redhat/RPMS/i386 and /usr/src/redhat/SRPMS diff --git a/mac/README.txt b/mac/README.txt index 46119b9d0c..fd92826ef8 100644 --- a/mac/README.txt +++ b/mac/README.txt @@ -61,11 +61,11 @@ argument, a "Pd.app" is built. The version argument is only used as a suffix to the file name and contextual version info is pulled from configure script output. -An older copy of Tk 8.4 Wish is included with the Pd source distribution and -works across the majority of macOS versions up to 10.12. This is the default -Wish.app when using osx-app.sh. If you want to use a different Wish.app (a newer -version, a custom build, a system version), you can specify the donor via -commandline options, for example: +A pre-built universal (32/64 bit) Tk 8.5.19 Wish with patches applied is +included with the Pd source distribution and works across the majority of macOS +versions up to 10.14. This is the default Wish.app when using osx-app.sh. If you +want to use a different Wish.app (a newer version, a custom build, a system +version), you can specify the donor via commandline options, for example: # build Pd-0.47-1.app using Tk 8.6 installed to the system mac/osx-app.sh --system-tk 8.6 0.47-1 @@ -103,7 +103,7 @@ embedded Wish.apps you need with tcltk-wish.sh can save you some time as they can be reused when (re)making the Pd .app bundle. Usually, it's best to use stable releases of Tcl/Tk. However, there are times -when building from the current development version is useful. For instance, +when building from the current development version is useful. For instance, if there is a bug in the Tcl/Tk sources and the generated Wish.app crashes on your system, you can then see if there is a fix for this in the Tcl/Tk development version on GitHub. If so, then you can test by using the diff --git a/mac/build-mac64 b/mac/build-mac64 deleted file mode 100755 index 5fd5afe86e..0000000000 --- a/mac/build-mac64 +++ /dev/null @@ -1,47 +0,0 @@ -#!/bin/sh -#usage: ./build 0.38-0 or 0.38-0test4 - -if test x$1 == x -then - echo usage: ./build 0.38-0 or 0.38-0test4 - exit 1 -fi - -if test -f pd-$1.src.tar.gz -then - echo -n -else - echo cant find file pd-$1.src.tar.gz - exit 1 -fi - -if test -d Pd-$1-64bit.app -then - chmod -R 777 Pd-$1-64bit.app - rm -rf Pd-$1-64bit.app -fi - -tar xzf stuff/wish-shell.tgz -mv "Wish Shell.app" Pd-$1-64bit.app -cd Pd-$1-64bit.app/Contents -rm -f Info.plist -cp -p ../../stuff/Info.plist . -cd MacOS -mv "Wish Shell" Pd -cd .. -cd Resources -rm -f Wish.icns -cp -p ../../../stuff/pd.icns ../../../stuff/pd-file.icns . -mv "Wish Shell.rsrc" Pd.rsrc -tar xzf ../../../pd-$1.src.tar.gz -mv pd-$1/* . -rmdir pd-$1 -cd src -JACK=true make -f makefile.mac "ARCH=-arch x86_64" "EXTRAARCH=-arch x86_64" -cd .. -ln -s tcl Scripts -cd ../../.. -pwd -chmod -R u+w Pd-$1-64bit.app -touch Pd-$1-64bit.app -tar czf pd-$1-64bit.mac.tar.gz Pd-$1-64bit.app diff --git a/mac/build-macosx b/mac/build-macosx deleted file mode 100755 index a0de2d760d..0000000000 --- a/mac/build-macosx +++ /dev/null @@ -1,39 +0,0 @@ -#!/bin/sh -#usage: ./build 0.38-0 or 0.38-0test4 - -if test x$1 == x -then - echo usage: ./build 0.38-0 or 0.38-0test4 - exit 1 -fi - -if test -d Pd-$1.app -then - chmod -R 777 Pd-$1.app - rm -rf Pd-$1.app -fi - -tar xzf stuff/wish-shell.tgz -mv "Wish Shell.app" Pd-$1.app -cd Pd-$1.app/Contents -rm -f Info.plist -cp -p ../../stuff/Info.plist . -cd MacOS -mv "Wish Shell" Pd -cd .. -cd Resources -rm -f Wish.icns -cp -p ../../../stuff/pd.icns ../../../stuff/pd-file.icns . -mv "Wish Shell.rsrc" Pd.rsrc -tar xzf ../../../pd-$1.src.tar.gz -mv pd-$1/* . -rmdir pd-$1 -cd src -JACK=true make -f makefile.mac -cd .. -ln -s tcl Scripts -cd ../../.. -pwd -chmod -R u+w Pd-$1.app -touch Pd-$1.app -tar czf pd-$1.mac.tar.gz Pd-$1.app diff --git a/mac/ceammc_build.sh.in b/mac/ceammc_build.sh.in new file mode 100644 index 0000000000..8c51654d25 --- /dev/null +++ b/mac/ceammc_build.sh.in @@ -0,0 +1,470 @@ +#!/bin/bash + +############## +# VARS +############## + +# from CMake +SRC_DIR="@PROJECT_SOURCE_DIR@" +BUILD_DIR="@PROJECT_BINARY_DIR@" +DIST_DIR="@PROJECT_BINARY_DIR@/dist" +DYLIBBUNDLER="@DYLIBBUNDLER@" +BUNDLE="@BUNDLE@" +WISH_APP="@WISH_APP@" +TK_PATH="@TK_PATH@" +TCL_PATH="@TCL_PATH@" +TK_VERSION="@TK_VERSION@" +IS_SYSTEM_TK=@IS_SYSTEM_TK@ +LIB_LEAPMOTION="@LEAPMOTION_LIBRARY@" + +# relative dir names +PD_APP=$(basename $BUNDLE) +PD_CONTENT=$PD_APP/Contents +PD_RESOURCES=$PD_CONTENT/Resources +PD_FRAMEWORKS=$PD_CONTENT/Frameworks +PD_EXTRA=$PD_RESOURCES/extra +PD_INCLUDE=$PD_RESOURCES/include +PD_BIN=$PD_RESOURCES/bin +PD_TCL=$PD_RESOURCES/tcl +PD_PO=$PD_RESOURCES/po +PD_CEAMMC=$PD_EXTRA/ceammc +PD_SF2=$PD_CEAMMC/sf2 + +# absolute dir names +BUNDLE_APP="${DIST_DIR}/${PD_APP}" +BUNDLE_CONTENT="${DIST_DIR}/${PD_CONTENT}" +BUNDLE_RESOURCES="${DIST_DIR}/${PD_RESOURCES}" +BUNDLE_FRAMEWORKS="${DIST_DIR}/${PD_FRAMEWORKS}" +BUNDLE_PO="${DIST_DIR}/${PD_PO}" +BUNDLE_EXTRA="${DIST_DIR}/${PD_EXTRA}" +BUNDLE_BIN="${DIST_DIR}/${PD_BIN}" +BUNDLE_TCL="${DIST_DIR}/${PD_TCL}" +BUNDLE_CEAMMC="${DIST_DIR}/${PD_CEAMMC}" +BUNDLE_SF2="${DIST_DIR}/${PD_SF2}" +BUNDLE_INCLUDE="${DIST_DIR}/${PD_INCLUDE}" +BUNDLE_COMPLETIONS="${BUNDLE_TCL}/ceammc/custom_completions" + +# resources paths +PD_INFO_PLIST="${BUILD_DIR}/dist/Info.plist" +PD_ICON="${SRC_DIR}/ceammc/gui/icons/pd_ceammc.icns" +PD_ICON_FILE="${SRC_DIR}/ceammc/gui/icons/pd_doc.icns" + +# git vars +CURRENT_DATE=$(LANG=C date -u '+%d %h %Y %Z %H:%M:%S') +GIT_BRANCH=$(git --git-dir $SRC_DIR/.git symbolic-ref --short HEAD) +GIT_COMMIT=$(git --git-dir $SRC_DIR/.git describe --tags) + +# source paths +SRC_CEAMMC="${SRC_DIR}/ceammc" +SRC_TCL="${SRC_DIR}/tcl" +CEAMMC_EXT_SRC_DIR="${SRC_DIR}/ceammc/ext/src" +CEAMMC_EXT_BIN_DIR="${BUILD_DIR}/ceammc/ext/src" + +echo "TK_PATH: ${TK_PATH}" +echo "TCL_PATH: ${TCL_PATH}" + +############# +# FUNCTIONS +############# + +# find all Pd externals in specified directory +# usage: external_files DIR +function external_files() { + find "$1" -type f | grep -e 'd_fat' -e 'd_amd64' -e 'd_i386' -e 'pd_darwin' -e '\.pd' -e '\.tcl' +} + +function dylib_external_fix() { + exec=$1 + dir=$2 + + echo "\t- fixing @loader_path for $(basename $exec) ..." + $DYLIBBUNDLER -x "${exec}" -b -cd -d "${dir}" -p @loader_path/ -of > /dev/null +} + +function copy() +{ + file=$1 + dest=$2 + rel_dest=${dest#$BUNDLE_APP} + rel_dest=${rel_dest:1} + + cp -f "${file}" "${dest}" + if [ $? -eq 0 ]; + then + echo "\t- copying $(basename $1) to \"${rel_dest}\"" + fi +} + +function copy_and_fix_dll() +{ + file=$1 + dir=$2 + + copy "${file}" "${dir}" + dylib_external_fix "${dir}/$(basename $file)" "${dir}" +} + +function exists() { + [ -e "$1" ] +} + +function section() { + echo + tput setaf 2 + echo $1 "..." + tput sgr0 +} + +############## +# MAIN +############## + +# set globbing +shopt -s extglob +mkdir -p "${DIST_DIR}" +cd "${DIST_DIR}" + +############## +# TCL/TK/WISH +############## + +section "Copy Wish Shell to ${PD_APP}" +cp -R "${WISH_APP}" "${BUNDLE_APP}" + +copy "${PD_INFO_PLIST}" "${BUNDLE_CONTENT}" + +section "Update Wish icon" +cd "${BUNDLE_RESOURCES}" +rm -f Wish.icns +cp -p "${PD_ICON}" "${PD_ICON_FILE}" . +mkdir -p "${BUNDLE_BIN}" + +if [ $IS_SYSTEM_TK -eq 0 ] +then + section "Copying TCL/Tk Frameworks" + mkdir -p "${BUNDLE_FRAMEWORKS}" + + cp -R "${TK_PATH}" "${BUNDLE_FRAMEWORKS}" + cp -R "${TCL_PATH}" "${BUNDLE_FRAMEWORKS}" + # remove unused Tcl files + rm -rf "${BUNDLE_FRAMEWORKS}/Tcl.framework/Versions/${TK_VERSION}/Headers" + rm -rf "${BUNDLE_FRAMEWORKS}/Tcl.framework/Versions/${TK_VERSION}/PrivateHeaders" + rm -rf "${BUNDLE_FRAMEWORKS}/Tcl.framework/Versions/${TK_VERSION}/Resources/Documentation" + # remove unused Tk files + rm -rf "${BUNDLE_FRAMEWORKS}/Tk.framework/Versions/${TK_VERSION}/Headers" + rm -rf "${BUNDLE_FRAMEWORKS}/Tk.framework/Versions/${TK_VERSION}/PrivateHeaders" + rm -rf "${BUNDLE_FRAMEWORKS}/Tk.framework/Versions/${TK_VERSION}/Resources/Scripts/demos" + rm -rf "${BUNDLE_FRAMEWORKS}/Tk.framework/Versions/${TK_VERSION}/Resources/Wish.app" + + section "Tk link fix" + /usr/bin/otool -LX "${BUNDLE_CONTENT}/MacOS/Wish" | cut -f2 | cut -d ' ' -f1 | grep -e Tk -e Tcl | while read framework + do + newpath=$(echo $framework | sed 's|/Library/Frameworks/||') + install_name_tool -change $framework "@executable_path/../Frameworks/$newpath" "${BUNDLE_CONTENT}/MacOS/Wish" > /dev/null + done +fi + +############ +# Pd files +############ + +section "Copying vanilla binaries" +copy_and_fix_dll "$BUILD_DIR/src/pd" "${BUNDLE_BIN}" +copy_and_fix_dll "$BUILD_DIR/src/pdsend" "${BUNDLE_BIN}" +copy_and_fix_dll "$BUILD_DIR/src/pdreceive" "${BUNDLE_BIN}" + +section "Copying vanilla tcl files" +mkdir -p "${BUNDLE_TCL}/ceammc" +cd "${BUNDLE_TCL}/.." +rsync -a --exclude="CMake*" --exclude="Make*" "${SRC_TCL}" . +# link +ln -s tcl Scripts + +section "Copying vanilla docs" +cd "${BUNDLE_RESOURCES}" +rsync -a --exclude=.DS_Store --exclude=CMake* "${SRC_DIR}/doc" . + +section "Copying compiled PO translations" +mkdir -p "${BUNDLE_PO}" +cd "${BUNDLE_PO}" +for msg in ${BUILD_DIR}/po/*.msg +do + copy "${msg}" "${BUNDLE_PO}" +done + +section "Copying source PO translations" +cd "${BUNDLE_PO}" +for po in ${SRC_DIR}/po/*.po +do + copy "${po}" "${BUNDLE_PO}" +done + +section "Copying vanilla abstractions and help" +mkdir -p "${BUNDLE_EXTRA}" +for pd in ${SRC_DIR}/extra/*.pd +do + copy "${pd}" "${BUNDLE_EXTRA}" +done + +section "Copying vanilla externals" +find $BUILD_DIR/extra -maxdepth 1 -type d | sed 1d | grep -v -i cmake | while read ext_dir +do + EXT_NAME=$(basename $ext_dir) + mkdir -p "${BUNDLE_EXTRA}/${EXT_NAME}" + find "${ext_dir}" -type f | grep -v -i cmake | grep -v Makefile | while read target + do + copy "${target}" "${BUNDLE_EXTRA}/${EXT_NAME}" + done +done + +section "Copying vanilla headers" +mkdir -p "${BUNDLE_INCLUDE}" +copy "${SRC_DIR}/src/m_pd.h" "${BUNDLE_INCLUDE}" + +############ +# CEAMMC +############ + +section "Copying CEAMMC tcl plugins" +mkdir -p "${BUNDLE_COMPLETIONS}" +for tcl in ${SRC_DIR}/ceammc/gui/plugins/*.tcl +do + copy ${tcl} "${BUNDLE_TCL}/ceammc" +done + +for cfg in ${SRC_DIR}/ceammc/gui/plugins/*.cfg +do + copy ${cfg} "${BUNDLE_TCL}/ceammc" +done + +mkdir -p "${BUNDLE_TCL}/completion-plugin" +for tcl in ${SRC_DIR}/ceammc/gui/plugins/completion-plugin/*.tcl +do + copy ${tcl} "${BUNDLE_TCL}/ceammc" +done + +for cfg in ${SRC_DIR}/ceammc/gui/plugins/completion-plugin/*.cfg +do + copy ${cfg} "${BUNDLE_TCL}/ceammc" +done + +section "Copying CEAMMC tcl completion" +copy $SRC_DIR/ceammc/ext/ceammc_objects.txt "${BUNDLE_COMPLETIONS}" +copy $SRC_DIR/ceammc/ext/extra_objects.txt "${BUNDLE_COMPLETIONS}" + +section "Copying CEAMMC dll" +mkdir -p "${BUNDLE_CEAMMC}" +for dll in $CEAMMC_EXT_BIN_DIR/lib/libceammc*.dylib +do + copy ${dll} "${BUNDLE_CEAMMC}" +done + +section "Copying CEAMMC abstractions" +for abs in $SRC_DIR/ceammc/ext/abstractions/*.pd +do + copy ${abs} "${BUNDLE_CEAMMC}" +done + +section "Copying CEAMMC externals" +external_files $CEAMMC_EXT_BIN_DIR | while read f +do + copy_and_fix_dll ${f} "${BUNDLE_CEAMMC}" +done + +section "Copying CEAMMC STK rawwaves" +mkdir -p "${BUNDLE_CEAMMC}/stk" +for wave in $SRC_DIR/ceammc/extra/stk/stk/rawwaves/*.raw +do + copy ${wave} "${BUNDLE_CEAMMC}/stk" +done + +section "Copying CEAMMC fluidsynth soundfonts" +mkdir -p "${BUNDLE_SF2}" +for sf in $SRC_CEAMMC/extra/fluidsynth/fluidsynth/sf2/* +do + copy ${sf} "${BUNDLE_SF2}" +done + +section "Copying CEAMMC cmake files" +mkdir -p "${BUNDLE_INCLUDE}" +copy "${SRC_DIR}/cmake/PdExternal.cmake" "${BUNDLE_INCLUDE}" + +section "Copying CEAMMC class wrappers" +for wrapper in $BUILD_DIR/ceammc/ext/class-wrapper/*.@(d_fat|d_amd64|d_i386|pd_darwin) +do + fname=$(basename $wrapper) + mod_name=$(echo $fname | cut -d. -f1) + copy_and_fix_dll ${wrapper} "${BUNDLE_CEAMMC}" + for pdhelp in $SRC_DIR/ceammc/ext/class-wrapper/modules/$mod_name/help/*-help.pd + do + copy ${pdhelp} "${BUNDLE_CEAMMC}" + done +done + +section "Copying CEAMMC class wrappers completions" +mkdir -p "${BUNDLE_COMPLETIONS}" +find ${SRC_CEAMMC}/ext/class-wrapper/modules -name 'completion_*.txt' | while read txt +do + copy $txt "${BUNDLE_COMPLETIONS}" +done + +section "Copying CEAMMC help files" +for pdhelp in ${SRC_CEAMMC}/ext/doc/*-help.pd +do + copy ${pdhelp} "${BUNDLE_CEAMMC}" + chmod 0444 "${BUNDLE_CEAMMC}/$(basename $pdhelp)" +done + +section "Copying CEAMMC help additional files" +for f in ${SRC_CEAMMC}/ext/doc/*.@(mod|txt|wav) +do + copy ${f} "${BUNDLE_CEAMMC}" + chmod 0444 "${BUNDLE_CEAMMC}/$(basename $f)" +done + +section "Copying CEAMMC HOA help files" +mkdir -p "${BUNDLE_CEAMMC}/hoa" +for f in $SRC_CEAMMC/ext/doc/hoa/*.@(pd|txt) +do + copy ${f} "${BUNDLE_CEAMMC}/hoa" + chmod 0444 "${BUNDLE_CEAMMC}/hoa/$(basename $f)" +done + +section "Change Pd help file" +rm -f "${BUNDLE_CEAMMC}/index-help.pd" +rm -f "${BUNDLE_EXTRA}/index-help.pd" +copy $SRC_DIR/ceammc/ext/doc/index-help.pd "${BUNDLE_EXTRA}" +chmod 0444 "${BUNDLE_EXTRA}/index-help.pd" + +section "Copying CEAMMC about file" +cat $BUILD_DIR/ceammc/ext/doc/about.pd | sed "s/%GIT_BRANCH%/$GIT_BRANCH/g" | \ + sed "s/%GIT_COMMIT%/$GIT_COMMIT/g" | \ + sed "s/%BUILD_DATE%/$CURRENT_DATE/g" > "${BUNDLE_CEAMMC}/about.pd" +chmod 0444 "${BUNDLE_CEAMMC}/about.pd" + +section "Copying license" +copy $SRC_DIR/License.txt "${BUNDLE_RESOURCES}/Scripts" + +############## +# 3RD PARTY +############## + +section "Copying CEAMMC extra" +copy_and_fix_dll ${BUILD_DIR}/ceammc/extra/comport/system.serial.@(d_fat|d_amd64|d_i386|pd_darwin) "${BUNDLE_CEAMMC}" + +# install soundtouch~ to ceammc +section "Copying SoundTouch external" +for ext in $BUILD_DIR/ceammc/extra/SoundTouch/pd/*.@(d_fat|d_amd64|d_i386|pd_darwin) +do + copy_and_fix_dll ${ext} "${BUNDLE_CEAMMC}" +done + +for pdhelp in $SRC_DIR/ceammc/extra/SoundTouch/pd/*-help.pd +do + copy ${pdhelp} "${BUNDLE_CEAMMC}" +done + +section "Copying zconf" +mkdir -p "${BUNDLE_EXTRA}/zconf" +copy ${BUILD_DIR}/ceammc/extra/flext/zconf/zconf.@(d_fat|d_amd64|d_i386|pd_darwin) "${BUNDLE_EXTRA}/zconf" +copy ${SRC_DIR}/ceammc/extra/flext/zconf/zconf-help.pd "${BUNDLE_EXTRA}/zconf" + +section "Copying libdir" +mkdir -p "${BUNDLE_EXTRA}/libdir" +copy $BUILD_DIR/ceammc/extra/libdir/libdir.@(d_fat|d_amd64|d_i386|pd_darwin) "${BUNDLE_EXTRA}/libdir" +copy $SRC_DIR/ceammc/extra/libdir/libdir/libdir-help.pd "${BUNDLE_EXTRA}/libdir" +copy $SRC_DIR/ceammc/extra/libdir/libdir/libdir-meta.pd "${BUNDLE_EXTRA}/libdir" +copy $SRC_DIR/ceammc/extra/libdir/libdir/LICENSE.txt "${BUNDLE_EXTRA}/libdir" + +section "Copying import" +mkdir -p "${BUNDLE_EXTRA}/import" +copy $BUILD_DIR/ceammc/extra/import/import.@(d_fat|d_amd64|d_i386|pd_darwin) "${BUNDLE_EXTRA}/import" +copy $SRC_DIR/ceammc/extra/import/import-help.pd "${BUNDLE_EXTRA}/import" +copy $SRC_DIR/ceammc/extra/import/import-meta.pd "${BUNDLE_EXTRA}/import" +copy $SRC_DIR/ceammc/extra/import/LICENSE.txt "${BUNDLE_EXTRA}/import" + +section "Copying VASP" +mkdir -p "${BUNDLE_EXTRA}/vasp" +copy $BUILD_DIR/ceammc/extra/flext/vasp.@(d_fat|d_amd64|d_i386|pd_darwin) "${BUNDLE_EXTRA}/vasp" +cp $SRC_DIR/ceammc/extra/flext/vasp/pd/* "${BUNDLE_EXTRA}/vasp" +cp $SRC_DIR/ceammc/extra/flext/vasp/pd-help/* "${BUNDLE_EXTRA}/vasp" +copy $SRC_DIR/ceammc/extra/flext/vasp/gpl.txt "${BUNDLE_EXTRA}/vasp" +copy $SRC_DIR/ceammc/extra/flext/vasp/license.txt "${BUNDLE_EXTRA}/vasp" + +section "Copying xsample" +mkdir -p "${BUNDLE_EXTRA}/xsample" +copy $BUILD_DIR/ceammc/extra/flext/xsample/xsample.@(d_fat|d_amd64|d_i386|pd_darwin) "${BUNDLE_EXTRA}/xsample" +cp $SRC_DIR/ceammc/extra/flext/xsample/xsample/pd/* "${BUNDLE_EXTRA}/xsample" +cp $SRC_DIR/ceammc/extra/flext/xsample/xsample/pd-ex/* "${BUNDLE_EXTRA}/xsample" +copy $SRC_DIR/ceammc/extra/flext/xsample/xsample/gpl.txt "${BUNDLE_EXTRA}/xsample" +copy $SRC_DIR/ceammc/extra/flext/xsample/xsample/license.txt "${BUNDLE_EXTRA}/xsample" + +section "Copying LyonPotpourri" +mkdir -p "${BUNDLE_EXTRA}/lyonpotpourri/sound" +for ext in $BUILD_DIR/ceammc/extra/lyonpotpourri/*.@(d_fat|d_amd64|d_i386|pd_darwin) +do + copy ${ext} "${BUNDLE_EXTRA}/lyonpotpourri" +done + +for pdhelp in $SRC_DIR/ceammc/extra/lyonpotpourri/*-help.pd +do + copy ${pdhelp} "${BUNDLE_EXTRA}/lyonpotpourri" +done + +copy $SRC_DIR/ceammc/extra/lyonpotpourri/LICENSE.txt "${BUNDLE_EXTRA}/lyonpotpourri" +cp $SRC_DIR/ceammc/extra/lyonpotpourri/examples/* "${BUNDLE_EXTRA}/lyonpotpourri" + +section "Copying FFTease" +mkdir -p "${BUNDLE_EXTRA}/fftease/sound" +for ext in $BUILD_DIR/ceammc/extra/fftease/*.@(d_fat|d_amd64|d_i386|pd_darwin) +do + copy ${ext} "${BUNDLE_EXTRA}/fftease" +done + +for pdhelp in $SRC_DIR/ceammc/extra/fftease/fftease/help/*.pd +do + copy ${pdhelp} "${BUNDLE_EXTRA}/fftease" +done + +copy $SRC_DIR/ceammc/extra/fftease/fftease/LICENSE.txt "${BUNDLE_EXTRA}/fftease" +cp $SRC_DIR/ceammc/extra/fftease/fftease/sound/* "${BUNDLE_EXTRA}/fftease" + +# LeapMotion +if exists $BUILD_DIR/ceammc/extra/flext/leapmotion/leapmotion.@(d_fat|d_amd64|d_i386|pd_darwin) +then + section "Copying LeapMotion" + mkdir -p "$BUNDLE_EXTRA/leapmotion" + copy $BUILD_DIR/ceammc/extra/flext/leapmotion/leapmotion.@(d_fat|d_amd64|d_i386|pd_darwin) "$BUNDLE_EXTRA/leapmotion" + copy $LIB_LEAPMOTION "$BUNDLE_EXTRA/leapmotion" + + for pdhelp in $SRC_DIR/ceammc/extra/flext/leapmotion/*.pd + do + copy ${pdhelp} "$BUNDLE_EXTRA/leapmotion" + done +fi + +section "Copying autotune external" +mkdir -p "$BUNDLE_EXTRA/autotune" +for ext in $BUILD_DIR/ceammc/extra/autotune/*.@(d_fat|d_amd64|d_i386|pd_darwin) +do + copy ${ext} "$BUNDLE_EXTRA/autotune" +done + +for pdhelp in $SRC_DIR/ceammc/extra/autotune/*-help.pd +do + copy ${pdhelp} "$BUNDLE_EXTRA/autotune" +done + +section "Copying disis_munger~ external" +mkdir -p "$BUNDLE_EXTRA/disis_munger~" +for ext in $BUILD_DIR/ceammc/extra/flext/disis_munger/*.@(d_fat|d_amd64|d_i386|pd_darwin) +do + copy ${ext} "$BUNDLE_EXTRA/disis_munger~" +done + +for pdhelp in $SRC_DIR/ceammc/extra/flext/disis_munger/*-help.pd +do + copy ${pdhelp} "$BUNDLE_EXTRA/disis_munger~" +done + +cd "${BUILD_DIR}" diff --git a/mac/cmake-build-mac.sh.in b/mac/cmake-build-mac.sh.in deleted file mode 100644 index a1b89beac4..0000000000 --- a/mac/cmake-build-mac.sh.in +++ /dev/null @@ -1,299 +0,0 @@ -#!/bin/bash -SRC_DIR=@PROJECT_SOURCE_DIR@ -BUILD_DIR=@PROJECT_BINARY_DIR@ -WISH=wish-shell.tgz -DYLIBBUNDLER="@DYLIBBUNDLER@" - -PD_APP=$(basename @BUNDLE@) -PD_CONTENT=$BUILD_DIR/dist/$PD_APP/Contents -PD_RESOURCES=$PD_CONTENT/Resources -PD_EXTRA=$PD_RESOURCES/extra -PD_BIN=$PD_RESOURCES/bin -PD_TCL=$PD_RESOURCES/tcl -PD_CEAMMC=$PD_EXTRA/ceammc -PD_SF2=$PD_CEAMMC/sf2 - -SRC_CEAMMC=$SRC_DIR/ceammc - -PD_INFO="$BUILD_DIR/dist/Info.plist" -PD_ICON="$SRC_DIR/ceammc/gui/icons/pd_ceammc.icns" -PD_ICON_FILE="$SRC_DIR/ceammc/gui/icons/pd_doc.icns" -WISH_APP="@WISH_APP@" -TK_PATH="@TK_PATH@" -TCL_PATH="@TCL_PATH@" -TK_VERSION="@TK_VERSION@" -IS_SYSTEM_TK=@IS_SYSTEM_TK@ - -CURRENT_DATE=$(LANG=C date -u '+%d %h %Y %Z %H:%M:%S') -GIT_BRANCH=$(git --git-dir $SRC_DIR/.git symbolic-ref --short HEAD) -GIT_COMMIT=$(git --git-dir $SRC_DIR/.git describe --tags) - -echo "$TK_PATH" -echo "$TCL_PATH" - -CEAMMC_EXT_SRC_DIR="$SRC_DIR/ceammc/ext/src" -CEAMMC_EXT_BIN_DIR="$BUILD_DIR/ceammc/ext/src" - -LIB_LEAPMOTION="@LEAPMOTION_LIBRARY@" - -# set globbing -shopt -s extglob - -cd "$BUILD_DIR" -mkdir -p dist -cd dist - -echo "Copy Wish Shell to $PD_APP" -cp -R "${WISH_APP}" "$PD_APP" -cd "$PD_APP/Contents" - -echo "Copying Info.plist..." -cp -p "$PD_INFO" . - -cd Resources -rm -f Wish.icns -cp -p "$PD_ICON" "$PD_ICON_FILE" . -#mv "Wish.rsrc" Pd.rsrc -mkdir bin - -echo "Copying binaries..." -cp "$BUILD_DIR/src/pd" bin -cp "$BUILD_DIR/src/pdsend" bin -cp "$BUILD_DIR/src/pdreceive" bin - - -echo "Copying tcl files..." -rsync -a --exclude="CMake*" --exclude="Make*" "$SRC_DIR/tcl" . -ln -s tcl Scripts -mkdir -p tcl/ceammc - -echo "Copying plugins..." -cp -R $SRC_DIR/ceammc/gui/plugins/*.tcl tcl/ceammc -cp -R $SRC_DIR/ceammc/gui/plugins/*.cfg tcl/ceammc - -echo "Copying docs..." -rsync -a --exclude=.DS_Store --exclude=CMake* "$SRC_DIR/doc" . -echo "Copying translations..." -mkdir -p po -cp $BUILD_DIR/po/*.msg "$PD_RESOURCES/po" - -echo "Copying extensions:" -mkdir -p extra - -cp $SRC_DIR/extra/*.pd extra - -function extension_files() { - find "$1" -type f | grep -e 'd_fat' -e 'd_amd64' -e 'd_i386' -e 'pd_darwin' -e '\.pd' -e '\.tcl' -} - -find $BUILD_DIR/extra -maxdepth 1 -type d | sed 1d | grep -v -i cmake | while read ext_dir -do - EXT_NAME=$(basename $ext_dir) - echo "\t$EXT_NAME" - mkdir extra/$EXT_NAME - find "$ext_dir" -type f | grep -v -i cmake | grep -v Makefile | while read target - do - echo "\t\tCopying $(basename $target) ..." - cp $target extra/$EXT_NAME - done -# cp -R "$ext_dir" extra -done - -# CEAMMC staff -mkdir -p $PD_EXTRA/ceammc - -echo "Copying CEAMMC dll:" -cp $CEAMMC_EXT_BIN_DIR/lib/libceammc*.dylib $PD_EXTRA/ceammc -#cp $CEAMMC_EXT_BIN_DIR/*.dylib $PD_EXTRA/ceammc - -echo "Copying CEAMMC extension:" -extension_files $CEAMMC_EXT_BIN_DIR | while read f -do - echo "\t$(basename $f)" - cp "$f" $PD_EXTRA/ceammc - $DYLIBBUNDLER -x $PD_EXTRA/ceammc/$(basename $f) -b -cd -d $PD_EXTRA/ceammc -p @loader_path/ -of -done - -function dylib_external_fix() { - exec=$1 - dir=$2 - - $DYLIBBUNDLER -x "$exec" -b -cd -d "$dir" -p @loader_path/ -of -} - -echo "Copying Additional extra:" -cp $BUILD_DIR/ceammc/extra/comport/system.serial.@(d_fat|d_amd64|d_i386|pd_darwin) $PD_EXTRA/ceammc -cp $BUILD_DIR/ceammc/extra/hcs/*.@(d_fat|d_amd64|d_i386|pd_darwin) $PD_EXTRA/ceammc -cp $SRC_DIR/ceammc/extra/hcs/*.tcl $PD_EXTRA/ceammc -dylib_external_fix $PD_EXTRA/ceammc/system.serial.@(d_fat|d_amd64|d_i386|pd_darwin) $PD_EXTRA/ceammc -dylib_external_fix $PD_EXTRA/ceammc/system.cursor.@(d_fat|d_amd64|d_i386|pd_darwin) $PD_EXTRA/ceammc -dylib_external_fix $PD_EXTRA/ceammc/system.colorpanel.@(d_fat|d_amd64|d_i386|pd_darwin) $PD_EXTRA/ceammc - -echo "Copying zconf..." -mkdir -p $PD_EXTRA/zconf -cp $BUILD_DIR/ceammc/extra/flext/zconf/zconf.@(d_fat|d_amd64|d_i386|pd_darwin) $PD_EXTRA/zconf -cp $SRC_DIR/ceammc/extra/flext/zconf/zconf/zconf-help.pd $PD_EXTRA/zconf - -echo "Copying libdir..." -mkdir -p $PD_EXTRA/libdir -cp $BUILD_DIR/ceammc/extra/libdir/libdir.@(d_fat|d_amd64|d_i386|pd_darwin) $PD_EXTRA/libdir -cp $SRC_DIR/ceammc/extra/libdir/libdir/libdir-help.pd $PD_EXTRA/libdir -cp $SRC_DIR/ceammc/extra/libdir/libdir/libdir-meta.pd $PD_EXTRA/libdir -cp $SRC_DIR/ceammc/extra/libdir/libdir/LICENSE.txt $PD_EXTRA/libdir - -echo "Copying import..." -mkdir -p $PD_EXTRA/import -cp $BUILD_DIR/ceammc/extra/import/import.@(d_fat|d_amd64|d_i386|pd_darwin) $PD_EXTRA/import -cp $SRC_DIR/ceammc/extra/import/import-help.pd $PD_EXTRA/import -cp $SRC_DIR/ceammc/extra/import/import-meta.pd $PD_EXTRA/import -cp $SRC_DIR/ceammc/extra/import/LICENSE.txt $PD_EXTRA/import - -echo "Copying VASP..." -mkdir -p $PD_EXTRA/vasp -cp $BUILD_DIR/ceammc/extra/flext/vasp.@(d_fat|d_amd64|d_i386|pd_darwin) $PD_EXTRA/vasp -cp $SRC_DIR/ceammc/extra/flext/vasp/pd/* $PD_EXTRA/vasp -cp $SRC_DIR/ceammc/extra/flext/vasp/pd-help/* $PD_EXTRA/vasp -cp $SRC_DIR/ceammc/extra/flext/vasp/gpl.txt $PD_EXTRA/vasp -cp $SRC_DIR/ceammc/extra/flext/vasp/license.txt $PD_EXTRA/vasp - -echo "Copying xsample..." -mkdir -p $PD_EXTRA/xsample -cp $BUILD_DIR/ceammc/extra/flext/xsample/xsample.@(d_fat|d_amd64|d_i386|pd_darwin) $PD_EXTRA/xsample -cp $SRC_DIR/ceammc/extra/flext/xsample/xsample/pd/* $PD_EXTRA/xsample -cp $SRC_DIR/ceammc/extra/flext/xsample/xsample/pd-ex/* $PD_EXTRA/xsample -cp $SRC_DIR/ceammc/extra/flext/xsample/xsample/gpl.txt $PD_EXTRA/xsample -cp $SRC_DIR/ceammc/extra/flext/xsample/xsample/license.txt $PD_EXTRA/xsample - -echo "Copying LyonPotpourri..." -mkdir -p $PD_EXTRA/lyonpotpourri/sound -cp $BUILD_DIR/ceammc/extra/lyonpotpourri/*.@(d_fat|d_amd64|d_i386|pd_darwin) $PD_EXTRA/lyonpotpourri -cp $SRC_DIR/ceammc/extra/lyonpotpourri/*-help.pd $PD_EXTRA/lyonpotpourri -cp $SRC_DIR/ceammc/extra/lyonpotpourri/LICENSE.txt $PD_EXTRA/lyonpotpourri -cp $SRC_DIR/ceammc/extra/lyonpotpourri/examples/* $PD_EXTRA/lyonpotpourri/sound - -echo "Copying FFTease..." -mkdir -p $PD_EXTRA/fftease/sound -cp $BUILD_DIR/ceammc/extra/fftease/*.@(d_fat|d_amd64|d_i386|pd_darwin) $PD_EXTRA/fftease -cp $SRC_DIR/ceammc/extra/fftease/fftease/help/*.pd $PD_EXTRA/fftease -cp $SRC_DIR/ceammc/extra/fftease/fftease/LICENSE.txt $PD_EXTRA/fftease -cp $SRC_DIR/ceammc/extra/fftease/fftease/sound/* $PD_EXTRA/fftease/sound - -exists() { - [ -e "$1" ] -} - -if exists $BUILD_DIR/ceammc/extra/flext/leapmotion/leapmotion.@(d_fat|d_amd64|d_i386|pd_darwin) -then - echo "Copying LeapMotion" - mkdir $PD_EXTRA/leapmotion - cp $BUILD_DIR/ceammc/extra/flext/leapmotion/leapmotion.@(d_fat|d_amd64|d_i386|pd_darwin) $PD_EXTRA/leapmotion - cp $SRC_DIR/ceammc/extra/flext/leapmotion/*.pd $PD_EXTRA/leapmotion - cp $LIB_LEAPMOTION $PD_EXTRA/leapmotion -fi - -# install soundtouch~ to ceammc -echo "Copying SoundTouch external..." -cp $BUILD_DIR/ceammc/extra/SoundTouch/pd/*.@(d_fat|d_amd64|d_i386|pd_darwin) $PD_EXTRA/ceammc -cp $SRC_DIR/ceammc/extra/SoundTouch/pd/*-help.pd $PD_EXTRA/ceammc -dylib_external_fix $PD_EXTRA/ceammc/soundtouch~.@(d_fat|d_amd64|d_i386|pd_darwin) $PD_EXTRA/ceammc - -echo "Copying autotune external..." -mkdir $PD_EXTRA/autotune -cp $BUILD_DIR/ceammc/extra/autotune/*.@(d_fat|d_amd64|d_i386|pd_darwin) $PD_EXTRA/autotune -cp $SRC_DIR/ceammc/extra/autotune/*-help.pd $PD_EXTRA/autotune - -echo "Copying disis_munger~ external..." -mkdir $PD_EXTRA/disis_munger~ -cp $BUILD_DIR/ceammc/extra/flext/disis_munger/*.@(d_fat|d_amd64|d_i386|pd_darwin) $PD_EXTRA/disis_munger~ -cp $SRC_DIR/ceammc/extra/flext/disis_munger/*-help.pd $PD_EXTRA/disis_munger~ - -echo "Copying CEAMMC help files:" -cp $SRC_DIR/ceammc/ext/doc/*-help.pd $PD_EXTRA/ceammc -cp $SRC_DIR/ceammc/ext/doc/*.mod $PD_EXTRA/ceammc -cp $SRC_DIR/ceammc/ext/doc/*.txt $PD_EXTRA/ceammc -cp $SRC_DIR/ceammc/ext/doc/*.wav $PD_EXTRA/ceammc -# handle index file -rm $PD_EXTRA/ceammc/index-help.pd -chmod 0444 $PD_EXTRA/ceammc/*-help.pd -cp $SRC_DIR/ceammc/ext/doc/index-help.pd $PD_EXTRA -chmod 0444 $PD_EXTRA/index-help.pd -cp $SRC_DIR/ceammc/ext/ceammc_objects.txt $PD_TCL/ceammc -cp $SRC_DIR/ceammc/ext/extra_objects.txt $PD_TCL/ceammc - -mkdir -p $PD_TCL/ceammc/user_objects -cp $(find $SRC_DIR/ceammc/ext/class-wrapper/modules -name 'completion_*.txt') $PD_TCL/ceammc/user_objects - -echo "Copy about file..." -cat $BUILD_DIR/ceammc/ext/doc/about.pd | sed "s/%GIT_BRANCH%/$GIT_BRANCH/g" | \ - sed "s/%GIT_COMMIT%/$GIT_COMMIT/g" | \ - sed "s/%BUILD_DATE%/$CURRENT_DATE/g" > $PD_EXTRA/ceammc/about.pd -chmod 0444 $PD_EXTRA/ceammc/about.pd - -echo "Copying license..." -cp $SRC_DIR/License.txt Scripts - -echo "Copying STK rawwaves..." -mkdir -p $PD_EXTRA/ceammc/stk -cp $SRC_DIR/ceammc/extra/stk/stk/rawwaves/*.raw $PD_EXTRA/ceammc/stk - -echo "Copying libs..." -NEWLIBPATH="@executable_path/../lib" -EXECFILE="Resources/bin/pd" -LIBDIR="Resources/lib" -cd .. -# to make codesign happy -mkdir -p Frameworks -mkdir -p $LIBDIR - -$DYLIBBUNDLER -x $EXECFILE -b -cd -d $LIBDIR -p $NEWLIBPATH -of -$DYLIBBUNDLER -x "Resources/bin/pdsend" -b -cd -d $LIBDIR -p $NEWLIBPATH -of -$DYLIBBUNDLER -x "Resources/bin/pdreceive" -b -cd -d $LIBDIR -p $NEWLIBPATH -of - -#copy Tcl${TK_VERSION} -if [ $IS_SYSTEM_TK -eq 0 ] -then - echo "Copying TCL/Tk Frameworks..." - cp -R "${TK_PATH}" Frameworks - cp -R "${TCL_PATH}" Frameworks - rm -rf "./Frameworks/Tk.framework/Versions/${TK_VERSION}/Resources/Wish.app" - rm -rf "./Frameworks/Tcl.framework/Versions/${TK_VERSION}/Resources/Documentation" - - echo "Tk link fix..." - /usr/bin/otool -LX $PD_CONTENT/MacOS/Wish | cut -f2 | cut -d ' ' -f1 | grep -e Tk -e Tcl | while read framework - do - newpath=$(echo $framework | sed 's|/Library/Frameworks/||') - install_name_tool -change $framework "@executable_path/../Frameworks/$newpath" $PD_CONTENT/MacOS/Wish - done -fi - -echo "Copying headers..." -mkdir -p $PD_RESOURCES/include -cp $SRC_DIR/src/m_pd.h $PD_RESOURCES/include - -echo "Copying cmake files..." -CMAKE_DIR=$PD_RESOURCES/share/pd/cmake -echo $CMAKE_DIR -mkdir -p $CMAKE_DIR -cp $SRC_DIR/cmake/PdExternal.cmake $CMAKE_DIR - -echo "Copying abstractions..." -cp $SRC_DIR/ceammc/ext/abstractions/*.pd $PD_CEAMMC - -echo "Copying class wrapper objects..." -for wrapper in $BUILD_DIR/ceammc/ext/class-wrapper/*.@(d_fat|d_amd64|d_i386|pd_darwin) -do - fname=$(basename $wrapper) - mod_name=$(echo $fname | cut -d. -f1) - mod_path=$PD_CEAMMC - mkdir $mod_path - cp $wrapper $mod_path - dylib_external_fix $mod_path/$fname $PD_CEAMMC - cp -R $SRC_DIR/ceammc/ext/class-wrapper/modules/$mod_name/help/*.pd $mod_path -done - - -echo "Sound fonts..." -mkdir -p $PD_SF2 -cp $SRC_CEAMMC/extra/sf2/* $PD_SF2 - -cd ../../.. diff --git a/mac/osx-app.sh b/mac/osx-app.sh index 2be1d5973b..0d93e2a379 100755 --- a/mac/osx-app.sh +++ b/mac/osx-app.sh @@ -193,7 +193,9 @@ fi # extract included Wish app if [ $included_wish == true ] ; then tar xzf stuff/wish-shell.tgz - mv "Wish Shell.app" Wish.app + if [ -e "Wish Shell.app" ] ; then + mv "Wish Shell.app" Wish.app + fi WISH=Wish.app # build Wish or use the system Wish diff --git a/mac/stuff/Info.plist b/mac/stuff/Info.plist index ddb507d94a..f9783a53ad 100644 --- a/mac/stuff/Info.plist +++ b/mac/stuff/Info.plist @@ -1,9 +1,13 @@ - + + ATSApplicationFontsPath + font CFBundleDevelopmentRegion English + CFBundleDisplayName + Pd CFBundleDocumentTypes @@ -14,24 +18,60 @@ CFBundleTypeIconFile pd-file.icns CFBundleTypeName - Pure Data Patch + Pure Data patch CFBundleTypeRole Editor + CFBundleTypeMIMETypes + + text/plain + CFBundleExecutable Pd + CFBundleGetInfoString + ???? + CFBundleIconFile + pd.icns CFBundleIdentifier - org.puredata + org.puredata.pd.pd-gui CFBundleInfoDictionaryVersion 6.0 + CFBundleName + Pd CFBundlePackageType APPL + CFBundleShortVersionString + ???? CFBundleSignature ???? CFBundleIconFile pd_ceammc.icns CFBundleVersion - 0.38 + ???? + NSHighResolutionCapable + + UTExportedTypeDeclarations + + + UTTypeConformsTo + + public.text + + UTTypeDescription + Pure Data patch + UTTypeIconFile + pd-file.icns + UTTypeIdentifier + org.puredata.pd-patch + UTTypeTagSpecification + + public.filename-extension + + pd + + + + diff --git a/mac/stuff/pd-file.icns b/mac/stuff/pd-file.icns index 8c5c890139..954531c40c 100644 Binary files a/mac/stuff/pd-file.icns and b/mac/stuff/pd-file.icns differ diff --git a/mac/stuff/pd.icns b/mac/stuff/pd.icns index d55ee9df91..dfb546aafb 100644 Binary files a/mac/stuff/pd.icns and b/mac/stuff/pd.icns differ diff --git a/mac/stuff/wish-shell.tgz b/mac/stuff/wish-shell.tgz index a8a797386a..b1c8c29687 100644 Binary files a/mac/stuff/wish-shell.tgz and b/mac/stuff/wish-shell.tgz differ diff --git a/md/README.txt b/md/README.txt new file mode 100644 index 0000000000..1861dd5214 --- /dev/null +++ b/md/README.txt @@ -0,0 +1,16 @@ +This "md" directory is a source directory for building html files in the +pd/doc/8.topics subdirectory (and hopefully later also in pd/doc/1.manual). The +target files are built using the shell script "generate-html.sh" in this +directory. (Later when/if there are many ".md" files here, this should be +replaced by a makefile.) + +pandoc generates warnings about a missing document title when converting to +html - I can't figure out how to supporess this but don't want to have the +title appear in huge type at the top of the html output - perhaps we need to +override the HTML output template via --template flag. + +Source files for creating figures are also included here (svg and, later, +perhaps other file formats). The target figures themselves are generated by +hand and moved into the html taget directories in pd/doc. + + diff --git a/md/fix-font.awk b/md/fix-font.awk new file mode 100644 index 0000000000..5c3291941b --- /dev/null +++ b/md/fix-font.awk @@ -0,0 +1,13 @@ +BEGIN {last = -10} +/DejaVuSansMono-Bold findfont 9/ { + last=NR + $1 = "/Courier-Bold" + $3 = 11.5 + } + { + if (NR == last+2) { + $2 = $2+0 + $3 = $3-2 + } + print + } diff --git a/md/generate-html.sh b/md/generate-html.sh new file mode 100755 index 0000000000..4c08809e7c --- /dev/null +++ b/md/generate-html.sh @@ -0,0 +1,5 @@ +#!/bin/sh + +for i in *.md + do pandoc -s -o ../doc/8.topics/`basename $i .md`.htm $i +done diff --git a/md/slop-compander-patch.ps b/md/slop-compander-patch.ps new file mode 100644 index 0000000000..b226b369bf Binary files /dev/null and b/md/slop-compander-patch.ps differ diff --git a/md/slop-compander-patch.svg b/md/slop-compander-patch.svg new file mode 100644 index 0000000000..e0e6350c71 --- /dev/null +++ b/md/slop-compander-patch.svg @@ -0,0 +1,1592 @@ + + + +image/svg+xmlinlet~ +slop~ 0 0 0 0 1e+09 +r $0-speed +f +/ 10 +abs~ +tabread4~ $0-dynamic-curve +-~ ++~ 100 +dbtorms~ +rmstodb~ +*~ +outlet~ +$0-dynamic-curve +05010005090100 + \ No newline at end of file diff --git a/md/slop-figures.pd b/md/slop-figures.pd new file mode 100644 index 0000000000..ace895f4ce --- /dev/null +++ b/md/slop-figures.pd @@ -0,0 +1,144 @@ +#N canvas 246 488 578 501 12; +#N canvas 738 380 779 484 slew-limiting 0; +#X obj 188 313 tabwrite~ graph1; +#X floatatom 239 70 5 0 1000 0 - - -; +#X obj 239 94 t f b; +#X obj 271 123 samplerate~; +#X obj 239 123 /; +#X floatatom 291 158 5 0 1000 0 - - -; +#X obj 291 182 t f b; +#X obj 323 210 samplerate~; +#X obj 291 211 /; +#X obj 187 249 slop~ 1e+09 0 0 0 0; +#X text 287 69 max downward slope; +#X text 339 157 max upward slope; +#X obj 149 196 vline~; +#X obj 68 140 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 +-1; +#X msg 145 165 1 0 0.2 \, 0 0 0.9; +#X obj 72 318 tabwrite~ graph1; +#X obj 93 140 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 +-1; +#N canvas -2 75 324 257 slew-limiting-patch 0; +#X floatatom 74 16 5 0 1000 0 - - -; +#X obj 74 40 t f b; +#X obj 106 69 samplerate~; +#X obj 74 69 /; +#X floatatom 126 104 5 0 1000 0 - - -; +#X obj 126 128 t f b; +#X obj 158 156 samplerate~; +#X obj 126 157 /; +#X obj 22 195 slop~ 1e+09 0 0 0 0; +#X text 122 15 max downward slope; +#X text 174 103 max upward slope; +#X connect 0 0 1 0; +#X connect 1 0 3 0; +#X connect 1 1 2 0; +#X connect 2 0 3 1; +#X connect 3 0 8 2; +#X connect 4 0 5 0; +#X connect 5 0 7 0; +#X connect 5 1 6 0; +#X connect 6 0 7 1; +#X connect 7 0 8 4; +#X restore 65 373 pd slew-limiting-patch; +#N canvas 44 149 315 151 peak-meter-patch 0; +#X floatatom 108 38 5 0 50 0 - #0-decay-speed-init -; +#X obj 108 63 / 10; +#X text 151 35 decay speed (10ths of a Hz.), f 16; +#X obj 29 66 abs~; +#X obj 30 92 slop~ 0 0 0 0 1e+09; +#X connect 0 0 1 0; +#X connect 1 0 4 3; +#X connect 3 0 4 0; +#X restore 64 402 pd peak-meter-patch; +#X floatatom 450 275 5 0 50 0 - #0-decay-speed-init -; +#X obj 371 303 abs~; +#X obj 372 329 slop~ 0 0 0 0 1e+09; +#X obj 136 138 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 +-1 -1; +#X obj 378 378 tabwrite~ graph1; +#X text 493 272 decay speed (Hz.), f 16; +#N canvas 112 216 540 333 compander-patch 0; +#X obj 30 35 inlet~; +#X obj 49 94 slop~ 0 0 0 0 1e+09; +#X obj 127 18 r \$0-speed; +#X obj 127 43 f; +#X obj 127 68 / 10; +#X obj 50 68 abs~; +#X obj 71 157 tabread4~ \$0-dynamic-curve; +#X obj 48 191 -~; +#X obj 48 216 +~ 100; +#X obj 48 241 dbtorms~; +#X obj 49 119 rmstodb~; +#X obj 29 269 *~; +#X obj 29 295 outlet~; +#N canvas 0 50 450 250 (subpatch) 0; +#X array \$0-dynamic-curve 102 float 3; +#A 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 +24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 +47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 +70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 85.95 86.8 87.55 88.2 +88.75 89.2 89.55 89.8 89.95 90 90 90 90 90 90 90; +#X coords 0 100 102 0 202 200 1 0 0; +#X restore 295 52 graph; +#X connect 0 0 5 0; +#X connect 0 0 11 0; +#X connect 1 0 10 0; +#X connect 2 0 3 0; +#X connect 3 0 4 0; +#X connect 4 0 1 3; +#X connect 5 0 1 0; +#X connect 6 0 7 0; +#X connect 7 0 8 0; +#X connect 8 0 9 0; +#X connect 9 0 11 1; +#X connect 10 0 7 1; +#X connect 10 0 6 0; +#X connect 11 0 12 0; +#X restore 66 432 pd compander-patch; +#X obj 442 116 s \$0-dynamic-curve; +#X msg 441 55 xticks 0 10 2 \, yticks 0 10 2 \, xlabel -5 0 50 100 +\, ylabel 105 0 50 90 100, f 38; +#X connect 1 0 2 0; +#X connect 2 0 4 0; +#X connect 2 1 3 0; +#X connect 3 0 4 1; +#X connect 4 0 9 2; +#X connect 5 0 6 0; +#X connect 6 0 8 0; +#X connect 6 1 7 0; +#X connect 7 0 8 1; +#X connect 8 0 9 4; +#X connect 9 0 0 0; +#X connect 12 0 9 0; +#X connect 12 0 15 0; +#X connect 12 0 20 0; +#X connect 13 0 14 0; +#X connect 13 0 15 0; +#X connect 14 0 12 0; +#X connect 16 0 0 0; +#X connect 16 0 14 0; +#X connect 19 0 21 3; +#X connect 20 0 21 0; +#X connect 21 0 23 0; +#X connect 22 0 14 0; +#X connect 22 0 23 0; +#X connect 27 0 26 0; +#X restore 71 57 pd slew-limiting; +#N canvas 460 182 450 250 (subpatch) 0; +#X array graph1 100 float 3; +#A 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 0.8691 0.755336 0.656462 0.570532 0.495849 +0.430943 0.374533 0.325507 0.282898 0.245867 0.213683 0.185712 0.161402 +0.140275 0.121913 0.105955 0.0920851 0.0800312 0.0695552 0.0604504 +0.0525375 0.0456603 0.0396834 0.0344889 0.0299743 0.0260507 0.0226407 +0.019677 0.0171013 0.0148627 0.0129172 0.0112264 0.00975683 0.00847967 +0.00736968 0.00640499 0.00556658 0.00483792 0.00420464 0.00365425 0.00317591 +0.00276019 0.00239888 0.00208487 0.00181196 0.00157477 0.00136864 0.00118948 +0.00103378 0.000898459 0.000780851 0.000678638 0.000589804 0.000512599 +0.0004455 0.000387184 0.000336502; +#X coords 0 1 100 -1 200 140 1; +#X restore 150 218 graph; +#X text 155 372 "open" the graph and "print" contents to postscript +, f 28; diff --git a/md/slop-peak-meter-graph.ps b/md/slop-peak-meter-graph.ps new file mode 100644 index 0000000000..0c21d2c9d1 Binary files /dev/null and b/md/slop-peak-meter-graph.ps differ diff --git a/md/slop-peak-meter-graph.svg b/md/slop-peak-meter-graph.svg new file mode 100644 index 0000000000..27bf991a3e --- /dev/null +++ b/md/slop-peak-meter-graph.svg @@ -0,0 +1,930 @@ + + + +image/svg+xmltime (samples) + + \ No newline at end of file diff --git a/md/slop-peak-meter-patch.ps b/md/slop-peak-meter-patch.ps new file mode 100644 index 0000000000..9960496adc Binary files /dev/null and b/md/slop-peak-meter-patch.ps differ diff --git a/md/slop-peak-meter-patch.svg b/md/slop-peak-meter-patch.svg new file mode 100644 index 0000000000..8f49d07f84 --- /dev/null +++ b/md/slop-peak-meter-patch.svg @@ -0,0 +1,300 @@ + + + +image/svg+xml0 + +/ 10decay speed(10ths of a Hz.) + +abs~ + +slop~ 0 0 0 0 1e+09 + +in + +out + + \ No newline at end of file diff --git a/md/slop-slew-limit.svg b/md/slop-slew-limit.svg new file mode 100644 index 0000000000..1bbf5a9fe5 --- /dev/null +++ b/md/slop-slew-limit.svg @@ -0,0 +1,2247 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + time (samples) + + diff --git a/md/slop-slew-limiting-patch.ps b/md/slop-slew-limiting-patch.ps new file mode 100644 index 0000000000..6b13815084 Binary files /dev/null and b/md/slop-slew-limiting-patch.ps differ diff --git a/md/slop-tilde-1-curves.svg b/md/slop-tilde-1-curves.svg new file mode 100644 index 0000000000..7c6a0fd183 --- /dev/null +++ b/md/slop-tilde-1-curves.svg @@ -0,0 +1,289 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + slope: + k + n + p + k + k + -n + p + y[n]-y[n-1] + x[n]-y[n-1] + + diff --git a/md/slop-tilde.md b/md/slop-tilde.md new file mode 100644 index 0000000000..584dc6e6ad --- /dev/null +++ b/md/slop-tilde.md @@ -0,0 +1,195 @@ +--- +comment: This document is in 'markdown' format for use with pandoc +--- + +### [Nonlinear filtering using the slop~ slew-limiting low-pass filter](#topics-slop) + +Tasks such as envelope following, dynamics processing, and soft saturation +often rely on low-pass filtering in which the cutoff frequency of the filter +(which you can alternatively think of as its reaction speed) varies according to +whether the input is rising, stable, or falling. For example, a VU meter design +might call for an envelope follower whose output can rise quickly but then drops +off more slowly. To make this we could use a low-pass filter to make a moving +average of the instantaneous signal level, but the moving average should react +faster on rising inputs than on falling ones. + +The simplest type of digital low-pass filter can be understood as a moving +average: + +$$y[n] = y[n-1] + k \cdot (x[n] - y[n-1])$$ + +where $0 \le k \le 1$ is an averaging factor, usually much closer to zero than +one. When the value of $k$ is small enough (less than 1/2, say), it is +approximately equal to the filter's rolloff frequency in units of radians per +sample. (The theory behind this is explained in +[Theory and Techniques of Electronic Music](http://msp.ucsd.edu/techniques.htm), section 8.3, "designing filters"). + +For our purposes we'll rewrite this equation as: + +$$y[n] - y[n-1] = f (x[n] - y[n-1])$$ + +where the function $f$ is linear: + +$$f(x) = k \cdot x$$ + +In words, this equation says, "increment your output by $k$ times the distance +you have to travel to reach the goal $x[n]$". (So far, we've described the +action of the linear lop~ object.) In the slop~ object, this linear function is +replaced by a nonlinear one with three segments, one for an interval $(-n, p)$ +containing zero, and two others joining this one at the input values $-n$ and +$p$. The three segments have slopes equal to $k_n$, $k$, and $k_p$ for the +negative, middle, and positive regions: + + +![response curve for slop~](slop-tilde-1-curves.png) + + +_Rationale._ In general, $k$ could depend on both the previous output $y[n-1]$ +and on the current input $x$. This would require that the invoking patch +somehow specify a function of two variables, a feat for which Pd is ill suited. +In slop~ we make the simplifying assumption that adding an offset to both the +filter's state and its input should result in adding the same offset to the +output; that is, the filter should be translation-invariant. (As will be seen +below, through a bit of skulduggery we can still make translation-dependent +effects such as soft saturation). One could also ask why we don't allow the +function $f$ to refer to a stored array instead of restricting it to a +5-parameter family of piecewise linear functions. The reason for choosing the +approach taken is that it is often desirable to modulate the parameters at audio +rates, and that would be difficult if we used an array. + +The following four examples are demonstrated in subpatches of the slop~ help +file. (If your browser is set up to open ".pd" files using Pure Data then you +can open it with [this link](file:../5.reference/slop~-help.pd); alternatively +you can create a slop~ object in a patch and get help for it, or navigate to it +using Pd's help browser.) + +#### [example: slew limiter](#topics-slop-slew-limiter) + +The output signal $y[n]$ has a time-varying slope equal to $(y[n]-y[n-1])/\tau$, +where $\tau$ denotes the elapsed time between two samples, equal to one over the +sample rate $R$. The slope can be rewritten as $R \cdot (y[n]-y[n-1])$. +Suppose we wish to create an output signal whose slope is limited between two +values $-s_n$ and $s_p$ (so $s_n$ and $s_p$, both greater than zero, are the +maximum downward and upward slope). This implies that we should limit the +difference between successive outputs, $y[n] - y[n-1]$ to lie between $-s_n/R$ +and $s_p/R$. We therefore increment the output by a quantity $x[n]-y[n-1]$ as +long as that increment lies between those two limits. Beyond those limits the +response speed should be zero so that the increment doesn't vary past those +limits. To do this we set the five filter coefficients to slop~ to $k=1$, $n = +s_n/R$, $p = s_p/R$, and $k_n = k_p = 0$. Since the three speed inputs to slop~ +are in units of Hz, we can set $k=1$ by giving a linear-response frequency +higher than the sample rate. (In practice, "1e9", meaning a billion, will do +fine for any sample rate we expect to encounter.) + +A patch to do this is shown here: + +![slew-limiting patch from slop~ help file](slop-slew-limiting-patch.png) + +A sample input and output are shown here: + +![slew-limiter input (at top) and its output (bottom)](slop-slew-limit.png) + +The input is a square pulse of unit height lasting 0.7 msec, at a sample rate +of 48000. The upward maximum slope is set to 9000. For the first 5 samples of +the pulse, the upward increment is limited to 9000/48000 units. At the sixth +sample of the pulse the input is within that limit of the previous output, and +so the increment becomes exactly what is needed to make the output reach the +input in value. + +_Note_: slew limiting is useful for conditioning time-varting controls to avoid +discontinuities. It's not so useful as a way to generate triangle waves from +rectangular pulse trains, because the rising and falling edges are quantized to +an integer sample number, making audible (and ugly) non-periodicities. + +#### [example: peak meter](#topics-slop-peak-meter) + +To make a peak meter, we need an estimate of how strongly a signal has +peaked in the recent past. This can be done using slop~ as shown: + +![instant-rise, controlled-decay envelope follower](slop-peak-meter-patch.png) + +Here the abs~ object takes the input's absolute value (known in electronics as +"rectification") and the slop~ object is set to have no linear region at all, +but a rise region with an infinite (1e9) cutoff (so that it follows a rise in +the input instantly), and a decay region with a controllable cutoff frequency +that sets the speed of the decay. Here is the response to the same rectangular +pulse input as the example above: + +![response to a square pulse](slop-peak-meter-graph.png) + +(In order to keep the same time scale, 100 samples, as above we have here set the +decay speed to 1000 Hz, but for an envelope follower this will normally be +between 0.1 and 5 Hz. Lower values will result in a less jittery output when +an audio signal is input, but higher ones will cause the output to react faster to +falling signal levels.) The result is in linear amplitude units, and can be +converted to decibels for metering as shown in the help patch. + +#### [using slop~ in a compander-limiter](#topics-slop-compander-limiter) + +Audio engineers make frequent use of dynamics processors such as companders +(compressors/expanders) and limiters. Companders are most often used to +compress the dynamic range of an audio signal to make it less likely that the +level falls outside a useful range, but are also sometimes configured to expand +dynamic range below a chosen threshold, so that they act as noise gates. +Limiters are often used with instruments such as percussion and guitars whose +attacks can have much higher amplitude than the body of the note. To hear the +body one turns the gain up, but then one has to limit the attack amplitude in +order to avoid distortion. + +There is no one standard design for a dynamics processor, and few makers of +modern ones have divulged their secrets, which might take the form of nonlinear +transfer functions, carefully tuned filter parameters, and perhaps many other +possible fudge factors. There is also a whole industry in which software +designers try to emulate analog hardware dynamics processors. There are also +stereo compressors (for mastering CDs and LPs) and multi-band ones. Engineers +frequently allow one signal to control the level of a different one, in a +technique popularly known as "side chaining". If one is working from recorded +tracks (as opposed to live sound), it's possible to look ahead in the recorded +sound to reduce the distortion that inevitably occurs when a limiter is hit too +hard. And so on. + +Here we'll describe a fairly straightforward design based on the instant-attack +envelope follower described in the previous example. (This is somewhat +atypical; the implications of this approach are discussed a bit later.) Once +the envelope is determined (and converted to decibels), a table lookup gives the +desired dynamic, and the necessary gain is computed and applied. Thus: + +![compander using instant-rise envelope follower](slop-compander-patch.png) + +Since the envelope follower has an unlimited rise speed, it will report rises in +the signal amplitude without delay. Its output is thus always at least equal to +the absolute value of the input. A dynamic curve is then used to compute the +desired gain - this gain (in decibels) is equal to the difference between the +curve value and the envelope follower output itself. When this gain is applied +the resulting signal level is at most what is shown on the curve (equal to it when +the signal and the envelope follower agree exactly). + +In effect, rising edges of the input signal, when they push outside the +currently measured envelope, will be soft-clipped according to the dynamic +curve. When the signal drops in amplitude the envelope follower relaxes at a +speed decided by the user, and this is heard as a gradual change in gain. +(Specifically, a decrease in gain if we are compressing and/or limiting.) + +Because the dynamic curve acts as a saturation curve when the signal level is +rising, in a situation when we are using it as a limiter (so that the curve is +flat at the right-hand end), it is often desirable to make the dynamic curve +level off smoothly. In this patch there are three parameters to configure +limiting: the limit itself, a boost in DB to apply before limiting, and a "knee" +which is the interval, in decibels, over which the dynamic curve bends from the +45-degree angle at low levels to the flat region where we reach the limit. + +in addition there is a compander function controlled by two other parameters, +"thresh" (a threshold, in decibels, below which companding is to be done) and +the percentage, normally between 0 and 200, by which the dynamic range should be +altered below that threshold. The "speed" parameter is the speed, in tenths of +a Hz., at which the envelope follower output decays. + + +#### [using slop~ to remove signal jitter](#topics-slop-jitter-remover) + +By setting the linear cutoff frequency to zero and the linear region to an +interval of length $a$ (either by setting $n=0, p=1$ or $n=p=a/2$), and then +setting $k_n = k_p = \inf$, we get a filter that allows its input to jitter over a +range of $a$ units before the filter responds to it. This is sometimes useful for +quieting down noisy control sources (such as envelope followers or physical +sensors). This is analogous to a loose physical linkage. diff --git a/msw/README.txt b/msw/README.txt index 54de4884a1..50513136b6 100644 --- a/msw/README.txt +++ b/msw/README.txt @@ -1,26 +1,34 @@ # Pure Data Windows resources This directory contains support files for building a Pure Data Windows -application directory and supplementary build scripts for compiling Pd on -Windows & Linux systems, as it is built for the 'vanilla' releases on -msp.ucsd.edu. +application, as it is built for the 'vanilla' releases on msp.ucsd.edu. ## Notes about compiling on Microsoft Windows -The release procedure for making vanilla releases is a mess for several -reasons. Because of licensing restrictions, the ASIO support files are not -included in the Pd source tree. For this and other reasons, Pd is compiled -in another directory in a filesystem maintained by Wine (the Linux Windows -emulator). Compilation is done both using Microsoft's compiler and -separately using MinGW. The release contains binaries built with MinGW but -a .lib file created by the Microsoft compile chain. +As of Pd version 0.50, all releases are compiled using Dan Wilcox's scripts, +msw-app.sh, and optionally tcltk-dir.sh (which builds a version of TCL/TK in +case you don't already have one). -The main script is "send-msw.sh" in this directory; this calls two other -scripts in the non-distributed directory ~/bis/work/wine/script/, copies -of which are included here (build-msw.sh and mingw-compile.sh). +The Pd sources aren't completely self-contained: Because of licensing +restrictions, the ASIO support files are not included in the Pd source tree. +The msw-app.sh script presumes you've downloaded the ASIO SDK andcan point +msw-app.sh to it. -There are also random support files here, some of which are probably no longer -used. +It's also possible to compile Pd using Visual C. This is not managed +automatically but you can look in "how-to-use-msvc.sh" to see how it can be +done. This compiler gives different warnings which are sometimes useful, and +refuses to compile code that has variable declarations in the middle of a +block. It's a good idea to test pull requests against MSVC if you can. The +file "pdprototype.zip" contains all the garbage that Pd needs in addition to its +own files, including tcl/tk. MSVC compilation works in 32 bits only. + +The scripts build-msw-32.sh and build-msw-64.sh are the ones used by Miller to +make Pd releases. These files work on linux only and will not work out of +the box unless your file tree resembles miller's in some ways (pd source is in +~/pd for instance) but you can presumably make your own version if you need to. + +But to first get things working, it's best to use msw-app.sh and tcltk-dir.sh +directly. ## Pd Application Directory @@ -126,6 +134,11 @@ the --64bit option: ## pdfontloader -Tk cannot load local font files by default on Windows. Pd accomplishes this through a tiny, custom Tcl extension, pdfontloader.dll. On initialization, the Pd GUI tries to load pdfontloader and, if successful, tries to load the included Pd font. +Tk cannot load local font files by default on Windows. Pd accomplishes this +through a tiny, custom Tcl extension, pdfontloader.dll. On initialization, the +Pd GUI tries to load pdfontloader and, if successful, tries to load the included +Pd font. -Currently, pdfontloader.dll is pre-built and included within the pdprototype.tgz tarball. To build pdfontloader, see https://github.com/pure-data/pdfontloader source. +Currently, pdfontloader.dll is pre-built and included within the pdprototype.tgz +tarball. To build pdfontloader, see https://github.com/pure-data/pdfontloader +source. diff --git a/msw/build-msw-32.sh b/msw/build-msw-32.sh new file mode 100755 index 0000000000..2a25eacff6 --- /dev/null +++ b/msw/build-msw-32.sh @@ -0,0 +1,46 @@ +#!/bin/sh +#usage: ./make-w32.sh 0.38-0 or 0.38-0test4 +#does the build in /tmp/ + +# This file documents how Miller builds the 32-bit windows binaries for Pd. +# It has not been tested on machines other than his. Most people wishing to +# compile Pd will want to use Dan Wilcox's scripts, tcltk-dir.sh and msw-app.sh +# directly, perhaps using this file as a guide. + +if test x$1 == x +then + echo usage: ./build-msw-32.sh 0.38-0 or 0.38-0test4 + exit 1 +fi + +pdversion=$1-i386 +tkversion=8.5.19 + +cd /tmp/ + +rm -rf pd-$pdversion +git clone $HOME/pd pd-$pdversion +cd pd-$pdversion +(cd asio; unzip $HOME/work/asio/ASIOSDK2.3.zip; + rm -rf _MACOSX/; mv ASIOSDK2.3 ASIOSDK) +./autogen.sh +if ./configure --host=i686-w64-mingw32 --with-wish=wish85.exe \ + CPPFLAGS='-DWISH=\"wish85.exe\"' + then echo -n ; else exit 1; fi + +if make + then echo -n ; else exit 1; fi + +cd msw +cp -a $HOME/bis/work/pd-versions/build-tk-on-win64/msw/tcltk-$tkversion . +/home/msp/pd/msw/msw-app.sh \ + --builddir .. --tk tcltk-$tkversion $pdversion + +# make zip archive +zip -r /tmp/pd-$pdversion.msw.zip pd-$pdversion + +# make installer +~/pd/msw/build-nsi.sh `pwd`/pd-$pdversion $pdversion wish85.exe + +echo /tmp/pd-$pdversion.msw.zip +echo /tmp/pd-$pdversion.windows-installer.exe diff --git a/msw/build-msw-64.sh b/msw/build-msw-64.sh index f9b5e2fb41..967d239819 100755 --- a/msw/build-msw-64.sh +++ b/msw/build-msw-64.sh @@ -1,19 +1,26 @@ #!/bin/sh #usage: ./build-msw-64.sh 0.38-0 or 0.38-0test4 +# This file documents how Miller builds the 64-bit windows binaries for Pd. +# It has not been tested on machines other than his. Most people wishing to +# compile Pd will want to use Dan Wilcox's scripts, tcltk-dir.sh and msw-app.sh +# directly, perhaps using this file as a guide. + if test x$1 = x then echo usage: ./build-msw-64.sh 0.38-0 or 0.38-0test4 exit 1 fi -v=$1-64bit.msw +pdversion=$1 +installerversion=$1.windows-installer.exe tkversion=8.6.8 -cd ~/tmp -git clone ~/pd pd-$v -cd pd-$v +cd /tmp +rm -rf pd-$pdversion +git clone ~/pd pd-$pdversion +cd pd-$pdversion #copy in the ASIO SDK and rename it ASIOSDK (cd asio; unzip $HOME/work/asio/ASIOSDK2.3.zip; @@ -24,31 +31,38 @@ cd pd-$v ./configure --host=x86_64-w64-mingw32 --with-wish=wish86.exe \ CPPFLAGS='-DWISH=\"wish86.exe\"' -#for some reason, the generated libtool file has a reference to the 'msvcrt' -#lib which breaks compilation... so get rid of it. +# for some reason, the generated libtool file has a reference to the 'msvcrt' +# lib which breaks compilation... so get rid of it. This might no longer be +# necessary. sed -i '/-lmsvcrt/s/-lmsvcrt//g' libtool make -#prepare to run Dan Wilcox's app-builcding script +# prepare to run Dan Wilcox's app-builcding script cd msw -#copy in a pre-compiled version of TK (this was previously built using -#Dan's tk-building script here) +# copy in a pre-compiled version of TK (this was previously built using +# Dan's tk-building script here) cp -a $HOME/bis/work/pd-versions/build-tk-on-win64/msw/tcltk-$tkversion . -#run the app building script itself +# run the app building script itself /home/msp/bis/work/pd-versions/build-tk-on-win64/msw/msw-app.sh \ - --builddir .. --tk tcltk-$tkversion $v + --builddir .. --tk tcltk-$tkversion $pdversion + +# On my machine at least, the wrong winpthread library gets loaded (the +# 32 bit one I think) - manually copy the correct one in. This too is +# probably no longer necessary. -#On my machine at least, the wrong winpthread lirary gets loaded (the -#32 bit one I think - manually copy the correct one in. cp /usr/x86_64-w64-mingw32/sys-root/mingw/bin/libwinpthread-1.dll \ - pd-$v/bin/ + pd-$pdversion/bin/ + +# make the zip archive +zip -r /tmp/pd-$pdversion.msw.zip pd-$pdversion -#make the zip archive -zip -r /tmp/pd-$v.zip pd-$v +# make an installer +~/pd/msw/build-nsi.sh `pwd`/pd-$pdversion $pdversion wish86.exe -#for convenience echo teh finished filename and a command to quicly test -#it in wine -echo /tmp/pd-$v.zip -echo wine `pwd`/pd-$v/bin/wish86.exe `pwd`/pd-$v/tcl/pd-gui.tcl +# for convenience echo the finished filename and a command to quickly test +# it in wine +echo /tmp/pd-$pdversion.msw.zip +echo /tmp/pd-$installerversion +echo wine `pwd`/pd-$pdversion/bin/wish86.exe `pwd`/pd-$pdversion/tcl/pd-gui.tcl diff --git a/msw/build-nsi.sh b/msw/build-nsi.sh index 8d4d140162..2829ec592b 100755 --- a/msw/build-nsi.sh +++ b/msw/build-nsi.sh @@ -70,24 +70,26 @@ Helper script to build a proper Windows installer out of a Pd build tree. Usage: -$0 [] +$0 [] input directory (containing 'bin/pd.exe') Pd-version to create installer for (e.g. '0.32-8') + name of wish executable (e.g., wish85.exe) architecture of Pd ('32' or '64') EOF cleanup 1 } # show usage when invoked without args -if [ "$#" -lt "2" ] +if [ "$#" -lt "3" ] then usage fi PDWINDIR=$(realpath "$1") PDVERSION=$2 -PDARCH=$3 +WISHNAME=$3 +PDARCH=$4 @@ -153,6 +155,7 @@ echo "!insertmacro MUI_PAGE_LICENSE \"$PDWINDIR/LICENSE.txt\"" \ # stick version number in pd.nsi script cat "${SCRIPTDIR}/pd.nsi" | sed \ -e "s/PDVERSION/${PDVERSION}/" \ + -e "s/WISHNAME/${WISHNAME}/" \ -e "s|include \"/tmp/|include \"${OUTDIR}/|" \ > "${NSIFILE}" diff --git a/msw/build-nt.bat b/msw/build-nt.bat deleted file mode 100644 index da9617d357..0000000000 --- a/msw/build-nt.bat +++ /dev/null @@ -1,22 +0,0 @@ -nmake -cd ..\extra -del *.dll -cd bonk~ -nmake /NOLOGO pd_nt -cd ..\choice -nmake /NOLOGO pd_nt -cd ..\fiddle~ -nmake /NOLOGO pd_nt -cd ..\loop~ -nmake /NOLOGO pd_nt -cd ..\lrshift~ -nmake /NOLOGO pd_nt -cd ..\pique -nmake /NOLOGO pd_nt -cd ..\sigmund~ -nmake /NOLOGO pd_nt -cd ..\pd~ -nmake /NOLOGO pd_nt -cd ..\bob~ -nmake /NOLOGO pd_nt -cd .. diff --git a/msw/get-msw.sh b/msw/get-msw.sh deleted file mode 100755 index 8c56ec90d0..0000000000 --- a/msw/get-msw.sh +++ /dev/null @@ -1,21 +0,0 @@ -#!/bin/tcsh - -rm -rf /tmp/image -mkdir /tmp/image -cd /tmp/image -unzip -q /tmp/pdout.zip -find . \( -name "*.lib" -o -name "*.exe" -o -name "*.dll" -o -name "*.obj" \ - -o -name "*.exp" \) \ - -exec rm {} \; - -echo "****************** NEW FILES *******************" - -find . -type f -newer /tmp/pd.zip - -foreach i (`find . -name "*.c" -o -name "*.h" -o -name "*.cpp" \ - -o -name "make*" -o -name "*.txt" -o -name "*.pd" -o -name "*.htm" \ - -o -name "*.html" -o -name "*.tk"`) - textconvert w u < $i > /tmp/xxx - mv /tmp/xxx $i -end - diff --git a/msw/how-to-use-msvc.sh b/msw/how-to-use-msvc.sh new file mode 100755 index 0000000000..2c2d897d79 --- /dev/null +++ b/msw/how-to-use-msvc.sh @@ -0,0 +1,45 @@ +#!/bin/sh + +# this file is included for reference only. It shows how it might be possible +# to compile Pd in Microsift Visual Studio Version 9.0. This is useful +# as a test of the portability of Pd's code, although the resulting binaries +# are never used. Run this in .../pd directory + +BUILDDIR=$HOME/bis/work/wine/drive_c/users/msp +PDDIR=`pwd` + +if [ ! -d $BUILDDIR ] + then echo $BUILDDIR: no such directory; exit 1 + else echo -n +fi + +git archive --prefix=pd/ HEAD | gzip > /tmp/pd-src.tgz + +cd $BUILDDIR +pwd +rm -rf pd +tar xzf $PDDIR/msw/pdprototype.tgz +tar xzf /tmp/pd-src.tgz +cd pd/src +if make -f makefile.msvc \ + MSCC="wine 'c:\Program Files\Microsoft Visual Studio 9.0\VC\bin\cl'" \ + MSLN="wine 'c:\Program Files\Microsoft Visual Studio 9.0\VC\bin\link'" \ + COPY=cp DELETE=rm \ + SRCASIO= ASIOLIB=/NODEFAULTLIB:ole32 PAAPI=-DPA_USE_WMME PAASIO= + then echo -n ; else exit 1; fi +cd ../extra +for i in bonk~ choice fiddle~ loop~ lrshift~ pique sigmund~ stdout pd~; +do + echo extern ----------------- $i ----------------- + cd $i + if make \ + MSCC="wine 'c:\Program Files\Microsoft Visual Studio 9.0\VC\bin\cl'" \ + MSLN="wine 'c:\Program Files\Microsoft Visual Studio 9.0\VC\bin\link'" \ + COPY=cp DELETE=rm pd_nt + then echo -n ; else exit 1; fi + cd .. +done + +echo to run: wine $BUILDDIR/pd/bin/pd.exe + +exit 0 diff --git a/msw/msgcat.zip b/msw/msgcat.zip deleted file mode 100644 index a353e8a063..0000000000 Binary files a/msw/msgcat.zip and /dev/null differ diff --git a/msw/pd.nsi b/msw/pd.nsi index f73f58042d..fe40563658 100644 --- a/msw/pd.nsi +++ b/msw/pd.nsi @@ -11,11 +11,13 @@ ; Script generated by the HM NIS Edit Script Wizard. ; Manually edited by Roman Haefeli -; the string PDVERSION should be filled in (e.g., to 0.46-7) +; the string PDVERSION should be replaced by, e.g., 0.46-7 +; and the string WISHNAME by, e.g., wish86.exe . ; HM NIS Edit Wizard helper defines !define PRODUCT_NAME "Pure Data (${ARCHI}-bit)" !define PRODUCT_VERSION "PDVERSION" +!define WISH_NAME "WISHNAME" !define PRODUCT_PUBLISHER "Miller Puckette" !define PRODUCT_WEB_SITE "http://www.puredata.info" @@ -99,11 +101,11 @@ SectionGroup /e "${COMPONENT_GROUP_TEXT}" CreateDirectory "$SMPROGRAMS\${PRODUCT_NAME}" CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\Website.lnk" "$INSTDIR\${PRODUCT_NAME}.url" CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\Uninstall.lnk" "$INSTDIR\uninst.exe" - CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\${PRODUCT_NAME}.lnk" "$INSTDIR\bin\wish85.exe" '"$INSTDIR\tcl\pd-gui.tcl"' "$INSTDIR\bin\pd.exe" 0 + CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\${PRODUCT_NAME}.lnk" "$INSTDIR\bin\WISHNAME" '"$INSTDIR\tcl\pd-gui.tcl"' "$INSTDIR\bin\pd.exe" 0 SectionEnd Section "${COMPONENT_DESKTOPSHORTCUT_TEXT}" DesktopShortcut - CreateShortCut "$Desktop\${PRODUCT_NAME}.lnk" "$INSTDIR\bin\wish85.exe" '"$INSTDIR\tcl\pd-gui.tcl"' "$INSTDIR\bin\pd.exe" 0 + CreateShortCut "$Desktop\${PRODUCT_NAME}.lnk" "$INSTDIR\bin\WISHNAME" '"$INSTDIR\tcl\pd-gui.tcl"' "$INSTDIR\bin\pd.exe" 0 SectionEnd Section "${COMPONENT_FILEASSOC_TEXT}" SetFileAssociations @@ -113,7 +115,7 @@ SectionGroup /e "${COMPONENT_GROUP_TEXT}" WriteRegStr HKCR "PureData\DefaultIcon" "" "$INSTDIR\bin\pd.exe" WriteRegStr HKCR "PureData\shell" "" "" WriteRegStr HKCR "PureData\shell\open" "" "" - WriteRegStr HKCR "PureData\shell\open\command" "" '$INSTDIR\bin\wish85.exe "$INSTDIR\tcl\pd-gui.tcl" %1' + WriteRegStr HKCR "PureData\shell\open\command" "" '$INSTDIR\bin\WISHNAME "$INSTDIR\tcl\pd-gui.tcl" %1' ; Set file ext icon WriteRegStr HKCU "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.pd" "" "" WriteRegStr HKCU "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.pd\OpenWithList" "a" "pd.exe" @@ -128,10 +130,10 @@ SectionGroupEnd Section -Post WriteUninstaller "$INSTDIR\uninst.exe" - + WriteRegStr HKLM "${PRODUCT_DIR_REGKEY}" "${ARCHI}" "$INSTDIR\bin\pd.exe" - + WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayName" "$(^Name)" WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIR\uninst.exe" WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayIcon" "$INSTDIR\bin\pd.exe" @@ -163,8 +165,8 @@ Section Uninstall ; file ext association DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" - - + + DeleteRegKey /ifempty HKLM "${PRODUCT_DIR_REGKEY}" diff --git a/msw/textconvert.c b/msw/textconvert.c deleted file mode 100644 index c12f939e8c..0000000000 --- a/msw/textconvert.c +++ /dev/null @@ -1,68 +0,0 @@ -/* Text file conversion unix/max/windows. duh. */ - -#include - -int main(int argc, char **argv) -{ - FILE *infile; - int lastchar = 0, c; - int from, to; - if (argc < 3 || argc > 4) goto usage; - from = argv[1][0]; - to = argv[2][0]; - if (argc == 4) - { - if (!(infile = fopen(argv[3], "r"))) - { - perror(argv[3]); - exit(1); - } - } - else infile = stdin; - if (from != 'u' && from != 'm' && from != 'w' - || to != 'u' && to != 'm' && to != 'w') - goto usage; - while ((c = getc(infile)) != EOF) - { - if (from == 'u' && to == 'm') - { - if (c == '\n') - c = '\r'; - putchar(c); - } - else if (from == 'u' && to == 'w') - { - if (c == '\n') - putchar('\r'); - putchar(c); - } - else if (from == 'm' && to == 'u') - { - if (c == '\r') - c = '\n'; - putchar(c); - } - else if (from == 'm' && to == 'w') - { - putchar(c); - if (c == '\r') - putchar('\n'); - } - else if (from == 'w' && to == 'u') - { - if (c != '\r') - putchar(c); - } - else if (from == 'w' && to == 'm') - { - if (c != '\n') - putchar(c); - } - else putchar(c); - } - exit(0); -usage: - fprintf(stderr, "usage: textconvert [file]\n"); - fprintf(stderr, "systems are u[nix], m[ac], w[indows].\n"); - exit (1); -} diff --git a/po/Makefile.am b/po/Makefile.am index 53458282bc..d07e52ca1c 100644 --- a/po/Makefile.am +++ b/po/Makefile.am @@ -1,69 +1,138 @@ +######################################### +##### Defaults & Paths ##### + AUTOMAKE_OPTIONS = foreign SUFFIXES = .po .pot .msg -# this is the only way to get gettext 0.17 with Fink -#UNAME := $(shell uname -s) -#ifeq ($(UNAME),Darwin) -if MACOSX - PATH := /sw/lib/gettext-tools-0.17/bin:${PATH} +if MSGFMT +XGETTEXT=xgettext +MSGMERGE=msgmerge +MSGFMT=msgfmt +else +XGETTEXT=echo fake:xgettext +MSGMERGE=echo fake:msgmerge +MSGFMT=echo fake:msgfmt endif -TCLFILES = apple_events.tcl dialog_canvas.tcl dialog_gatom.tcl dialog_path.tcl pd_bindings.tcl pd_menus.tcl pdwindow.tcl scrollboxwindow.tcl AppMain.tcl dialog_data.tcl dialog_iemgui.tcl dialog_startup.tcl pd_connect.tcl pkgIndex.tcl wheredoesthisgo.tcl dialog_array.tcl dialog_find.tcl dialog_message.tcl helpbrowser.tcl pdtk_canvas.tcl pkg_mkIndex.tcl dialog_audio.tcl dialog_font.tcl dialog_midi.tcl opt_parser.tcl pd_menucommands.tcl pdtk_text.tcl scrollbox.tcl pd_guiprefs.tcl - -FILES = $(addprefix ../tcl/, $(TCLFILES)) iemgui_dynamic_strings.tcl pd_dynamic_strings.tcl - -# these are the supported languages, -ALL_LINGUAS = af az be bg de el en_ca eu fr gu he hi hu it pa pt_br pt_pt sq sv vi -POFILES = $(ALL_LINGUAS:=.po) +######################################### +##### Files, Binaries, & Libs ##### + +TCLFILES = \ + apple_events.tcl \ + dialog_canvas.tcl \ + dialog_gatom.tcl \ + dialog_path.tcl \ + pd_bindings.tcl \ + pd_menus.tcl \ + pdwindow.tcl \ + scrollboxwindow.tcl \ + AppMain.tcl \ + dialog_data.tcl \ + dialog_iemgui.tcl \ + dialog_startup.tcl \ + pd_connect.tcl \ + pkgIndex.tcl \ + wheredoesthisgo.tcl \ + dialog_array.tcl \ + dialog_find.tcl \ + dialog_message.tcl \ + helpbrowser.tcl \ + pdtk_canvas.tcl \ + pkg_mkIndex.tcl \ + dialog_audio.tcl \ + dialog_font.tcl \ + dialog_midi.tcl \ + opt_parser.tcl \ + pd_menucommands.tcl \ + pdtk_text.tcl \ + scrollbox.tcl \ + pd_guiprefs.tcl \ + pd_deken.tcl \ + pd_docsdir.tcl + +LOCAL_TCLFILES = \ + iemgui_dynamic_strings.tcl \ + pd_dynamic_strings.tcl + +# note: adding $(top_srcdir) prefix for out of tree builds +# where $(top_srcdir) and $(top_builddir) are not the same +# +# updating template.pot & the .po files are not considered per-build artifacts +# but part of the source, the per build files are the generated .msg files + +FILES = $(addprefix $(top_srcdir)/tcl/, $(TCLFILES)) \ + $(addprefix $(top_srcdir)/po/, $(LOCAL_TCLFILES)) + +# these are the supported languages +ALL_LINGUAS = af az be bg de el en_ca eu es fr gu he hi hu it pa pt_br pt_pt sq sv vi +POFILES = $(addprefix $(top_srcdir)/po/, $(ALL_LINGUAS:=.po)) MSGFILES = $(ALL_LINGUAS:=.msg) -TEMPLATE = template.pot +TEMPLATE = $(top_srcdir)/po/template.pot libpdpodir = $(pkglibdir)/po libpdpo_DATA = $(MSGFILES) dist_libpdpo_DATA = -EXTRA_DIST = $(POFILES) \ - iemgui_dynamic_strings.tcl pd_dynamic_strings.tcl \ - template.pot +# files that are included but not built +EXTRA_DIST = $(POFILES) $(TEMPLATE) README.txt \ + $(addprefix $(top_srcdir)/po/, $(LOCAL_TCLFILES)) -# generate .msg files from the .po files -all-local: $(MSGFILES) +######################################### +##### Targets ##### +.PHONY: locations +all-local: template po msg -# refresh .po files from the template clean-local: - -rm -f -- $(MSGFILES) - -rm -f -- $(POFILES:=~) - -po: $(POFILES) + rm -f $(MSGFILES) -# refresh the template from the source code +# refresh template.pot from the source code template: $(TEMPLATE) +# remove string file locations and header "POT-Creation-Date" to suppress +# unnecessary changes, we really only want to update the .po files when a +# translation string changes in a tcl file $(TEMPLATE): $(FILES) - xgettext --join-existing \ + touch $(TEMPLATE) + $(XGETTEXT) \ --from-code=UTF-8 --language=Tcl --keyword=_ \ --sort-by-file --output=$(TEMPLATE) \ - --package-name="Pure Data" --package-version=0.43 \ + --package-name="Pure Data" --package-version=$(VERSION) \ --copyright-holder='This file is put in the public domain' \ --foreign-user \ --msgid-bugs-address=pd-dev@iem.at \ $(FILES) + sed -i.bak -E '/^#:/d' $(TEMPLATE) + sed -i.bak -E '/^"POT-Creation-Date/d' $(TEMPLATE) + rm -f $(TEMPLATE).bak -# I guess officially, the .po file should depend on the template.pot, but its -# mostly annoying since it wasnts to update the template.pot and .po files any -# time a .tcl file changes -# $(POFILES): %.po: $(TEMPLATE) -$(POFILES): %.po: - msgmerge --sort-by-file --update $< $(TEMPLATE) +# print the locations for translation strings in the .tcl source files +locations: + $(XGETTEXT) \ + --from-code=UTF-8 --language=Tcl --keyword=_ \ + --sort-by-file --foreign-user --omit-header --output=- \ + $(FILES) + +# refresh .po files from the template +po: $(POFILES) +# the .po files depend on template.pot, suppress line location changes to +# avoid unnecessary updates +$(POFILES): %.po: $(TEMPLATE) + $(MSGMERGE) --no-location --quiet --update $@ $(TEMPLATE) + touch $@ + rm -f $@~ -%.msg: %.po - msgfmt --check --tcl --locale=$* -d . $< +# generate .msg files from the .po files, +# these are installed and loaded by the GUI at runtime +msg: $(MSGFILES) +# each .msg file depends on updates to the corresponding .po file +$(MSGFILES): %.msg: %.po + $(MSGFMT) --check --tcl --locale=$* -d . $< etags: TAGS etags --append --language=none --regex="/proc[ \t]+\([^ \t]+\)/\1/" *.tcl diff --git a/po/README.txt b/po/README.txt new file mode 100644 index 0000000000..d94f7deffe --- /dev/null +++ b/po/README.txt @@ -0,0 +1,99 @@ +This directory contains translation files for the Pure Data GUI: + +* po files: per-language translations +* template.pot: template for creating a new po translation +* pd_dynamic_strings.tcl: strings sent from the Pd core +* iemgui_dynamic_strings.tcl: IEM GUI strings sent from the Pd core + +Localizations are built using GNU gettext: https://www.gnu.org/software/gettext + +## Overview + +Pd GUI strings are written in English and denoted in Tcl using the "_" prefix: + + [_ "Audio Settings"] + +gettext searches the GUI Tcl files for these marked strings and uses them as +unique identifiers to create the .pot template file which is simply a list of +string ids and translation stubs with associated metadata: + + msgid "Audio Settings" + msgstr "" + +To create a new translation, either copy & rename the .pot template file using +the appropriate ISO 639 2 or 3 letter language code (ie. German is "de.po") or +use the gettext msginit utility to initialize a new translation: + + msginit --locale=de --input=template.pot + +Note that some languages also have specific country distinctions, ie. Brazilian +Portuguese and Portuguese are named "pt_br.po" & "pt_pt.po", respectively. + +Next, fill out the msgstr portion for each msgid with it's translation: + + msgid "Audio Settings" + msgstr "Audioeinstellungen" + +The translation process can either be done by hand with a text editor or via GUI +tools created for this purpose such as poedit: https://poedit.net. Once the .po +translation file is ready, add it to this directory and check if it needs to be +added to the ALL_LINGUAS language list in po/Makefile.am. + +When building Pd, these .po translation files are used to generate .msg files +which are then loaded by the Pd GUI at runtime depending on the current locale. +You can manually set the locale when running Pd from the commandline with the +LANG environment variable, in this case German (de): + + LANG=de.UTF-8 pd + +This also works when opening a macOS .app bundle: + + LANG=de.UTF-8 open Pd.0.47.1.app + +On Windows, you can also set LANG on the commandline or set it within a .bat +wrapper file to launch Pd. Place the following in a file called "pd-lang.bat" +in the Pd bin directory and double click to run: + + SET LANG="de.UTF-8" + start "" "pd.exe" + +If the Tcl files have changed, the make process regenerates the .pot template +file and merges any changes into the .po files. Strings which have changed are +marked as "fuzzy" and should be reviewed updated and by a translator. Once the +update is approved, the "fuzzy" keyword and/or comment can be removed. Also, +any strings which do not require translation can be left with an empty msgstr +which tells gettext to use the default, non translated string. + +## Developer Info + +This is system is largely automated using make, however there are times when it +is useful to do things manually. The applicable make targets are: + +* template: re-builds the template if one of the Tcl files has changed +* po: updates the .po files if the template has been changed +* msg: generates the .msg files if the .po files have changed + +You can manually trigger a template refresh by updating the timestamp of one +of the Tcl files: + + touch ../tcl/pd-gui.tcl + make template + +The .po file refresh can be triggered by updating the template timestamp: + + touch template.pot + make po + +To see the location of translation strings in the Tcl source files, run the +following in this directory: + + make locations + +## On "Dynamic" Strings + +As the GUI is separate from the Pd core, strings which are sent from the +core to the GUI are translated "on the fly" when they are received. These are +given to gettext via the dummy Tcl files in this directory to make sure they are +added to the .pot & .po files since the Pd core .c source files are not indexed. +This means that if a "dynamic" string sent from the core is changed at some +point, it needs to be manually updated here. diff --git a/po/af.po b/po/af.po index bc8a913f25..1a3686ee84 100644 --- a/po/af.po +++ b/po/af.po @@ -6,22 +6,97 @@ msgid "" msgstr "" "Project-Id-Version: Pure Data 2.0.8pre1\n" "Report-Msgid-Bugs-To: pd-dev@iem.at\n" -"POT-Creation-Date: 2009-08-27 10:01-0400\n" +"POT-Creation-Date: 2017-07-06 18:10+0200\n" "PO-Revision-Date: 2004-03-17 14:45+0200\n" "Last-Translator: Petri Jooste \n" "Language-Team: Afrikaans \n" +"Language: af\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +msgid "-------dimensions(digits)(pix):-------" +msgstr "" + +msgid "--------dimensions(pix)(pix):--------" +msgstr "" + +msgid "----------dimensions(pix):-----------" +msgstr "" + +msgid "--------flash-time(ms)(ms):---------" +msgstr "" + +msgid "-----------output-range:-----------" +msgstr "" + +msgid "------selectable_dimensions(pix):------" +msgstr "" + +msgid "------visible_rectangle(pix)(pix):------" +msgstr "" + #, fuzzy -msgid "Undo duplicate" -msgstr "Datum" +msgid "bottom:" +msgstr "Onder" -msgid "Undo paste" +#, fuzzy +msgid "height:" +msgstr "Regs" + +msgid "hold:" msgstr "" -msgid "Undo motion" +msgid "intrrpt:" +msgstr "" + +msgid "left:" +msgstr "" + +msgid "lin" +msgstr "" + +msgid "log" +msgstr "" + +msgid "log-height:" +msgstr "" + +msgid "max:" +msgstr "" + +msgid "min:" +msgstr "" + +#, fuzzy +msgid "right:" +msgstr "Regs" + +#, fuzzy +msgid "size:" +msgstr "Grootte" + +msgid "top:" +msgstr "" + +msgid "value:" +msgstr "" + +msgid "width:" +msgstr "" + +#, tcl-format +msgid "Do you want to save the changes you made in '%s'?" +msgstr "" + +#, tcl-format +msgid "Discard changes to '%s'?" +msgstr "" + +msgid "Undo clear" +msgstr "" + +msgid "Undo connect" msgstr "" msgid "Undo cut" @@ -30,935 +105,1063 @@ msgstr "" msgid "Undo disconnect" msgstr "" -msgid "Undo connect" +#, fuzzy +msgid "Undo duplicate" +msgstr "Datum" + +msgid "Undo motion" msgstr "" -msgid "Undo clear" +msgid "Undo paste" msgstr "" msgid "Undo typing" msgstr "" -msgid "Discard changes to '%s'?" +msgid "Redo clear" msgstr "" -msgid "Do you want to save the changes you made in '%s'?" +msgid "Redo connect" +msgstr "" + +#, fuzzy +msgid "Redo cut" +msgstr "Rede" + +msgid "Redo disconnect" +msgstr "" + +#, fuzzy +msgid "Redo duplicate" +msgstr "Datum" + +msgid "Redo motion" +msgstr "" + +msgid "Redo paste" +msgstr "" + +msgid "Redo typing" +msgstr "" + +msgid "no Pd settings to clear" +msgstr "" + +msgid "removed .pdsettings file" +msgstr "" + +msgid "couldn't delete .pdsettings file" +msgstr "" + +msgid "failed to erase Pd settings" +msgstr "" + +msgid "erased Pd settings" +msgstr "" + +msgid "no Pd settings to erase" +msgstr "" + +msgid "skipping loading preferences... Pd seems to have crashed on startup." +msgstr "" + +msgid "(re-save preferences to reinstate them)" +msgstr "" + +#, fuzzy +msgid "File" +msgstr "Lêer" + +#, fuzzy +msgid "Edit" +msgstr "/Laai" + +msgid "Put" +msgstr "" + +#, fuzzy +msgid "Find" +msgstr "Soek:" + +#, fuzzy +msgid "Media" +msgstr "Name=Makedoniese" + +#, fuzzy +msgid "Window" +msgstr "" + +#, fuzzy +msgid "Help" +msgstr "hulp" + +msgid "Show &Hidden Files and Directories" msgstr "" -#: ../src/dialog_array.tcl:115 ../src/dialog_array.tcl:117 -#: ../src/pd_menus.tcl:100 ../src/pd_menus.tcl:101 ../src/pd_menus.tcl:146 -#: ../src/pd_menus.tcl:147 msgid "Copy" msgstr "Kopieer" -#: ../src/dialog_array.tcl:118 ../src/dialog_array.tcl:120 -#: ../src/pd_menus.tcl:102 ../src/pd_menus.tcl:103 ../src/pd_menus.tcl:148 -#: ../src/pd_menus.tcl:149 #, fuzzy msgid "Paste" msgstr "Datum" -#: ../src/dialog_array.tcl:264 ../src/dialog_array.tcl:266 msgid "Array Properties" msgstr "" -#: ../src/dialog_array.tcl:270 ../src/dialog_array.tcl:272 +#, fuzzy +msgid "Array" +msgstr "Andorra" + #, fuzzy msgid "Name:" msgstr "Naam" -#: ../src/dialog_array.tcl:276 ../src/dialog_array.tcl:278 -#: ../src/dialog_canvas.tcl:178 ../src/dialog_canvas.tcl:193 -#: ../src/dialog_iemgui.tcl:619 ../src/dialog_iemgui.tcl:621 #, fuzzy msgid "Size:" msgstr "Grootte" -#: ../src/dialog_array.tcl:280 ../src/dialog_array.tcl:282 #, fuzzy msgid "Save contents" msgstr "Inhoud" -#: ../src/dialog_array.tcl:284 ../src/dialog_array.tcl:286 msgid "Draw as:" msgstr "" -#: ../src/dialog_array.tcl:287 ../src/dialog_array.tcl:289 -#, fuzzy -msgid "Points" -msgstr "Poort" - -#: ../src/dialog_array.tcl:289 ../src/dialog_array.tcl:291 #, fuzzy msgid "Polygon" msgstr "Pole" -#: ../src/dialog_array.tcl:291 ../src/dialog_array.tcl:293 +#, fuzzy +msgid "Points" +msgstr "Poort" + msgid "Bezier curve" msgstr "" -#: ../src/dialog_array.tcl:297 ../src/dialog_array.tcl:299 msgid "Put array into:" msgstr "" -#: ../src/dialog_array.tcl:300 ../src/dialog_array.tcl:302 msgid "New graph" msgstr "" -#: ../src/dialog_array.tcl:302 ../src/dialog_array.tcl:304 #, fuzzy msgid "Last graph" msgstr "Laaste Verander..." -#: ../src/dialog_array.tcl:306 ../src/dialog_array.tcl:308 -#, fuzzy -msgid "Delete array" -msgstr "Uitwis" +msgid "Options" +msgstr "" -#: ../src/dialog_array.tcl:312 ../src/dialog_array.tcl:314 #, fuzzy msgid "Open List View..." msgstr "/Skommel lys" -#: ../src/dialog_array.tcl:319 ../src/dialog_array.tcl:321 -#: ../src/dialog_audio.tcl:136 ../src/dialog_canvas.tcl:205 -#: ../src/dialog_font.tcl:51 ../src/dialog_gatom.tcl:153 -#: ../src/dialog_gatom.tcl:161 ../src/dialog_iemgui.tcl:742 -#: ../src/dialog_iemgui.tcl:748 ../src/dialog_midi.tcl:91 -#: ../src/dialog_midi.tcl:226 +#, fuzzy +msgid "Delete array" +msgstr "Uitwis" + #, fuzzy msgid "Cancel" msgstr "Kanselleer" -#: ../src/dialog_array.tcl:321 ../src/dialog_array.tcl:323 -#: ../src/dialog_audio.tcl:138 ../src/dialog_canvas.tcl:207 -#: ../src/dialog_gatom.tcl:156 ../src/dialog_gatom.tcl:164 -#: ../src/dialog_iemgui.tcl:745 ../src/dialog_iemgui.tcl:751 -#: ../src/dialog_midi.tcl:93 ../src/dialog_midi.tcl:228 #, fuzzy msgid "Apply" msgstr "Pas toe" -#: ../src/dialog_array.tcl:323 ../src/dialog_array.tcl:325 -#: ../src/dialog_audio.tcl:140 ../src/dialog_canvas.tcl:209 -#: ../src/dialog_font.tcl:53 ../src/dialog_font.tcl:92 -#: ../src/dialog_font.tcl:100 ../src/dialog_font.tcl:101 -#: ../src/dialog_gatom.tcl:159 ../src/dialog_gatom.tcl:167 -#: ../src/dialog_iemgui.tcl:748 ../src/dialog_iemgui.tcl:754 -#: ../src/dialog_midi.tcl:95 ../src/dialog_midi.tcl:230 msgid "OK" msgstr "" -#: ../src/dialog_audio.tcl:130 msgid "Audio Settings" msgstr "" -#: ../src/dialog_audio.tcl:142 -msgid "Save All Settings" +msgid "Settings" msgstr "" -#: ../src/dialog_audio.tcl:151 msgid "Sample rate:" msgstr "" -#: ../src/dialog_audio.tcl:153 msgid "Delay (msec):" msgstr "" -#: ../src/dialog_audio.tcl:158 +msgid "Block size:" +msgstr "" + msgid "Use callbacks" msgstr "" -#: ../src/dialog_audio.tcl:166 ../src/dialog_midi.tcl:105 -#: ../src/dialog_midi.tcl:241 -msgid "Input device 1:" +msgid "Input Devices" msgstr "" -#: ../src/dialog_audio.tcl:169 ../src/dialog_audio.tcl:183 -#: ../src/dialog_audio.tcl:198 ../src/dialog_audio.tcl:213 -#: ../src/dialog_audio.tcl:232 ../src/dialog_audio.tcl:250 -#: ../src/dialog_audio.tcl:265 ../src/dialog_audio.tcl:280 #, fuzzy msgid "Channels:" msgstr "Kanselleer" -#: ../src/dialog_audio.tcl:179 ../src/dialog_midi.tcl:115 -#: ../src/dialog_midi.tcl:251 -msgid "Input device 2:" -msgstr "" - -#: ../src/dialog_audio.tcl:194 ../src/dialog_midi.tcl:127 -#: ../src/dialog_midi.tcl:263 -msgid "Input device 3:" -msgstr "" - -#: ../src/dialog_audio.tcl:209 ../src/dialog_midi.tcl:139 -#: ../src/dialog_midi.tcl:275 -msgid "Input device 4:" -msgstr "" - -#: ../src/dialog_audio.tcl:223 ../src/dialog_midi.tcl:150 -#: ../src/dialog_midi.tcl:286 -msgid "Output device 1:" -msgstr "" - -#: ../src/dialog_audio.tcl:226 -msgid "(same as input device) .............. " +msgid "Output Devices" msgstr "" -#: ../src/dialog_audio.tcl:246 ../src/dialog_midi.tcl:160 -#: ../src/dialog_midi.tcl:296 -msgid "Output device 2:" +msgid "(same as input device)..." msgstr "" -#: ../src/dialog_audio.tcl:261 ../src/dialog_midi.tcl:171 -#: ../src/dialog_midi.tcl:307 -msgid "Output device 3:" +msgid "Use Multiple Devices" msgstr "" -#: ../src/dialog_audio.tcl:276 ../src/dialog_midi.tcl:182 -#: ../src/dialog_midi.tcl:318 -msgid "Output device 4:" +msgid "Save All Settings" msgstr "" -#: ../src/dialog_audio.tcl:291 ../src/dialog_midi.tcl:195 -msgid "Use multiple devices" +msgid "WARNING: unknown graphme flags received in pdtk_canvas_dialog" msgstr "" -#: ../src/dialog_canvas.tcl:142 msgid "Canvas Properties" msgstr "" -#: ../src/dialog_canvas.tcl:146 #, fuzzy msgid "Scale" msgstr "Stoor" -#: ../src/dialog_canvas.tcl:150 msgid "X units per pixel:" msgstr "" -#: ../src/dialog_canvas.tcl:155 msgid "Y units per pixel:" msgstr "" -#: ../src/dialog_canvas.tcl:159 msgid "Appearance on parent patch" msgstr "" -#: ../src/dialog_canvas.tcl:161 msgid "Graph-On-Parent" msgstr "" -#: ../src/dialog_canvas.tcl:165 msgid "Hide object name and arguments" msgstr "" -#: ../src/dialog_canvas.tcl:170 msgid "Range and size" msgstr "" -#: ../src/dialog_canvas.tcl:174 -msgid "X range, from" +msgid "X range: from" msgstr "" -#: ../src/dialog_canvas.tcl:176 ../src/dialog_canvas.tcl:191 msgid "to" msgstr "" -#: ../src/dialog_canvas.tcl:180 ../src/dialog_canvas.tcl:195 #, fuzzy msgid "Margin:" msgstr "Merk voor:" -#: ../src/dialog_canvas.tcl:189 -msgid "Y range, from" +msgid "Y range: from" msgstr "" -#: ../src/dialog_find.tcl:63 ../src/dialog_find.tcl:66 -#: ../src/dialog_find.tcl:79 ../src/dialog_find.tcl:80 -#: ../src/dialog_find.tcl:83 ../src/dialog_find.tcl:85 -#: ../src/dialog_find.tcl:87 ../src/dialog_find.tcl:101 -#: ../src/dialog_find.tcl:105 ../src/dialog_find.tcl:107 -#: ../src/pd_menus.tcl:45 -#, fuzzy -msgid "Find" -msgstr "Soek:" +msgid "Data Properties" +msgstr "" -#: ../src/dialog_find.tcl:70 ../src/dialog_find.tcl:73 -#: ../src/dialog_find.tcl:87 ../src/dialog_find.tcl:91 -#: ../src/dialog_find.tcl:93 -#, fuzzy -msgid "Search in" -msgstr "Volgrote teks soektog..." +#, tcl-format +msgid "Found '%1$s' in %2$s" +msgstr "" -#: ../src/dialog_find.tcl:72 ../src/dialog_find.tcl:75 -#: ../src/dialog_find.tcl:89 ../src/dialog_find.tcl:93 -#: ../src/dialog_find.tcl:95 -#, fuzzy -msgid "for:" -msgstr "Poort:" +#, tcl-format +msgid "Couldn't find '%1$s' in %2$s" +msgstr "" -#: ../src/dialog_find.tcl:83 ../src/dialog_find.tcl:90 -#: ../src/dialog_find.tcl:104 ../src/dialog_find.tcl:108 -#: ../src/dialog_find.tcl:110 ../src/pd_menus.tcl:86 ../src/pd_menus.tcl:87 -#: ../src/pd_menus.tcl:132 ../src/pd_menus.tcl:133 ../src/pd_menus.tcl:259 -#: ../src/pd_menus.tcl:272 ../src/pd_menus.tcl:295 ../src/pd_menus.tcl:308 -#: ../src/pd_menus.tcl:332 ../src/pd_menus.tcl:345 ../src/pd_menus.tcl:354 -#: ../src/pd_menus.tcl:381 ../src/pd_menus.tcl:392 ../src/pd_menus.tcl:419 -#: ../src/pd_menus.tcl:431 ../src/pd_menus.tcl:458 -#, fuzzy -msgid "Close" -msgstr "Toemaak" +#, fuzzy, tcl-format +msgid "Search in %s for:" +msgstr "Volgrote teks soektog..." -#: ../src/dialog_find.tcl:83 ../src/dialog_find.tcl:97 -#: ../src/dialog_find.tcl:101 ../src/dialog_find.tcl:103 -msgid "Match whole word only" +#, tcl-format +msgid "Showed last '%1$s' in %2$s" +msgstr "" + +#, tcl-format +msgid "Showing '%1$d' out of %2$d items in %3$s" msgstr "" -#: ../src/dialog_find.tcl:92 ../src/dialog_font.tcl:49 -#: ../src/dialog_font.tcl:50 ../src/pd-gui.tcl:280 ../src/pd-gui.tcl:283 -#: ../src/pd-gui.tcl:286 ../src/pd-gui.tcl:288 ../src/pd-gui.tcl:291 -#: ../src/pd_menus.tcl:212 ../src/pd_menus.tcl:258 ../src/pd_menus.tcl:285 -#: ../src/pdwindow.tcl:33 #, fuzzy msgid "Pd window" msgstr "Description=Stuur Lêer" -#: ../src/dialog_font.tcl:45 -msgid "Font Properties" +msgid "Match whole word only" msgstr "" -#: ../src/dialog_font.tcl:46 ../src/dialog_font.tcl:54 -#: ../src/dialog_font.tcl:55 +#, fuzzy +msgid "Close" +msgstr "Toemaak" + #, fuzzy, tcl-format msgid "%s Font" msgstr "Font:" -#: ../src/dialog_font.tcl:61 ../src/dialog_font.tcl:96 -#: ../src/dialog_font.tcl:104 ../src/dialog_font.tcl:105 +#, fuzzy +msgid "Font" +msgstr "Font:" + #, fuzzy msgid "Font Size" msgstr "Font:" -#: ../src/dialog_font.tcl:89 ../src/dialog_font.tcl:108 -#: ../src/dialog_font.tcl:116 ../src/dialog_font.tcl:117 msgid "Stretch" msgstr "" -#: ../src/dialog_font.tcl:96 ../src/dialog_font.tcl:115 -#: ../src/dialog_font.tcl:123 ../src/dialog_font.tcl:124 msgid "X and Y" msgstr "" -#: ../src/dialog_font.tcl:98 ../src/dialog_font.tcl:117 -#: ../src/dialog_font.tcl:125 ../src/dialog_font.tcl:126 msgid "X only" msgstr "" -#: ../src/dialog_font.tcl:100 ../src/dialog_font.tcl:119 -#: ../src/dialog_font.tcl:127 ../src/dialog_font.tcl:128 msgid "Y only" msgstr "" -#: ../src/dialog_gatom.tcl:93 msgid "Atom Box Properties" msgstr "" -#: ../src/dialog_gatom.tcl:99 msgid "Width:" msgstr "" -#: ../src/dialog_gatom.tcl:103 #, fuzzy msgid "Limits" msgstr "Maatjie Lyste" -#: ../src/dialog_gatom.tcl:107 msgid "Lower:" msgstr "" -#: ../src/dialog_gatom.tcl:112 ../src/dialog_gatom.tcl:113 #, fuzzy msgid "Upper:" msgstr "Gebruiker" -#: ../src/dialog_gatom.tcl:116 ../src/dialog_gatom.tcl:121 -#: ../src/dialog_iemgui.tcl:600 ../src/dialog_iemgui.tcl:652 -#: ../src/dialog_iemgui.tcl:657 msgid "Label" msgstr "" -#: ../src/dialog_gatom.tcl:124 ../src/dialog_gatom.tcl:129 #, fuzzy -msgid "Left " +msgid "Left" msgstr "Links" -#: ../src/dialog_gatom.tcl:126 ../src/dialog_gatom.tcl:131 msgid "Right" msgstr "Regs" -#: ../src/dialog_gatom.tcl:128 ../src/dialog_gatom.tcl:133 msgid "Top" msgstr "Bo" -#: ../src/dialog_gatom.tcl:130 ../src/dialog_gatom.tcl:135 msgid "Bottom" msgstr "Onder" -#: ../src/dialog_gatom.tcl:137 ../src/dialog_gatom.tcl:145 -#: ../src/dialog_iemgui.tcl:574 #, fuzzy msgid "Messages" msgstr "Boodskap" -#: ../src/dialog_gatom.tcl:141 ../src/dialog_gatom.tcl:149 -#: ../src/dialog_iemgui.tcl:578 msgid "Send symbol:" msgstr "" -#: ../src/dialog_gatom.tcl:147 ../src/dialog_gatom.tcl:155 -#: ../src/dialog_iemgui.tcl:585 #, fuzzy msgid "Receive symbol:" msgstr "Ontvanger" -#: ../src/dialog_iemgui.tcl:197 #, fuzzy msgid "Background color" msgstr "Agtergrond:" -#: ../src/dialog_iemgui.tcl:204 #, fuzzy msgid "Foreground color" msgstr "Voorgrond:" -#: ../src/dialog_iemgui.tcl:211 #, fuzzy msgid "Label color" msgstr "Die kleure aandui:" -#: ../src/dialog_iemgui.tcl:272 #, fuzzy msgid "Init" msgstr "Nooi" -#: ../src/dialog_iemgui.tcl:275 ../src/dialog_iemgui.tcl:546 msgid "No init" msgstr "" -#: ../src/dialog_iemgui.tcl:287 ../src/dialog_iemgui.tcl:558 msgid "Jump on click" msgstr "" -#: ../src/dialog_iemgui.tcl:290 ../src/dialog_iemgui.tcl:561 msgid "Steady on click" msgstr "" -#: ../src/dialog_iemgui.tcl:498 -#, tcl-format -msgid "%s Properties" -msgstr "" - -#: ../src/dialog_iemgui.tcl:550 ../src/pd_menus.tcl:83 ../src/pd_menus.tcl:84 -#: ../src/pd_menus.tcl:129 ../src/pd_menus.tcl:130 ../src/pd_menus.tcl:260 -#: ../src/pd_menus.tcl:273 ../src/pd_menus.tcl:288 ../src/pd_menus.tcl:301 -#: ../src/pd_menus.tcl:325 ../src/pd_menus.tcl:338 ../src/pd_menus.tcl:355 -#: ../src/pd_menus.tcl:382 ../src/pd_menus.tcl:383 ../src/pd_menus.tcl:410 -#: ../src/pd_menus.tcl:422 ../src/pd_menus.tcl:449 #, fuzzy -msgid "Save" -msgstr "Stoor" +msgid "Bang" +msgstr "Bhutan" -#: ../src/dialog_iemgui.tcl:608 -msgid "X offset" +msgid "Flash Time (msec)" msgstr "" -#: ../src/dialog_iemgui.tcl:611 ../src/dialog_iemgui.tcl:612 -msgid "Y offset" +msgid "Intrrpt:" msgstr "" -#: ../src/dialog_iemgui.tcl:642 ../src/dialog_iemgui.tcl:645 -msgid "Colors" -msgstr "Kleure" - -#: ../src/dialog_iemgui.tcl:648 ../src/dialog_iemgui.tcl:651 -#, fuzzy -msgid "Background" -msgstr "Agtergrond:" - -#: ../src/dialog_iemgui.tcl:650 ../src/dialog_iemgui.tcl:654 -#, fuzzy -msgid "Front" -msgstr "Font:" - -#: ../src/dialog_iemgui.tcl:662 ../src/dialog_iemgui.tcl:668 -msgid "Compose color" +msgid "Hold:" msgstr "" -#: ../src/dialog_iemgui.tcl:682 ../src/dialog_iemgui.tcl:688 #, fuzzy -msgid "Test label" -msgstr "Toets almal" +msgid "Toggle" +msgstr "Togo" -#: ../src/dialog_midi.tcl:85 -msgid "MIDI Settings" +msgid "Non Zero Value" msgstr "" -#: ../src/dialog_midi.tcl:220 -msgid "ALSA MIDI Settings" +msgid "Value:" msgstr "" -#: ../src/dialog_midi.tcl:331 -msgid "Use multiple ALSA devices" -msgstr "" +#, fuzzy +msgid "Number2" +msgstr "$ Nommer" -#: ../src/dialog_midi.tcl:337 -msgid "In Ports:" +msgid "Width (digits):" msgstr "" -#: ../src/dialog_midi.tcl:340 -msgid "Out Ports:" +#, fuzzy +msgid "Height:" +msgstr "Regs" + +msgid "Output Range" msgstr "" -#: ../src/g_editor.c:1663 -msgid "Discard changes to this window??" +msgid "Log height:" msgstr "" -#: ../src/g_editor.c:1668 -msgid "really quit?" +msgid "Vslider" msgstr "" -#: ../src/g_editor.c:1699 #, fuzzy -msgid "Close this window??" -msgstr "Twm: Tab Vensterbestuurder" - -#: ../src/pd-gui.tcl:185 ../src/pd-gui.tcl:195 ../src/pd-gui.tcl:203 -#: ../src/pd-gui.tcl:206 ../src/pd-gui.tcl:215 ../src/pd-gui.tcl:226 -msgid "Associated Files" -msgstr "" +msgid "Hslider" +msgstr "Weggesteek" -#: ../src/pd-gui.tcl:186 ../src/pd-gui.tcl:196 ../src/pd-gui.tcl:204 -#: ../src/pd-gui.tcl:207 ../src/pd-gui.tcl:216 ../src/pd-gui.tcl:227 #, fuzzy -msgid "Pd Files" -msgstr "Lêer" +msgid "Vradio" +msgstr "Weergawe" -#: ../src/pd-gui.tcl:187 ../src/pd-gui.tcl:205 ../src/pd-gui.tcl:208 -#: ../src/pd-gui.tcl:228 -msgid "Max Patch Files" +msgid "Num cells:" msgstr "" -#: ../src/pd-gui.tcl:188 ../src/pd-gui.tcl:206 ../src/pd-gui.tcl:209 -#: ../src/pd-gui.tcl:229 -msgid "Max Text Files" +msgid "Hradio" msgstr "" -#: ../src/pd-gui.tcl:197 ../src/pd-gui.tcl:217 -msgid "Max Patch Files (.pat)" +msgid "VU Meter" msgstr "" -#: ../src/pd-gui.tcl:198 ../src/pd-gui.tcl:218 -msgid "Max Text Files (.mxt)" -msgstr "" +#, fuzzy +msgid "Canvas" +msgstr "Kanada" -#: ../src/pd-gui.tcl:270 ../src/pd-gui.tcl:290 -#, tcl-format -msgid "WARNING: Font family '%s' not found, using default (%s)" +msgid "Visible Rectangle (pix)" msgstr "" -#: ../src/pd-gui.tcl:278 ../src/pd-gui.tcl:298 #, tcl-format -msgid "WARNING: Font weight '%s' not found, using default (%s)" +msgid "%s Properties" msgstr "" -#: ../src/pd-gui.tcl:303 ../src/pd-gui.tcl:323 -#, tcl-format -msgid "ERROR: %s failed to find font size (%s) that fits into %sx%s!" +msgid "Parameters" msgstr "" -#: ../src/pd-gui.tcl:478 ../src/pd-gui.tcl:483 ../src/pd-gui.tcl:501 -msgid "ERROR: 'pd' never showed up, 'pd-gui' quitting!" +msgid "X offset:" msgstr "" -#: ../src/pd_menucommands.tcl:19 -msgid "Untitled" +msgid "Y offset:" msgstr "" -#: ../src/pd_menucommands.tcl:78 ../src/pd_menucommands.tcl:79 -#: ../src/pd_menucommands.tcl:90 -#, fuzzy -msgid "Send Message..." -msgstr "Biep op fout" +msgid "Colors" +msgstr "Kleure" -#: ../src/pd_menucommands.tcl:82 ../src/pd_menucommands.tcl:83 -#: ../src/pd_menucommands.tcl:94 ../src/pd_menus.tcl:87 ../src/pd_menus.tcl:88 -#: ../src/pd_menus.tcl:133 ../src/pd_menus.tcl:134 ../src/pd_menus.tcl:147 -#: ../src/pd_menus.tcl:192 ../src/pd_menus.tcl:193 ../src/pd_menus.tcl:265 -#: ../src/pd_menus.tcl:278 ../src/pd_menus.tcl:292 ../src/pd_menus.tcl:305 -#: ../src/pd_menus.tcl:329 ../src/pd_menus.tcl:342 ../src/pd_menus.tcl:360 -#: ../src/pd_menus.tcl:387 ../src/pd_menus.tcl:414 ../src/pd_menus.tcl:426 -#: ../src/pd_menus.tcl:453 ../startup/object_db.tcl:123 #, fuzzy -msgid "Message" -msgstr "Boodskap" +msgid "Background" +msgstr "Agtergrond:" -#: ../src/pd_menucommands.tcl:108 ../src/pd_menucommands.tcl:111 -#: ../src/pd_menus.tcl:112 ../src/pd_menus.tcl:113 ../src/pd_menus.tcl:117 -#: ../src/pd_menus.tcl:118 ../src/pd_menus.tcl:158 ../src/pd_menus.tcl:159 -#: ../src/pd_menus.tcl:163 ../src/pd_menus.tcl:164 #, fuzzy -msgid "Font" +msgid "Front" msgstr "Font:" -#: ../src/pd_menucommands.tcl:123 ../src/pd_menucommands.tcl:126 -#: ../src/pd_menus.tcl:138 ../src/pd_menus.tcl:183 ../src/pd_menus.tcl:184 +msgid "Compose color" +msgstr "" + #, fuzzy -msgid "Preferences" -msgstr "Voorkeure..." +msgid "Test label" +msgstr "Toets almal" -#: ../src/pd_menus.tcl:45 #, fuzzy -msgid "Edit" -msgstr "/Laai" +msgid "Send a Pd message" +msgstr "Biep op fout" + +msgid "(use arrow keys for history)" +msgstr "" + +msgid "MIDI Settings" +msgstr "" + +msgid "ALSA MIDI Settings" +msgstr "" + +msgid "In Ports:" +msgstr "" + +msgid "Out Ports:" +msgstr "" + +msgid "Pd search path for objects, help, fonts, and other files" +msgstr "" + +msgid "Use standard paths" +msgstr "" + +msgid "Verbose" +msgstr "" + +msgid "Pd Documents Directory" +msgstr "" + +msgid "Browse" +msgstr "" + +msgid "Reset" +msgstr "" + +msgid "Disable" +msgstr "" + +msgid "Externals Install Directory" +msgstr "" -#: ../src/pd_menus.tcl:45 #, fuzzy -msgid "File" -msgstr "Lêer" +msgid "Clear" +msgstr "Maak lys skoon" + +msgid "Choose Pd documents directory:" +msgstr "" + +msgid "Install externals to directory:" +msgstr "" + +msgid "Add a new path" +msgstr "" + +msgid "Add new library" +msgstr "" + +msgid "Edit library" +msgstr "" + +msgid "Pd libraries to load on startup" +msgstr "" + +msgid "Startup flags:" +msgstr "" + +msgid "Defeat real-time scheduling" +msgstr "" -#: ../src/pd_menus.tcl:45 ../src/pdtk_canvas.tcl:48 ../src/pdtk_canvas.tcl:110 -#: ../src/pdtk_canvas.tcl:113 #, fuzzy -msgid "Help" -msgstr "hulp" +msgid "Help Browser" +msgstr "Blaai..." + +msgid "(Tcl) MISSING CLOSE-BRACE '}': " +msgstr "" + +msgid "(Tcl) INVALID COMMAND NAME: " +msgstr "" + +msgid "(Tcl) UNHANDLED ERROR: " +msgstr "" + +#, tcl-format +msgid "[deken]: installed version [%1$s] > %2$s...skipping!" +msgstr "" + +#, tcl-format +msgid "[deken]: installed version [%1$s] < %2$s...overwriting!" +msgstr "" + +#, tcl-format +msgid "[deken]: installed version [%1$s] == %2$s...skipping!" +msgstr "" + +msgid "[deken]: " +msgstr "" + +#, tcl-format +msgid "Successfully unzipped %1$s into %2$s." +msgstr "" + +msgid "[deken]: Unable to extract package automatically." +msgstr "" + +msgid "Please perform the following steps manually:" +msgstr "" + +#, tcl-format +msgid "1. Unzip %s." +msgstr "" + +#, tcl-format +msgid "2. Copy the contents into %s." +msgstr "" + +#, tcl-format +msgid "[deken] uninstalling '%s'" +msgstr "" + +#, tcl-format +msgid "Uninstalling %1$s from %2$s failed!" +msgstr "" + +#, tcl-format +msgid "[deken] deken-plugin.tcl (Pd externals search) loaded from %s." +msgstr "" + +#, tcl-format +msgid "[deken] Platform detected: %s" +msgstr "" + +#, tcl-format +msgid "[deken] Platform re-detected: %s" +msgstr "" + +msgid "Show all" +msgstr "" -#: ../src/pd_menus.tcl:45 #, fuzzy -msgid "Media" -msgstr "Name=Makedoniese" +msgid "Search" +msgstr "Volgrote teks soektog..." -#: ../src/pd_menus.tcl:45 -msgid "Put" +msgid "To get a list of all available externals, try an empty search." +msgstr "" + +msgid "Find externals" +msgstr "" + +msgid "Only install externals uploaded by people you trust." msgstr "" -#: ../src/pd_menus.tcl:45 #, fuzzy -msgid "Window" -msgstr "" +msgid "Preferences" +msgstr "Voorkeure..." + +msgid "Installation options:" +msgstr "" + +msgid "Try to remove libraries before (re)installing them?" +msgstr "" + +msgid "Show README of newly installed libraries (if present)?" +msgstr "" + +msgid "Should newly installed libraries be added to Pd's search path?" +msgstr "" + +msgid "Platform settings:" +msgstr "" + +#, tcl-format +msgid "Default platform: %s" +msgstr "" + +msgid "User-defined platform:" +msgstr "" + +msgid "Hide foreign architectures?" +msgstr "" + +#, fuzzy, tcl-format +msgid "Deken %s Preferences" +msgstr "Voorkeure..." + +msgid "[deken]: Start searching for externals..." +msgstr "" + +#, tcl-format +msgid "[deken]: online? %s" +msgstr "" + +msgid "Are you online?" +msgstr "" + +msgid "Unable to perform search." +msgstr "" + +msgid "[deken]: No matching externals found." +msgstr "" + +msgid "Try using the full name e.g. 'freeverb'." +msgstr "" + +msgid "No matching externals found." +msgstr "" + +msgid "Please select a (writable) installation directory!" +msgstr "" + +#, tcl-format +msgid "Install %1$s to %2$s?" +msgstr "" + +#, tcl-format +msgid "" +"Commencing downloading of:\n" +"%1$s\n" +"Into %2$s..." +msgstr "" + +msgid "aborting.\n" +msgstr "" + +#, tcl-format +msgid "Unable to add %s to search paths" +msgstr "" + +#, tcl-format +msgid "Add %s to the Pd search paths?" +msgstr "" + +#, tcl-format +msgid "Added %s to search paths" +msgstr "" + +#, tcl-format +msgid "Unable to download from %1$s [%2$s]" +msgstr "" + +#, tcl-format +msgid "Unable to remove stray file %s" +msgstr "" + +#, tcl-format +msgid "Unable to rename downloaded file to %s" +msgstr "" + +#, fuzzy, tcl-format +msgid "searching for '%s'" +msgstr "Volgrote teks soektog..." + +#, tcl-format +msgid "Uploaded by %1$s @ %2$s" +msgstr "" + +msgid "Install package" +msgstr "" + +msgid "Open webpage" +msgstr "" + +msgid "_" +msgstr "" + +#, tcl-format +msgid "" +"Do you want Pd to create a documents directory for patches and external " +"libraries?\n" +"\n" +"Location: %s\n" +"\n" +"You can change or disable this later in the Path preferences." +msgstr "" + +#, tcl-format +msgid "" +"Pd documents directory cannot be found:\n" +"\n" +"%s\n" +"\n" +"Choose a new location?" +msgstr "" + +#, tcl-format +msgid "Couldn't create Pd documents directory: %s\n" +msgstr "" + +#, tcl-format +msgid "Couldn't create \"externals\" directory in: %s\n" +msgstr "" + +#, tcl-format +msgid "Couldn't create preferences \"%1$s\" in %2$s" +msgstr "" -#: ../src/pd_menus.tcl:81 ../src/pd_menus.tcl:82 ../src/pd_menus.tcl:127 -#: ../src/pd_menus.tcl:128 ../src/pd_menus.tcl:255 ../src/pd_menus.tcl:267 -#: ../src/pd_menus.tcl:285 ../src/pd_menus.tcl:298 ../src/pd_menus.tcl:322 -#: ../src/pd_menus.tcl:335 ../src/pd_menus.tcl:349 ../src/pd_menus.tcl:376 -#: ../src/pd_menus.tcl:380 ../src/pd_menus.tcl:407 ../src/pd_menus.tcl:419 -#: ../src/pd_menus.tcl:446 #, fuzzy -msgid "New" -msgstr "Nuwe" +msgid "About Pd" +msgstr "Aangaande" -#: ../src/pd_menus.tcl:82 ../src/pd_menus.tcl:83 ../src/pd_menus.tcl:128 -#: ../src/pd_menus.tcl:129 ../src/pd_menus.tcl:256 ../src/pd_menus.tcl:268 -#: ../src/pd_menus.tcl:286 ../src/pd_menus.tcl:299 ../src/pd_menus.tcl:323 -#: ../src/pd_menus.tcl:336 ../src/pd_menus.tcl:350 ../src/pd_menus.tcl:377 -#: ../src/pd_menus.tcl:381 ../src/pd_menus.tcl:408 ../src/pd_menus.tcl:420 -#: ../src/pd_menus.tcl:447 ../src/pdtk_canvas.tcl:46 -#: ../src/pdtk_canvas.tcl:108 ../src/pdtk_canvas.tcl:111 -#: ../src/pdtk_canvas.tcl:128 ../src/pdtk_canvas.tcl:130 -#: ../src/pdtk_canvas.tcl:131 ../src/pdtk_canvas.tcl:133 #, fuzzy -msgid "Open" -msgstr "Open" +msgid "Save" +msgstr "Stoor" -#: ../src/pd_menus.tcl:84 ../src/pd_menus.tcl:85 ../src/pd_menus.tcl:130 -#: ../src/pd_menus.tcl:131 ../src/pd_menus.tcl:261 ../src/pd_menus.tcl:274 -#: ../src/pd_menus.tcl:289 ../src/pd_menus.tcl:302 ../src/pd_menus.tcl:326 -#: ../src/pd_menus.tcl:339 ../src/pd_menus.tcl:356 ../src/pd_menus.tcl:383 -#: ../src/pd_menus.tcl:384 ../src/pd_menus.tcl:411 ../src/pd_menus.tcl:423 -#: ../src/pd_menus.tcl:450 #, fuzzy msgid "Save As..." msgstr "Stoor As" -#: ../src/pd_menus.tcl:88 ../src/pd_menus.tcl:89 ../src/pd_menus.tcl:134 -#: ../src/pd_menus.tcl:135 ../src/pd_menus.tcl:267 ../src/pd_menus.tcl:280 -#: ../src/pd_menus.tcl:293 ../src/pd_menus.tcl:306 ../src/pd_menus.tcl:330 -#: ../src/pd_menus.tcl:343 ../src/pd_menus.tcl:362 ../src/pd_menus.tcl:388 -#: ../src/pd_menus.tcl:389 ../src/pd_menus.tcl:415 ../src/pd_menus.tcl:427 -#: ../src/pd_menus.tcl:454 #, fuzzy msgid "Print..." msgstr "/Laai" -#: ../src/pd_menus.tcl:93 ../src/pd_menus.tcl:94 ../src/pd_menus.tcl:139 -#: ../src/pd_menus.tcl:140 -#, fuzzy -msgid "Undo" -msgstr "Uganda " - -#: ../src/pd_menus.tcl:95 ../src/pd_menus.tcl:96 ../src/pd_menus.tcl:141 -#: ../src/pd_menus.tcl:142 -#, fuzzy -msgid "Redo" -msgstr "Rede" - -#: ../src/pd_menus.tcl:98 ../src/pd_menus.tcl:99 ../src/pd_menus.tcl:144 -#: ../src/pd_menus.tcl:145 -msgid "Cut" +msgid "Paste Replace" msgstr "" -#: ../src/pd_menus.tcl:104 ../src/pd_menus.tcl:105 ../src/pd_menus.tcl:150 -#: ../src/pd_menus.tcl:151 #, fuzzy msgid "Duplicate" msgstr "Datum" -#: ../src/pd_menus.tcl:106 ../src/pd_menus.tcl:107 ../src/pd_menus.tcl:152 -#: ../src/pd_menus.tcl:153 #, fuzzy -msgid "Select All" -msgstr "Uitvee Alle" +msgid "Zoom In" +msgstr "Onder" -#: ../src/pd_menus.tcl:110 ../src/pd_menus.tcl:111 ../src/pd_menus.tcl:115 -#: ../src/pd_menus.tcl:116 ../src/pd_menus.tcl:156 ../src/pd_menus.tcl:157 -#: ../src/pd_menus.tcl:161 ../src/pd_menus.tcl:162 #, fuzzy -msgid "Text Editor" -msgstr "Kleure" +msgid "Zoom Out" +msgstr "Onder" -#: ../src/pd_menus.tcl:120 ../src/pd_menus.tcl:121 ../src/pd_menus.tcl:166 -#: ../src/pd_menus.tcl:167 msgid "Tidy Up" msgstr "" -#: ../src/pd_menus.tcl:122 ../src/pd_menus.tcl:123 ../src/pd_menus.tcl:168 -#: ../src/pd_menus.tcl:169 -msgid "Toggle Console" +msgid "(Dis)Connect Selection" msgstr "" -#: ../src/pd_menus.tcl:124 ../src/pd_menus.tcl:125 ../src/pd_menus.tcl:170 -#: ../src/pd_menus.tcl:171 -#, fuzzy -msgid "Clear Console" -msgstr "Maak lys skoon" +msgid "Triggerize" +msgstr "" -#: ../src/pd_menus.tcl:128 ../src/pd_menus.tcl:129 ../src/pd_menus.tcl:174 -#: ../src/pd_menus.tcl:175 #, fuzzy msgid "Edit Mode" msgstr "Redigeermodus" -#: ../src/pd_menus.tcl:145 ../src/pd_menus.tcl:190 ../src/pd_menus.tcl:191 -msgid "Object" -msgstr "" +#, fuzzy +msgid "Undo" +msgstr "Uganda " -#: ../src/pd_menus.tcl:149 ../src/pd_menus.tcl:194 ../src/pd_menus.tcl:195 #, fuzzy -msgid "Number" -msgstr "$ Nommer" +msgid "Redo" +msgstr "Rede" -#: ../src/pd_menus.tcl:151 ../src/pd_menus.tcl:196 ../src/pd_menus.tcl:197 -msgid "Symbol" +msgid "List of objects..." msgstr "" -#: ../src/pd_menus.tcl:153 ../src/pd_menus.tcl:198 ../src/pd_menus.tcl:199 -#, fuzzy -msgid "Comment" -msgstr "Instruksie" - -#: ../src/pd_menus.tcl:156 ../src/pd_menus.tcl:201 ../src/pd_menus.tcl:202 #, fuzzy -msgid "Bang" -msgstr "Bhutan" +msgid "New" +msgstr "Nuwe" -#: ../src/pd_menus.tcl:158 ../src/pd_menus.tcl:203 ../src/pd_menus.tcl:204 #, fuzzy -msgid "Toggle" -msgstr "Togo" +msgid "Open" +msgstr "Open" -#: ../src/pd_menus.tcl:160 ../src/pd_menus.tcl:205 ../src/pd_menus.tcl:206 #, fuzzy -msgid "Number2" -msgstr "$ Nommer" +msgid "Message..." +msgstr "Boodskap" -#: ../src/pd_menus.tcl:162 ../src/pd_menus.tcl:207 ../src/pd_menus.tcl:208 -msgid "Vslider" +msgid "Cut" msgstr "" -#: ../src/pd_menus.tcl:164 ../src/pd_menus.tcl:209 ../src/pd_menus.tcl:210 #, fuzzy -msgid "Hslider" -msgstr "Weggesteek" +msgid "Select All" +msgstr "Uitvee Alle" -#: ../src/pd_menus.tcl:166 ../src/pd_menus.tcl:211 ../src/pd_menus.tcl:212 #, fuzzy -msgid "Vradio" -msgstr "Weergawe" +msgid "Clear Console" +msgstr "Maak lys skoon" -#: ../src/pd_menus.tcl:168 ../src/pd_menus.tcl:213 ../src/pd_menus.tcl:214 -msgid "Hradio" +msgid "Object" msgstr "" -#: ../src/pd_menus.tcl:170 ../src/pd_menus.tcl:215 ../src/pd_menus.tcl:216 -msgid "VU Meter" +#, fuzzy +msgid "Message" +msgstr "Boodskap" + +#, fuzzy +msgid "Number" +msgstr "$ Nommer" + +msgid "Symbol" msgstr "" -#: ../src/pd_menus.tcl:172 ../src/pd_menus.tcl:217 ../src/pd_menus.tcl:218 #, fuzzy -msgid "Canvas" -msgstr "Kanada" +msgid "Comment" +msgstr "Instruksie" -#: ../src/pd_menus.tcl:175 ../src/pd_menus.tcl:220 ../src/pd_menus.tcl:221 msgid "Graph" msgstr "Grafiek" -#: ../src/pd_menus.tcl:176 ../src/pd_menus.tcl:221 ../src/pd_menus.tcl:222 -#, fuzzy -msgid "Array" -msgstr "Andorra" - -#: ../src/pd_menus.tcl:181 ../src/pd_menus.tcl:226 ../src/pd_menus.tcl:227 #, fuzzy msgid "Find..." msgstr "Description=Stuur Lêer" -#: ../src/pd_menus.tcl:183 ../src/pd_menus.tcl:228 ../src/pd_menus.tcl:229 msgid "Find Again" msgstr "" -#: ../src/pd_menus.tcl:185 ../src/pd_menus.tcl:230 ../src/pd_menus.tcl:231 msgid "Find Last Error" msgstr "" -#: ../src/pd_menus.tcl:191 ../src/pd_menus.tcl:236 ../src/pd_menus.tcl:237 msgid "DSP On" msgstr "" -#: ../src/pd_menus.tcl:193 ../src/pd_menus.tcl:238 ../src/pd_menus.tcl:239 #, fuzzy msgid "DSP Off" msgstr "Af" -#: ../src/pd_menus.tcl:196 ../src/pd_menus.tcl:242 ../src/pd_menus.tcl:269 msgid "Test Audio and MIDI..." msgstr "" -#: ../src/pd_menus.tcl:198 ../src/pd_menus.tcl:244 ../src/pd_menus.tcl:271 #, fuzzy msgid "Load Meter" msgstr "Meter Af" -#: ../src/pd_menus.tcl:205 ../src/pd_menus.tcl:251 ../src/pd_menus.tcl:278 +msgid "Audio Settings..." +msgstr "" + +msgid "MIDI Settings..." +msgstr "" + msgid "Minimize" msgstr "" -#: ../src/pd_menus.tcl:207 ../src/pd_menus.tcl:253 ../src/pd_menus.tcl:280 #, fuzzy msgid "Zoom" msgstr "Onder" -#: ../src/pd_menus.tcl:210 ../src/pd_menus.tcl:256 ../src/pd_menus.tcl:283 +msgid "Bring All to Front" +msgstr "" + #, fuzzy -msgid "Parent Window" +msgid "Next Window" msgstr "Description=Stuur Lêer" -#: ../src/pd_menus.tcl:216 ../src/pd_menus.tcl:262 ../src/pd_menus.tcl:289 -msgid "Bring All to Front" -msgstr "" +#, fuzzy +msgid "Previous Window" +msgstr "Description=Stuur Lêer" -#: ../src/pd_menus.tcl:224 ../src/pd_menus.tcl:241 ../src/pd_menus.tcl:253 -#: ../src/pd_menus.tcl:270 ../src/pd_menus.tcl:297 ../src/pd_menus.tcl:335 -#: ../src/pd_menus.tcl:362 #, fuzzy -msgid "About Pd" -msgstr "Aangaande" +msgid "Parent Window" +msgstr "Description=Stuur Lêer" -#: ../src/pd_menus.tcl:227 ../src/pd_menus.tcl:273 ../src/pd_menus.tcl:300 msgid "HTML Manual..." msgstr "" -#: ../src/pd_menus.tcl:229 ../src/pd_menus.tcl:275 ../src/pd_menus.tcl:302 #, fuzzy msgid "Browser..." msgstr "Blaai..." -#: ../src/pd_menus.tcl:248 ../src/pd_menus.tcl:260 ../src/pd_menus.tcl:342 -#: ../src/pd_menus.tcl:369 +msgid "puredata.info" +msgstr "" + +msgid "Report a bug" +msgstr "" + +#, fuzzy +msgid "Clear Menu" +msgstr "Maak lys skoon" + +msgid "" +"Delete all preferences?\n" +"(takes effect when Pd is restarted)" +msgstr "" + +msgid "Path..." +msgstr "" + +msgid "Startup..." +msgstr "" + +msgid "Audio..." +msgstr "" + +msgid "MIDI..." +msgstr "" + +#, fuzzy +msgid "Zoom New Windows" +msgstr "Description=Stuur Lêer" + #, fuzzy -msgid "Preferences..." +msgid "Save All Preferences" msgstr "Voorkeure..." -#: ../src/pd_menus.tcl:257 ../src/pd_menus.tcl:270 ../src/pd_menus.tcl:352 -#: ../src/pd_menus.tcl:379 -msgid "Open Recent" +#, fuzzy +msgid "Save to..." +msgstr "Stoor As" + +msgid "Load from..." msgstr "" -#: ../src/pd_menus.tcl:263 -msgid "Audio Settings..." +msgid "Forget All..." msgstr "" -#: ../src/pd_menus.tcl:265 -msgid "MIDI Settings..." +msgid "Open Recent" msgstr "" -#: ../src/pd_menus.tcl:296 ../src/pd_menus.tcl:309 ../src/pd_menus.tcl:333 -#: ../src/pd_menus.tcl:346 ../src/pd_menus.tcl:393 ../src/pd_menus.tcl:420 -#: ../src/pd_menus.tcl:432 ../src/pd_menus.tcl:459 #, fuzzy msgid "Quit" msgstr "Verlaat" -#: ../src/pd_menus.tcl:304 ../src/pd_menus.tcl:331 -#, fuzzy -msgid "Clear Menu" -msgstr "Maak lys skoon" - -#: ../src/pdtk_canvas.tcl:44 ../src/pdtk_canvas.tcl:106 -#: ../src/pdtk_canvas.tcl:109 ../src/pdtk_canvas.tcl:123 -#: ../src/pdtk_canvas.tcl:125 ../src/pdtk_canvas.tcl:126 -#: ../src/pdtk_canvas.tcl:128 msgid "Properties" msgstr "" -#: ../src/pdwindow.tcl:43 +msgid "Audio on" +msgstr "" + +msgid "Audio off" +msgstr "" + +msgid "(Tcl) MISSING CLOSE-BRACKET ']': " +msgstr "" + +msgid "Tcl:" +msgstr "" + +msgid "Pd" +msgstr "" + #, fuzzy msgid "DSP" msgstr "Af" -#: ../startup/object_db.tcl:113 -msgid "Signal" +msgid "Audio I/O error" msgstr "" -#: ../startup/object_db.tcl:114 -msgid "Generators" +msgid "Log:" msgstr "" -#: ../startup/object_db.tcl:115 -#, fuzzy -msgid "Filters" -msgstr "Lêer" +msgid "fatal" +msgstr "" + +msgid "error" +msgstr "" -#: ../startup/object_db.tcl:116 ../startup/object_db.tcl:124 -msgid "Math" +msgid "normal" msgstr "" -#: ../startup/object_db.tcl:117 ../startup/object_db.tcl:125 -msgid "I/O" +msgid "debug" msgstr "" -#: ../startup/object_db.tcl:118 ../startup/object_db.tcl:126 -msgid "Sampling" +msgid "all" msgstr "" -#: ../startup/object_db.tcl:119 ../startup/object_db.tcl:128 -msgid "Routing" +msgid "New..." msgstr "" -#: ../startup/object_db.tcl:120 ../startup/object_db.tcl:129 -msgid "Others" +#, fuzzy +msgid "Edit..." +msgstr "/Laai" + +#, fuzzy +msgid "Delete" +msgstr "Uitwis" + +#, tcl-format +msgid "Ignoring '%s': doesn't exist" msgstr "" -#: ../startup/object_db.tcl:127 -msgid "GUI" +#, tcl-format +msgid "Ignoring '%s': doesn't look like a Pd-file" msgstr "" + +#, fuzzy +#~ msgid "for:" +#~ msgstr "Poort:" + +#, fuzzy +#~ msgid "Text Editor" +#~ msgstr "Kleure" + +#, fuzzy +#~ msgid "Close this window??" +#~ msgstr "Twm: Tab Vensterbestuurder" + +#, fuzzy +#~ msgid "Pd Files" +#~ msgstr "Lêer" + +#, fuzzy +#~ msgid "Filters" +#~ msgstr "Lêer" + +#, fuzzy +#~ msgid "Preferences..." +#~ msgstr "Voorkeure..." diff --git a/po/az.po b/po/az.po index 429fe1967e..c3c4e25df5 100644 --- a/po/az.po +++ b/po/az.po @@ -6,22 +6,97 @@ msgid "" msgstr "" "Project-Id-Version: Pure Data 0.43\n" "Report-Msgid-Bugs-To: pd-dev@iem.at\n" -"POT-Creation-Date: 2009-08-27 10:01-0400\n" +"POT-Creation-Date: 2017-07-06 18:10+0200\n" "PO-Revision-Date: 2004-03-12 22:22+0200\n" "Last-Translator: Metin Amiroff \n" "Language-Team: Azerbaijani \n" +"Language: az\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +msgid "-------dimensions(digits)(pix):-------" +msgstr "" + +msgid "--------dimensions(pix)(pix):--------" +msgstr "" + +msgid "----------dimensions(pix):-----------" +msgstr "" + +msgid "--------flash-time(ms)(ms):---------" +msgstr "" + +msgid "-----------output-range:-----------" +msgstr "" + +msgid "------selectable_dimensions(pix):------" +msgstr "" + +msgid "------visible_rectangle(pix)(pix):------" +msgstr "" + #, fuzzy -msgid "Undo duplicate" -msgstr "Tarix" +msgid "bottom:" +msgstr "Altda" -msgid "Undo paste" +#, fuzzy +msgid "height:" +msgstr "Sağda" + +msgid "hold:" msgstr "" -msgid "Undo motion" +msgid "intrrpt:" +msgstr "" + +msgid "left:" +msgstr "" + +msgid "lin" +msgstr "" + +msgid "log" +msgstr "" + +msgid "log-height:" +msgstr "" + +msgid "max:" +msgstr "" + +msgid "min:" +msgstr "" + +#, fuzzy +msgid "right:" +msgstr "Sağda" + +#, fuzzy +msgid "size:" +msgstr "Böyüklük" + +msgid "top:" +msgstr "" + +msgid "value:" +msgstr "" + +msgid "width:" +msgstr "" + +#, tcl-format +msgid "Do you want to save the changes you made in '%s'?" +msgstr "" + +#, tcl-format +msgid "Discard changes to '%s'?" +msgstr "" + +msgid "Undo clear" +msgstr "" + +msgid "Undo connect" msgstr "" #, fuzzy @@ -31,924 +106,1052 @@ msgstr "Uqanda" msgid "Undo disconnect" msgstr "" -msgid "Undo connect" +#, fuzzy +msgid "Undo duplicate" +msgstr "Tarix" + +msgid "Undo motion" msgstr "" -msgid "Undo clear" +msgid "Undo paste" msgstr "" msgid "Undo typing" msgstr "" -msgid "Discard changes to '%s'?" +msgid "Redo clear" msgstr "" -msgid "Do you want to save the changes you made in '%s'?" +msgid "Redo connect" +msgstr "" + +#, fuzzy +msgid "Redo cut" +msgstr "Uqanda" + +msgid "Redo disconnect" +msgstr "" + +#, fuzzy +msgid "Redo duplicate" +msgstr "Tarix" + +msgid "Redo motion" +msgstr "" + +msgid "Redo paste" +msgstr "" + +msgid "Redo typing" +msgstr "" + +msgid "no Pd settings to clear" +msgstr "" + +msgid "removed .pdsettings file" +msgstr "" + +msgid "couldn't delete .pdsettings file" +msgstr "" + +msgid "failed to erase Pd settings" +msgstr "" + +msgid "erased Pd settings" +msgstr "" + +msgid "no Pd settings to erase" +msgstr "" + +msgid "skipping loading preferences... Pd seems to have crashed on startup." +msgstr "" + +msgid "(re-save preferences to reinstate them)" +msgstr "" + +msgid "File" +msgstr "Fayl" + +#, fuzzy +msgid "Edit" +msgstr "_Yüklə..." + +msgid "Put" +msgstr "" + +msgid "Find" +msgstr "Axtar" + +#, fuzzy +msgid "Media" +msgstr "Makedoniya" + +#, fuzzy +msgid "Window" +msgstr "_Pəncərə" + +msgid "Help" +msgstr "Yardım" + +msgid "Show &Hidden Files and Directories" msgstr "" -#: ../src/dialog_array.tcl:115 ../src/dialog_array.tcl:117 -#: ../src/pd_menus.tcl:100 ../src/pd_menus.tcl:101 ../src/pd_menus.tcl:146 -#: ../src/pd_menus.tcl:147 msgid "Copy" msgstr "Köçür" -#: ../src/dialog_array.tcl:118 ../src/dialog_array.tcl:120 -#: ../src/pd_menus.tcl:102 ../src/pd_menus.tcl:103 ../src/pd_menus.tcl:148 -#: ../src/pd_menus.tcl:149 #, fuzzy msgid "Paste" msgstr "Tarix" -#: ../src/dialog_array.tcl:264 ../src/dialog_array.tcl:266 msgid "Array Properties" msgstr "" -#: ../src/dialog_array.tcl:270 ../src/dialog_array.tcl:272 +#, fuzzy +msgid "Array" +msgstr "Andorra" + #, fuzzy msgid "Name:" msgstr "Ad" -#: ../src/dialog_array.tcl:276 ../src/dialog_array.tcl:278 -#: ../src/dialog_canvas.tcl:178 ../src/dialog_canvas.tcl:193 -#: ../src/dialog_iemgui.tcl:619 ../src/dialog_iemgui.tcl:621 #, fuzzy msgid "Size:" msgstr "Böyüklük" -#: ../src/dialog_array.tcl:280 ../src/dialog_array.tcl:282 #, fuzzy msgid "Save contents" msgstr "_Məzmun" -#: ../src/dialog_array.tcl:284 ../src/dialog_array.tcl:286 msgid "Draw as:" msgstr "" -#: ../src/dialog_array.tcl:287 ../src/dialog_array.tcl:289 -#, fuzzy -msgid "Points" -msgstr "Port" - -#: ../src/dialog_array.tcl:289 ../src/dialog_array.tcl:291 #, fuzzy msgid "Polygon" msgstr "Polşa" -#: ../src/dialog_array.tcl:291 ../src/dialog_array.tcl:293 +#, fuzzy +msgid "Points" +msgstr "Port" + msgid "Bezier curve" msgstr "" -#: ../src/dialog_array.tcl:297 ../src/dialog_array.tcl:299 msgid "Put array into:" msgstr "" -#: ../src/dialog_array.tcl:300 ../src/dialog_array.tcl:302 msgid "New graph" msgstr "" -#: ../src/dialog_array.tcl:302 ../src/dialog_array.tcl:304 #, fuzzy msgid "Last graph" msgstr "Son ismarış: %s" -#: ../src/dialog_array.tcl:306 ../src/dialog_array.tcl:308 -#, fuzzy -msgid "Delete array" -msgstr "Sil" +msgid "Options" +msgstr "" -#: ../src/dialog_array.tcl:312 ../src/dialog_array.tcl:314 #, fuzzy msgid "Open List View..." msgstr "Ban Siyahısı..." -#: ../src/dialog_array.tcl:319 ../src/dialog_array.tcl:321 -#: ../src/dialog_audio.tcl:136 ../src/dialog_canvas.tcl:205 -#: ../src/dialog_font.tcl:51 ../src/dialog_gatom.tcl:153 -#: ../src/dialog_gatom.tcl:161 ../src/dialog_iemgui.tcl:742 -#: ../src/dialog_iemgui.tcl:748 ../src/dialog_midi.tcl:91 -#: ../src/dialog_midi.tcl:226 +#, fuzzy +msgid "Delete array" +msgstr "Sil" + msgid "Cancel" msgstr "Ləğv Et" -#: ../src/dialog_array.tcl:321 ../src/dialog_array.tcl:323 -#: ../src/dialog_audio.tcl:138 ../src/dialog_canvas.tcl:207 -#: ../src/dialog_gatom.tcl:156 ../src/dialog_gatom.tcl:164 -#: ../src/dialog_iemgui.tcl:745 ../src/dialog_iemgui.tcl:751 -#: ../src/dialog_midi.tcl:93 ../src/dialog_midi.tcl:228 msgid "Apply" msgstr "Tətbiq Et" -#: ../src/dialog_array.tcl:323 ../src/dialog_array.tcl:325 -#: ../src/dialog_audio.tcl:140 ../src/dialog_canvas.tcl:209 -#: ../src/dialog_font.tcl:53 ../src/dialog_font.tcl:92 -#: ../src/dialog_font.tcl:100 ../src/dialog_font.tcl:101 -#: ../src/dialog_gatom.tcl:159 ../src/dialog_gatom.tcl:167 -#: ../src/dialog_iemgui.tcl:748 ../src/dialog_iemgui.tcl:754 -#: ../src/dialog_midi.tcl:95 ../src/dialog_midi.tcl:230 msgid "OK" msgstr "" -#: ../src/dialog_audio.tcl:130 msgid "Audio Settings" msgstr "" -#: ../src/dialog_audio.tcl:142 -msgid "Save All Settings" +msgid "Settings" msgstr "" -#: ../src/dialog_audio.tcl:151 msgid "Sample rate:" msgstr "" -#: ../src/dialog_audio.tcl:153 msgid "Delay (msec):" msgstr "" -#: ../src/dialog_audio.tcl:158 +msgid "Block size:" +msgstr "" + msgid "Use callbacks" msgstr "" -#: ../src/dialog_audio.tcl:166 ../src/dialog_midi.tcl:105 -#: ../src/dialog_midi.tcl:241 -msgid "Input device 1:" +msgid "Input Devices" msgstr "" -#: ../src/dialog_audio.tcl:169 ../src/dialog_audio.tcl:183 -#: ../src/dialog_audio.tcl:198 ../src/dialog_audio.tcl:213 -#: ../src/dialog_audio.tcl:232 ../src/dialog_audio.tcl:250 -#: ../src/dialog_audio.tcl:265 ../src/dialog_audio.tcl:280 #, fuzzy msgid "Channels:" msgstr "Ləğv Et" -#: ../src/dialog_audio.tcl:179 ../src/dialog_midi.tcl:115 -#: ../src/dialog_midi.tcl:251 -msgid "Input device 2:" -msgstr "" - -#: ../src/dialog_audio.tcl:194 ../src/dialog_midi.tcl:127 -#: ../src/dialog_midi.tcl:263 -msgid "Input device 3:" -msgstr "" - -#: ../src/dialog_audio.tcl:209 ../src/dialog_midi.tcl:139 -#: ../src/dialog_midi.tcl:275 -msgid "Input device 4:" -msgstr "" - -#: ../src/dialog_audio.tcl:223 ../src/dialog_midi.tcl:150 -#: ../src/dialog_midi.tcl:286 -msgid "Output device 1:" -msgstr "" - -#: ../src/dialog_audio.tcl:226 -msgid "(same as input device) .............. " +msgid "Output Devices" msgstr "" -#: ../src/dialog_audio.tcl:246 ../src/dialog_midi.tcl:160 -#: ../src/dialog_midi.tcl:296 -msgid "Output device 2:" +msgid "(same as input device)..." msgstr "" -#: ../src/dialog_audio.tcl:261 ../src/dialog_midi.tcl:171 -#: ../src/dialog_midi.tcl:307 -msgid "Output device 3:" +msgid "Use Multiple Devices" msgstr "" -#: ../src/dialog_audio.tcl:276 ../src/dialog_midi.tcl:182 -#: ../src/dialog_midi.tcl:318 -msgid "Output device 4:" +msgid "Save All Settings" msgstr "" -#: ../src/dialog_audio.tcl:291 ../src/dialog_midi.tcl:195 -msgid "Use multiple devices" +msgid "WARNING: unknown graphme flags received in pdtk_canvas_dialog" msgstr "" -#: ../src/dialog_canvas.tcl:142 msgid "Canvas Properties" msgstr "" -#: ../src/dialog_canvas.tcl:146 #, fuzzy msgid "Scale" msgstr "Qeyd Et" -#: ../src/dialog_canvas.tcl:150 msgid "X units per pixel:" msgstr "" -#: ../src/dialog_canvas.tcl:155 msgid "Y units per pixel:" msgstr "" -#: ../src/dialog_canvas.tcl:159 msgid "Appearance on parent patch" msgstr "" -#: ../src/dialog_canvas.tcl:161 msgid "Graph-On-Parent" msgstr "" -#: ../src/dialog_canvas.tcl:165 msgid "Hide object name and arguments" msgstr "" -#: ../src/dialog_canvas.tcl:170 msgid "Range and size" msgstr "" -#: ../src/dialog_canvas.tcl:174 -msgid "X range, from" +msgid "X range: from" msgstr "" -#: ../src/dialog_canvas.tcl:176 ../src/dialog_canvas.tcl:191 msgid "to" msgstr "" -#: ../src/dialog_canvas.tcl:180 ../src/dialog_canvas.tcl:195 #, fuzzy msgid "Margin:" msgstr "Ön işarə:" -#: ../src/dialog_canvas.tcl:189 -msgid "Y range, from" +msgid "Y range: from" msgstr "" -#: ../src/dialog_find.tcl:63 ../src/dialog_find.tcl:66 -#: ../src/dialog_find.tcl:79 ../src/dialog_find.tcl:80 -#: ../src/dialog_find.tcl:83 ../src/dialog_find.tcl:85 -#: ../src/dialog_find.tcl:87 ../src/dialog_find.tcl:101 -#: ../src/dialog_find.tcl:105 ../src/dialog_find.tcl:107 -#: ../src/pd_menus.tcl:45 -msgid "Find" -msgstr "Axtar" +msgid "Data Properties" +msgstr "" -#: ../src/dialog_find.tcl:70 ../src/dialog_find.tcl:73 -#: ../src/dialog_find.tcl:87 ../src/dialog_find.tcl:91 -#: ../src/dialog_find.tcl:93 -#, fuzzy -msgid "Search in" +#, tcl-format +msgid "Found '%1$s' in %2$s" +msgstr "" + +#, tcl-format +msgid "Couldn't find '%1$s' in %2$s" +msgstr "" + +#, fuzzy, tcl-format +msgid "Search in %s for:" msgstr "Mətni Axtar..." -#: ../src/dialog_find.tcl:72 ../src/dialog_find.tcl:75 -#: ../src/dialog_find.tcl:89 ../src/dialog_find.tcl:93 -#: ../src/dialog_find.tcl:95 -#, fuzzy -msgid "for:" -msgstr "Qapı:" - -#: ../src/dialog_find.tcl:83 ../src/dialog_find.tcl:90 -#: ../src/dialog_find.tcl:104 ../src/dialog_find.tcl:108 -#: ../src/dialog_find.tcl:110 ../src/pd_menus.tcl:86 ../src/pd_menus.tcl:87 -#: ../src/pd_menus.tcl:132 ../src/pd_menus.tcl:133 ../src/pd_menus.tcl:259 -#: ../src/pd_menus.tcl:272 ../src/pd_menus.tcl:295 ../src/pd_menus.tcl:308 -#: ../src/pd_menus.tcl:332 ../src/pd_menus.tcl:345 ../src/pd_menus.tcl:354 -#: ../src/pd_menus.tcl:381 ../src/pd_menus.tcl:392 ../src/pd_menus.tcl:419 -#: ../src/pd_menus.tcl:431 ../src/pd_menus.tcl:458 -msgid "Close" -msgstr "Bağla" +#, tcl-format +msgid "Showed last '%1$s' in %2$s" +msgstr "" -#: ../src/dialog_find.tcl:83 ../src/dialog_find.tcl:97 -#: ../src/dialog_find.tcl:101 ../src/dialog_find.tcl:103 -msgid "Match whole word only" +#, tcl-format +msgid "Showing '%1$d' out of %2$d items in %3$s" msgstr "" -#: ../src/dialog_find.tcl:92 ../src/dialog_font.tcl:49 -#: ../src/dialog_font.tcl:50 ../src/pd-gui.tcl:280 ../src/pd-gui.tcl:283 -#: ../src/pd-gui.tcl:286 ../src/pd-gui.tcl:288 ../src/pd-gui.tcl:291 -#: ../src/pd_menus.tcl:212 ../src/pd_menus.tcl:258 ../src/pd_menus.tcl:285 -#: ../src/pdwindow.tcl:33 #, fuzzy msgid "Pd window" msgstr "Fayl Yolla" -#: ../src/dialog_font.tcl:45 -msgid "Font Properties" +msgid "Match whole word only" msgstr "" -#: ../src/dialog_font.tcl:46 ../src/dialog_font.tcl:54 -#: ../src/dialog_font.tcl:55 +msgid "Close" +msgstr "Bağla" + #, fuzzy, tcl-format msgid "%s Font" msgstr "Yazı növü:" -#: ../src/dialog_font.tcl:61 ../src/dialog_font.tcl:96 -#: ../src/dialog_font.tcl:104 ../src/dialog_font.tcl:105 +#, fuzzy +msgid "Font" +msgstr "Yazı növü:" + #, fuzzy msgid "Font Size" msgstr "Böyüklük" -#: ../src/dialog_font.tcl:89 ../src/dialog_font.tcl:108 -#: ../src/dialog_font.tcl:116 ../src/dialog_font.tcl:117 #, fuzzy msgid "Stretch" msgstr "Başlanğıc Vaxtı" -#: ../src/dialog_font.tcl:96 ../src/dialog_font.tcl:115 -#: ../src/dialog_font.tcl:123 ../src/dialog_font.tcl:124 msgid "X and Y" msgstr "" -#: ../src/dialog_font.tcl:98 ../src/dialog_font.tcl:117 -#: ../src/dialog_font.tcl:125 ../src/dialog_font.tcl:126 msgid "X only" msgstr "" -#: ../src/dialog_font.tcl:100 ../src/dialog_font.tcl:119 -#: ../src/dialog_font.tcl:127 ../src/dialog_font.tcl:128 msgid "Y only" msgstr "" -#: ../src/dialog_gatom.tcl:93 msgid "Atom Box Properties" msgstr "" -#: ../src/dialog_gatom.tcl:99 msgid "Width:" msgstr "" -#: ../src/dialog_gatom.tcl:103 #, fuzzy msgid "Limits" msgstr "Siyahılar" -#: ../src/dialog_gatom.tcl:107 msgid "Lower:" msgstr "" -#: ../src/dialog_gatom.tcl:112 ../src/dialog_gatom.tcl:113 #, fuzzy msgid "Upper:" msgstr "İstifadəçi" -#: ../src/dialog_gatom.tcl:116 ../src/dialog_gatom.tcl:121 -#: ../src/dialog_iemgui.tcl:600 ../src/dialog_iemgui.tcl:652 -#: ../src/dialog_iemgui.tcl:657 msgid "Label" msgstr "" -#: ../src/dialog_gatom.tcl:124 ../src/dialog_gatom.tcl:129 #, fuzzy -msgid "Left " +msgid "Left" msgstr "Solda" -#: ../src/dialog_gatom.tcl:126 ../src/dialog_gatom.tcl:131 msgid "Right" msgstr "Sağda" -#: ../src/dialog_gatom.tcl:128 ../src/dialog_gatom.tcl:133 msgid "Top" msgstr "Üstdə" -#: ../src/dialog_gatom.tcl:130 ../src/dialog_gatom.tcl:135 msgid "Bottom" msgstr "Altda" -#: ../src/dialog_gatom.tcl:137 ../src/dialog_gatom.tcl:145 -#: ../src/dialog_iemgui.tcl:574 #, fuzzy msgid "Messages" msgstr "İsmarış" -#: ../src/dialog_gatom.tcl:141 ../src/dialog_gatom.tcl:149 -#: ../src/dialog_iemgui.tcl:578 msgid "Send symbol:" msgstr "" -#: ../src/dialog_gatom.tcl:147 ../src/dialog_gatom.tcl:155 -#: ../src/dialog_iemgui.tcl:585 #, fuzzy msgid "Receive symbol:" msgstr "Alıcı" -#: ../src/dialog_iemgui.tcl:197 #, fuzzy msgid "Background color" msgstr "Arxa plan:" -#: ../src/dialog_iemgui.tcl:204 #, fuzzy msgid "Foreground color" msgstr "Ön plan:" -#: ../src/dialog_iemgui.tcl:211 #, fuzzy msgid "Label color" msgstr "Rəng seç" -#: ../src/dialog_iemgui.tcl:272 #, fuzzy msgid "Init" msgstr "Dəvət Et" -#: ../src/dialog_iemgui.tcl:275 ../src/dialog_iemgui.tcl:546 msgid "No init" msgstr "" -#: ../src/dialog_iemgui.tcl:287 ../src/dialog_iemgui.tcl:558 msgid "Jump on click" msgstr "" -#: ../src/dialog_iemgui.tcl:290 ../src/dialog_iemgui.tcl:561 msgid "Steady on click" msgstr "" -#: ../src/dialog_iemgui.tcl:498 +#, fuzzy +msgid "Bang" +msgstr "Ban-la" + +msgid "Flash Time (msec)" +msgstr "" + +msgid "Intrrpt:" +msgstr "" + +msgid "Hold:" +msgstr "" + +#, fuzzy +msgid "Toggle" +msgstr "Toqo" + +msgid "Non Zero Value" +msgstr "" + +msgid "Value:" +msgstr "" + +#, fuzzy +msgid "Number2" +msgstr "$ Nömrəsi" + +msgid "Width (digits):" +msgstr "" + +#, fuzzy +msgid "Height:" +msgstr "Sağda" + +msgid "Output Range" +msgstr "" + +msgid "Log height:" +msgstr "" + +msgid "Vslider" +msgstr "" + +#, fuzzy +msgid "Hslider" +msgstr "Göstərmə" + +#, fuzzy +msgid "Vradio" +msgstr "Buraxılış" + +msgid "Num cells:" +msgstr "" + +msgid "Hradio" +msgstr "" + +msgid "VU Meter" +msgstr "" + +#, fuzzy +msgid "Canvas" +msgstr "Kanada" + +msgid "Visible Rectangle (pix)" +msgstr "" + #, tcl-format msgid "%s Properties" msgstr "" -#: ../src/dialog_iemgui.tcl:550 ../src/pd_menus.tcl:83 ../src/pd_menus.tcl:84 -#: ../src/pd_menus.tcl:129 ../src/pd_menus.tcl:130 ../src/pd_menus.tcl:260 -#: ../src/pd_menus.tcl:273 ../src/pd_menus.tcl:288 ../src/pd_menus.tcl:301 -#: ../src/pd_menus.tcl:325 ../src/pd_menus.tcl:338 ../src/pd_menus.tcl:355 -#: ../src/pd_menus.tcl:382 ../src/pd_menus.tcl:383 ../src/pd_menus.tcl:410 -#: ../src/pd_menus.tcl:422 ../src/pd_menus.tcl:449 -msgid "Save" -msgstr "Qeyd Et" +msgid "Parameters" +msgstr "" -#: ../src/dialog_iemgui.tcl:608 -msgid "X offset" +msgid "X offset:" msgstr "" -#: ../src/dialog_iemgui.tcl:611 ../src/dialog_iemgui.tcl:612 -msgid "Y offset" +msgid "Y offset:" msgstr "" -#: ../src/dialog_iemgui.tcl:642 ../src/dialog_iemgui.tcl:645 msgid "Colors" msgstr "Rənglər" -#: ../src/dialog_iemgui.tcl:648 ../src/dialog_iemgui.tcl:651 #, fuzzy msgid "Background" msgstr "Arxa plan:" -#: ../src/dialog_iemgui.tcl:650 ../src/dialog_iemgui.tcl:654 #, fuzzy msgid "Front" msgstr "Yazı növü:" -#: ../src/dialog_iemgui.tcl:662 ../src/dialog_iemgui.tcl:668 msgid "Compose color" msgstr "" -#: ../src/dialog_iemgui.tcl:682 ../src/dialog_iemgui.tcl:688 #, fuzzy msgid "Test label" msgstr "Hamısı Sına" -#: ../src/dialog_midi.tcl:85 -msgid "MIDI Settings" +#, fuzzy +msgid "Send a Pd message" +msgstr "İsmarış" + +msgid "(use arrow keys for history)" msgstr "" -#: ../src/dialog_midi.tcl:220 -msgid "ALSA MIDI Settings" +msgid "MIDI Settings" msgstr "" -#: ../src/dialog_midi.tcl:331 -msgid "Use multiple ALSA devices" +msgid "ALSA MIDI Settings" msgstr "" -#: ../src/dialog_midi.tcl:337 msgid "In Ports:" msgstr "" -#: ../src/dialog_midi.tcl:340 msgid "Out Ports:" msgstr "" -#: ../src/g_editor.c:1663 -msgid "Discard changes to this window??" +msgid "Pd search path for objects, help, fonts, and other files" msgstr "" -#: ../src/g_editor.c:1668 -msgid "really quit?" +msgid "Use standard paths" msgstr "" -#: ../src/g_editor.c:1699 -#, fuzzy -msgid "Close this window??" -msgstr "Bu səkmə/pəncərəni bağla" - -#: ../src/pd-gui.tcl:185 ../src/pd-gui.tcl:195 ../src/pd-gui.tcl:203 -#: ../src/pd-gui.tcl:206 ../src/pd-gui.tcl:215 ../src/pd-gui.tcl:226 -msgid "Associated Files" +msgid "Verbose" msgstr "" -#: ../src/pd-gui.tcl:186 ../src/pd-gui.tcl:196 ../src/pd-gui.tcl:204 -#: ../src/pd-gui.tcl:207 ../src/pd-gui.tcl:216 ../src/pd-gui.tcl:227 -#, fuzzy -msgid "Pd Files" -msgstr "Fayl" - -#: ../src/pd-gui.tcl:187 ../src/pd-gui.tcl:205 ../src/pd-gui.tcl:208 -#: ../src/pd-gui.tcl:228 -msgid "Max Patch Files" +msgid "Pd Documents Directory" msgstr "" -#: ../src/pd-gui.tcl:188 ../src/pd-gui.tcl:206 ../src/pd-gui.tcl:209 -#: ../src/pd-gui.tcl:229 -msgid "Max Text Files" +msgid "Browse" msgstr "" -#: ../src/pd-gui.tcl:197 ../src/pd-gui.tcl:217 -msgid "Max Patch Files (.pat)" +msgid "Reset" msgstr "" -#: ../src/pd-gui.tcl:198 ../src/pd-gui.tcl:218 -msgid "Max Text Files (.mxt)" +msgid "Disable" msgstr "" -#: ../src/pd-gui.tcl:270 ../src/pd-gui.tcl:290 -#, tcl-format -msgid "WARNING: Font family '%s' not found, using default (%s)" +msgid "Externals Install Directory" msgstr "" -#: ../src/pd-gui.tcl:278 ../src/pd-gui.tcl:298 -#, tcl-format -msgid "WARNING: Font weight '%s' not found, using default (%s)" +#, fuzzy +msgid "Clear" +msgstr "Siyahını təmizlə" + +msgid "Choose Pd documents directory:" msgstr "" -#: ../src/pd-gui.tcl:303 ../src/pd-gui.tcl:323 -#, tcl-format -msgid "ERROR: %s failed to find font size (%s) that fits into %sx%s!" +msgid "Install externals to directory:" +msgstr "" + +msgid "Add a new path" +msgstr "" + +msgid "Add new library" +msgstr "" + +msgid "Edit library" +msgstr "" + +msgid "Pd libraries to load on startup" msgstr "" -#: ../src/pd-gui.tcl:478 ../src/pd-gui.tcl:483 ../src/pd-gui.tcl:501 -msgid "ERROR: 'pd' never showed up, 'pd-gui' quitting!" +msgid "Startup flags:" msgstr "" -#: ../src/pd_menucommands.tcl:19 -msgid "Untitled" +msgid "Defeat real-time scheduling" msgstr "" -#: ../src/pd_menucommands.tcl:78 ../src/pd_menucommands.tcl:79 -#: ../src/pd_menucommands.tcl:90 #, fuzzy -msgid "Send Message..." -msgstr "İsmarış" +msgid "Help Browser" +msgstr "Gəz..." -#: ../src/pd_menucommands.tcl:82 ../src/pd_menucommands.tcl:83 -#: ../src/pd_menucommands.tcl:94 ../src/pd_menus.tcl:87 ../src/pd_menus.tcl:88 -#: ../src/pd_menus.tcl:133 ../src/pd_menus.tcl:134 ../src/pd_menus.tcl:147 -#: ../src/pd_menus.tcl:192 ../src/pd_menus.tcl:193 ../src/pd_menus.tcl:265 -#: ../src/pd_menus.tcl:278 ../src/pd_menus.tcl:292 ../src/pd_menus.tcl:305 -#: ../src/pd_menus.tcl:329 ../src/pd_menus.tcl:342 ../src/pd_menus.tcl:360 -#: ../src/pd_menus.tcl:387 ../src/pd_menus.tcl:414 ../src/pd_menus.tcl:426 -#: ../src/pd_menus.tcl:453 ../startup/object_db.tcl:123 -msgid "Message" -msgstr "İsmarış" +msgid "(Tcl) MISSING CLOSE-BRACE '}': " +msgstr "" + +msgid "(Tcl) INVALID COMMAND NAME: " +msgstr "" + +msgid "(Tcl) UNHANDLED ERROR: " +msgstr "" + +#, tcl-format +msgid "[deken]: installed version [%1$s] > %2$s...skipping!" +msgstr "" + +#, tcl-format +msgid "[deken]: installed version [%1$s] < %2$s...overwriting!" +msgstr "" + +#, tcl-format +msgid "[deken]: installed version [%1$s] == %2$s...skipping!" +msgstr "" + +msgid "[deken]: " +msgstr "" + +#, tcl-format +msgid "Successfully unzipped %1$s into %2$s." +msgstr "" + +msgid "[deken]: Unable to extract package automatically." +msgstr "" + +msgid "Please perform the following steps manually:" +msgstr "" + +#, tcl-format +msgid "1. Unzip %s." +msgstr "" + +#, tcl-format +msgid "2. Copy the contents into %s." +msgstr "" + +#, tcl-format +msgid "[deken] uninstalling '%s'" +msgstr "" + +#, tcl-format +msgid "Uninstalling %1$s from %2$s failed!" +msgstr "" + +#, tcl-format +msgid "[deken] deken-plugin.tcl (Pd externals search) loaded from %s." +msgstr "" + +#, tcl-format +msgid "[deken] Platform detected: %s" +msgstr "" + +#, tcl-format +msgid "[deken] Platform re-detected: %s" +msgstr "" + +msgid "Show all" +msgstr "" -#: ../src/pd_menucommands.tcl:108 ../src/pd_menucommands.tcl:111 -#: ../src/pd_menus.tcl:112 ../src/pd_menus.tcl:113 ../src/pd_menus.tcl:117 -#: ../src/pd_menus.tcl:118 ../src/pd_menus.tcl:158 ../src/pd_menus.tcl:159 -#: ../src/pd_menus.tcl:163 ../src/pd_menus.tcl:164 #, fuzzy -msgid "Font" -msgstr "Yazı növü:" +msgid "Search" +msgstr "Mətni Axtar..." + +msgid "To get a list of all available externals, try an empty search." +msgstr "" + +msgid "Find externals" +msgstr "" + +msgid "Only install externals uploaded by people you trust." +msgstr "" -#: ../src/pd_menucommands.tcl:123 ../src/pd_menucommands.tcl:126 -#: ../src/pd_menus.tcl:138 ../src/pd_menus.tcl:183 ../src/pd_menus.tcl:184 #, fuzzy msgid "Preferences" msgstr "Seçimlər..." -#: ../src/pd_menus.tcl:45 -#, fuzzy -msgid "Edit" -msgstr "_Yüklə..." +msgid "Installation options:" +msgstr "" -#: ../src/pd_menus.tcl:45 -msgid "File" -msgstr "Fayl" +msgid "Try to remove libraries before (re)installing them?" +msgstr "" -#: ../src/pd_menus.tcl:45 ../src/pdtk_canvas.tcl:48 ../src/pdtk_canvas.tcl:110 -#: ../src/pdtk_canvas.tcl:113 -msgid "Help" -msgstr "Yardım" +msgid "Show README of newly installed libraries (if present)?" +msgstr "" -#: ../src/pd_menus.tcl:45 -#, fuzzy -msgid "Media" -msgstr "Makedoniya" +msgid "Should newly installed libraries be added to Pd's search path?" +msgstr "" -#: ../src/pd_menus.tcl:45 -msgid "Put" +msgid "Platform settings:" msgstr "" -#: ../src/pd_menus.tcl:45 -#, fuzzy -msgid "Window" -msgstr "_Pəncərə" +#, tcl-format +msgid "Default platform: %s" +msgstr "" -#: ../src/pd_menus.tcl:81 ../src/pd_menus.tcl:82 ../src/pd_menus.tcl:127 -#: ../src/pd_menus.tcl:128 ../src/pd_menus.tcl:255 ../src/pd_menus.tcl:267 -#: ../src/pd_menus.tcl:285 ../src/pd_menus.tcl:298 ../src/pd_menus.tcl:322 -#: ../src/pd_menus.tcl:335 ../src/pd_menus.tcl:349 ../src/pd_menus.tcl:376 -#: ../src/pd_menus.tcl:380 ../src/pd_menus.tcl:407 ../src/pd_menus.tcl:419 -#: ../src/pd_menus.tcl:446 -msgid "New" -msgstr "Yeni" +msgid "User-defined platform:" +msgstr "" -#: ../src/pd_menus.tcl:82 ../src/pd_menus.tcl:83 ../src/pd_menus.tcl:128 -#: ../src/pd_menus.tcl:129 ../src/pd_menus.tcl:256 ../src/pd_menus.tcl:268 -#: ../src/pd_menus.tcl:286 ../src/pd_menus.tcl:299 ../src/pd_menus.tcl:323 -#: ../src/pd_menus.tcl:336 ../src/pd_menus.tcl:350 ../src/pd_menus.tcl:377 -#: ../src/pd_menus.tcl:381 ../src/pd_menus.tcl:408 ../src/pd_menus.tcl:420 -#: ../src/pd_menus.tcl:447 ../src/pdtk_canvas.tcl:46 -#: ../src/pdtk_canvas.tcl:108 ../src/pdtk_canvas.tcl:111 -#: ../src/pdtk_canvas.tcl:128 ../src/pdtk_canvas.tcl:130 -#: ../src/pdtk_canvas.tcl:131 ../src/pdtk_canvas.tcl:133 -msgid "Open" -msgstr "Aç" +msgid "Hide foreign architectures?" +msgstr "" + +#, fuzzy, tcl-format +msgid "Deken %s Preferences" +msgstr "Seçimlər..." + +msgid "[deken]: Start searching for externals..." +msgstr "" + +#, tcl-format +msgid "[deken]: online? %s" +msgstr "" + +msgid "Are you online?" +msgstr "" + +msgid "Unable to perform search." +msgstr "" + +msgid "[deken]: No matching externals found." +msgstr "" + +msgid "Try using the full name e.g. 'freeverb'." +msgstr "" + +msgid "No matching externals found." +msgstr "" + +msgid "Please select a (writable) installation directory!" +msgstr "" + +#, tcl-format +msgid "Install %1$s to %2$s?" +msgstr "" + +#, tcl-format +msgid "" +"Commencing downloading of:\n" +"%1$s\n" +"Into %2$s..." +msgstr "" + +msgid "aborting.\n" +msgstr "" + +#, tcl-format +msgid "Unable to add %s to search paths" +msgstr "" + +#, tcl-format +msgid "Add %s to the Pd search paths?" +msgstr "" + +#, tcl-format +msgid "Added %s to search paths" +msgstr "" + +#, tcl-format +msgid "Unable to download from %1$s [%2$s]" +msgstr "" + +#, tcl-format +msgid "Unable to remove stray file %s" +msgstr "" + +#, tcl-format +msgid "Unable to rename downloaded file to %s" +msgstr "" + +#, fuzzy, tcl-format +msgid "searching for '%s'" +msgstr "Mətni Axtar..." + +#, tcl-format +msgid "Uploaded by %1$s @ %2$s" +msgstr "" + +msgid "Install package" +msgstr "" + +msgid "Open webpage" +msgstr "" + +msgid "_" +msgstr "" + +#, tcl-format +msgid "" +"Do you want Pd to create a documents directory for patches and external " +"libraries?\n" +"\n" +"Location: %s\n" +"\n" +"You can change or disable this later in the Path preferences." +msgstr "" + +#, tcl-format +msgid "" +"Pd documents directory cannot be found:\n" +"\n" +"%s\n" +"\n" +"Choose a new location?" +msgstr "" + +#, tcl-format +msgid "Couldn't create Pd documents directory: %s\n" +msgstr "" + +#, tcl-format +msgid "Couldn't create \"externals\" directory in: %s\n" +msgstr "" + +#, tcl-format +msgid "Couldn't create preferences \"%1$s\" in %2$s" +msgstr "" + +#, fuzzy +msgid "About Pd" +msgstr "_Haqqında" + +msgid "Save" +msgstr "Qeyd Et" -#: ../src/pd_menus.tcl:84 ../src/pd_menus.tcl:85 ../src/pd_menus.tcl:130 -#: ../src/pd_menus.tcl:131 ../src/pd_menus.tcl:261 ../src/pd_menus.tcl:274 -#: ../src/pd_menus.tcl:289 ../src/pd_menus.tcl:302 ../src/pd_menus.tcl:326 -#: ../src/pd_menus.tcl:339 ../src/pd_menus.tcl:356 ../src/pd_menus.tcl:383 -#: ../src/pd_menus.tcl:384 ../src/pd_menus.tcl:411 ../src/pd_menus.tcl:423 -#: ../src/pd_menus.tcl:450 #, fuzzy msgid "Save As..." msgstr "Fərqli Qeyd Et" -#: ../src/pd_menus.tcl:88 ../src/pd_menus.tcl:89 ../src/pd_menus.tcl:134 -#: ../src/pd_menus.tcl:135 ../src/pd_menus.tcl:267 ../src/pd_menus.tcl:280 -#: ../src/pd_menus.tcl:293 ../src/pd_menus.tcl:306 ../src/pd_menus.tcl:330 -#: ../src/pd_menus.tcl:343 ../src/pd_menus.tcl:362 ../src/pd_menus.tcl:388 -#: ../src/pd_menus.tcl:389 ../src/pd_menus.tcl:415 ../src/pd_menus.tcl:427 -#: ../src/pd_menus.tcl:454 #, fuzzy msgid "Print..." msgstr "_Yüklə..." -#: ../src/pd_menus.tcl:93 ../src/pd_menus.tcl:94 ../src/pd_menus.tcl:139 -#: ../src/pd_menus.tcl:140 -#, fuzzy -msgid "Undo" -msgstr "Uqanda" - -#: ../src/pd_menus.tcl:95 ../src/pd_menus.tcl:96 ../src/pd_menus.tcl:141 -#: ../src/pd_menus.tcl:142 -#, fuzzy -msgid "Redo" -msgstr "Səbəb" - -#: ../src/pd_menus.tcl:98 ../src/pd_menus.tcl:99 ../src/pd_menus.tcl:144 -#: ../src/pd_menus.tcl:145 -msgid "Cut" +msgid "Paste Replace" msgstr "" -#: ../src/pd_menus.tcl:104 ../src/pd_menus.tcl:105 ../src/pd_menus.tcl:150 -#: ../src/pd_menus.tcl:151 #, fuzzy msgid "Duplicate" msgstr "Tarix" -#: ../src/pd_menus.tcl:106 ../src/pd_menus.tcl:107 ../src/pd_menus.tcl:152 -#: ../src/pd_menus.tcl:153 #, fuzzy -msgid "Select All" -msgstr "Hamısı Sil" +msgid "Zoom In" +msgstr "Altda" -#: ../src/pd_menus.tcl:110 ../src/pd_menus.tcl:111 ../src/pd_menus.tcl:115 -#: ../src/pd_menus.tcl:116 ../src/pd_menus.tcl:156 ../src/pd_menus.tcl:157 -#: ../src/pd_menus.tcl:161 ../src/pd_menus.tcl:162 #, fuzzy -msgid "Text Editor" -msgstr "Rənglər" +msgid "Zoom Out" +msgstr "Altda" -#: ../src/pd_menus.tcl:120 ../src/pd_menus.tcl:121 ../src/pd_menus.tcl:166 -#: ../src/pd_menus.tcl:167 msgid "Tidy Up" msgstr "" -#: ../src/pd_menus.tcl:122 ../src/pd_menus.tcl:123 ../src/pd_menus.tcl:168 -#: ../src/pd_menus.tcl:169 -msgid "Toggle Console" +msgid "(Dis)Connect Selection" msgstr "" -#: ../src/pd_menus.tcl:124 ../src/pd_menus.tcl:125 ../src/pd_menus.tcl:170 -#: ../src/pd_menus.tcl:171 -#, fuzzy -msgid "Clear Console" -msgstr "Siyahını təmizlə" +msgid "Triggerize" +msgstr "" -#: ../src/pd_menus.tcl:128 ../src/pd_menus.tcl:129 ../src/pd_menus.tcl:174 -#: ../src/pd_menus.tcl:175 #, fuzzy msgid "Edit Mode" msgstr "Təfərruatlar" -#: ../src/pd_menus.tcl:145 ../src/pd_menus.tcl:190 ../src/pd_menus.tcl:191 -msgid "Object" -msgstr "" +#, fuzzy +msgid "Undo" +msgstr "Uqanda" -#: ../src/pd_menus.tcl:149 ../src/pd_menus.tcl:194 ../src/pd_menus.tcl:195 #, fuzzy -msgid "Number" -msgstr "$ Nömrəsi" +msgid "Redo" +msgstr "Səbəb" -#: ../src/pd_menus.tcl:151 ../src/pd_menus.tcl:196 ../src/pd_menus.tcl:197 -msgid "Symbol" +msgid "List of objects..." msgstr "" -#: ../src/pd_menus.tcl:153 ../src/pd_menus.tcl:198 ../src/pd_menus.tcl:199 -#, fuzzy -msgid "Comment" -msgstr "Əmr" - -#: ../src/pd_menus.tcl:156 ../src/pd_menus.tcl:201 ../src/pd_menus.tcl:202 -#, fuzzy -msgid "Bang" -msgstr "Ban-la" +msgid "New" +msgstr "Yeni" -#: ../src/pd_menus.tcl:158 ../src/pd_menus.tcl:203 ../src/pd_menus.tcl:204 -#, fuzzy -msgid "Toggle" -msgstr "Toqo" +msgid "Open" +msgstr "Aç" -#: ../src/pd_menus.tcl:160 ../src/pd_menus.tcl:205 ../src/pd_menus.tcl:206 #, fuzzy -msgid "Number2" -msgstr "$ Nömrəsi" +msgid "Message..." +msgstr "İsmarış" -#: ../src/pd_menus.tcl:162 ../src/pd_menus.tcl:207 ../src/pd_menus.tcl:208 -msgid "Vslider" +msgid "Cut" msgstr "" -#: ../src/pd_menus.tcl:164 ../src/pd_menus.tcl:209 ../src/pd_menus.tcl:210 #, fuzzy -msgid "Hslider" -msgstr "Göstərmə" +msgid "Select All" +msgstr "Hamısı Sil" -#: ../src/pd_menus.tcl:166 ../src/pd_menus.tcl:211 ../src/pd_menus.tcl:212 #, fuzzy -msgid "Vradio" -msgstr "Buraxılış" +msgid "Clear Console" +msgstr "Siyahını təmizlə" -#: ../src/pd_menus.tcl:168 ../src/pd_menus.tcl:213 ../src/pd_menus.tcl:214 -msgid "Hradio" +msgid "Object" msgstr "" -#: ../src/pd_menus.tcl:170 ../src/pd_menus.tcl:215 ../src/pd_menus.tcl:216 -msgid "VU Meter" +msgid "Message" +msgstr "İsmarış" + +#, fuzzy +msgid "Number" +msgstr "$ Nömrəsi" + +msgid "Symbol" msgstr "" -#: ../src/pd_menus.tcl:172 ../src/pd_menus.tcl:217 ../src/pd_menus.tcl:218 #, fuzzy -msgid "Canvas" -msgstr "Kanada" +msgid "Comment" +msgstr "Əmr" -#: ../src/pd_menus.tcl:175 ../src/pd_menus.tcl:220 ../src/pd_menus.tcl:221 msgid "Graph" msgstr "Qrafika" -#: ../src/pd_menus.tcl:176 ../src/pd_menus.tcl:221 ../src/pd_menus.tcl:222 -#, fuzzy -msgid "Array" -msgstr "Andorra" - -#: ../src/pd_menus.tcl:181 ../src/pd_menus.tcl:226 ../src/pd_menus.tcl:227 #, fuzzy msgid "Find..." msgstr "Fayl Göndərilməsi..." -#: ../src/pd_menus.tcl:183 ../src/pd_menus.tcl:228 ../src/pd_menus.tcl:229 msgid "Find Again" msgstr "" -#: ../src/pd_menus.tcl:185 ../src/pd_menus.tcl:230 ../src/pd_menus.tcl:231 msgid "Find Last Error" msgstr "" -#: ../src/pd_menus.tcl:191 ../src/pd_menus.tcl:236 ../src/pd_menus.tcl:237 msgid "DSP On" msgstr "" -#: ../src/pd_menus.tcl:193 ../src/pd_menus.tcl:238 ../src/pd_menus.tcl:239 #, fuzzy msgid "DSP Off" msgstr "Bağlı" -#: ../src/pd_menus.tcl:196 ../src/pd_menus.tcl:242 ../src/pd_menus.tcl:269 msgid "Test Audio and MIDI..." msgstr "" -#: ../src/pd_menus.tcl:198 ../src/pd_menus.tcl:244 ../src/pd_menus.tcl:271 #, fuzzy msgid "Load Meter" msgstr "Lag ölçəni:" -#: ../src/pd_menus.tcl:205 ../src/pd_menus.tcl:251 ../src/pd_menus.tcl:278 +msgid "Audio Settings..." +msgstr "" + +msgid "MIDI Settings..." +msgstr "" + msgid "Minimize" msgstr "" -#: ../src/pd_menus.tcl:207 ../src/pd_menus.tcl:253 ../src/pd_menus.tcl:280 #, fuzzy msgid "Zoom" msgstr "Altda" -#: ../src/pd_menus.tcl:210 ../src/pd_menus.tcl:256 ../src/pd_menus.tcl:283 +msgid "Bring All to Front" +msgstr "" + #, fuzzy -msgid "Parent Window" +msgid "Next Window" msgstr "Fayl Yolla" -#: ../src/pd_menus.tcl:216 ../src/pd_menus.tcl:262 ../src/pd_menus.tcl:289 -msgid "Bring All to Front" -msgstr "" +#, fuzzy +msgid "Previous Window" +msgstr "Fayl Yolla" -#: ../src/pd_menus.tcl:224 ../src/pd_menus.tcl:241 ../src/pd_menus.tcl:253 -#: ../src/pd_menus.tcl:270 ../src/pd_menus.tcl:297 ../src/pd_menus.tcl:335 -#: ../src/pd_menus.tcl:362 #, fuzzy -msgid "About Pd" -msgstr "_Haqqında" +msgid "Parent Window" +msgstr "Fayl Yolla" -#: ../src/pd_menus.tcl:227 ../src/pd_menus.tcl:273 ../src/pd_menus.tcl:300 msgid "HTML Manual..." msgstr "" -#: ../src/pd_menus.tcl:229 ../src/pd_menus.tcl:275 ../src/pd_menus.tcl:302 #, fuzzy msgid "Browser..." msgstr "Gəz..." -#: ../src/pd_menus.tcl:248 ../src/pd_menus.tcl:260 ../src/pd_menus.tcl:342 -#: ../src/pd_menus.tcl:369 -msgid "Preferences..." +msgid "puredata.info" +msgstr "" + +msgid "Report a bug" +msgstr "" + +#, fuzzy +msgid "Clear Menu" +msgstr "Siyahını təmizlə" + +msgid "" +"Delete all preferences?\n" +"(takes effect when Pd is restarted)" +msgstr "" + +msgid "Path..." +msgstr "" + +msgid "Startup..." +msgstr "" + +msgid "Audio..." +msgstr "" + +msgid "MIDI..." +msgstr "" + +#, fuzzy +msgid "Zoom New Windows" +msgstr "Fayl Yolla" + +#, fuzzy +msgid "Save All Preferences" msgstr "Seçimlər..." -#: ../src/pd_menus.tcl:257 ../src/pd_menus.tcl:270 ../src/pd_menus.tcl:352 -#: ../src/pd_menus.tcl:379 -msgid "Open Recent" +#, fuzzy +msgid "Save to..." +msgstr "Fərqli Qeyd Et" + +msgid "Load from..." msgstr "" -#: ../src/pd_menus.tcl:263 -msgid "Audio Settings..." +msgid "Forget All..." msgstr "" -#: ../src/pd_menus.tcl:265 -msgid "MIDI Settings..." +msgid "Open Recent" msgstr "" -#: ../src/pd_menus.tcl:296 ../src/pd_menus.tcl:309 ../src/pd_menus.tcl:333 -#: ../src/pd_menus.tcl:346 ../src/pd_menus.tcl:393 ../src/pd_menus.tcl:420 -#: ../src/pd_menus.tcl:432 ../src/pd_menus.tcl:459 msgid "Quit" msgstr "Çıx" -#: ../src/pd_menus.tcl:304 ../src/pd_menus.tcl:331 -#, fuzzy -msgid "Clear Menu" -msgstr "Siyahını təmizlə" - -#: ../src/pdtk_canvas.tcl:44 ../src/pdtk_canvas.tcl:106 -#: ../src/pdtk_canvas.tcl:109 ../src/pdtk_canvas.tcl:123 -#: ../src/pdtk_canvas.tcl:125 ../src/pdtk_canvas.tcl:126 -#: ../src/pdtk_canvas.tcl:128 msgid "Properties" msgstr "" -#: ../src/pdwindow.tcl:43 +msgid "Audio on" +msgstr "" + +msgid "Audio off" +msgstr "" + +msgid "(Tcl) MISSING CLOSE-BRACKET ']': " +msgstr "" + +msgid "Tcl:" +msgstr "" + +msgid "Pd" +msgstr "" + #, fuzzy msgid "DSP" msgstr "Bağlı" -#: ../startup/object_db.tcl:113 -msgid "Signal" +msgid "Audio I/O error" msgstr "" -#: ../startup/object_db.tcl:114 -msgid "Generators" +msgid "Log:" msgstr "" -#: ../startup/object_db.tcl:115 -#, fuzzy -msgid "Filters" -msgstr "Fayl" +msgid "fatal" +msgstr "" -#: ../startup/object_db.tcl:116 ../startup/object_db.tcl:124 -msgid "Math" +msgid "error" msgstr "" -#: ../startup/object_db.tcl:117 ../startup/object_db.tcl:125 -msgid "I/O" +msgid "normal" msgstr "" -#: ../startup/object_db.tcl:118 ../startup/object_db.tcl:126 -msgid "Sampling" +msgid "debug" msgstr "" -#: ../startup/object_db.tcl:119 ../startup/object_db.tcl:128 -msgid "Routing" +msgid "all" msgstr "" -#: ../startup/object_db.tcl:120 ../startup/object_db.tcl:129 -msgid "Others" +msgid "New..." msgstr "" -#: ../startup/object_db.tcl:127 -msgid "GUI" +#, fuzzy +msgid "Edit..." +msgstr "_Yüklə..." + +#, fuzzy +msgid "Delete" +msgstr "Sil" + +#, tcl-format +msgid "Ignoring '%s': doesn't exist" msgstr "" + +#, tcl-format +msgid "Ignoring '%s': doesn't look like a Pd-file" +msgstr "" + +#, fuzzy +#~ msgid "for:" +#~ msgstr "Qapı:" + +#~ msgid "Preferences..." +#~ msgstr "Seçimlər..." + +#, fuzzy +#~ msgid "Close this window??" +#~ msgstr "Bu səkmə/pəncərəni bağla" + +#, fuzzy +#~ msgid "Pd Files" +#~ msgstr "Fayl" + +#, fuzzy +#~ msgid "Filters" +#~ msgstr "Fayl" + +#, fuzzy +#~ msgid "Text Editor" +#~ msgstr "Rənglər" diff --git a/po/be.po b/po/be.po index 90b3ddb84b..668961a46c 100644 --- a/po/be.po +++ b/po/be.po @@ -6,23 +6,96 @@ msgid "" msgstr "" "Project-Id-Version: Pure Data 0.43\n" "Report-Msgid-Bugs-To: pd-dev@iem.at\n" -"POT-Creation-Date: 2009-08-27 10:01-0400\n" +"POT-Creation-Date: 2017-07-06 18:10+0200\n" "PO-Revision-Date: 2007-06-26 12:02+0300\n" "Last-Translator: Pavel Piatruk \n" "Language-Team: Belarusian \n" +"Language: be\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: KBabel 1.10.2\n" +msgid "-------dimensions(digits)(pix):-------" +msgstr "" + +msgid "--------dimensions(pix)(pix):--------" +msgstr "" + +msgid "----------dimensions(pix):-----------" +msgstr "" + +msgid "--------flash-time(ms)(ms):---------" +msgstr "" + +msgid "-----------output-range:-----------" +msgstr "" + +msgid "------selectable_dimensions(pix):------" +msgstr "" + +msgid "------visible_rectangle(pix)(pix):------" +msgstr "" + #, fuzzy -msgid "Undo duplicate" -msgstr "Дата" +msgid "bottom:" +msgstr "Ніз" -msgid "Undo paste" +msgid "height:" msgstr "" -msgid "Undo motion" +msgid "hold:" +msgstr "" + +msgid "intrrpt:" +msgstr "" + +msgid "left:" +msgstr "" + +msgid "lin" +msgstr "" + +msgid "log" +msgstr "" + +msgid "log-height:" +msgstr "" + +msgid "max:" +msgstr "" + +msgid "min:" +msgstr "" + +msgid "right:" +msgstr "" + +#, fuzzy +msgid "size:" +msgstr "Памер" + +msgid "top:" +msgstr "" + +msgid "value:" +msgstr "" + +msgid "width:" +msgstr "" + +#, tcl-format +msgid "Do you want to save the changes you made in '%s'?" +msgstr "" + +#, tcl-format +msgid "Discard changes to '%s'?" +msgstr "" + +msgid "Undo clear" +msgstr "" + +msgid "Undo connect" msgstr "" #, fuzzy @@ -32,929 +105,1056 @@ msgstr "Уганда" msgid "Undo disconnect" msgstr "" -msgid "Undo connect" +#, fuzzy +msgid "Undo duplicate" +msgstr "Дата" + +msgid "Undo motion" msgstr "" -msgid "Undo clear" +msgid "Undo paste" msgstr "" msgid "Undo typing" msgstr "" -msgid "Discard changes to '%s'?" +msgid "Redo clear" msgstr "" -msgid "Do you want to save the changes you made in '%s'?" +msgid "Redo connect" +msgstr "" + +#, fuzzy +msgid "Redo cut" +msgstr "Уганда" + +msgid "Redo disconnect" +msgstr "" + +#, fuzzy +msgid "Redo duplicate" +msgstr "Дата" + +msgid "Redo motion" +msgstr "" + +msgid "Redo paste" +msgstr "" + +msgid "Redo typing" +msgstr "" + +msgid "no Pd settings to clear" +msgstr "" + +msgid "removed .pdsettings file" +msgstr "" + +msgid "couldn't delete .pdsettings file" +msgstr "" + +msgid "failed to erase Pd settings" +msgstr "" + +msgid "erased Pd settings" +msgstr "" + +msgid "no Pd settings to erase" +msgstr "" + +msgid "skipping loading preferences... Pd seems to have crashed on startup." +msgstr "" + +msgid "(re-save preferences to reinstate them)" +msgstr "" + +msgid "File" +msgstr "Файл" + +#, fuzzy +msgid "Edit" +msgstr "_Рэдагаваць" + +msgid "Put" +msgstr "" + +#, fuzzy +msgid "Find" +msgstr "Знайсці:" + +#, fuzzy +msgid "Media" +msgstr "Македонія" + +#, fuzzy +msgid "Window" +msgstr "Акно" + +msgid "Help" +msgstr "Дапамога" + +msgid "Show &Hidden Files and Directories" msgstr "" -#: ../src/dialog_array.tcl:115 ../src/dialog_array.tcl:117 -#: ../src/pd_menus.tcl:100 ../src/pd_menus.tcl:101 ../src/pd_menus.tcl:146 -#: ../src/pd_menus.tcl:147 msgid "Copy" msgstr "Капіяваць" -#: ../src/dialog_array.tcl:118 ../src/dialog_array.tcl:120 -#: ../src/pd_menus.tcl:102 ../src/pd_menus.tcl:103 ../src/pd_menus.tcl:148 -#: ../src/pd_menus.tcl:149 #, fuzzy msgid "Paste" msgstr "Дата" -#: ../src/dialog_array.tcl:264 ../src/dialog_array.tcl:266 msgid "Array Properties" msgstr "" -#: ../src/dialog_array.tcl:270 ../src/dialog_array.tcl:272 +#, fuzzy +msgid "Array" +msgstr "Андора" + #, fuzzy msgid "Name:" msgstr "Імя" -#: ../src/dialog_array.tcl:276 ../src/dialog_array.tcl:278 -#: ../src/dialog_canvas.tcl:178 ../src/dialog_canvas.tcl:193 -#: ../src/dialog_iemgui.tcl:619 ../src/dialog_iemgui.tcl:621 #, fuzzy msgid "Size:" msgstr "Памер" -#: ../src/dialog_array.tcl:280 ../src/dialog_array.tcl:282 #, fuzzy msgid "Save contents" msgstr "_Змест" -#: ../src/dialog_array.tcl:284 ../src/dialog_array.tcl:286 msgid "Draw as:" msgstr "" -#: ../src/dialog_array.tcl:287 ../src/dialog_array.tcl:289 -#, fuzzy -msgid "Points" -msgstr "Порт" - -#: ../src/dialog_array.tcl:289 ../src/dialog_array.tcl:291 #, fuzzy msgid "Polygon" msgstr "Польшча" -#: ../src/dialog_array.tcl:291 ../src/dialog_array.tcl:293 +#, fuzzy +msgid "Points" +msgstr "Порт" + msgid "Bezier curve" msgstr "" -#: ../src/dialog_array.tcl:297 ../src/dialog_array.tcl:299 msgid "Put array into:" msgstr "" -#: ../src/dialog_array.tcl:300 ../src/dialog_array.tcl:302 msgid "New graph" msgstr "" -#: ../src/dialog_array.tcl:302 ../src/dialog_array.tcl:304 #, fuzzy msgid "Last graph" msgstr "Апошняе паведамленне:" -#: ../src/dialog_array.tcl:306 ../src/dialog_array.tcl:308 -#, fuzzy -msgid "Delete array" -msgstr "Выдаліць" +msgid "Options" +msgstr "" -#: ../src/dialog_array.tcl:312 ../src/dialog_array.tcl:314 #, fuzzy msgid "Open List View..." msgstr "Спіс забароненых..." -#: ../src/dialog_array.tcl:319 ../src/dialog_array.tcl:321 -#: ../src/dialog_audio.tcl:136 ../src/dialog_canvas.tcl:205 -#: ../src/dialog_font.tcl:51 ../src/dialog_gatom.tcl:153 -#: ../src/dialog_gatom.tcl:161 ../src/dialog_iemgui.tcl:742 -#: ../src/dialog_iemgui.tcl:748 ../src/dialog_midi.tcl:91 -#: ../src/dialog_midi.tcl:226 +#, fuzzy +msgid "Delete array" +msgstr "Выдаліць" + msgid "Cancel" msgstr "Адмяніць" -#: ../src/dialog_array.tcl:321 ../src/dialog_array.tcl:323 -#: ../src/dialog_audio.tcl:138 ../src/dialog_canvas.tcl:207 -#: ../src/dialog_gatom.tcl:156 ../src/dialog_gatom.tcl:164 -#: ../src/dialog_iemgui.tcl:745 ../src/dialog_iemgui.tcl:751 -#: ../src/dialog_midi.tcl:93 ../src/dialog_midi.tcl:228 msgid "Apply" msgstr "" -#: ../src/dialog_array.tcl:323 ../src/dialog_array.tcl:325 -#: ../src/dialog_audio.tcl:140 ../src/dialog_canvas.tcl:209 -#: ../src/dialog_font.tcl:53 ../src/dialog_font.tcl:92 -#: ../src/dialog_font.tcl:100 ../src/dialog_font.tcl:101 -#: ../src/dialog_gatom.tcl:159 ../src/dialog_gatom.tcl:167 -#: ../src/dialog_iemgui.tcl:748 ../src/dialog_iemgui.tcl:754 -#: ../src/dialog_midi.tcl:95 ../src/dialog_midi.tcl:230 msgid "OK" msgstr "" -#: ../src/dialog_audio.tcl:130 msgid "Audio Settings" msgstr "" -#: ../src/dialog_audio.tcl:142 -msgid "Save All Settings" +msgid "Settings" msgstr "" -#: ../src/dialog_audio.tcl:151 msgid "Sample rate:" msgstr "" -#: ../src/dialog_audio.tcl:153 msgid "Delay (msec):" msgstr "" -#: ../src/dialog_audio.tcl:158 +msgid "Block size:" +msgstr "" + msgid "Use callbacks" msgstr "" -#: ../src/dialog_audio.tcl:166 ../src/dialog_midi.tcl:105 -#: ../src/dialog_midi.tcl:241 -msgid "Input device 1:" +msgid "Input Devices" msgstr "" -#: ../src/dialog_audio.tcl:169 ../src/dialog_audio.tcl:183 -#: ../src/dialog_audio.tcl:198 ../src/dialog_audio.tcl:213 -#: ../src/dialog_audio.tcl:232 ../src/dialog_audio.tcl:250 -#: ../src/dialog_audio.tcl:265 ../src/dialog_audio.tcl:280 #, fuzzy msgid "Channels:" msgstr "Адмяніць" -#: ../src/dialog_audio.tcl:179 ../src/dialog_midi.tcl:115 -#: ../src/dialog_midi.tcl:251 -msgid "Input device 2:" -msgstr "" - -#: ../src/dialog_audio.tcl:194 ../src/dialog_midi.tcl:127 -#: ../src/dialog_midi.tcl:263 -msgid "Input device 3:" -msgstr "" - -#: ../src/dialog_audio.tcl:209 ../src/dialog_midi.tcl:139 -#: ../src/dialog_midi.tcl:275 -msgid "Input device 4:" +msgid "Output Devices" msgstr "" -#: ../src/dialog_audio.tcl:223 ../src/dialog_midi.tcl:150 -#: ../src/dialog_midi.tcl:286 -msgid "Output device 1:" +msgid "(same as input device)..." msgstr "" -#: ../src/dialog_audio.tcl:226 -msgid "(same as input device) .............. " +msgid "Use Multiple Devices" msgstr "" -#: ../src/dialog_audio.tcl:246 ../src/dialog_midi.tcl:160 -#: ../src/dialog_midi.tcl:296 -msgid "Output device 2:" -msgstr "" - -#: ../src/dialog_audio.tcl:261 ../src/dialog_midi.tcl:171 -#: ../src/dialog_midi.tcl:307 -msgid "Output device 3:" -msgstr "" - -#: ../src/dialog_audio.tcl:276 ../src/dialog_midi.tcl:182 -#: ../src/dialog_midi.tcl:318 -msgid "Output device 4:" +msgid "Save All Settings" msgstr "" -#: ../src/dialog_audio.tcl:291 ../src/dialog_midi.tcl:195 -msgid "Use multiple devices" +msgid "WARNING: unknown graphme flags received in pdtk_canvas_dialog" msgstr "" -#: ../src/dialog_canvas.tcl:142 msgid "Canvas Properties" msgstr "" -#: ../src/dialog_canvas.tcl:146 #, fuzzy msgid "Scale" msgstr "Захаваць" -#: ../src/dialog_canvas.tcl:150 msgid "X units per pixel:" msgstr "" -#: ../src/dialog_canvas.tcl:155 msgid "Y units per pixel:" msgstr "" -#: ../src/dialog_canvas.tcl:159 msgid "Appearance on parent patch" msgstr "" -#: ../src/dialog_canvas.tcl:161 msgid "Graph-On-Parent" msgstr "" -#: ../src/dialog_canvas.tcl:165 msgid "Hide object name and arguments" msgstr "" -#: ../src/dialog_canvas.tcl:170 msgid "Range and size" msgstr "" -#: ../src/dialog_canvas.tcl:174 -msgid "X range, from" +msgid "X range: from" msgstr "" -#: ../src/dialog_canvas.tcl:176 ../src/dialog_canvas.tcl:191 msgid "to" msgstr "да" -#: ../src/dialog_canvas.tcl:180 ../src/dialog_canvas.tcl:195 #, fuzzy msgid "Margin:" msgstr "Лінія-адзнака:" -#: ../src/dialog_canvas.tcl:189 -msgid "Y range, from" +msgid "Y range: from" msgstr "" -#: ../src/dialog_find.tcl:63 ../src/dialog_find.tcl:66 -#: ../src/dialog_find.tcl:79 ../src/dialog_find.tcl:80 -#: ../src/dialog_find.tcl:83 ../src/dialog_find.tcl:85 -#: ../src/dialog_find.tcl:87 ../src/dialog_find.tcl:101 -#: ../src/dialog_find.tcl:105 ../src/dialog_find.tcl:107 -#: ../src/pd_menus.tcl:45 -#, fuzzy -msgid "Find" -msgstr "Знайсці:" +msgid "Data Properties" +msgstr "" -#: ../src/dialog_find.tcl:70 ../src/dialog_find.tcl:73 -#: ../src/dialog_find.tcl:87 ../src/dialog_find.tcl:91 -#: ../src/dialog_find.tcl:93 -#, fuzzy -msgid "Search in" -msgstr "_Пошук" +#, tcl-format +msgid "Found '%1$s' in %2$s" +msgstr "" -#: ../src/dialog_find.tcl:72 ../src/dialog_find.tcl:75 -#: ../src/dialog_find.tcl:89 ../src/dialog_find.tcl:93 -#: ../src/dialog_find.tcl:95 -#, fuzzy -msgid "for:" -msgstr "Порт:" +#, tcl-format +msgid "Couldn't find '%1$s' in %2$s" +msgstr "" -#: ../src/dialog_find.tcl:83 ../src/dialog_find.tcl:90 -#: ../src/dialog_find.tcl:104 ../src/dialog_find.tcl:108 -#: ../src/dialog_find.tcl:110 ../src/pd_menus.tcl:86 ../src/pd_menus.tcl:87 -#: ../src/pd_menus.tcl:132 ../src/pd_menus.tcl:133 ../src/pd_menus.tcl:259 -#: ../src/pd_menus.tcl:272 ../src/pd_menus.tcl:295 ../src/pd_menus.tcl:308 -#: ../src/pd_menus.tcl:332 ../src/pd_menus.tcl:345 ../src/pd_menus.tcl:354 -#: ../src/pd_menus.tcl:381 ../src/pd_menus.tcl:392 ../src/pd_menus.tcl:419 -#: ../src/pd_menus.tcl:431 ../src/pd_menus.tcl:458 -#, fuzzy -msgid "Close" -msgstr "_Закрыць" +#, fuzzy, tcl-format +msgid "Search in %s for:" +msgstr "_Пошук" -#: ../src/dialog_find.tcl:83 ../src/dialog_find.tcl:97 -#: ../src/dialog_find.tcl:101 ../src/dialog_find.tcl:103 -msgid "Match whole word only" +#, tcl-format +msgid "Showed last '%1$s' in %2$s" +msgstr "" + +#, tcl-format +msgid "Showing '%1$d' out of %2$d items in %3$s" msgstr "" -#: ../src/dialog_find.tcl:92 ../src/dialog_font.tcl:49 -#: ../src/dialog_font.tcl:50 ../src/pd-gui.tcl:280 ../src/pd-gui.tcl:283 -#: ../src/pd-gui.tcl:286 ../src/pd-gui.tcl:288 ../src/pd-gui.tcl:291 -#: ../src/pd_menus.tcl:212 ../src/pd_menus.tcl:258 ../src/pd_menus.tcl:285 -#: ../src/pdwindow.tcl:33 #, fuzzy msgid "Pd window" msgstr "Акно дасылкі" -#: ../src/dialog_font.tcl:45 -msgid "Font Properties" +msgid "Match whole word only" msgstr "" -#: ../src/dialog_font.tcl:46 ../src/dialog_font.tcl:54 -#: ../src/dialog_font.tcl:55 +#, fuzzy +msgid "Close" +msgstr "_Закрыць" + #, fuzzy, tcl-format msgid "%s Font" msgstr "Шрыфт:" -#: ../src/dialog_font.tcl:61 ../src/dialog_font.tcl:96 -#: ../src/dialog_font.tcl:104 ../src/dialog_font.tcl:105 +#, fuzzy +msgid "Font" +msgstr "Шрыфт:" + #, fuzzy msgid "Font Size" msgstr "Шрыфт:" -#: ../src/dialog_font.tcl:89 ../src/dialog_font.tcl:108 -#: ../src/dialog_font.tcl:116 ../src/dialog_font.tcl:117 msgid "Stretch" msgstr "" -#: ../src/dialog_font.tcl:96 ../src/dialog_font.tcl:115 -#: ../src/dialog_font.tcl:123 ../src/dialog_font.tcl:124 msgid "X and Y" msgstr "" -#: ../src/dialog_font.tcl:98 ../src/dialog_font.tcl:117 -#: ../src/dialog_font.tcl:125 ../src/dialog_font.tcl:126 #, fuzzy msgid "X only" msgstr "Паказаць толькі:" -#: ../src/dialog_font.tcl:100 ../src/dialog_font.tcl:119 -#: ../src/dialog_font.tcl:127 ../src/dialog_font.tcl:128 #, fuzzy msgid "Y only" msgstr "Паказаць толькі:" -#: ../src/dialog_gatom.tcl:93 msgid "Atom Box Properties" msgstr "" -#: ../src/dialog_gatom.tcl:99 msgid "Width:" msgstr "" -#: ../src/dialog_gatom.tcl:103 #, fuzzy msgid "Limits" msgstr "Абмежаванне карыстальніка" -#: ../src/dialog_gatom.tcl:107 msgid "Lower:" msgstr "" -#: ../src/dialog_gatom.tcl:112 ../src/dialog_gatom.tcl:113 #, fuzzy msgid "Upper:" msgstr "Карыстальнік:" -#: ../src/dialog_gatom.tcl:116 ../src/dialog_gatom.tcl:121 -#: ../src/dialog_iemgui.tcl:600 ../src/dialog_iemgui.tcl:652 -#: ../src/dialog_iemgui.tcl:657 msgid "Label" msgstr "" -#: ../src/dialog_gatom.tcl:124 ../src/dialog_gatom.tcl:129 -msgid "Left " +msgid "Left" msgstr "" -#: ../src/dialog_gatom.tcl:126 ../src/dialog_gatom.tcl:131 msgid "Right" msgstr "" -#: ../src/dialog_gatom.tcl:128 ../src/dialog_gatom.tcl:133 msgid "Top" msgstr "Верх" -#: ../src/dialog_gatom.tcl:130 ../src/dialog_gatom.tcl:135 msgid "Bottom" msgstr "Ніз" -#: ../src/dialog_gatom.tcl:137 ../src/dialog_gatom.tcl:145 -#: ../src/dialog_iemgui.tcl:574 #, fuzzy msgid "Messages" msgstr "Паведамленне" -#: ../src/dialog_gatom.tcl:141 ../src/dialog_gatom.tcl:149 -#: ../src/dialog_iemgui.tcl:578 msgid "Send symbol:" msgstr "" -#: ../src/dialog_gatom.tcl:147 ../src/dialog_gatom.tcl:155 -#: ../src/dialog_iemgui.tcl:585 #, fuzzy msgid "Receive symbol:" msgstr "Акно атрымання" -#: ../src/dialog_iemgui.tcl:197 #, fuzzy msgid "Background color" msgstr "Фон:" -#: ../src/dialog_iemgui.tcl:204 #, fuzzy msgid "Foreground color" msgstr "Колер літар:" -#: ../src/dialog_iemgui.tcl:211 #, fuzzy msgid "Label color" msgstr "Лакальныя колеры:" -#: ../src/dialog_iemgui.tcl:272 #, fuzzy msgid "Init" msgstr "Запрашэнне" -#: ../src/dialog_iemgui.tcl:275 ../src/dialog_iemgui.tcl:546 msgid "No init" msgstr "" -#: ../src/dialog_iemgui.tcl:287 ../src/dialog_iemgui.tcl:558 msgid "Jump on click" msgstr "" -#: ../src/dialog_iemgui.tcl:290 ../src/dialog_iemgui.tcl:561 msgid "Steady on click" msgstr "" -#: ../src/dialog_iemgui.tcl:498 -#, tcl-format -msgid "%s Properties" -msgstr "" - -#: ../src/dialog_iemgui.tcl:550 ../src/pd_menus.tcl:83 ../src/pd_menus.tcl:84 -#: ../src/pd_menus.tcl:129 ../src/pd_menus.tcl:130 ../src/pd_menus.tcl:260 -#: ../src/pd_menus.tcl:273 ../src/pd_menus.tcl:288 ../src/pd_menus.tcl:301 -#: ../src/pd_menus.tcl:325 ../src/pd_menus.tcl:338 ../src/pd_menus.tcl:355 -#: ../src/pd_menus.tcl:382 ../src/pd_menus.tcl:383 ../src/pd_menus.tcl:410 -#: ../src/pd_menus.tcl:422 ../src/pd_menus.tcl:449 -msgid "Save" -msgstr "Захаваць" +#, fuzzy +msgid "Bang" +msgstr "Забараніць" -#: ../src/dialog_iemgui.tcl:608 -msgid "X offset" +msgid "Flash Time (msec)" msgstr "" -#: ../src/dialog_iemgui.tcl:611 ../src/dialog_iemgui.tcl:612 -msgid "Y offset" +msgid "Intrrpt:" msgstr "" -#: ../src/dialog_iemgui.tcl:642 ../src/dialog_iemgui.tcl:645 -msgid "Colors" -msgstr "Колеры" - -#: ../src/dialog_iemgui.tcl:648 ../src/dialog_iemgui.tcl:651 -#, fuzzy -msgid "Background" -msgstr "Фон:" - -#: ../src/dialog_iemgui.tcl:650 ../src/dialog_iemgui.tcl:654 -#, fuzzy -msgid "Front" -msgstr "Шрыфт:" - -#: ../src/dialog_iemgui.tcl:662 ../src/dialog_iemgui.tcl:668 -msgid "Compose color" +msgid "Hold:" msgstr "" -#: ../src/dialog_iemgui.tcl:682 ../src/dialog_iemgui.tcl:688 #, fuzzy -msgid "Test label" -msgstr "Праверыць усё" +msgid "Toggle" +msgstr "Тога" -#: ../src/dialog_midi.tcl:85 -msgid "MIDI Settings" +msgid "Non Zero Value" msgstr "" -#: ../src/dialog_midi.tcl:220 -msgid "ALSA MIDI Settings" +msgid "Value:" msgstr "" -#: ../src/dialog_midi.tcl:331 -msgid "Use multiple ALSA devices" +#, fuzzy +msgid "Number2" +msgstr "$ Лічба" + +msgid "Width (digits):" msgstr "" -#: ../src/dialog_midi.tcl:337 -msgid "In Ports:" +msgid "Height:" msgstr "" -#: ../src/dialog_midi.tcl:340 -msgid "Out Ports:" +msgid "Output Range" msgstr "" -#: ../src/g_editor.c:1663 -msgid "Discard changes to this window??" +msgid "Log height:" msgstr "" -#: ../src/g_editor.c:1668 -msgid "really quit?" +msgid "Vslider" msgstr "" -#: ../src/g_editor.c:1699 #, fuzzy -msgid "Close this window??" -msgstr "_Закрыць акно" - -#: ../src/pd-gui.tcl:185 ../src/pd-gui.tcl:195 ../src/pd-gui.tcl:203 -#: ../src/pd-gui.tcl:206 ../src/pd-gui.tcl:215 ../src/pd-gui.tcl:226 -msgid "Associated Files" -msgstr "" +msgid "Hslider" +msgstr "С_хаваць" -#: ../src/pd-gui.tcl:186 ../src/pd-gui.tcl:196 ../src/pd-gui.tcl:204 -#: ../src/pd-gui.tcl:207 ../src/pd-gui.tcl:216 ../src/pd-gui.tcl:227 #, fuzzy -msgid "Pd Files" -msgstr "Файл" +msgid "Vradio" +msgstr "Версія" -#: ../src/pd-gui.tcl:187 ../src/pd-gui.tcl:205 ../src/pd-gui.tcl:208 -#: ../src/pd-gui.tcl:228 -msgid "Max Patch Files" +msgid "Num cells:" msgstr "" -#: ../src/pd-gui.tcl:188 ../src/pd-gui.tcl:206 ../src/pd-gui.tcl:209 -#: ../src/pd-gui.tcl:229 -msgid "Max Text Files" +msgid "Hradio" msgstr "" -#: ../src/pd-gui.tcl:197 ../src/pd-gui.tcl:217 -msgid "Max Patch Files (.pat)" +msgid "VU Meter" msgstr "" -#: ../src/pd-gui.tcl:198 ../src/pd-gui.tcl:218 -msgid "Max Text Files (.mxt)" -msgstr "" +#, fuzzy +msgid "Canvas" +msgstr "Канада" -#: ../src/pd-gui.tcl:270 ../src/pd-gui.tcl:290 -#, tcl-format -msgid "WARNING: Font family '%s' not found, using default (%s)" +msgid "Visible Rectangle (pix)" msgstr "" -#: ../src/pd-gui.tcl:278 ../src/pd-gui.tcl:298 #, tcl-format -msgid "WARNING: Font weight '%s' not found, using default (%s)" +msgid "%s Properties" msgstr "" -#: ../src/pd-gui.tcl:303 ../src/pd-gui.tcl:323 -#, tcl-format -msgid "ERROR: %s failed to find font size (%s) that fits into %sx%s!" +msgid "Parameters" msgstr "" -#: ../src/pd-gui.tcl:478 ../src/pd-gui.tcl:483 ../src/pd-gui.tcl:501 -msgid "ERROR: 'pd' never showed up, 'pd-gui' quitting!" +msgid "X offset:" msgstr "" -#: ../src/pd_menucommands.tcl:19 -msgid "Untitled" +msgid "Y offset:" msgstr "" -#: ../src/pd_menucommands.tcl:78 ../src/pd_menucommands.tcl:79 -#: ../src/pd_menucommands.tcl:90 -#, fuzzy -msgid "Send Message..." -msgstr "Паведамленне" +msgid "Colors" +msgstr "Колеры" -#: ../src/pd_menucommands.tcl:82 ../src/pd_menucommands.tcl:83 -#: ../src/pd_menucommands.tcl:94 ../src/pd_menus.tcl:87 ../src/pd_menus.tcl:88 -#: ../src/pd_menus.tcl:133 ../src/pd_menus.tcl:134 ../src/pd_menus.tcl:147 -#: ../src/pd_menus.tcl:192 ../src/pd_menus.tcl:193 ../src/pd_menus.tcl:265 -#: ../src/pd_menus.tcl:278 ../src/pd_menus.tcl:292 ../src/pd_menus.tcl:305 -#: ../src/pd_menus.tcl:329 ../src/pd_menus.tcl:342 ../src/pd_menus.tcl:360 -#: ../src/pd_menus.tcl:387 ../src/pd_menus.tcl:414 ../src/pd_menus.tcl:426 -#: ../src/pd_menus.tcl:453 ../startup/object_db.tcl:123 -msgid "Message" -msgstr "Паведамленне" +#, fuzzy +msgid "Background" +msgstr "Фон:" -#: ../src/pd_menucommands.tcl:108 ../src/pd_menucommands.tcl:111 -#: ../src/pd_menus.tcl:112 ../src/pd_menus.tcl:113 ../src/pd_menus.tcl:117 -#: ../src/pd_menus.tcl:118 ../src/pd_menus.tcl:158 ../src/pd_menus.tcl:159 -#: ../src/pd_menus.tcl:163 ../src/pd_menus.tcl:164 #, fuzzy -msgid "Font" +msgid "Front" msgstr "Шрыфт:" -#: ../src/pd_menucommands.tcl:123 ../src/pd_menucommands.tcl:126 -#: ../src/pd_menus.tcl:138 ../src/pd_menus.tcl:183 ../src/pd_menus.tcl:184 +msgid "Compose color" +msgstr "" + #, fuzzy -msgid "Preferences" -msgstr "_Асаблівасці" +msgid "Test label" +msgstr "Праверыць усё" -#: ../src/pd_menus.tcl:45 #, fuzzy -msgid "Edit" -msgstr "_Рэдагаваць" +msgid "Send a Pd message" +msgstr "Паведамленне" -#: ../src/pd_menus.tcl:45 -msgid "File" -msgstr "Файл" +msgid "(use arrow keys for history)" +msgstr "" -#: ../src/pd_menus.tcl:45 ../src/pdtk_canvas.tcl:48 ../src/pdtk_canvas.tcl:110 -#: ../src/pdtk_canvas.tcl:113 -msgid "Help" -msgstr "Дапамога" +msgid "MIDI Settings" +msgstr "" + +msgid "ALSA MIDI Settings" +msgstr "" + +msgid "In Ports:" +msgstr "" + +msgid "Out Ports:" +msgstr "" + +msgid "Pd search path for objects, help, fonts, and other files" +msgstr "" + +msgid "Use standard paths" +msgstr "" + +msgid "Verbose" +msgstr "" + +msgid "Pd Documents Directory" +msgstr "" + +msgid "Browse" +msgstr "" + +msgid "Reset" +msgstr "" + +msgid "Disable" +msgstr "" + +msgid "Externals Install Directory" +msgstr "" -#: ../src/pd_menus.tcl:45 #, fuzzy -msgid "Media" -msgstr "Македонія" +msgid "Clear" +msgstr "Ачысціць спіс" -#: ../src/pd_menus.tcl:45 -msgid "Put" +msgid "Choose Pd documents directory:" +msgstr "" + +msgid "Install externals to directory:" +msgstr "" + +msgid "Add a new path" +msgstr "" + +msgid "Add new library" +msgstr "" + +msgid "Edit library" +msgstr "" + +msgid "Pd libraries to load on startup" +msgstr "" + +msgid "Startup flags:" +msgstr "" + +msgid "Defeat real-time scheduling" msgstr "" -#: ../src/pd_menus.tcl:45 #, fuzzy -msgid "Window" -msgstr "Акно" +msgid "Help Browser" +msgstr "Агляд..." + +msgid "(Tcl) MISSING CLOSE-BRACE '}': " +msgstr "" + +msgid "(Tcl) INVALID COMMAND NAME: " +msgstr "" + +msgid "(Tcl) UNHANDLED ERROR: " +msgstr "" + +#, tcl-format +msgid "[deken]: installed version [%1$s] > %2$s...skipping!" +msgstr "" + +#, tcl-format +msgid "[deken]: installed version [%1$s] < %2$s...overwriting!" +msgstr "" + +#, tcl-format +msgid "[deken]: installed version [%1$s] == %2$s...skipping!" +msgstr "" + +msgid "[deken]: " +msgstr "" + +#, tcl-format +msgid "Successfully unzipped %1$s into %2$s." +msgstr "" + +msgid "[deken]: Unable to extract package automatically." +msgstr "" + +msgid "Please perform the following steps manually:" +msgstr "" + +#, tcl-format +msgid "1. Unzip %s." +msgstr "" + +#, tcl-format +msgid "2. Copy the contents into %s." +msgstr "" + +#, tcl-format +msgid "[deken] uninstalling '%s'" +msgstr "" + +#, tcl-format +msgid "Uninstalling %1$s from %2$s failed!" +msgstr "" + +#, tcl-format +msgid "[deken] deken-plugin.tcl (Pd externals search) loaded from %s." +msgstr "" + +#, tcl-format +msgid "[deken] Platform detected: %s" +msgstr "" + +#, tcl-format +msgid "[deken] Platform re-detected: %s" +msgstr "" + +msgid "Show all" +msgstr "" -#: ../src/pd_menus.tcl:81 ../src/pd_menus.tcl:82 ../src/pd_menus.tcl:127 -#: ../src/pd_menus.tcl:128 ../src/pd_menus.tcl:255 ../src/pd_menus.tcl:267 -#: ../src/pd_menus.tcl:285 ../src/pd_menus.tcl:298 ../src/pd_menus.tcl:322 -#: ../src/pd_menus.tcl:335 ../src/pd_menus.tcl:349 ../src/pd_menus.tcl:376 -#: ../src/pd_menus.tcl:380 ../src/pd_menus.tcl:407 ../src/pd_menus.tcl:419 -#: ../src/pd_menus.tcl:446 #, fuzzy -msgid "New" -msgstr "_Новы" +msgid "Search" +msgstr "_Пошук" + +msgid "To get a list of all available externals, try an empty search." +msgstr "" + +msgid "Find externals" +msgstr "" + +msgid "Only install externals uploaded by people you trust." +msgstr "" -#: ../src/pd_menus.tcl:82 ../src/pd_menus.tcl:83 ../src/pd_menus.tcl:128 -#: ../src/pd_menus.tcl:129 ../src/pd_menus.tcl:256 ../src/pd_menus.tcl:268 -#: ../src/pd_menus.tcl:286 ../src/pd_menus.tcl:299 ../src/pd_menus.tcl:323 -#: ../src/pd_menus.tcl:336 ../src/pd_menus.tcl:350 ../src/pd_menus.tcl:377 -#: ../src/pd_menus.tcl:381 ../src/pd_menus.tcl:408 ../src/pd_menus.tcl:420 -#: ../src/pd_menus.tcl:447 ../src/pdtk_canvas.tcl:46 -#: ../src/pdtk_canvas.tcl:108 ../src/pdtk_canvas.tcl:111 -#: ../src/pdtk_canvas.tcl:128 ../src/pdtk_canvas.tcl:130 -#: ../src/pdtk_canvas.tcl:131 ../src/pdtk_canvas.tcl:133 #, fuzzy -msgid "Open" -msgstr "Аперацыя" +msgid "Preferences" +msgstr "_Асаблівасці" + +msgid "Installation options:" +msgstr "" + +msgid "Try to remove libraries before (re)installing them?" +msgstr "" + +msgid "Show README of newly installed libraries (if present)?" +msgstr "" + +msgid "Should newly installed libraries be added to Pd's search path?" +msgstr "" + +msgid "Platform settings:" +msgstr "" + +#, tcl-format +msgid "Default platform: %s" +msgstr "" + +msgid "User-defined platform:" +msgstr "" + +msgid "Hide foreign architectures?" +msgstr "" + +#, fuzzy, tcl-format +msgid "Deken %s Preferences" +msgstr "_Асаблівасці" + +msgid "[deken]: Start searching for externals..." +msgstr "" + +#, tcl-format +msgid "[deken]: online? %s" +msgstr "" + +msgid "Are you online?" +msgstr "" + +msgid "Unable to perform search." +msgstr "" + +msgid "[deken]: No matching externals found." +msgstr "" + +msgid "Try using the full name e.g. 'freeverb'." +msgstr "" + +msgid "No matching externals found." +msgstr "" + +msgid "Please select a (writable) installation directory!" +msgstr "" + +#, tcl-format +msgid "Install %1$s to %2$s?" +msgstr "" + +#, tcl-format +msgid "" +"Commencing downloading of:\n" +"%1$s\n" +"Into %2$s..." +msgstr "" + +msgid "aborting.\n" +msgstr "" + +#, tcl-format +msgid "Unable to add %s to search paths" +msgstr "" + +#, tcl-format +msgid "Add %s to the Pd search paths?" +msgstr "" + +#, tcl-format +msgid "Added %s to search paths" +msgstr "" + +#, tcl-format +msgid "Unable to download from %1$s [%2$s]" +msgstr "" + +#, tcl-format +msgid "Unable to remove stray file %s" +msgstr "" + +#, tcl-format +msgid "Unable to rename downloaded file to %s" +msgstr "" + +#, fuzzy, tcl-format +msgid "searching for '%s'" +msgstr "_Пошук" + +#, tcl-format +msgid "Uploaded by %1$s @ %2$s" +msgstr "" + +msgid "Install package" +msgstr "" + +msgid "Open webpage" +msgstr "" + +msgid "_" +msgstr "" + +#, tcl-format +msgid "" +"Do you want Pd to create a documents directory for patches and external " +"libraries?\n" +"\n" +"Location: %s\n" +"\n" +"You can change or disable this later in the Path preferences." +msgstr "" + +#, tcl-format +msgid "" +"Pd documents directory cannot be found:\n" +"\n" +"%s\n" +"\n" +"Choose a new location?" +msgstr "" + +#, tcl-format +msgid "Couldn't create Pd documents directory: %s\n" +msgstr "" + +#, tcl-format +msgid "Couldn't create \"externals\" directory in: %s\n" +msgstr "" + +#, tcl-format +msgid "Couldn't create preferences \"%1$s\" in %2$s" +msgstr "" + +#, fuzzy +msgid "About Pd" +msgstr "Аб праграме" + +msgid "Save" +msgstr "Захаваць" -#: ../src/pd_menus.tcl:84 ../src/pd_menus.tcl:85 ../src/pd_menus.tcl:130 -#: ../src/pd_menus.tcl:131 ../src/pd_menus.tcl:261 ../src/pd_menus.tcl:274 -#: ../src/pd_menus.tcl:289 ../src/pd_menus.tcl:302 ../src/pd_menus.tcl:326 -#: ../src/pd_menus.tcl:339 ../src/pd_menus.tcl:356 ../src/pd_menus.tcl:383 -#: ../src/pd_menus.tcl:384 ../src/pd_menus.tcl:411 ../src/pd_menus.tcl:423 -#: ../src/pd_menus.tcl:450 msgid "Save As..." msgstr "Захаваць як..." -#: ../src/pd_menus.tcl:88 ../src/pd_menus.tcl:89 ../src/pd_menus.tcl:134 -#: ../src/pd_menus.tcl:135 ../src/pd_menus.tcl:267 ../src/pd_menus.tcl:280 -#: ../src/pd_menus.tcl:293 ../src/pd_menus.tcl:306 ../src/pd_menus.tcl:330 -#: ../src/pd_menus.tcl:343 ../src/pd_menus.tcl:362 ../src/pd_menus.tcl:388 -#: ../src/pd_menus.tcl:389 ../src/pd_menus.tcl:415 ../src/pd_menus.tcl:427 -#: ../src/pd_menus.tcl:454 #, fuzzy msgid "Print..." msgstr "_Змяніць..." -#: ../src/pd_menus.tcl:93 ../src/pd_menus.tcl:94 ../src/pd_menus.tcl:139 -#: ../src/pd_menus.tcl:140 -#, fuzzy -msgid "Undo" -msgstr "Уганда" - -#: ../src/pd_menus.tcl:95 ../src/pd_menus.tcl:96 ../src/pd_menus.tcl:141 -#: ../src/pd_menus.tcl:142 -#, fuzzy -msgid "Redo" -msgstr "Чырвоны" - -#: ../src/pd_menus.tcl:98 ../src/pd_menus.tcl:99 ../src/pd_menus.tcl:144 -#: ../src/pd_menus.tcl:145 -msgid "Cut" +msgid "Paste Replace" msgstr "" -#: ../src/pd_menus.tcl:104 ../src/pd_menus.tcl:105 ../src/pd_menus.tcl:150 -#: ../src/pd_menus.tcl:151 #, fuzzy msgid "Duplicate" msgstr "Дата" -#: ../src/pd_menus.tcl:106 ../src/pd_menus.tcl:107 ../src/pd_menus.tcl:152 -#: ../src/pd_menus.tcl:153 #, fuzzy -msgid "Select All" -msgstr "Вылучце колер" +msgid "Zoom In" +msgstr "Ніз" -#: ../src/pd_menus.tcl:110 ../src/pd_menus.tcl:111 ../src/pd_menus.tcl:115 -#: ../src/pd_menus.tcl:116 ../src/pd_menus.tcl:156 ../src/pd_menus.tcl:157 -#: ../src/pd_menus.tcl:161 ../src/pd_menus.tcl:162 #, fuzzy -msgid "Text Editor" -msgstr "Колеры тэксту" +msgid "Zoom Out" +msgstr "Ніз" -#: ../src/pd_menus.tcl:120 ../src/pd_menus.tcl:121 ../src/pd_menus.tcl:166 -#: ../src/pd_menus.tcl:167 msgid "Tidy Up" msgstr "" -#: ../src/pd_menus.tcl:122 ../src/pd_menus.tcl:123 ../src/pd_menus.tcl:168 -#: ../src/pd_menus.tcl:169 -msgid "Toggle Console" +msgid "(Dis)Connect Selection" msgstr "" -#: ../src/pd_menus.tcl:124 ../src/pd_menus.tcl:125 ../src/pd_menus.tcl:170 -#: ../src/pd_menus.tcl:171 -#, fuzzy -msgid "Clear Console" -msgstr "Ачысціць спіс" +msgid "Triggerize" +msgstr "" -#: ../src/pd_menus.tcl:128 ../src/pd_menus.tcl:129 ../src/pd_menus.tcl:174 -#: ../src/pd_menus.tcl:175 #, fuzzy msgid "Edit Mode" msgstr "Рэжым" -#: ../src/pd_menus.tcl:145 ../src/pd_menus.tcl:190 ../src/pd_menus.tcl:191 -msgid "Object" -msgstr "" +#, fuzzy +msgid "Undo" +msgstr "Уганда" -#: ../src/pd_menus.tcl:149 ../src/pd_menus.tcl:194 ../src/pd_menus.tcl:195 #, fuzzy -msgid "Number" -msgstr "$ Лічба" +msgid "Redo" +msgstr "Чырвоны" -#: ../src/pd_menus.tcl:151 ../src/pd_menus.tcl:196 ../src/pd_menus.tcl:197 -msgid "Symbol" +msgid "List of objects..." msgstr "" -#: ../src/pd_menus.tcl:153 ../src/pd_menus.tcl:198 ../src/pd_menus.tcl:199 -#, fuzzy -msgid "Comment" -msgstr "Каманда" - -#: ../src/pd_menus.tcl:156 ../src/pd_menus.tcl:201 ../src/pd_menus.tcl:202 #, fuzzy -msgid "Bang" -msgstr "Забараніць" +msgid "New" +msgstr "_Новы" -#: ../src/pd_menus.tcl:158 ../src/pd_menus.tcl:203 ../src/pd_menus.tcl:204 #, fuzzy -msgid "Toggle" -msgstr "Тога" +msgid "Open" +msgstr "Аперацыя" -#: ../src/pd_menus.tcl:160 ../src/pd_menus.tcl:205 ../src/pd_menus.tcl:206 #, fuzzy -msgid "Number2" -msgstr "$ Лічба" +msgid "Message..." +msgstr "Паведамленне" -#: ../src/pd_menus.tcl:162 ../src/pd_menus.tcl:207 ../src/pd_menus.tcl:208 -msgid "Vslider" +msgid "Cut" msgstr "" -#: ../src/pd_menus.tcl:164 ../src/pd_menus.tcl:209 ../src/pd_menus.tcl:210 #, fuzzy -msgid "Hslider" -msgstr "С_хаваць" +msgid "Select All" +msgstr "Вылучце колер" -#: ../src/pd_menus.tcl:166 ../src/pd_menus.tcl:211 ../src/pd_menus.tcl:212 #, fuzzy -msgid "Vradio" -msgstr "Версія" +msgid "Clear Console" +msgstr "Ачысціць спіс" -#: ../src/pd_menus.tcl:168 ../src/pd_menus.tcl:213 ../src/pd_menus.tcl:214 -msgid "Hradio" +msgid "Object" msgstr "" -#: ../src/pd_menus.tcl:170 ../src/pd_menus.tcl:215 ../src/pd_menus.tcl:216 -msgid "VU Meter" +msgid "Message" +msgstr "Паведамленне" + +#, fuzzy +msgid "Number" +msgstr "$ Лічба" + +msgid "Symbol" msgstr "" -#: ../src/pd_menus.tcl:172 ../src/pd_menus.tcl:217 ../src/pd_menus.tcl:218 #, fuzzy -msgid "Canvas" -msgstr "Канада" +msgid "Comment" +msgstr "Каманда" -#: ../src/pd_menus.tcl:175 ../src/pd_menus.tcl:220 ../src/pd_menus.tcl:221 msgid "Graph" msgstr "Графік" -#: ../src/pd_menus.tcl:176 ../src/pd_menus.tcl:221 ../src/pd_menus.tcl:222 -#, fuzzy -msgid "Array" -msgstr "Андора" - -#: ../src/pd_menus.tcl:181 ../src/pd_menus.tcl:226 ../src/pd_menus.tcl:227 #, fuzzy msgid "Find..." msgstr "Знайсці:" -#: ../src/pd_menus.tcl:183 ../src/pd_menus.tcl:228 ../src/pd_menus.tcl:229 msgid "Find Again" msgstr "" -#: ../src/pd_menus.tcl:185 ../src/pd_menus.tcl:230 ../src/pd_menus.tcl:231 msgid "Find Last Error" msgstr "" -#: ../src/pd_menus.tcl:191 ../src/pd_menus.tcl:236 ../src/pd_menus.tcl:237 msgid "DSP On" msgstr "" -#: ../src/pd_menus.tcl:193 ../src/pd_menus.tcl:238 ../src/pd_menus.tcl:239 #, fuzzy msgid "DSP Off" msgstr "Выкл" -#: ../src/pd_menus.tcl:196 ../src/pd_menus.tcl:242 ../src/pd_menus.tcl:269 msgid "Test Audio and MIDI..." msgstr "" -#: ../src/pd_menus.tcl:198 ../src/pd_menus.tcl:244 ../src/pd_menus.tcl:271 msgid "Load Meter" msgstr "" -#: ../src/pd_menus.tcl:205 ../src/pd_menus.tcl:251 ../src/pd_menus.tcl:278 +msgid "Audio Settings..." +msgstr "" + +msgid "MIDI Settings..." +msgstr "" + #, fuzzy msgid "Minimize" msgstr "_Паменшыць у сподак" -#: ../src/pd_menus.tcl:207 ../src/pd_menus.tcl:253 ../src/pd_menus.tcl:280 #, fuzzy msgid "Zoom" msgstr "Ніз" -#: ../src/pd_menus.tcl:210 ../src/pd_menus.tcl:256 ../src/pd_menus.tcl:283 +msgid "Bring All to Front" +msgstr "" + #, fuzzy -msgid "Parent Window" +msgid "Next Window" msgstr "Акно дасылкі" -#: ../src/pd_menus.tcl:216 ../src/pd_menus.tcl:262 ../src/pd_menus.tcl:289 -msgid "Bring All to Front" -msgstr "" +#, fuzzy +msgid "Previous Window" +msgstr "Акно дасылкі" -#: ../src/pd_menus.tcl:224 ../src/pd_menus.tcl:241 ../src/pd_menus.tcl:253 -#: ../src/pd_menus.tcl:270 ../src/pd_menus.tcl:297 ../src/pd_menus.tcl:335 -#: ../src/pd_menus.tcl:362 #, fuzzy -msgid "About Pd" -msgstr "Аб праграме" +msgid "Parent Window" +msgstr "Акно дасылкі" -#: ../src/pd_menus.tcl:227 ../src/pd_menus.tcl:273 ../src/pd_menus.tcl:300 msgid "HTML Manual..." msgstr "" -#: ../src/pd_menus.tcl:229 ../src/pd_menus.tcl:275 ../src/pd_menus.tcl:302 #, fuzzy msgid "Browser..." msgstr "Агляд.." -#: ../src/pd_menus.tcl:248 ../src/pd_menus.tcl:260 ../src/pd_menus.tcl:342 -#: ../src/pd_menus.tcl:369 +msgid "puredata.info" +msgstr "" + +msgid "Report a bug" +msgstr "" + +#, fuzzy +msgid "Clear Menu" +msgstr "Ачысціць спіс" + +msgid "" +"Delete all preferences?\n" +"(takes effect when Pd is restarted)" +msgstr "" + +msgid "Path..." +msgstr "" + +msgid "Startup..." +msgstr "" + +msgid "Audio..." +msgstr "" + +msgid "MIDI..." +msgstr "" + +#, fuzzy +msgid "Zoom New Windows" +msgstr "Акно дасылкі" + #, fuzzy -msgid "Preferences..." +msgid "Save All Preferences" msgstr "_Асаблівасці" -#: ../src/pd_menus.tcl:257 ../src/pd_menus.tcl:270 ../src/pd_menus.tcl:352 -#: ../src/pd_menus.tcl:379 -msgid "Open Recent" +#, fuzzy +msgid "Save to..." +msgstr "Захаваць як..." + +msgid "Load from..." msgstr "" -#: ../src/pd_menus.tcl:263 -msgid "Audio Settings..." +msgid "Forget All..." msgstr "" -#: ../src/pd_menus.tcl:265 -msgid "MIDI Settings..." +msgid "Open Recent" msgstr "" -#: ../src/pd_menus.tcl:296 ../src/pd_menus.tcl:309 ../src/pd_menus.tcl:333 -#: ../src/pd_menus.tcl:346 ../src/pd_menus.tcl:393 ../src/pd_menus.tcl:420 -#: ../src/pd_menus.tcl:432 ../src/pd_menus.tcl:459 #, fuzzy msgid "Quit" msgstr "_Выйсці" -#: ../src/pd_menus.tcl:304 ../src/pd_menus.tcl:331 -#, fuzzy -msgid "Clear Menu" -msgstr "Ачысціць спіс" - -#: ../src/pdtk_canvas.tcl:44 ../src/pdtk_canvas.tcl:106 -#: ../src/pdtk_canvas.tcl:109 ../src/pdtk_canvas.tcl:123 -#: ../src/pdtk_canvas.tcl:125 ../src/pdtk_canvas.tcl:126 -#: ../src/pdtk_canvas.tcl:128 msgid "Properties" msgstr "" -#: ../src/pdwindow.tcl:43 +msgid "Audio on" +msgstr "" + +msgid "Audio off" +msgstr "" + +msgid "(Tcl) MISSING CLOSE-BRACKET ']': " +msgstr "" + +msgid "Tcl:" +msgstr "" + +msgid "Pd" +msgstr "" + #, fuzzy msgid "DSP" msgstr "Выкл" -#: ../startup/object_db.tcl:113 -msgid "Signal" +msgid "Audio I/O error" msgstr "" -#: ../startup/object_db.tcl:114 -msgid "Generators" +msgid "Log:" msgstr "" -#: ../startup/object_db.tcl:115 -#, fuzzy -msgid "Filters" -msgstr "Файл" +msgid "fatal" +msgstr "" + +msgid "error" +msgstr "" -#: ../startup/object_db.tcl:116 ../startup/object_db.tcl:124 -msgid "Math" +msgid "normal" msgstr "" -#: ../startup/object_db.tcl:117 ../startup/object_db.tcl:125 -msgid "I/O" +msgid "debug" msgstr "" -#: ../startup/object_db.tcl:118 ../startup/object_db.tcl:126 -msgid "Sampling" +msgid "all" msgstr "" -#: ../startup/object_db.tcl:119 ../startup/object_db.tcl:128 -msgid "Routing" +msgid "New..." msgstr "" -#: ../startup/object_db.tcl:120 ../startup/object_db.tcl:129 -msgid "Others" +#, fuzzy +msgid "Edit..." +msgstr "_Рэдагаваць" + +#, fuzzy +msgid "Delete" +msgstr "Выдаліць" + +#, tcl-format +msgid "Ignoring '%s': doesn't exist" msgstr "" -#: ../startup/object_db.tcl:127 -msgid "GUI" +#, tcl-format +msgid "Ignoring '%s': doesn't look like a Pd-file" msgstr "" + +#, fuzzy +#~ msgid "for:" +#~ msgstr "Порт:" + +#, fuzzy +#~ msgid "Preferences..." +#~ msgstr "_Асаблівасці" + +#, fuzzy +#~ msgid "Close this window??" +#~ msgstr "_Закрыць акно" + +#, fuzzy +#~ msgid "Pd Files" +#~ msgstr "Файл" + +#, fuzzy +#~ msgid "Filters" +#~ msgstr "Файл" + +#, fuzzy +#~ msgid "Text Editor" +#~ msgstr "Колеры тэксту" diff --git a/po/bg.po b/po/bg.po index fc49699bea..0229f77645 100644 --- a/po/bg.po +++ b/po/bg.po @@ -6,23 +6,98 @@ msgid "" msgstr "" "Project-Id-Version: Pure Data 0.43\n" "Report-Msgid-Bugs-To: pd-dev@iem.at\n" -"POT-Creation-Date: 2009-08-27 10:01-0400\n" +"POT-Creation-Date: 2017-07-06 18:10+0200\n" "PO-Revision-Date: 2005-05-20 17:51+0300\n" "Last-Translator: Rostislav Raykov \n" "Language-Team: Bulgarian \n" +"Language: bg\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" +msgid "-------dimensions(digits)(pix):-------" +msgstr "" + +msgid "--------dimensions(pix)(pix):--------" +msgstr "" + +msgid "----------dimensions(pix):-----------" +msgstr "" + +msgid "--------flash-time(ms)(ms):---------" +msgstr "" + +msgid "-----------output-range:-----------" +msgstr "" + +msgid "------selectable_dimensions(pix):------" +msgstr "" + +msgid "------visible_rectangle(pix)(pix):------" +msgstr "" + #, fuzzy -msgid "Undo duplicate" -msgstr "Дата" +msgid "bottom:" +msgstr "Долу" -msgid "Undo paste" +#, fuzzy +msgid "height:" +msgstr "Дясно" + +msgid "hold:" msgstr "" -msgid "Undo motion" +msgid "intrrpt:" +msgstr "" + +msgid "left:" +msgstr "" + +msgid "lin" +msgstr "" + +msgid "log" +msgstr "" + +msgid "log-height:" +msgstr "" + +msgid "max:" +msgstr "" + +msgid "min:" +msgstr "" + +#, fuzzy +msgid "right:" +msgstr "Дясно" + +#, fuzzy +msgid "size:" +msgstr "Размер" + +msgid "top:" +msgstr "" + +msgid "value:" +msgstr "" + +msgid "width:" +msgstr "" + +#, tcl-format +msgid "Do you want to save the changes you made in '%s'?" +msgstr "" + +#, tcl-format +msgid "Discard changes to '%s'?" +msgstr "" + +msgid "Undo clear" +msgstr "" + +msgid "Undo connect" msgstr "" #, fuzzy @@ -32,924 +107,1052 @@ msgstr "Уганда" msgid "Undo disconnect" msgstr "" -msgid "Undo connect" +#, fuzzy +msgid "Undo duplicate" +msgstr "Дата" + +msgid "Undo motion" msgstr "" -msgid "Undo clear" +msgid "Undo paste" msgstr "" msgid "Undo typing" msgstr "" -msgid "Discard changes to '%s'?" +msgid "Redo clear" msgstr "" -msgid "Do you want to save the changes you made in '%s'?" +msgid "Redo connect" +msgstr "" + +#, fuzzy +msgid "Redo cut" +msgstr "Уганда" + +msgid "Redo disconnect" +msgstr "" + +#, fuzzy +msgid "Redo duplicate" +msgstr "Дата" + +msgid "Redo motion" +msgstr "" + +msgid "Redo paste" +msgstr "" + +msgid "Redo typing" +msgstr "" + +msgid "no Pd settings to clear" +msgstr "" + +msgid "removed .pdsettings file" +msgstr "" + +msgid "couldn't delete .pdsettings file" +msgstr "" + +msgid "failed to erase Pd settings" +msgstr "" + +msgid "erased Pd settings" +msgstr "" + +msgid "no Pd settings to erase" +msgstr "" + +msgid "skipping loading preferences... Pd seems to have crashed on startup." +msgstr "" + +msgid "(re-save preferences to reinstate them)" +msgstr "" + +msgid "File" +msgstr "Файл" + +#, fuzzy +msgid "Edit" +msgstr "_Редактиране" + +msgid "Put" +msgstr "" + +msgid "Find" +msgstr "Търсене" + +#, fuzzy +msgid "Media" +msgstr "Македония" + +#, fuzzy +msgid "Window" +msgstr "Прозорец" + +msgid "Help" +msgstr "Помощ" + +msgid "Show &Hidden Files and Directories" msgstr "" -#: ../src/dialog_array.tcl:115 ../src/dialog_array.tcl:117 -#: ../src/pd_menus.tcl:100 ../src/pd_menus.tcl:101 ../src/pd_menus.tcl:146 -#: ../src/pd_menus.tcl:147 msgid "Copy" msgstr "Копиране" -#: ../src/dialog_array.tcl:118 ../src/dialog_array.tcl:120 -#: ../src/pd_menus.tcl:102 ../src/pd_menus.tcl:103 ../src/pd_menus.tcl:148 -#: ../src/pd_menus.tcl:149 #, fuzzy msgid "Paste" msgstr "Дата" -#: ../src/dialog_array.tcl:264 ../src/dialog_array.tcl:266 msgid "Array Properties" msgstr "" -#: ../src/dialog_array.tcl:270 ../src/dialog_array.tcl:272 +#, fuzzy +msgid "Array" +msgstr "Андора" + #, fuzzy msgid "Name:" msgstr "Име" -#: ../src/dialog_array.tcl:276 ../src/dialog_array.tcl:278 -#: ../src/dialog_canvas.tcl:178 ../src/dialog_canvas.tcl:193 -#: ../src/dialog_iemgui.tcl:619 ../src/dialog_iemgui.tcl:621 #, fuzzy msgid "Size:" msgstr "Размер" -#: ../src/dialog_array.tcl:280 ../src/dialog_array.tcl:282 #, fuzzy msgid "Save contents" msgstr "_Потребителско ръководство" -#: ../src/dialog_array.tcl:284 ../src/dialog_array.tcl:286 msgid "Draw as:" msgstr "" -#: ../src/dialog_array.tcl:287 ../src/dialog_array.tcl:289 -#, fuzzy -msgid "Points" -msgstr "Порт" - -#: ../src/dialog_array.tcl:289 ../src/dialog_array.tcl:291 #, fuzzy msgid "Polygon" msgstr "Полша" -#: ../src/dialog_array.tcl:291 ../src/dialog_array.tcl:293 +#, fuzzy +msgid "Points" +msgstr "Порт" + msgid "Bezier curve" msgstr "" -#: ../src/dialog_array.tcl:297 ../src/dialog_array.tcl:299 msgid "Put array into:" msgstr "" -#: ../src/dialog_array.tcl:300 ../src/dialog_array.tcl:302 msgid "New graph" msgstr "" -#: ../src/dialog_array.tcl:302 ../src/dialog_array.tcl:304 #, fuzzy msgid "Last graph" msgstr "Последно съобщение: %s" -#: ../src/dialog_array.tcl:306 ../src/dialog_array.tcl:308 -#, fuzzy -msgid "Delete array" -msgstr "Изтриване" +msgid "Options" +msgstr "" -#: ../src/dialog_array.tcl:312 ../src/dialog_array.tcl:314 #, fuzzy msgid "Open List View..." msgstr "Списък със забранение адреси..." -#: ../src/dialog_array.tcl:319 ../src/dialog_array.tcl:321 -#: ../src/dialog_audio.tcl:136 ../src/dialog_canvas.tcl:205 -#: ../src/dialog_font.tcl:51 ../src/dialog_gatom.tcl:153 -#: ../src/dialog_gatom.tcl:161 ../src/dialog_iemgui.tcl:742 -#: ../src/dialog_iemgui.tcl:748 ../src/dialog_midi.tcl:91 -#: ../src/dialog_midi.tcl:226 +#, fuzzy +msgid "Delete array" +msgstr "Изтриване" + msgid "Cancel" msgstr "Отмяна" -#: ../src/dialog_array.tcl:321 ../src/dialog_array.tcl:323 -#: ../src/dialog_audio.tcl:138 ../src/dialog_canvas.tcl:207 -#: ../src/dialog_gatom.tcl:156 ../src/dialog_gatom.tcl:164 -#: ../src/dialog_iemgui.tcl:745 ../src/dialog_iemgui.tcl:751 -#: ../src/dialog_midi.tcl:93 ../src/dialog_midi.tcl:228 msgid "Apply" msgstr "Прилагане" -#: ../src/dialog_array.tcl:323 ../src/dialog_array.tcl:325 -#: ../src/dialog_audio.tcl:140 ../src/dialog_canvas.tcl:209 -#: ../src/dialog_font.tcl:53 ../src/dialog_font.tcl:92 -#: ../src/dialog_font.tcl:100 ../src/dialog_font.tcl:101 -#: ../src/dialog_gatom.tcl:159 ../src/dialog_gatom.tcl:167 -#: ../src/dialog_iemgui.tcl:748 ../src/dialog_iemgui.tcl:754 -#: ../src/dialog_midi.tcl:95 ../src/dialog_midi.tcl:230 msgid "OK" msgstr "" -#: ../src/dialog_audio.tcl:130 msgid "Audio Settings" msgstr "" -#: ../src/dialog_audio.tcl:142 -msgid "Save All Settings" +msgid "Settings" msgstr "" -#: ../src/dialog_audio.tcl:151 msgid "Sample rate:" msgstr "" -#: ../src/dialog_audio.tcl:153 msgid "Delay (msec):" msgstr "" -#: ../src/dialog_audio.tcl:158 +msgid "Block size:" +msgstr "" + msgid "Use callbacks" msgstr "" -#: ../src/dialog_audio.tcl:166 ../src/dialog_midi.tcl:105 -#: ../src/dialog_midi.tcl:241 -msgid "Input device 1:" +msgid "Input Devices" msgstr "" -#: ../src/dialog_audio.tcl:169 ../src/dialog_audio.tcl:183 -#: ../src/dialog_audio.tcl:198 ../src/dialog_audio.tcl:213 -#: ../src/dialog_audio.tcl:232 ../src/dialog_audio.tcl:250 -#: ../src/dialog_audio.tcl:265 ../src/dialog_audio.tcl:280 #, fuzzy msgid "Channels:" msgstr "Отмяна" -#: ../src/dialog_audio.tcl:179 ../src/dialog_midi.tcl:115 -#: ../src/dialog_midi.tcl:251 -msgid "Input device 2:" -msgstr "" - -#: ../src/dialog_audio.tcl:194 ../src/dialog_midi.tcl:127 -#: ../src/dialog_midi.tcl:263 -msgid "Input device 3:" -msgstr "" - -#: ../src/dialog_audio.tcl:209 ../src/dialog_midi.tcl:139 -#: ../src/dialog_midi.tcl:275 -msgid "Input device 4:" -msgstr "" - -#: ../src/dialog_audio.tcl:223 ../src/dialog_midi.tcl:150 -#: ../src/dialog_midi.tcl:286 -msgid "Output device 1:" -msgstr "" - -#: ../src/dialog_audio.tcl:226 -msgid "(same as input device) .............. " +msgid "Output Devices" msgstr "" -#: ../src/dialog_audio.tcl:246 ../src/dialog_midi.tcl:160 -#: ../src/dialog_midi.tcl:296 -msgid "Output device 2:" +msgid "(same as input device)..." msgstr "" -#: ../src/dialog_audio.tcl:261 ../src/dialog_midi.tcl:171 -#: ../src/dialog_midi.tcl:307 -msgid "Output device 3:" +msgid "Use Multiple Devices" msgstr "" -#: ../src/dialog_audio.tcl:276 ../src/dialog_midi.tcl:182 -#: ../src/dialog_midi.tcl:318 -msgid "Output device 4:" +msgid "Save All Settings" msgstr "" -#: ../src/dialog_audio.tcl:291 ../src/dialog_midi.tcl:195 -msgid "Use multiple devices" +msgid "WARNING: unknown graphme flags received in pdtk_canvas_dialog" msgstr "" -#: ../src/dialog_canvas.tcl:142 msgid "Canvas Properties" msgstr "" -#: ../src/dialog_canvas.tcl:146 #, fuzzy msgid "Scale" msgstr "Запазване" -#: ../src/dialog_canvas.tcl:150 msgid "X units per pixel:" msgstr "" -#: ../src/dialog_canvas.tcl:155 msgid "Y units per pixel:" msgstr "" -#: ../src/dialog_canvas.tcl:159 msgid "Appearance on parent patch" msgstr "" -#: ../src/dialog_canvas.tcl:161 msgid "Graph-On-Parent" msgstr "" -#: ../src/dialog_canvas.tcl:165 msgid "Hide object name and arguments" msgstr "" -#: ../src/dialog_canvas.tcl:170 msgid "Range and size" msgstr "" -#: ../src/dialog_canvas.tcl:174 -msgid "X range, from" +msgid "X range: from" msgstr "" -#: ../src/dialog_canvas.tcl:176 ../src/dialog_canvas.tcl:191 msgid "to" msgstr "" -#: ../src/dialog_canvas.tcl:180 ../src/dialog_canvas.tcl:195 #, fuzzy msgid "Margin:" msgstr "Отбелязваща линия:" -#: ../src/dialog_canvas.tcl:189 -msgid "Y range, from" +msgid "Y range: from" msgstr "" -#: ../src/dialog_find.tcl:63 ../src/dialog_find.tcl:66 -#: ../src/dialog_find.tcl:79 ../src/dialog_find.tcl:80 -#: ../src/dialog_find.tcl:83 ../src/dialog_find.tcl:85 -#: ../src/dialog_find.tcl:87 ../src/dialog_find.tcl:101 -#: ../src/dialog_find.tcl:105 ../src/dialog_find.tcl:107 -#: ../src/pd_menus.tcl:45 -msgid "Find" -msgstr "Търсене" +msgid "Data Properties" +msgstr "" -#: ../src/dialog_find.tcl:70 ../src/dialog_find.tcl:73 -#: ../src/dialog_find.tcl:87 ../src/dialog_find.tcl:91 -#: ../src/dialog_find.tcl:93 -#, fuzzy -msgid "Search in" +#, tcl-format +msgid "Found '%1$s' in %2$s" +msgstr "" + +#, tcl-format +msgid "Couldn't find '%1$s' in %2$s" +msgstr "" + +#, fuzzy, tcl-format +msgid "Search in %s for:" msgstr "Търсене из текста..." -#: ../src/dialog_find.tcl:72 ../src/dialog_find.tcl:75 -#: ../src/dialog_find.tcl:89 ../src/dialog_find.tcl:93 -#: ../src/dialog_find.tcl:95 -#, fuzzy -msgid "for:" -msgstr "Порт:" - -#: ../src/dialog_find.tcl:83 ../src/dialog_find.tcl:90 -#: ../src/dialog_find.tcl:104 ../src/dialog_find.tcl:108 -#: ../src/dialog_find.tcl:110 ../src/pd_menus.tcl:86 ../src/pd_menus.tcl:87 -#: ../src/pd_menus.tcl:132 ../src/pd_menus.tcl:133 ../src/pd_menus.tcl:259 -#: ../src/pd_menus.tcl:272 ../src/pd_menus.tcl:295 ../src/pd_menus.tcl:308 -#: ../src/pd_menus.tcl:332 ../src/pd_menus.tcl:345 ../src/pd_menus.tcl:354 -#: ../src/pd_menus.tcl:381 ../src/pd_menus.tcl:392 ../src/pd_menus.tcl:419 -#: ../src/pd_menus.tcl:431 ../src/pd_menus.tcl:458 -msgid "Close" -msgstr "Затваряне" +#, tcl-format +msgid "Showed last '%1$s' in %2$s" +msgstr "" -#: ../src/dialog_find.tcl:83 ../src/dialog_find.tcl:97 -#: ../src/dialog_find.tcl:101 ../src/dialog_find.tcl:103 -msgid "Match whole word only" +#, tcl-format +msgid "Showing '%1$d' out of %2$d items in %3$s" msgstr "" -#: ../src/dialog_find.tcl:92 ../src/dialog_font.tcl:49 -#: ../src/dialog_font.tcl:50 ../src/pd-gui.tcl:280 ../src/pd-gui.tcl:283 -#: ../src/pd-gui.tcl:286 ../src/pd-gui.tcl:288 ../src/pd-gui.tcl:291 -#: ../src/pd_menus.tcl:212 ../src/pd_menus.tcl:258 ../src/pd_menus.tcl:285 -#: ../src/pdwindow.tcl:33 #, fuzzy msgid "Pd window" msgstr "Прозореца за изпращане на файлове" -#: ../src/dialog_font.tcl:45 -msgid "Font Properties" +msgid "Match whole word only" msgstr "" -#: ../src/dialog_font.tcl:46 ../src/dialog_font.tcl:54 -#: ../src/dialog_font.tcl:55 +msgid "Close" +msgstr "Затваряне" + #, fuzzy, tcl-format msgid "%s Font" msgstr "Шрифт:" -#: ../src/dialog_font.tcl:61 ../src/dialog_font.tcl:96 -#: ../src/dialog_font.tcl:104 ../src/dialog_font.tcl:105 +#, fuzzy +msgid "Font" +msgstr "Шрифт:" + #, fuzzy msgid "Font Size" msgstr "Размер" -#: ../src/dialog_font.tcl:89 ../src/dialog_font.tcl:108 -#: ../src/dialog_font.tcl:116 ../src/dialog_font.tcl:117 #, fuzzy msgid "Stretch" msgstr "Време на начало" -#: ../src/dialog_font.tcl:96 ../src/dialog_font.tcl:115 -#: ../src/dialog_font.tcl:123 ../src/dialog_font.tcl:124 msgid "X and Y" msgstr "" -#: ../src/dialog_font.tcl:98 ../src/dialog_font.tcl:117 -#: ../src/dialog_font.tcl:125 ../src/dialog_font.tcl:126 msgid "X only" msgstr "" -#: ../src/dialog_font.tcl:100 ../src/dialog_font.tcl:119 -#: ../src/dialog_font.tcl:127 ../src/dialog_font.tcl:128 msgid "Y only" msgstr "" -#: ../src/dialog_gatom.tcl:93 msgid "Atom Box Properties" msgstr "" -#: ../src/dialog_gatom.tcl:99 msgid "Width:" msgstr "" -#: ../src/dialog_gatom.tcl:103 #, fuzzy msgid "Limits" msgstr "Списъци" -#: ../src/dialog_gatom.tcl:107 msgid "Lower:" msgstr "" -#: ../src/dialog_gatom.tcl:112 ../src/dialog_gatom.tcl:113 #, fuzzy msgid "Upper:" msgstr "Потребител" -#: ../src/dialog_gatom.tcl:116 ../src/dialog_gatom.tcl:121 -#: ../src/dialog_iemgui.tcl:600 ../src/dialog_iemgui.tcl:652 -#: ../src/dialog_iemgui.tcl:657 msgid "Label" msgstr "" -#: ../src/dialog_gatom.tcl:124 ../src/dialog_gatom.tcl:129 #, fuzzy -msgid "Left " +msgid "Left" msgstr "Ляво" -#: ../src/dialog_gatom.tcl:126 ../src/dialog_gatom.tcl:131 msgid "Right" msgstr "Дясно" -#: ../src/dialog_gatom.tcl:128 ../src/dialog_gatom.tcl:133 msgid "Top" msgstr "Горе" -#: ../src/dialog_gatom.tcl:130 ../src/dialog_gatom.tcl:135 msgid "Bottom" msgstr "Долу" -#: ../src/dialog_gatom.tcl:137 ../src/dialog_gatom.tcl:145 -#: ../src/dialog_iemgui.tcl:574 #, fuzzy msgid "Messages" msgstr "Съобщение" -#: ../src/dialog_gatom.tcl:141 ../src/dialog_gatom.tcl:149 -#: ../src/dialog_iemgui.tcl:578 msgid "Send symbol:" msgstr "" -#: ../src/dialog_gatom.tcl:147 ../src/dialog_gatom.tcl:155 -#: ../src/dialog_iemgui.tcl:585 #, fuzzy msgid "Receive symbol:" msgstr "Прозореца за получване на файлове" -#: ../src/dialog_iemgui.tcl:197 #, fuzzy msgid "Background color" msgstr "Фон:" -#: ../src/dialog_iemgui.tcl:204 #, fuzzy msgid "Foreground color" msgstr "Цвят:" -#: ../src/dialog_iemgui.tcl:211 #, fuzzy msgid "Label color" msgstr "Избор на цвят" -#: ../src/dialog_iemgui.tcl:272 #, fuzzy msgid "Init" msgstr "Покана" -#: ../src/dialog_iemgui.tcl:275 ../src/dialog_iemgui.tcl:546 msgid "No init" msgstr "" -#: ../src/dialog_iemgui.tcl:287 ../src/dialog_iemgui.tcl:558 msgid "Jump on click" msgstr "" -#: ../src/dialog_iemgui.tcl:290 ../src/dialog_iemgui.tcl:561 msgid "Steady on click" msgstr "" -#: ../src/dialog_iemgui.tcl:498 +#, fuzzy +msgid "Bang" +msgstr "Забрана" + +msgid "Flash Time (msec)" +msgstr "" + +msgid "Intrrpt:" +msgstr "" + +msgid "Hold:" +msgstr "" + +#, fuzzy +msgid "Toggle" +msgstr "Того" + +msgid "Non Zero Value" +msgstr "" + +msgid "Value:" +msgstr "" + +#, fuzzy +msgid "Number2" +msgstr "$ Номер" + +msgid "Width (digits):" +msgstr "" + +#, fuzzy +msgid "Height:" +msgstr "Дясно" + +msgid "Output Range" +msgstr "" + +msgid "Log height:" +msgstr "" + +msgid "Vslider" +msgstr "" + +#, fuzzy +msgid "Hslider" +msgstr "Скрит" + +#, fuzzy +msgid "Vradio" +msgstr "Версия" + +msgid "Num cells:" +msgstr "" + +msgid "Hradio" +msgstr "" + +msgid "VU Meter" +msgstr "" + +#, fuzzy +msgid "Canvas" +msgstr "Канада" + +msgid "Visible Rectangle (pix)" +msgstr "" + #, tcl-format msgid "%s Properties" msgstr "" -#: ../src/dialog_iemgui.tcl:550 ../src/pd_menus.tcl:83 ../src/pd_menus.tcl:84 -#: ../src/pd_menus.tcl:129 ../src/pd_menus.tcl:130 ../src/pd_menus.tcl:260 -#: ../src/pd_menus.tcl:273 ../src/pd_menus.tcl:288 ../src/pd_menus.tcl:301 -#: ../src/pd_menus.tcl:325 ../src/pd_menus.tcl:338 ../src/pd_menus.tcl:355 -#: ../src/pd_menus.tcl:382 ../src/pd_menus.tcl:383 ../src/pd_menus.tcl:410 -#: ../src/pd_menus.tcl:422 ../src/pd_menus.tcl:449 -msgid "Save" -msgstr "Запазване" +msgid "Parameters" +msgstr "" -#: ../src/dialog_iemgui.tcl:608 -msgid "X offset" +msgid "X offset:" msgstr "" -#: ../src/dialog_iemgui.tcl:611 ../src/dialog_iemgui.tcl:612 -msgid "Y offset" +msgid "Y offset:" msgstr "" -#: ../src/dialog_iemgui.tcl:642 ../src/dialog_iemgui.tcl:645 msgid "Colors" msgstr "Цветове" -#: ../src/dialog_iemgui.tcl:648 ../src/dialog_iemgui.tcl:651 #, fuzzy msgid "Background" msgstr "Фон:" -#: ../src/dialog_iemgui.tcl:650 ../src/dialog_iemgui.tcl:654 #, fuzzy msgid "Front" msgstr "Шрифт:" -#: ../src/dialog_iemgui.tcl:662 ../src/dialog_iemgui.tcl:668 msgid "Compose color" msgstr "" -#: ../src/dialog_iemgui.tcl:682 ../src/dialog_iemgui.tcl:688 #, fuzzy msgid "Test label" msgstr "Тестване на всички" -#: ../src/dialog_midi.tcl:85 -msgid "MIDI Settings" +#, fuzzy +msgid "Send a Pd message" +msgstr "Съобщение" + +msgid "(use arrow keys for history)" msgstr "" -#: ../src/dialog_midi.tcl:220 -msgid "ALSA MIDI Settings" +msgid "MIDI Settings" msgstr "" -#: ../src/dialog_midi.tcl:331 -msgid "Use multiple ALSA devices" +msgid "ALSA MIDI Settings" msgstr "" -#: ../src/dialog_midi.tcl:337 msgid "In Ports:" msgstr "" -#: ../src/dialog_midi.tcl:340 msgid "Out Ports:" msgstr "" -#: ../src/g_editor.c:1663 -msgid "Discard changes to this window??" +msgid "Pd search path for objects, help, fonts, and other files" msgstr "" -#: ../src/g_editor.c:1668 -msgid "really quit?" +msgid "Use standard paths" msgstr "" -#: ../src/g_editor.c:1699 -#, fuzzy -msgid "Close this window??" -msgstr "Затваряне на този таб/прозорец" - -#: ../src/pd-gui.tcl:185 ../src/pd-gui.tcl:195 ../src/pd-gui.tcl:203 -#: ../src/pd-gui.tcl:206 ../src/pd-gui.tcl:215 ../src/pd-gui.tcl:226 -msgid "Associated Files" +msgid "Verbose" msgstr "" -#: ../src/pd-gui.tcl:186 ../src/pd-gui.tcl:196 ../src/pd-gui.tcl:204 -#: ../src/pd-gui.tcl:207 ../src/pd-gui.tcl:216 ../src/pd-gui.tcl:227 -#, fuzzy -msgid "Pd Files" -msgstr "Файл" - -#: ../src/pd-gui.tcl:187 ../src/pd-gui.tcl:205 ../src/pd-gui.tcl:208 -#: ../src/pd-gui.tcl:228 -msgid "Max Patch Files" +msgid "Pd Documents Directory" msgstr "" -#: ../src/pd-gui.tcl:188 ../src/pd-gui.tcl:206 ../src/pd-gui.tcl:209 -#: ../src/pd-gui.tcl:229 -msgid "Max Text Files" +msgid "Browse" msgstr "" -#: ../src/pd-gui.tcl:197 ../src/pd-gui.tcl:217 -msgid "Max Patch Files (.pat)" +msgid "Reset" msgstr "" -#: ../src/pd-gui.tcl:198 ../src/pd-gui.tcl:218 -msgid "Max Text Files (.mxt)" +msgid "Disable" msgstr "" -#: ../src/pd-gui.tcl:270 ../src/pd-gui.tcl:290 -#, tcl-format -msgid "WARNING: Font family '%s' not found, using default (%s)" +msgid "Externals Install Directory" msgstr "" -#: ../src/pd-gui.tcl:278 ../src/pd-gui.tcl:298 -#, tcl-format -msgid "WARNING: Font weight '%s' not found, using default (%s)" +#, fuzzy +msgid "Clear" +msgstr "Изчистване на списъка" + +msgid "Choose Pd documents directory:" msgstr "" -#: ../src/pd-gui.tcl:303 ../src/pd-gui.tcl:323 -#, tcl-format -msgid "ERROR: %s failed to find font size (%s) that fits into %sx%s!" +msgid "Install externals to directory:" +msgstr "" + +msgid "Add a new path" +msgstr "" + +msgid "Add new library" +msgstr "" + +msgid "Edit library" +msgstr "" + +msgid "Pd libraries to load on startup" msgstr "" -#: ../src/pd-gui.tcl:478 ../src/pd-gui.tcl:483 ../src/pd-gui.tcl:501 -msgid "ERROR: 'pd' never showed up, 'pd-gui' quitting!" +msgid "Startup flags:" msgstr "" -#: ../src/pd_menucommands.tcl:19 -msgid "Untitled" +msgid "Defeat real-time scheduling" msgstr "" -#: ../src/pd_menucommands.tcl:78 ../src/pd_menucommands.tcl:79 -#: ../src/pd_menucommands.tcl:90 #, fuzzy -msgid "Send Message..." -msgstr "Съобщение" +msgid "Help Browser" +msgstr "Разглеждане..." -#: ../src/pd_menucommands.tcl:82 ../src/pd_menucommands.tcl:83 -#: ../src/pd_menucommands.tcl:94 ../src/pd_menus.tcl:87 ../src/pd_menus.tcl:88 -#: ../src/pd_menus.tcl:133 ../src/pd_menus.tcl:134 ../src/pd_menus.tcl:147 -#: ../src/pd_menus.tcl:192 ../src/pd_menus.tcl:193 ../src/pd_menus.tcl:265 -#: ../src/pd_menus.tcl:278 ../src/pd_menus.tcl:292 ../src/pd_menus.tcl:305 -#: ../src/pd_menus.tcl:329 ../src/pd_menus.tcl:342 ../src/pd_menus.tcl:360 -#: ../src/pd_menus.tcl:387 ../src/pd_menus.tcl:414 ../src/pd_menus.tcl:426 -#: ../src/pd_menus.tcl:453 ../startup/object_db.tcl:123 -msgid "Message" -msgstr "Съобщение" +msgid "(Tcl) MISSING CLOSE-BRACE '}': " +msgstr "" + +msgid "(Tcl) INVALID COMMAND NAME: " +msgstr "" + +msgid "(Tcl) UNHANDLED ERROR: " +msgstr "" + +#, tcl-format +msgid "[deken]: installed version [%1$s] > %2$s...skipping!" +msgstr "" + +#, tcl-format +msgid "[deken]: installed version [%1$s] < %2$s...overwriting!" +msgstr "" + +#, tcl-format +msgid "[deken]: installed version [%1$s] == %2$s...skipping!" +msgstr "" + +msgid "[deken]: " +msgstr "" + +#, tcl-format +msgid "Successfully unzipped %1$s into %2$s." +msgstr "" + +msgid "[deken]: Unable to extract package automatically." +msgstr "" + +msgid "Please perform the following steps manually:" +msgstr "" + +#, tcl-format +msgid "1. Unzip %s." +msgstr "" + +#, tcl-format +msgid "2. Copy the contents into %s." +msgstr "" + +#, tcl-format +msgid "[deken] uninstalling '%s'" +msgstr "" + +#, tcl-format +msgid "Uninstalling %1$s from %2$s failed!" +msgstr "" + +#, tcl-format +msgid "[deken] deken-plugin.tcl (Pd externals search) loaded from %s." +msgstr "" + +#, tcl-format +msgid "[deken] Platform detected: %s" +msgstr "" + +#, tcl-format +msgid "[deken] Platform re-detected: %s" +msgstr "" + +msgid "Show all" +msgstr "" -#: ../src/pd_menucommands.tcl:108 ../src/pd_menucommands.tcl:111 -#: ../src/pd_menus.tcl:112 ../src/pd_menus.tcl:113 ../src/pd_menus.tcl:117 -#: ../src/pd_menus.tcl:118 ../src/pd_menus.tcl:158 ../src/pd_menus.tcl:159 -#: ../src/pd_menus.tcl:163 ../src/pd_menus.tcl:164 #, fuzzy -msgid "Font" -msgstr "Шрифт:" +msgid "Search" +msgstr "Търсене из текста..." + +msgid "To get a list of all available externals, try an empty search." +msgstr "" + +msgid "Find externals" +msgstr "" + +msgid "Only install externals uploaded by people you trust." +msgstr "" -#: ../src/pd_menucommands.tcl:123 ../src/pd_menucommands.tcl:126 -#: ../src/pd_menus.tcl:138 ../src/pd_menus.tcl:183 ../src/pd_menus.tcl:184 #, fuzzy msgid "Preferences" msgstr "Настройки" -#: ../src/pd_menus.tcl:45 -#, fuzzy -msgid "Edit" -msgstr "_Редактиране" +msgid "Installation options:" +msgstr "" -#: ../src/pd_menus.tcl:45 -msgid "File" -msgstr "Файл" +msgid "Try to remove libraries before (re)installing them?" +msgstr "" -#: ../src/pd_menus.tcl:45 ../src/pdtk_canvas.tcl:48 ../src/pdtk_canvas.tcl:110 -#: ../src/pdtk_canvas.tcl:113 -msgid "Help" -msgstr "Помощ" +msgid "Show README of newly installed libraries (if present)?" +msgstr "" -#: ../src/pd_menus.tcl:45 -#, fuzzy -msgid "Media" -msgstr "Македония" +msgid "Should newly installed libraries be added to Pd's search path?" +msgstr "" -#: ../src/pd_menus.tcl:45 -msgid "Put" +msgid "Platform settings:" msgstr "" -#: ../src/pd_menus.tcl:45 -#, fuzzy -msgid "Window" -msgstr "Прозорец" +#, tcl-format +msgid "Default platform: %s" +msgstr "" -#: ../src/pd_menus.tcl:81 ../src/pd_menus.tcl:82 ../src/pd_menus.tcl:127 -#: ../src/pd_menus.tcl:128 ../src/pd_menus.tcl:255 ../src/pd_menus.tcl:267 -#: ../src/pd_menus.tcl:285 ../src/pd_menus.tcl:298 ../src/pd_menus.tcl:322 -#: ../src/pd_menus.tcl:335 ../src/pd_menus.tcl:349 ../src/pd_menus.tcl:376 -#: ../src/pd_menus.tcl:380 ../src/pd_menus.tcl:407 ../src/pd_menus.tcl:419 -#: ../src/pd_menus.tcl:446 -msgid "New" -msgstr "Ново" +msgid "User-defined platform:" +msgstr "" -#: ../src/pd_menus.tcl:82 ../src/pd_menus.tcl:83 ../src/pd_menus.tcl:128 -#: ../src/pd_menus.tcl:129 ../src/pd_menus.tcl:256 ../src/pd_menus.tcl:268 -#: ../src/pd_menus.tcl:286 ../src/pd_menus.tcl:299 ../src/pd_menus.tcl:323 -#: ../src/pd_menus.tcl:336 ../src/pd_menus.tcl:350 ../src/pd_menus.tcl:377 -#: ../src/pd_menus.tcl:381 ../src/pd_menus.tcl:408 ../src/pd_menus.tcl:420 -#: ../src/pd_menus.tcl:447 ../src/pdtk_canvas.tcl:46 -#: ../src/pdtk_canvas.tcl:108 ../src/pdtk_canvas.tcl:111 -#: ../src/pdtk_canvas.tcl:128 ../src/pdtk_canvas.tcl:130 -#: ../src/pdtk_canvas.tcl:131 ../src/pdtk_canvas.tcl:133 -msgid "Open" -msgstr "Отваряне" +msgid "Hide foreign architectures?" +msgstr "" + +#, fuzzy, tcl-format +msgid "Deken %s Preferences" +msgstr "Настройки" + +msgid "[deken]: Start searching for externals..." +msgstr "" + +#, tcl-format +msgid "[deken]: online? %s" +msgstr "" + +msgid "Are you online?" +msgstr "" + +msgid "Unable to perform search." +msgstr "" + +msgid "[deken]: No matching externals found." +msgstr "" + +msgid "Try using the full name e.g. 'freeverb'." +msgstr "" + +msgid "No matching externals found." +msgstr "" + +msgid "Please select a (writable) installation directory!" +msgstr "" + +#, tcl-format +msgid "Install %1$s to %2$s?" +msgstr "" + +#, tcl-format +msgid "" +"Commencing downloading of:\n" +"%1$s\n" +"Into %2$s..." +msgstr "" + +msgid "aborting.\n" +msgstr "" + +#, tcl-format +msgid "Unable to add %s to search paths" +msgstr "" + +#, tcl-format +msgid "Add %s to the Pd search paths?" +msgstr "" + +#, tcl-format +msgid "Added %s to search paths" +msgstr "" + +#, tcl-format +msgid "Unable to download from %1$s [%2$s]" +msgstr "" + +#, tcl-format +msgid "Unable to remove stray file %s" +msgstr "" + +#, tcl-format +msgid "Unable to rename downloaded file to %s" +msgstr "" + +#, fuzzy, tcl-format +msgid "searching for '%s'" +msgstr "Търсене из текста..." + +#, tcl-format +msgid "Uploaded by %1$s @ %2$s" +msgstr "" + +msgid "Install package" +msgstr "" + +msgid "Open webpage" +msgstr "" + +msgid "_" +msgstr "" + +#, tcl-format +msgid "" +"Do you want Pd to create a documents directory for patches and external " +"libraries?\n" +"\n" +"Location: %s\n" +"\n" +"You can change or disable this later in the Path preferences." +msgstr "" + +#, tcl-format +msgid "" +"Pd documents directory cannot be found:\n" +"\n" +"%s\n" +"\n" +"Choose a new location?" +msgstr "" + +#, tcl-format +msgid "Couldn't create Pd documents directory: %s\n" +msgstr "" + +#, tcl-format +msgid "Couldn't create \"externals\" directory in: %s\n" +msgstr "" + +#, tcl-format +msgid "Couldn't create preferences \"%1$s\" in %2$s" +msgstr "" + +#, fuzzy +msgid "About Pd" +msgstr "_Относно" + +msgid "Save" +msgstr "Запазване" -#: ../src/pd_menus.tcl:84 ../src/pd_menus.tcl:85 ../src/pd_menus.tcl:130 -#: ../src/pd_menus.tcl:131 ../src/pd_menus.tcl:261 ../src/pd_menus.tcl:274 -#: ../src/pd_menus.tcl:289 ../src/pd_menus.tcl:302 ../src/pd_menus.tcl:326 -#: ../src/pd_menus.tcl:339 ../src/pd_menus.tcl:356 ../src/pd_menus.tcl:383 -#: ../src/pd_menus.tcl:384 ../src/pd_menus.tcl:411 ../src/pd_menus.tcl:423 -#: ../src/pd_menus.tcl:450 #, fuzzy msgid "Save As..." msgstr "Записване като..." -#: ../src/pd_menus.tcl:88 ../src/pd_menus.tcl:89 ../src/pd_menus.tcl:134 -#: ../src/pd_menus.tcl:135 ../src/pd_menus.tcl:267 ../src/pd_menus.tcl:280 -#: ../src/pd_menus.tcl:293 ../src/pd_menus.tcl:306 ../src/pd_menus.tcl:330 -#: ../src/pd_menus.tcl:343 ../src/pd_menus.tcl:362 ../src/pd_menus.tcl:388 -#: ../src/pd_menus.tcl:389 ../src/pd_menus.tcl:415 ../src/pd_menus.tcl:427 -#: ../src/pd_menus.tcl:454 #, fuzzy msgid "Print..." msgstr "_Редактиране..." -#: ../src/pd_menus.tcl:93 ../src/pd_menus.tcl:94 ../src/pd_menus.tcl:139 -#: ../src/pd_menus.tcl:140 -#, fuzzy -msgid "Undo" -msgstr "Уганда" - -#: ../src/pd_menus.tcl:95 ../src/pd_menus.tcl:96 ../src/pd_menus.tcl:141 -#: ../src/pd_menus.tcl:142 -#, fuzzy -msgid "Redo" -msgstr "Червено:" - -#: ../src/pd_menus.tcl:98 ../src/pd_menus.tcl:99 ../src/pd_menus.tcl:144 -#: ../src/pd_menus.tcl:145 -msgid "Cut" +msgid "Paste Replace" msgstr "" -#: ../src/pd_menus.tcl:104 ../src/pd_menus.tcl:105 ../src/pd_menus.tcl:150 -#: ../src/pd_menus.tcl:151 #, fuzzy msgid "Duplicate" msgstr "Дата" -#: ../src/pd_menus.tcl:106 ../src/pd_menus.tcl:107 ../src/pd_menus.tcl:152 -#: ../src/pd_menus.tcl:153 #, fuzzy -msgid "Select All" -msgstr "Изтрива всички" +msgid "Zoom In" +msgstr "Долу" -#: ../src/pd_menus.tcl:110 ../src/pd_menus.tcl:111 ../src/pd_menus.tcl:115 -#: ../src/pd_menus.tcl:116 ../src/pd_menus.tcl:156 ../src/pd_menus.tcl:157 -#: ../src/pd_menus.tcl:161 ../src/pd_menus.tcl:162 #, fuzzy -msgid "Text Editor" -msgstr "Цветове за текста" +msgid "Zoom Out" +msgstr "Долу" -#: ../src/pd_menus.tcl:120 ../src/pd_menus.tcl:121 ../src/pd_menus.tcl:166 -#: ../src/pd_menus.tcl:167 msgid "Tidy Up" msgstr "" -#: ../src/pd_menus.tcl:122 ../src/pd_menus.tcl:123 ../src/pd_menus.tcl:168 -#: ../src/pd_menus.tcl:169 -msgid "Toggle Console" +msgid "(Dis)Connect Selection" msgstr "" -#: ../src/pd_menus.tcl:124 ../src/pd_menus.tcl:125 ../src/pd_menus.tcl:170 -#: ../src/pd_menus.tcl:171 -#, fuzzy -msgid "Clear Console" -msgstr "Изчистване на списъка" +msgid "Triggerize" +msgstr "" -#: ../src/pd_menus.tcl:128 ../src/pd_menus.tcl:129 ../src/pd_menus.tcl:174 -#: ../src/pd_menus.tcl:175 #, fuzzy msgid "Edit Mode" msgstr "Режим \"Редакция\"" -#: ../src/pd_menus.tcl:145 ../src/pd_menus.tcl:190 ../src/pd_menus.tcl:191 -msgid "Object" -msgstr "" +#, fuzzy +msgid "Undo" +msgstr "Уганда" -#: ../src/pd_menus.tcl:149 ../src/pd_menus.tcl:194 ../src/pd_menus.tcl:195 #, fuzzy -msgid "Number" -msgstr "$ Номер" +msgid "Redo" +msgstr "Червено:" -#: ../src/pd_menus.tcl:151 ../src/pd_menus.tcl:196 ../src/pd_menus.tcl:197 -msgid "Symbol" +msgid "List of objects..." msgstr "" -#: ../src/pd_menus.tcl:153 ../src/pd_menus.tcl:198 ../src/pd_menus.tcl:199 -#, fuzzy -msgid "Comment" -msgstr "Команда" - -#: ../src/pd_menus.tcl:156 ../src/pd_menus.tcl:201 ../src/pd_menus.tcl:202 -#, fuzzy -msgid "Bang" -msgstr "Забрана" +msgid "New" +msgstr "Ново" -#: ../src/pd_menus.tcl:158 ../src/pd_menus.tcl:203 ../src/pd_menus.tcl:204 -#, fuzzy -msgid "Toggle" -msgstr "Того" +msgid "Open" +msgstr "Отваряне" -#: ../src/pd_menus.tcl:160 ../src/pd_menus.tcl:205 ../src/pd_menus.tcl:206 #, fuzzy -msgid "Number2" -msgstr "$ Номер" +msgid "Message..." +msgstr "Съобщение" -#: ../src/pd_menus.tcl:162 ../src/pd_menus.tcl:207 ../src/pd_menus.tcl:208 -msgid "Vslider" +msgid "Cut" msgstr "" -#: ../src/pd_menus.tcl:164 ../src/pd_menus.tcl:209 ../src/pd_menus.tcl:210 #, fuzzy -msgid "Hslider" -msgstr "Скрит" +msgid "Select All" +msgstr "Изтрива всички" -#: ../src/pd_menus.tcl:166 ../src/pd_menus.tcl:211 ../src/pd_menus.tcl:212 #, fuzzy -msgid "Vradio" -msgstr "Версия" +msgid "Clear Console" +msgstr "Изчистване на списъка" -#: ../src/pd_menus.tcl:168 ../src/pd_menus.tcl:213 ../src/pd_menus.tcl:214 -msgid "Hradio" +msgid "Object" msgstr "" -#: ../src/pd_menus.tcl:170 ../src/pd_menus.tcl:215 ../src/pd_menus.tcl:216 -msgid "VU Meter" +msgid "Message" +msgstr "Съобщение" + +#, fuzzy +msgid "Number" +msgstr "$ Номер" + +msgid "Symbol" msgstr "" -#: ../src/pd_menus.tcl:172 ../src/pd_menus.tcl:217 ../src/pd_menus.tcl:218 #, fuzzy -msgid "Canvas" -msgstr "Канада" +msgid "Comment" +msgstr "Команда" -#: ../src/pd_menus.tcl:175 ../src/pd_menus.tcl:220 ../src/pd_menus.tcl:221 msgid "Graph" msgstr "Графа" -#: ../src/pd_menus.tcl:176 ../src/pd_menus.tcl:221 ../src/pd_menus.tcl:222 -#, fuzzy -msgid "Array" -msgstr "Андора" - -#: ../src/pd_menus.tcl:181 ../src/pd_menus.tcl:226 ../src/pd_menus.tcl:227 #, fuzzy msgid "Find..." msgstr "Изпращане на файлове..." -#: ../src/pd_menus.tcl:183 ../src/pd_menus.tcl:228 ../src/pd_menus.tcl:229 msgid "Find Again" msgstr "" -#: ../src/pd_menus.tcl:185 ../src/pd_menus.tcl:230 ../src/pd_menus.tcl:231 msgid "Find Last Error" msgstr "" -#: ../src/pd_menus.tcl:191 ../src/pd_menus.tcl:236 ../src/pd_menus.tcl:237 msgid "DSP On" msgstr "" -#: ../src/pd_menus.tcl:193 ../src/pd_menus.tcl:238 ../src/pd_menus.tcl:239 #, fuzzy msgid "DSP Off" msgstr "Изкл." -#: ../src/pd_menus.tcl:196 ../src/pd_menus.tcl:242 ../src/pd_menus.tcl:269 msgid "Test Audio and MIDI..." msgstr "" -#: ../src/pd_menus.tcl:198 ../src/pd_menus.tcl:244 ../src/pd_menus.tcl:271 #, fuzzy msgid "Load Meter" msgstr "Измервател на забавянето:" -#: ../src/pd_menus.tcl:205 ../src/pd_menus.tcl:251 ../src/pd_menus.tcl:278 +msgid "Audio Settings..." +msgstr "" + +msgid "MIDI Settings..." +msgstr "" + msgid "Minimize" msgstr "" -#: ../src/pd_menus.tcl:207 ../src/pd_menus.tcl:253 ../src/pd_menus.tcl:280 #, fuzzy msgid "Zoom" msgstr "Долу" -#: ../src/pd_menus.tcl:210 ../src/pd_menus.tcl:256 ../src/pd_menus.tcl:283 +msgid "Bring All to Front" +msgstr "" + #, fuzzy -msgid "Parent Window" +msgid "Next Window" msgstr "Прозореца за изпращане на файлове" -#: ../src/pd_menus.tcl:216 ../src/pd_menus.tcl:262 ../src/pd_menus.tcl:289 -msgid "Bring All to Front" -msgstr "" +#, fuzzy +msgid "Previous Window" +msgstr "Прозореца за изпращане на файлове" -#: ../src/pd_menus.tcl:224 ../src/pd_menus.tcl:241 ../src/pd_menus.tcl:253 -#: ../src/pd_menus.tcl:270 ../src/pd_menus.tcl:297 ../src/pd_menus.tcl:335 -#: ../src/pd_menus.tcl:362 #, fuzzy -msgid "About Pd" -msgstr "_Относно" +msgid "Parent Window" +msgstr "Прозореца за изпращане на файлове" -#: ../src/pd_menus.tcl:227 ../src/pd_menus.tcl:273 ../src/pd_menus.tcl:300 msgid "HTML Manual..." msgstr "" -#: ../src/pd_menus.tcl:229 ../src/pd_menus.tcl:275 ../src/pd_menus.tcl:302 #, fuzzy msgid "Browser..." msgstr "Разглеждане..." -#: ../src/pd_menus.tcl:248 ../src/pd_menus.tcl:260 ../src/pd_menus.tcl:342 -#: ../src/pd_menus.tcl:369 -msgid "Preferences..." +msgid "puredata.info" +msgstr "" + +msgid "Report a bug" +msgstr "" + +#, fuzzy +msgid "Clear Menu" +msgstr "Изчистване на списъка" + +msgid "" +"Delete all preferences?\n" +"(takes effect when Pd is restarted)" +msgstr "" + +msgid "Path..." +msgstr "" + +msgid "Startup..." +msgstr "" + +msgid "Audio..." +msgstr "" + +msgid "MIDI..." +msgstr "" + +#, fuzzy +msgid "Zoom New Windows" +msgstr "Прозореца за изпращане на файлове" + +#, fuzzy +msgid "Save All Preferences" msgstr "Настройки" -#: ../src/pd_menus.tcl:257 ../src/pd_menus.tcl:270 ../src/pd_menus.tcl:352 -#: ../src/pd_menus.tcl:379 -msgid "Open Recent" +#, fuzzy +msgid "Save to..." +msgstr "Записване като..." + +msgid "Load from..." msgstr "" -#: ../src/pd_menus.tcl:263 -msgid "Audio Settings..." +msgid "Forget All..." msgstr "" -#: ../src/pd_menus.tcl:265 -msgid "MIDI Settings..." +msgid "Open Recent" msgstr "" -#: ../src/pd_menus.tcl:296 ../src/pd_menus.tcl:309 ../src/pd_menus.tcl:333 -#: ../src/pd_menus.tcl:346 ../src/pd_menus.tcl:393 ../src/pd_menus.tcl:420 -#: ../src/pd_menus.tcl:432 ../src/pd_menus.tcl:459 msgid "Quit" msgstr "Изход" -#: ../src/pd_menus.tcl:304 ../src/pd_menus.tcl:331 -#, fuzzy -msgid "Clear Menu" -msgstr "Изчистване на списъка" - -#: ../src/pdtk_canvas.tcl:44 ../src/pdtk_canvas.tcl:106 -#: ../src/pdtk_canvas.tcl:109 ../src/pdtk_canvas.tcl:123 -#: ../src/pdtk_canvas.tcl:125 ../src/pdtk_canvas.tcl:126 -#: ../src/pdtk_canvas.tcl:128 msgid "Properties" msgstr "" -#: ../src/pdwindow.tcl:43 +msgid "Audio on" +msgstr "" + +msgid "Audio off" +msgstr "" + +msgid "(Tcl) MISSING CLOSE-BRACKET ']': " +msgstr "" + +msgid "Tcl:" +msgstr "" + +msgid "Pd" +msgstr "" + #, fuzzy msgid "DSP" msgstr "Изкл." -#: ../startup/object_db.tcl:113 -msgid "Signal" +msgid "Audio I/O error" msgstr "" -#: ../startup/object_db.tcl:114 -msgid "Generators" +msgid "Log:" msgstr "" -#: ../startup/object_db.tcl:115 -#, fuzzy -msgid "Filters" -msgstr "Файл" +msgid "fatal" +msgstr "" -#: ../startup/object_db.tcl:116 ../startup/object_db.tcl:124 -msgid "Math" +msgid "error" msgstr "" -#: ../startup/object_db.tcl:117 ../startup/object_db.tcl:125 -msgid "I/O" +msgid "normal" msgstr "" -#: ../startup/object_db.tcl:118 ../startup/object_db.tcl:126 -msgid "Sampling" +msgid "debug" msgstr "" -#: ../startup/object_db.tcl:119 ../startup/object_db.tcl:128 -msgid "Routing" +msgid "all" msgstr "" -#: ../startup/object_db.tcl:120 ../startup/object_db.tcl:129 -msgid "Others" +msgid "New..." msgstr "" -#: ../startup/object_db.tcl:127 -msgid "GUI" +#, fuzzy +msgid "Edit..." +msgstr "_Редактиране" + +#, fuzzy +msgid "Delete" +msgstr "Изтриване" + +#, tcl-format +msgid "Ignoring '%s': doesn't exist" msgstr "" + +#, tcl-format +msgid "Ignoring '%s': doesn't look like a Pd-file" +msgstr "" + +#, fuzzy +#~ msgid "for:" +#~ msgstr "Порт:" + +#~ msgid "Preferences..." +#~ msgstr "Настройки" + +#, fuzzy +#~ msgid "Close this window??" +#~ msgstr "Затваряне на този таб/прозорец" + +#, fuzzy +#~ msgid "Pd Files" +#~ msgstr "Файл" + +#, fuzzy +#~ msgid "Filters" +#~ msgstr "Файл" + +#, fuzzy +#~ msgid "Text Editor" +#~ msgstr "Цветове за текста" diff --git a/po/de.po b/po/de.po index 0051c064aa..9c0e931b52 100644 --- a/po/de.po +++ b/po/de.po @@ -4,1227 +4,1190 @@ # msgid "" msgstr "" -"Project-Id-Version: Pure Data 0.43\n" +"Project-Id-Version: Pure Data 0.48\n" "Report-Msgid-Bugs-To: pd-dev@iem.at\n" -"POT-Creation-Date: 2009-08-27 10:01-0400\n" -"PO-Revision-Date: 2009-09-22 13:00-0400\n" -"Last-Translator: Max Neupert \n" +"POT-Creation-Date: 2017-07-06 18:10+0200\n" +"PO-Revision-Date: 2019-01-05 21:25+0100\n" +"Last-Translator: Winfried Ritsch\n" "Language-Team: Deutsch \n" +"Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 2.2\n" -msgid "Undo duplicate" -msgstr "Duplizieren widerrufen" +# iemgui +msgid "-------dimensions(digits)(pix):-------" +msgstr "------Rahmengröße(Zahlen)(pix):-------" -msgid "Undo paste" -msgstr "Einfügen widerrufen" +# iemgui +msgid "--------dimensions(pix)(pix):--------" +msgstr "--------Rahmengröße(pix)(pix):--------" -msgid "Undo motion" -msgstr "Bewegen widerrufen" +# iemgui +msgid "----------dimensions(pix):-----------" +msgstr "----------Rahmengröße(pix):-----------" + +# iemgui +msgid "--------flash-time(ms)(ms):---------" +msgstr "----------Blinkzeit(ms)(ms:-----------" + +# iemgui +msgid "-----------output-range:-----------" +msgstr "----------Ausgangsbereich:-----------" + +# iemgui +msgid "------selectable_dimensions(pix):------" +msgstr "----------selektierbare Größe(pix):-----------" + +# iemgui +msgid "------visible_rectangle(pix)(pix):------" +msgstr "-------sichtbare Größe(pix)(pix):--------" + +msgid "bottom:" +msgstr "Unten:" + +# iemgui +msgid "height:" +msgstr "Höhe:" + +msgid "hold:" +msgstr "Haltezeit:" + +msgid "intrrpt:" +msgstr "Interruptzeit:" + +# iemgui +msgid "left:" +msgstr "links:" + +msgid "lin" +msgstr "linear" + +msgid "log" +msgstr "logarithmisch" + +msgid "log-height:" +msgstr "log Höhe:" + +msgid "max:" +msgstr "" + +msgid "min:" +msgstr "" + +# iemgui +msgid "right:" +msgstr "rechts:" + +msgid "size:" +msgstr "Größe:" + +msgid "top:" +msgstr "Oben:" + +msgid "value:" +msgstr "Wert:" + +msgid "width:" +msgstr "Breite:" + +#, tcl-format +msgid "Do you want to save the changes you made in '%s'?" +msgstr "Änderungen in '%s' speichern?" + +#, tcl-format +msgid "Discard changes to '%s'?" +msgstr "Änderungen an '%s' verwerfen?" + +msgid "Undo clear" +msgstr "Rückgängig: Löschen" + +msgid "Undo connect" +msgstr "Rückgängig: Verbinden" msgid "Undo cut" -msgstr "Ausschneiden widerrufen" +msgstr "Rückgängig: Ausschneiden" msgid "Undo disconnect" -msgstr "Trennen widerrufen" +msgstr "Rückgängig: Verbindung Trennen" -msgid "Undo connect" -msgstr "Verbinden widerrufen" +msgid "Undo duplicate" +msgstr "Rückgängig: Duplizieren" -msgid "Undo clear" -msgstr "Löschen widerrufen" +msgid "Undo motion" +msgstr "Rückgängig: Verschieben" + +msgid "Undo paste" +msgstr "Rückgängig: Einfügen" msgid "Undo typing" -msgstr "Eingabe widerrufen" +msgstr "Rückgängig: Eingabe" -msgid "Discard changes to '%s'?" -msgstr "Änderungen an '%s' verwerfen?" +msgid "Redo clear" +msgstr "Wiederholen: Löschen" -msgid "Do you want to save the changes you made in '%s'?" -msgstr "Änderungen in '%s' speichern?" +msgid "Redo connect" +msgstr "Wiederholen: Verbinden" + +msgid "Redo cut" +msgstr "Wiederholen: Ausschneiden" + +msgid "Redo disconnect" +msgstr "Wiederholen: Verbindung Trennen" + +msgid "Redo duplicate" +msgstr "Wiederholen: Duplizieren" + +msgid "Redo motion" +msgstr "Wiederholen: Verschieben" + +msgid "Redo paste" +msgstr "Wiederholen: Einfügen" + +msgid "Redo typing" +msgstr "Wiederholen: Eingabe" + +msgid "no Pd settings to clear" +msgstr "Keine Pd Einstellungen zum Zurücksetzen" + +msgid "removed .pdsettings file" +msgstr "Datei \".pdsettings\" entfernt" + +msgid "couldn't delete .pdsettings file" +msgstr "die Datei \".pdsettings\" konnte nicht gelöscht werden" + +msgid "failed to erase Pd settings" +msgstr "Löschen der Pd Einstellungen schlug fehl" + +msgid "erased Pd settings" +msgstr "gelöschte Einstellungen" + +msgid "no Pd settings to erase" +msgstr "keine Pd Einstellungen zum Löschen" + +msgid "skipping loading preferences... Pd seems to have crashed on startup." +msgstr "" +"überspringe das Laden der Einstellungen...es scheint, als wäre Pd beim " +"letzten Start abgestürzt." + +msgid "(re-save preferences to reinstate them)" +msgstr "(speichern Sie die Einstellungen um sie wiederherzustellen)" + +msgid "File" +msgstr "Datei" + +msgid "Edit" +msgstr "Bearbeiten" + +msgid "Put" +msgstr "Einfügen" + +msgid "Find" +msgstr "Finde" + +msgid "Media" +msgstr "Medien" + +msgid "Window" +msgstr "Fenster" + +msgid "Help" +msgstr "Hilfe" + +msgid "Show &Hidden Files and Directories" +msgstr "Versteckte Dateien und Verzeichnisse anzeigen" -#: ../src/dialog_array.tcl:115 -#: ../src/dialog_array.tcl:117 -#: ../src/pd_menus.tcl:100 -#: ../src/pd_menus.tcl:101 -#: ../src/pd_menus.tcl:146 -#: ../src/pd_menus.tcl:147 msgid "Copy" msgstr "Kopieren" -#: ../src/dialog_array.tcl:118 -#: ../src/dialog_array.tcl:120 -#: ../src/pd_menus.tcl:102 -#: ../src/pd_menus.tcl:103 -#: ../src/pd_menus.tcl:148 -#: ../src/pd_menus.tcl:149 msgid "Paste" msgstr "Einfügen" -#: ../src/dialog_array.tcl:264 -#: ../src/dialog_array.tcl:266 msgid "Array Properties" -msgstr "Feld-Eingenschaften" +msgstr "Array Eigenschaften" + +msgid "Array" +msgstr "Array" -#: ../src/dialog_array.tcl:270 -#: ../src/dialog_array.tcl:272 msgid "Name:" msgstr "Name:" -#: ../src/dialog_array.tcl:276 -#: ../src/dialog_array.tcl:278 -#: ../src/dialog_canvas.tcl:178 -#: ../src/dialog_canvas.tcl:193 -#: ../src/dialog_iemgui.tcl:619 -#: ../src/dialog_iemgui.tcl:621 msgid "Size:" msgstr "Größe:" -#: ../src/dialog_array.tcl:280 -#: ../src/dialog_array.tcl:282 msgid "Save contents" msgstr "Inhalt speichern" -#: ../src/dialog_array.tcl:284 -#: ../src/dialog_array.tcl:286 msgid "Draw as:" msgstr "Zeichne als:" -#: ../src/dialog_array.tcl:287 -#: ../src/dialog_array.tcl:289 +msgid "Polygon" +msgstr "Polygon" + msgid "Points" msgstr "Punkte" -#: ../src/dialog_array.tcl:289 -#: ../src/dialog_array.tcl:291 -msgid "Polygon" -msgstr "Vieleck" - -#: ../src/dialog_array.tcl:291 -#: ../src/dialog_array.tcl:293 msgid "Bezier curve" -msgstr "Bezier Kurve" +msgstr "Bézier-Kurve" -#: ../src/dialog_array.tcl:297 -#: ../src/dialog_array.tcl:299 msgid "Put array into:" -msgstr "Feld einfügen in:" +msgstr "Array einfügen in:" -#: ../src/dialog_array.tcl:300 -#: ../src/dialog_array.tcl:302 msgid "New graph" -msgstr "Neue Kurve" +msgstr "neuer Graph" -#: ../src/dialog_array.tcl:302 -#: ../src/dialog_array.tcl:304 msgid "Last graph" -msgstr "Letzte Kurve" +msgstr "letztes Feld" -#: ../src/dialog_array.tcl:306 -#: ../src/dialog_array.tcl:308 -msgid "Delete array" -msgstr "Feld löschen" +msgid "Options" +msgstr "Optionen" -#: ../src/dialog_array.tcl:312 -#: ../src/dialog_array.tcl:314 msgid "Open List View..." msgstr "Öffne Listenanzeige..." -#: ../src/dialog_array.tcl:319 -#: ../src/dialog_array.tcl:321 -#: ../src/dialog_audio.tcl:136 -#: ../src/dialog_canvas.tcl:205 -#: ../src/dialog_font.tcl:51 -#: ../src/dialog_gatom.tcl:153 -#: ../src/dialog_gatom.tcl:161 -#: ../src/dialog_iemgui.tcl:742 -#: ../src/dialog_iemgui.tcl:748 -#: ../src/dialog_midi.tcl:91 -#: ../src/dialog_midi.tcl:226 +msgid "Delete array" +msgstr "Array löschen" + msgid "Cancel" msgstr "Abbrechen" -#: ../src/dialog_array.tcl:321 -#: ../src/dialog_array.tcl:323 -#: ../src/dialog_audio.tcl:138 -#: ../src/dialog_canvas.tcl:207 -#: ../src/dialog_gatom.tcl:156 -#: ../src/dialog_gatom.tcl:164 -#: ../src/dialog_iemgui.tcl:745 -#: ../src/dialog_iemgui.tcl:751 -#: ../src/dialog_midi.tcl:93 -#: ../src/dialog_midi.tcl:228 msgid "Apply" msgstr "Anwenden" -#: ../src/dialog_array.tcl:323 -#: ../src/dialog_array.tcl:325 -#: ../src/dialog_audio.tcl:140 -#: ../src/dialog_canvas.tcl:209 -#: ../src/dialog_font.tcl:53 -#: ../src/dialog_font.tcl:92 -#: ../src/dialog_font.tcl:100 -#: ../src/dialog_font.tcl:101 -#: ../src/dialog_gatom.tcl:159 -#: ../src/dialog_gatom.tcl:167 -#: ../src/dialog_iemgui.tcl:748 -#: ../src/dialog_iemgui.tcl:754 -#: ../src/dialog_midi.tcl:95 -#: ../src/dialog_midi.tcl:230 msgid "OK" msgstr "OK" -#: ../src/dialog_audio.tcl:130 msgid "Audio Settings" msgstr "Audioeinstellungen" -#: ../src/dialog_audio.tcl:142 -msgid "Save All Settings" -msgstr "Einstellungen speichern" +msgid "Settings" +msgstr "Einstellungen" -#: ../src/dialog_audio.tcl:151 msgid "Sample rate:" msgstr "Samplingrate:" -#: ../src/dialog_audio.tcl:153 msgid "Delay (msec):" msgstr "Verzögerung (msec):" -#: ../src/dialog_audio.tcl:158 +msgid "Block size:" +msgstr "Blocklänge:" + msgid "Use callbacks" -msgstr "Rückfragen verwenden" - -#: ../src/dialog_audio.tcl:166 -#: ../src/dialog_midi.tcl:105 -#: ../src/dialog_midi.tcl:241 -msgid "Input device 1:" -msgstr "Eingabegerät 1:" - -#: ../src/dialog_audio.tcl:169 -#: ../src/dialog_audio.tcl:183 -#: ../src/dialog_audio.tcl:198 -#: ../src/dialog_audio.tcl:213 -#: ../src/dialog_audio.tcl:232 -#: ../src/dialog_audio.tcl:250 -#: ../src/dialog_audio.tcl:265 -#: ../src/dialog_audio.tcl:280 +msgstr "Callbacks" + +msgid "Input Devices" +msgstr "Eingabegeräte" + msgid "Channels:" msgstr "Kanäle:" -#: ../src/dialog_audio.tcl:179 -#: ../src/dialog_midi.tcl:115 -#: ../src/dialog_midi.tcl:251 -msgid "Input device 2:" -msgstr "Eingabegerät 2:" - -#: ../src/dialog_audio.tcl:194 -#: ../src/dialog_midi.tcl:127 -#: ../src/dialog_midi.tcl:263 -msgid "Input device 3:" -msgstr "Eingabegerät 3:" - -#: ../src/dialog_audio.tcl:209 -#: ../src/dialog_midi.tcl:139 -#: ../src/dialog_midi.tcl:275 -msgid "Input device 4:" -msgstr "Eingabegerät 4:" - -#: ../src/dialog_audio.tcl:223 -#: ../src/dialog_midi.tcl:150 -#: ../src/dialog_midi.tcl:286 -msgid "Output device 1:" -msgstr "Ausgabegerät 1:" - -#: ../src/dialog_audio.tcl:226 -msgid "(same as input device) .............. " -msgstr "(wie Eingabegerät) .............. " - -#: ../src/dialog_audio.tcl:246 -#: ../src/dialog_midi.tcl:160 -#: ../src/dialog_midi.tcl:296 -msgid "Output device 2:" -msgstr "Ausgabegerät 2:" - -#: ../src/dialog_audio.tcl:261 -#: ../src/dialog_midi.tcl:171 -#: ../src/dialog_midi.tcl:307 -msgid "Output device 3:" -msgstr "Ausgabegerät 3:" - -#: ../src/dialog_audio.tcl:276 -#: ../src/dialog_midi.tcl:182 -#: ../src/dialog_midi.tcl:318 -msgid "Output device 4:" -msgstr "Ausgabegerät 4:" - -#: ../src/dialog_audio.tcl:291 -#: ../src/dialog_midi.tcl:195 -msgid "Use multiple devices" +msgid "Output Devices" +msgstr "Ausgabegeräte" + +msgid "(same as input device)..." +msgstr "(wie Eingabegerät) .............." + +msgid "Use Multiple Devices" msgstr "Mehrere Geräte verwenden" -#: ../src/dialog_canvas.tcl:142 +msgid "Save All Settings" +msgstr "Alle Einstellungen speichern" + +msgid "WARNING: unknown graphme flags received in pdtk_canvas_dialog" +msgstr "" +"WARNUNG: pdtk_canvas_dialog hat unbekannte graphme-Einstellungen detektiert" + msgid "Canvas Properties" -msgstr "Arbeitsflächen-Eigenschaften" +msgstr "Canvas Eigenschaften" -#: ../src/dialog_canvas.tcl:146 msgid "Scale" msgstr "Skalierung" -#: ../src/dialog_canvas.tcl:150 msgid "X units per pixel:" msgstr "X Einheiten pro Pixel:" -#: ../src/dialog_canvas.tcl:155 msgid "Y units per pixel:" msgstr "Y Einheiten pro Pixel:" -#: ../src/dialog_canvas.tcl:159 msgid "Appearance on parent patch" msgstr "Erscheinen auf dem übergeordneten Patch" -#: ../src/dialog_canvas.tcl:161 msgid "Graph-On-Parent" -msgstr "Auf dem Übergeordneten Patch anzeigen" +msgstr "Graph on Parent" -#: ../src/dialog_canvas.tcl:165 msgid "Hide object name and arguments" msgstr "Objektname und Argumente verbergen" -#: ../src/dialog_canvas.tcl:170 msgid "Range and size" msgstr "Spanne und Größe" -#: ../src/dialog_canvas.tcl:174 -msgid "X range, from" -msgstr "X Spanne, von" +msgid "X range: from" +msgstr "X-Spanne, von" -#: ../src/dialog_canvas.tcl:176 -#: ../src/dialog_canvas.tcl:191 msgid "to" msgstr "bis" -#: ../src/dialog_canvas.tcl:180 -#: ../src/dialog_canvas.tcl:195 msgid "Margin:" msgstr "Abstand:" -#: ../src/dialog_canvas.tcl:189 -msgid "Y range, from" -msgstr "Y Spanne, von" - -#: ../src/dialog_find.tcl:63 -#: ../src/dialog_find.tcl:66 -#: ../src/dialog_find.tcl:79 -#: ../src/dialog_find.tcl:80 -#: ../src/dialog_find.tcl:83 -#: ../src/dialog_find.tcl:85 -#: ../src/dialog_find.tcl:87 -#: ../src/dialog_find.tcl:101 -#: ../src/dialog_find.tcl:105 -#: ../src/dialog_find.tcl:107 -#: ../src/pd_menus.tcl:45 -msgid "Find" -msgstr "Finde" +msgid "Y range: from" +msgstr "Y-Spanne, von" -#: ../src/dialog_find.tcl:70 -#: ../src/dialog_find.tcl:73 -#: ../src/dialog_find.tcl:87 -#: ../src/dialog_find.tcl:91 -#: ../src/dialog_find.tcl:93 -msgid "Search in" -msgstr "Suche in" - -#: ../src/dialog_find.tcl:72 -#: ../src/dialog_find.tcl:75 -#: ../src/dialog_find.tcl:89 -#: ../src/dialog_find.tcl:93 -#: ../src/dialog_find.tcl:95 -msgid "for:" -msgstr "für:" - -#: ../src/dialog_find.tcl:83 -#: ../src/dialog_find.tcl:90 -#: ../src/dialog_find.tcl:104 -#: ../src/dialog_find.tcl:108 -#: ../src/dialog_find.tcl:110 -#: ../src/pd_menus.tcl:86 -#: ../src/pd_menus.tcl:87 -#: ../src/pd_menus.tcl:132 -#: ../src/pd_menus.tcl:133 -#: ../src/pd_menus.tcl:259 -#: ../src/pd_menus.tcl:272 -#: ../src/pd_menus.tcl:295 -#: ../src/pd_menus.tcl:308 -#: ../src/pd_menus.tcl:332 -#: ../src/pd_menus.tcl:345 -#: ../src/pd_menus.tcl:354 -#: ../src/pd_menus.tcl:381 -#: ../src/pd_menus.tcl:392 -#: ../src/pd_menus.tcl:419 -#: ../src/pd_menus.tcl:431 -#: ../src/pd_menus.tcl:458 -msgid "Close" -msgstr "Schließen" +msgid "Data Properties" +msgstr "Canvas Eigenschaften" -#: ../src/dialog_find.tcl:83 -#: ../src/dialog_find.tcl:97 -#: ../src/dialog_find.tcl:101 -#: ../src/dialog_find.tcl:103 -msgid "Match whole word only" -msgstr "Ganzes Wort abgleichen" +#, tcl-format +msgid "Found '%1$s' in %2$s" +msgstr "'%1$s' in %2$s gefunden" + +#, tcl-format +msgid "Couldn't find '%1$s' in %2$s" +msgstr "Konnte '%1$s' nicht in %2$s finden" + +#, tcl-format +msgid "Search in %s for:" +msgstr "Suche in '%s' nach:" + +#, tcl-format +msgid "Showed last '%1$s' in %2$s" +msgstr "Zeige letztes Vorkommen von '%1$s' in %2$s" + +#, tcl-format +msgid "Showing '%1$d' out of %2$d items in %3$s" +msgstr "Zeige %1$d von %2$d Ergebnissen für %3$s" -#: ../src/dialog_find.tcl:92 -#: ../src/dialog_font.tcl:49 -#: ../src/dialog_font.tcl:50 -#: ../src/pd-gui.tcl:280 -#: ../src/pd-gui.tcl:283 -#: ../src/pd-gui.tcl:286 -#: ../src/pd-gui.tcl:288 -#: ../src/pd-gui.tcl:291 -#: ../src/pd_menus.tcl:212 -#: ../src/pd_menus.tcl:258 -#: ../src/pd_menus.tcl:285 -#: ../src/pdwindow.tcl:33 msgid "Pd window" msgstr "Pd Fenster" -#: ../src/dialog_font.tcl:45 -msgid "Font Properties" -msgstr "Zeichensatz-Einstellungen" +msgid "Match whole word only" +msgstr "Ganzes Wort abgleichen" + +msgid "Close" +msgstr "Schließen" -#: ../src/dialog_font.tcl:46 -#: ../src/dialog_font.tcl:54 -#: ../src/dialog_font.tcl:55 #, tcl-format msgid "%s Font" -msgstr "%s Zeichensatz" +msgstr "%s Schrifteinstellungen" + +msgid "Font" +msgstr "Schrift" -#: ../src/dialog_font.tcl:61 -#: ../src/dialog_font.tcl:96 -#: ../src/dialog_font.tcl:104 -#: ../src/dialog_font.tcl:105 msgid "Font Size" -msgstr "Zeichensatzgröße" +msgstr "Schriftgröße" -#: ../src/dialog_font.tcl:89 -#: ../src/dialog_font.tcl:108 -#: ../src/dialog_font.tcl:116 -#: ../src/dialog_font.tcl:117 msgid "Stretch" msgstr "Dehnen" -#: ../src/dialog_font.tcl:96 -#: ../src/dialog_font.tcl:115 -#: ../src/dialog_font.tcl:123 -#: ../src/dialog_font.tcl:124 msgid "X and Y" msgstr "X und Y" -#: ../src/dialog_font.tcl:98 -#: ../src/dialog_font.tcl:117 -#: ../src/dialog_font.tcl:125 -#: ../src/dialog_font.tcl:126 msgid "X only" msgstr "nur X" -#: ../src/dialog_font.tcl:100 -#: ../src/dialog_font.tcl:119 -#: ../src/dialog_font.tcl:127 -#: ../src/dialog_font.tcl:128 msgid "Y only" msgstr "nur Y" -#: ../src/dialog_gatom.tcl:93 msgid "Atom Box Properties" msgstr "Atom Box Eigenschaften" -#: ../src/dialog_gatom.tcl:99 msgid "Width:" msgstr "Breite:" -#: ../src/dialog_gatom.tcl:103 msgid "Limits" msgstr "Bereich" -#: ../src/dialog_gatom.tcl:107 msgid "Lower:" msgstr "Unterer:" -#: ../src/dialog_gatom.tcl:112 -#: ../src/dialog_gatom.tcl:113 msgid "Upper:" msgstr "Oberer:" -#: ../src/dialog_gatom.tcl:116 -#: ../src/dialog_gatom.tcl:121 -#: ../src/dialog_iemgui.tcl:600 -#: ../src/dialog_iemgui.tcl:652 -#: ../src/dialog_iemgui.tcl:657 msgid "Label" -msgstr "Etikett" +msgstr "Beschriftung" -#: ../src/dialog_gatom.tcl:124 -#: ../src/dialog_gatom.tcl:129 -msgid "Left " -msgstr "Links " +msgid "Left" +msgstr "Links" -#: ../src/dialog_gatom.tcl:126 -#: ../src/dialog_gatom.tcl:131 msgid "Right" msgstr "Rechts" -#: ../src/dialog_gatom.tcl:128 -#: ../src/dialog_gatom.tcl:133 msgid "Top" msgstr "Oben" -#: ../src/dialog_gatom.tcl:130 -#: ../src/dialog_gatom.tcl:135 msgid "Bottom" msgstr "Unten" -#: ../src/dialog_gatom.tcl:137 -#: ../src/dialog_gatom.tcl:145 -#: ../src/dialog_iemgui.tcl:574 msgid "Messages" -msgstr "Nachrichten" +msgstr "Messages" -#: ../src/dialog_gatom.tcl:141 -#: ../src/dialog_gatom.tcl:149 -#: ../src/dialog_iemgui.tcl:578 msgid "Send symbol:" msgstr "Sendesymbol:" -#: ../src/dialog_gatom.tcl:147 -#: ../src/dialog_gatom.tcl:155 -#: ../src/dialog_iemgui.tcl:585 msgid "Receive symbol:" -msgstr "Empfangssymbol" +msgstr "Empfangssymbol:" -#: ../src/dialog_iemgui.tcl:197 msgid "Background color" msgstr "Hintergrundfarbe" -#: ../src/dialog_iemgui.tcl:204 msgid "Foreground color" msgstr "Vordergrundfarbe" -#: ../src/dialog_iemgui.tcl:211 msgid "Label color" -msgstr "Etikettenfarbe" +msgstr "Beschriftungsfarbe" -#: ../src/dialog_iemgui.tcl:272 msgid "Init" msgstr "Init" -#: ../src/dialog_iemgui.tcl:275 -#: ../src/dialog_iemgui.tcl:546 msgid "No init" msgstr "Kein Init" -#: ../src/dialog_iemgui.tcl:287 -#: ../src/dialog_iemgui.tcl:558 msgid "Jump on click" msgstr "Sprung bei Klick" -#: ../src/dialog_iemgui.tcl:290 -#: ../src/dialog_iemgui.tcl:561 msgid "Steady on click" msgstr "Gleichbleibend bei Klick" -#: ../src/dialog_iemgui.tcl:498 +msgid "Bang" +msgstr "Taster (Bang)" + +msgid "Flash Time (msec)" +msgstr "Blinkdauer (msec):" + +msgid "Intrrpt:" +msgstr "Interruptzeit:" + +msgid "Hold:" +msgstr "Haltezeit:" + +msgid "Toggle" +msgstr "Schalter" + +msgid "Non Zero Value" +msgstr "Nicht-Null Wert" + +msgid "Value:" +msgstr "Wert:" + +msgid "Number2" +msgstr "Number2" + +msgid "Width (digits):" +msgstr "Breite (Stellen)" + +# iemgui +msgid "Height:" +msgstr "Höhe:" + +msgid "Output Range" +msgstr "Ausgabebereich" + +msgid "Log height:" +msgstr "" + +msgid "Vslider" +msgstr "Vslider" + +msgid "Hslider" +msgstr "Hslider" + +msgid "Vradio" +msgstr "Vradio" + +msgid "Num cells:" +msgstr "Anzahl der Zellen:" + +msgid "Hradio" +msgstr "Hradio" + +msgid "VU Meter" +msgstr "VU Meter" + +msgid "Canvas" +msgstr "Canvas" + +msgid "Visible Rectangle (pix)" +msgstr "Sichtbares Rechteck (pix)" + #, tcl-format msgid "%s Properties" msgstr "%s Eigenschaften" -#: ../src/dialog_iemgui.tcl:550 -#: ../src/pd_menus.tcl:83 -#: ../src/pd_menus.tcl:84 -#: ../src/pd_menus.tcl:129 -#: ../src/pd_menus.tcl:130 -#: ../src/pd_menus.tcl:260 -#: ../src/pd_menus.tcl:273 -#: ../src/pd_menus.tcl:288 -#: ../src/pd_menus.tcl:301 -#: ../src/pd_menus.tcl:325 -#: ../src/pd_menus.tcl:338 -#: ../src/pd_menus.tcl:355 -#: ../src/pd_menus.tcl:382 -#: ../src/pd_menus.tcl:383 -#: ../src/pd_menus.tcl:410 -#: ../src/pd_menus.tcl:422 -#: ../src/pd_menus.tcl:449 -msgid "Save" -msgstr "Speichern" +msgid "Parameters" +msgstr "Parameter" -#: ../src/dialog_iemgui.tcl:608 -msgid "X offset" -msgstr "X Verschiebung" +msgid "X offset:" +msgstr "X-Versatz:" -#: ../src/dialog_iemgui.tcl:611 -#: ../src/dialog_iemgui.tcl:612 -msgid "Y offset" -msgstr "Y Verschiebung" +msgid "Y offset:" +msgstr "Y-Versatz:" -#: ../src/dialog_iemgui.tcl:642 -#: ../src/dialog_iemgui.tcl:645 msgid "Colors" msgstr "Farben" -#: ../src/dialog_iemgui.tcl:648 -#: ../src/dialog_iemgui.tcl:651 msgid "Background" msgstr "Hintergrund" -#: ../src/dialog_iemgui.tcl:650 -#: ../src/dialog_iemgui.tcl:654 msgid "Front" msgstr "Vordergrund" -#: ../src/dialog_iemgui.tcl:662 -#: ../src/dialog_iemgui.tcl:668 msgid "Compose color" msgstr "Farbe einstellen" -#: ../src/dialog_iemgui.tcl:682 -#: ../src/dialog_iemgui.tcl:688 msgid "Test label" -msgstr "Test Etikett" +msgstr "Test Beschriftung" + +msgid "Send a Pd message" +msgstr "Pd Message senden..." + +msgid "(use arrow keys for history)" +msgstr "(benutzen Sie die Pfeiltasten zum Blättern)" -#: ../src/dialog_midi.tcl:85 msgid "MIDI Settings" msgstr "MIDI Einstellungen" -#: ../src/dialog_midi.tcl:220 msgid "ALSA MIDI Settings" msgstr "ALSA MIDI Einstellungen" -#: ../src/dialog_midi.tcl:331 -msgid "Use multiple ALSA devices" -msgstr "Mehrere ALSA Geräte verwenden" - -#: ../src/dialog_midi.tcl:337 msgid "In Ports:" msgstr "Eingänge:" -#: ../src/dialog_midi.tcl:340 msgid "Out Ports:" msgstr "Ausgänge:" -#: ../src/g_editor.c:1663 -msgid "Discard changes to this window??" -msgstr "Änderungen an diesem Fenster verwerfen?" - -#: ../src/g_editor.c:1668 -msgid "really quit?" -msgstr "Wirklich Abbrechen?" - -#: ../src/g_editor.c:1699 -msgid "Close this window??" -msgstr "Dieses Fenster schließen?" - -#: ../src/pd-gui.tcl:185 -#: ../src/pd-gui.tcl:195 -#: ../src/pd-gui.tcl:203 -#: ../src/pd-gui.tcl:206 -#: ../src/pd-gui.tcl:215 -#: ../src/pd-gui.tcl:226 -msgid "Associated Files" -msgstr "Zugehörige Dateien" - -#: ../src/pd-gui.tcl:186 -#: ../src/pd-gui.tcl:196 -#: ../src/pd-gui.tcl:204 -#: ../src/pd-gui.tcl:207 -#: ../src/pd-gui.tcl:216 -#: ../src/pd-gui.tcl:227 -msgid "Pd Files" -msgstr "Pd Dateien" - -#: ../src/pd-gui.tcl:187 -#: ../src/pd-gui.tcl:205 -#: ../src/pd-gui.tcl:208 -#: ../src/pd-gui.tcl:228 -msgid "Max Patch Files" -msgstr "Max Patch Dateien" - -#: ../src/pd-gui.tcl:188 -#: ../src/pd-gui.tcl:206 -#: ../src/pd-gui.tcl:209 -#: ../src/pd-gui.tcl:229 -msgid "Max Text Files" -msgstr "Max Textdateien" - -#: ../src/pd-gui.tcl:197 -#: ../src/pd-gui.tcl:217 -msgid "Max Patch Files (.pat)" -msgstr "Max Patch Dateien (.pat)" - -#: ../src/pd-gui.tcl:198 -#: ../src/pd-gui.tcl:218 -msgid "Max Text Files (.mxt)" -msgstr "Max Textdateien (.mxt)" - -#: ../src/pd-gui.tcl:270 -#: ../src/pd-gui.tcl:290 +msgid "Pd search path for objects, help, fonts, and other files" +msgstr "" +"Verzeichnisse, in denen Pd nach Objekten, Hilfe, Schriftarten und ähnlichem " +"sucht" + +msgid "Use standard paths" +msgstr "Standardpfade durchsuchen" + +msgid "Verbose" +msgstr "Ausführliche Meldungen" + +msgid "Pd Documents Directory" +msgstr "Verzeichnis für Pd-Dokumente" + +msgid "Browse" +msgstr "Durchsuchen" + +msgid "Reset" +msgstr "Zurücksetzen" + +msgid "Disable" +msgstr "Deaktivieren" + +msgid "Externals Install Directory" +msgstr "Installationsverzeichnis für Bibliotheken" + +msgid "Clear" +msgstr "Löschen" + +msgid "Choose Pd documents directory:" +msgstr "Wählen Sie ein Verzeichnis für Pd-Dokumente:" + +msgid "Install externals to directory:" +msgstr "Externals in folgendes Verzeichnis installieren:" + +msgid "Add a new path" +msgstr "Neuen Pfad hinzufügen" + +msgid "Add new library" +msgstr "Neue Bibliothek hinzufügen" + +msgid "Edit library" +msgstr "Bibliothek bearbeiten" + +msgid "Pd libraries to load on startup" +msgstr "automatisch geladene Pd-Bibliotheken" + +msgid "Startup flags:" +msgstr "Kommandozeilenoptionen:" + +msgid "Defeat real-time scheduling" +msgstr "Echtzeit-Modus unterdrücken" + +msgid "Help Browser" +msgstr "Hilfebrowser..." + +msgid "(Tcl) MISSING CLOSE-BRACE '}': " +msgstr "" + +msgid "(Tcl) INVALID COMMAND NAME: " +msgstr "" + +msgid "(Tcl) UNHANDLED ERROR: " +msgstr "" + #, tcl-format -msgid "WARNING: Font family '%s' not found, using default (%s)" +msgid "[deken]: installed version [%1$s] > %2$s...skipping!" msgstr "" -"WARNUNG: Zeichensatzfamilie '%s' nicht gefunden, Standard wird verwendet (%s)" +"[deken]: die bereits installierte Version [%1$s] ist größer als %2$s..." +"überspringe!" + +#, tcl-format +msgid "[deken]: installed version [%1$s] < %2$s...overwriting!" +msgstr "[deken]: überschreibe die installierte Version [%1$s] mit %2$s!" -#: ../src/pd-gui.tcl:278 -#: ../src/pd-gui.tcl:298 #, tcl-format -msgid "WARNING: Font weight '%s' not found, using default (%s)" +msgid "[deken]: installed version [%1$s] == %2$s...skipping!" +msgstr "" +"[deken]: die installierte Version ist bereits am neuesten Stand [%1$s == " +"%2$s]" + +msgid "[deken]: " msgstr "" -"WARNUNG: Zeichensatz Schnitt '%s' nicht gefunden, Standard wird verwendet (%" -"s)" -#: ../src/pd-gui.tcl:303 -#: ../src/pd-gui.tcl:323 #, tcl-format -msgid "ERROR: %s failed to find font size (%s) that fits into %sx%s!" -msgstr "FEHLER: %s failed to find font size (%s) that fits into %sx%s!" - -#: ../src/pd-gui.tcl:478 -#: ../src/pd-gui.tcl:483 -#: ../src/pd-gui.tcl:501 -msgid "ERROR: 'pd' never showed up, 'pd-gui' quitting!" -msgstr "FEHLER: 'pd' startete nicht, 'pd-gui' beendet sich!" - -#: ../src/pd_menucommands.tcl:19 -msgid "Untitled" -msgstr "Unbenannt" - -#: ../src/pd_menucommands.tcl:78 -#: ../src/pd_menucommands.tcl:79 -#: ../src/pd_menucommands.tcl:90 -msgid "Send Message..." -msgstr "Nachricht senden..." - -#: ../src/pd_menucommands.tcl:82 -#: ../src/pd_menucommands.tcl:83 -#: ../src/pd_menucommands.tcl:94 -#: ../src/pd_menus.tcl:87 -#: ../src/pd_menus.tcl:88 -#: ../src/pd_menus.tcl:133 -#: ../src/pd_menus.tcl:134 -#: ../src/pd_menus.tcl:147 -#: ../src/pd_menus.tcl:192 -#: ../src/pd_menus.tcl:193 -#: ../src/pd_menus.tcl:265 -#: ../src/pd_menus.tcl:278 -#: ../src/pd_menus.tcl:292 -#: ../src/pd_menus.tcl:305 -#: ../src/pd_menus.tcl:329 -#: ../src/pd_menus.tcl:342 -#: ../src/pd_menus.tcl:360 -#: ../src/pd_menus.tcl:387 -#: ../src/pd_menus.tcl:414 -#: ../src/pd_menus.tcl:426 -#: ../src/pd_menus.tcl:453 -#: ../startup/object_db.tcl:123 -msgid "Message" -msgstr "Nachricht" - -#: ../src/pd_menucommands.tcl:108 -#: ../src/pd_menucommands.tcl:111 -#: ../src/pd_menus.tcl:112 -#: ../src/pd_menus.tcl:113 -#: ../src/pd_menus.tcl:117 -#: ../src/pd_menus.tcl:118 -#: ../src/pd_menus.tcl:158 -#: ../src/pd_menus.tcl:159 -#: ../src/pd_menus.tcl:163 -#: ../src/pd_menus.tcl:164 -msgid "Font" -msgstr "Zeichensatz" +msgid "Successfully unzipped %1$s into %2$s." +msgstr "Erfolgreich %1$s nach %2$s entpackt." + +msgid "[deken]: Unable to extract package automatically." +msgstr "[deken]: Paket konnte nicht automatisch entpackt werden." + +msgid "Please perform the following steps manually:" +msgstr "Bitte führen Sie die folgenden Schritte manuell aus:" + +#, tcl-format +msgid "1. Unzip %s." +msgstr "1. Entpacken von %s." + +#, tcl-format +msgid "2. Copy the contents into %s." +msgstr "2. Kopieren Sie den Inhalt nach %s." + +#, tcl-format +msgid "[deken] uninstalling '%s'" +msgstr "[deken] deinstalliere '%s'" + +#, tcl-format +msgid "Uninstalling %1$s from %2$s failed!" +msgstr "Deinstallation von '%1$s' aus %2$s schlug fehl!" + +#, tcl-format +msgid "[deken] deken-plugin.tcl (Pd externals search) loaded from %s." +msgstr "[deken] Pd Paketmanager vom Pfad %s geladen." + +#, tcl-format +msgid "[deken] Platform detected: %s" +msgstr "[deken] Architektur gefunden: %s" + +#, tcl-format +msgid "[deken] Platform re-detected: %s" +msgstr "[deken] Architektur aktualisiert: %s" + +msgid "Show all" +msgstr "Alle anzeigen" + +msgid "Search" +msgstr "Suche" + +msgid "To get a list of all available externals, try an empty search." +msgstr "" +"Um eine Liste aller verfügbaren Externals zu erhalten, starten Sie eine " +"leere Suche." + +msgid "Find externals" +msgstr "Finde Externals online" + +msgid "Only install externals uploaded by people you trust." +msgstr "" +"Installieren Sie nur Externals deren Entwickler und Entwicklerinnen Sie " +"vertrauen." -#: ../src/pd_menucommands.tcl:123 -#: ../src/pd_menucommands.tcl:126 -#: ../src/pd_menus.tcl:138 -#: ../src/pd_menus.tcl:183 -#: ../src/pd_menus.tcl:184 msgid "Preferences" -msgstr "Voreinstellungen" +msgstr "Einstellungen" -#: ../src/pd_menus.tcl:45 -msgid "Edit" -msgstr "Bearbeiten" +msgid "Installation options:" +msgstr "Installationsoptionen:" -#: ../src/pd_menus.tcl:45 -msgid "File" -msgstr "Datei" +msgid "Try to remove libraries before (re)installing them?" +msgstr "" +"Soll versucht werden, Externals vor der (Neu)Installation zu entfernen?" -#: ../src/pd_menus.tcl:45 -#: ../src/pdtk_canvas.tcl:48 -#: ../src/pdtk_canvas.tcl:110 -#: ../src/pdtk_canvas.tcl:113 -msgid "Help" -msgstr "Hilfe" +msgid "Show README of newly installed libraries (if present)?" +msgstr "" +"Soll evtl. vorhandene Dokumentation für neu installierte Externals angezeigt " +"werden?" -#: ../src/pd_menus.tcl:45 -msgid "Media" -msgstr "Medien" +msgid "Should newly installed libraries be added to Pd's search path?" +msgstr "Sollen neu installierte Externals zu Pds Suchpfad hinzugefügt werden?" -#: ../src/pd_menus.tcl:45 -msgid "Put" -msgstr "Einfügen" +msgid "Platform settings:" +msgstr "Kompatibilitätseinstellungen:" -#: ../src/pd_menus.tcl:45 -msgid "Window" -msgstr "Fenster" +#, tcl-format +msgid "Default platform: %s" +msgstr "Standardarchitektur: %s" -#: ../src/pd_menus.tcl:81 -#: ../src/pd_menus.tcl:82 -#: ../src/pd_menus.tcl:127 -#: ../src/pd_menus.tcl:128 -#: ../src/pd_menus.tcl:255 -#: ../src/pd_menus.tcl:267 -#: ../src/pd_menus.tcl:285 -#: ../src/pd_menus.tcl:298 -#: ../src/pd_menus.tcl:322 -#: ../src/pd_menus.tcl:335 -#: ../src/pd_menus.tcl:349 -#: ../src/pd_menus.tcl:376 -#: ../src/pd_menus.tcl:380 -#: ../src/pd_menus.tcl:407 -#: ../src/pd_menus.tcl:419 -#: ../src/pd_menus.tcl:446 -msgid "New" -msgstr "Neu" +msgid "User-defined platform:" +msgstr "Benutzerdefinierte Architektur:" -#: ../src/pd_menus.tcl:82 -#: ../src/pd_menus.tcl:83 -#: ../src/pd_menus.tcl:128 -#: ../src/pd_menus.tcl:129 -#: ../src/pd_menus.tcl:256 -#: ../src/pd_menus.tcl:268 -#: ../src/pd_menus.tcl:286 -#: ../src/pd_menus.tcl:299 -#: ../src/pd_menus.tcl:323 -#: ../src/pd_menus.tcl:336 -#: ../src/pd_menus.tcl:350 -#: ../src/pd_menus.tcl:377 -#: ../src/pd_menus.tcl:381 -#: ../src/pd_menus.tcl:408 -#: ../src/pd_menus.tcl:420 -#: ../src/pd_menus.tcl:447 -#: ../src/pdtk_canvas.tcl:46 -#: ../src/pdtk_canvas.tcl:108 -#: ../src/pdtk_canvas.tcl:111 -#: ../src/pdtk_canvas.tcl:128 -#: ../src/pdtk_canvas.tcl:130 -#: ../src/pdtk_canvas.tcl:131 -#: ../src/pdtk_canvas.tcl:133 -msgid "Open" -msgstr "Öffnen" +msgid "Hide foreign architectures?" +msgstr "Sollen inkompatible Externals versteckt werden?" + +#, tcl-format +msgid "Deken %s Preferences" +msgstr "Deken %s Einstellungen" + +msgid "[deken]: Start searching for externals..." +msgstr "[deken]: Starte Suche nach External ..." + +#, tcl-format +msgid "[deken]: online? %s" +msgstr "[deken]: Verbindungsprobleme! %s" + +msgid "Are you online?" +msgstr "Sind Sie online?" + +msgid "Unable to perform search." +msgstr "Die Suche schlug fehl." + +msgid "[deken]: No matching externals found." +msgstr "[deken]: Konnte keine passenden Externals finden." + +msgid "Try using the full name e.g. 'freeverb'." +msgstr "Tipp: Suchen Sie nach dem vollen Namen, z.B. 'freeverb'." + +msgid "No matching externals found." +msgstr "Keine passenden Externals gefunden." + +msgid "Please select a (writable) installation directory!" +msgstr "Bitte wählen Sie ein (beschreibbares) Verzeichnis aus!" + +#, tcl-format +msgid "Install %1$s to %2$s?" +msgstr "%1$s nach %2$s installieren?" + +#, tcl-format +msgid "" +"Commencing downloading of:\n" +"%1$s\n" +"Into %2$s..." +msgstr "Lade %1$s nach %2$s herunter..." + +msgid "aborting.\n" +msgstr "Abbruch.\n" + +#, tcl-format +msgid "Unable to add %s to search paths" +msgstr "Konnte %s nicht zu Pds Suchpfad hinzufügen" + +#, tcl-format +msgid "Add %s to the Pd search paths?" +msgstr "Soll %s zu Pds Suchpfad hinzugefügt werden?" + +#, tcl-format +msgid "Added %s to search paths" +msgstr "%s zum Suchpfad hinzugefügt" + +#, tcl-format +msgid "Unable to download from %1$s [%2$s]" +msgstr "Konnte nichts von %1$s herunterladen [%2$s]." + +#, tcl-format +msgid "Unable to remove stray file %s" +msgstr "Konnte verwaiste Datei %s nicht entfernen" + +#, tcl-format +msgid "Unable to rename downloaded file to %s" +msgstr "Konnte heruntergeladene Datei %s nicht umbenennen" + +#, tcl-format +msgid "searching for '%s'" +msgstr "Such nach '%s'" + +#, tcl-format +msgid "Uploaded by %1$s @ %2$s" +msgstr "von %1$s am %2$s hochgeladen" + +msgid "Install package" +msgstr "Paket installieren" + +msgid "Open webpage" +msgstr "Webseite öffnen" + +# parser glitch. don't translate this +msgid "_" +msgstr "" + +#, tcl-format +msgid "" +"Do you want Pd to create a documents directory for patches and external " +"libraries?\n" +"\n" +"Location: %s\n" +"\n" +"You can change or disable this later in the Path preferences." +msgstr "" +"Wollen Sie, dass Pd ein Dokumenten-Verzeichnis für Patches und Bibliotheken " +"erstellt?\n" +"\n" +"Verzeichnis: %s\n" +"\n" +"Sie können Ihre Entscheidung jederzeit in den Suchpfad-Einstellungen ändern." + +#, tcl-format +msgid "" +"Pd documents directory cannot be found:\n" +"\n" +"%s\n" +"\n" +"Choose a new location?" +msgstr "" +"Das Verzeichnis für Pd-Dokumente konnte nicht gefunden werden:\n" +"\n" +"%s\n" +"\n" +"Wollen Sie einen neuen Speicherort wählen?" + +#, tcl-format +msgid "Couldn't create Pd documents directory: %s\n" +msgstr "Konnte das Verzeichnis für Pd-Dokumente nicht erzeugen: %s\n" + +# "externals" is a literal (a folder name to be created) +#, tcl-format +msgid "Couldn't create \"externals\" directory in: %s\n" +msgstr "Konnte kein \"externals\" Verzeichnis in '%s' erstellen.\n" + +#, fuzzy, tcl-format +msgid "Couldn't create preferences \"%1$s\" in %2$s" +msgstr "Konnte keine Einstellungen erstellen '%1$s' in %2$s erzeugen" + +msgid "About Pd" +msgstr "Über Pd" + +msgid "Save" +msgstr "Speichern" -#: ../src/pd_menus.tcl:84 -#: ../src/pd_menus.tcl:85 -#: ../src/pd_menus.tcl:130 -#: ../src/pd_menus.tcl:131 -#: ../src/pd_menus.tcl:261 -#: ../src/pd_menus.tcl:274 -#: ../src/pd_menus.tcl:289 -#: ../src/pd_menus.tcl:302 -#: ../src/pd_menus.tcl:326 -#: ../src/pd_menus.tcl:339 -#: ../src/pd_menus.tcl:356 -#: ../src/pd_menus.tcl:383 -#: ../src/pd_menus.tcl:384 -#: ../src/pd_menus.tcl:411 -#: ../src/pd_menus.tcl:423 -#: ../src/pd_menus.tcl:450 msgid "Save As..." msgstr "Speichern als..." -#: ../src/pd_menus.tcl:88 -#: ../src/pd_menus.tcl:89 -#: ../src/pd_menus.tcl:134 -#: ../src/pd_menus.tcl:135 -#: ../src/pd_menus.tcl:267 -#: ../src/pd_menus.tcl:280 -#: ../src/pd_menus.tcl:293 -#: ../src/pd_menus.tcl:306 -#: ../src/pd_menus.tcl:330 -#: ../src/pd_menus.tcl:343 -#: ../src/pd_menus.tcl:362 -#: ../src/pd_menus.tcl:388 -#: ../src/pd_menus.tcl:389 -#: ../src/pd_menus.tcl:415 -#: ../src/pd_menus.tcl:427 -#: ../src/pd_menus.tcl:454 msgid "Print..." -msgstr "Drucken" - -#: ../src/pd_menus.tcl:93 -#: ../src/pd_menus.tcl:94 -#: ../src/pd_menus.tcl:139 -#: ../src/pd_menus.tcl:140 -msgid "Undo" -msgstr "Widerrufen" +msgstr "Drucken..." -#: ../src/pd_menus.tcl:95 -#: ../src/pd_menus.tcl:96 -#: ../src/pd_menus.tcl:141 -#: ../src/pd_menus.tcl:142 -msgid "Redo" -msgstr "Wiederholen" - -#: ../src/pd_menus.tcl:98 -#: ../src/pd_menus.tcl:99 -#: ../src/pd_menus.tcl:144 -#: ../src/pd_menus.tcl:145 -msgid "Cut" -msgstr "Ausschneiden" +msgid "Paste Replace" +msgstr "Objekte ersetzen" -#: ../src/pd_menus.tcl:104 -#: ../src/pd_menus.tcl:105 -#: ../src/pd_menus.tcl:150 -#: ../src/pd_menus.tcl:151 msgid "Duplicate" msgstr "Duplizieren" -#: ../src/pd_menus.tcl:106 -#: ../src/pd_menus.tcl:107 -#: ../src/pd_menus.tcl:152 -#: ../src/pd_menus.tcl:153 -msgid "Select All" -msgstr "Alles auswählen" +msgid "Zoom In" +msgstr "Vergrößern" + +msgid "Zoom Out" +msgstr "Verkleinern" -#: ../src/pd_menus.tcl:110 -#: ../src/pd_menus.tcl:111 -#: ../src/pd_menus.tcl:115 -#: ../src/pd_menus.tcl:116 -#: ../src/pd_menus.tcl:156 -#: ../src/pd_menus.tcl:157 -#: ../src/pd_menus.tcl:161 -#: ../src/pd_menus.tcl:162 -msgid "Text Editor" -msgstr "Texteditor" - -#: ../src/pd_menus.tcl:120 -#: ../src/pd_menus.tcl:121 -#: ../src/pd_menus.tcl:166 -#: ../src/pd_menus.tcl:167 msgid "Tidy Up" msgstr "Aufräumen" -#: ../src/pd_menus.tcl:122 -#: ../src/pd_menus.tcl:123 -#: ../src/pd_menus.tcl:168 -#: ../src/pd_menus.tcl:169 -msgid "Toggle Console" -msgstr "Konsole Ein/Aus" - -#: ../src/pd_menus.tcl:124 -#: ../src/pd_menus.tcl:125 -#: ../src/pd_menus.tcl:170 -#: ../src/pd_menus.tcl:171 -msgid "Clear Console" -msgstr "Konsole löschen" +msgid "(Dis)Connect Selection" +msgstr "Auswahl verbinden/trennen" + +msgid "Triggerize" +msgstr "Trigger hinzufügen" -#: ../src/pd_menus.tcl:128 -#: ../src/pd_menus.tcl:129 -#: ../src/pd_menus.tcl:174 -#: ../src/pd_menus.tcl:175 msgid "Edit Mode" msgstr "Editiermodus" -#: ../src/pd_menus.tcl:145 -#: ../src/pd_menus.tcl:190 -#: ../src/pd_menus.tcl:191 -msgid "Object" -msgstr "Objekt" +msgid "Undo" +msgstr "Rückgängig" -#: ../src/pd_menus.tcl:149 -#: ../src/pd_menus.tcl:194 -#: ../src/pd_menus.tcl:195 -msgid "Number" -msgstr "Zahl" +msgid "Redo" +msgstr "Wiederherstellen" -#: ../src/pd_menus.tcl:151 -#: ../src/pd_menus.tcl:196 -#: ../src/pd_menus.tcl:197 -msgid "Symbol" -msgstr "Symbol" +msgid "List of objects..." +msgstr "Liste aller Objekte..." -#: ../src/pd_menus.tcl:153 -#: ../src/pd_menus.tcl:198 -#: ../src/pd_menus.tcl:199 -msgid "Comment" -msgstr "Kommentar" +msgid "New" +msgstr "Neu" -#: ../src/pd_menus.tcl:156 -#: ../src/pd_menus.tcl:201 -#: ../src/pd_menus.tcl:202 -msgid "Bang" -msgstr "Taster (Bang)" +msgid "Open" +msgstr "Öffnen" -#: ../src/pd_menus.tcl:158 -#: ../src/pd_menus.tcl:203 -#: ../src/pd_menus.tcl:204 -msgid "Toggle" -msgstr "Schalter" +msgid "Message..." +msgstr "Message..." -#: ../src/pd_menus.tcl:160 -#: ../src/pd_menus.tcl:205 -#: ../src/pd_menus.tcl:206 -msgid "Number2" -msgstr "Zahl2" +msgid "Cut" +msgstr "Ausschneiden" -#: ../src/pd_menus.tcl:162 -#: ../src/pd_menus.tcl:207 -#: ../src/pd_menus.tcl:208 -msgid "Vslider" -msgstr "Vertikaler Schieberegler" +msgid "Select All" +msgstr "Alles auswählen" -#: ../src/pd_menus.tcl:164 -#: ../src/pd_menus.tcl:209 -#: ../src/pd_menus.tcl:210 -msgid "Hslider" -msgstr "Horizontaler Schieberegler" +msgid "Clear Console" +msgstr "Konsole löschen" -#: ../src/pd_menus.tcl:166 -#: ../src/pd_menus.tcl:211 -#: ../src/pd_menus.tcl:212 -msgid "Vradio" -msgstr "Vertikaler Radioknopf" +msgid "Object" +msgstr "Objekt" -#: ../src/pd_menus.tcl:168 -#: ../src/pd_menus.tcl:213 -#: ../src/pd_menus.tcl:214 -msgid "Hradio" -msgstr "Horizontaler Radioknopf" +msgid "Message" +msgstr "Message" -#: ../src/pd_menus.tcl:170 -#: ../src/pd_menus.tcl:215 -#: ../src/pd_menus.tcl:216 -msgid "VU Meter" -msgstr "Aussteuerungsanzeige" +msgid "Number" +msgstr "Number" -#: ../src/pd_menus.tcl:172 -#: ../src/pd_menus.tcl:217 -#: ../src/pd_menus.tcl:218 -msgid "Canvas" -msgstr "Arbeitsfläche" +msgid "Symbol" +msgstr "Symbol" -#: ../src/pd_menus.tcl:175 -#: ../src/pd_menus.tcl:220 -#: ../src/pd_menus.tcl:221 -msgid "Graph" -msgstr "Kurve" +msgid "Comment" +msgstr "Kommentar" -#: ../src/pd_menus.tcl:176 -#: ../src/pd_menus.tcl:221 -#: ../src/pd_menus.tcl:222 -msgid "Array" -msgstr "Feld" +msgid "Graph" +msgstr "Graph" -#: ../src/pd_menus.tcl:181 -#: ../src/pd_menus.tcl:226 -#: ../src/pd_menus.tcl:227 msgid "Find..." msgstr "Finde..." -#: ../src/pd_menus.tcl:183 -#: ../src/pd_menus.tcl:228 -#: ../src/pd_menus.tcl:229 msgid "Find Again" -msgstr "Finde nochmal" +msgstr "Erneut finden" -#: ../src/pd_menus.tcl:185 -#: ../src/pd_menus.tcl:230 -#: ../src/pd_menus.tcl:231 msgid "Find Last Error" msgstr "Letzten Fehler finden" -#: ../src/pd_menus.tcl:191 -#: ../src/pd_menus.tcl:236 -#: ../src/pd_menus.tcl:237 msgid "DSP On" msgstr "DSP An" -#: ../src/pd_menus.tcl:193 -#: ../src/pd_menus.tcl:238 -#: ../src/pd_menus.tcl:239 msgid "DSP Off" msgstr "DSP Aus" -#: ../src/pd_menus.tcl:196 -#: ../src/pd_menus.tcl:242 -#: ../src/pd_menus.tcl:269 msgid "Test Audio and MIDI..." msgstr "Teste Audio und MIDI..." -#: ../src/pd_menus.tcl:198 -#: ../src/pd_menus.tcl:244 -#: ../src/pd_menus.tcl:271 msgid "Load Meter" msgstr "Auslastungsanzeige" -#: ../src/pd_menus.tcl:205 -#: ../src/pd_menus.tcl:251 -#: ../src/pd_menus.tcl:278 +msgid "Audio Settings..." +msgstr "Audioeinstellungen..." + +msgid "MIDI Settings..." +msgstr "MIDI Einstellungen..." + msgid "Minimize" msgstr "Minimieren" -#: ../src/pd_menus.tcl:207 -#: ../src/pd_menus.tcl:253 -#: ../src/pd_menus.tcl:280 msgid "Zoom" msgstr "Zoom" -#: ../src/pd_menus.tcl:210 -#: ../src/pd_menus.tcl:256 -#: ../src/pd_menus.tcl:283 -msgid "Parent Window" -msgstr "Übergeordnetes Fenster" - -#: ../src/pd_menus.tcl:216 -#: ../src/pd_menus.tcl:262 -#: ../src/pd_menus.tcl:289 msgid "Bring All to Front" msgstr "Alle nach vorne bringen" -#: ../src/pd_menus.tcl:224 -#: ../src/pd_menus.tcl:241 -#: ../src/pd_menus.tcl:253 -#: ../src/pd_menus.tcl:270 -#: ../src/pd_menus.tcl:297 -#: ../src/pd_menus.tcl:335 -#: ../src/pd_menus.tcl:362 -msgid "About Pd" -msgstr "Über Pd" +msgid "Next Window" +msgstr "Nächstes Fenster" + +msgid "Previous Window" +msgstr "Vorheriges Fenster" + +msgid "Parent Window" +msgstr "Übergeordnetes Fenster" -#: ../src/pd_menus.tcl:227 -#: ../src/pd_menus.tcl:273 -#: ../src/pd_menus.tcl:300 msgid "HTML Manual..." -msgstr "HTML Anleitung" +msgstr "HTML Anleitung..." -#: ../src/pd_menus.tcl:229 -#: ../src/pd_menus.tcl:275 -#: ../src/pd_menus.tcl:302 msgid "Browser..." msgstr "Patch Browser..." -#: ../src/pd_menus.tcl:248 -#: ../src/pd_menus.tcl:260 -#: ../src/pd_menus.tcl:342 -#: ../src/pd_menus.tcl:369 -msgid "Preferences..." -msgstr "Voreinstellungen..." - -#: ../src/pd_menus.tcl:257 -#: ../src/pd_menus.tcl:270 -#: ../src/pd_menus.tcl:352 -#: ../src/pd_menus.tcl:379 -msgid "Open Recent" -msgstr "Letzte Dateien öffnen" +msgid "puredata.info" +msgstr "" -#: ../src/pd_menus.tcl:263 -msgid "Audio Settings..." +msgid "Report a bug" +msgstr "Fehlerbericht erstellen" + +msgid "Clear Menu" +msgstr "Menü löschen" + +msgid "" +"Delete all preferences?\n" +"(takes effect when Pd is restarted)" +msgstr "" +"Alle Einstellungen löschen?\n" +"(Benötigt Neustart von Pd)" + +msgid "Path..." +msgstr "Suchpfade..." + +msgid "Startup..." +msgstr "Bibliotheken ..." + +msgid "Audio..." msgstr "Audioeinstellungen..." -#: ../src/pd_menus.tcl:265 -msgid "MIDI Settings..." +msgid "MIDI..." msgstr "MIDI Einstellungen..." -#: ../src/pd_menus.tcl:296 -#: ../src/pd_menus.tcl:309 -#: ../src/pd_menus.tcl:333 -#: ../src/pd_menus.tcl:346 -#: ../src/pd_menus.tcl:393 -#: ../src/pd_menus.tcl:420 -#: ../src/pd_menus.tcl:432 -#: ../src/pd_menus.tcl:459 +msgid "Zoom New Windows" +msgstr "Neue Fenster vergrößern" + +msgid "Save All Preferences" +msgstr "Alle Einstellungen speichern" + +msgid "Save to..." +msgstr "Einstellungen in Datei speichern..." + +msgid "Load from..." +msgstr "Einstellungen von Datei laden..." + +msgid "Forget All..." +msgstr "Alle Einstellungen zurücksetzen..." + +msgid "Open Recent" +msgstr "Letzte Dateien öffnen" + msgid "Quit" msgstr "Beenden" -#: ../src/pd_menus.tcl:304 -#: ../src/pd_menus.tcl:331 -msgid "Clear Menu" -msgstr "Menü löschen" - -#: ../src/pdtk_canvas.tcl:44 -#: ../src/pdtk_canvas.tcl:106 -#: ../src/pdtk_canvas.tcl:109 -#: ../src/pdtk_canvas.tcl:123 -#: ../src/pdtk_canvas.tcl:125 -#: ../src/pdtk_canvas.tcl:126 -#: ../src/pdtk_canvas.tcl:128 msgid "Properties" -msgstr "Einstellungen" +msgstr "Eigenschaften" -#, fuzzy -#: ../src/pdwindow.tcl:43 -msgid "DSP" +msgid "Audio on" +msgstr "Audio an" + +msgid "Audio off" +msgstr "Audio aus" + +msgid "(Tcl) MISSING CLOSE-BRACKET ']': " msgstr "" -#, fuzzy -#: ../startup/object_db.tcl:113 -msgid "Signal" +msgid "Tcl:" msgstr "" -#: ../startup/object_db.tcl:114 -msgid "Generators" -msgstr "Generatoren" +msgid "Pd" +msgstr "" -#: ../startup/object_db.tcl:115 -msgid "Filters" -msgstr "Filter" +msgid "DSP" +msgstr "" -#: ../startup/object_db.tcl:116 -#: ../startup/object_db.tcl:124 -msgid "Math" -msgstr "Mathe" +msgid "Audio I/O error" +msgstr "Audio E/A-Fehler" -#, fuzzy -#: ../startup/object_db.tcl:117 -#: ../startup/object_db.tcl:125 -msgid "I/O" +msgid "Log:" msgstr "" -#, fuzzy -#: ../startup/object_db.tcl:118 -#: ../startup/object_db.tcl:126 -msgid "Sampling" -msgstr "" +msgid "fatal" +msgstr "schwerwiegende Fehler" -#: ../startup/object_db.tcl:119 -#: ../startup/object_db.tcl:128 -msgid "Routing" -msgstr "Signalverlauf" +msgid "error" +msgstr "Fehler" -#: ../startup/object_db.tcl:120 -#: ../startup/object_db.tcl:129 -msgid "Others" -msgstr "Andere" +msgid "normal" +msgstr "Normal" -#, fuzzy -#: ../startup/object_db.tcl:127 -msgid "GUI" -msgstr "" +msgid "debug" +msgstr "Debug" -# iemgui -msgid "left:" -msgstr "links:" +msgid "all" +msgstr "Alle" -# iemgui -msgid "right:" -msgstr "rechts:" +msgid "New..." +msgstr "Neu..." -# iemgui -msgid "----------dimensions(pix):-----------" -msgstr "----------Rahmengröße(pix):-----------" +msgid "Edit..." +msgstr "Bearbeiten..." -# iemgui -msgid "--------dimensions(pix)(pix):--------" -msgstr "--------Rahmengröße(pix)(pix):--------" +msgid "Delete" +msgstr "Löschen" -# iemgui -msgid "-------dimensions(digits)(pix):-------" -msgstr "------Rahmengröße(Zahlen)(pix):-------" +#, tcl-format +msgid "Ignoring '%s': doesn't exist" +msgstr "Überspringe '%s': existiert nicht" + +#, tcl-format +msgid "Ignoring '%s': doesn't look like a Pd-file" +msgstr "Überspringe '%s': kein Pd-File" + +#~ msgid "Unable to perform search. Are you online?" +#~ msgstr "Die Suche schlug fehl. Sind Sie online?" + +#~ msgid "for:" +#~ msgstr "für:" + +#~ msgid "Max Text Files" +#~ msgstr "Max Textdateien" + +#~ msgid "Pd Files" +#~ msgstr "Pd Dateien" + +#~ msgid "Max Patch Files" +#~ msgstr "Max Patch Dateien" + +#~ msgid "really quit?" +#~ msgstr "Wirklich Abbrechen?" + +#~ msgid "Use multiple ALSA devices" +#~ msgstr "Mehrere ALSA Geräte verwenden" + +#~ msgid "Input device 2:" +#~ msgstr "Eingabegerät 2:" + +#~ msgid "Math" +#~ msgstr "Mathe" + +#~ msgid "Input device 3:" +#~ msgstr "Eingabegerät 3:" + +#~ msgid "Untitled" +#~ msgstr "Unbenannt" + +#~ msgid "Associated Files" +#~ msgstr "Zugehörige Dateien" + +#~ msgid "Discard changes to this window??" +#~ msgstr "Änderungen an diesem Fenster verwerfen?" + +#~ msgid "Close this window??" +#~ msgstr "Dieses Fenster schließen?" + +#~ msgid "WARNING: Font weight '%s' not found, using default (%s)" +#~ msgstr "" +#~ "WARNUNG: Zeichensatz Schnitt '%s' nicht gefunden, Standard wird verwendet " +#~ "(%s)" + +#~ msgid "Input device 4:" +#~ msgstr "Eingabegerät 4:" + +#~ msgid "Toggle Console" +#~ msgstr "Konsole Ein/Aus" + +#~ msgid "WARNING: Font family '%s' not found, using default (%s)" +#~ msgstr "" +#~ "WARNUNG: Zeichensatzfamilie '%s' nicht gefunden, Standard wird verwendet " +#~ "(%s)" + +#~ msgid "Max Text Files (.mxt)" +#~ msgstr "Max Textdateien (.mxt)" + +#~ msgid "Font Properties" +#~ msgstr "Zeichensatz-Einstellungen" + +#~ msgid "ERROR: %s failed to find font size (%s) that fits into %sx%s!" +#~ msgstr "FEHLER: %s failed to find font size (%s) that fits into %sx%s!" + +#~ msgid "Output device 4:" +#~ msgstr "Ausgabegerät 4:" + +#~ msgid "Generators" +#~ msgstr "Generatoren" + +#~ msgid "Preferences..." +#~ msgstr "Voreinstellungen..." + +#~ msgid "ERROR: 'pd' never showed up, 'pd-gui' quitting!" +#~ msgstr "FEHLER: 'pd' startete nicht, 'pd-gui' beendet sich!" + +#~ msgid "Output device 3:" +#~ msgstr "Ausgabegerät 3:" + +#~ msgid "Output device 2:" +#~ msgstr "Ausgabegerät 2:" + +#~ msgid "Others" +#~ msgstr "Andere" + +#~ msgid "Text Editor" +#~ msgstr "Texteditor" + +#~ msgid "Filters" +#~ msgstr "Filter" + +#~ msgid "Max Patch Files (.pat)" +#~ msgstr "Max Patch Dateien (.pat)" diff --git a/po/el.po b/po/el.po index 4076541568..c1fd126600 100644 --- a/po/el.po +++ b/po/el.po @@ -6,1147 +6,1202 @@ msgid "" msgstr "" "Project-Id-Version: Pure Data 0.43\n" "Report-Msgid-Bugs-To: pd-dev@iem.at\n" -"POT-Creation-Date: 2009-08-25 23:00-0400\n" +"POT-Creation-Date: 2017-07-06 18:10+0200\n" "PO-Revision-Date: 2009-09-13 01:51+0200\n" "Last-Translator: Γεώργιος Κερατζάκης \n" "Language-Team: Greek \n" +"Language: el\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -msgid "Discard changes to '%s'?" -msgstr "Απόρριψη αλλαγών σε '%s';" +msgid "-------dimensions(digits)(pix):-------" +msgstr "" + +msgid "--------dimensions(pix)(pix):--------" +msgstr "" + +msgid "----------dimensions(pix):-----------" +msgstr "" + +msgid "--------flash-time(ms)(ms):---------" +msgstr "" + +msgid "-----------output-range:-----------" +msgstr "" + +msgid "------selectable_dimensions(pix):------" +msgstr "" + +msgid "------visible_rectangle(pix)(pix):------" +msgstr "" + +#, fuzzy +msgid "bottom:" +msgstr "Κάτω" + +#, fuzzy +msgid "height:" +msgstr "Δεξιά" + +msgid "hold:" +msgstr "" + +msgid "intrrpt:" +msgstr "" + +msgid "left:" +msgstr "" + +msgid "lin" +msgstr "" + +msgid "log" +msgstr "" + +msgid "log-height:" +msgstr "" + +msgid "max:" +msgstr "" + +msgid "min:" +msgstr "" + +#, fuzzy +msgid "right:" +msgstr "Δεξιά" + +#, fuzzy +msgid "size:" +msgstr "Μέγεθος:" + +msgid "top:" +msgstr "" + +msgid "value:" +msgstr "" + +#, fuzzy +msgid "width:" +msgstr "Εύρος:" +#, tcl-format msgid "Do you want to save the changes you made in '%s'?" msgstr "Αποθήκευση αλλαγών που έγιναν στο '%s';" -#: ../src/dialog_array.tcl:115 -#: ../src/dialog_array.tcl:117 -#: ../src/pd_menus.tcl:100 -#: ../src/pd_menus.tcl:101 -#: ../src/pd_menus.tcl:146 -#: ../src/pd_menus.tcl:147 +#, tcl-format +msgid "Discard changes to '%s'?" +msgstr "Απόρριψη αλλαγών σε '%s';" + +msgid "Undo clear" +msgstr "" + +msgid "Undo connect" +msgstr "" + +#, fuzzy +msgid "Undo cut" +msgstr "Αναίρεση" + +msgid "Undo disconnect" +msgstr "" + +#, fuzzy +msgid "Undo duplicate" +msgstr "Αντίγραφο" + +msgid "Undo motion" +msgstr "" + +msgid "Undo paste" +msgstr "" + +msgid "Undo typing" +msgstr "" + +msgid "Redo clear" +msgstr "" + +msgid "Redo connect" +msgstr "" + +#, fuzzy +msgid "Redo cut" +msgstr "Ακύρωση Αναίρεσης" + +msgid "Redo disconnect" +msgstr "" + +#, fuzzy +msgid "Redo duplicate" +msgstr "Αντίγραφο" + +msgid "Redo motion" +msgstr "" + +msgid "Redo paste" +msgstr "" + +msgid "Redo typing" +msgstr "" + +msgid "no Pd settings to clear" +msgstr "" + +msgid "removed .pdsettings file" +msgstr "" + +msgid "couldn't delete .pdsettings file" +msgstr "" + +msgid "failed to erase Pd settings" +msgstr "" + +#, fuzzy +msgid "erased Pd settings" +msgstr "Αποθήκευση όλων των ρυθμίσεων" + +msgid "no Pd settings to erase" +msgstr "" + +msgid "skipping loading preferences... Pd seems to have crashed on startup." +msgstr "" + +msgid "(re-save preferences to reinstate them)" +msgstr "" + +msgid "File" +msgstr "Αρχείο" + +#, fuzzy +msgid "Edit" +msgstr "Επεξεργασία" + +msgid "Put" +msgstr "Προσθήκη" + +msgid "Find" +msgstr "Εύρεση" + +msgid "Media" +msgstr "Μέσα" + +msgid "Window" +msgstr "Παράθυρο" + +msgid "Help" +msgstr "Βοήθεια" + +msgid "Show &Hidden Files and Directories" +msgstr "" + msgid "Copy" msgstr "Αντιγραφή" -#: ../src/dialog_array.tcl:118 -#: ../src/dialog_array.tcl:120 -#: ../src/pd_menus.tcl:102 -#: ../src/pd_menus.tcl:103 -#: ../src/pd_menus.tcl:148 -#: ../src/pd_menus.tcl:149 msgid "Paste" msgstr "Επικόλληση" -#: ../src/dialog_array.tcl:264 -#: ../src/dialog_array.tcl:266 msgid "Array Properties" msgstr "Ιδιότητες Πίνακα" -#: ../src/dialog_array.tcl:270 -#: ../src/dialog_array.tcl:272 +msgid "Array" +msgstr "Πίνακας" + msgid "Name:" msgstr "Όνομα:" -#: ../src/dialog_array.tcl:276 -#: ../src/dialog_array.tcl:278 -#: ../src/dialog_canvas.tcl:178 -#: ../src/dialog_canvas.tcl:193 -#: ../src/dialog_iemgui.tcl:619 -#: ../src/dialog_iemgui.tcl:621 msgid "Size:" msgstr "Μέγεθος:" -#: ../src/dialog_array.tcl:280 -#: ../src/dialog_array.tcl:282 msgid "Save contents" msgstr "Αποθήκευση περιεχομένων" -#: ../src/dialog_array.tcl:284 -#: ../src/dialog_array.tcl:286 msgid "Draw as:" msgstr "Σχεδίαση ως:" -#: ../src/dialog_array.tcl:287 -#: ../src/dialog_array.tcl:289 -msgid "Points" -msgstr "Σημεία" - -#: ../src/dialog_array.tcl:289 -#: ../src/dialog_array.tcl:291 msgid "Polygon" msgstr "Πολύγωνο" -#: ../src/dialog_array.tcl:291 -#: ../src/dialog_array.tcl:293 +msgid "Points" +msgstr "Σημεία" + msgid "Bezier curve" msgstr "Καμπύλη Bezier" -#: ../src/dialog_array.tcl:297 -#: ../src/dialog_array.tcl:299 msgid "Put array into:" msgstr "Προσθήκη πίνακα σε:" -#: ../src/dialog_array.tcl:300 -#: ../src/dialog_array.tcl:302 msgid "New graph" msgstr "Νέο γράφημα" -#: ../src/dialog_array.tcl:302 -#: ../src/dialog_array.tcl:304 msgid "Last graph" msgstr "Τελευταίο γράφημα" -#: ../src/dialog_array.tcl:306 -#: ../src/dialog_array.tcl:308 -msgid "Delete array" -msgstr "Διαγραφή πίνακα" +msgid "Options" +msgstr "" -#: ../src/dialog_array.tcl:312 -#: ../src/dialog_array.tcl:314 msgid "Open List View..." msgstr "Άνοιγμα Προβολής Λίστας..." -#: ../src/dialog_array.tcl:319 -#: ../src/dialog_array.tcl:321 -#: ../src/dialog_audio.tcl:136 -#: ../src/dialog_canvas.tcl:205 -#: ../src/dialog_font.tcl:51 -#: ../src/dialog_gatom.tcl:153 -#: ../src/dialog_gatom.tcl:161 -#: ../src/dialog_iemgui.tcl:742 -#: ../src/dialog_iemgui.tcl:748 -#: ../src/dialog_midi.tcl:91 -#: ../src/dialog_midi.tcl:226 +msgid "Delete array" +msgstr "Διαγραφή πίνακα" + msgid "Cancel" msgstr "Ακύρωση" -#: ../src/dialog_array.tcl:321 -#: ../src/dialog_array.tcl:323 -#: ../src/dialog_audio.tcl:138 -#: ../src/dialog_canvas.tcl:207 -#: ../src/dialog_gatom.tcl:156 -#: ../src/dialog_gatom.tcl:164 -#: ../src/dialog_iemgui.tcl:745 -#: ../src/dialog_iemgui.tcl:751 -#: ../src/dialog_midi.tcl:93 -#: ../src/dialog_midi.tcl:228 msgid "Apply" msgstr "Εφαρμογή" -#: ../src/dialog_array.tcl:323 -#: ../src/dialog_array.tcl:325 -#: ../src/dialog_audio.tcl:140 -#: ../src/dialog_canvas.tcl:209 -#: ../src/dialog_font.tcl:53 -#: ../src/dialog_font.tcl:92 -#: ../src/dialog_font.tcl:100 -#: ../src/dialog_gatom.tcl:159 -#: ../src/dialog_gatom.tcl:167 -#: ../src/dialog_iemgui.tcl:748 -#: ../src/dialog_iemgui.tcl:754 -#: ../src/dialog_midi.tcl:95 -#: ../src/dialog_midi.tcl:230 msgid "OK" msgstr "ΟΚ" -#: ../src/dialog_audio.tcl:130 msgid "Audio Settings" msgstr "Ρυθμίσεις Ήχου" -#: ../src/dialog_audio.tcl:142 -msgid "Save All Settings" -msgstr "Αποθήκευση όλων των ρυθμίσεων" +#, fuzzy +msgid "Settings" +msgstr "Ρυθμίσεις MIDI" -#: ../src/dialog_audio.tcl:151 #, fuzzy msgid "Sample rate:" msgstr "Ταχύτητα δειγματοληψίας:" -#: ../src/dialog_audio.tcl:153 msgid "Delay (msec):" msgstr "Καθυστέρηση (msec):" -#: ../src/dialog_audio.tcl:158 +msgid "Block size:" +msgstr "" + msgid "Use callbacks" msgstr "Χρήση επανακλήσεων" -#: ../src/dialog_audio.tcl:166 -#: ../src/dialog_midi.tcl:105 -#: ../src/dialog_midi.tcl:241 -msgid "Input device 1:" -msgstr "Συσκευή εισόδου 1:" - -#: ../src/dialog_audio.tcl:169 -#: ../src/dialog_audio.tcl:183 -#: ../src/dialog_audio.tcl:198 -#: ../src/dialog_audio.tcl:213 -#: ../src/dialog_audio.tcl:232 -#: ../src/dialog_audio.tcl:250 -#: ../src/dialog_audio.tcl:265 -#: ../src/dialog_audio.tcl:280 +msgid "Input Devices" +msgstr "Συσκευή εισόδου" + msgid "Channels:" msgstr "Κανάλια:" -#: ../src/dialog_audio.tcl:179 -#: ../src/dialog_midi.tcl:115 -#: ../src/dialog_midi.tcl:251 -msgid "Input device 2:" -msgstr "Συσκευή εισόδου 2:" - -#: ../src/dialog_audio.tcl:194 -#: ../src/dialog_midi.tcl:127 -#: ../src/dialog_midi.tcl:263 -msgid "Input device 3:" -msgstr "Συσκευή εισόδου 3:" - -#: ../src/dialog_audio.tcl:209 -#: ../src/dialog_midi.tcl:139 -#: ../src/dialog_midi.tcl:275 -msgid "Input device 4:" -msgstr "Συσκευή εισόδου 4:" - -#: ../src/dialog_audio.tcl:223 -#: ../src/dialog_midi.tcl:150 -#: ../src/dialog_midi.tcl:286 -msgid "Output device 1:" -msgstr "Συσκευή εξόδου 1:" - -#: ../src/dialog_audio.tcl:226 -msgid "(same as input device) .............. " +msgid "Output Devices" +msgstr "Συσκευή εξόδου" + +#, fuzzy +msgid "(same as input device)..." msgstr "(ομοίως με συσκευή εισόδου) .............." -#: ../src/dialog_audio.tcl:246 -#: ../src/dialog_midi.tcl:160 -#: ../src/dialog_midi.tcl:296 -msgid "Output device 2:" -msgstr "Συσκευή εξόδου 2:" - -#: ../src/dialog_audio.tcl:261 -#: ../src/dialog_midi.tcl:171 -#: ../src/dialog_midi.tcl:307 -msgid "Output device 3:" -msgstr "Συσκευή εξόδου 3:" - -#: ../src/dialog_audio.tcl:276 -#: ../src/dialog_midi.tcl:182 -#: ../src/dialog_midi.tcl:318 -msgid "Output device 4:" -msgstr "Συσκευή εξόδου 4:" - -#: ../src/dialog_audio.tcl:291 -#: ../src/dialog_midi.tcl:195 -msgid "Use multiple devices" +#, fuzzy +msgid "Use Multiple Devices" msgstr "Χρήση πολλαπλών συσκευών" -#: ../src/dialog_canvas.tcl:142 +msgid "Save All Settings" +msgstr "Αποθήκευση όλων των ρυθμίσεων" + +msgid "WARNING: unknown graphme flags received in pdtk_canvas_dialog" +msgstr "" + msgid "Canvas Properties" msgstr "Ιδιότητες Καμβά" -#: ../src/dialog_canvas.tcl:146 msgid "Scale" msgstr "Κλίμακα" -#: ../src/dialog_canvas.tcl:150 msgid "X units per pixel:" msgstr "Χ μονάδες ανά εικονοστοιχείο" -#: ../src/dialog_canvas.tcl:155 msgid "Y units per pixel:" msgstr "Υ μονάδες ανά εικονοστοιχείο" -#: ../src/dialog_canvas.tcl:159 msgid "Appearance on parent patch" msgstr "Εμφάνιση στο γονεϊκό patch" -#: ../src/dialog_canvas.tcl:161 msgid "Graph-On-Parent" msgstr "" -#: ../src/dialog_canvas.tcl:165 msgid "Hide object name and arguments" msgstr "Απόκρυψη ονόματος και ορισμάτων του object" -#: ../src/dialog_canvas.tcl:170 msgid "Range and size" msgstr "Περιοχή και μέγεθος" -#: ../src/dialog_canvas.tcl:174 -msgid "X range, from" +#, fuzzy +msgid "X range: from" msgstr "περιοχή Χ, από" -#: ../src/dialog_canvas.tcl:176 -#: ../src/dialog_canvas.tcl:191 msgid "to" msgstr "σε" -#: ../src/dialog_canvas.tcl:180 -#: ../src/dialog_canvas.tcl:195 msgid "Margin:" msgstr "Περιθώριο:" -#: ../src/dialog_canvas.tcl:189 -msgid "Y range, from" +#, fuzzy +msgid "Y range: from" msgstr "περιοχή Y, από" -#: ../src/dialog_find.tcl:63 -#: ../src/dialog_find.tcl:66 -#: ../src/dialog_find.tcl:79 -#: ../src/dialog_find.tcl:80 -#: ../src/dialog_find.tcl:85 -#: ../src/dialog_find.tcl:87 -#: ../src/dialog_find.tcl:101 -#: ../src/dialog_find.tcl:107 -#: ../src/pd_menus.tcl:45 -msgid "Find" -msgstr "Εύρεση" +#, fuzzy +msgid "Data Properties" +msgstr "Ιδιότητες Καμβά" -#: ../src/dialog_find.tcl:70 -#: ../src/dialog_find.tcl:73 -#: ../src/dialog_find.tcl:87 -#: ../src/dialog_find.tcl:93 -msgid "Search in" +#, tcl-format +msgid "Found '%1$s' in %2$s" +msgstr "" + +#, tcl-format +msgid "Couldn't find '%1$s' in %2$s" +msgstr "" + +#, fuzzy, tcl-format +msgid "Search in %s for:" msgstr "Αναζήτηση σε" -#: ../src/dialog_find.tcl:72 -#: ../src/dialog_find.tcl:75 -#: ../src/dialog_find.tcl:89 -#: ../src/dialog_find.tcl:95 -msgid "for:" -msgstr "για:" - -#: ../src/dialog_find.tcl:83 -#: ../src/dialog_find.tcl:90 -#: ../src/dialog_find.tcl:104 -#: ../src/dialog_find.tcl:110 -#: ../src/pd_menus.tcl:86 -#: ../src/pd_menus.tcl:87 -#: ../src/pd_menus.tcl:132 -#: ../src/pd_menus.tcl:133 -#: ../src/pd_menus.tcl:259 -#: ../src/pd_menus.tcl:272 -#: ../src/pd_menus.tcl:295 -#: ../src/pd_menus.tcl:308 -#: ../src/pd_menus.tcl:332 -#: ../src/pd_menus.tcl:345 -#: ../src/pd_menus.tcl:354 -#: ../src/pd_menus.tcl:381 -#: ../src/pd_menus.tcl:392 -#: ../src/pd_menus.tcl:419 -#: ../src/pd_menus.tcl:431 -#: ../src/pd_menus.tcl:458 -msgid "Close" -msgstr "Κλείσιμο" +#, tcl-format +msgid "Showed last '%1$s' in %2$s" +msgstr "" + +#, tcl-format +msgid "Showing '%1$d' out of %2$d items in %3$s" +msgstr "" + +msgid "Pd window" +msgstr "Παράθυρο Pd" -#: ../src/dialog_find.tcl:83 -#: ../src/dialog_find.tcl:97 -#: ../src/dialog_find.tcl:103 msgid "Match whole word only" msgstr "Ταύτιση μόνο ολόκληρης λέξης" -#: ../src/dialog_font.tcl:45 -msgid "Font Properties" -msgstr "Ιδιότητες Γραμματοσειράς" +msgid "Close" +msgstr "Κλείσιμο" -#: ../src/dialog_font.tcl:46 -#: ../src/dialog_font.tcl:54 #, tcl-format msgid "%s Font" msgstr "Γραμματοσειρά %s" -#: ../src/dialog_font.tcl:49 -#: ../src/pd-gui.tcl:280 -#: ../src/pd-gui.tcl:283 -#: ../src/pd-gui.tcl:286 -#: ../src/pd-gui.tcl:288 -#: ../src/pd-gui.tcl:291 -#: ../src/pd_menus.tcl:212 -#: ../src/pd_menus.tcl:258 -#: ../src/pd_menus.tcl:285 -#: ../src/pdwindow.tcl:33 -msgid "Pd window" -msgstr "Παράθυρο Pd" +msgid "Font" +msgstr "Γραμματοσειρά" -#: ../src/dialog_font.tcl:61 -#: ../src/dialog_font.tcl:96 -#: ../src/dialog_font.tcl:104 msgid "Font Size" msgstr "Μέγεθος Γραμματοσειράς" -#: ../src/dialog_font.tcl:89 -#: ../src/dialog_font.tcl:108 -#: ../src/dialog_font.tcl:116 msgid "Stretch" msgstr "Τέντωμα" -#: ../src/dialog_font.tcl:96 -#: ../src/dialog_font.tcl:115 -#: ../src/dialog_font.tcl:123 msgid "X and Y" msgstr "Χ και Y" -#: ../src/dialog_font.tcl:98 -#: ../src/dialog_font.tcl:117 -#: ../src/dialog_font.tcl:125 msgid "X only" msgstr "Μόνο Χ" -#: ../src/dialog_font.tcl:100 -#: ../src/dialog_font.tcl:119 -#: ../src/dialog_font.tcl:127 msgid "Y only" msgstr "Μόνο Y" -#: ../src/dialog_gatom.tcl:93 msgid "Atom Box Properties" msgstr "Ιδιότητες Atom Box" -#: ../src/dialog_gatom.tcl:99 msgid "Width:" msgstr "Εύρος:" -#: ../src/dialog_gatom.tcl:103 msgid "Limits" msgstr "Όρια" -#: ../src/dialog_gatom.tcl:107 msgid "Lower:" msgstr "Κατώτερο:" -#: ../src/dialog_gatom.tcl:112 -#: ../src/dialog_gatom.tcl:113 msgid "Upper:" msgstr "Ανώτερο:" -#: ../src/dialog_gatom.tcl:116 -#: ../src/dialog_gatom.tcl:121 -#: ../src/dialog_iemgui.tcl:600 -#: ../src/dialog_iemgui.tcl:652 -#: ../src/dialog_iemgui.tcl:657 msgid "Label" msgstr "Ετικέτα" -#: ../src/dialog_gatom.tcl:124 -#: ../src/dialog_gatom.tcl:129 -msgid "Left " +#, fuzzy +msgid "Left" msgstr "Αριστερά" -#: ../src/dialog_gatom.tcl:126 -#: ../src/dialog_gatom.tcl:131 msgid "Right" msgstr "Δεξιά" -#: ../src/dialog_gatom.tcl:128 -#: ../src/dialog_gatom.tcl:133 msgid "Top" msgstr "Κορυφή" -#: ../src/dialog_gatom.tcl:130 -#: ../src/dialog_gatom.tcl:135 msgid "Bottom" msgstr "Κάτω" -#: ../src/dialog_gatom.tcl:137 -#: ../src/dialog_gatom.tcl:145 -#: ../src/dialog_iemgui.tcl:574 msgid "Messages" msgstr "Μηνύματα" -#: ../src/dialog_gatom.tcl:141 -#: ../src/dialog_gatom.tcl:149 -#: ../src/dialog_iemgui.tcl:578 msgid "Send symbol:" msgstr "Αποστολή symbol:" -#: ../src/dialog_gatom.tcl:147 -#: ../src/dialog_gatom.tcl:155 -#: ../src/dialog_iemgui.tcl:585 msgid "Receive symbol:" msgstr "Λήψη συμβόλου:" -#: ../src/dialog_iemgui.tcl:197 msgid "Background color" msgstr "Χρώμα φόντου" -#: ../src/dialog_iemgui.tcl:204 msgid "Foreground color" msgstr "Χρώμα πρώτου πλάνου" -#: ../src/dialog_iemgui.tcl:211 msgid "Label color" msgstr "Χρώμα ετικέτας" -#: ../src/dialog_iemgui.tcl:272 msgid "Init" msgstr "" -#: ../src/dialog_iemgui.tcl:275 -#: ../src/dialog_iemgui.tcl:546 msgid "No init" msgstr "" -#: ../src/dialog_iemgui.tcl:287 -#: ../src/dialog_iemgui.tcl:558 #, fuzzy msgid "Jump on click" msgstr "Μεταπήδηση στο κλικ" -#: ../src/dialog_iemgui.tcl:290 -#: ../src/dialog_iemgui.tcl:561 #, fuzzy msgid "Steady on click" msgstr "Σταθερότητα στο κλικ" -#: ../src/dialog_iemgui.tcl:498 +msgid "Bang" +msgstr "" + +#, fuzzy +msgid "Flash Time (msec)" +msgstr "Καθυστέρηση (msec):" + +msgid "Intrrpt:" +msgstr "" + +msgid "Hold:" +msgstr "" + +msgid "Toggle" +msgstr "" + +msgid "Non Zero Value" +msgstr "" + +msgid "Value:" +msgstr "" + +msgid "Number2" +msgstr "" + +msgid "Width (digits):" +msgstr "" + +#, fuzzy +msgid "Height:" +msgstr "Δεξιά" + +msgid "Output Range" +msgstr "" + +msgid "Log height:" +msgstr "" + +msgid "Vslider" +msgstr "Κάθετο slider" + +msgid "Hslider" +msgstr "Οριζόντιο slider" + +#, fuzzy +msgid "Vradio" +msgstr "Κάθετο radio" + +msgid "Num cells:" +msgstr "" + +#, fuzzy +msgid "Hradio" +msgstr "Οριζόντιο radio" + +msgid "VU Meter" +msgstr "Μετρητής VU" + +msgid "Canvas" +msgstr "Καμβάς" + +msgid "Visible Rectangle (pix)" +msgstr "" + #, tcl-format msgid "%s Properties" msgstr "%s Ιδιότητες" -#: ../src/dialog_iemgui.tcl:550 -#: ../src/pd_menus.tcl:83 -#: ../src/pd_menus.tcl:84 -#: ../src/pd_menus.tcl:129 -#: ../src/pd_menus.tcl:130 -#: ../src/pd_menus.tcl:260 -#: ../src/pd_menus.tcl:273 -#: ../src/pd_menus.tcl:288 -#: ../src/pd_menus.tcl:301 -#: ../src/pd_menus.tcl:325 -#: ../src/pd_menus.tcl:338 -#: ../src/pd_menus.tcl:355 -#: ../src/pd_menus.tcl:382 -#: ../src/pd_menus.tcl:383 -#: ../src/pd_menus.tcl:410 -#: ../src/pd_menus.tcl:422 -#: ../src/pd_menus.tcl:449 -msgid "Save" -msgstr "Αποθήκευση" +msgid "Parameters" +msgstr "" -#: ../src/dialog_iemgui.tcl:608 -msgid "X offset" +#, fuzzy +msgid "X offset:" msgstr "Παράθεση Χ" -#: ../src/dialog_iemgui.tcl:611 -#: ../src/dialog_iemgui.tcl:612 -msgid "Y offset" +#, fuzzy +msgid "Y offset:" msgstr "Παράθεση Υ" -#: ../src/dialog_iemgui.tcl:642 -#: ../src/dialog_iemgui.tcl:645 msgid "Colors" msgstr "Χρώματα" -#: ../src/dialog_iemgui.tcl:648 -#: ../src/dialog_iemgui.tcl:651 msgid "Background" msgstr "Φόντο" -#: ../src/dialog_iemgui.tcl:650 -#: ../src/dialog_iemgui.tcl:654 msgid "Front" msgstr "Πρώτο Πλάνο" -#: ../src/dialog_iemgui.tcl:662 -#: ../src/dialog_iemgui.tcl:668 msgid "Compose color" msgstr "Σύνθεση χρώματος" -#: ../src/dialog_iemgui.tcl:682 -#: ../src/dialog_iemgui.tcl:688 -#, fuzzy msgid "Test label" msgstr "" -#: ../src/dialog_midi.tcl:85 +#, fuzzy +msgid "Send a Pd message" +msgstr "Αποστολή Μηνύματος..." + +msgid "(use arrow keys for history)" +msgstr "" + msgid "MIDI Settings" msgstr "Ρυθμίσεις MIDI" -#: ../src/dialog_midi.tcl:220 msgid "ALSA MIDI Settings" msgstr "Ρυθμίσεις ALSA MIDI" -#: ../src/dialog_midi.tcl:331 -msgid "Use multiple ALSA devices" -msgstr "Χρήση πολλαπλών συσκευών ALSA" - -#: ../src/dialog_midi.tcl:337 msgid "In Ports:" msgstr "Θύρες Εισόδου:" -#: ../src/dialog_midi.tcl:340 msgid "Out Ports:" msgstr "Θύρες Εξόδου:" -#: ../src/g_editor.c:1663 -msgid "Discard changes to this window??" -msgstr "Απόρριψη αλλαγών σε αυτό το παράθυρο;;" +msgid "Pd search path for objects, help, fonts, and other files" +msgstr "" + +msgid "Use standard paths" +msgstr "" + +msgid "Verbose" +msgstr "" + +msgid "Pd Documents Directory" +msgstr "" + +msgid "Browse" +msgstr "" + +msgid "Reset" +msgstr "" + +msgid "Disable" +msgstr "" + +msgid "Externals Install Directory" +msgstr "" + +#, fuzzy +msgid "Clear" +msgstr "Καθαρισμός Μενού" + +msgid "Choose Pd documents directory:" +msgstr "" + +msgid "Install externals to directory:" +msgstr "" + +msgid "Add a new path" +msgstr "" + +msgid "Add new library" +msgstr "" + +msgid "Edit library" +msgstr "" + +msgid "Pd libraries to load on startup" +msgstr "" + +msgid "Startup flags:" +msgstr "" + +msgid "Defeat real-time scheduling" +msgstr "" -#: ../src/g_editor.c:1668 #, fuzzy -msgid "really quit?" -msgstr "έξοδος οπωσδήποτε;" - -#: ../src/g_editor.c:1699 -msgid "Close this window??" -msgstr "Κλείσιμο αυτού του παραθύρου;;" - -#: ../src/pd-gui.tcl:185 -#: ../src/pd-gui.tcl:195 -#: ../src/pd-gui.tcl:206 -msgid "Associated Files" -msgstr "Συνδεόμενα Αρχεία" - -#: ../src/pd-gui.tcl:186 -#: ../src/pd-gui.tcl:196 -#: ../src/pd-gui.tcl:207 -msgid "Pd Files" -msgstr "Αρχεία Pd" - -#: ../src/pd-gui.tcl:187 -#: ../src/pd-gui.tcl:208 -msgid "Max Patch Files" -msgstr "Αρχεία Patch από MAX" - -#: ../src/pd-gui.tcl:188 -#: ../src/pd-gui.tcl:209 -msgid "Max Text Files" -msgstr "Αρχεία Κειμένου από MAX" - -#: ../src/pd-gui.tcl:197 -msgid "Max Patch Files (.pat)" -msgstr "Αρχεία Patch από MAX (.pat)" - -#: ../src/pd-gui.tcl:198 -msgid "Max Text Files (.mxt)" -msgstr "Αρχεία Κειμένου από MAX (.mxt)" - -#: ../src/pd-gui.tcl:270 +msgid "Help Browser" +msgstr "Πλοήγηση..." + +msgid "(Tcl) MISSING CLOSE-BRACE '}': " +msgstr "" + +msgid "(Tcl) INVALID COMMAND NAME: " +msgstr "" + +msgid "(Tcl) UNHANDLED ERROR: " +msgstr "" + #, tcl-format -msgid "WARNING: Font family '%s' not found, using default (%s)" -msgstr "ΠΡΟΣΟΧΗ: Η οικογένεια γραμματοσειράς '%s' δεν βρέθηκε, χρήση προεπιλογής (%s)" +msgid "[deken]: installed version [%1$s] > %2$s...skipping!" +msgstr "" -#: ../src/pd-gui.tcl:278 #, tcl-format -msgid "WARNING: Font weight '%s' not found, using default (%s)" -msgstr "ΠΡΟΣΟΧΗ: Το βάρος γραμματοσειράς '%s' δεν βρέθηκε, χρήση προεπιλογής (%s)" +msgid "[deken]: installed version [%1$s] < %2$s...overwriting!" +msgstr "" -#: ../src/pd-gui.tcl:303 -#, fuzzy, tcl-format -msgid "ERROR: %s failed to find font size (%s) that fits into %sx%s!" -msgstr "ΣΦΑΛΜΑ: %s αποτυχία εύρεσης μεγέθους γραμματοσειράς (%s) που προσαρμόζεται στο %sx%s!" +#, tcl-format +msgid "[deken]: installed version [%1$s] == %2$s...skipping!" +msgstr "" -#: ../src/pd-gui.tcl:478 -msgid "ERROR: 'pd' never showed up, 'pd-gui' quitting!" -msgstr "ΣΦΑΛΜΑ: το 'pd' δεν εμφανίστηκε ποτέ, έξοδος του 'pd-gui'!" +msgid "[deken]: " +msgstr "" -#: ../src/pd_menucommands.tcl:19 -msgid "Untitled" -msgstr "Ανώνυμο" +#, tcl-format +msgid "Successfully unzipped %1$s into %2$s." +msgstr "" -#: ../src/pd_menucommands.tcl:78 -#: ../src/pd_menucommands.tcl:79 -#: ../src/pd_menucommands.tcl:90 -msgid "Send Message..." -msgstr "Αποστολή Μηνύματος..." +msgid "[deken]: Unable to extract package automatically." +msgstr "" -#: ../src/pd_menucommands.tcl:82 -#: ../src/pd_menucommands.tcl:83 -#: ../src/pd_menucommands.tcl:94 -#: ../src/pd_menus.tcl:87 -#: ../src/pd_menus.tcl:88 -#: ../src/pd_menus.tcl:133 -#: ../src/pd_menus.tcl:134 -#: ../src/pd_menus.tcl:147 -#: ../src/pd_menus.tcl:192 -#: ../src/pd_menus.tcl:193 -#: ../src/pd_menus.tcl:265 -#: ../src/pd_menus.tcl:278 -#: ../src/pd_menus.tcl:292 -#: ../src/pd_menus.tcl:305 -#: ../src/pd_menus.tcl:329 -#: ../src/pd_menus.tcl:342 -#: ../src/pd_menus.tcl:360 -#: ../src/pd_menus.tcl:387 -#: ../src/pd_menus.tcl:414 -#: ../src/pd_menus.tcl:426 -#: ../src/pd_menus.tcl:453 -#: ../startup/object_db.tcl:123 -msgid "Message" -msgstr "Μήνυμα" +msgid "Please perform the following steps manually:" +msgstr "" -#: ../src/pd_menucommands.tcl:108 -#: ../src/pd_menucommands.tcl:111 -#: ../src/pd_menus.tcl:112 -#: ../src/pd_menus.tcl:113 -#: ../src/pd_menus.tcl:117 -#: ../src/pd_menus.tcl:118 -#: ../src/pd_menus.tcl:158 -#: ../src/pd_menus.tcl:159 -#: ../src/pd_menus.tcl:163 -#: ../src/pd_menus.tcl:164 -msgid "Font" -msgstr "Γραμματοσειρά" +#, tcl-format +msgid "1. Unzip %s." +msgstr "" + +#, tcl-format +msgid "2. Copy the contents into %s." +msgstr "" + +#, tcl-format +msgid "[deken] uninstalling '%s'" +msgstr "" + +#, tcl-format +msgid "Uninstalling %1$s from %2$s failed!" +msgstr "" + +#, tcl-format +msgid "[deken] deken-plugin.tcl (Pd externals search) loaded from %s." +msgstr "" + +#, tcl-format +msgid "[deken] Platform detected: %s" +msgstr "" + +#, tcl-format +msgid "[deken] Platform re-detected: %s" +msgstr "" + +msgid "Show all" +msgstr "" + +#, fuzzy +msgid "Search" +msgstr "Αναζήτηση σε" + +msgid "To get a list of all available externals, try an empty search." +msgstr "" + +msgid "Find externals" +msgstr "" + +msgid "Only install externals uploaded by people you trust." +msgstr "" -#: ../src/pd_menucommands.tcl:123 -#: ../src/pd_menucommands.tcl:126 -#: ../src/pd_menus.tcl:138 -#: ../src/pd_menus.tcl:183 -#: ../src/pd_menus.tcl:184 msgid "Preferences" msgstr "Προτιμήσεις" -#: ../src/pd_menus.tcl:45 -msgid "Edit" -msgstr "Επεξεργασία" +msgid "Installation options:" +msgstr "" -#: ../src/pd_menus.tcl:45 -msgid "File" -msgstr "Αρχείο" +msgid "Try to remove libraries before (re)installing them?" +msgstr "" -#: ../src/pd_menus.tcl:45 -#: ../src/pdtk_canvas.tcl:48 -#: ../src/pdtk_canvas.tcl:113 -msgid "Help" -msgstr "Βοήθεια" +msgid "Show README of newly installed libraries (if present)?" +msgstr "" -#: ../src/pd_menus.tcl:45 -msgid "Media" -msgstr "Μέσα" +msgid "Should newly installed libraries be added to Pd's search path?" +msgstr "" -#: ../src/pd_menus.tcl:45 -msgid "Put" -msgstr "Προσθήκη" +msgid "Platform settings:" +msgstr "" -#: ../src/pd_menus.tcl:45 -msgid "Window" -msgstr "Παράθυρο" +#, tcl-format +msgid "Default platform: %s" +msgstr "" -#: ../src/pd_menus.tcl:81 -#: ../src/pd_menus.tcl:82 -#: ../src/pd_menus.tcl:127 -#: ../src/pd_menus.tcl:128 -#: ../src/pd_menus.tcl:255 -#: ../src/pd_menus.tcl:267 -#: ../src/pd_menus.tcl:285 -#: ../src/pd_menus.tcl:298 -#: ../src/pd_menus.tcl:322 -#: ../src/pd_menus.tcl:335 -#: ../src/pd_menus.tcl:349 -#: ../src/pd_menus.tcl:376 -#: ../src/pd_menus.tcl:380 -#: ../src/pd_menus.tcl:407 -#: ../src/pd_menus.tcl:419 -#: ../src/pd_menus.tcl:446 -msgid "New" -msgstr "Νέο" +msgid "User-defined platform:" +msgstr "" -#: ../src/pd_menus.tcl:82 -#: ../src/pd_menus.tcl:83 -#: ../src/pd_menus.tcl:128 -#: ../src/pd_menus.tcl:129 -#: ../src/pd_menus.tcl:256 -#: ../src/pd_menus.tcl:268 -#: ../src/pd_menus.tcl:286 -#: ../src/pd_menus.tcl:299 -#: ../src/pd_menus.tcl:323 -#: ../src/pd_menus.tcl:336 -#: ../src/pd_menus.tcl:350 -#: ../src/pd_menus.tcl:377 -#: ../src/pd_menus.tcl:381 -#: ../src/pd_menus.tcl:408 -#: ../src/pd_menus.tcl:420 -#: ../src/pd_menus.tcl:447 -#: ../src/pdtk_canvas.tcl:46 -#: ../src/pdtk_canvas.tcl:111 -#: ../src/pdtk_canvas.tcl:131 -#: ../src/pdtk_canvas.tcl:133 -msgid "Open" -msgstr "Άνοιγμα" +msgid "Hide foreign architectures?" +msgstr "" + +#, fuzzy, tcl-format +msgid "Deken %s Preferences" +msgstr "Προτιμήσεις" + +msgid "[deken]: Start searching for externals..." +msgstr "" + +#, tcl-format +msgid "[deken]: online? %s" +msgstr "" + +msgid "Are you online?" +msgstr "" + +msgid "Unable to perform search." +msgstr "" + +msgid "[deken]: No matching externals found." +msgstr "" + +msgid "Try using the full name e.g. 'freeverb'." +msgstr "" + +msgid "No matching externals found." +msgstr "" + +msgid "Please select a (writable) installation directory!" +msgstr "" + +#, tcl-format +msgid "Install %1$s to %2$s?" +msgstr "" + +#, tcl-format +msgid "" +"Commencing downloading of:\n" +"%1$s\n" +"Into %2$s..." +msgstr "" + +#, fuzzy +msgid "aborting.\n" +msgstr "Δρομολόγηση" + +#, tcl-format +msgid "Unable to add %s to search paths" +msgstr "" + +#, tcl-format +msgid "Add %s to the Pd search paths?" +msgstr "" + +#, tcl-format +msgid "Added %s to search paths" +msgstr "" + +#, tcl-format +msgid "Unable to download from %1$s [%2$s]" +msgstr "" + +#, tcl-format +msgid "Unable to remove stray file %s" +msgstr "" + +#, tcl-format +msgid "Unable to rename downloaded file to %s" +msgstr "" + +#, fuzzy, tcl-format +msgid "searching for '%s'" +msgstr "Απόρριψη αλλαγών σε '%s';" + +#, tcl-format +msgid "Uploaded by %1$s @ %2$s" +msgstr "" + +msgid "Install package" +msgstr "" + +#, fuzzy +msgid "Open webpage" +msgstr "Άνοιγμα Πρόσφατου" + +msgid "_" +msgstr "" + +#, tcl-format +msgid "" +"Do you want Pd to create a documents directory for patches and external " +"libraries?\n" +"\n" +"Location: %s\n" +"\n" +"You can change or disable this later in the Path preferences." +msgstr "" + +#, tcl-format +msgid "" +"Pd documents directory cannot be found:\n" +"\n" +"%s\n" +"\n" +"Choose a new location?" +msgstr "" + +#, tcl-format +msgid "Couldn't create Pd documents directory: %s\n" +msgstr "" + +#, tcl-format +msgid "Couldn't create \"externals\" directory in: %s\n" +msgstr "" + +#, tcl-format +msgid "Couldn't create preferences \"%1$s\" in %2$s" +msgstr "" + +msgid "About Pd" +msgstr "Περί..." + +msgid "Save" +msgstr "Αποθήκευση" -#: ../src/pd_menus.tcl:84 -#: ../src/pd_menus.tcl:85 -#: ../src/pd_menus.tcl:130 -#: ../src/pd_menus.tcl:131 -#: ../src/pd_menus.tcl:261 -#: ../src/pd_menus.tcl:274 -#: ../src/pd_menus.tcl:289 -#: ../src/pd_menus.tcl:302 -#: ../src/pd_menus.tcl:326 -#: ../src/pd_menus.tcl:339 -#: ../src/pd_menus.tcl:356 -#: ../src/pd_menus.tcl:383 -#: ../src/pd_menus.tcl:384 -#: ../src/pd_menus.tcl:411 -#: ../src/pd_menus.tcl:423 -#: ../src/pd_menus.tcl:450 msgid "Save As..." msgstr "Αποθήκευση Ως..." -#: ../src/pd_menus.tcl:88 -#: ../src/pd_menus.tcl:89 -#: ../src/pd_menus.tcl:134 -#: ../src/pd_menus.tcl:135 -#: ../src/pd_menus.tcl:267 -#: ../src/pd_menus.tcl:280 -#: ../src/pd_menus.tcl:293 -#: ../src/pd_menus.tcl:306 -#: ../src/pd_menus.tcl:330 -#: ../src/pd_menus.tcl:343 -#: ../src/pd_menus.tcl:362 -#: ../src/pd_menus.tcl:388 -#: ../src/pd_menus.tcl:389 -#: ../src/pd_menus.tcl:415 -#: ../src/pd_menus.tcl:427 -#: ../src/pd_menus.tcl:454 msgid "Print..." msgstr "Εκτύπωση..." -#: ../src/pd_menus.tcl:93 -#: ../src/pd_menus.tcl:94 -#: ../src/pd_menus.tcl:139 -#: ../src/pd_menus.tcl:140 +msgid "Paste Replace" +msgstr "" + +msgid "Duplicate" +msgstr "Αντίγραφο" + +#, fuzzy +msgid "Zoom In" +msgstr "Εστίαση" + +#, fuzzy +msgid "Zoom Out" +msgstr "Εστίαση" + +msgid "Tidy Up" +msgstr "Τακτοποίηση" + +msgid "(Dis)Connect Selection" +msgstr "" + +msgid "Triggerize" +msgstr "" + +msgid "Edit Mode" +msgstr "Κατάσταση Επεξεργασίας" + msgid "Undo" msgstr "Αναίρεση" -#: ../src/pd_menus.tcl:95 -#: ../src/pd_menus.tcl:96 -#: ../src/pd_menus.tcl:141 -#: ../src/pd_menus.tcl:142 msgid "Redo" msgstr "Ακύρωση Αναίρεσης" -#: ../src/pd_menus.tcl:98 -#: ../src/pd_menus.tcl:99 -#: ../src/pd_menus.tcl:144 -#: ../src/pd_menus.tcl:145 +msgid "List of objects..." +msgstr "" + +msgid "New" +msgstr "Νέο" + +msgid "Open" +msgstr "Άνοιγμα" + +#, fuzzy +msgid "Message..." +msgstr "Μήνυμα" + msgid "Cut" msgstr "Αποκοπή" -#: ../src/pd_menus.tcl:104 -#: ../src/pd_menus.tcl:105 -#: ../src/pd_menus.tcl:150 -#: ../src/pd_menus.tcl:151 -msgid "Duplicate" -msgstr "Αντίγραφο" - -#: ../src/pd_menus.tcl:106 -#: ../src/pd_menus.tcl:107 -#: ../src/pd_menus.tcl:152 -#: ../src/pd_menus.tcl:153 msgid "Select All" msgstr "Επιλογή Όλων" -#: ../src/pd_menus.tcl:110 -#: ../src/pd_menus.tcl:111 -#: ../src/pd_menus.tcl:115 -#: ../src/pd_menus.tcl:116 -#: ../src/pd_menus.tcl:156 -#: ../src/pd_menus.tcl:157 -#: ../src/pd_menus.tcl:161 -#: ../src/pd_menus.tcl:162 -msgid "Text Editor" -msgstr "Επεξεργαστής Κειμένου" - -#: ../src/pd_menus.tcl:120 -#: ../src/pd_menus.tcl:121 -#: ../src/pd_menus.tcl:166 -#: ../src/pd_menus.tcl:167 -msgid "Tidy Up" -msgstr "Τακτοποίηση" - -#: ../src/pd_menus.tcl:122 -#: ../src/pd_menus.tcl:123 -#: ../src/pd_menus.tcl:168 -#: ../src/pd_menus.tcl:169 -msgid "Toggle Console" -msgstr "Εναλλαγή Κονσόλας" - -#: ../src/pd_menus.tcl:124 -#: ../src/pd_menus.tcl:125 -#: ../src/pd_menus.tcl:170 -#: ../src/pd_menus.tcl:171 msgid "Clear Console" msgstr "Καθαρισμός Κονσόλας" -#: ../src/pd_menus.tcl:128 -#: ../src/pd_menus.tcl:129 -#: ../src/pd_menus.tcl:174 -#: ../src/pd_menus.tcl:175 -msgid "Edit Mode" -msgstr "Κατάσταση Επεξεργασίας" - -#: ../src/pd_menus.tcl:145 -#: ../src/pd_menus.tcl:190 -#: ../src/pd_menus.tcl:191 msgid "Object" msgstr "" -#: ../src/pd_menus.tcl:149 -#: ../src/pd_menus.tcl:194 -#: ../src/pd_menus.tcl:195 +msgid "Message" +msgstr "Μήνυμα" + msgid "Number" msgstr "" -#: ../src/pd_menus.tcl:151 -#: ../src/pd_menus.tcl:196 -#: ../src/pd_menus.tcl:197 msgid "Symbol" msgstr "" -#: ../src/pd_menus.tcl:153 -#: ../src/pd_menus.tcl:198 -#: ../src/pd_menus.tcl:199 msgid "Comment" msgstr "Σχόλιο" -#: ../src/pd_menus.tcl:156 -#: ../src/pd_menus.tcl:201 -#: ../src/pd_menus.tcl:202 -msgid "Bang" -msgstr "" - -#: ../src/pd_menus.tcl:158 -#: ../src/pd_menus.tcl:203 -#: ../src/pd_menus.tcl:204 -msgid "Toggle" -msgstr "" - -#: ../src/pd_menus.tcl:160 -#: ../src/pd_menus.tcl:205 -#: ../src/pd_menus.tcl:206 -msgid "Number2" -msgstr "" - -#: ../src/pd_menus.tcl:162 -#: ../src/pd_menus.tcl:207 -#: ../src/pd_menus.tcl:208 -msgid "Vslider" -msgstr "Κάθετο slider" - -#: ../src/pd_menus.tcl:164 -#: ../src/pd_menus.tcl:209 -#: ../src/pd_menus.tcl:210 -msgid "Hslider" -msgstr "Οριζόντιο slider" - -#: ../src/pd_menus.tcl:166 -#: ../src/pd_menus.tcl:211 -#: ../src/pd_menus.tcl:212 -#, fuzzy -msgid "Vradio" -msgstr "Κάθετο radio" - -#: ../src/pd_menus.tcl:168 -#: ../src/pd_menus.tcl:213 -#: ../src/pd_menus.tcl:214 -#, fuzzy -msgid "Hradio" -msgstr "Οριζόντιο radio" - -#: ../src/pd_menus.tcl:170 -#: ../src/pd_menus.tcl:215 -#: ../src/pd_menus.tcl:216 -msgid "VU Meter" -msgstr "Μετρητής VU" - -#: ../src/pd_menus.tcl:172 -#: ../src/pd_menus.tcl:217 -#: ../src/pd_menus.tcl:218 -msgid "Canvas" -msgstr "Καμβάς" - -#: ../src/pd_menus.tcl:175 -#: ../src/pd_menus.tcl:220 -#: ../src/pd_menus.tcl:221 msgid "Graph" msgstr "Γράφημα" -#: ../src/pd_menus.tcl:176 -#: ../src/pd_menus.tcl:221 -#: ../src/pd_menus.tcl:222 -msgid "Array" -msgstr "Πίνακας" - -#: ../src/pd_menus.tcl:181 -#: ../src/pd_menus.tcl:226 -#: ../src/pd_menus.tcl:227 msgid "Find..." msgstr "Εύρεση..." -#: ../src/pd_menus.tcl:183 -#: ../src/pd_menus.tcl:228 -#: ../src/pd_menus.tcl:229 msgid "Find Again" msgstr "Εύρεση εκ νέου" -#: ../src/pd_menus.tcl:185 -#: ../src/pd_menus.tcl:230 -#: ../src/pd_menus.tcl:231 msgid "Find Last Error" msgstr "Εύρεση Τελευταίου Σφάλματος" -#: ../src/pd_menus.tcl:191 -#: ../src/pd_menus.tcl:236 -#: ../src/pd_menus.tcl:237 msgid "DSP On" msgstr "Ενεργοποίηση DSP" -#: ../src/pd_menus.tcl:193 -#: ../src/pd_menus.tcl:238 -#: ../src/pd_menus.tcl:239 msgid "DSP Off" msgstr "Απενεργοποίση DSP" -#: ../src/pd_menus.tcl:196 -#: ../src/pd_menus.tcl:242 -#: ../src/pd_menus.tcl:269 msgid "Test Audio and MIDI..." msgstr "Έλεγχος 'Ηχου και MIDI..." -#: ../src/pd_menus.tcl:198 -#: ../src/pd_menus.tcl:244 -#: ../src/pd_menus.tcl:271 msgid "Load Meter" msgstr "Φόρτωση Μετρητή" -#: ../src/pd_menus.tcl:205 -#: ../src/pd_menus.tcl:251 -#: ../src/pd_menus.tcl:278 +msgid "Audio Settings..." +msgstr "Ρυθμίσεις Ήχου..." + +msgid "MIDI Settings..." +msgstr "Ρυθμίσεις MIDI..." + msgid "Minimize" msgstr "Ελαχιστοποιήση" -#: ../src/pd_menus.tcl:207 -#: ../src/pd_menus.tcl:253 -#: ../src/pd_menus.tcl:280 msgid "Zoom" msgstr "Εστίαση" -#: ../src/pd_menus.tcl:210 -#: ../src/pd_menus.tcl:256 -#: ../src/pd_menus.tcl:283 -msgid "Parent Window" -msgstr "Γονεϊκό Παράθυρο" - -#: ../src/pd_menus.tcl:216 -#: ../src/pd_menus.tcl:262 -#: ../src/pd_menus.tcl:289 msgid "Bring All to Front" msgstr "Μεταφορά Όλων σε Πρώτο Πλάνο" -#: ../src/pd_menus.tcl:224 -#: ../src/pd_menus.tcl:241 -#: ../src/pd_menus.tcl:253 -#: ../src/pd_menus.tcl:270 -#: ../src/pd_menus.tcl:297 -#: ../src/pd_menus.tcl:335 -#: ../src/pd_menus.tcl:362 -msgid "About Pd" -msgstr "Περί..." +#, fuzzy +msgid "Next Window" +msgstr "Γονεϊκό Παράθυρο" + +#, fuzzy +msgid "Previous Window" +msgstr "Γονεϊκό Παράθυρο" + +msgid "Parent Window" +msgstr "Γονεϊκό Παράθυρο" -#: ../src/pd_menus.tcl:227 -#: ../src/pd_menus.tcl:273 -#: ../src/pd_menus.tcl:300 msgid "HTML Manual..." msgstr "Εγχειρίδιο HTML..." -#: ../src/pd_menus.tcl:229 -#: ../src/pd_menus.tcl:275 -#: ../src/pd_menus.tcl:302 #, fuzzy msgid "Browser..." msgstr "Πλοήγηση..." -#: ../src/pd_menus.tcl:248 -#: ../src/pd_menus.tcl:260 -#: ../src/pd_menus.tcl:342 -#: ../src/pd_menus.tcl:369 -msgid "Preferences..." -msgstr "Προτιμήσεις..." - -#: ../src/pd_menus.tcl:257 -#: ../src/pd_menus.tcl:270 -#: ../src/pd_menus.tcl:352 -#: ../src/pd_menus.tcl:379 -msgid "Open Recent" -msgstr "Άνοιγμα Πρόσφατου" +msgid "puredata.info" +msgstr "" -#: ../src/pd_menus.tcl:263 -msgid "Audio Settings..." +msgid "Report a bug" +msgstr "" + +msgid "Clear Menu" +msgstr "Καθαρισμός Μενού" + +msgid "" +"Delete all preferences?\n" +"(takes effect when Pd is restarted)" +msgstr "" + +msgid "Path..." +msgstr "" + +msgid "Startup..." +msgstr "" + +#, fuzzy +msgid "Audio..." msgstr "Ρυθμίσεις Ήχου..." -#: ../src/pd_menus.tcl:265 -msgid "MIDI Settings..." +#, fuzzy +msgid "MIDI..." msgstr "Ρυθμίσεις MIDI..." -#: ../src/pd_menus.tcl:296 -#: ../src/pd_menus.tcl:309 -#: ../src/pd_menus.tcl:333 -#: ../src/pd_menus.tcl:346 -#: ../src/pd_menus.tcl:393 -#: ../src/pd_menus.tcl:420 -#: ../src/pd_menus.tcl:432 -#: ../src/pd_menus.tcl:459 +#, fuzzy +msgid "Zoom New Windows" +msgstr "Γονεϊκό Παράθυρο" + +#, fuzzy +msgid "Save All Preferences" +msgstr "Προτιμήσεις" + +#, fuzzy +msgid "Save to..." +msgstr "Αποθήκευση Ως..." + +msgid "Load from..." +msgstr "" + +msgid "Forget All..." +msgstr "" + +msgid "Open Recent" +msgstr "Άνοιγμα Πρόσφατου" + msgid "Quit" msgstr "Έξοδος" -#: ../src/pd_menus.tcl:304 -#: ../src/pd_menus.tcl:331 -msgid "Clear Menu" -msgstr "Καθαρισμός Μενού" - -#: ../src/pdtk_canvas.tcl:44 -#: ../src/pdtk_canvas.tcl:109 -#: ../src/pdtk_canvas.tcl:126 -#: ../src/pdtk_canvas.tcl:128 msgid "Properties" msgstr "Ιδιότητες" -#: ../src/pdwindow.tcl:43 +#, fuzzy +msgid "Audio on" +msgstr "Ρυθμίσεις Ήχου" + +msgid "Audio off" +msgstr "" + +msgid "(Tcl) MISSING CLOSE-BRACKET ']': " +msgstr "" + +msgid "Tcl:" +msgstr "" + +msgid "Pd" +msgstr "" + msgid "DSP" msgstr "" -#: ../startup/object_db.tcl:113 -msgid "Signal" -msgstr "Σήμα" +msgid "Audio I/O error" +msgstr "" + +msgid "Log:" +msgstr "" -#: ../startup/object_db.tcl:114 -msgid "Generators" -msgstr "Γεννήτριες" +msgid "fatal" +msgstr "" -#: ../startup/object_db.tcl:115 -msgid "Filters" -msgstr "Φίλτρα" +msgid "error" +msgstr "" -#: ../startup/object_db.tcl:116 -#: ../startup/object_db.tcl:124 -msgid "Math" -msgstr "Μαθηματικά" +msgid "normal" +msgstr "" -#: ../startup/object_db.tcl:117 -#: ../startup/object_db.tcl:125 -msgid "I/O" +msgid "debug" msgstr "" -#: ../startup/object_db.tcl:118 -#: ../startup/object_db.tcl:126 -msgid "Sampling" -msgstr "Δειγματοληψία" +msgid "all" +msgstr "" -#: ../startup/object_db.tcl:119 -#: ../startup/object_db.tcl:128 -msgid "Routing" -msgstr "Δρομολόγηση" +msgid "New..." +msgstr "" -#: ../startup/object_db.tcl:120 -#: ../startup/object_db.tcl:129 -msgid "Others" -msgstr "Άλλα" +#, fuzzy +msgid "Edit..." +msgstr "Επεξεργασία" + +#, fuzzy +msgid "Delete" +msgstr "Διαγραφή πίνακα" -#: ../startup/object_db.tcl:127 -msgid "GUI" +#, tcl-format +msgid "Ignoring '%s': doesn't exist" msgstr "" +#, tcl-format +msgid "Ignoring '%s': doesn't look like a Pd-file" +msgstr "" + +#~ msgid "for:" +#~ msgstr "για:" + +#~ msgid "Output device 3:" +#~ msgstr "Συσκευή εξόδου 3:" + +#~ msgid "Preferences..." +#~ msgstr "Προτιμήσεις..." + +#~ msgid "Max Text Files (.mxt)" +#~ msgstr "Αρχεία Κειμένου από MAX (.mxt)" + +#~ msgid "Input device 2:" +#~ msgstr "Συσκευή εισόδου 2:" + +#, fuzzy +#~ msgid "really quit?" +#~ msgstr "έξοδος οπωσδήποτε;" + +#~ msgid "Max Text Files" +#~ msgstr "Αρχεία Κειμένου από MAX" + +#~ msgid "WARNING: Font weight '%s' not found, using default (%s)" +#~ msgstr "" +#~ "ΠΡΟΣΟΧΗ: Το βάρος γραμματοσειράς '%s' δεν βρέθηκε, χρήση προεπιλογής (%s)" + +#~ msgid "Generators" +#~ msgstr "Γεννήτριες" + #, fuzzy #~ msgid "Patch Font" #~ msgstr "Γραμματοσειρά του Patch" +#~ msgid "Output device 4:" +#~ msgstr "Συσκευή εξόδου 4:" + +#~ msgid "Use multiple ALSA devices" +#~ msgstr "Χρήση πολλαπλών συσκευών ALSA" + +#~ msgid "Output device 2:" +#~ msgstr "Συσκευή εξόδου 2:" + +#~ msgid "WARNING: Font family '%s' not found, using default (%s)" +#~ msgstr "" +#~ "ΠΡΟΣΟΧΗ: Η οικογένεια γραμματοσειράς '%s' δεν βρέθηκε, χρήση προεπιλογής " +#~ "(%s)" + +#~ msgid "Font Properties" +#~ msgstr "Ιδιότητες Γραμματοσειράς" + +#~ msgid "Untitled" +#~ msgstr "Ανώνυμο" + +#~ msgid "Filters" +#~ msgstr "Φίλτρα" + +#~ msgid "Max Patch Files (.pat)" +#~ msgstr "Αρχεία Patch από MAX (.pat)" + +#~ msgid "Discard changes to this window??" +#~ msgstr "Απόρριψη αλλαγών σε αυτό το παράθυρο;;" + +#~ msgid "Input device 4:" +#~ msgstr "Συσκευή εισόδου 4:" + +#~ msgid "Math" +#~ msgstr "Μαθηματικά" + +#~ msgid "ERROR: 'pd' never showed up, 'pd-gui' quitting!" +#~ msgstr "ΣΦΑΛΜΑ: το 'pd' δεν εμφανίστηκε ποτέ, έξοδος του 'pd-gui'!" + +#~ msgid "Max Patch Files" +#~ msgstr "Αρχεία Patch από MAX" + +#~ msgid "Input device 3:" +#~ msgstr "Συσκευή εισόδου 3:" + +#~ msgid "Associated Files" +#~ msgstr "Συνδεόμενα Αρχεία" + +#~ msgid "Close this window??" +#~ msgstr "Κλείσιμο αυτού του παραθύρου;;" + +#~ msgid "Pd Files" +#~ msgstr "Αρχεία Pd" + +#~ msgid "Signal" +#~ msgstr "Σήμα" + +#~ msgid "Toggle Console" +#~ msgstr "Εναλλαγή Κονσόλας" + +#~ msgid "Text Editor" +#~ msgstr "Επεξεργαστής Κειμένου" + +#~ msgid "Others" +#~ msgstr "Άλλα" + +#~ msgid "Sampling" +#~ msgstr "Δειγματοληψία" + +#, fuzzy +#~ msgid "ERROR: %s failed to find font size (%s) that fits into %sx%s!" +#~ msgstr "" +#~ "ΣΦΑΛΜΑ: %s αποτυχία εύρεσης μεγέθους γραμματοσειράς (%s) που " +#~ "προσαρμόζεται στο %sx%s!" diff --git a/po/en_ca.po b/po/en_ca.po index e474741d87..b17c081f9f 100644 --- a/po/en_ca.po +++ b/po/en_ca.po @@ -6,21 +6,93 @@ msgid "" msgstr "" "Project-Id-Version: Pure Data 0.43\n" "Report-Msgid-Bugs-To: pd-dev@iem.at\n" -"POT-Creation-Date: 2009-08-27 10:01-0400\n" +"POT-Creation-Date: 2017-07-06 16:55+0200\n" "PO-Revision-Date: 2009-08-25 18:19-0400\n" "Last-Translator: Ben Bogart \n" "Language-Team: Canadian English \n" +"Language: en_CA\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -msgid "Undo duplicate" +msgid "-------dimensions(digits)(pix):-------" msgstr "" -msgid "Undo paste" +msgid "--------dimensions(pix)(pix):--------" msgstr "" -msgid "Undo motion" +msgid "----------dimensions(pix):-----------" +msgstr "" + +msgid "--------flash-time(ms)(ms):---------" +msgstr "" + +msgid "-----------output-range:-----------" +msgstr "" + +msgid "------selectable_dimensions(pix):------" +msgstr "" + +msgid "------visible_rectangle(pix)(pix):------" +msgstr "" + +msgid "bottom:" +msgstr "" + +msgid "height:" +msgstr "" + +msgid "hold:" +msgstr "" + +msgid "intrrpt:" +msgstr "" + +msgid "left:" +msgstr "" + +msgid "lin" +msgstr "" + +msgid "log" +msgstr "" + +msgid "log-height:" +msgstr "" + +msgid "max:" +msgstr "" + +msgid "min:" +msgstr "" + +msgid "right:" +msgstr "" + +msgid "size:" +msgstr "" + +msgid "top:" +msgstr "" + +msgid "value:" +msgstr "" + +msgid "width:" +msgstr "" + +#, tcl-format +msgid "Do you want to save the changes you made in '%s'?" +msgstr "" + +#, tcl-format +msgid "Discard changes to '%s'?" +msgstr "" + +msgid "Undo clear" +msgstr "" + +msgid "Undo connect" msgstr "" msgid "Undo cut" @@ -29,859 +101,953 @@ msgstr "" msgid "Undo disconnect" msgstr "" -msgid "Undo connect" +msgid "Undo duplicate" msgstr "" -msgid "Undo clear" +msgid "Undo motion" +msgstr "" + +msgid "Undo paste" msgstr "" msgid "Undo typing" msgstr "" -msgid "Discard changes to '%s'?" +msgid "Redo clear" msgstr "" -msgid "Do you want to save the changes you made in '%s'?" +msgid "Redo connect" +msgstr "" + +msgid "Redo cut" +msgstr "" + +msgid "Redo disconnect" +msgstr "" + +msgid "Redo duplicate" +msgstr "" + +msgid "Redo motion" +msgstr "" + +msgid "Redo paste" +msgstr "" + +msgid "Redo typing" +msgstr "" + +msgid "no Pd settings to clear" +msgstr "" + +msgid "removed .pdsettings file" +msgstr "" + +msgid "couldn't delete .pdsettings file" +msgstr "" + +msgid "failed to erase Pd settings" +msgstr "" + +msgid "erased Pd settings" +msgstr "" + +msgid "no Pd settings to erase" +msgstr "" + +msgid "skipping loading preferences... Pd seems to have crashed on startup." +msgstr "" + +msgid "(re-save preferences to reinstate them)" +msgstr "" + +msgid "File" +msgstr "" + +msgid "Edit" +msgstr "" + +msgid "Put" +msgstr "" + +msgid "Find" +msgstr "" + +msgid "Media" +msgstr "" + +msgid "Window" +msgstr "" + +msgid "Help" +msgstr "" + +msgid "Show &Hidden Files and Directories" msgstr "" -#: ../src/dialog_array.tcl:115 ../src/dialog_array.tcl:117 -#: ../src/pd_menus.tcl:100 ../src/pd_menus.tcl:101 ../src/pd_menus.tcl:146 -#: ../src/pd_menus.tcl:147 msgid "Copy" msgstr "" -#: ../src/dialog_array.tcl:118 ../src/dialog_array.tcl:120 -#: ../src/pd_menus.tcl:102 ../src/pd_menus.tcl:103 ../src/pd_menus.tcl:148 -#: ../src/pd_menus.tcl:149 msgid "Paste" msgstr "" -#: ../src/dialog_array.tcl:264 ../src/dialog_array.tcl:266 msgid "Array Properties" msgstr "" -#: ../src/dialog_array.tcl:270 ../src/dialog_array.tcl:272 +msgid "Array" +msgstr "" + msgid "Name:" msgstr "" -#: ../src/dialog_array.tcl:276 ../src/dialog_array.tcl:278 -#: ../src/dialog_canvas.tcl:178 ../src/dialog_canvas.tcl:193 -#: ../src/dialog_iemgui.tcl:619 ../src/dialog_iemgui.tcl:621 msgid "Size:" msgstr "" -#: ../src/dialog_array.tcl:280 ../src/dialog_array.tcl:282 msgid "Save contents" msgstr "" -#: ../src/dialog_array.tcl:284 ../src/dialog_array.tcl:286 msgid "Draw as:" msgstr "" -#: ../src/dialog_array.tcl:287 ../src/dialog_array.tcl:289 -msgid "Points" +msgid "Polygon" msgstr "" -#: ../src/dialog_array.tcl:289 ../src/dialog_array.tcl:291 -msgid "Polygon" +msgid "Points" msgstr "" -#: ../src/dialog_array.tcl:291 ../src/dialog_array.tcl:293 msgid "Bezier curve" msgstr "Béziercurve" -#: ../src/dialog_array.tcl:297 ../src/dialog_array.tcl:299 msgid "Put array into:" msgstr "" -#: ../src/dialog_array.tcl:300 ../src/dialog_array.tcl:302 msgid "New graph" msgstr "" -#: ../src/dialog_array.tcl:302 ../src/dialog_array.tcl:304 msgid "Last graph" msgstr "" -#: ../src/dialog_array.tcl:306 ../src/dialog_array.tcl:308 -msgid "Delete array" +msgid "Options" msgstr "" -#: ../src/dialog_array.tcl:312 ../src/dialog_array.tcl:314 msgid "Open List View..." msgstr "" -#: ../src/dialog_array.tcl:319 ../src/dialog_array.tcl:321 -#: ../src/dialog_audio.tcl:136 ../src/dialog_canvas.tcl:205 -#: ../src/dialog_font.tcl:51 ../src/dialog_gatom.tcl:153 -#: ../src/dialog_gatom.tcl:161 ../src/dialog_iemgui.tcl:742 -#: ../src/dialog_iemgui.tcl:748 ../src/dialog_midi.tcl:91 -#: ../src/dialog_midi.tcl:226 +msgid "Delete array" +msgstr "" + msgid "Cancel" msgstr "" -#: ../src/dialog_array.tcl:321 ../src/dialog_array.tcl:323 -#: ../src/dialog_audio.tcl:138 ../src/dialog_canvas.tcl:207 -#: ../src/dialog_gatom.tcl:156 ../src/dialog_gatom.tcl:164 -#: ../src/dialog_iemgui.tcl:745 ../src/dialog_iemgui.tcl:751 -#: ../src/dialog_midi.tcl:93 ../src/dialog_midi.tcl:228 msgid "Apply" msgstr "" -#: ../src/dialog_array.tcl:323 ../src/dialog_array.tcl:325 -#: ../src/dialog_audio.tcl:140 ../src/dialog_canvas.tcl:209 -#: ../src/dialog_font.tcl:53 ../src/dialog_font.tcl:92 -#: ../src/dialog_font.tcl:100 ../src/dialog_font.tcl:101 -#: ../src/dialog_gatom.tcl:159 ../src/dialog_gatom.tcl:167 -#: ../src/dialog_iemgui.tcl:748 ../src/dialog_iemgui.tcl:754 -#: ../src/dialog_midi.tcl:95 ../src/dialog_midi.tcl:230 msgid "OK" msgstr "" -#: ../src/dialog_audio.tcl:130 msgid "Audio Settings" msgstr "" -#: ../src/dialog_audio.tcl:142 -msgid "Save All Settings" +msgid "Settings" msgstr "" -#: ../src/dialog_audio.tcl:151 msgid "Sample rate:" msgstr "" -#: ../src/dialog_audio.tcl:153 msgid "Delay (msec):" msgstr "" -#: ../src/dialog_audio.tcl:158 -msgid "Use callbacks" -msgstr "" - -#: ../src/dialog_audio.tcl:166 ../src/dialog_midi.tcl:105 -#: ../src/dialog_midi.tcl:241 -msgid "Input device 1:" -msgstr "" - -#: ../src/dialog_audio.tcl:169 ../src/dialog_audio.tcl:183 -#: ../src/dialog_audio.tcl:198 ../src/dialog_audio.tcl:213 -#: ../src/dialog_audio.tcl:232 ../src/dialog_audio.tcl:250 -#: ../src/dialog_audio.tcl:265 ../src/dialog_audio.tcl:280 -msgid "Channels:" -msgstr "" - -#: ../src/dialog_audio.tcl:179 ../src/dialog_midi.tcl:115 -#: ../src/dialog_midi.tcl:251 -msgid "Input device 2:" +msgid "Block size:" msgstr "" -#: ../src/dialog_audio.tcl:194 ../src/dialog_midi.tcl:127 -#: ../src/dialog_midi.tcl:263 -msgid "Input device 3:" +msgid "Use callbacks" msgstr "" -#: ../src/dialog_audio.tcl:209 ../src/dialog_midi.tcl:139 -#: ../src/dialog_midi.tcl:275 -msgid "Input device 4:" +msgid "Input Devices" msgstr "" -#: ../src/dialog_audio.tcl:223 ../src/dialog_midi.tcl:150 -#: ../src/dialog_midi.tcl:286 -msgid "Output device 1:" +msgid "Channels:" msgstr "" -#: ../src/dialog_audio.tcl:226 -msgid "(same as input device) .............. " +msgid "Output Devices" msgstr "" -#: ../src/dialog_audio.tcl:246 ../src/dialog_midi.tcl:160 -#: ../src/dialog_midi.tcl:296 -msgid "Output device 2:" +msgid "(same as input device)..." msgstr "" -#: ../src/dialog_audio.tcl:261 ../src/dialog_midi.tcl:171 -#: ../src/dialog_midi.tcl:307 -msgid "Output device 3:" +msgid "Use Multiple Devices" msgstr "" -#: ../src/dialog_audio.tcl:276 ../src/dialog_midi.tcl:182 -#: ../src/dialog_midi.tcl:318 -msgid "Output device 4:" +msgid "Save All Settings" msgstr "" -#: ../src/dialog_audio.tcl:291 ../src/dialog_midi.tcl:195 -msgid "Use multiple devices" +msgid "WARNING: unknown graphme flags received in pdtk_canvas_dialog" msgstr "" -#: ../src/dialog_canvas.tcl:142 msgid "Canvas Properties" msgstr "" -#: ../src/dialog_canvas.tcl:146 msgid "Scale" msgstr "" -#: ../src/dialog_canvas.tcl:150 msgid "X units per pixel:" msgstr "" -#: ../src/dialog_canvas.tcl:155 msgid "Y units per pixel:" msgstr "" -#: ../src/dialog_canvas.tcl:159 msgid "Appearance on parent patch" msgstr "" -#: ../src/dialog_canvas.tcl:161 msgid "Graph-On-Parent" msgstr "" -#: ../src/dialog_canvas.tcl:165 msgid "Hide object name and arguments" msgstr "" -#: ../src/dialog_canvas.tcl:170 msgid "Range and size" msgstr "" -#: ../src/dialog_canvas.tcl:174 -msgid "X range, from" +msgid "X range: from" msgstr "" -#: ../src/dialog_canvas.tcl:176 ../src/dialog_canvas.tcl:191 msgid "to" msgstr "" -#: ../src/dialog_canvas.tcl:180 ../src/dialog_canvas.tcl:195 msgid "Margin:" msgstr "" -#: ../src/dialog_canvas.tcl:189 -msgid "Y range, from" +msgid "Y range: from" msgstr "" -#: ../src/dialog_find.tcl:63 ../src/dialog_find.tcl:66 -#: ../src/dialog_find.tcl:79 ../src/dialog_find.tcl:80 -#: ../src/dialog_find.tcl:83 ../src/dialog_find.tcl:85 -#: ../src/dialog_find.tcl:87 ../src/dialog_find.tcl:101 -#: ../src/dialog_find.tcl:105 ../src/dialog_find.tcl:107 -#: ../src/pd_menus.tcl:45 -msgid "Find" +msgid "Data Properties" +msgstr "" + +#, tcl-format +msgid "Found '%1$s' in %2$s" msgstr "" -#: ../src/dialog_find.tcl:70 ../src/dialog_find.tcl:73 -#: ../src/dialog_find.tcl:87 ../src/dialog_find.tcl:91 -#: ../src/dialog_find.tcl:93 -msgid "Search in" +#, tcl-format +msgid "Couldn't find '%1$s' in %2$s" msgstr "" -#: ../src/dialog_find.tcl:72 ../src/dialog_find.tcl:75 -#: ../src/dialog_find.tcl:89 ../src/dialog_find.tcl:93 -#: ../src/dialog_find.tcl:95 -msgid "for:" +#, tcl-format +msgid "Search in %s for:" msgstr "" -#: ../src/dialog_find.tcl:83 ../src/dialog_find.tcl:90 -#: ../src/dialog_find.tcl:104 ../src/dialog_find.tcl:108 -#: ../src/dialog_find.tcl:110 ../src/pd_menus.tcl:86 ../src/pd_menus.tcl:87 -#: ../src/pd_menus.tcl:132 ../src/pd_menus.tcl:133 ../src/pd_menus.tcl:259 -#: ../src/pd_menus.tcl:272 ../src/pd_menus.tcl:295 ../src/pd_menus.tcl:308 -#: ../src/pd_menus.tcl:332 ../src/pd_menus.tcl:345 ../src/pd_menus.tcl:354 -#: ../src/pd_menus.tcl:381 ../src/pd_menus.tcl:392 ../src/pd_menus.tcl:419 -#: ../src/pd_menus.tcl:431 ../src/pd_menus.tcl:458 -msgid "Close" +#, tcl-format +msgid "Showed last '%1$s' in %2$s" msgstr "" -#: ../src/dialog_find.tcl:83 ../src/dialog_find.tcl:97 -#: ../src/dialog_find.tcl:101 ../src/dialog_find.tcl:103 -msgid "Match whole word only" +#, tcl-format +msgid "Showing '%1$d' out of %2$d items in %3$s" msgstr "" -#: ../src/dialog_find.tcl:92 ../src/dialog_font.tcl:49 -#: ../src/dialog_font.tcl:50 ../src/pd-gui.tcl:280 ../src/pd-gui.tcl:283 -#: ../src/pd-gui.tcl:286 ../src/pd-gui.tcl:288 ../src/pd-gui.tcl:291 -#: ../src/pd_menus.tcl:212 ../src/pd_menus.tcl:258 ../src/pd_menus.tcl:285 -#: ../src/pdwindow.tcl:33 msgid "Pd window" msgstr "" -#: ../src/dialog_font.tcl:45 -msgid "Font Properties" +msgid "Match whole word only" +msgstr "" + +msgid "Close" msgstr "" -#: ../src/dialog_font.tcl:46 ../src/dialog_font.tcl:54 -#: ../src/dialog_font.tcl:55 #, tcl-format msgid "%s Font" msgstr "" -#: ../src/dialog_font.tcl:61 ../src/dialog_font.tcl:96 -#: ../src/dialog_font.tcl:104 ../src/dialog_font.tcl:105 +msgid "Font" +msgstr "" + msgid "Font Size" msgstr "" -#: ../src/dialog_font.tcl:89 ../src/dialog_font.tcl:108 -#: ../src/dialog_font.tcl:116 ../src/dialog_font.tcl:117 msgid "Stretch" msgstr "" -#: ../src/dialog_font.tcl:96 ../src/dialog_font.tcl:115 -#: ../src/dialog_font.tcl:123 ../src/dialog_font.tcl:124 msgid "X and Y" msgstr "" -#: ../src/dialog_font.tcl:98 ../src/dialog_font.tcl:117 -#: ../src/dialog_font.tcl:125 ../src/dialog_font.tcl:126 msgid "X only" msgstr "" -#: ../src/dialog_font.tcl:100 ../src/dialog_font.tcl:119 -#: ../src/dialog_font.tcl:127 ../src/dialog_font.tcl:128 msgid "Y only" msgstr "" -#: ../src/dialog_gatom.tcl:93 msgid "Atom Box Properties" msgstr "" -#: ../src/dialog_gatom.tcl:99 msgid "Width:" msgstr "" -#: ../src/dialog_gatom.tcl:103 msgid "Limits" msgstr "" -#: ../src/dialog_gatom.tcl:107 msgid "Lower:" msgstr "" -#: ../src/dialog_gatom.tcl:112 ../src/dialog_gatom.tcl:113 msgid "Upper:" msgstr "" -#: ../src/dialog_gatom.tcl:116 ../src/dialog_gatom.tcl:121 -#: ../src/dialog_iemgui.tcl:600 ../src/dialog_iemgui.tcl:652 -#: ../src/dialog_iemgui.tcl:657 msgid "Label" msgstr "" -#: ../src/dialog_gatom.tcl:124 ../src/dialog_gatom.tcl:129 -msgid "Left " +msgid "Left" msgstr "" -#: ../src/dialog_gatom.tcl:126 ../src/dialog_gatom.tcl:131 msgid "Right" msgstr "" -#: ../src/dialog_gatom.tcl:128 ../src/dialog_gatom.tcl:133 msgid "Top" msgstr "" -#: ../src/dialog_gatom.tcl:130 ../src/dialog_gatom.tcl:135 msgid "Bottom" msgstr "" -#: ../src/dialog_gatom.tcl:137 ../src/dialog_gatom.tcl:145 -#: ../src/dialog_iemgui.tcl:574 msgid "Messages" msgstr "" -#: ../src/dialog_gatom.tcl:141 ../src/dialog_gatom.tcl:149 -#: ../src/dialog_iemgui.tcl:578 msgid "Send symbol:" msgstr "" -#: ../src/dialog_gatom.tcl:147 ../src/dialog_gatom.tcl:155 -#: ../src/dialog_iemgui.tcl:585 msgid "Receive symbol:" msgstr "" -#: ../src/dialog_iemgui.tcl:197 msgid "Background color" msgstr "Background colour" -#: ../src/dialog_iemgui.tcl:204 msgid "Foreground color" msgstr "Foreground colour" -#: ../src/dialog_iemgui.tcl:211 msgid "Label color" msgstr "Label colour" -#: ../src/dialog_iemgui.tcl:272 msgid "Init" msgstr "" -#: ../src/dialog_iemgui.tcl:275 ../src/dialog_iemgui.tcl:546 msgid "No init" msgstr "" -#: ../src/dialog_iemgui.tcl:287 ../src/dialog_iemgui.tcl:558 msgid "Jump on click" msgstr "" -#: ../src/dialog_iemgui.tcl:290 ../src/dialog_iemgui.tcl:561 msgid "Steady on click" msgstr "" -#: ../src/dialog_iemgui.tcl:498 +msgid "Bang" +msgstr "" + +msgid "Flash Time (msec)" +msgstr "" + +msgid "Intrrpt:" +msgstr "" + +msgid "Hold:" +msgstr "" + +msgid "Toggle" +msgstr "" + +msgid "Non Zero Value" +msgstr "" + +msgid "Value:" +msgstr "" + +msgid "Number2" +msgstr "" + +msgid "Width (digits):" +msgstr "" + +msgid "Height:" +msgstr "" + +msgid "Output Range" +msgstr "" + +msgid "Log height:" +msgstr "" + +msgid "Vslider" +msgstr "" + +msgid "Hslider" +msgstr "" + +msgid "Vradio" +msgstr "" + +msgid "Num cells:" +msgstr "" + +msgid "Hradio" +msgstr "" + +msgid "VU Meter" +msgstr "" + +msgid "Canvas" +msgstr "" + +msgid "Visible Rectangle (pix)" +msgstr "" + #, tcl-format msgid "%s Properties" msgstr "" -#: ../src/dialog_iemgui.tcl:550 ../src/pd_menus.tcl:83 ../src/pd_menus.tcl:84 -#: ../src/pd_menus.tcl:129 ../src/pd_menus.tcl:130 ../src/pd_menus.tcl:260 -#: ../src/pd_menus.tcl:273 ../src/pd_menus.tcl:288 ../src/pd_menus.tcl:301 -#: ../src/pd_menus.tcl:325 ../src/pd_menus.tcl:338 ../src/pd_menus.tcl:355 -#: ../src/pd_menus.tcl:382 ../src/pd_menus.tcl:383 ../src/pd_menus.tcl:410 -#: ../src/pd_menus.tcl:422 ../src/pd_menus.tcl:449 -msgid "Save" +msgid "Parameters" msgstr "" -#: ../src/dialog_iemgui.tcl:608 -msgid "X offset" +msgid "X offset:" msgstr "" -#: ../src/dialog_iemgui.tcl:611 ../src/dialog_iemgui.tcl:612 -msgid "Y offset" +msgid "Y offset:" msgstr "" -#: ../src/dialog_iemgui.tcl:642 ../src/dialog_iemgui.tcl:645 msgid "Colors" msgstr "Colours" -#: ../src/dialog_iemgui.tcl:648 ../src/dialog_iemgui.tcl:651 msgid "Background" msgstr "" -#: ../src/dialog_iemgui.tcl:650 ../src/dialog_iemgui.tcl:654 msgid "Front" msgstr "" -#: ../src/dialog_iemgui.tcl:662 ../src/dialog_iemgui.tcl:668 msgid "Compose color" msgstr "Compose colour" -#: ../src/dialog_iemgui.tcl:682 ../src/dialog_iemgui.tcl:688 msgid "Test label" msgstr "" -#: ../src/dialog_midi.tcl:85 -msgid "MIDI Settings" +msgid "Send a Pd message" msgstr "" -#: ../src/dialog_midi.tcl:220 -msgid "ALSA MIDI Settings" +msgid "(use arrow keys for history)" msgstr "" -#: ../src/dialog_midi.tcl:331 -msgid "Use multiple ALSA devices" +msgid "MIDI Settings" +msgstr "" + +msgid "ALSA MIDI Settings" msgstr "" -#: ../src/dialog_midi.tcl:337 msgid "In Ports:" msgstr "" -#: ../src/dialog_midi.tcl:340 msgid "Out Ports:" msgstr "" -#: ../src/g_editor.c:1663 -msgid "Discard changes to this window??" +msgid "Pd search path for objects, help, fonts, and other files" +msgstr "" + +msgid "Use standard paths" +msgstr "" + +msgid "Verbose" +msgstr "" + +msgid "Pd Documents Directory" +msgstr "" + +msgid "Browse" +msgstr "" + +msgid "Reset" +msgstr "" + +msgid "Disable" +msgstr "" + +msgid "Externals Install Directory" msgstr "" -#: ../src/g_editor.c:1668 -msgid "really quit?" +msgid "Clear" msgstr "" -#: ../src/g_editor.c:1699 -msgid "Close this window??" +msgid "Choose Pd documents directory:" msgstr "" -#: ../src/pd-gui.tcl:185 ../src/pd-gui.tcl:195 ../src/pd-gui.tcl:203 -#: ../src/pd-gui.tcl:206 ../src/pd-gui.tcl:215 ../src/pd-gui.tcl:226 -msgid "Associated Files" +msgid "Install externals to directory:" msgstr "" -#: ../src/pd-gui.tcl:186 ../src/pd-gui.tcl:196 ../src/pd-gui.tcl:204 -#: ../src/pd-gui.tcl:207 ../src/pd-gui.tcl:216 ../src/pd-gui.tcl:227 -msgid "Pd Files" +msgid "Add a new path" msgstr "" -#: ../src/pd-gui.tcl:187 ../src/pd-gui.tcl:205 ../src/pd-gui.tcl:208 -#: ../src/pd-gui.tcl:228 -msgid "Max Patch Files" +msgid "Add new library" msgstr "" -#: ../src/pd-gui.tcl:188 ../src/pd-gui.tcl:206 ../src/pd-gui.tcl:209 -#: ../src/pd-gui.tcl:229 -msgid "Max Text Files" +msgid "Edit library" msgstr "" -#: ../src/pd-gui.tcl:197 ../src/pd-gui.tcl:217 -msgid "Max Patch Files (.pat)" +msgid "Pd libraries to load on startup" msgstr "" -#: ../src/pd-gui.tcl:198 ../src/pd-gui.tcl:218 -msgid "Max Text Files (.mxt)" +msgid "Startup flags:" +msgstr "" + +msgid "Defeat real-time scheduling" +msgstr "" + +msgid "Help Browser" +msgstr "" + +msgid "(Tcl) MISSING CLOSE-BRACE '}': " +msgstr "" + +msgid "(Tcl) INVALID COMMAND NAME: " +msgstr "" + +msgid "(Tcl) UNHANDLED ERROR: " msgstr "" -#: ../src/pd-gui.tcl:270 ../src/pd-gui.tcl:290 #, tcl-format -msgid "WARNING: Font family '%s' not found, using default (%s)" +msgid "[deken]: installed version [%1$s] > %2$s...skipping!" msgstr "" -#: ../src/pd-gui.tcl:278 ../src/pd-gui.tcl:298 #, tcl-format -msgid "WARNING: Font weight '%s' not found, using default (%s)" +msgid "[deken]: installed version [%1$s] < %2$s...overwriting!" msgstr "" -#: ../src/pd-gui.tcl:303 ../src/pd-gui.tcl:323 #, tcl-format -msgid "ERROR: %s failed to find font size (%s) that fits into %sx%s!" +msgid "[deken]: installed version [%1$s] == %2$s...skipping!" msgstr "" -#: ../src/pd-gui.tcl:478 ../src/pd-gui.tcl:483 ../src/pd-gui.tcl:501 -msgid "ERROR: 'pd' never showed up, 'pd-gui' quitting!" +msgid "[deken]: " msgstr "" -#: ../src/pd_menucommands.tcl:19 -msgid "Untitled" +#, tcl-format +msgid "Successfully unzipped %1$s into %2$s." msgstr "" -#: ../src/pd_menucommands.tcl:78 ../src/pd_menucommands.tcl:79 -#: ../src/pd_menucommands.tcl:90 -msgid "Send Message..." +msgid "[deken]: Unable to extract package automatically." msgstr "" -#: ../src/pd_menucommands.tcl:82 ../src/pd_menucommands.tcl:83 -#: ../src/pd_menucommands.tcl:94 ../src/pd_menus.tcl:87 ../src/pd_menus.tcl:88 -#: ../src/pd_menus.tcl:133 ../src/pd_menus.tcl:134 ../src/pd_menus.tcl:147 -#: ../src/pd_menus.tcl:192 ../src/pd_menus.tcl:193 ../src/pd_menus.tcl:265 -#: ../src/pd_menus.tcl:278 ../src/pd_menus.tcl:292 ../src/pd_menus.tcl:305 -#: ../src/pd_menus.tcl:329 ../src/pd_menus.tcl:342 ../src/pd_menus.tcl:360 -#: ../src/pd_menus.tcl:387 ../src/pd_menus.tcl:414 ../src/pd_menus.tcl:426 -#: ../src/pd_menus.tcl:453 ../startup/object_db.tcl:123 -msgid "Message" +msgid "Please perform the following steps manually:" msgstr "" -#: ../src/pd_menucommands.tcl:108 ../src/pd_menucommands.tcl:111 -#: ../src/pd_menus.tcl:112 ../src/pd_menus.tcl:113 ../src/pd_menus.tcl:117 -#: ../src/pd_menus.tcl:118 ../src/pd_menus.tcl:158 ../src/pd_menus.tcl:159 -#: ../src/pd_menus.tcl:163 ../src/pd_menus.tcl:164 -msgid "Font" +#, tcl-format +msgid "1. Unzip %s." +msgstr "" + +#, tcl-format +msgid "2. Copy the contents into %s." +msgstr "" + +#, tcl-format +msgid "[deken] uninstalling '%s'" +msgstr "" + +#, tcl-format +msgid "Uninstalling %1$s from %2$s failed!" +msgstr "" + +#, tcl-format +msgid "[deken] deken-plugin.tcl (Pd externals search) loaded from %s." +msgstr "" + +#, tcl-format +msgid "[deken] Platform detected: %s" +msgstr "" + +#, tcl-format +msgid "[deken] Platform re-detected: %s" +msgstr "" + +msgid "Show all" +msgstr "" + +msgid "Search" +msgstr "" + +msgid "To get a list of all available externals, try an empty search." +msgstr "" + +msgid "Find externals" +msgstr "" + +msgid "Only install externals uploaded by people you trust." msgstr "" -#: ../src/pd_menucommands.tcl:123 ../src/pd_menucommands.tcl:126 -#: ../src/pd_menus.tcl:138 ../src/pd_menus.tcl:183 ../src/pd_menus.tcl:184 msgid "Preferences" msgstr "" -#: ../src/pd_menus.tcl:45 -msgid "Edit" +msgid "Installation options:" msgstr "" -#: ../src/pd_menus.tcl:45 -msgid "File" +msgid "Try to remove libraries before (re)installing them?" msgstr "" -#: ../src/pd_menus.tcl:45 ../src/pdtk_canvas.tcl:48 ../src/pdtk_canvas.tcl:110 -#: ../src/pdtk_canvas.tcl:113 -msgid "Help" +msgid "Show README of newly installed libraries (if present)?" msgstr "" -#: ../src/pd_menus.tcl:45 -msgid "Media" +msgid "Should newly installed libraries be added to Pd's search path?" msgstr "" -#: ../src/pd_menus.tcl:45 -msgid "Put" +msgid "Platform settings:" msgstr "" -#: ../src/pd_menus.tcl:45 -msgid "Window" +#, tcl-format +msgid "Default platform: %s" msgstr "" -#: ../src/pd_menus.tcl:81 ../src/pd_menus.tcl:82 ../src/pd_menus.tcl:127 -#: ../src/pd_menus.tcl:128 ../src/pd_menus.tcl:255 ../src/pd_menus.tcl:267 -#: ../src/pd_menus.tcl:285 ../src/pd_menus.tcl:298 ../src/pd_menus.tcl:322 -#: ../src/pd_menus.tcl:335 ../src/pd_menus.tcl:349 ../src/pd_menus.tcl:376 -#: ../src/pd_menus.tcl:380 ../src/pd_menus.tcl:407 ../src/pd_menus.tcl:419 -#: ../src/pd_menus.tcl:446 -msgid "New" +msgid "User-defined platform:" msgstr "" -#: ../src/pd_menus.tcl:82 ../src/pd_menus.tcl:83 ../src/pd_menus.tcl:128 -#: ../src/pd_menus.tcl:129 ../src/pd_menus.tcl:256 ../src/pd_menus.tcl:268 -#: ../src/pd_menus.tcl:286 ../src/pd_menus.tcl:299 ../src/pd_menus.tcl:323 -#: ../src/pd_menus.tcl:336 ../src/pd_menus.tcl:350 ../src/pd_menus.tcl:377 -#: ../src/pd_menus.tcl:381 ../src/pd_menus.tcl:408 ../src/pd_menus.tcl:420 -#: ../src/pd_menus.tcl:447 ../src/pdtk_canvas.tcl:46 -#: ../src/pdtk_canvas.tcl:108 ../src/pdtk_canvas.tcl:111 -#: ../src/pdtk_canvas.tcl:128 ../src/pdtk_canvas.tcl:130 -#: ../src/pdtk_canvas.tcl:131 ../src/pdtk_canvas.tcl:133 -msgid "Open" +msgid "Hide foreign architectures?" msgstr "" -#: ../src/pd_menus.tcl:84 ../src/pd_menus.tcl:85 ../src/pd_menus.tcl:130 -#: ../src/pd_menus.tcl:131 ../src/pd_menus.tcl:261 ../src/pd_menus.tcl:274 -#: ../src/pd_menus.tcl:289 ../src/pd_menus.tcl:302 ../src/pd_menus.tcl:326 -#: ../src/pd_menus.tcl:339 ../src/pd_menus.tcl:356 ../src/pd_menus.tcl:383 -#: ../src/pd_menus.tcl:384 ../src/pd_menus.tcl:411 ../src/pd_menus.tcl:423 -#: ../src/pd_menus.tcl:450 -msgid "Save As..." +#, tcl-format +msgid "Deken %s Preferences" msgstr "" -#: ../src/pd_menus.tcl:88 ../src/pd_menus.tcl:89 ../src/pd_menus.tcl:134 -#: ../src/pd_menus.tcl:135 ../src/pd_menus.tcl:267 ../src/pd_menus.tcl:280 -#: ../src/pd_menus.tcl:293 ../src/pd_menus.tcl:306 ../src/pd_menus.tcl:330 -#: ../src/pd_menus.tcl:343 ../src/pd_menus.tcl:362 ../src/pd_menus.tcl:388 -#: ../src/pd_menus.tcl:389 ../src/pd_menus.tcl:415 ../src/pd_menus.tcl:427 -#: ../src/pd_menus.tcl:454 -msgid "Print..." +msgid "[deken]: Start searching for externals..." msgstr "" -#: ../src/pd_menus.tcl:93 ../src/pd_menus.tcl:94 ../src/pd_menus.tcl:139 -#: ../src/pd_menus.tcl:140 -msgid "Undo" +#, tcl-format +msgid "[deken]: online? %s" msgstr "" -#: ../src/pd_menus.tcl:95 ../src/pd_menus.tcl:96 ../src/pd_menus.tcl:141 -#: ../src/pd_menus.tcl:142 -msgid "Redo" +msgid "Are you online?" msgstr "" -#: ../src/pd_menus.tcl:98 ../src/pd_menus.tcl:99 ../src/pd_menus.tcl:144 -#: ../src/pd_menus.tcl:145 -msgid "Cut" +msgid "Unable to perform search." +msgstr "" + +msgid "[deken]: No matching externals found." +msgstr "" + +msgid "Try using the full name e.g. 'freeverb'." +msgstr "" + +msgid "No matching externals found." +msgstr "" + +msgid "Please select a (writable) installation directory!" +msgstr "" + +#, tcl-format +msgid "Install %1$s to %2$s?" +msgstr "" + +#, tcl-format +msgid "" +"Commencing downloading of:\n" +"%1$s\n" +"Into %2$s..." +msgstr "" + +msgid "aborting.\n" +msgstr "" + +#, tcl-format +msgid "Unable to add %s to search paths" +msgstr "" + +#, tcl-format +msgid "Add %s to the Pd search paths?" +msgstr "" + +#, tcl-format +msgid "Added %s to search paths" +msgstr "" + +#, tcl-format +msgid "Unable to download from %1$s [%2$s]" +msgstr "" + +#, tcl-format +msgid "Unable to remove stray file %s" +msgstr "" + +#, tcl-format +msgid "Unable to rename downloaded file to %s" +msgstr "" + +#, tcl-format +msgid "searching for '%s'" +msgstr "" + +#, tcl-format +msgid "Uploaded by %1$s @ %2$s" +msgstr "" + +msgid "Install package" +msgstr "" + +msgid "Open webpage" +msgstr "" + +msgid "_" +msgstr "" + +#, tcl-format +msgid "" +"Do you want Pd to create a documents directory for patches and external " +"libraries?\n" +"\n" +"Location: %s\n" +"\n" +"You can change or disable this later in the Path preferences." +msgstr "" + +#, tcl-format +msgid "" +"Pd documents directory cannot be found:\n" +"\n" +"%s\n" +"\n" +"Choose a new location?" +msgstr "" + +#, tcl-format +msgid "Couldn't create Pd documents directory: %s\n" +msgstr "" + +#, tcl-format +msgid "Couldn't create \"externals\" directory in: %s\n" +msgstr "" + +#, tcl-format +msgid "Couldn't create preferences \"%1$s\" in %2$s" +msgstr "" + +msgid "About Pd" +msgstr "" + +msgid "Save" +msgstr "" + +msgid "Save As..." +msgstr "" + +msgid "Print..." +msgstr "" + +msgid "Paste Replace" msgstr "" -#: ../src/pd_menus.tcl:104 ../src/pd_menus.tcl:105 ../src/pd_menus.tcl:150 -#: ../src/pd_menus.tcl:151 msgid "Duplicate" msgstr "" -#: ../src/pd_menus.tcl:106 ../src/pd_menus.tcl:107 ../src/pd_menus.tcl:152 -#: ../src/pd_menus.tcl:153 -msgid "Select All" +msgid "Zoom In" msgstr "" -#: ../src/pd_menus.tcl:110 ../src/pd_menus.tcl:111 ../src/pd_menus.tcl:115 -#: ../src/pd_menus.tcl:116 ../src/pd_menus.tcl:156 ../src/pd_menus.tcl:157 -#: ../src/pd_menus.tcl:161 ../src/pd_menus.tcl:162 -msgid "Text Editor" +msgid "Zoom Out" msgstr "" -#: ../src/pd_menus.tcl:120 ../src/pd_menus.tcl:121 ../src/pd_menus.tcl:166 -#: ../src/pd_menus.tcl:167 msgid "Tidy Up" msgstr "" -#: ../src/pd_menus.tcl:122 ../src/pd_menus.tcl:123 ../src/pd_menus.tcl:168 -#: ../src/pd_menus.tcl:169 -msgid "Toggle Console" +msgid "(Dis)Connect Selection" msgstr "" -#: ../src/pd_menus.tcl:124 ../src/pd_menus.tcl:125 ../src/pd_menus.tcl:170 -#: ../src/pd_menus.tcl:171 -msgid "Clear Console" +msgid "Triggerize" msgstr "" -#: ../src/pd_menus.tcl:128 ../src/pd_menus.tcl:129 ../src/pd_menus.tcl:174 -#: ../src/pd_menus.tcl:175 msgid "Edit Mode" msgstr "" -#: ../src/pd_menus.tcl:145 ../src/pd_menus.tcl:190 ../src/pd_menus.tcl:191 -msgid "Object" +msgid "Undo" msgstr "" -#: ../src/pd_menus.tcl:149 ../src/pd_menus.tcl:194 ../src/pd_menus.tcl:195 -msgid "Number" +msgid "Redo" msgstr "" -#: ../src/pd_menus.tcl:151 ../src/pd_menus.tcl:196 ../src/pd_menus.tcl:197 -msgid "Symbol" +msgid "List of objects..." msgstr "" -#: ../src/pd_menus.tcl:153 ../src/pd_menus.tcl:198 ../src/pd_menus.tcl:199 -msgid "Comment" +msgid "New" msgstr "" -#: ../src/pd_menus.tcl:156 ../src/pd_menus.tcl:201 ../src/pd_menus.tcl:202 -msgid "Bang" +msgid "Open" msgstr "" -#: ../src/pd_menus.tcl:158 ../src/pd_menus.tcl:203 ../src/pd_menus.tcl:204 -msgid "Toggle" +msgid "Message..." msgstr "" -#: ../src/pd_menus.tcl:160 ../src/pd_menus.tcl:205 ../src/pd_menus.tcl:206 -msgid "Number2" +msgid "Cut" msgstr "" -#: ../src/pd_menus.tcl:162 ../src/pd_menus.tcl:207 ../src/pd_menus.tcl:208 -msgid "Vslider" +msgid "Select All" msgstr "" -#: ../src/pd_menus.tcl:164 ../src/pd_menus.tcl:209 ../src/pd_menus.tcl:210 -msgid "Hslider" +msgid "Clear Console" msgstr "" -#: ../src/pd_menus.tcl:166 ../src/pd_menus.tcl:211 ../src/pd_menus.tcl:212 -msgid "Vradio" +msgid "Object" msgstr "" -#: ../src/pd_menus.tcl:168 ../src/pd_menus.tcl:213 ../src/pd_menus.tcl:214 -msgid "Hradio" +msgid "Message" msgstr "" -#: ../src/pd_menus.tcl:170 ../src/pd_menus.tcl:215 ../src/pd_menus.tcl:216 -msgid "VU Meter" +msgid "Number" msgstr "" -#: ../src/pd_menus.tcl:172 ../src/pd_menus.tcl:217 ../src/pd_menus.tcl:218 -msgid "Canvas" +msgid "Symbol" msgstr "" -#: ../src/pd_menus.tcl:175 ../src/pd_menus.tcl:220 ../src/pd_menus.tcl:221 -msgid "Graph" +msgid "Comment" msgstr "" -#: ../src/pd_menus.tcl:176 ../src/pd_menus.tcl:221 ../src/pd_menus.tcl:222 -msgid "Array" +msgid "Graph" msgstr "" -#: ../src/pd_menus.tcl:181 ../src/pd_menus.tcl:226 ../src/pd_menus.tcl:227 msgid "Find..." msgstr "" -#: ../src/pd_menus.tcl:183 ../src/pd_menus.tcl:228 ../src/pd_menus.tcl:229 msgid "Find Again" msgstr "" -#: ../src/pd_menus.tcl:185 ../src/pd_menus.tcl:230 ../src/pd_menus.tcl:231 msgid "Find Last Error" msgstr "" -#: ../src/pd_menus.tcl:191 ../src/pd_menus.tcl:236 ../src/pd_menus.tcl:237 msgid "DSP On" msgstr "" -#: ../src/pd_menus.tcl:193 ../src/pd_menus.tcl:238 ../src/pd_menus.tcl:239 msgid "DSP Off" msgstr "" -#: ../src/pd_menus.tcl:196 ../src/pd_menus.tcl:242 ../src/pd_menus.tcl:269 msgid "Test Audio and MIDI..." msgstr "" -#: ../src/pd_menus.tcl:198 ../src/pd_menus.tcl:244 ../src/pd_menus.tcl:271 msgid "Load Meter" msgstr "" -#: ../src/pd_menus.tcl:205 ../src/pd_menus.tcl:251 ../src/pd_menus.tcl:278 +msgid "Audio Settings..." +msgstr "" + +msgid "MIDI Settings..." +msgstr "" + msgid "Minimize" msgstr "" -#: ../src/pd_menus.tcl:207 ../src/pd_menus.tcl:253 ../src/pd_menus.tcl:280 msgid "Zoom" msgstr "" -#: ../src/pd_menus.tcl:210 ../src/pd_menus.tcl:256 ../src/pd_menus.tcl:283 -msgid "Parent Window" +msgid "Bring All to Front" msgstr "" -#: ../src/pd_menus.tcl:216 ../src/pd_menus.tcl:262 ../src/pd_menus.tcl:289 -msgid "Bring All to Front" +msgid "Next Window" msgstr "" -#: ../src/pd_menus.tcl:224 ../src/pd_menus.tcl:241 ../src/pd_menus.tcl:253 -#: ../src/pd_menus.tcl:270 ../src/pd_menus.tcl:297 ../src/pd_menus.tcl:335 -#: ../src/pd_menus.tcl:362 -msgid "About Pd" +msgid "Previous Window" +msgstr "" + +msgid "Parent Window" msgstr "" -#: ../src/pd_menus.tcl:227 ../src/pd_menus.tcl:273 ../src/pd_menus.tcl:300 msgid "HTML Manual..." msgstr "" -#: ../src/pd_menus.tcl:229 ../src/pd_menus.tcl:275 ../src/pd_menus.tcl:302 msgid "Browser..." msgstr "" -#: ../src/pd_menus.tcl:248 ../src/pd_menus.tcl:260 ../src/pd_menus.tcl:342 -#: ../src/pd_menus.tcl:369 -msgid "Preferences..." +msgid "puredata.info" msgstr "" -#: ../src/pd_menus.tcl:257 ../src/pd_menus.tcl:270 ../src/pd_menus.tcl:352 -#: ../src/pd_menus.tcl:379 -msgid "Open Recent" +msgid "Report a bug" msgstr "" -#: ../src/pd_menus.tcl:263 -msgid "Audio Settings..." +msgid "Clear Menu" msgstr "" -#: ../src/pd_menus.tcl:265 -msgid "MIDI Settings..." +msgid "" +"Delete all preferences?\n" +"(takes effect when Pd is restarted)" msgstr "" -#: ../src/pd_menus.tcl:296 ../src/pd_menus.tcl:309 ../src/pd_menus.tcl:333 -#: ../src/pd_menus.tcl:346 ../src/pd_menus.tcl:393 ../src/pd_menus.tcl:420 -#: ../src/pd_menus.tcl:432 ../src/pd_menus.tcl:459 -msgid "Quit" +msgid "Path..." msgstr "" -#: ../src/pd_menus.tcl:304 ../src/pd_menus.tcl:331 -msgid "Clear Menu" +msgid "Startup..." +msgstr "" + +msgid "Audio..." +msgstr "" + +msgid "MIDI..." +msgstr "" + +msgid "Zoom New Windows" +msgstr "" + +msgid "Save All Preferences" +msgstr "" + +msgid "Save to..." +msgstr "" + +msgid "Load from..." +msgstr "" + +msgid "Forget All..." +msgstr "" + +msgid "Open Recent" +msgstr "" + +msgid "Quit" msgstr "" -#: ../src/pdtk_canvas.tcl:44 ../src/pdtk_canvas.tcl:106 -#: ../src/pdtk_canvas.tcl:109 ../src/pdtk_canvas.tcl:123 -#: ../src/pdtk_canvas.tcl:125 ../src/pdtk_canvas.tcl:126 -#: ../src/pdtk_canvas.tcl:128 msgid "Properties" msgstr "" -#: ../src/pdwindow.tcl:43 +msgid "Audio on" +msgstr "" + +msgid "Audio off" +msgstr "" + +msgid "(Tcl) MISSING CLOSE-BRACKET ']': " +msgstr "" + +msgid "Tcl:" +msgstr "" + +msgid "Pd" +msgstr "" + msgid "DSP" msgstr "" -#: ../startup/object_db.tcl:113 -msgid "Signal" +msgid "Audio I/O error" +msgstr "" + +msgid "Log:" +msgstr "" + +msgid "fatal" msgstr "" -#: ../startup/object_db.tcl:114 -msgid "Generators" +msgid "error" msgstr "" -#: ../startup/object_db.tcl:115 -msgid "Filters" +msgid "normal" msgstr "" -#: ../startup/object_db.tcl:116 ../startup/object_db.tcl:124 -msgid "Math" +msgid "debug" msgstr "" -#: ../startup/object_db.tcl:117 ../startup/object_db.tcl:125 -msgid "I/O" +msgid "all" msgstr "" -#: ../startup/object_db.tcl:118 ../startup/object_db.tcl:126 -msgid "Sampling" +msgid "New..." msgstr "" -#: ../startup/object_db.tcl:119 ../startup/object_db.tcl:128 -msgid "Routing" +msgid "Edit..." msgstr "" -#: ../startup/object_db.tcl:120 ../startup/object_db.tcl:129 -msgid "Others" +msgid "Delete" msgstr "" -#: ../startup/object_db.tcl:127 -msgid "GUI" +#, tcl-format +msgid "Ignoring '%s': doesn't exist" +msgstr "" + +#, tcl-format +msgid "Ignoring '%s': doesn't look like a Pd-file" msgstr "" diff --git a/po/es.po b/po/es.po new file mode 100644 index 0000000000..a67d9853b0 --- /dev/null +++ b/po/es.po @@ -0,0 +1,1083 @@ +# Spanish translations for Pure Data package. +# This file is put in the public domain. +# Federico Camara Halac , 2017. +# +msgid "" +msgstr "" +"Project-Id-Version: Pure Data 0.48.0\n" +"Report-Msgid-Bugs-To: pd-dev@iem.at\n" +"POT-Creation-Date: \n" +"PO-Revision-Date: 2018-09-11 16:22+0200\n" +"Last-Translator: Federico Camara Halac \n" +"Language-Team: Spanish\n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Poedit 2.1.1\n" + +msgid "-------dimensions(digits)(pix):-------" +msgstr "-------dimensiones(dígitos)(pix):-------" + +msgid "--------dimensions(pix)(pix):--------" +msgstr "--------dimensiones(pix)(pix):--------" + +msgid "----------dimensions(pix):-----------" +msgstr "----------dimensiones(pix):-----------" + +msgid "--------flash-time(ms)(ms):---------" +msgstr "--------intermitencia(ms)(ms):---------" + +msgid "-----------output-range:-----------" +msgstr "-----------rango-de-salida:-----------" + +msgid "------selectable_dimensions(pix):------" +msgstr "-----dimensiones_seleccionables(pix):-----" + +msgid "------visible_rectangle(pix)(pix):------" +msgstr "------rectángulo_visible(pix)(pix):------" + +msgid "bottom:" +msgstr "Abajo" + +msgid "height:" +msgstr "Altura:" + +msgid "hold:" +msgstr "Hold:" + +msgid "intrrpt:" +msgstr "Intrrpt:" + +msgid "left:" +msgstr "Izquierda:" + +msgid "lin" +msgstr "Lin" + +msgid "log" +msgstr "Log" + +msgid "log-height:" +msgstr "Altura Log:" + +msgid "max:" +msgstr "Máx.:" + +msgid "min:" +msgstr "Min.:" + +msgid "right:" +msgstr "Derecha:" + +msgid "size:" +msgstr "Tamaño:" + +msgid "top:" +msgstr "Arriba" + +msgid "value:" +msgstr "Valor:" + +msgid "width:" +msgstr "Ancho:" + +#, tcl-format +msgid "Do you want to save the changes you made in '%s'?" +msgstr "¿Desea guardar los cambios realizados en '%s'?" + +#, tcl-format +msgid "Discard changes to '%s'?" +msgstr "¿Rechazar cambios en '%s'?" + +msgid "Undo clear" +msgstr "Deshacer borrar" + +msgid "Undo connect" +msgstr "Deshacer conectar" + +msgid "Undo cut" +msgstr "Deshacer cortar" + +msgid "Undo disconnect" +msgstr "Deshacer desconectar" + +msgid "Undo duplicate" +msgstr "Deshacer duplicar" + +msgid "Undo motion" +msgstr "Deshacer mover" + +msgid "Undo paste" +msgstr "Deshacer pegar" + +msgid "Undo typing" +msgstr "Deshacer escritura" + +msgid "Redo clear" +msgstr "Rehacer borrar" + +msgid "Redo connect" +msgstr "Rehacer conectar" + +msgid "Redo cut" +msgstr "Rehacer cortar" + +msgid "Redo disconnect" +msgstr "Rehacer desconectar" + +msgid "Redo duplicate" +msgstr "Rehacer duplicar" + +msgid "Redo motion" +msgstr "Rehacer mover" + +msgid "Redo paste" +msgstr "Rehacer pegar" + +msgid "Redo typing" +msgstr "Rehacer escritura" + +msgid "no Pd settings to clear" +msgstr "No hay configuraciones para borrar" + +msgid "removed .pdsettings file" +msgstr "Archivo .pdsettings eliminado" + +msgid "couldn't delete .pdsettings file" +msgstr "No pude borrar el archivo .pdsettings" + +msgid "failed to erase Pd settings" +msgstr "Falla al borrar el archivo de configuraciones" + +msgid "erased Pd settings" +msgstr "Configuraciones de Pd eliminadas" + +msgid "no Pd settings to erase" +msgstr "No hay configuraciones para borrar" + +msgid "skipping loading preferences... Pd seems to have crashed on startup." +msgstr "" +"Altura Log:skipping loading preferences... Pd seems to have crashed on " +"startup." + +msgid "(re-save preferences to reinstate them)" +msgstr "(click en Guardar Preferencias para reestablecerlas)" + +msgid "File" +msgstr "Archivo" + +msgid "Edit" +msgstr "Editar" + +msgid "Put" +msgstr "Poner" + +msgid "Find" +msgstr "Buscar" + +msgid "Media" +msgstr "Medios" + +msgid "Window" +msgstr "Ventana" + +msgid "Help" +msgstr "Ayuda" + +msgid "Show &Hidden Files and Directories" +msgstr "Mostrar Archivos y Carpetas &Ocultos" + +msgid "Copy" +msgstr "Copiar" + +msgid "Paste" +msgstr "Pegar" + +msgid "Array Properties" +msgstr "Propiedades del Array" + +msgid "Array" +msgstr "" + +msgid "Name:" +msgstr "Nombre:" + +msgid "Size:" +msgstr "Tamaño:" + +msgid "Save contents" +msgstr "Guardar contenidos" + +msgid "Draw as:" +msgstr "Trazar como:" + +msgid "Polygon" +msgstr "Polígono" + +msgid "Points" +msgstr "Puntos" + +msgid "Bezier curve" +msgstr "Curva Bezier" + +msgid "Put array into:" +msgstr "Poner array en:" + +msgid "New graph" +msgstr "Nuevo gráfico" + +msgid "Last graph" +msgstr "Último gráfico" + +msgid "Options" +msgstr "Opciones" + +msgid "Open List View..." +msgstr "Ver Lista" + +msgid "Delete array" +msgstr "Eliminar array" + +msgid "Cancel" +msgstr "Cancelar" + +msgid "Apply" +msgstr "Aplicar" + +msgid "OK" +msgstr "Aceptar" + +msgid "Audio Settings" +msgstr "Configuración de audio" + +msgid "Settings" +msgstr "Configuración" + +msgid "Sample rate:" +msgstr "Velocidad de Sampleo:" + +msgid "Delay (msec):" +msgstr "Retardo (msec):" + +msgid "Block size:" +msgstr "Tamaño de Bloque:" + +msgid "Use callbacks" +msgstr "Usar callbacks" + +msgid "Input Devices" +msgstr "Dispositivos de Entrada" + +msgid "Channels:" +msgstr "Canales:" + +msgid "Output Devices" +msgstr "Dispositivos de Salida" + +msgid "(same as input device)..." +msgstr "(igual que dispositivos de entrada)..." + +msgid "Use Multiple Devices" +msgstr "Usar múltiples dispositivos" + +msgid "Save All Settings" +msgstr "Guardar Configuraciones" + +msgid "WARNING: unknown graphme flags received in pdtk_canvas_dialog" +msgstr "" +"ADVERTENCIA: banderas graphme desconocidas recibidas en pdtk_canvas_dialog" + +msgid "Canvas Properties" +msgstr "Propiedades de Canvas" + +msgid "Scale" +msgstr "Escala" + +msgid "X units per pixel:" +msgstr "Unidades de X por píxel:" + +msgid "Y units per pixel:" +msgstr "Unidades de Y por píxel:" + +msgid "Appearance on parent patch" +msgstr "Apariencia en parche contenedor" + +msgid "Graph-On-Parent" +msgstr "Graficar-En-Contenedor (GOP)" + +msgid "Hide object name and arguments" +msgstr "Ocultar nombre y argumentos del objeto" + +msgid "Range and size" +msgstr "Rango y Tamaño" + +msgid "X range: from" +msgstr "Rango X: de" + +msgid "to" +msgstr "a" + +msgid "Margin:" +msgstr "Margen:" + +msgid "Y range: from" +msgstr "Rango Y: de" + +msgid "Data Properties" +msgstr "Propiedades de Data" + +#, tcl-format +msgid "Found '%1$s' in %2$s" +msgstr "Encontrado '%1$ss' en %2$s" + +#, tcl-format +msgid "Couldn't find '%1$s' in %2$s" +msgstr "No he encontrado '%1$s' en %2$s" + +#, tcl-format +msgid "Search in %s for:" +msgstr "Buscar en %s para:" + +#, tcl-format +msgid "Showed last '%1$s' in %2$s" +msgstr "Último '%1$s' en %2$s ha sido mostrado." + +#, tcl-format +msgid "Showing '%1$d' out of %2$d items in %3$s" +msgstr "Mostrando '%1$d' de %2$d ítems en %3$s" + +msgid "Pd window" +msgstr "Ventana de Pd" + +msgid "Match whole word only" +msgstr "Comparar solo con palabra completa" + +msgid "Close" +msgstr "Cerrar" + +#, tcl-format +msgid "%s Font" +msgstr "%s Fuente" + +msgid "Font" +msgstr "Fuente" + +msgid "Font Size" +msgstr "Tamaño Fuente" + +msgid "Stretch" +msgstr "Compensar" + +msgid "X and Y" +msgstr "X e Y" + +msgid "X only" +msgstr "Solo X" + +msgid "Y only" +msgstr "Solo Y" + +msgid "Atom Box Properties" +msgstr "Propiedades de Caja Atom" + +msgid "Width:" +msgstr "Ancho:" + +msgid "Limits" +msgstr "Límites" + +msgid "Lower:" +msgstr "Inferior:" + +msgid "Upper:" +msgstr "Superior:" + +msgid "Label" +msgstr "Etiqueta" + +msgid "Left" +msgstr "Izquierda" + +msgid "Right" +msgstr "Derecha" + +msgid "Top" +msgstr "Arriba" + +msgid "Bottom" +msgstr "Abajo" + +msgid "Messages" +msgstr "Mensajes" + +msgid "Send symbol:" +msgstr "Símbolo send:" + +msgid "Receive symbol:" +msgstr "Símbolo receive:" + +msgid "Background color" +msgstr "Color de Fondo" + +msgid "Foreground color" +msgstr "Color de Frente" + +msgid "Label color" +msgstr "Color de Etiqueta" + +msgid "Init" +msgstr "" + +msgid "No init" +msgstr "Sin init" + +msgid "Jump on click" +msgstr "Saltar a Valor" + +msgid "Steady on click" +msgstr "No saltar (Steady)" + +msgid "Bang" +msgstr "" + +msgid "Flash Time (msec)" +msgstr "Intermitencia (flashtime)" + +msgid "Intrrpt:" +msgstr "" + +msgid "Hold:" +msgstr "" + +msgid "Toggle" +msgstr "" + +msgid "Non Zero Value" +msgstr "Valor No-Zero" + +msgid "Value:" +msgstr "Valor:" + +msgid "Number2" +msgstr "" + +msgid "Width (digits):" +msgstr "Ancho (dígitos):" + +msgid "Height:" +msgstr "Altura:" + +msgid "Output Range" +msgstr "Rango de Salida" + +msgid "Log height:" +msgstr "Altura Log:" + +msgid "Vslider" +msgstr "" + +msgid "Hslider" +msgstr "" + +msgid "Vradio" +msgstr "" + +msgid "Num cells:" +msgstr "Número de Celdas:" + +msgid "Hradio" +msgstr "" + +msgid "VU Meter" +msgstr "" + +msgid "Canvas" +msgstr "" + +msgid "Visible Rectangle (pix)" +msgstr "Rectángulo Visible (pix)" + +#, tcl-format +msgid "%s Properties" +msgstr "%s Propiedades" + +msgid "Parameters" +msgstr "Parámetros" + +msgid "X offset:" +msgstr "Compensar X:" + +msgid "Y offset:" +msgstr "Compensar Y:" + +msgid "Colors" +msgstr "Colores" + +msgid "Background" +msgstr "Fondo" + +msgid "Front" +msgstr "Frente" + +msgid "Compose color" +msgstr "Componer color" + +msgid "Test label" +msgstr "Etiqueta prueba" + +msgid "Send a Pd message" +msgstr "Enviar un mensaje Pd" + +msgid "(use arrow keys for history)" +msgstr "(usar flechas para historial)" + +msgid "MIDI Settings" +msgstr "Configuración MIDI" + +msgid "ALSA MIDI Settings" +msgstr "Configuración ALSA MIDI" + +msgid "In Ports:" +msgstr "Puertos de Entrada:" + +msgid "Out Ports:" +msgstr "Puertos de Salida:" + +msgid "Pd search path for objects, help, fonts, and other files" +msgstr "Ruta de búsqueda de Pd para objetos, ayuda, fuentes, y otros archivos" + +msgid "Use standard paths" +msgstr "Usar rutas estándar" + +msgid "Verbose" +msgstr "Verbosa" + +msgid "Pd Documents Directory" +msgstr "Directorio de documentos de Pd" + +msgid "Browse" +msgstr "Explorar" + +msgid "Reset" +msgstr "Resetear" + +msgid "Disable" +msgstr "Desactivar" + +msgid "Externals Install Directory" +msgstr "Directorio de instalacion de externos" + +msgid "Clear" +msgstr "Borrar" + +msgid "Choose Pd documents directory:" +msgstr "Elejir directorio de documentos de Pd" + +msgid "Install externals to directory:" +msgstr "Instalar externos en el directorio:" + +msgid "Add a new path" +msgstr "Agregar una nueva ruta" + +msgid "Add new library" +msgstr "Añadir nueva librería" + +msgid "Edit library" +msgstr "Editar librería" + +msgid "Pd libraries to load on startup" +msgstr "Librerías de Pd para cargar en inicio" + +msgid "Startup flags:" +msgstr "Banderas de Inicio:" + +msgid "Defeat real-time scheduling" +msgstr "Rechazar prioridad en tiempo-real" + +msgid "Help Browser" +msgstr "Navegador de Ayuda" + +msgid "(Tcl) MISSING CLOSE-BRACE '}': " +msgstr "(Tcl) FALTA LLAVE DE CIERRE '}': " + +msgid "(Tcl) INVALID COMMAND NAME: " +msgstr "(Tcl) NOMBRE DE COMANDO INVÁLIDO: " + +msgid "(Tcl) UNHANDLED ERROR: " +msgstr "(Tcl) ERROR SIN TRATAR: " + +#, tcl-format +msgid "[deken]: installed version [%1$s] > %2$s...skipping!" +msgstr "[deken]: version instalada [%1$s] > %2$s...salteando!" + +#, tcl-format +msgid "[deken]: installed version [%1$s] < %2$s...overwriting!" +msgstr "[deken]: version instalada [%1$s] < %2$s...sobreescribiendo!" + +#, tcl-format +msgid "[deken]: installed version [%1$s] == %2$s...skipping!" +msgstr "[deken]: version instalada [%1$s] == %2$s...salteando!" + +msgid "[deken]: " +msgstr "[deken]:" + +#, tcl-format +msgid "Successfully unzipped %1$s into %2$s." +msgstr "Se ha extraído con éxito %1$s en %2$s." + +#, fuzzy +msgid "[deken]: Unable to extract package automatically." +msgstr "No se ha podido extraer el paquete automáticamente." + +msgid "Please perform the following steps manually:" +msgstr "Por favor, siga estos pasos manualmente:" + +#, tcl-format +msgid "1. Unzip %s." +msgstr "1. Extraer %s." + +#, tcl-format +msgid "2. Copy the contents into %s." +msgstr "2. Copiar los contenidos en %s." + +#, tcl-format +msgid "[deken] uninstalling '%s'" +msgstr "" + +#, tcl-format +msgid "Uninstalling %1$s from %2$s failed!" +msgstr "" + +#, tcl-format +msgid "[deken] deken-plugin.tcl (Pd externals search) loaded from %s." +msgstr "" +"[deken] deken-plugin.tcl (Búsqueda de externals para Pd) cargado de %s." + +#, tcl-format +msgid "[deken] Platform detected: %s" +msgstr "[deken] Plataforma detectada: %s" + +#, fuzzy, tcl-format +msgid "[deken] Platform re-detected: %s" +msgstr "[deken] Plataforma detectada: %s" + +msgid "Show all" +msgstr "Ver todo" + +msgid "Search" +msgstr "Buscar" + +msgid "To get a list of all available externals, try an empty search." +msgstr "" +"Para ver una lista de todos los externos disponibles, prueba una búsqueda " +"vacía." + +msgid "Find externals" +msgstr "Buscar Externos" + +msgid "Only install externals uploaded by people you trust." +msgstr "Solo instalar externos subidos por gente de confianza." + +msgid "Preferences" +msgstr "Preferencias" + +msgid "Installation options:" +msgstr "" + +msgid "Try to remove libraries before (re)installing them?" +msgstr "" + +msgid "Show README of newly installed libraries (if present)?" +msgstr "" + +msgid "Should newly installed libraries be added to Pd's search path?" +msgstr "" + +msgid "Platform settings:" +msgstr "" + +#, tcl-format +msgid "Default platform: %s" +msgstr "" + +msgid "User-defined platform:" +msgstr "" + +msgid "Hide foreign architectures?" +msgstr "" + +#, tcl-format +msgid "Deken %s Preferences" +msgstr "Deken %s Preferencias" + +msgid "[deken]: Start searching for externals..." +msgstr "[deken]: Buscando externos..." + +#, tcl-format +msgid "[deken]: online? %s" +msgstr "[deken]: ¿Está usted online? %s" + +msgid "Are you online?" +msgstr "¿Está usted online?" + +msgid "Unable to perform search." +msgstr "La búsqueda no pudo ser realizada." + +msgid "[deken]: No matching externals found." +msgstr "[deken]: No se han encontrado externos con ese nombre." + +msgid "Try using the full name e.g. 'freeverb'." +msgstr "Prueba usando el nombre completo, por ejemplo: 'freeverb'." + +msgid "No matching externals found." +msgstr "No se han encontrado externos con ese nombre." + +msgid "Please select a (writable) installation directory!" +msgstr "" +"Por favor, seleccione un directorio de instalación con permisos de escritura!" + +#, tcl-format +msgid "Install %1$s to %2$s?" +msgstr "¿Instalar %1$s en %2$s?" + +#, tcl-format +msgid "" +"Commencing downloading of:\n" +"%1$s\n" +"Into %2$s..." +msgstr "" +"Comenzando descarga de:\n" +"%1$s\n" +"En %2$s..." + +#, fuzzy +msgid "aborting.\n" +msgstr "Abortando." + +#, tcl-format +msgid "Unable to add %s to search paths" +msgstr "No se ha podido agregar %s a las rutas de búsqueda" + +#, tcl-format +msgid "Add %s to the Pd search paths?" +msgstr "¿Agregar %s a las rutas de búsqueda de Pd?" + +#, tcl-format +msgid "Added %s to search paths" +msgstr "Se ha agregado %s a las rutas de búsqueda." + +#, tcl-format +msgid "Unable to download from %1$s [%2$s]" +msgstr "No se ha podido descargar de %1$s [%2$s]" + +#, tcl-format +msgid "Unable to remove stray file %s" +msgstr "No se ha podido remover el archivo suelto %s" + +#, tcl-format +msgid "Unable to rename downloaded file to %s" +msgstr "No se ha podido renombrar el archivo descargado a %s" + +#, tcl-format +msgid "searching for '%s'" +msgstr "Buscando '%s'" + +#, tcl-format +msgid "Uploaded by %1$s @ %2$s" +msgstr "Subido por %1$s @ %2$s" + +msgid "Install package" +msgstr "" + +msgid "Open webpage" +msgstr "" + +msgid "_" +msgstr "" + +#, tcl-format +msgid "" +"Do you want Pd to create a documents directory for patches and external " +"libraries?\n" +"\n" +"Location: %s\n" +"\n" +"You can change or disable this later in the Path preferences." +msgstr "" +"¿Desea que Pd genere un directorio para parches y librerias de externos?\n" +"\n" +"Ubicacion: %s\n" +"\n" +"Puede cambiar o desactivar esta funcion luego desde las configuraciones de " +"Ruta." + +#, tcl-format +msgid "" +"Pd documents directory cannot be found:\n" +"\n" +"%s\n" +"\n" +"Choose a new location?" +msgstr "" +"No se ha podido encontrar el directorio de documentos de Pd:\n" +"\n" +"%s\n" +"\n" +"Choose a new location?" + +#, tcl-format +msgid "Couldn't create Pd documents directory: %s\n" +msgstr "No se ha podido crear el directorio de documentos de Pd: %s\n" + +#, tcl-format +msgid "Couldn't create \"externals\" directory in: %s\n" +msgstr "No se ha podido crear el directorio \"externals\" en: %s\n" + +#, fuzzy, tcl-format +msgid "Couldn't create preferences \"%1$s\" in %2$s" +msgstr "No se podían crear preferencias en '%1$s' en %2$s" + +msgid "About Pd" +msgstr "Sobre Pd" + +msgid "Save" +msgstr "Guardar" + +msgid "Save As..." +msgstr "Guardar Como..." + +msgid "Print..." +msgstr "Imprimir..." + +msgid "Paste Replace" +msgstr "" + +msgid "Duplicate" +msgstr "Duplicar" + +msgid "Zoom In" +msgstr "Acercar" + +msgid "Zoom Out" +msgstr "Alejar" + +msgid "Tidy Up" +msgstr "Ordenar" + +msgid "(Dis)Connect Selection" +msgstr "" + +msgid "Triggerize" +msgstr "" + +msgid "Edit Mode" +msgstr "Modo Edición" + +msgid "Undo" +msgstr "Deshacer" + +msgid "Redo" +msgstr "Rehacer" + +msgid "List of objects..." +msgstr "Lista de objetos..." + +msgid "New" +msgstr "Nuevo" + +msgid "Open" +msgstr "Abrir" + +msgid "Message..." +msgstr "Mensaje..." + +msgid "Cut" +msgstr "Cortar" + +msgid "Select All" +msgstr "Seleccionar Todo" + +msgid "Clear Console" +msgstr "Limpiar Consola" + +msgid "Object" +msgstr "Objeto" + +msgid "Message" +msgstr "Mensaje" + +msgid "Number" +msgstr "Número" + +msgid "Symbol" +msgstr "Símbolo" + +msgid "Comment" +msgstr "Comentario" + +msgid "Graph" +msgstr "Gráfico" + +msgid "Find..." +msgstr "Buscar..." + +msgid "Find Again" +msgstr "Buscar de Nuevo" + +msgid "Find Last Error" +msgstr "Buscar Último Error" + +msgid "DSP On" +msgstr "Encender DSP" + +msgid "DSP Off" +msgstr "Apagar DSP" + +msgid "Test Audio and MIDI..." +msgstr "Prueba de Audio y MIDI..." + +msgid "Load Meter" +msgstr "Carga de CPU" + +msgid "Audio Settings..." +msgstr "Configuración de Audio" + +msgid "MIDI Settings..." +msgstr "Configuración MIDI" + +msgid "Minimize" +msgstr "Minimizar" + +msgid "Zoom" +msgstr "Maximizar" + +msgid "Bring All to Front" +msgstr "Traer Todo al Frente" + +msgid "Next Window" +msgstr "Ventana Siguiente" + +msgid "Previous Window" +msgstr "Ventana Previa" + +msgid "Parent Window" +msgstr "Ventana Contenedora" + +msgid "HTML Manual..." +msgstr "Manual HTML..." + +msgid "Browser..." +msgstr "Navegador..." + +msgid "puredata.info" +msgstr "" + +msgid "Report a bug" +msgstr "Reportar un error" + +msgid "Clear Menu" +msgstr "Borrar Menu" + +msgid "" +"Delete all preferences?\n" +"(takes effect when Pd is restarted)" +msgstr "" +"¿Desea eliminar todas las preferencias?\n" +"Tomara efecto cuando Pd reinicie." + +msgid "Path..." +msgstr "Ruta..." + +msgid "Startup..." +msgstr "Inicio..." + +msgid "Audio..." +msgstr "" + +msgid "MIDI..." +msgstr "" + +msgid "Zoom New Windows" +msgstr "Agrandar nuevas ventanas" + +msgid "Save All Preferences" +msgstr "Guardar Preferencias" + +msgid "Save to..." +msgstr "Guardar como..." + +msgid "Load from..." +msgstr "Cargar..." + +msgid "Forget All..." +msgstr "Olvidar..." + +msgid "Open Recent" +msgstr "Abrir Recientes" + +msgid "Quit" +msgstr "Salir" + +msgid "Properties" +msgstr "Propiedades" + +msgid "Audio on" +msgstr "Audio Encendido" + +msgid "Audio off" +msgstr "Audio apagado" + +msgid "(Tcl) MISSING CLOSE-BRACKET ']': " +msgstr "(Tcl) FALTA CORCHETE DE CIERRE ']': " + +msgid "Tcl:" +msgstr "" + +msgid "Pd" +msgstr "" + +msgid "DSP" +msgstr "" + +msgid "Audio I/O error" +msgstr "Error E/S de Audio" + +msgid "Log:" +msgstr "" + +msgid "fatal" +msgstr "Fatal" + +msgid "error" +msgstr "Error" + +msgid "normal" +msgstr "Normal" + +msgid "debug" +msgstr "Depurar" + +msgid "all" +msgstr "Todo" + +msgid "New..." +msgstr "Nuevo..." + +msgid "Edit..." +msgstr "Editar..." + +msgid "Delete" +msgstr "Eliminar" + +#, tcl-format +msgid "Ignoring '%s': doesn't exist" +msgstr "Ignorando '%s': archivo no existente." + +#, tcl-format +msgid "Ignoring '%s': doesn't look like a Pd-file" +msgstr "Ignorando '%s': no parece ser un fichero de Pd." + +#~ msgid "Unable to perform search. Are you online?" +#~ msgstr "La búsqueda no pudo ser realizada. ¿Está usted online?" diff --git a/po/eu.po b/po/eu.po index bda4dd3614..d2c0152a2d 100644 --- a/po/eu.po +++ b/po/eu.po @@ -6,948 +6,1209 @@ msgid "" msgstr "" "Project-Id-Version: Pure Data 0.43\n" "Report-Msgid-Bugs-To: pd-dev@iem.at\n" -"POT-Creation-Date: 2009-08-27 10:01-0400\n" +"POT-Creation-Date: 2017-07-06 18:10+0200\n" "PO-Revision-Date: 2015-10-18 18:10+0200\n" "Last-Translator: Fvargas Grc \n" "Language-Team: Basque \n" +"Language: eu\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +msgid "-------dimensions(digits)(pix):-------" +msgstr "" + +msgid "--------dimensions(pix)(pix):--------" +msgstr "" + +msgid "----------dimensions(pix):-----------" +msgstr "" + +msgid "--------flash-time(ms)(ms):---------" +msgstr "" + +msgid "-----------output-range:-----------" +msgstr "" + +msgid "------selectable_dimensions(pix):------" +msgstr "" + +msgid "------visible_rectangle(pix)(pix):------" +msgstr "" + +#, fuzzy +msgid "bottom:" +msgstr "Behean" + +#, fuzzy +msgid "height:" +msgstr "Eskuinea" + +msgid "hold:" +msgstr "" + +msgid "intrrpt:" +msgstr "" + +msgid "left:" +msgstr "" + +msgid "lin" +msgstr "" + +msgid "log" +msgstr "" + +msgid "log-height:" +msgstr "" + +msgid "max:" +msgstr "" + +msgid "min:" +msgstr "" + +#, fuzzy +msgid "right:" +msgstr "Eskuinea" + +#, fuzzy +msgid "size:" +msgstr "Neurria:" + +msgid "top:" +msgstr "" + +msgid "value:" +msgstr "" + +#, fuzzy +msgid "width:" +msgstr "Zabalera:" + +#, tcl-format +msgid "Do you want to save the changes you made in '%s'?" +msgstr "'%s'-ren egiten duzun aldaketak gorde nahi duzu?" + +#, tcl-format +msgid "Discard changes to '%s'?" +msgstr "'%s'-ren aldaketak utzi" + +msgid "Undo clear" +msgstr "Argitu desegin" + +msgid "Undo connect" +msgstr "Lotura desegin" + +#, fuzzy +msgid "Undo cut" +msgstr "Ebakia desegin" + +msgid "Undo disconnect" +msgstr "Deslotu desegin" + #, fuzzy msgid "Undo duplicate" msgstr "Bikoiztu desegin" +msgid "Undo motion" +msgstr "Mugitze desegin" + msgid "Undo paste" msgstr "Itsatsi desegin" -msgid "Undo motion" -msgstr "Mugitze desegin" +msgid "Undo typing" +msgstr "" #, fuzzy -msgid "Undo cut" +msgid "Redo clear" +msgstr "Argitu desegin" + +#, fuzzy +msgid "Redo connect" +msgstr "Lotura desegin" + +#, fuzzy +msgid "Redo cut" msgstr "Ebakia desegin" -msgid "Undo disconnect" +#, fuzzy +msgid "Redo disconnect" msgstr "Deslotu desegin" -msgid "Undo connect" -msgstr "Lotura desegin" +#, fuzzy +msgid "Redo duplicate" +msgstr "Bikoiztu desegin" -msgid "Undo clear" -msgstr "Argitu desegin" +#, fuzzy +msgid "Redo motion" +msgstr "Mugitze desegin" -msgid "Undo typing" +#, fuzzy +msgid "Redo paste" +msgstr "Itsatsi desegin" + +msgid "Redo typing" msgstr "" -msgid "Discard changes to '%s'?" -msgstr "'%s'-ren aldaketak utzi" +msgid "no Pd settings to clear" +msgstr "" -msgid "Do you want to save the changes you made in '%s'?" -msgstr "'%s'-ren egiten duzun aldaketak gorde nahi duzu?" +msgid "removed .pdsettings file" +msgstr "" + +msgid "couldn't delete .pdsettings file" +msgstr "" + +msgid "failed to erase Pd settings" +msgstr "" + +#, fuzzy +msgid "erased Pd settings" +msgstr "Ezarpen gustiak gorde" + +msgid "no Pd settings to erase" +msgstr "" + +msgid "skipping loading preferences... Pd seems to have crashed on startup." +msgstr "" + +msgid "(re-save preferences to reinstate them)" +msgstr "" + +msgid "File" +msgstr "Fitxategia" + +#, fuzzy +msgid "Edit" +msgstr "Editatu" + +msgid "Put" +msgstr "Jarri" + +msgid "Find" +msgstr "Aurikitu" + +#, fuzzy +msgid "Media" +msgstr "Komunikabidea" + +#, fuzzy +msgid "Window" +msgstr "Leihoa" + +msgid "Help" +msgstr "Laguntza" + +msgid "Show &Hidden Files and Directories" +msgstr "" -#: ../src/dialog_array.tcl:115 ../src/dialog_array.tcl:117 -#: ../src/pd_menus.tcl:100 ../src/pd_menus.tcl:101 ../src/pd_menus.tcl:146 -#: ../src/pd_menus.tcl:147 msgid "Copy" msgstr "Kopiatu" -#: ../src/dialog_array.tcl:118 ../src/dialog_array.tcl:120 -#: ../src/pd_menus.tcl:102 ../src/pd_menus.tcl:103 ../src/pd_menus.tcl:148 -#: ../src/pd_menus.tcl:149 #, fuzzy msgid "Paste" msgstr "Itsatsi" -#: ../src/dialog_array.tcl:264 ../src/dialog_array.tcl:266 msgid "Array Properties" msgstr "" -#: ../src/dialog_array.tcl:270 ../src/dialog_array.tcl:272 +msgid "Array" +msgstr "" + #, fuzzy msgid "Name:" msgstr "Izena:" -#: ../src/dialog_array.tcl:276 ../src/dialog_array.tcl:278 -#: ../src/dialog_canvas.tcl:178 ../src/dialog_canvas.tcl:193 -#: ../src/dialog_iemgui.tcl:619 ../src/dialog_iemgui.tcl:621 msgid "Size:" msgstr "Neurria:" -#: ../src/dialog_array.tcl:280 ../src/dialog_array.tcl:282 #, fuzzy msgid "Save contents" msgstr "Edukiak gorde" -#: ../src/dialog_array.tcl:284 ../src/dialog_array.tcl:286 msgid "Draw as:" msgstr "" -#: ../src/dialog_array.tcl:287 ../src/dialog_array.tcl:289 -#, fuzzy -msgid "Points" -msgstr "Puntuak" - -#: ../src/dialog_array.tcl:289 ../src/dialog_array.tcl:291 #, fuzzy msgid "Polygon" msgstr "Poligonoa" -#: ../src/dialog_array.tcl:291 ../src/dialog_array.tcl:293 +#, fuzzy +msgid "Points" +msgstr "Puntuak" + msgid "Bezier curve" msgstr "Bezier-en kurba" -#: ../src/dialog_array.tcl:297 ../src/dialog_array.tcl:299 msgid "Put array into:" msgstr "" -#: ../src/dialog_array.tcl:300 ../src/dialog_array.tcl:302 msgid "New graph" msgstr "Grafiko berria" -#: ../src/dialog_array.tcl:302 ../src/dialog_array.tcl:304 #, fuzzy msgid "Last graph" msgstr "Azken grafikoa" -#: ../src/dialog_array.tcl:306 ../src/dialog_array.tcl:308 -#, fuzzy -msgid "Delete array" -msgstr "Array ezabatu" +msgid "Options" +msgstr "" -#: ../src/dialog_array.tcl:312 ../src/dialog_array.tcl:314 #, fuzzy msgid "Open List View..." msgstr "Zerrenden bista ireki..." -#: ../src/dialog_array.tcl:319 ../src/dialog_array.tcl:321 -#: ../src/dialog_audio.tcl:136 ../src/dialog_canvas.tcl:205 -#: ../src/dialog_font.tcl:51 ../src/dialog_gatom.tcl:153 -#: ../src/dialog_gatom.tcl:161 ../src/dialog_iemgui.tcl:742 -#: ../src/dialog_iemgui.tcl:748 ../src/dialog_midi.tcl:91 -#: ../src/dialog_midi.tcl:226 +#, fuzzy +msgid "Delete array" +msgstr "Array ezabatu" + msgid "Cancel" msgstr "Utzi" -#: ../src/dialog_array.tcl:321 ../src/dialog_array.tcl:323 -#: ../src/dialog_audio.tcl:138 ../src/dialog_canvas.tcl:207 -#: ../src/dialog_gatom.tcl:156 ../src/dialog_gatom.tcl:164 -#: ../src/dialog_iemgui.tcl:745 ../src/dialog_iemgui.tcl:751 -#: ../src/dialog_midi.tcl:93 ../src/dialog_midi.tcl:228 msgid "Apply" msgstr "Aplikatu" -#: ../src/dialog_array.tcl:323 ../src/dialog_array.tcl:325 -#: ../src/dialog_audio.tcl:140 ../src/dialog_canvas.tcl:209 -#: ../src/dialog_font.tcl:53 ../src/dialog_font.tcl:92 -#: ../src/dialog_font.tcl:100 ../src/dialog_font.tcl:101 -#: ../src/dialog_gatom.tcl:159 ../src/dialog_gatom.tcl:167 -#: ../src/dialog_iemgui.tcl:748 ../src/dialog_iemgui.tcl:754 -#: ../src/dialog_midi.tcl:95 ../src/dialog_midi.tcl:230 msgid "OK" msgstr "" -#: ../src/dialog_audio.tcl:130 msgid "Audio Settings" msgstr "Audioaren ezarpenak" -#: ../src/dialog_audio.tcl:142 -msgid "Save All Settings" -msgstr "Ezarpen gustiak gorde" +#, fuzzy +msgid "Settings" +msgstr "MIDI-ren Ezarpenak" -#: ../src/dialog_audio.tcl:151 msgid "Sample rate:" msgstr "Samplearen heina:" -#: ../src/dialog_audio.tcl:153 msgid "Delay (msec):" msgstr "" -#: ../src/dialog_audio.tcl:158 +msgid "Block size:" +msgstr "" + msgid "Use callbacks" msgstr "" -#: ../src/dialog_audio.tcl:166 ../src/dialog_midi.tcl:105 -#: ../src/dialog_midi.tcl:241 -msgid "Input device 1:" -msgstr "Sartze tresna 1:" +msgid "Input Devices" +msgstr "Sartze tresna" -#: ../src/dialog_audio.tcl:169 ../src/dialog_audio.tcl:183 -#: ../src/dialog_audio.tcl:198 ../src/dialog_audio.tcl:213 -#: ../src/dialog_audio.tcl:232 ../src/dialog_audio.tcl:250 -#: ../src/dialog_audio.tcl:265 ../src/dialog_audio.tcl:280 -#, fuzzy msgid "Channels:" msgstr "Kanalak:" -#: ../src/dialog_audio.tcl:179 ../src/dialog_midi.tcl:115 -#: ../src/dialog_midi.tcl:251 -msgid "Input device 2:" -msgstr "Sartze tresna 2:" - -#: ../src/dialog_audio.tcl:194 ../src/dialog_midi.tcl:127 -#: ../src/dialog_midi.tcl:263 -msgid "Input device 3:" -msgstr "Sartze tresna 3:" - -#: ../src/dialog_audio.tcl:209 ../src/dialog_midi.tcl:139 -#: ../src/dialog_midi.tcl:275 -msgid "Input device 4:" -msgstr "Sartze tresna 4:" - -#: ../src/dialog_audio.tcl:223 ../src/dialog_midi.tcl:150 -#: ../src/dialog_midi.tcl:286 -msgid "Output device 1:" -msgstr "Irtendako tresna 1:" +msgid "Output Devices" +msgstr "Irtendako tresna" -#: ../src/dialog_audio.tcl:226 -msgid "(same as input device) .............. " +#, fuzzy +msgid "(same as input device)..." msgstr "(sartze tresna bezala) .............. " -#: ../src/dialog_audio.tcl:246 ../src/dialog_midi.tcl:160 -#: ../src/dialog_midi.tcl:296 -msgid "Output device 2:" -msgstr "Irtendako tresna 2:" - -#: ../src/dialog_audio.tcl:261 ../src/dialog_midi.tcl:171 -#: ../src/dialog_midi.tcl:307 -msgid "Output device 3:" -msgstr "Irtendako tresna 3:" +#, fuzzy +msgid "Use Multiple Devices" +msgstr "Anitz tresna erabili" -#: ../src/dialog_audio.tcl:276 ../src/dialog_midi.tcl:182 -#: ../src/dialog_midi.tcl:318 -msgid "Output device 4:" -msgstr "Irtendako tresna 4:" +msgid "Save All Settings" +msgstr "Ezarpen gustiak gorde" -#: ../src/dialog_audio.tcl:291 ../src/dialog_midi.tcl:195 -msgid "Use multiple devices" -msgstr "Anitz tresna erabili" +msgid "WARNING: unknown graphme flags received in pdtk_canvas_dialog" +msgstr "" -#: ../src/dialog_canvas.tcl:142 msgid "Canvas Properties" msgstr "" -#: ../src/dialog_canvas.tcl:146 #, fuzzy msgid "Scale" msgstr "Eskala" -#: ../src/dialog_canvas.tcl:150 msgid "X units per pixel:" msgstr "" -#: ../src/dialog_canvas.tcl:155 msgid "Y units per pixel:" msgstr "Y unitateak pixelengatik" -#: ../src/dialog_canvas.tcl:159 msgid "Appearance on parent patch" msgstr "Sortzaile patch-ean agertu" -#: ../src/dialog_canvas.tcl:161 msgid "Graph-On-Parent" msgstr "Sortzailean-Agertu" -#: ../src/dialog_canvas.tcl:165 msgid "Hide object name and arguments" msgstr "Objetuaren izena eta argumentuak ezkutatu" -#: ../src/dialog_canvas.tcl:170 msgid "Range and size" msgstr "Heina eta neurria" -#: ../src/dialog_canvas.tcl:174 -msgid "X range, from" +msgid "X range: from" msgstr "" -#: ../src/dialog_canvas.tcl:176 ../src/dialog_canvas.tcl:191 msgid "to" msgstr "" -#: ../src/dialog_canvas.tcl:180 ../src/dialog_canvas.tcl:195 #, fuzzy msgid "Margin:" msgstr "Ertz:" -#: ../src/dialog_canvas.tcl:189 -msgid "Y range, from" +msgid "Y range: from" msgstr "" -#: ../src/dialog_find.tcl:63 ../src/dialog_find.tcl:66 -#: ../src/dialog_find.tcl:79 ../src/dialog_find.tcl:80 -#: ../src/dialog_find.tcl:83 ../src/dialog_find.tcl:85 -#: ../src/dialog_find.tcl:87 ../src/dialog_find.tcl:101 -#: ../src/dialog_find.tcl:105 ../src/dialog_find.tcl:107 -#: ../src/pd_menus.tcl:45 -msgid "Find" -msgstr "Aurikitu" - -#: ../src/dialog_find.tcl:70 ../src/dialog_find.tcl:73 -#: ../src/dialog_find.tcl:87 ../src/dialog_find.tcl:91 -#: ../src/dialog_find.tcl:93 #, fuzzy -msgid "Search in" -msgstr "Bilatu" +msgid "Data Properties" +msgstr "Letraren propietateak" -#: ../src/dialog_find.tcl:72 ../src/dialog_find.tcl:75 -#: ../src/dialog_find.tcl:89 ../src/dialog_find.tcl:93 -#: ../src/dialog_find.tcl:95 -#, fuzzy -msgid "for:" +#, tcl-format +msgid "Found '%1$s' in %2$s" msgstr "" -#: ../src/dialog_find.tcl:83 ../src/dialog_find.tcl:90 -#: ../src/dialog_find.tcl:104 ../src/dialog_find.tcl:108 -#: ../src/dialog_find.tcl:110 ../src/pd_menus.tcl:86 ../src/pd_menus.tcl:87 -#: ../src/pd_menus.tcl:132 ../src/pd_menus.tcl:133 ../src/pd_menus.tcl:259 -#: ../src/pd_menus.tcl:272 ../src/pd_menus.tcl:295 ../src/pd_menus.tcl:308 -#: ../src/pd_menus.tcl:332 ../src/pd_menus.tcl:345 ../src/pd_menus.tcl:354 -#: ../src/pd_menus.tcl:381 ../src/pd_menus.tcl:392 ../src/pd_menus.tcl:419 -#: ../src/pd_menus.tcl:431 ../src/pd_menus.tcl:458 -msgid "Close" -msgstr "Itxi" +#, tcl-format +msgid "Couldn't find '%1$s' in %2$s" +msgstr "" -#: ../src/dialog_find.tcl:83 ../src/dialog_find.tcl:97 -#: ../src/dialog_find.tcl:101 ../src/dialog_find.tcl:103 -msgid "Match whole word only" -msgstr "Bakarrik hitz osoa berdindu" +#, fuzzy, tcl-format +msgid "Search in %s for:" +msgstr "Bilatu" + +#, tcl-format +msgid "Showed last '%1$s' in %2$s" +msgstr "" + +#, tcl-format +msgid "Showing '%1$d' out of %2$d items in %3$s" +msgstr "" -#: ../src/dialog_find.tcl:92 ../src/dialog_font.tcl:49 -#: ../src/dialog_font.tcl:50 ../src/pd-gui.tcl:280 ../src/pd-gui.tcl:283 -#: ../src/pd-gui.tcl:286 ../src/pd-gui.tcl:288 ../src/pd-gui.tcl:291 -#: ../src/pd_menus.tcl:212 ../src/pd_menus.tcl:258 ../src/pd_menus.tcl:285 -#: ../src/pdwindow.tcl:33 #, fuzzy msgid "Pd window" msgstr "Pd-en leihoa" -#: ../src/dialog_font.tcl:45 -msgid "Font Properties" -msgstr "Letraren propietateak" +msgid "Match whole word only" +msgstr "Bakarrik hitz osoa berdindu" + +msgid "Close" +msgstr "Itxi" -#: ../src/dialog_font.tcl:46 ../src/dialog_font.tcl:54 -#: ../src/dialog_font.tcl:55 #, fuzzy, tcl-format msgid "%s Font" msgstr "%s Letra" -#: ../src/dialog_font.tcl:61 ../src/dialog_font.tcl:96 -#: ../src/dialog_font.tcl:104 ../src/dialog_font.tcl:105 +#, fuzzy +msgid "Font" +msgstr "Letra-tipoa" + #, fuzzy msgid "Font Size" msgstr "Letraren neurria" -#: ../src/dialog_font.tcl:89 ../src/dialog_font.tcl:108 -#: ../src/dialog_font.tcl:116 ../src/dialog_font.tcl:117 -#, fuzzy msgid "Stretch" msgstr "" -#: ../src/dialog_font.tcl:96 ../src/dialog_font.tcl:115 -#: ../src/dialog_font.tcl:123 ../src/dialog_font.tcl:124 msgid "X and Y" msgstr "X eta Y" -#: ../src/dialog_font.tcl:98 ../src/dialog_font.tcl:117 -#: ../src/dialog_font.tcl:125 ../src/dialog_font.tcl:126 msgid "X only" msgstr "X bakarrik" -#: ../src/dialog_font.tcl:100 ../src/dialog_font.tcl:119 -#: ../src/dialog_font.tcl:127 ../src/dialog_font.tcl:128 msgid "Y only" msgstr "Y bakarrik" -#: ../src/dialog_gatom.tcl:93 msgid "Atom Box Properties" msgstr "Atom-en Lauki Propietateak" -#: ../src/dialog_gatom.tcl:99 msgid "Width:" msgstr "Zabalera:" -#: ../src/dialog_gatom.tcl:103 #, fuzzy msgid "Limits" msgstr "Mugak" -#: ../src/dialog_gatom.tcl:107 msgid "Lower:" msgstr "Beheko:" -#: ../src/dialog_gatom.tcl:112 ../src/dialog_gatom.tcl:113 #, fuzzy msgid "Upper:" msgstr "Gaineko:" -#: ../src/dialog_gatom.tcl:116 ../src/dialog_gatom.tcl:121 -#: ../src/dialog_iemgui.tcl:600 ../src/dialog_iemgui.tcl:652 -#: ../src/dialog_iemgui.tcl:657 msgid "Label" msgstr "Etiketa" -#: ../src/dialog_gatom.tcl:124 ../src/dialog_gatom.tcl:129 #, fuzzy -msgid "Left " +msgid "Left" msgstr "Ezkerra " -#: ../src/dialog_gatom.tcl:126 ../src/dialog_gatom.tcl:131 msgid "Right" msgstr "Eskuinea" -#: ../src/dialog_gatom.tcl:128 ../src/dialog_gatom.tcl:133 msgid "Top" msgstr "Goian" -#: ../src/dialog_gatom.tcl:130 ../src/dialog_gatom.tcl:135 msgid "Bottom" msgstr "Behean" -#: ../src/dialog_gatom.tcl:137 ../src/dialog_gatom.tcl:145 -#: ../src/dialog_iemgui.tcl:574 #, fuzzy msgid "Messages" msgstr "Mezuak" -#: ../src/dialog_gatom.tcl:141 ../src/dialog_gatom.tcl:149 -#: ../src/dialog_iemgui.tcl:578 msgid "Send symbol:" msgstr "Sinboloa bidali:" -#: ../src/dialog_gatom.tcl:147 ../src/dialog_gatom.tcl:155 -#: ../src/dialog_iemgui.tcl:585 #, fuzzy msgid "Receive symbol:" msgstr "Sinboloa jaso:" -#: ../src/dialog_iemgui.tcl:197 #, fuzzy msgid "Background color" msgstr "Atzeko kolorea" -#: ../src/dialog_iemgui.tcl:204 #, fuzzy msgid "Foreground color" msgstr "Aurreko kolorea" -#: ../src/dialog_iemgui.tcl:211 #, fuzzy msgid "Label color" msgstr "Etiketaren kolorea" -#: ../src/dialog_iemgui.tcl:272 -#, fuzzy msgid "Init" msgstr "" -#: ../src/dialog_iemgui.tcl:275 ../src/dialog_iemgui.tcl:546 msgid "No init" msgstr "" -#: ../src/dialog_iemgui.tcl:287 ../src/dialog_iemgui.tcl:558 msgid "Jump on click" msgstr "Klik egitean jauzi" -#: ../src/dialog_iemgui.tcl:290 ../src/dialog_iemgui.tcl:561 msgid "Steady on click" msgstr "" -#: ../src/dialog_iemgui.tcl:498 -#, tcl-format -msgid "%s Properties" -msgstr "%s-en Propietateak" - -#: ../src/dialog_iemgui.tcl:550 ../src/pd_menus.tcl:83 ../src/pd_menus.tcl:84 -#: ../src/pd_menus.tcl:129 ../src/pd_menus.tcl:130 ../src/pd_menus.tcl:260 -#: ../src/pd_menus.tcl:273 ../src/pd_menus.tcl:288 ../src/pd_menus.tcl:301 -#: ../src/pd_menus.tcl:325 ../src/pd_menus.tcl:338 ../src/pd_menus.tcl:355 -#: ../src/pd_menus.tcl:382 ../src/pd_menus.tcl:383 ../src/pd_menus.tcl:410 -#: ../src/pd_menus.tcl:422 ../src/pd_menus.tcl:449 -msgid "Save" -msgstr "Gorde" +#, fuzzy +msgid "Bang" +msgstr "Bang" -#: ../src/dialog_iemgui.tcl:608 -msgid "X offset" +msgid "Flash Time (msec)" msgstr "" -#: ../src/dialog_iemgui.tcl:611 ../src/dialog_iemgui.tcl:612 -msgid "Y offset" +msgid "Intrrpt:" msgstr "" -#: ../src/dialog_iemgui.tcl:642 ../src/dialog_iemgui.tcl:645 -msgid "Colors" -msgstr "Koloreak" +msgid "Hold:" +msgstr "" -#: ../src/dialog_iemgui.tcl:648 ../src/dialog_iemgui.tcl:651 #, fuzzy -msgid "Background" -msgstr "Hondo" +msgid "Toggle" +msgstr "Toggle" -#: ../src/dialog_iemgui.tcl:650 ../src/dialog_iemgui.tcl:654 -#, fuzzy -msgid "Front" -msgstr "Aurrealde" +msgid "Non Zero Value" +msgstr "" -#: ../src/dialog_iemgui.tcl:662 ../src/dialog_iemgui.tcl:668 -msgid "Compose color" -msgstr "Kolorea osatu" +msgid "Value:" +msgstr "" -#: ../src/dialog_iemgui.tcl:682 ../src/dialog_iemgui.tcl:688 #, fuzzy -msgid "Test label" -msgstr "Probaren etiketa" - -#: ../src/dialog_midi.tcl:85 -msgid "MIDI Settings" -msgstr "MIDI-ren Ezarpenak" +msgid "Number2" +msgstr "Zenbakia2" -#: ../src/dialog_midi.tcl:220 -msgid "ALSA MIDI Settings" -msgstr "ALSA MIDI-ren Esarpenak" +msgid "Width (digits):" +msgstr "" -#: ../src/dialog_midi.tcl:331 -msgid "Use multiple ALSA devices" -msgstr "ALSA tresna anitz erabili" +#, fuzzy +msgid "Height:" +msgstr "Eskuinea" -#: ../src/dialog_midi.tcl:337 -msgid "In Ports:" -msgstr "Sartzeko Portuetan:" +msgid "Output Range" +msgstr "" -#: ../src/dialog_midi.tcl:340 -msgid "Out Ports:" -msgstr "Aterako Portuetan:" +msgid "Log height:" +msgstr "" -#: ../src/g_editor.c:1663 -msgid "Discard changes to this window??" -msgstr "Leiho honetaren aldaketak baztertu??" +msgid "Vslider" +msgstr "" -#: ../src/g_editor.c:1668 -msgid "really quit?" -msgstr "Benetan irten?" +msgid "Hslider" +msgstr "" + +msgid "Vradio" +msgstr "" + +msgid "Num cells:" +msgstr "" + +msgid "Hradio" +msgstr "" + +msgid "VU Meter" +msgstr "" + +msgid "Canvas" +msgstr "" + +msgid "Visible Rectangle (pix)" +msgstr "" + +#, tcl-format +msgid "%s Properties" +msgstr "%s-en Propietateak" + +msgid "Parameters" +msgstr "" + +msgid "X offset:" +msgstr "" + +msgid "Y offset:" +msgstr "" + +msgid "Colors" +msgstr "Koloreak" + +#, fuzzy +msgid "Background" +msgstr "Hondo" + +#, fuzzy +msgid "Front" +msgstr "Aurrealde" + +msgid "Compose color" +msgstr "Kolorea osatu" -#: ../src/g_editor.c:1699 #, fuzzy -msgid "Close this window??" -msgstr "Lehioa honetan itxi?" +msgid "Test label" +msgstr "Probaren etiketa" + +#, fuzzy +msgid "Send a Pd message" +msgstr "Mezua Bidali..." + +msgid "(use arrow keys for history)" +msgstr "" + +msgid "MIDI Settings" +msgstr "MIDI-ren Ezarpenak" + +msgid "ALSA MIDI Settings" +msgstr "ALSA MIDI-ren Esarpenak" + +msgid "In Ports:" +msgstr "Sartzeko Portuetan:" + +msgid "Out Ports:" +msgstr "Aterako Portuetan:" + +msgid "Pd search path for objects, help, fonts, and other files" +msgstr "" + +msgid "Use standard paths" +msgstr "" + +msgid "Verbose" +msgstr "" + +msgid "Pd Documents Directory" +msgstr "" + +msgid "Browse" +msgstr "" + +msgid "Reset" +msgstr "" -#: ../src/pd-gui.tcl:185 ../src/pd-gui.tcl:195 ../src/pd-gui.tcl:203 -#: ../src/pd-gui.tcl:206 ../src/pd-gui.tcl:215 ../src/pd-gui.tcl:226 -msgid "Associated Files" -msgstr "Lotutako Fitxategiak" +msgid "Disable" +msgstr "" + +msgid "Externals Install Directory" +msgstr "" -#: ../src/pd-gui.tcl:186 ../src/pd-gui.tcl:196 ../src/pd-gui.tcl:204 -#: ../src/pd-gui.tcl:207 ../src/pd-gui.tcl:216 ../src/pd-gui.tcl:227 #, fuzzy -msgid "Pd Files" -msgstr "Pd Fitxategiak" +msgid "Clear" +msgstr "Menua Garbitu" + +msgid "Choose Pd documents directory:" +msgstr "" + +msgid "Install externals to directory:" +msgstr "" + +msgid "Add a new path" +msgstr "" + +msgid "Add new library" +msgstr "" + +msgid "Edit library" +msgstr "" + +msgid "Pd libraries to load on startup" +msgstr "" + +msgid "Startup flags:" +msgstr "" -#: ../src/pd-gui.tcl:187 ../src/pd-gui.tcl:205 ../src/pd-gui.tcl:208 -#: ../src/pd-gui.tcl:228 -msgid "Max Patch Files" -msgstr "Max Patch Fitxategiak" +msgid "Defeat real-time scheduling" +msgstr "" -#: ../src/pd-gui.tcl:188 ../src/pd-gui.tcl:206 ../src/pd-gui.tcl:209 -#: ../src/pd-gui.tcl:229 -msgid "Max Text Files" -msgstr "Max Testu Fitxategiak" +#, fuzzy +msgid "Help Browser" +msgstr "Arakatu..." -#: ../src/pd-gui.tcl:197 ../src/pd-gui.tcl:217 -msgid "Max Patch Files (.pat)" -msgstr "Max Patch Fitxategiak (.pat)" +msgid "(Tcl) MISSING CLOSE-BRACE '}': " +msgstr "" -#: ../src/pd-gui.tcl:198 ../src/pd-gui.tcl:218 -msgid "Max Text Files (.mxt)" -msgstr "Max Testu Fitxategiak (.mxt)" +msgid "(Tcl) INVALID COMMAND NAME: " +msgstr "" + +msgid "(Tcl) UNHANDLED ERROR: " +msgstr "" -#: ../src/pd-gui.tcl:270 ../src/pd-gui.tcl:290 #, tcl-format -msgid "WARNING: Font family '%s' not found, using default (%s)" -msgstr "ADI: Letraren familia '%s' aurkiturik ez, (%s) lehenetsi erabiltzen" +msgid "[deken]: installed version [%1$s] > %2$s...skipping!" +msgstr "" -#: ../src/pd-gui.tcl:278 ../src/pd-gui.tcl:298 #, tcl-format -msgid "WARNING: Font weight '%s' not found, using default (%s)" +msgid "[deken]: installed version [%1$s] < %2$s...overwriting!" msgstr "" -#: ../src/pd-gui.tcl:303 ../src/pd-gui.tcl:323 #, tcl-format -msgid "ERROR: %s failed to find font size (%s) that fits into %sx%s!" +msgid "[deken]: installed version [%1$s] == %2$s...skipping!" msgstr "" -#: ../src/pd-gui.tcl:478 ../src/pd-gui.tcl:483 ../src/pd-gui.tcl:501 -msgid "ERROR: 'pd' never showed up, 'pd-gui' quitting!" +msgid "[deken]: " msgstr "" -#: ../src/pd_menucommands.tcl:19 -msgid "Untitled" -msgstr "Izenburu gabe" +#, tcl-format +msgid "Successfully unzipped %1$s into %2$s." +msgstr "" -#: ../src/pd_menucommands.tcl:78 ../src/pd_menucommands.tcl:79 -#: ../src/pd_menucommands.tcl:90 -#, fuzzy -msgid "Send Message..." -msgstr "Mezua Bidali..." +msgid "[deken]: Unable to extract package automatically." +msgstr "" -#: ../src/pd_menucommands.tcl:82 ../src/pd_menucommands.tcl:83 -#: ../src/pd_menucommands.tcl:94 ../src/pd_menus.tcl:87 ../src/pd_menus.tcl:88 -#: ../src/pd_menus.tcl:133 ../src/pd_menus.tcl:134 ../src/pd_menus.tcl:147 -#: ../src/pd_menus.tcl:192 ../src/pd_menus.tcl:193 ../src/pd_menus.tcl:265 -#: ../src/pd_menus.tcl:278 ../src/pd_menus.tcl:292 ../src/pd_menus.tcl:305 -#: ../src/pd_menus.tcl:329 ../src/pd_menus.tcl:342 ../src/pd_menus.tcl:360 -#: ../src/pd_menus.tcl:387 ../src/pd_menus.tcl:414 ../src/pd_menus.tcl:426 -#: ../src/pd_menus.tcl:453 ../startup/object_db.tcl:123 -msgid "Message" -msgstr "Mezua" +msgid "Please perform the following steps manually:" +msgstr "" + +#, tcl-format +msgid "1. Unzip %s." +msgstr "" + +#, tcl-format +msgid "2. Copy the contents into %s." +msgstr "" + +#, tcl-format +msgid "[deken] uninstalling '%s'" +msgstr "" + +#, tcl-format +msgid "Uninstalling %1$s from %2$s failed!" +msgstr "" + +#, tcl-format +msgid "[deken] deken-plugin.tcl (Pd externals search) loaded from %s." +msgstr "" + +#, tcl-format +msgid "[deken] Platform detected: %s" +msgstr "" + +#, tcl-format +msgid "[deken] Platform re-detected: %s" +msgstr "" + +msgid "Show all" +msgstr "" -#: ../src/pd_menucommands.tcl:108 ../src/pd_menucommands.tcl:111 -#: ../src/pd_menus.tcl:112 ../src/pd_menus.tcl:113 ../src/pd_menus.tcl:117 -#: ../src/pd_menus.tcl:118 ../src/pd_menus.tcl:158 ../src/pd_menus.tcl:159 -#: ../src/pd_menus.tcl:163 ../src/pd_menus.tcl:164 #, fuzzy -msgid "Font" -msgstr "Letra-tipoa" +msgid "Search" +msgstr "Bilatu" + +msgid "To get a list of all available externals, try an empty search." +msgstr "" + +msgid "Find externals" +msgstr "" + +msgid "Only install externals uploaded by people you trust." +msgstr "" -#: ../src/pd_menucommands.tcl:123 ../src/pd_menucommands.tcl:126 -#: ../src/pd_menus.tcl:138 ../src/pd_menus.tcl:183 ../src/pd_menus.tcl:184 #, fuzzy msgid "Preferences" msgstr "Hobespenak" -#: ../src/pd_menus.tcl:45 -#, fuzzy -msgid "Edit" -msgstr "Editatu" +msgid "Installation options:" +msgstr "" -#: ../src/pd_menus.tcl:45 -msgid "File" -msgstr "Fitxategia" +msgid "Try to remove libraries before (re)installing them?" +msgstr "" -#: ../src/pd_menus.tcl:45 ../src/pdtk_canvas.tcl:48 ../src/pdtk_canvas.tcl:110 -#: ../src/pdtk_canvas.tcl:113 -msgid "Help" -msgstr "Laguntza" +msgid "Show README of newly installed libraries (if present)?" +msgstr "" -#: ../src/pd_menus.tcl:45 -#, fuzzy -msgid "Media" -msgstr "Komunikabidea" +msgid "Should newly installed libraries be added to Pd's search path?" +msgstr "" -#: ../src/pd_menus.tcl:45 -msgid "Put" -msgstr "Jarri" +msgid "Platform settings:" +msgstr "" + +#, tcl-format +msgid "Default platform: %s" +msgstr "" + +msgid "User-defined platform:" +msgstr "" + +msgid "Hide foreign architectures?" +msgstr "" + +#, fuzzy, tcl-format +msgid "Deken %s Preferences" +msgstr "Hobespenak" + +msgid "[deken]: Start searching for externals..." +msgstr "" + +#, tcl-format +msgid "[deken]: online? %s" +msgstr "" + +msgid "Are you online?" +msgstr "" + +msgid "Unable to perform search." +msgstr "" + +msgid "[deken]: No matching externals found." +msgstr "" + +msgid "Try using the full name e.g. 'freeverb'." +msgstr "" + +msgid "No matching externals found." +msgstr "" + +msgid "Please select a (writable) installation directory!" +msgstr "" + +#, tcl-format +msgid "Install %1$s to %2$s?" +msgstr "" + +#, tcl-format +msgid "" +"Commencing downloading of:\n" +"%1$s\n" +"Into %2$s..." +msgstr "" + +msgid "aborting.\n" +msgstr "" + +#, tcl-format +msgid "Unable to add %s to search paths" +msgstr "" + +#, tcl-format +msgid "Add %s to the Pd search paths?" +msgstr "" + +#, tcl-format +msgid "Added %s to search paths" +msgstr "" + +#, tcl-format +msgid "Unable to download from %1$s [%2$s]" +msgstr "" + +#, tcl-format +msgid "Unable to remove stray file %s" +msgstr "" + +#, tcl-format +msgid "Unable to rename downloaded file to %s" +msgstr "" + +#, fuzzy, tcl-format +msgid "searching for '%s'" +msgstr "'%s'-ren aldaketak utzi" + +#, tcl-format +msgid "Uploaded by %1$s @ %2$s" +msgstr "" + +msgid "Install package" +msgstr "" -#: ../src/pd_menus.tcl:45 #, fuzzy -msgid "Window" -msgstr "Leihoa" +msgid "Open webpage" +msgstr "Azkenaldi Ireki" -#: ../src/pd_menus.tcl:81 ../src/pd_menus.tcl:82 ../src/pd_menus.tcl:127 -#: ../src/pd_menus.tcl:128 ../src/pd_menus.tcl:255 ../src/pd_menus.tcl:267 -#: ../src/pd_menus.tcl:285 ../src/pd_menus.tcl:298 ../src/pd_menus.tcl:322 -#: ../src/pd_menus.tcl:335 ../src/pd_menus.tcl:349 ../src/pd_menus.tcl:376 -#: ../src/pd_menus.tcl:380 ../src/pd_menus.tcl:407 ../src/pd_menus.tcl:419 -#: ../src/pd_menus.tcl:446 -msgid "New" -msgstr "Berria" +msgid "_" +msgstr "" -#: ../src/pd_menus.tcl:82 ../src/pd_menus.tcl:83 ../src/pd_menus.tcl:128 -#: ../src/pd_menus.tcl:129 ../src/pd_menus.tcl:256 ../src/pd_menus.tcl:268 -#: ../src/pd_menus.tcl:286 ../src/pd_menus.tcl:299 ../src/pd_menus.tcl:323 -#: ../src/pd_menus.tcl:336 ../src/pd_menus.tcl:350 ../src/pd_menus.tcl:377 -#: ../src/pd_menus.tcl:381 ../src/pd_menus.tcl:408 ../src/pd_menus.tcl:420 -#: ../src/pd_menus.tcl:447 ../src/pdtk_canvas.tcl:46 -#: ../src/pdtk_canvas.tcl:108 ../src/pdtk_canvas.tcl:111 -#: ../src/pdtk_canvas.tcl:128 ../src/pdtk_canvas.tcl:130 -#: ../src/pdtk_canvas.tcl:131 ../src/pdtk_canvas.tcl:133 -msgid "Open" -msgstr "Ireki" +#, tcl-format +msgid "" +"Do you want Pd to create a documents directory for patches and external " +"libraries?\n" +"\n" +"Location: %s\n" +"\n" +"You can change or disable this later in the Path preferences." +msgstr "" + +#, tcl-format +msgid "" +"Pd documents directory cannot be found:\n" +"\n" +"%s\n" +"\n" +"Choose a new location?" +msgstr "" + +#, tcl-format +msgid "Couldn't create Pd documents directory: %s\n" +msgstr "" + +#, tcl-format +msgid "Couldn't create \"externals\" directory in: %s\n" +msgstr "" + +#, tcl-format +msgid "Couldn't create preferences \"%1$s\" in %2$s" +msgstr "" + +#, fuzzy +msgid "About Pd" +msgstr "Pd-ri Buruz" + +msgid "Save" +msgstr "Gorde" -#: ../src/pd_menus.tcl:84 ../src/pd_menus.tcl:85 ../src/pd_menus.tcl:130 -#: ../src/pd_menus.tcl:131 ../src/pd_menus.tcl:261 ../src/pd_menus.tcl:274 -#: ../src/pd_menus.tcl:289 ../src/pd_menus.tcl:302 ../src/pd_menus.tcl:326 -#: ../src/pd_menus.tcl:339 ../src/pd_menus.tcl:356 ../src/pd_menus.tcl:383 -#: ../src/pd_menus.tcl:384 ../src/pd_menus.tcl:411 ../src/pd_menus.tcl:423 -#: ../src/pd_menus.tcl:450 #, fuzzy msgid "Save As..." msgstr "Gorde Honela..." -#: ../src/pd_menus.tcl:88 ../src/pd_menus.tcl:89 ../src/pd_menus.tcl:134 -#: ../src/pd_menus.tcl:135 ../src/pd_menus.tcl:267 ../src/pd_menus.tcl:280 -#: ../src/pd_menus.tcl:293 ../src/pd_menus.tcl:306 ../src/pd_menus.tcl:330 -#: ../src/pd_menus.tcl:343 ../src/pd_menus.tcl:362 ../src/pd_menus.tcl:388 -#: ../src/pd_menus.tcl:389 ../src/pd_menus.tcl:415 ../src/pd_menus.tcl:427 -#: ../src/pd_menus.tcl:454 #, fuzzy msgid "Print..." msgstr "Inprimatu..." -#: ../src/pd_menus.tcl:93 ../src/pd_menus.tcl:94 ../src/pd_menus.tcl:139 -#: ../src/pd_menus.tcl:140 -#, fuzzy -msgid "Undo" -msgstr "Desegin" - -#: ../src/pd_menus.tcl:95 ../src/pd_menus.tcl:96 ../src/pd_menus.tcl:141 -#: ../src/pd_menus.tcl:142 -#, fuzzy -msgid "Redo" -msgstr "Berregin" - -#: ../src/pd_menus.tcl:98 ../src/pd_menus.tcl:99 ../src/pd_menus.tcl:144 -#: ../src/pd_menus.tcl:145 -msgid "Cut" -msgstr "Mostu" +msgid "Paste Replace" +msgstr "" -#: ../src/pd_menus.tcl:104 ../src/pd_menus.tcl:105 ../src/pd_menus.tcl:150 -#: ../src/pd_menus.tcl:151 #, fuzzy msgid "Duplicate" msgstr "Bikoiztu" -#: ../src/pd_menus.tcl:106 ../src/pd_menus.tcl:107 ../src/pd_menus.tcl:152 -#: ../src/pd_menus.tcl:153 -#, fuzzy -msgid "Select All" -msgstr "Guztia Aukeratu" +msgid "Zoom In" +msgstr "" -#: ../src/pd_menus.tcl:110 ../src/pd_menus.tcl:111 ../src/pd_menus.tcl:115 -#: ../src/pd_menus.tcl:116 ../src/pd_menus.tcl:156 ../src/pd_menus.tcl:157 -#: ../src/pd_menus.tcl:161 ../src/pd_menus.tcl:162 -#, fuzzy -msgid "Text Editor" -msgstr "Testu Editorea" +msgid "Zoom Out" +msgstr "" -#: ../src/pd_menus.tcl:120 ../src/pd_menus.tcl:121 ../src/pd_menus.tcl:166 -#: ../src/pd_menus.tcl:167 msgid "Tidy Up" msgstr "Txukuntzea" -#: ../src/pd_menus.tcl:122 ../src/pd_menus.tcl:123 ../src/pd_menus.tcl:168 -#: ../src/pd_menus.tcl:169 -msgid "Toggle Console" +msgid "(Dis)Connect Selection" msgstr "" -#: ../src/pd_menus.tcl:124 ../src/pd_menus.tcl:125 ../src/pd_menus.tcl:170 -#: ../src/pd_menus.tcl:171 -#, fuzzy -msgid "Clear Console" -msgstr "Kontsola Garbitu" +msgid "Triggerize" +msgstr "" -#: ../src/pd_menus.tcl:128 ../src/pd_menus.tcl:129 ../src/pd_menus.tcl:174 -#: ../src/pd_menus.tcl:175 #, fuzzy msgid "Edit Mode" msgstr "Edizio Modua" -#: ../src/pd_menus.tcl:145 ../src/pd_menus.tcl:190 ../src/pd_menus.tcl:191 -msgid "Object" -msgstr "Objektu" +#, fuzzy +msgid "Undo" +msgstr "Desegin" -#: ../src/pd_menus.tcl:149 ../src/pd_menus.tcl:194 ../src/pd_menus.tcl:195 #, fuzzy -msgid "Number" -msgstr "Zenbakia" +msgid "Redo" +msgstr "Berregin" -#: ../src/pd_menus.tcl:151 ../src/pd_menus.tcl:196 ../src/pd_menus.tcl:197 -msgid "Symbol" -msgstr "Sinboloa" +msgid "List of objects..." +msgstr "" -#: ../src/pd_menus.tcl:153 ../src/pd_menus.tcl:198 ../src/pd_menus.tcl:199 -#, fuzzy -msgid "Comment" -msgstr "Azalpen" +msgid "New" +msgstr "Berria" + +msgid "Open" +msgstr "Ireki" -#: ../src/pd_menus.tcl:156 ../src/pd_menus.tcl:201 ../src/pd_menus.tcl:202 #, fuzzy -msgid "Bang" -msgstr "Bang" +msgid "Message..." +msgstr "Mezua" + +msgid "Cut" +msgstr "Mostu" -#: ../src/pd_menus.tcl:158 ../src/pd_menus.tcl:203 ../src/pd_menus.tcl:204 #, fuzzy -msgid "Toggle" -msgstr "Toggle" +msgid "Select All" +msgstr "Guztia Aukeratu" -#: ../src/pd_menus.tcl:160 ../src/pd_menus.tcl:205 ../src/pd_menus.tcl:206 #, fuzzy -msgid "Number2" -msgstr "Zenbakia2" +msgid "Clear Console" +msgstr "Kontsola Garbitu" -#: ../src/pd_menus.tcl:162 ../src/pd_menus.tcl:207 ../src/pd_menus.tcl:208 -msgid "Vslider" -msgstr "" +msgid "Object" +msgstr "Objektu" -#: ../src/pd_menus.tcl:164 ../src/pd_menus.tcl:209 ../src/pd_menus.tcl:210 -#, fuzzy -msgid "Hslider" -msgstr "" +msgid "Message" +msgstr "Mezua" -#: ../src/pd_menus.tcl:166 ../src/pd_menus.tcl:211 ../src/pd_menus.tcl:212 #, fuzzy -msgid "Vradio" -msgstr "" - -#: ../src/pd_menus.tcl:168 ../src/pd_menus.tcl:213 ../src/pd_menus.tcl:214 -msgid "Hradio" -msgstr "" +msgid "Number" +msgstr "Zenbakia" -#: ../src/pd_menus.tcl:170 ../src/pd_menus.tcl:215 ../src/pd_menus.tcl:216 -msgid "VU Meter" -msgstr "" +msgid "Symbol" +msgstr "Sinboloa" -#: ../src/pd_menus.tcl:172 ../src/pd_menus.tcl:217 ../src/pd_menus.tcl:218 #, fuzzy -msgid "Canvas" -msgstr "" +msgid "Comment" +msgstr "Azalpen" -#: ../src/pd_menus.tcl:175 ../src/pd_menus.tcl:220 ../src/pd_menus.tcl:221 msgid "Graph" msgstr "Grafikoa" -#: ../src/pd_menus.tcl:176 ../src/pd_menus.tcl:221 ../src/pd_menus.tcl:222 -#, fuzzy -msgid "Array" -msgstr "" - -#: ../src/pd_menus.tcl:181 ../src/pd_menus.tcl:226 ../src/pd_menus.tcl:227 #, fuzzy msgid "Find..." msgstr "Bilatu..." -#: ../src/pd_menus.tcl:183 ../src/pd_menus.tcl:228 ../src/pd_menus.tcl:229 msgid "Find Again" msgstr "Berriro Bilatu" -#: ../src/pd_menus.tcl:185 ../src/pd_menus.tcl:230 ../src/pd_menus.tcl:231 msgid "Find Last Error" msgstr "Azken Akatsa Bilatu" -#: ../src/pd_menus.tcl:191 ../src/pd_menus.tcl:236 ../src/pd_menus.tcl:237 msgid "DSP On" msgstr "DSP Piztuta" -#: ../src/pd_menus.tcl:193 ../src/pd_menus.tcl:238 ../src/pd_menus.tcl:239 #, fuzzy msgid "DSP Off" msgstr "DSP Itzali" -#: ../src/pd_menus.tcl:196 ../src/pd_menus.tcl:242 ../src/pd_menus.tcl:269 msgid "Test Audio and MIDI..." msgstr "Audio eta MIDI Probatu" -#: ../src/pd_menus.tcl:198 ../src/pd_menus.tcl:244 ../src/pd_menus.tcl:271 #, fuzzy msgid "Load Meter" msgstr "Kontagailua Kargatu" -#: ../src/pd_menus.tcl:205 ../src/pd_menus.tcl:251 ../src/pd_menus.tcl:278 +msgid "Audio Settings..." +msgstr "Audioaren Ezarpenak" + +msgid "MIDI Settings..." +msgstr "MIDI Ezarpenak" + msgid "Minimize" msgstr "Gutxitu" -#: ../src/pd_menus.tcl:207 ../src/pd_menus.tcl:253 ../src/pd_menus.tcl:280 -#, fuzzy msgid "Zoom" msgstr "" -#: ../src/pd_menus.tcl:210 ../src/pd_menus.tcl:256 ../src/pd_menus.tcl:283 -#, fuzzy -msgid "Parent Window" -msgstr "" - -#: ../src/pd_menus.tcl:216 ../src/pd_menus.tcl:262 ../src/pd_menus.tcl:289 msgid "Bring All to Front" msgstr "Ekarri Gustia Aurrera" -#: ../src/pd_menus.tcl:224 ../src/pd_menus.tcl:241 ../src/pd_menus.tcl:253 -#: ../src/pd_menus.tcl:270 ../src/pd_menus.tcl:297 ../src/pd_menus.tcl:335 -#: ../src/pd_menus.tcl:362 #, fuzzy -msgid "About Pd" -msgstr "Pd-ri Buruz" +msgid "Next Window" +msgstr "Leihoa" + +msgid "Previous Window" +msgstr "" + +msgid "Parent Window" +msgstr "" -#: ../src/pd_menus.tcl:227 ../src/pd_menus.tcl:273 ../src/pd_menus.tcl:300 msgid "HTML Manual..." msgstr "" -#: ../src/pd_menus.tcl:229 ../src/pd_menus.tcl:275 ../src/pd_menus.tcl:302 #, fuzzy msgid "Browser..." msgstr "Arakatu..." -#: ../src/pd_menus.tcl:248 ../src/pd_menus.tcl:260 ../src/pd_menus.tcl:342 -#: ../src/pd_menus.tcl:369 -msgid "Preferences..." -msgstr "Hobespenak..." +msgid "puredata.info" +msgstr "" -#: ../src/pd_menus.tcl:257 ../src/pd_menus.tcl:270 ../src/pd_menus.tcl:352 -#: ../src/pd_menus.tcl:379 -msgid "Open Recent" -msgstr "Azkenaldi Ireki" +msgid "Report a bug" +msgstr "" -#: ../src/pd_menus.tcl:263 -msgid "Audio Settings..." +#, fuzzy +msgid "Clear Menu" +msgstr "Menua Garbitu" + +msgid "" +"Delete all preferences?\n" +"(takes effect when Pd is restarted)" +msgstr "" + +msgid "Path..." +msgstr "" + +msgid "Startup..." +msgstr "" + +#, fuzzy +msgid "Audio..." msgstr "Audioaren Ezarpenak" -#: ../src/pd_menus.tcl:265 -msgid "MIDI Settings..." +#, fuzzy +msgid "MIDI..." msgstr "MIDI Ezarpenak" -#: ../src/pd_menus.tcl:296 ../src/pd_menus.tcl:309 ../src/pd_menus.tcl:333 -#: ../src/pd_menus.tcl:346 ../src/pd_menus.tcl:393 ../src/pd_menus.tcl:420 -#: ../src/pd_menus.tcl:432 ../src/pd_menus.tcl:459 -msgid "Quit" -msgstr "Irten" +#, fuzzy +msgid "Zoom New Windows" +msgstr "Leihoa" -#: ../src/pd_menus.tcl:304 ../src/pd_menus.tcl:331 #, fuzzy -msgid "Clear Menu" -msgstr "Menua Garbitu" +msgid "Save All Preferences" +msgstr "Hobespenak" + +#, fuzzy +msgid "Save to..." +msgstr "Gorde Honela..." + +msgid "Load from..." +msgstr "" + +msgid "Forget All..." +msgstr "" + +msgid "Open Recent" +msgstr "Azkenaldi Ireki" + +msgid "Quit" +msgstr "Irten" -#: ../src/pdtk_canvas.tcl:44 ../src/pdtk_canvas.tcl:106 -#: ../src/pdtk_canvas.tcl:109 ../src/pdtk_canvas.tcl:123 -#: ../src/pdtk_canvas.tcl:125 ../src/pdtk_canvas.tcl:126 -#: ../src/pdtk_canvas.tcl:128 msgid "Properties" msgstr "Propietateak" -#: ../src/pdwindow.tcl:43 #, fuzzy +msgid "Audio on" +msgstr "Audioaren ezarpenak" + +msgid "Audio off" +msgstr "" + +msgid "(Tcl) MISSING CLOSE-BRACKET ']': " +msgstr "" + +msgid "Tcl:" +msgstr "" + +msgid "Pd" +msgstr "" + msgid "DSP" msgstr "" -#: ../startup/object_db.tcl:113 -msgid "Signal" -msgstr "Seinalea" +msgid "Audio I/O error" +msgstr "" -#: ../startup/object_db.tcl:114 -msgid "Generators" -msgstr "Generadoreak" +msgid "Log:" +msgstr "" -#: ../startup/object_db.tcl:115 -#, fuzzy -msgid "Filters" -msgstr "Filtroak" +msgid "fatal" +msgstr "" -#: ../startup/object_db.tcl:116 ../startup/object_db.tcl:124 -msgid "Math" -msgstr "Matematika" +msgid "error" +msgstr "" + +msgid "normal" +msgstr "" -#: ../startup/object_db.tcl:117 ../startup/object_db.tcl:125 -msgid "I/O" +msgid "debug" msgstr "" -#: ../startup/object_db.tcl:118 ../startup/object_db.tcl:126 -msgid "Sampling" +msgid "all" msgstr "" -#: ../startup/object_db.tcl:119 ../startup/object_db.tcl:128 -msgid "Routing" +msgid "New..." msgstr "" -#: ../startup/object_db.tcl:120 ../startup/object_db.tcl:129 -msgid "Others" -msgstr "Besteak" +#, fuzzy +msgid "Edit..." +msgstr "Editatu" + +#, fuzzy +msgid "Delete" +msgstr "Array ezabatu" + +#, tcl-format +msgid "Ignoring '%s': doesn't exist" +msgstr "" -#: ../startup/object_db.tcl:127 -msgid "GUI" +#, tcl-format +msgid "Ignoring '%s': doesn't look like a Pd-file" msgstr "" + +#~ msgid "WARNING: Font family '%s' not found, using default (%s)" +#~ msgstr "ADI: Letraren familia '%s' aurkiturik ez, (%s) lehenetsi erabiltzen" + +#~ msgid "Generators" +#~ msgstr "Generadoreak" + +#~ msgid "Math" +#~ msgstr "Matematika" + +#~ msgid "Input device 2:" +#~ msgstr "Sartze tresna 2:" + +#~ msgid "Others" +#~ msgstr "Besteak" + +#~ msgid "Use multiple ALSA devices" +#~ msgstr "ALSA tresna anitz erabili" + +#~ msgid "Preferences..." +#~ msgstr "Hobespenak..." + +#~ msgid "Discard changes to this window??" +#~ msgstr "Leiho honetaren aldaketak baztertu??" + +#~ msgid "really quit?" +#~ msgstr "Benetan irten?" + +#~ msgid "Max Patch Files (.pat)" +#~ msgstr "Max Patch Fitxategiak (.pat)" + +#~ msgid "Untitled" +#~ msgstr "Izenburu gabe" + +#~ msgid "Output device 2:" +#~ msgstr "Irtendako tresna 2:" + +#~ msgid "Max Text Files" +#~ msgstr "Max Testu Fitxategiak" + +#~ msgid "Signal" +#~ msgstr "Seinalea" + +#, fuzzy +#~ msgid "Close this window??" +#~ msgstr "Lehioa honetan itxi?" + +#~ msgid "Output device 3:" +#~ msgstr "Irtendako tresna 3:" + +#, fuzzy +#~ msgid "Text Editor" +#~ msgstr "Testu Editorea" + +#~ msgid "Input device 3:" +#~ msgstr "Sartze tresna 3:" + +#~ msgid "Max Patch Files" +#~ msgstr "Max Patch Fitxategiak" + +#~ msgid "Associated Files" +#~ msgstr "Lotutako Fitxategiak" + +#~ msgid "Input device 4:" +#~ msgstr "Sartze tresna 4:" + +#~ msgid "Max Text Files (.mxt)" +#~ msgstr "Max Testu Fitxategiak (.mxt)" + +#, fuzzy +#~ msgid "Filters" +#~ msgstr "Filtroak" + +#~ msgid "Output device 4:" +#~ msgstr "Irtendako tresna 4:" + +#, fuzzy +#~ msgid "Pd Files" +#~ msgstr "Pd Fitxategiak" diff --git a/po/fr.po b/po/fr.po index 5d02d16faa..98cd09bd0c 100644 --- a/po/fr.po +++ b/po/fr.po @@ -3,540 +3,1102 @@ # msgid "" msgstr "" -"Project-Id-Version: Pure Data 0.43\n" +"Project-Id-Version: Pure Data 0.49-0\n" "Report-Msgid-Bugs-To: pd-dev@iem.at\n" -"POT-Creation-Date: 2009-08-18 20:56-0400\n" -"PO-Revision-Date: \n" -"Last-Translator: Cyrille Henry\n" +"POT-Creation-Date: 2017-07-06 18:10+0200\n" +"PO-Revision-Date: 2018-09-11 16:22+0200\n" +"Last-Translator: Cyrille Henry / Antoine Rousseau / Antoine Villeret / " +"Baptiste Chatel / JP Cimalando / Olivier Humbert\n" "Language-Team: \n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 2.1.1\n" + +msgid "-------dimensions(digits)(pix):-------" +msgstr "------dimensions(chiffres)(pix):------" + +msgid "--------dimensions(pix)(pix):--------" +msgstr "--------dimensions(pix)(pix):--------" + +msgid "----------dimensions(pix):-----------" +msgstr "----------dimensions(pix):-----------" + +msgid "--------flash-time(ms)(ms):---------" +msgstr "-------durée_du_flash(ms)(ms):------" + +msgid "-----------output-range:-----------" +msgstr "---------échelle_de_sortie:--------" + +msgid "------selectable_dimensions(pix):------" +msgstr "----dimensions_sélectionnable(pix):----" + +msgid "------visible_rectangle(pix)(pix):------" +msgstr "------rectangle_visible(pix)(pix):------" + +msgid "bottom:" +msgstr "bas :" + +msgid "height:" +msgstr "hauteur :" + +msgid "hold:" +msgstr "maintient :" + +msgid "intrrpt:" +msgstr "intrrpt :" + +msgid "left:" +msgstr "gauche :" + +msgid "lin" +msgstr "lin" + +msgid "log" +msgstr "log" + +msgid "log-height:" +msgstr "Hauteur de log :" + +msgid "max:" +msgstr "max :" + +msgid "min:" +msgstr "min :" + +msgid "right:" +msgstr "droite :" + +msgid "size:" +msgstr "taille :" + +msgid "top:" +msgstr "haut :" + +msgid "value:" +msgstr "valeur :" + +msgid "width:" +msgstr "largeur :" + +#, tcl-format +msgid "Do you want to save the changes you made in '%s'?" +msgstr "Enregistrer les modifications de '%s' ?" + +#, tcl-format +msgid "Discard changes to '%s'?" +msgstr "Abandonner les modifications de '%s' ?" + +msgid "Undo clear" +msgstr "Annuler l'effacement" + +msgid "Undo connect" +msgstr "Annuler la connexion" + +msgid "Undo cut" +msgstr "Annuler la suppression" + +msgid "Undo disconnect" +msgstr "Annuler la déconnexion" + +msgid "Undo duplicate" +msgstr "Annuler la duplication" + +msgid "Undo motion" +msgstr "Annuler le déplacement" + +msgid "Undo paste" +msgstr "Annuler la copie" + +msgid "Undo typing" +msgstr "Annuler la frappe" + +msgid "Redo clear" +msgstr "Refaire l'effacement" + +msgid "Redo connect" +msgstr "Refaire la connexion" + +msgid "Redo cut" +msgstr "Refaire la suppression" + +msgid "Redo disconnect" +msgstr "Refaire la déconnexion" + +msgid "Redo duplicate" +msgstr "Refaire la duplication" + +msgid "Redo motion" +msgstr "Refaire le déplacement" + +msgid "Redo paste" +msgstr "Refaire la copie" + +msgid "Redo typing" +msgstr "Refaire la frappe" + +msgid "no Pd settings to clear" +msgstr "aucune préférence à effacer" + +msgid "removed .pdsettings file" +msgstr "le fichier .pdsettings a été supprimé" + +msgid "couldn't delete .pdsettings file" +msgstr "le fichier .pdsettings n'a pas pu être supprimé" + +msgid "failed to erase Pd settings" +msgstr "échec de la suppression des préférences" + +msgid "erased Pd settings" +msgstr "préférences effacées" + +msgid "no Pd settings to erase" +msgstr "pas de paramètres a effacer" + +msgid "skipping loading preferences... Pd seems to have crashed on startup." +msgstr "" +"Pd semble ne pas avoir démarré correctement, les préférences n'ont pas été " +"chargées." + +msgid "(re-save preferences to reinstate them)" +msgstr "(enregistrez à nouveau les préférences afin de les rétablir)" + +msgid "File" +msgstr "Fichier" + +msgid "Edit" +msgstr "Édition" + +msgid "Put" +msgstr "Ajouter" + +msgid "Find" +msgstr "Rechercher" + +msgid "Media" +msgstr "Média" + +msgid "Window" +msgstr "Fenêtre" + +msgid "Help" +msgstr "Aide" + +msgid "Show &Hidden Files and Directories" +msgstr "Affic&her les fichiers et dossiers cachés" -#: ../src/dialog_array.tcl:117 ../src/pd_menus.tcl:100 msgid "Copy" msgstr "Copier" -#: ../src/dialog_array.tcl:120 ../src/pd_menus.tcl:102 msgid "Paste" msgstr "Coller" -#: ../src/dialog_array.tcl:266 msgid "Array Properties" msgstr "Propriétés du tableau" -#: ../src/dialog_array.tcl:272 +msgid "Array" +msgstr "Tableau" + msgid "Name:" -msgstr "Nom:" +msgstr "Nom :" -#: ../src/dialog_array.tcl:278 ../src/dialog_canvas.tcl:178 -#: ../src/dialog_canvas.tcl:193 ../src/dialog_iemgui.tcl:619 msgid "Size:" -msgstr "Taille:" +msgstr "Taille :" -#: ../src/dialog_array.tcl:282 msgid "Save contents" -msgstr "Sauver le contenu" +msgstr "Enregistrer le contenu" -#: ../src/dialog_array.tcl:286 msgid "Draw as:" -msgstr "" - -#: ../src/dialog_array.tcl:289 -msgid "Points" -msgstr "Points" +msgstr "Dessiner en :" -#: ../src/dialog_array.tcl:291 msgid "Polygon" msgstr "Polygone" -#: ../src/dialog_array.tcl:293 +msgid "Points" +msgstr "Points" + msgid "Bezier curve" -msgstr "courbe de Bezier" +msgstr "Courbe de Bézier" -#: ../src/dialog_array.tcl:299 msgid "Put array into:" -msgstr "" +msgstr "Placer le tableau dans :" -#: ../src/dialog_array.tcl:302 msgid "New graph" msgstr "Nouveau graphique" -#: ../src/dialog_array.tcl:304 msgid "Last graph" -msgstr "" +msgstr "Graphique précédent" -#: ../src/dialog_array.tcl:308 -msgid "Delete array" -msgstr "supprimer le tableau" +msgid "Options" +msgstr "Options" -#: ../src/dialog_array.tcl:314 msgid "Open List View..." -msgstr "" +msgstr "Ouvrir en liste..." + +msgid "Delete array" +msgstr "Supprimer le tableau" -#: ../src/dialog_array.tcl:321 ../src/dialog_canvas.tcl:205 -#: ../src/dialog_font.tcl:51 ../src/dialog_gatom.tcl:161 -#: ../src/dialog_iemgui.tcl:742 msgid "Cancel" msgstr "Annuler" -#: ../src/dialog_array.tcl:323 ../src/dialog_canvas.tcl:207 -#: ../src/dialog_gatom.tcl:164 ../src/dialog_iemgui.tcl:745 msgid "Apply" msgstr "Appliquer" -#: ../src/dialog_array.tcl:325 ../src/dialog_canvas.tcl:209 -#: ../src/dialog_font.tcl:53 ../src/dialog_gatom.tcl:167 -#: ../src/dialog_iemgui.tcl:748 msgid "OK" msgstr "OK" -#: ../src/dialog_canvas.tcl:142 +msgid "Audio Settings" +msgstr "Paramètres audio" + +msgid "Settings" +msgstr "Paramètres" + +msgid "Sample rate:" +msgstr "Fréquence d'échantillonnage :" + +msgid "Delay (msec):" +msgstr "Délai(ms) :" + +msgid "Block size:" +msgstr "Échantillons par bloc :" + +msgid "Use callbacks" +msgstr "Utiliser des callbacks" + +msgid "Input Devices" +msgstr "Périphériques d'entrée" + +msgid "Channels:" +msgstr "Nombre de canaux :" + +msgid "Output Devices" +msgstr "Périphériques de sortie" + +msgid "(same as input device)..." +msgstr "(même que le périphérique d'entrée)..." + +msgid "Use Multiple Devices" +msgstr "Utiliser plusieurs périphériques" + +msgid "Save All Settings" +msgstr "Enregistrer tous les réglages" + +msgid "WARNING: unknown graphme flags received in pdtk_canvas_dialog" +msgstr "ATTENTION: unknown graphme flags received in pdtk_canvas_dialog" + msgid "Canvas Properties" msgstr "Propriétés du Canvas" -#: ../src/dialog_canvas.tcl:146 msgid "Scale" -msgstr "Echéle" +msgstr "Échelle" -#: ../src/dialog_canvas.tcl:150 msgid "X units per pixel:" -msgstr "" +msgstr "Unités par pixel en X :" -#: ../src/dialog_canvas.tcl:155 msgid "Y units per pixel:" -msgstr "" +msgstr "Unités par pixel en Y :" -#: ../src/dialog_canvas.tcl:159 msgid "Appearance on parent patch" -msgstr "" +msgstr "Aspect dans le patch parent" -#: ../src/dialog_canvas.tcl:161 msgid "Graph-On-Parent" -msgstr "" +msgstr "Graph-On-Parent (dessiner dans le patch parent)" -#: ../src/dialog_canvas.tcl:165 msgid "Hide object name and arguments" -msgstr "cacher le nom et arguments de l'objet" +msgstr "Cacher le nom et les arguments de l'objet" -#: ../src/dialog_canvas.tcl:170 msgid "Range and size" -msgstr "taille et échèle" +msgstr "Intervalle et taille" -#: ../src/dialog_canvas.tcl:174 -msgid "X range, from" -msgstr "" +msgid "X range: from" +msgstr "Intervalle X : de" -#: ../src/dialog_canvas.tcl:176 ../src/dialog_canvas.tcl:191 msgid "to" msgstr "à" -#: ../src/dialog_canvas.tcl:180 ../src/dialog_canvas.tcl:195 msgid "Margin:" -msgstr "Marges" +msgstr "Marges :" -#: ../src/dialog_canvas.tcl:189 -msgid "Y range, from" -msgstr "" +msgid "Y range: from" +msgstr "Intervalle Y : de" -#: ../src/dialog_find.tcl:63 ../src/dialog_find.tcl:80 ../src/pd_menus.tcl:45 -msgid "Find" -msgstr "Rechercher" +msgid "Data Properties" +msgstr "Propriétés de la donnée" + +#, tcl-format +msgid "Found '%1$s' in %2$s" +msgstr "'%1$s' trouvé dans %2$s" + +#, tcl-format +msgid "Couldn't find '%1$s' in %2$s" +msgstr "'%1$s' non trouvé dans %2$s" + +#, tcl-format +msgid "Search in %s for:" +msgstr "Rechercher dans %s :" + +#, tcl-format +msgid "Showed last '%1$s' in %2$s" +msgstr "Mise en évidence du dernier '%1$s' dans %2$s" -#: ../src/dialog_find.tcl:70 -msgid "Search in" -msgstr "Rechercher dans" +#, tcl-format +msgid "Showing '%1$d' out of %2$d items in %3$s" +msgstr "Mise en évidence de l'exemplaire %1$d sur %2$d de '%3$s'" -#: ../src/dialog_find.tcl:72 -msgid "for:" -msgstr "pour:" +msgid "Pd window" +msgstr "Fenêtre Pd" + +msgid "Match whole word only" +msgstr "Mot entier seulement" -#: ../src/dialog_find.tcl:83 ../src/pd_menus.tcl:86 ../src/pd_menus.tcl:259 -#: ../src/pd_menus.tcl:295 ../src/pd_menus.tcl:332 msgid "Close" msgstr "Fermer" -#: ../src/dialog_font.tcl:45 -msgid "Patch Font" -msgstr "Police du patch" +#, tcl-format +msgid "%s Font" +msgstr "Police de %s" -#: ../src/dialog_font.tcl:61 -msgid "Font Size:" -msgstr "taille de la police:" +msgid "Font" +msgstr "Police" + +msgid "Font Size" +msgstr "Taille" -#: ../src/dialog_font.tcl:89 -msgid "Stretch:" +msgid "Stretch" msgstr "Étirer" -#: ../src/dialog_font.tcl:96 msgid "X and Y" msgstr "X et Y" -#: ../src/dialog_font.tcl:98 msgid "X only" msgstr "seulement X" -#: ../src/dialog_font.tcl:100 msgid "Y only" msgstr "seulement Y" -#: ../src/dialog_gatom.tcl:93 msgid "Atom Box Properties" -msgstr "Propriétés du nombre" +msgstr "Propriétés de la boîte Nombre/Symbole" -#: ../src/dialog_gatom.tcl:99 msgid "Width:" -msgstr "Largeur:" +msgstr "Largeur :" -#: ../src/dialog_gatom.tcl:103 msgid "Limits" msgstr "Limites" -#: ../src/dialog_gatom.tcl:107 msgid "Lower:" -msgstr "Inférieur:" +msgstr "Inférieur :" -#: ../src/dialog_gatom.tcl:113 msgid "Upper:" -msgstr "Supérieur:" +msgstr "Supérieur :" -#: ../src/dialog_gatom.tcl:121 ../src/dialog_iemgui.tcl:600 -#: ../src/dialog_iemgui.tcl:652 msgid "Label" msgstr "Label" -#: ../src/dialog_gatom.tcl:129 -msgid "Left " +msgid "Left" msgstr "Gauche" -#: ../src/dialog_gatom.tcl:131 msgid "Right" msgstr "Droite" -#: ../src/dialog_gatom.tcl:133 msgid "Top" msgstr "Haut" -#: ../src/dialog_gatom.tcl:135 msgid "Bottom" msgstr "Bas" -#: ../src/dialog_gatom.tcl:145 ../src/dialog_iemgui.tcl:574 msgid "Messages" msgstr "Messages" -#: ../src/dialog_gatom.tcl:149 ../src/dialog_iemgui.tcl:578 msgid "Send symbol:" -msgstr "Envoyer au symbole:" +msgstr "Envoyer au symbole :" -#: ../src/dialog_gatom.tcl:155 ../src/dialog_iemgui.tcl:585 msgid "Receive symbol:" -msgstr "Reçois du symbole" +msgstr "Recevoir du symbole :" -#: ../src/dialog_iemgui.tcl:197 msgid "Background color" -msgstr "Couleur du fond" +msgstr "Couleur de l'arrière plan" -#: ../src/dialog_iemgui.tcl:204 msgid "Foreground color" msgstr "Couleur du premier plan" -#: ../src/dialog_iemgui.tcl:211 msgid "Label color" -msgstr "" +msgstr "Couleur du label" -#: ../src/dialog_iemgui.tcl:272 msgid "Init" msgstr "Initialisation" -#: ../src/dialog_iemgui.tcl:275 ../src/dialog_iemgui.tcl:546 msgid "No init" -msgstr "Pas d'initialisation" +msgstr "Pas d'init." -#: ../src/dialog_iemgui.tcl:287 ../src/dialog_iemgui.tcl:558 msgid "Jump on click" -msgstr "" +msgstr "Instantané" -#: ../src/dialog_iemgui.tcl:290 ../src/dialog_iemgui.tcl:561 msgid "Steady on click" -msgstr "" +msgstr "Glissant" + +msgid "Bang" +msgstr "Bang" + +msgid "Flash Time (msec)" +msgstr "Durée du flash (ms)" + +msgid "Intrrpt:" +msgstr "Intrrpt :" + +msgid "Hold:" +msgstr "Maintient :" + +msgid "Toggle" +msgstr "Interrupteur" + +msgid "Non Zero Value" +msgstr "Valeur si coché" + +msgid "Value:" +msgstr "Valeur :" + +msgid "Number2" +msgstr "Nombre2" + +msgid "Width (digits):" +msgstr "Largeur (chiffres) :" + +msgid "Height:" +msgstr "Hauteur :" + +msgid "Output Range" +msgstr "Plage de valeurs" + +msgid "Log height:" +msgstr "Hauteur du log :" + +msgid "Vslider" +msgstr "Slider vertical" + +msgid "Hslider" +msgstr "Slider horizontal" + +msgid "Vradio" +msgstr "Sélecteur vertical" + +msgid "Num cells:" +msgstr "Nombre de cases :" + +msgid "Hradio" +msgstr "Sélecteur horizontal" + +msgid "VU Meter" +msgstr "VU-mètre" + +msgid "Canvas" +msgstr "Canvas" + +msgid "Visible Rectangle (pix)" +msgstr "Rectangle visible (pix)" -#: ../src/dialog_iemgui.tcl:498 #, tcl-format msgid "%s Properties" -msgstr "%s Propriétés" +msgstr "Propriétés de l'objet %s" -#: ../src/dialog_iemgui.tcl:550 ../src/pd_menus.tcl:83 ../src/pd_menus.tcl:260 -#: ../src/pd_menus.tcl:288 ../src/pd_menus.tcl:325 -msgid "Save" -msgstr "Sauvegarder" +msgid "Parameters" +msgstr "Paramètres" -#: ../src/dialog_iemgui.tcl:608 -msgid "X offset" -msgstr "Offset en X" +msgid "X offset:" +msgstr "Offset en X :" -#: ../src/dialog_iemgui.tcl:611 -msgid "Y offset" -msgstr "Offset en Y" +msgid "Y offset:" +msgstr "Offset en Y :" -#: ../src/dialog_iemgui.tcl:642 msgid "Colors" -msgstr "Couleur" +msgstr "Couleurs" -#: ../src/dialog_iemgui.tcl:648 msgid "Background" -msgstr "" +msgstr "Arrière plan" -#: ../src/dialog_iemgui.tcl:650 msgid "Front" -msgstr "Police de caractére" +msgstr "Premier plan" -#: ../src/dialog_iemgui.tcl:662 msgid "Compose color" -msgstr "créer la couleur" +msgstr "Créer la couleur" -#: ../src/dialog_iemgui.tcl:682 msgid "Test label" -msgstr "" +msgstr "Label de test" -#: ../src/pd-gui.tcl:280 ../src/pd-gui.tcl:283 ../src/pd_menus.tcl:212 -msgid "Pd window" -msgstr "Fenêtre Pd" +msgid "Send a Pd message" +msgstr "Envoyer un message à Pd" -#: ../src/pd_menucommands.tcl:90 -msgid "Send Message..." -msgstr "Envoyer Message..." +msgid "(use arrow keys for history)" +msgstr "(Utiliser les flèches pour accéder à l'historique)" -#: ../src/pd_menucommands.tcl:94 ../src/pd_menus.tcl:87 -#: ../src/pd_menus.tcl:147 ../src/pd_menus.tcl:265 ../src/pd_menus.tcl:292 -#: ../src/pd_menus.tcl:329 -msgid "Message" -msgstr "Message" +msgid "MIDI Settings" +msgstr "Paramètres MIDI" -#: ../src/pd_menucommands.tcl:108 ../src/pd_menucommands.tcl:111 -#: ../src/pd_menus.tcl:112 ../src/pd_menus.tcl:117 -msgid "Font" -msgstr "Police" +msgid "ALSA MIDI Settings" +msgstr "Paramètres MIDI (ALSA)" + +msgid "In Ports:" +msgstr "Ports d'entrée :" + +msgid "Out Ports:" +msgstr "Ports de sortie :" + +msgid "Pd search path for objects, help, fonts, and other files" +msgstr "Chemins pour la recherche d'objets, aides, fontes et autres" + +msgid "Use standard paths" +msgstr "Utiliser les chemins standards" + +msgid "Verbose" +msgstr "Verbeux" + +msgid "Pd Documents Directory" +msgstr "Dossier des Documents" + +msgid "Browse" +msgstr "Choisir" + +msgid "Reset" +msgstr "Réinitialiser" + +msgid "Disable" +msgstr "Désactiver" + +msgid "Externals Install Directory" +msgstr "Dossier d'installation des Externals" + +msgid "Clear" +msgstr "Effacer" + +msgid "Choose Pd documents directory:" +msgstr "Choisir le dossier des documents Pd :" + +msgid "Install externals to directory:" +msgstr "Installer les externals dans le dossier :" + +msgid "Add a new path" +msgstr "Ajouter un chemin" + +msgid "Add new library" +msgstr "Ajouter une bibliothèque" + +msgid "Edit library" +msgstr "Éditer la bibliothèque" + +msgid "Pd libraries to load on startup" +msgstr "Bibliothèques à charger au démarrage" + +msgid "Startup flags:" +msgstr "Options au démarrage :" + +msgid "Defeat real-time scheduling" +msgstr "Refuser la priorité temps-réel" + +msgid "Help Browser" +msgstr "Navigateur d'aide" + +msgid "(Tcl) MISSING CLOSE-BRACE '}': " +msgstr "(Tcl) CARACTÈRE MANQUANT '}' : " + +msgid "(Tcl) INVALID COMMAND NAME: " +msgstr "(Tcl) COMMANDE INVALIDE : " + +msgid "(Tcl) UNHANDLED ERROR: " +msgstr "(Tcl) ERREUR : " + +#, tcl-format +msgid "[deken]: installed version [%1$s] > %2$s...skipping!" +msgstr "[deken]: version installée [%1$s] > %2$s...ignorer !" + +#, tcl-format +msgid "[deken]: installed version [%1$s] < %2$s...overwriting!" +msgstr "[deken]: version installée [%1$s] < %2$s...remplacer !" + +#, tcl-format +msgid "[deken]: installed version [%1$s] == %2$s...skipping!" +msgstr "[deken]: version installée [%1$s] == %2$s...ignorer !" + +msgid "[deken]: " +msgstr "[deken] : " + +#, tcl-format +msgid "Successfully unzipped %1$s into %2$s." +msgstr "%1$s décompressé avec succès dans %2$s." + +msgid "[deken]: Unable to extract package automatically." +msgstr "[deken] : Impossible de décompresser l'archive automatiquement." + +msgid "Please perform the following steps manually:" +msgstr "Effectuez manuellement les étapes suivantes :" + +#, tcl-format +msgid "1. Unzip %s." +msgstr "1. Décompresser %s" + +#, tcl-format +msgid "2. Copy the contents into %s." +msgstr "2. Copier le dossier obtenu dans %s." + +#, tcl-format +msgid "[deken] uninstalling '%s'" +msgstr "[deken] désinstallation de '%s'" + +#, tcl-format +msgid "Uninstalling %1$s from %2$s failed!" +msgstr "Échec de la désinstallation de %1$s de %2$s !" + +#, tcl-format +msgid "[deken] deken-plugin.tcl (Pd externals search) loaded from %s." +msgstr "[deken] deken-plugin.tcl (recherche d'externals) chargé depuis %s." + +#, tcl-format +msgid "[deken] Platform detected: %s" +msgstr "[deken] Plateforme détectée : %s" + +#, tcl-format +msgid "[deken] Platform re-detected: %s" +msgstr "[deken] Plateforme re-détectée : %s" + +msgid "Show all" +msgstr "Montrer tout" + +msgid "Search" +msgstr "Rechercher" + +msgid "To get a list of all available externals, try an empty search." +msgstr "" +"Pour obtenir la liste de tous les externals disponibles, faites une " +"recherche vide." + +msgid "Find externals" +msgstr "Installer des objets supplémentaires" + +msgid "Only install externals uploaded by people you trust." +msgstr "Installer uniquement des objets provenant de sources de confiance." -#: ../src/pd_menucommands.tcl:123 ../src/pd_menucommands.tcl:126 -#: ../src/pd_menus.tcl:138 msgid "Preferences" msgstr "Préférences" -#: ../src/pd_menus.tcl:45 -msgid "Edit" -msgstr "Édition" +msgid "Installation options:" +msgstr "Options d'installation :" -#: ../src/pd_menus.tcl:45 -msgid "File" -msgstr "Fichier" +msgid "Try to remove libraries before (re)installing them?" +msgstr "Essayer de supprimer les bibliothèques avant de les (ré)installer ?" -#: ../src/pd_menus.tcl:45 ../src/pdtk_canvas.tcl:48 -msgid "Help" -msgstr "Aide" +msgid "Show README of newly installed libraries (if present)?" +msgstr "" +"Afficher le README (si présent) des bibliothèques nouvellement installées ?" -#: ../src/pd_menus.tcl:45 -msgid "Media" -msgstr "Média" +msgid "Should newly installed libraries be added to Pd's search path?" +msgstr "" +"Les bibliothèques nouvellement installées doivent-elles être ajoutées aux " +"chemins de recherche de Pd ?" -#: ../src/pd_menus.tcl:45 -msgid "Put" -msgstr "Ajouter" +msgid "Platform settings:" +msgstr "Réglages de plateforme :" -#: ../src/pd_menus.tcl:45 -msgid "Window" -msgstr "Fenêtre" +#, tcl-format +msgid "Default platform: %s" +msgstr "Plateforme par défaut : %s" -#: ../src/pd_menus.tcl:81 ../src/pd_menus.tcl:255 ../src/pd_menus.tcl:285 -#: ../src/pd_menus.tcl:322 -msgid "New" -msgstr "Nouveau" -"" +msgid "User-defined platform:" +msgstr "Plateforme définie par l'utilisateur :" -#: ../src/pd_menus.tcl:82 ../src/pd_menus.tcl:256 ../src/pd_menus.tcl:286 -#: ../src/pd_menus.tcl:323 ../src/pdtk_canvas.tcl:46 -msgid "Open" -msgstr "Ouvrir" +msgid "Hide foreign architectures?" +msgstr "Cacher les architectures étrangères ?" + +#, tcl-format +msgid "Deken %s Preferences" +msgstr "Préférences de Deken %s" + +msgid "[deken]: Start searching for externals..." +msgstr "[deken] : Démarrage de la recherche d'externals..." + +#, tcl-format +msgid "[deken]: online? %s" +msgstr "[deken]: connecté ? %s" + +msgid "Are you online?" +msgstr "Êtes-vous connecté(e) ?" + +msgid "Unable to perform search." +msgstr "Recherche impossible." + +msgid "[deken]: No matching externals found." +msgstr "[deken] : Aucun external correspondant trouvé." + +msgid "Try using the full name e.g. 'freeverb'." +msgstr "Essayez avec le nom complet, par exemple 'freeverb'." + +msgid "No matching externals found." +msgstr "Aucun external correspondant trouvé." + +msgid "Please select a (writable) installation directory!" +msgstr "Choisissez un dossier (accessible en écriture) pour l'installation !" + +#, tcl-format +msgid "Install %1$s to %2$s?" +msgstr "Installer %1$s dans %2$s ?" + +#, tcl-format +msgid "" +"Commencing downloading of:\n" +"%1$s\n" +"Into %2$s..." +msgstr "" +"Début du téléchargement de :\n" +"%1$s\n" +"Dans %2$s..." + +msgid "aborting.\n" +msgstr "abandon.\n" + +#, tcl-format +msgid "Unable to add %s to search paths" +msgstr "Impossible d'ajouter %s aux chemins de recherche" + +#, tcl-format +msgid "Add %s to the Pd search paths?" +msgstr "Ajouter %s aux chemins de recherche ?" + +#, tcl-format +msgid "Added %s to search paths" +msgstr "%s a été ajouté aux chemins de recherche" + +#, tcl-format +msgid "Unable to download from %1$s [%2$s]" +msgstr "Impossible de télécharger %1$s [%2$s]" + +#, tcl-format +msgid "Unable to remove stray file %s" +msgstr "Impossible d'effacer le ficher temporaire %s" + +#, tcl-format +msgid "Unable to rename downloaded file to %s" +msgstr "Impossible de donner au fichier téléchargé le nom %s" + +#, tcl-format +msgid "searching for '%s'" +msgstr "recherche de '%s'" + +#, tcl-format +msgid "Uploaded by %1$s @ %2$s" +msgstr "Mis en ligne par '%1$s' le : %2$s" + +msgid "Install package" +msgstr "Installation du paquet" + +msgid "Open webpage" +msgstr "Ouvrir une page web" + +msgid "_" +msgstr "_" + +#, tcl-format +msgid "" +"Do you want Pd to create a documents directory for patches and external " +"libraries?\n" +"\n" +"Location: %s\n" +"\n" +"You can change or disable this later in the Path preferences." +msgstr "" +"Voulez-vous créer un dossier Documents pour les patchs et les externals ?\n" +"\n" +"Emplacement : %s\n" +"\n" +"Vous pourrez changer ou désactiver cet emplacement plus tard, dans les " +"préférences de Chemins." + +#, tcl-format +msgid "" +"Pd documents directory cannot be found:\n" +"\n" +"%s\n" +"\n" +"Choose a new location?" +msgstr "" +"Le dossier Documents n'existe pas :\n" +"\n" +"%s\n" +"\n" +"Choisir un nouvel emplacement ?" + +#, tcl-format +msgid "Couldn't create Pd documents directory: %s\n" +msgstr "Impossible de créer le dossier Documents : %s\n" + +#, tcl-format +msgid "Couldn't create \"externals\" directory in: %s\n" +msgstr "Le dossier \"externals\" n'a pas pu être créé dans : %s\n" + +#, fuzzy, tcl-format +msgid "Couldn't create preferences \"%1$s\" in %2$s" +msgstr "Impossible de créer des préférences '%1$s' en %2$s" + +msgid "About Pd" +msgstr "À propos de Pd" + +msgid "Save" +msgstr "Enregistrer" -#: ../src/pd_menus.tcl:84 ../src/pd_menus.tcl:261 ../src/pd_menus.tcl:289 -#: ../src/pd_menus.tcl:326 msgid "Save As..." -msgstr "Sauvegarder Sous..." +msgstr "Enregistrer sous..." -#: ../src/pd_menus.tcl:88 ../src/pd_menus.tcl:267 ../src/pd_menus.tcl:293 -#: ../src/pd_menus.tcl:330 msgid "Print..." msgstr "Imprimer..." -#: ../src/pd_menus.tcl:93 -msgid "Undo" -msgstr "Défaire" - -#: ../src/pd_menus.tcl:95 -msgid "Redo" -msgstr "Refaire" +msgid "Paste Replace" +msgstr "Coller Remplacer" -#: ../src/pd_menus.tcl:98 -msgid "Cut" -msgstr "Couper" - -#: ../src/pd_menus.tcl:104 msgid "Duplicate" msgstr "Dupliquer" -#: ../src/pd_menus.tcl:106 -msgid "Select All" -msgstr "Sélectionner tout" +msgid "Zoom In" +msgstr "Zoomer" -#: ../src/pd_menus.tcl:110 ../src/pd_menus.tcl:115 -msgid "Text Editor" -msgstr "éditeur de texte..." +msgid "Zoom Out" +msgstr "Dézoomer" -#: ../src/pd_menus.tcl:120 msgid "Tidy Up" msgstr "Aligner" -#: ../src/pd_menus.tcl:122 -msgid "Toggle Console" -msgstr "" +msgid "(Dis)Connect Selection" +msgstr "(Dé)Connecter la sélection" -#: ../src/pd_menus.tcl:124 -msgid "Clear Console" -msgstr "Effacer la console" +msgid "Triggerize" +msgstr "Triggeriser" -#: ../src/pd_menus.tcl:128 msgid "Edit Mode" msgstr "Mode d'édition" -#: ../src/pd_menus.tcl:145 -msgid "Object" -msgstr "Objet" +msgid "Undo" +msgstr "Défaire" -#: ../src/pd_menus.tcl:149 -msgid "Number" -msgstr "Nombre" +msgid "Redo" +msgstr "Refaire" -#: ../src/pd_menus.tcl:151 -msgid "Symbol" -msgstr "Symbole" +msgid "List of objects..." +msgstr "Liste des objets..." -#: ../src/pd_menus.tcl:153 -msgid "Comment" -msgstr "Commentaire" +msgid "New" +msgstr "Nouveau" -#: ../src/pd_menus.tcl:156 -msgid "Bang" -msgstr "Bang" +msgid "Open" +msgstr "Ouvrir" -#: ../src/pd_menus.tcl:158 -msgid "Toggle" -msgstr "interrupteur" +msgid "Message..." +msgstr "Message..." -#: ../src/pd_menus.tcl:160 -msgid "Number2" -msgstr "Nombre2" +msgid "Cut" +msgstr "Couper" -#: ../src/pd_menus.tcl:162 -msgid "Vslider" -msgstr "slider_V" +msgid "Select All" +msgstr "Tout sélectionner" -#: ../src/pd_menus.tcl:164 -msgid "Hslider" -msgstr "Slider_H" +msgid "Clear Console" +msgstr "Effacer la console" -#: ../src/pd_menus.tcl:166 -msgid "Vradio" -msgstr "selecteur_V" +msgid "Object" +msgstr "Objet" -#: ../src/pd_menus.tcl:168 -msgid "Hradio" -msgstr "selecteur_H" +msgid "Message" +msgstr "Message" -#: ../src/pd_menus.tcl:170 -msgid "VU Meter" -msgstr "VU-mètre" +msgid "Number" +msgstr "Nombre" -#: ../src/pd_menus.tcl:172 -msgid "Canvas" -msgstr "Canvas" +msgid "Symbol" +msgstr "Symbole" + +msgid "Comment" +msgstr "Commentaire" -#: ../src/pd_menus.tcl:175 msgid "Graph" msgstr "Graphique" -#: ../src/pd_menus.tcl:176 -msgid "Array" -msgstr "Tableau" - -#: ../src/pd_menus.tcl:181 msgid "Find..." -msgstr "Rechercher" +msgstr "Rechercher..." -#: ../src/pd_menus.tcl:183 msgid "Find Again" msgstr "Rechercher encore" -#: ../src/pd_menus.tcl:185 msgid "Find Last Error" msgstr "Rechercher la dernière erreur" -#: ../src/pd_menus.tcl:191 msgid "DSP On" -msgstr "DSP On" +msgstr "DSP ON" -#: ../src/pd_menus.tcl:193 msgid "DSP Off" -msgstr "DSP off" +msgstr "DSP OFF" -#: ../src/pd_menus.tcl:196 msgid "Test Audio and MIDI..." -msgstr "Tester l'audio et le MIDI" +msgstr "Tester l'audio et le MIDI..." -#: ../src/pd_menus.tcl:198 msgid "Load Meter" msgstr "CPU-mètre" -#: ../src/pd_menus.tcl:205 +msgid "Audio Settings..." +msgstr "Paramètres audio..." + +msgid "MIDI Settings..." +msgstr "Paramètres MIDI..." + msgid "Minimize" msgstr "Minimiser" -#: ../src/pd_menus.tcl:207 msgid "Zoom" msgstr "Zoom" -#: ../src/pd_menus.tcl:210 -msgid "Parent Window" -msgstr "Fenêtre" - -#: ../src/pd_menus.tcl:216 msgid "Bring All to Front" msgstr "Tout au premier plan" -#: ../src/pd_menus.tcl:241 -msgid "About Pd" -msgstr "À propos de Pd" +msgid "Next Window" +msgstr "Fenêtre suivante" + +msgid "Previous Window" +msgstr "Fenêtre précédente" + +msgid "Parent Window" +msgstr "Fenêtre parente" + +msgid "HTML Manual..." +msgstr "Aide HTML..." + +msgid "Browser..." +msgstr "Navigateur d'aide..." + +msgid "puredata.info" +msgstr "puredata.info" + +msgid "Report a bug" +msgstr "Signaler un problème" + +msgid "Clear Menu" +msgstr "Effacer la console" + +msgid "" +"Delete all preferences?\n" +"(takes effect when Pd is restarted)" +msgstr "" +"Effacer toutes les préférences ?\n" +"(prendra effet au prochain redémarrage)" + +msgid "Path..." +msgstr "Chemins..." + +msgid "Startup..." +msgstr "Options de démarrage..." + +msgid "Audio..." +msgstr "Paramètres audio..." -#: ../src/pd_menus.tcl:248 -msgid "Preferences..." -msgstr "Préférences..." +msgid "MIDI..." +msgstr "Paramètres MIDI..." + +msgid "Zoom New Windows" +msgstr "Zoomer les nouvelles fenêtres" + +msgid "Save All Preferences" +msgstr "Enregistrer toutes les préférences" + +msgid "Save to..." +msgstr "Enregistrer sous..." + +msgid "Load from..." +msgstr "Charger à partir de..." + +msgid "Forget All..." +msgstr "Tout oublier..." -#: ../src/pd_menus.tcl:257 msgid "Open Recent" -msgstr "ouvrir éléments récent" +msgstr "Ouvrir un élément récent" -#: ../src/pd_menus.tcl:296 ../src/pd_menus.tcl:333 msgid "Quit" msgstr "Quitter" -#: ../src/pdtk_canvas.tcl:44 msgid "Properties" msgstr "Propriétés" -#~ msgid "Audio OFF" -#~ msgstr "Audio OFF" +msgid "Audio on" +msgstr "Audio ON" + +msgid "Audio off" +msgstr "Audio OFF" -#~ msgid "Audio ON" -#~ msgstr "Audio ON" +msgid "(Tcl) MISSING CLOSE-BRACKET ']': " +msgstr "(Tcl) CARACTÈRE MANQUANT ']' : " + +msgid "Tcl:" +msgstr "Tcl:" + +msgid "Pd" +msgstr "Pd" + +msgid "DSP" +msgstr "DSP" + +msgid "Audio I/O error" +msgstr "Erreur entrée/sortie audio" + +msgid "Log:" +msgstr "Log:" + +msgid "fatal" +msgstr "fatal" + +msgid "error" +msgstr "erreur" + +msgid "normal" +msgstr "normal" + +msgid "debug" +msgstr "debug" + +msgid "all" +msgstr "tout" + +msgid "New..." +msgstr "Nouveau..." + +msgid "Edit..." +msgstr "Éditer..." + +msgid "Delete" +msgstr "Supprimer" + +#, tcl-format +msgid "Ignoring '%s': doesn't exist" +msgstr "'%s' n'existe pas" + +#, tcl-format +msgid "Ignoring '%s': doesn't look like a Pd-file" +msgstr "'%s' ne semble pas être un fichier Pd" + +#~ msgid "Create" +#~ msgstr "Créer" + +#~ msgid "Check" +#~ msgstr "Vérifier" + +#~ msgid "Unable to perform search. Are you online?" +#~ msgstr "La recherche n'a pu aboutir. Êtes-vous connecté ?" + +#~ msgid "for:" +#~ msgstr ":" + +#~ msgid "Patch Font" +#~ msgstr "Police du patch" #~ msgid "Paths" #~ msgstr "Chemins..." + +#~ msgid "Preferences..." +#~ msgstr "Préférences..." + +#~ msgid "Text Editor" +#~ msgstr "Éditeur de texte..." + +#~ msgid "Send Message..." +#~ msgstr "Envoyer Message..." diff --git a/po/gu.po b/po/gu.po index 51388b8473..fea9bf42c7 100644 --- a/po/gu.po +++ b/po/gu.po @@ -6,10 +6,11 @@ msgid "" msgstr "" "Project-Id-Version: Pure Data-0.43\n" "Report-Msgid-Bugs-To: pd-dev@iem.at\n" -"POT-Creation-Date: 2009-08-27 10:01-0400\n" +"POT-Creation-Date: 2017-07-06 18:10+0200\n" "PO-Revision-Date: 2005-09-14 12:49+0530\n" "Last-Translator: Ankit Patel \n" "Language-Team: Gujarati \n" +"Language: gu\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -17,14 +18,88 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n!=1);\n" "\n" +msgid "-------dimensions(digits)(pix):-------" +msgstr "" + +msgid "--------dimensions(pix)(pix):--------" +msgstr "" + +msgid "----------dimensions(pix):-----------" +msgstr "" + +msgid "--------flash-time(ms)(ms):---------" +msgstr "" + +msgid "-----------output-range:-----------" +msgstr "" + +msgid "------selectable_dimensions(pix):------" +msgstr "" + +msgid "------visible_rectangle(pix)(pix):------" +msgstr "" + #, fuzzy -msgid "Undo duplicate" -msgstr "તારીખ" +msgid "bottom:" +msgstr "નીચે" -msgid "Undo paste" +#, fuzzy +msgid "height:" +msgstr "જમણુ" + +msgid "hold:" msgstr "" -msgid "Undo motion" +msgid "intrrpt:" +msgstr "" + +msgid "left:" +msgstr "" + +msgid "lin" +msgstr "" + +msgid "log" +msgstr "" + +msgid "log-height:" +msgstr "" + +msgid "max:" +msgstr "" + +msgid "min:" +msgstr "" + +#, fuzzy +msgid "right:" +msgstr "જમણુ" + +#, fuzzy +msgid "size:" +msgstr "માપ:" + +msgid "top:" +msgstr "" + +msgid "value:" +msgstr "" + +msgid "width:" +msgstr "" + +#, tcl-format +msgid "Do you want to save the changes you made in '%s'?" +msgstr "" + +#, tcl-format +msgid "Discard changes to '%s'?" +msgstr "" + +msgid "Undo clear" +msgstr "" + +msgid "Undo connect" msgstr "" #, fuzzy @@ -34,923 +109,1051 @@ msgstr "યુગાન્ડા" msgid "Undo disconnect" msgstr "" -msgid "Undo connect" +#, fuzzy +msgid "Undo duplicate" +msgstr "તારીખ" + +msgid "Undo motion" msgstr "" -msgid "Undo clear" +msgid "Undo paste" msgstr "" msgid "Undo typing" msgstr "" -msgid "Discard changes to '%s'?" +msgid "Redo clear" msgstr "" -msgid "Do you want to save the changes you made in '%s'?" +msgid "Redo connect" +msgstr "" + +#, fuzzy +msgid "Redo cut" +msgstr "યુગાન્ડા" + +msgid "Redo disconnect" +msgstr "" + +#, fuzzy +msgid "Redo duplicate" +msgstr "તારીખ" + +msgid "Redo motion" +msgstr "" + +msgid "Redo paste" +msgstr "" + +msgid "Redo typing" +msgstr "" + +msgid "no Pd settings to clear" +msgstr "" + +msgid "removed .pdsettings file" +msgstr "" + +msgid "couldn't delete .pdsettings file" +msgstr "" + +msgid "failed to erase Pd settings" +msgstr "" + +msgid "erased Pd settings" +msgstr "" + +msgid "no Pd settings to erase" +msgstr "" + +msgid "skipping loading preferences... Pd seems to have crashed on startup." +msgstr "" + +msgid "(re-save preferences to reinstate them)" +msgstr "" + +msgid "File" +msgstr "ફાઇલ" + +#, fuzzy +msgid "Edit" +msgstr "ફેરફાર કરો (_E)" + +msgid "Put" +msgstr "" + +msgid "Find" +msgstr "શોધો" + +#, fuzzy +msgid "Media" +msgstr "મેકેડોનિયા" + +#, fuzzy +msgid "Window" +msgstr "વિન્ડો (_W)" + +msgid "Help" +msgstr "મદદ" + +msgid "Show &Hidden Files and Directories" msgstr "" -#: ../src/dialog_array.tcl:115 ../src/dialog_array.tcl:117 -#: ../src/pd_menus.tcl:100 ../src/pd_menus.tcl:101 ../src/pd_menus.tcl:146 -#: ../src/pd_menus.tcl:147 msgid "Copy" msgstr "નકલ કરો" -#: ../src/dialog_array.tcl:118 ../src/dialog_array.tcl:120 -#: ../src/pd_menus.tcl:102 ../src/pd_menus.tcl:103 ../src/pd_menus.tcl:148 -#: ../src/pd_menus.tcl:149 #, fuzzy msgid "Paste" msgstr "તારીખ" -#: ../src/dialog_array.tcl:264 ../src/dialog_array.tcl:266 msgid "Array Properties" msgstr "" -#: ../src/dialog_array.tcl:270 ../src/dialog_array.tcl:272 +#, fuzzy +msgid "Array" +msgstr "અન્ડોરા" + #, fuzzy msgid "Name:" msgstr "નામ" -#: ../src/dialog_array.tcl:276 ../src/dialog_array.tcl:278 -#: ../src/dialog_canvas.tcl:178 ../src/dialog_canvas.tcl:193 -#: ../src/dialog_iemgui.tcl:619 ../src/dialog_iemgui.tcl:621 msgid "Size:" msgstr "માપ:" -#: ../src/dialog_array.tcl:280 ../src/dialog_array.tcl:282 #, fuzzy msgid "Save contents" msgstr "સમાવિષ્ટો (_C)" -#: ../src/dialog_array.tcl:284 ../src/dialog_array.tcl:286 msgid "Draw as:" msgstr "" -#: ../src/dialog_array.tcl:287 ../src/dialog_array.tcl:289 -#, fuzzy -msgid "Points" -msgstr "પોર્ટ" - -#: ../src/dialog_array.tcl:289 ../src/dialog_array.tcl:291 #, fuzzy msgid "Polygon" msgstr "પોલેન્ડ" -#: ../src/dialog_array.tcl:291 ../src/dialog_array.tcl:293 +#, fuzzy +msgid "Points" +msgstr "પોર્ટ" + msgid "Bezier curve" msgstr "" -#: ../src/dialog_array.tcl:297 ../src/dialog_array.tcl:299 msgid "Put array into:" msgstr "" -#: ../src/dialog_array.tcl:300 ../src/dialog_array.tcl:302 msgid "New graph" msgstr "" -#: ../src/dialog_array.tcl:302 ../src/dialog_array.tcl:304 #, fuzzy msgid "Last graph" msgstr "છેલ્લો સંદેશો:" -#: ../src/dialog_array.tcl:306 ../src/dialog_array.tcl:308 -#, fuzzy -msgid "Delete array" -msgstr "દૂર કરો" +msgid "Options" +msgstr "" -#: ../src/dialog_array.tcl:312 ../src/dialog_array.tcl:314 #, fuzzy msgid "Open List View..." msgstr "બેન યાદી..." -#: ../src/dialog_array.tcl:319 ../src/dialog_array.tcl:321 -#: ../src/dialog_audio.tcl:136 ../src/dialog_canvas.tcl:205 -#: ../src/dialog_font.tcl:51 ../src/dialog_gatom.tcl:153 -#: ../src/dialog_gatom.tcl:161 ../src/dialog_iemgui.tcl:742 -#: ../src/dialog_iemgui.tcl:748 ../src/dialog_midi.tcl:91 -#: ../src/dialog_midi.tcl:226 +#, fuzzy +msgid "Delete array" +msgstr "દૂર કરો" + msgid "Cancel" msgstr "રદ કરો" -#: ../src/dialog_array.tcl:321 ../src/dialog_array.tcl:323 -#: ../src/dialog_audio.tcl:138 ../src/dialog_canvas.tcl:207 -#: ../src/dialog_gatom.tcl:156 ../src/dialog_gatom.tcl:164 -#: ../src/dialog_iemgui.tcl:745 ../src/dialog_iemgui.tcl:751 -#: ../src/dialog_midi.tcl:93 ../src/dialog_midi.tcl:228 msgid "Apply" msgstr "અમલમાં મૂકો" -#: ../src/dialog_array.tcl:323 ../src/dialog_array.tcl:325 -#: ../src/dialog_audio.tcl:140 ../src/dialog_canvas.tcl:209 -#: ../src/dialog_font.tcl:53 ../src/dialog_font.tcl:92 -#: ../src/dialog_font.tcl:100 ../src/dialog_font.tcl:101 -#: ../src/dialog_gatom.tcl:159 ../src/dialog_gatom.tcl:167 -#: ../src/dialog_iemgui.tcl:748 ../src/dialog_iemgui.tcl:754 -#: ../src/dialog_midi.tcl:95 ../src/dialog_midi.tcl:230 msgid "OK" msgstr "" -#: ../src/dialog_audio.tcl:130 msgid "Audio Settings" msgstr "" -#: ../src/dialog_audio.tcl:142 -msgid "Save All Settings" +msgid "Settings" msgstr "" -#: ../src/dialog_audio.tcl:151 msgid "Sample rate:" msgstr "" -#: ../src/dialog_audio.tcl:153 msgid "Delay (msec):" msgstr "" -#: ../src/dialog_audio.tcl:158 +msgid "Block size:" +msgstr "" + msgid "Use callbacks" msgstr "" -#: ../src/dialog_audio.tcl:166 ../src/dialog_midi.tcl:105 -#: ../src/dialog_midi.tcl:241 -msgid "Input device 1:" +msgid "Input Devices" msgstr "" -#: ../src/dialog_audio.tcl:169 ../src/dialog_audio.tcl:183 -#: ../src/dialog_audio.tcl:198 ../src/dialog_audio.tcl:213 -#: ../src/dialog_audio.tcl:232 ../src/dialog_audio.tcl:250 -#: ../src/dialog_audio.tcl:265 ../src/dialog_audio.tcl:280 #, fuzzy msgid "Channels:" msgstr "રદ કરો" -#: ../src/dialog_audio.tcl:179 ../src/dialog_midi.tcl:115 -#: ../src/dialog_midi.tcl:251 -msgid "Input device 2:" -msgstr "" - -#: ../src/dialog_audio.tcl:194 ../src/dialog_midi.tcl:127 -#: ../src/dialog_midi.tcl:263 -msgid "Input device 3:" -msgstr "" - -#: ../src/dialog_audio.tcl:209 ../src/dialog_midi.tcl:139 -#: ../src/dialog_midi.tcl:275 -msgid "Input device 4:" -msgstr "" - -#: ../src/dialog_audio.tcl:223 ../src/dialog_midi.tcl:150 -#: ../src/dialog_midi.tcl:286 -msgid "Output device 1:" -msgstr "" - -#: ../src/dialog_audio.tcl:226 -msgid "(same as input device) .............. " +msgid "Output Devices" msgstr "" -#: ../src/dialog_audio.tcl:246 ../src/dialog_midi.tcl:160 -#: ../src/dialog_midi.tcl:296 -msgid "Output device 2:" +msgid "(same as input device)..." msgstr "" -#: ../src/dialog_audio.tcl:261 ../src/dialog_midi.tcl:171 -#: ../src/dialog_midi.tcl:307 -msgid "Output device 3:" +msgid "Use Multiple Devices" msgstr "" -#: ../src/dialog_audio.tcl:276 ../src/dialog_midi.tcl:182 -#: ../src/dialog_midi.tcl:318 -msgid "Output device 4:" +msgid "Save All Settings" msgstr "" -#: ../src/dialog_audio.tcl:291 ../src/dialog_midi.tcl:195 -msgid "Use multiple devices" +msgid "WARNING: unknown graphme flags received in pdtk_canvas_dialog" msgstr "" -#: ../src/dialog_canvas.tcl:142 msgid "Canvas Properties" msgstr "" -#: ../src/dialog_canvas.tcl:146 #, fuzzy msgid "Scale" msgstr "સંગ્રહ કરો" -#: ../src/dialog_canvas.tcl:150 msgid "X units per pixel:" msgstr "" -#: ../src/dialog_canvas.tcl:155 msgid "Y units per pixel:" msgstr "" -#: ../src/dialog_canvas.tcl:159 msgid "Appearance on parent patch" msgstr "" -#: ../src/dialog_canvas.tcl:161 msgid "Graph-On-Parent" msgstr "" -#: ../src/dialog_canvas.tcl:165 msgid "Hide object name and arguments" msgstr "" -#: ../src/dialog_canvas.tcl:170 msgid "Range and size" msgstr "" -#: ../src/dialog_canvas.tcl:174 -msgid "X range, from" +msgid "X range: from" msgstr "" -#: ../src/dialog_canvas.tcl:176 ../src/dialog_canvas.tcl:191 msgid "to" msgstr "" -#: ../src/dialog_canvas.tcl:180 ../src/dialog_canvas.tcl:195 #, fuzzy msgid "Margin:" msgstr "માર્કર લાઈન:" -#: ../src/dialog_canvas.tcl:189 -msgid "Y range, from" +msgid "Y range: from" msgstr "" -#: ../src/dialog_find.tcl:63 ../src/dialog_find.tcl:66 -#: ../src/dialog_find.tcl:79 ../src/dialog_find.tcl:80 -#: ../src/dialog_find.tcl:83 ../src/dialog_find.tcl:85 -#: ../src/dialog_find.tcl:87 ../src/dialog_find.tcl:101 -#: ../src/dialog_find.tcl:105 ../src/dialog_find.tcl:107 -#: ../src/pd_menus.tcl:45 -msgid "Find" -msgstr "શોધો" +msgid "Data Properties" +msgstr "" -#: ../src/dialog_find.tcl:70 ../src/dialog_find.tcl:73 -#: ../src/dialog_find.tcl:87 ../src/dialog_find.tcl:91 -#: ../src/dialog_find.tcl:93 -#, fuzzy -msgid "Search in" +#, tcl-format +msgid "Found '%1$s' in %2$s" +msgstr "" + +#, tcl-format +msgid "Couldn't find '%1$s' in %2$s" +msgstr "" + +#, fuzzy, tcl-format +msgid "Search in %s for:" msgstr "લખાણ શોધો..." -#: ../src/dialog_find.tcl:72 ../src/dialog_find.tcl:75 -#: ../src/dialog_find.tcl:89 ../src/dialog_find.tcl:93 -#: ../src/dialog_find.tcl:95 -#, fuzzy -msgid "for:" -msgstr "પોર્ટ:" - -#: ../src/dialog_find.tcl:83 ../src/dialog_find.tcl:90 -#: ../src/dialog_find.tcl:104 ../src/dialog_find.tcl:108 -#: ../src/dialog_find.tcl:110 ../src/pd_menus.tcl:86 ../src/pd_menus.tcl:87 -#: ../src/pd_menus.tcl:132 ../src/pd_menus.tcl:133 ../src/pd_menus.tcl:259 -#: ../src/pd_menus.tcl:272 ../src/pd_menus.tcl:295 ../src/pd_menus.tcl:308 -#: ../src/pd_menus.tcl:332 ../src/pd_menus.tcl:345 ../src/pd_menus.tcl:354 -#: ../src/pd_menus.tcl:381 ../src/pd_menus.tcl:392 ../src/pd_menus.tcl:419 -#: ../src/pd_menus.tcl:431 ../src/pd_menus.tcl:458 -msgid "Close" -msgstr "બંધ કરો" +#, tcl-format +msgid "Showed last '%1$s' in %2$s" +msgstr "" -#: ../src/dialog_find.tcl:83 ../src/dialog_find.tcl:97 -#: ../src/dialog_find.tcl:101 ../src/dialog_find.tcl:103 -msgid "Match whole word only" +#, tcl-format +msgid "Showing '%1$d' out of %2$d items in %3$s" msgstr "" -#: ../src/dialog_find.tcl:92 ../src/dialog_font.tcl:49 -#: ../src/dialog_font.tcl:50 ../src/pd-gui.tcl:280 ../src/pd-gui.tcl:283 -#: ../src/pd-gui.tcl:286 ../src/pd-gui.tcl:288 ../src/pd-gui.tcl:291 -#: ../src/pd_menus.tcl:212 ../src/pd_menus.tcl:258 ../src/pd_menus.tcl:285 -#: ../src/pdwindow.tcl:33 #, fuzzy msgid "Pd window" msgstr "મોકલો વિન્ડો" -#: ../src/dialog_font.tcl:45 -msgid "Font Properties" +msgid "Match whole word only" msgstr "" -#: ../src/dialog_font.tcl:46 ../src/dialog_font.tcl:54 -#: ../src/dialog_font.tcl:55 +msgid "Close" +msgstr "બંધ કરો" + #, fuzzy, tcl-format msgid "%s Font" msgstr "ફોન્ટ:" -#: ../src/dialog_font.tcl:61 ../src/dialog_font.tcl:96 -#: ../src/dialog_font.tcl:104 ../src/dialog_font.tcl:105 +#, fuzzy +msgid "Font" +msgstr "ફોન્ટ:" + #, fuzzy msgid "Font Size" msgstr "માપ:" -#: ../src/dialog_font.tcl:89 ../src/dialog_font.tcl:108 -#: ../src/dialog_font.tcl:116 ../src/dialog_font.tcl:117 #, fuzzy msgid "Stretch" msgstr "શરૂ કરાયેલ:" -#: ../src/dialog_font.tcl:96 ../src/dialog_font.tcl:115 -#: ../src/dialog_font.tcl:123 ../src/dialog_font.tcl:124 msgid "X and Y" msgstr "" -#: ../src/dialog_font.tcl:98 ../src/dialog_font.tcl:117 -#: ../src/dialog_font.tcl:125 ../src/dialog_font.tcl:126 msgid "X only" msgstr "" -#: ../src/dialog_font.tcl:100 ../src/dialog_font.tcl:119 -#: ../src/dialog_font.tcl:127 ../src/dialog_font.tcl:128 msgid "Y only" msgstr "" -#: ../src/dialog_gatom.tcl:93 msgid "Atom Box Properties" msgstr "" -#: ../src/dialog_gatom.tcl:99 msgid "Width:" msgstr "" -#: ../src/dialog_gatom.tcl:103 #, fuzzy msgid "Limits" msgstr "વપરાશકર્તા મર્યાદા" -#: ../src/dialog_gatom.tcl:107 msgid "Lower:" msgstr "" -#: ../src/dialog_gatom.tcl:112 ../src/dialog_gatom.tcl:113 #, fuzzy msgid "Upper:" msgstr "વપરાશકર્તા:" -#: ../src/dialog_gatom.tcl:116 ../src/dialog_gatom.tcl:121 -#: ../src/dialog_iemgui.tcl:600 ../src/dialog_iemgui.tcl:652 -#: ../src/dialog_iemgui.tcl:657 msgid "Label" msgstr "" -#: ../src/dialog_gatom.tcl:124 ../src/dialog_gatom.tcl:129 #, fuzzy -msgid "Left " +msgid "Left" msgstr "ડાબે" -#: ../src/dialog_gatom.tcl:126 ../src/dialog_gatom.tcl:131 msgid "Right" msgstr "જમણુ" -#: ../src/dialog_gatom.tcl:128 ../src/dialog_gatom.tcl:133 msgid "Top" msgstr "ઉપર" -#: ../src/dialog_gatom.tcl:130 ../src/dialog_gatom.tcl:135 msgid "Bottom" msgstr "નીચે" -#: ../src/dialog_gatom.tcl:137 ../src/dialog_gatom.tcl:145 -#: ../src/dialog_iemgui.tcl:574 #, fuzzy msgid "Messages" msgstr "સંદેશો" -#: ../src/dialog_gatom.tcl:141 ../src/dialog_gatom.tcl:149 -#: ../src/dialog_iemgui.tcl:578 msgid "Send symbol:" msgstr "" -#: ../src/dialog_gatom.tcl:147 ../src/dialog_gatom.tcl:155 -#: ../src/dialog_iemgui.tcl:585 #, fuzzy msgid "Receive symbol:" msgstr "મેળવો વિન્ડો" -#: ../src/dialog_iemgui.tcl:197 #, fuzzy msgid "Background color" msgstr "પાશ્વ ભાગ:" -#: ../src/dialog_iemgui.tcl:204 #, fuzzy msgid "Foreground color" msgstr "અગ્ર ભાગ:" -#: ../src/dialog_iemgui.tcl:211 #, fuzzy msgid "Label color" msgstr "રંગ પસંદ કરો" -#: ../src/dialog_iemgui.tcl:272 #, fuzzy msgid "Init" msgstr "આમંત્રણ આપો" -#: ../src/dialog_iemgui.tcl:275 ../src/dialog_iemgui.tcl:546 msgid "No init" msgstr "" -#: ../src/dialog_iemgui.tcl:287 ../src/dialog_iemgui.tcl:558 msgid "Jump on click" msgstr "" -#: ../src/dialog_iemgui.tcl:290 ../src/dialog_iemgui.tcl:561 msgid "Steady on click" msgstr "" -#: ../src/dialog_iemgui.tcl:498 +#, fuzzy +msgid "Bang" +msgstr "બેન" + +msgid "Flash Time (msec)" +msgstr "" + +msgid "Intrrpt:" +msgstr "" + +msgid "Hold:" +msgstr "" + +#, fuzzy +msgid "Toggle" +msgstr "ટોગો" + +msgid "Non Zero Value" +msgstr "" + +msgid "Value:" +msgstr "" + +#, fuzzy +msgid "Number2" +msgstr "$ નંબર" + +msgid "Width (digits):" +msgstr "" + +#, fuzzy +msgid "Height:" +msgstr "જમણુ" + +msgid "Output Range" +msgstr "" + +msgid "Log height:" +msgstr "" + +msgid "Vslider" +msgstr "" + +#, fuzzy +msgid "Hslider" +msgstr "છુપુ" + +#, fuzzy +msgid "Vradio" +msgstr "આવૃત્તિ" + +msgid "Num cells:" +msgstr "" + +msgid "Hradio" +msgstr "" + +msgid "VU Meter" +msgstr "" + +#, fuzzy +msgid "Canvas" +msgstr "કેનેડા" + +msgid "Visible Rectangle (pix)" +msgstr "" + #, tcl-format msgid "%s Properties" msgstr "" -#: ../src/dialog_iemgui.tcl:550 ../src/pd_menus.tcl:83 ../src/pd_menus.tcl:84 -#: ../src/pd_menus.tcl:129 ../src/pd_menus.tcl:130 ../src/pd_menus.tcl:260 -#: ../src/pd_menus.tcl:273 ../src/pd_menus.tcl:288 ../src/pd_menus.tcl:301 -#: ../src/pd_menus.tcl:325 ../src/pd_menus.tcl:338 ../src/pd_menus.tcl:355 -#: ../src/pd_menus.tcl:382 ../src/pd_menus.tcl:383 ../src/pd_menus.tcl:410 -#: ../src/pd_menus.tcl:422 ../src/pd_menus.tcl:449 -msgid "Save" -msgstr "સંગ્રહ કરો" +msgid "Parameters" +msgstr "" -#: ../src/dialog_iemgui.tcl:608 -msgid "X offset" +msgid "X offset:" msgstr "" -#: ../src/dialog_iemgui.tcl:611 ../src/dialog_iemgui.tcl:612 -msgid "Y offset" +msgid "Y offset:" msgstr "" -#: ../src/dialog_iemgui.tcl:642 ../src/dialog_iemgui.tcl:645 msgid "Colors" msgstr "રંગો" -#: ../src/dialog_iemgui.tcl:648 ../src/dialog_iemgui.tcl:651 #, fuzzy msgid "Background" msgstr "પાશ્વ ભાગ:" -#: ../src/dialog_iemgui.tcl:650 ../src/dialog_iemgui.tcl:654 #, fuzzy msgid "Front" msgstr "ફોન્ટ:" -#: ../src/dialog_iemgui.tcl:662 ../src/dialog_iemgui.tcl:668 msgid "Compose color" msgstr "" -#: ../src/dialog_iemgui.tcl:682 ../src/dialog_iemgui.tcl:688 #, fuzzy msgid "Test label" msgstr "બધું ચકાસો" -#: ../src/dialog_midi.tcl:85 -msgid "MIDI Settings" +#, fuzzy +msgid "Send a Pd message" +msgstr "સંદેશો" + +msgid "(use arrow keys for history)" msgstr "" -#: ../src/dialog_midi.tcl:220 -msgid "ALSA MIDI Settings" +msgid "MIDI Settings" msgstr "" -#: ../src/dialog_midi.tcl:331 -msgid "Use multiple ALSA devices" +msgid "ALSA MIDI Settings" msgstr "" -#: ../src/dialog_midi.tcl:337 msgid "In Ports:" msgstr "" -#: ../src/dialog_midi.tcl:340 msgid "Out Ports:" msgstr "" -#: ../src/g_editor.c:1663 -msgid "Discard changes to this window??" +msgid "Pd search path for objects, help, fonts, and other files" msgstr "" -#: ../src/g_editor.c:1668 -msgid "really quit?" +msgid "Use standard paths" msgstr "" -#: ../src/g_editor.c:1699 -#, fuzzy -msgid "Close this window??" -msgstr "આ ટેબ/વિન્ડો બંધ કરો" - -#: ../src/pd-gui.tcl:185 ../src/pd-gui.tcl:195 ../src/pd-gui.tcl:203 -#: ../src/pd-gui.tcl:206 ../src/pd-gui.tcl:215 ../src/pd-gui.tcl:226 -msgid "Associated Files" +msgid "Verbose" msgstr "" -#: ../src/pd-gui.tcl:186 ../src/pd-gui.tcl:196 ../src/pd-gui.tcl:204 -#: ../src/pd-gui.tcl:207 ../src/pd-gui.tcl:216 ../src/pd-gui.tcl:227 -#, fuzzy -msgid "Pd Files" -msgstr "ફાઇલ" - -#: ../src/pd-gui.tcl:187 ../src/pd-gui.tcl:205 ../src/pd-gui.tcl:208 -#: ../src/pd-gui.tcl:228 -msgid "Max Patch Files" +msgid "Pd Documents Directory" msgstr "" -#: ../src/pd-gui.tcl:188 ../src/pd-gui.tcl:206 ../src/pd-gui.tcl:209 -#: ../src/pd-gui.tcl:229 -msgid "Max Text Files" +msgid "Browse" msgstr "" -#: ../src/pd-gui.tcl:197 ../src/pd-gui.tcl:217 -msgid "Max Patch Files (.pat)" +msgid "Reset" msgstr "" -#: ../src/pd-gui.tcl:198 ../src/pd-gui.tcl:218 -msgid "Max Text Files (.mxt)" +msgid "Disable" msgstr "" -#: ../src/pd-gui.tcl:270 ../src/pd-gui.tcl:290 -#, tcl-format -msgid "WARNING: Font family '%s' not found, using default (%s)" +msgid "Externals Install Directory" msgstr "" -#: ../src/pd-gui.tcl:278 ../src/pd-gui.tcl:298 -#, tcl-format -msgid "WARNING: Font weight '%s' not found, using default (%s)" +#, fuzzy +msgid "Clear" +msgstr "યાદી સાફ કરો" + +msgid "Choose Pd documents directory:" msgstr "" -#: ../src/pd-gui.tcl:303 ../src/pd-gui.tcl:323 -#, tcl-format -msgid "ERROR: %s failed to find font size (%s) that fits into %sx%s!" +msgid "Install externals to directory:" +msgstr "" + +msgid "Add a new path" +msgstr "" + +msgid "Add new library" +msgstr "" + +msgid "Edit library" +msgstr "" + +msgid "Pd libraries to load on startup" msgstr "" -#: ../src/pd-gui.tcl:478 ../src/pd-gui.tcl:483 ../src/pd-gui.tcl:501 -msgid "ERROR: 'pd' never showed up, 'pd-gui' quitting!" +msgid "Startup flags:" msgstr "" -#: ../src/pd_menucommands.tcl:19 -msgid "Untitled" +msgid "Defeat real-time scheduling" msgstr "" -#: ../src/pd_menucommands.tcl:78 ../src/pd_menucommands.tcl:79 -#: ../src/pd_menucommands.tcl:90 #, fuzzy -msgid "Send Message..." -msgstr "સંદેશો" +msgid "Help Browser" +msgstr "શોધો..." -#: ../src/pd_menucommands.tcl:82 ../src/pd_menucommands.tcl:83 -#: ../src/pd_menucommands.tcl:94 ../src/pd_menus.tcl:87 ../src/pd_menus.tcl:88 -#: ../src/pd_menus.tcl:133 ../src/pd_menus.tcl:134 ../src/pd_menus.tcl:147 -#: ../src/pd_menus.tcl:192 ../src/pd_menus.tcl:193 ../src/pd_menus.tcl:265 -#: ../src/pd_menus.tcl:278 ../src/pd_menus.tcl:292 ../src/pd_menus.tcl:305 -#: ../src/pd_menus.tcl:329 ../src/pd_menus.tcl:342 ../src/pd_menus.tcl:360 -#: ../src/pd_menus.tcl:387 ../src/pd_menus.tcl:414 ../src/pd_menus.tcl:426 -#: ../src/pd_menus.tcl:453 ../startup/object_db.tcl:123 -msgid "Message" -msgstr "સંદેશો" +msgid "(Tcl) MISSING CLOSE-BRACE '}': " +msgstr "" + +msgid "(Tcl) INVALID COMMAND NAME: " +msgstr "" + +msgid "(Tcl) UNHANDLED ERROR: " +msgstr "" + +#, tcl-format +msgid "[deken]: installed version [%1$s] > %2$s...skipping!" +msgstr "" + +#, tcl-format +msgid "[deken]: installed version [%1$s] < %2$s...overwriting!" +msgstr "" + +#, tcl-format +msgid "[deken]: installed version [%1$s] == %2$s...skipping!" +msgstr "" + +msgid "[deken]: " +msgstr "" + +#, tcl-format +msgid "Successfully unzipped %1$s into %2$s." +msgstr "" + +msgid "[deken]: Unable to extract package automatically." +msgstr "" + +msgid "Please perform the following steps manually:" +msgstr "" + +#, tcl-format +msgid "1. Unzip %s." +msgstr "" + +#, tcl-format +msgid "2. Copy the contents into %s." +msgstr "" + +#, tcl-format +msgid "[deken] uninstalling '%s'" +msgstr "" + +#, tcl-format +msgid "Uninstalling %1$s from %2$s failed!" +msgstr "" + +#, tcl-format +msgid "[deken] deken-plugin.tcl (Pd externals search) loaded from %s." +msgstr "" + +#, tcl-format +msgid "[deken] Platform detected: %s" +msgstr "" + +#, tcl-format +msgid "[deken] Platform re-detected: %s" +msgstr "" + +msgid "Show all" +msgstr "" -#: ../src/pd_menucommands.tcl:108 ../src/pd_menucommands.tcl:111 -#: ../src/pd_menus.tcl:112 ../src/pd_menus.tcl:113 ../src/pd_menus.tcl:117 -#: ../src/pd_menus.tcl:118 ../src/pd_menus.tcl:158 ../src/pd_menus.tcl:159 -#: ../src/pd_menus.tcl:163 ../src/pd_menus.tcl:164 #, fuzzy -msgid "Font" -msgstr "ફોન્ટ:" +msgid "Search" +msgstr "લખાણ શોધો..." + +msgid "To get a list of all available externals, try an empty search." +msgstr "" + +msgid "Find externals" +msgstr "" + +msgid "Only install externals uploaded by people you trust." +msgstr "" -#: ../src/pd_menucommands.tcl:123 ../src/pd_menucommands.tcl:126 -#: ../src/pd_menus.tcl:138 ../src/pd_menus.tcl:183 ../src/pd_menus.tcl:184 #, fuzzy msgid "Preferences" msgstr "પસંદગીઓ..." -#: ../src/pd_menus.tcl:45 -#, fuzzy -msgid "Edit" -msgstr "ફેરફાર કરો (_E)" +msgid "Installation options:" +msgstr "" -#: ../src/pd_menus.tcl:45 -msgid "File" -msgstr "ફાઇલ" +msgid "Try to remove libraries before (re)installing them?" +msgstr "" -#: ../src/pd_menus.tcl:45 ../src/pdtk_canvas.tcl:48 ../src/pdtk_canvas.tcl:110 -#: ../src/pdtk_canvas.tcl:113 -msgid "Help" -msgstr "મદદ" +msgid "Show README of newly installed libraries (if present)?" +msgstr "" -#: ../src/pd_menus.tcl:45 -#, fuzzy -msgid "Media" -msgstr "મેકેડોનિયા" +msgid "Should newly installed libraries be added to Pd's search path?" +msgstr "" -#: ../src/pd_menus.tcl:45 -msgid "Put" +msgid "Platform settings:" msgstr "" -#: ../src/pd_menus.tcl:45 -#, fuzzy -msgid "Window" -msgstr "વિન્ડો (_W)" +#, tcl-format +msgid "Default platform: %s" +msgstr "" -#: ../src/pd_menus.tcl:81 ../src/pd_menus.tcl:82 ../src/pd_menus.tcl:127 -#: ../src/pd_menus.tcl:128 ../src/pd_menus.tcl:255 ../src/pd_menus.tcl:267 -#: ../src/pd_menus.tcl:285 ../src/pd_menus.tcl:298 ../src/pd_menus.tcl:322 -#: ../src/pd_menus.tcl:335 ../src/pd_menus.tcl:349 ../src/pd_menus.tcl:376 -#: ../src/pd_menus.tcl:380 ../src/pd_menus.tcl:407 ../src/pd_menus.tcl:419 -#: ../src/pd_menus.tcl:446 -msgid "New" -msgstr "નવું" +msgid "User-defined platform:" +msgstr "" -#: ../src/pd_menus.tcl:82 ../src/pd_menus.tcl:83 ../src/pd_menus.tcl:128 -#: ../src/pd_menus.tcl:129 ../src/pd_menus.tcl:256 ../src/pd_menus.tcl:268 -#: ../src/pd_menus.tcl:286 ../src/pd_menus.tcl:299 ../src/pd_menus.tcl:323 -#: ../src/pd_menus.tcl:336 ../src/pd_menus.tcl:350 ../src/pd_menus.tcl:377 -#: ../src/pd_menus.tcl:381 ../src/pd_menus.tcl:408 ../src/pd_menus.tcl:420 -#: ../src/pd_menus.tcl:447 ../src/pdtk_canvas.tcl:46 -#: ../src/pdtk_canvas.tcl:108 ../src/pdtk_canvas.tcl:111 -#: ../src/pdtk_canvas.tcl:128 ../src/pdtk_canvas.tcl:130 -#: ../src/pdtk_canvas.tcl:131 ../src/pdtk_canvas.tcl:133 -msgid "Open" -msgstr "ખોલો" +msgid "Hide foreign architectures?" +msgstr "" + +#, fuzzy, tcl-format +msgid "Deken %s Preferences" +msgstr "પસંદગીઓ..." + +msgid "[deken]: Start searching for externals..." +msgstr "" + +#, tcl-format +msgid "[deken]: online? %s" +msgstr "" + +msgid "Are you online?" +msgstr "" + +msgid "Unable to perform search." +msgstr "" + +msgid "[deken]: No matching externals found." +msgstr "" + +msgid "Try using the full name e.g. 'freeverb'." +msgstr "" + +msgid "No matching externals found." +msgstr "" + +msgid "Please select a (writable) installation directory!" +msgstr "" + +#, tcl-format +msgid "Install %1$s to %2$s?" +msgstr "" + +#, tcl-format +msgid "" +"Commencing downloading of:\n" +"%1$s\n" +"Into %2$s..." +msgstr "" + +msgid "aborting.\n" +msgstr "" + +#, tcl-format +msgid "Unable to add %s to search paths" +msgstr "" + +#, tcl-format +msgid "Add %s to the Pd search paths?" +msgstr "" + +#, tcl-format +msgid "Added %s to search paths" +msgstr "" + +#, tcl-format +msgid "Unable to download from %1$s [%2$s]" +msgstr "" + +#, tcl-format +msgid "Unable to remove stray file %s" +msgstr "" + +#, tcl-format +msgid "Unable to rename downloaded file to %s" +msgstr "" + +#, fuzzy, tcl-format +msgid "searching for '%s'" +msgstr "લખાણ શોધો..." + +#, tcl-format +msgid "Uploaded by %1$s @ %2$s" +msgstr "" + +msgid "Install package" +msgstr "" + +msgid "Open webpage" +msgstr "" + +msgid "_" +msgstr "" + +#, tcl-format +msgid "" +"Do you want Pd to create a documents directory for patches and external " +"libraries?\n" +"\n" +"Location: %s\n" +"\n" +"You can change or disable this later in the Path preferences." +msgstr "" + +#, tcl-format +msgid "" +"Pd documents directory cannot be found:\n" +"\n" +"%s\n" +"\n" +"Choose a new location?" +msgstr "" + +#, tcl-format +msgid "Couldn't create Pd documents directory: %s\n" +msgstr "" + +#, tcl-format +msgid "Couldn't create \"externals\" directory in: %s\n" +msgstr "" + +#, tcl-format +msgid "Couldn't create preferences \"%1$s\" in %2$s" +msgstr "" + +#, fuzzy +msgid "About Pd" +msgstr "વિશે (_A)" + +msgid "Save" +msgstr "સંગ્રહ કરો" -#: ../src/pd_menus.tcl:84 ../src/pd_menus.tcl:85 ../src/pd_menus.tcl:130 -#: ../src/pd_menus.tcl:131 ../src/pd_menus.tcl:261 ../src/pd_menus.tcl:274 -#: ../src/pd_menus.tcl:289 ../src/pd_menus.tcl:302 ../src/pd_menus.tcl:326 -#: ../src/pd_menus.tcl:339 ../src/pd_menus.tcl:356 ../src/pd_menus.tcl:383 -#: ../src/pd_menus.tcl:384 ../src/pd_menus.tcl:411 ../src/pd_menus.tcl:423 -#: ../src/pd_menus.tcl:450 #, fuzzy msgid "Save As..." msgstr "આ રીતે સંગ્રહ કરો" -#: ../src/pd_menus.tcl:88 ../src/pd_menus.tcl:89 ../src/pd_menus.tcl:134 -#: ../src/pd_menus.tcl:135 ../src/pd_menus.tcl:267 ../src/pd_menus.tcl:280 -#: ../src/pd_menus.tcl:293 ../src/pd_menus.tcl:306 ../src/pd_menus.tcl:330 -#: ../src/pd_menus.tcl:343 ../src/pd_menus.tcl:362 ../src/pd_menus.tcl:388 -#: ../src/pd_menus.tcl:389 ../src/pd_menus.tcl:415 ../src/pd_menus.tcl:427 -#: ../src/pd_menus.tcl:454 #, fuzzy msgid "Print..." msgstr "ફેરફાર કરો (_E)..." -#: ../src/pd_menus.tcl:93 ../src/pd_menus.tcl:94 ../src/pd_menus.tcl:139 -#: ../src/pd_menus.tcl:140 -#, fuzzy -msgid "Undo" -msgstr "યુગાન્ડા" - -#: ../src/pd_menus.tcl:95 ../src/pd_menus.tcl:96 ../src/pd_menus.tcl:141 -#: ../src/pd_menus.tcl:142 -#, fuzzy -msgid "Redo" -msgstr "લાલ:" - -#: ../src/pd_menus.tcl:98 ../src/pd_menus.tcl:99 ../src/pd_menus.tcl:144 -#: ../src/pd_menus.tcl:145 -msgid "Cut" +msgid "Paste Replace" msgstr "" -#: ../src/pd_menus.tcl:104 ../src/pd_menus.tcl:105 ../src/pd_menus.tcl:150 -#: ../src/pd_menus.tcl:151 #, fuzzy msgid "Duplicate" msgstr "તારીખ" -#: ../src/pd_menus.tcl:106 ../src/pd_menus.tcl:107 ../src/pd_menus.tcl:152 -#: ../src/pd_menus.tcl:153 #, fuzzy -msgid "Select All" -msgstr "રંગ પસંદ કરો" +msgid "Zoom In" +msgstr "નીચે" -#: ../src/pd_menus.tcl:110 ../src/pd_menus.tcl:111 ../src/pd_menus.tcl:115 -#: ../src/pd_menus.tcl:116 ../src/pd_menus.tcl:156 ../src/pd_menus.tcl:157 -#: ../src/pd_menus.tcl:161 ../src/pd_menus.tcl:162 #, fuzzy -msgid "Text Editor" -msgstr "લખાણ રંગો" +msgid "Zoom Out" +msgstr "નીચે" -#: ../src/pd_menus.tcl:120 ../src/pd_menus.tcl:121 ../src/pd_menus.tcl:166 -#: ../src/pd_menus.tcl:167 msgid "Tidy Up" msgstr "" -#: ../src/pd_menus.tcl:122 ../src/pd_menus.tcl:123 ../src/pd_menus.tcl:168 -#: ../src/pd_menus.tcl:169 -msgid "Toggle Console" +msgid "(Dis)Connect Selection" msgstr "" -#: ../src/pd_menus.tcl:124 ../src/pd_menus.tcl:125 ../src/pd_menus.tcl:170 -#: ../src/pd_menus.tcl:171 -#, fuzzy -msgid "Clear Console" -msgstr "યાદી સાફ કરો" +msgid "Triggerize" +msgstr "" -#: ../src/pd_menus.tcl:128 ../src/pd_menus.tcl:129 ../src/pd_menus.tcl:174 -#: ../src/pd_menus.tcl:175 #, fuzzy msgid "Edit Mode" msgstr "સ્થિતિ" -#: ../src/pd_menus.tcl:145 ../src/pd_menus.tcl:190 ../src/pd_menus.tcl:191 -msgid "Object" -msgstr "" +#, fuzzy +msgid "Undo" +msgstr "યુગાન્ડા" -#: ../src/pd_menus.tcl:149 ../src/pd_menus.tcl:194 ../src/pd_menus.tcl:195 #, fuzzy -msgid "Number" -msgstr "$ નંબર" +msgid "Redo" +msgstr "લાલ:" -#: ../src/pd_menus.tcl:151 ../src/pd_menus.tcl:196 ../src/pd_menus.tcl:197 -msgid "Symbol" +msgid "List of objects..." msgstr "" -#: ../src/pd_menus.tcl:153 ../src/pd_menus.tcl:198 ../src/pd_menus.tcl:199 -#, fuzzy -msgid "Comment" -msgstr "આદેશ" - -#: ../src/pd_menus.tcl:156 ../src/pd_menus.tcl:201 ../src/pd_menus.tcl:202 -#, fuzzy -msgid "Bang" -msgstr "બેન" +msgid "New" +msgstr "નવું" -#: ../src/pd_menus.tcl:158 ../src/pd_menus.tcl:203 ../src/pd_menus.tcl:204 -#, fuzzy -msgid "Toggle" -msgstr "ટોગો" +msgid "Open" +msgstr "ખોલો" -#: ../src/pd_menus.tcl:160 ../src/pd_menus.tcl:205 ../src/pd_menus.tcl:206 #, fuzzy -msgid "Number2" -msgstr "$ નંબર" +msgid "Message..." +msgstr "સંદેશો" -#: ../src/pd_menus.tcl:162 ../src/pd_menus.tcl:207 ../src/pd_menus.tcl:208 -msgid "Vslider" +msgid "Cut" msgstr "" -#: ../src/pd_menus.tcl:164 ../src/pd_menus.tcl:209 ../src/pd_menus.tcl:210 #, fuzzy -msgid "Hslider" -msgstr "છુપુ" +msgid "Select All" +msgstr "રંગ પસંદ કરો" -#: ../src/pd_menus.tcl:166 ../src/pd_menus.tcl:211 ../src/pd_menus.tcl:212 #, fuzzy -msgid "Vradio" -msgstr "આવૃત્તિ" +msgid "Clear Console" +msgstr "યાદી સાફ કરો" -#: ../src/pd_menus.tcl:168 ../src/pd_menus.tcl:213 ../src/pd_menus.tcl:214 -msgid "Hradio" +msgid "Object" msgstr "" -#: ../src/pd_menus.tcl:170 ../src/pd_menus.tcl:215 ../src/pd_menus.tcl:216 -msgid "VU Meter" +msgid "Message" +msgstr "સંદેશો" + +#, fuzzy +msgid "Number" +msgstr "$ નંબર" + +msgid "Symbol" msgstr "" -#: ../src/pd_menus.tcl:172 ../src/pd_menus.tcl:217 ../src/pd_menus.tcl:218 #, fuzzy -msgid "Canvas" -msgstr "કેનેડા" +msgid "Comment" +msgstr "આદેશ" -#: ../src/pd_menus.tcl:175 ../src/pd_menus.tcl:220 ../src/pd_menus.tcl:221 msgid "Graph" msgstr "ગ્રાફ" -#: ../src/pd_menus.tcl:176 ../src/pd_menus.tcl:221 ../src/pd_menus.tcl:222 -#, fuzzy -msgid "Array" -msgstr "અન્ડોરા" - -#: ../src/pd_menus.tcl:181 ../src/pd_menus.tcl:226 ../src/pd_menus.tcl:227 #, fuzzy msgid "Find..." msgstr "ફાઈલ મોકલો..." -#: ../src/pd_menus.tcl:183 ../src/pd_menus.tcl:228 ../src/pd_menus.tcl:229 msgid "Find Again" msgstr "" -#: ../src/pd_menus.tcl:185 ../src/pd_menus.tcl:230 ../src/pd_menus.tcl:231 msgid "Find Last Error" msgstr "" -#: ../src/pd_menus.tcl:191 ../src/pd_menus.tcl:236 ../src/pd_menus.tcl:237 msgid "DSP On" msgstr "" -#: ../src/pd_menus.tcl:193 ../src/pd_menus.tcl:238 ../src/pd_menus.tcl:239 #, fuzzy msgid "DSP Off" msgstr "બંધ" -#: ../src/pd_menus.tcl:196 ../src/pd_menus.tcl:242 ../src/pd_menus.tcl:269 msgid "Test Audio and MIDI..." msgstr "" -#: ../src/pd_menus.tcl:198 ../src/pd_menus.tcl:244 ../src/pd_menus.tcl:271 #, fuzzy msgid "Load Meter" msgstr "લેગ મીટર:" -#: ../src/pd_menus.tcl:205 ../src/pd_menus.tcl:251 ../src/pd_menus.tcl:278 +msgid "Audio Settings..." +msgstr "" + +msgid "MIDI Settings..." +msgstr "" + msgid "Minimize" msgstr "" -#: ../src/pd_menus.tcl:207 ../src/pd_menus.tcl:253 ../src/pd_menus.tcl:280 #, fuzzy msgid "Zoom" msgstr "નીચે" -#: ../src/pd_menus.tcl:210 ../src/pd_menus.tcl:256 ../src/pd_menus.tcl:283 +msgid "Bring All to Front" +msgstr "" + #, fuzzy -msgid "Parent Window" +msgid "Next Window" msgstr "મોકલો વિન્ડો" -#: ../src/pd_menus.tcl:216 ../src/pd_menus.tcl:262 ../src/pd_menus.tcl:289 -msgid "Bring All to Front" -msgstr "" +#, fuzzy +msgid "Previous Window" +msgstr "મોકલો વિન્ડો" -#: ../src/pd_menus.tcl:224 ../src/pd_menus.tcl:241 ../src/pd_menus.tcl:253 -#: ../src/pd_menus.tcl:270 ../src/pd_menus.tcl:297 ../src/pd_menus.tcl:335 -#: ../src/pd_menus.tcl:362 #, fuzzy -msgid "About Pd" -msgstr "વિશે (_A)" +msgid "Parent Window" +msgstr "મોકલો વિન્ડો" -#: ../src/pd_menus.tcl:227 ../src/pd_menus.tcl:273 ../src/pd_menus.tcl:300 msgid "HTML Manual..." msgstr "" -#: ../src/pd_menus.tcl:229 ../src/pd_menus.tcl:275 ../src/pd_menus.tcl:302 #, fuzzy msgid "Browser..." msgstr "શોધો..." -#: ../src/pd_menus.tcl:248 ../src/pd_menus.tcl:260 ../src/pd_menus.tcl:342 -#: ../src/pd_menus.tcl:369 -msgid "Preferences..." +msgid "puredata.info" +msgstr "" + +msgid "Report a bug" +msgstr "" + +#, fuzzy +msgid "Clear Menu" +msgstr "યાદી સાફ કરો" + +msgid "" +"Delete all preferences?\n" +"(takes effect when Pd is restarted)" +msgstr "" + +msgid "Path..." +msgstr "" + +msgid "Startup..." +msgstr "" + +msgid "Audio..." +msgstr "" + +msgid "MIDI..." +msgstr "" + +#, fuzzy +msgid "Zoom New Windows" +msgstr "મોકલો વિન્ડો" + +#, fuzzy +msgid "Save All Preferences" msgstr "પસંદગીઓ..." -#: ../src/pd_menus.tcl:257 ../src/pd_menus.tcl:270 ../src/pd_menus.tcl:352 -#: ../src/pd_menus.tcl:379 -msgid "Open Recent" +#, fuzzy +msgid "Save to..." +msgstr "આ રીતે સંગ્રહ કરો" + +msgid "Load from..." msgstr "" -#: ../src/pd_menus.tcl:263 -msgid "Audio Settings..." +msgid "Forget All..." msgstr "" -#: ../src/pd_menus.tcl:265 -msgid "MIDI Settings..." +msgid "Open Recent" msgstr "" -#: ../src/pd_menus.tcl:296 ../src/pd_menus.tcl:309 ../src/pd_menus.tcl:333 -#: ../src/pd_menus.tcl:346 ../src/pd_menus.tcl:393 ../src/pd_menus.tcl:420 -#: ../src/pd_menus.tcl:432 ../src/pd_menus.tcl:459 msgid "Quit" msgstr "બહાર નીકળો" -#: ../src/pd_menus.tcl:304 ../src/pd_menus.tcl:331 -#, fuzzy -msgid "Clear Menu" -msgstr "યાદી સાફ કરો" - -#: ../src/pdtk_canvas.tcl:44 ../src/pdtk_canvas.tcl:106 -#: ../src/pdtk_canvas.tcl:109 ../src/pdtk_canvas.tcl:123 -#: ../src/pdtk_canvas.tcl:125 ../src/pdtk_canvas.tcl:126 -#: ../src/pdtk_canvas.tcl:128 msgid "Properties" msgstr "" -#: ../src/pdwindow.tcl:43 +msgid "Audio on" +msgstr "" + +msgid "Audio off" +msgstr "" + +msgid "(Tcl) MISSING CLOSE-BRACKET ']': " +msgstr "" + +msgid "Tcl:" +msgstr "" + +msgid "Pd" +msgstr "" + #, fuzzy msgid "DSP" msgstr "બંધ" -#: ../startup/object_db.tcl:113 -msgid "Signal" +msgid "Audio I/O error" msgstr "" -#: ../startup/object_db.tcl:114 -msgid "Generators" +msgid "Log:" msgstr "" -#: ../startup/object_db.tcl:115 -#, fuzzy -msgid "Filters" -msgstr "ફાઇલ" +msgid "fatal" +msgstr "" -#: ../startup/object_db.tcl:116 ../startup/object_db.tcl:124 -msgid "Math" +msgid "error" msgstr "" -#: ../startup/object_db.tcl:117 ../startup/object_db.tcl:125 -msgid "I/O" +msgid "normal" msgstr "" -#: ../startup/object_db.tcl:118 ../startup/object_db.tcl:126 -msgid "Sampling" +msgid "debug" msgstr "" -#: ../startup/object_db.tcl:119 ../startup/object_db.tcl:128 -msgid "Routing" +msgid "all" msgstr "" -#: ../startup/object_db.tcl:120 ../startup/object_db.tcl:129 -msgid "Others" +msgid "New..." msgstr "" -#: ../startup/object_db.tcl:127 -msgid "GUI" +#, fuzzy +msgid "Edit..." +msgstr "ફેરફાર કરો (_E)" + +#, fuzzy +msgid "Delete" +msgstr "દૂર કરો" + +#, tcl-format +msgid "Ignoring '%s': doesn't exist" msgstr "" + +#, tcl-format +msgid "Ignoring '%s': doesn't look like a Pd-file" +msgstr "" + +#, fuzzy +#~ msgid "for:" +#~ msgstr "પોર્ટ:" + +#~ msgid "Preferences..." +#~ msgstr "પસંદગીઓ..." + +#, fuzzy +#~ msgid "Close this window??" +#~ msgstr "આ ટેબ/વિન્ડો બંધ કરો" + +#, fuzzy +#~ msgid "Pd Files" +#~ msgstr "ફાઇલ" + +#, fuzzy +#~ msgid "Filters" +#~ msgstr "ફાઇલ" + +#, fuzzy +#~ msgid "Text Editor" +#~ msgstr "લખાણ રંગો" diff --git a/po/he.po b/po/he.po index 474686c73e..61609edf41 100644 --- a/po/he.po +++ b/po/he.po @@ -6,21 +6,97 @@ msgid "" msgstr "" "Project-Id-Version: Pure Data 0.43\n" "Report-Msgid-Bugs-To: pd-dev@iem.at\n" -"POT-Creation-Date: 2009-08-27 10:01-0400\n" +"POT-Creation-Date: 2017-07-06 18:10+0200\n" "PO-Revision-Date: 2001-10-03 15:48+02:00\n" "Last-Translator: xchat \n" "Language-Team: Hebrew \n" +"Language: he\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -msgid "Undo duplicate" +msgid "-------dimensions(digits)(pix):-------" msgstr "" -msgid "Undo paste" +msgid "--------dimensions(pix)(pix):--------" msgstr "" -msgid "Undo motion" +msgid "----------dimensions(pix):-----------" +msgstr "" + +msgid "--------flash-time(ms)(ms):---------" +msgstr "" + +msgid "-----------output-range:-----------" +msgstr "" + +msgid "------selectable_dimensions(pix):------" +msgstr "" + +msgid "------visible_rectangle(pix)(pix):------" +msgstr "" + +#, fuzzy +msgid "bottom:" +msgstr "תחתון" + +#, fuzzy +msgid "height:" +msgstr "ימין" + +msgid "hold:" +msgstr "" + +msgid "intrrpt:" +msgstr "" + +msgid "left:" +msgstr "" + +msgid "lin" +msgstr "" + +msgid "log" +msgstr "" + +msgid "log-height:" +msgstr "" + +msgid "max:" +msgstr "" + +msgid "min:" +msgstr "" + +#, fuzzy +msgid "right:" +msgstr "ימין" + +msgid "size:" +msgstr "" + +msgid "top:" +msgstr "" + +msgid "value:" +msgstr "" + +#, fuzzy +msgid "width:" +msgstr "רוחב:" + +#, tcl-format +msgid "Do you want to save the changes you made in '%s'?" +msgstr "" + +#, tcl-format +msgid "Discard changes to '%s'?" +msgstr "" + +msgid "Undo clear" +msgstr "" + +msgid "Undo connect" msgstr "" msgid "Undo cut" @@ -29,911 +105,1042 @@ msgstr "" msgid "Undo disconnect" msgstr "" -msgid "Undo connect" +msgid "Undo duplicate" msgstr "" -msgid "Undo clear" +msgid "Undo motion" +msgstr "" + +msgid "Undo paste" msgstr "" msgid "Undo typing" msgstr "" -msgid "Discard changes to '%s'?" +msgid "Redo clear" msgstr "" -msgid "Do you want to save the changes you made in '%s'?" +msgid "Redo connect" +msgstr "" + +#, fuzzy +msgid "Redo cut" +msgstr "אדום:" + +msgid "Redo disconnect" +msgstr "" + +msgid "Redo duplicate" +msgstr "" + +msgid "Redo motion" +msgstr "" + +msgid "Redo paste" +msgstr "" + +msgid "Redo typing" +msgstr "" + +msgid "no Pd settings to clear" +msgstr "" + +msgid "removed .pdsettings file" +msgstr "" + +msgid "couldn't delete .pdsettings file" +msgstr "" + +msgid "failed to erase Pd settings" +msgstr "" + +msgid "erased Pd settings" +msgstr "" + +msgid "no Pd settings to erase" +msgstr "" + +msgid "skipping loading preferences... Pd seems to have crashed on startup." +msgstr "" + +msgid "(re-save preferences to reinstate them)" +msgstr "" + +msgid "File" +msgstr "" + +#, fuzzy +msgid "Edit" +msgstr "עריכת תפריט משתמש" + +msgid "Put" +msgstr "" + +msgid "Find" +msgstr "" + +msgid "Media" +msgstr "" + +#, fuzzy +msgid "Window" +msgstr "_חלונות" + +msgid "Help" +msgstr "עזרה" + +msgid "Show &Hidden Files and Directories" msgstr "" -#: ../src/dialog_array.tcl:115 ../src/dialog_array.tcl:117 -#: ../src/pd_menus.tcl:100 ../src/pd_menus.tcl:101 ../src/pd_menus.tcl:146 -#: ../src/pd_menus.tcl:147 msgid "Copy" msgstr "" -#: ../src/dialog_array.tcl:118 ../src/dialog_array.tcl:120 -#: ../src/pd_menus.tcl:102 ../src/pd_menus.tcl:103 ../src/pd_menus.tcl:148 -#: ../src/pd_menus.tcl:149 #, fuzzy msgid "Paste" msgstr "פאנל" -#: ../src/dialog_array.tcl:264 ../src/dialog_array.tcl:266 msgid "Array Properties" msgstr "" -#: ../src/dialog_array.tcl:270 ../src/dialog_array.tcl:272 +#, fuzzy +msgid "Array" +msgstr "אוואי" + #, fuzzy msgid "Name:" msgstr "כתובת איי פי של שרת הפרוקסי:" -#: ../src/dialog_array.tcl:276 ../src/dialog_array.tcl:278 -#: ../src/dialog_canvas.tcl:178 ../src/dialog_canvas.tcl:193 -#: ../src/dialog_iemgui.tcl:619 ../src/dialog_iemgui.tcl:621 msgid "Size:" msgstr "" -#: ../src/dialog_array.tcl:280 ../src/dialog_array.tcl:282 #, fuzzy msgid "Save contents" msgstr "הזדהות אוטומטית" -#: ../src/dialog_array.tcl:284 ../src/dialog_array.tcl:286 msgid "Draw as:" msgstr "" -#: ../src/dialog_array.tcl:287 ../src/dialog_array.tcl:289 -#, fuzzy -msgid "Points" -msgstr "פלאגין..." - -#: ../src/dialog_array.tcl:289 ../src/dialog_array.tcl:291 #, fuzzy msgid "Polygon" msgstr "טען" -#: ../src/dialog_array.tcl:291 ../src/dialog_array.tcl:293 +#, fuzzy +msgid "Points" +msgstr "פלאגין..." + msgid "Bezier curve" msgstr "" -#: ../src/dialog_array.tcl:297 ../src/dialog_array.tcl:299 msgid "Put array into:" msgstr "" -#: ../src/dialog_array.tcl:300 ../src/dialog_array.tcl:302 msgid "New graph" msgstr "" -#: ../src/dialog_array.tcl:302 ../src/dialog_array.tcl:304 msgid "Last graph" msgstr "" -#: ../src/dialog_array.tcl:306 ../src/dialog_array.tcl:308 -msgid "Delete array" +msgid "Options" msgstr "" -#: ../src/dialog_array.tcl:312 ../src/dialog_array.tcl:314 #, fuzzy msgid "Open List View..." msgstr "חלון רשימת ערוצים.." -#: ../src/dialog_array.tcl:319 ../src/dialog_array.tcl:321 -#: ../src/dialog_audio.tcl:136 ../src/dialog_canvas.tcl:205 -#: ../src/dialog_font.tcl:51 ../src/dialog_gatom.tcl:153 -#: ../src/dialog_gatom.tcl:161 ../src/dialog_iemgui.tcl:742 -#: ../src/dialog_iemgui.tcl:748 ../src/dialog_midi.tcl:91 -#: ../src/dialog_midi.tcl:226 +msgid "Delete array" +msgstr "" + msgid "Cancel" msgstr "ביטול" -#: ../src/dialog_array.tcl:321 ../src/dialog_array.tcl:323 -#: ../src/dialog_audio.tcl:138 ../src/dialog_canvas.tcl:207 -#: ../src/dialog_gatom.tcl:156 ../src/dialog_gatom.tcl:164 -#: ../src/dialog_iemgui.tcl:745 ../src/dialog_iemgui.tcl:751 -#: ../src/dialog_midi.tcl:93 ../src/dialog_midi.tcl:228 msgid "Apply" msgstr "החל" -#: ../src/dialog_array.tcl:323 ../src/dialog_array.tcl:325 -#: ../src/dialog_audio.tcl:140 ../src/dialog_canvas.tcl:209 -#: ../src/dialog_font.tcl:53 ../src/dialog_font.tcl:92 -#: ../src/dialog_font.tcl:100 ../src/dialog_font.tcl:101 -#: ../src/dialog_gatom.tcl:159 ../src/dialog_gatom.tcl:167 -#: ../src/dialog_iemgui.tcl:748 ../src/dialog_iemgui.tcl:754 -#: ../src/dialog_midi.tcl:95 ../src/dialog_midi.tcl:230 msgid "OK" msgstr "" -#: ../src/dialog_audio.tcl:130 msgid "Audio Settings" msgstr "" -#: ../src/dialog_audio.tcl:142 -msgid "Save All Settings" +msgid "Settings" msgstr "" -#: ../src/dialog_audio.tcl:151 msgid "Sample rate:" msgstr "" -#: ../src/dialog_audio.tcl:153 msgid "Delay (msec):" msgstr "" -#: ../src/dialog_audio.tcl:158 +msgid "Block size:" +msgstr "" + msgid "Use callbacks" msgstr "" -#: ../src/dialog_audio.tcl:166 ../src/dialog_midi.tcl:105 -#: ../src/dialog_midi.tcl:241 -msgid "Input device 1:" +msgid "Input Devices" msgstr "" -#: ../src/dialog_audio.tcl:169 ../src/dialog_audio.tcl:183 -#: ../src/dialog_audio.tcl:198 ../src/dialog_audio.tcl:213 -#: ../src/dialog_audio.tcl:232 ../src/dialog_audio.tcl:250 -#: ../src/dialog_audio.tcl:265 ../src/dialog_audio.tcl:280 #, fuzzy msgid "Channels:" msgstr "ביטול" -#: ../src/dialog_audio.tcl:179 ../src/dialog_midi.tcl:115 -#: ../src/dialog_midi.tcl:251 -msgid "Input device 2:" -msgstr "" - -#: ../src/dialog_audio.tcl:194 ../src/dialog_midi.tcl:127 -#: ../src/dialog_midi.tcl:263 -msgid "Input device 3:" -msgstr "" - -#: ../src/dialog_audio.tcl:209 ../src/dialog_midi.tcl:139 -#: ../src/dialog_midi.tcl:275 -msgid "Input device 4:" -msgstr "" - -#: ../src/dialog_audio.tcl:223 ../src/dialog_midi.tcl:150 -#: ../src/dialog_midi.tcl:286 -msgid "Output device 1:" -msgstr "" - -#: ../src/dialog_audio.tcl:226 -msgid "(same as input device) .............. " +msgid "Output Devices" msgstr "" -#: ../src/dialog_audio.tcl:246 ../src/dialog_midi.tcl:160 -#: ../src/dialog_midi.tcl:296 -msgid "Output device 2:" +msgid "(same as input device)..." msgstr "" -#: ../src/dialog_audio.tcl:261 ../src/dialog_midi.tcl:171 -#: ../src/dialog_midi.tcl:307 -msgid "Output device 3:" +msgid "Use Multiple Devices" msgstr "" -#: ../src/dialog_audio.tcl:276 ../src/dialog_midi.tcl:182 -#: ../src/dialog_midi.tcl:318 -msgid "Output device 4:" +msgid "Save All Settings" msgstr "" -#: ../src/dialog_audio.tcl:291 ../src/dialog_midi.tcl:195 -msgid "Use multiple devices" +msgid "WARNING: unknown graphme flags received in pdtk_canvas_dialog" msgstr "" -#: ../src/dialog_canvas.tcl:142 msgid "Canvas Properties" msgstr "" -#: ../src/dialog_canvas.tcl:146 msgid "Scale" msgstr "" -#: ../src/dialog_canvas.tcl:150 msgid "X units per pixel:" msgstr "" -#: ../src/dialog_canvas.tcl:155 msgid "Y units per pixel:" msgstr "" -#: ../src/dialog_canvas.tcl:159 msgid "Appearance on parent patch" msgstr "" -#: ../src/dialog_canvas.tcl:161 msgid "Graph-On-Parent" msgstr "" -#: ../src/dialog_canvas.tcl:165 msgid "Hide object name and arguments" msgstr "" -#: ../src/dialog_canvas.tcl:170 msgid "Range and size" msgstr "" -#: ../src/dialog_canvas.tcl:174 -msgid "X range, from" +msgid "X range: from" msgstr "" -#: ../src/dialog_canvas.tcl:176 ../src/dialog_canvas.tcl:191 msgid "to" msgstr "" -#: ../src/dialog_canvas.tcl:180 ../src/dialog_canvas.tcl:195 msgid "Margin:" msgstr "" -#: ../src/dialog_canvas.tcl:189 -msgid "Y range, from" +msgid "Y range: from" msgstr "" -#: ../src/dialog_find.tcl:63 ../src/dialog_find.tcl:66 -#: ../src/dialog_find.tcl:79 ../src/dialog_find.tcl:80 -#: ../src/dialog_find.tcl:83 ../src/dialog_find.tcl:85 -#: ../src/dialog_find.tcl:87 ../src/dialog_find.tcl:101 -#: ../src/dialog_find.tcl:105 ../src/dialog_find.tcl:107 -#: ../src/pd_menus.tcl:45 -msgid "Find" +msgid "Data Properties" msgstr "" -#: ../src/dialog_find.tcl:70 ../src/dialog_find.tcl:73 -#: ../src/dialog_find.tcl:87 ../src/dialog_find.tcl:91 -#: ../src/dialog_find.tcl:93 -#, fuzzy -msgid "Search in" -msgstr "חפש בבאפר.." +#, tcl-format +msgid "Found '%1$s' in %2$s" +msgstr "" -#: ../src/dialog_find.tcl:72 ../src/dialog_find.tcl:75 -#: ../src/dialog_find.tcl:89 ../src/dialog_find.tcl:93 -#: ../src/dialog_find.tcl:95 -#, fuzzy -msgid "for:" -msgstr "גופן:" +#, tcl-format +msgid "Couldn't find '%1$s' in %2$s" +msgstr "" -#: ../src/dialog_find.tcl:83 ../src/dialog_find.tcl:90 -#: ../src/dialog_find.tcl:104 ../src/dialog_find.tcl:108 -#: ../src/dialog_find.tcl:110 ../src/pd_menus.tcl:86 ../src/pd_menus.tcl:87 -#: ../src/pd_menus.tcl:132 ../src/pd_menus.tcl:133 ../src/pd_menus.tcl:259 -#: ../src/pd_menus.tcl:272 ../src/pd_menus.tcl:295 ../src/pd_menus.tcl:308 -#: ../src/pd_menus.tcl:332 ../src/pd_menus.tcl:345 ../src/pd_menus.tcl:354 -#: ../src/pd_menus.tcl:381 ../src/pd_menus.tcl:392 ../src/pd_menus.tcl:419 -#: ../src/pd_menus.tcl:431 ../src/pd_menus.tcl:458 -msgid "Close" -msgstr "סגור" +#, fuzzy, tcl-format +msgid "Search in %s for:" +msgstr "חפש בבאפר.." -#: ../src/dialog_find.tcl:83 ../src/dialog_find.tcl:97 -#: ../src/dialog_find.tcl:101 ../src/dialog_find.tcl:103 -msgid "Match whole word only" +#, tcl-format +msgid "Showed last '%1$s' in %2$s" +msgstr "" + +#, tcl-format +msgid "Showing '%1$d' out of %2$d items in %3$s" msgstr "" -#: ../src/dialog_find.tcl:92 ../src/dialog_font.tcl:49 -#: ../src/dialog_font.tcl:50 ../src/pd-gui.tcl:280 ../src/pd-gui.tcl:283 -#: ../src/pd-gui.tcl:286 ../src/pd-gui.tcl:288 ../src/pd-gui.tcl:291 -#: ../src/pd_menus.tcl:212 ../src/pd_menus.tcl:258 ../src/pd_menus.tcl:285 -#: ../src/pdwindow.tcl:33 #, fuzzy msgid "Pd window" msgstr "_חלונות" -#: ../src/dialog_font.tcl:45 -msgid "Font Properties" +msgid "Match whole word only" msgstr "" -#: ../src/dialog_font.tcl:46 ../src/dialog_font.tcl:54 -#: ../src/dialog_font.tcl:55 +msgid "Close" +msgstr "סגור" + #, fuzzy, tcl-format msgid "%s Font" msgstr "גופן:" -#: ../src/dialog_font.tcl:61 ../src/dialog_font.tcl:96 -#: ../src/dialog_font.tcl:104 ../src/dialog_font.tcl:105 +#, fuzzy +msgid "Font" +msgstr "גופן:" + #, fuzzy msgid "Font Size" msgstr "גודל חלון" -#: ../src/dialog_font.tcl:89 ../src/dialog_font.tcl:108 -#: ../src/dialog_font.tcl:116 ../src/dialog_font.tcl:117 msgid "Stretch" msgstr "" -#: ../src/dialog_font.tcl:96 ../src/dialog_font.tcl:115 -#: ../src/dialog_font.tcl:123 ../src/dialog_font.tcl:124 msgid "X and Y" msgstr "" -#: ../src/dialog_font.tcl:98 ../src/dialog_font.tcl:117 -#: ../src/dialog_font.tcl:125 ../src/dialog_font.tcl:126 msgid "X only" msgstr "" -#: ../src/dialog_font.tcl:100 ../src/dialog_font.tcl:119 -#: ../src/dialog_font.tcl:127 ../src/dialog_font.tcl:128 msgid "Y only" msgstr "" -#: ../src/dialog_gatom.tcl:93 msgid "Atom Box Properties" msgstr "" -#: ../src/dialog_gatom.tcl:99 msgid "Width:" msgstr "רוחב:" -#: ../src/dialog_gatom.tcl:103 #, fuzzy msgid "Limits" msgstr "רשימת פייטון" -#: ../src/dialog_gatom.tcl:107 msgid "Lower:" msgstr "" -#: ../src/dialog_gatom.tcl:112 ../src/dialog_gatom.tcl:113 #, fuzzy msgid "Upper:" msgstr "תפריט משתמש" -#: ../src/dialog_gatom.tcl:116 ../src/dialog_gatom.tcl:121 -#: ../src/dialog_iemgui.tcl:600 ../src/dialog_iemgui.tcl:652 -#: ../src/dialog_iemgui.tcl:657 #, fuzzy msgid "Label" msgstr "פאנל" -#: ../src/dialog_gatom.tcl:124 ../src/dialog_gatom.tcl:129 #, fuzzy -msgid "Left " +msgid "Left" msgstr "שמאל" -#: ../src/dialog_gatom.tcl:126 ../src/dialog_gatom.tcl:131 msgid "Right" msgstr "ימין" -#: ../src/dialog_gatom.tcl:128 ../src/dialog_gatom.tcl:133 msgid "Top" msgstr "עליון" -#: ../src/dialog_gatom.tcl:130 ../src/dialog_gatom.tcl:135 msgid "Bottom" msgstr "תחתון" -#: ../src/dialog_gatom.tcl:137 ../src/dialog_gatom.tcl:145 -#: ../src/dialog_iemgui.tcl:574 #, fuzzy msgid "Messages" msgstr "הודעת יציאה:" -#: ../src/dialog_gatom.tcl:141 ../src/dialog_gatom.tcl:149 -#: ../src/dialog_iemgui.tcl:578 msgid "Send symbol:" msgstr "" -#: ../src/dialog_gatom.tcl:147 ../src/dialog_gatom.tcl:155 -#: ../src/dialog_iemgui.tcl:585 #, fuzzy msgid "Receive symbol:" msgstr "קבצים שהתקבלו" -#: ../src/dialog_iemgui.tcl:197 #, fuzzy msgid "Background color" msgstr "XPM ברקע:" -#: ../src/dialog_iemgui.tcl:204 msgid "Foreground color" msgstr "" -#: ../src/dialog_iemgui.tcl:211 #, fuzzy msgid "Label color" msgstr "בחר גופן" -#: ../src/dialog_iemgui.tcl:272 #, fuzzy msgid "Init" msgstr "בלתי נראה" -#: ../src/dialog_iemgui.tcl:275 ../src/dialog_iemgui.tcl:546 msgid "No init" msgstr "" -#: ../src/dialog_iemgui.tcl:287 ../src/dialog_iemgui.tcl:558 msgid "Jump on click" msgstr "" -#: ../src/dialog_iemgui.tcl:290 ../src/dialog_iemgui.tcl:561 msgid "Steady on click" msgstr "" -#: ../src/dialog_iemgui.tcl:498 +#, fuzzy +msgid "Bang" +msgstr "כפתורים" + +msgid "Flash Time (msec)" +msgstr "" + +msgid "Intrrpt:" +msgstr "" + +msgid "Hold:" +msgstr "" + +msgid "Toggle" +msgstr "" + +msgid "Non Zero Value" +msgstr "" + +msgid "Value:" +msgstr "" + +msgid "Number2" +msgstr "" + +msgid "Width (digits):" +msgstr "" + +#, fuzzy +msgid "Height:" +msgstr "ימין" + +msgid "Output Range" +msgstr "" + +msgid "Log height:" +msgstr "" + +msgid "Vslider" +msgstr "" + +#, fuzzy +msgid "Hslider" +msgstr "מוחבא" + +#, fuzzy +msgid "Vradio" +msgstr "הסתר גירסה" + +msgid "Num cells:" +msgstr "" + +msgid "Hradio" +msgstr "" + +msgid "VU Meter" +msgstr "" + +#, fuzzy +msgid "Canvas" +msgstr "איקס-צ'אט" + +msgid "Visible Rectangle (pix)" +msgstr "" + #, tcl-format msgid "%s Properties" msgstr "" -#: ../src/dialog_iemgui.tcl:550 ../src/pd_menus.tcl:83 ../src/pd_menus.tcl:84 -#: ../src/pd_menus.tcl:129 ../src/pd_menus.tcl:130 ../src/pd_menus.tcl:260 -#: ../src/pd_menus.tcl:273 ../src/pd_menus.tcl:288 ../src/pd_menus.tcl:301 -#: ../src/pd_menus.tcl:325 ../src/pd_menus.tcl:338 ../src/pd_menus.tcl:355 -#: ../src/pd_menus.tcl:382 ../src/pd_menus.tcl:383 ../src/pd_menus.tcl:410 -#: ../src/pd_menus.tcl:422 ../src/pd_menus.tcl:449 -msgid "Save" +msgid "Parameters" msgstr "" -#: ../src/dialog_iemgui.tcl:608 -msgid "X offset" +msgid "X offset:" msgstr "" -#: ../src/dialog_iemgui.tcl:611 ../src/dialog_iemgui.tcl:612 -msgid "Y offset" +msgid "Y offset:" msgstr "" -#: ../src/dialog_iemgui.tcl:642 ../src/dialog_iemgui.tcl:645 #, fuzzy msgid "Colors" msgstr "סגור" -#: ../src/dialog_iemgui.tcl:648 ../src/dialog_iemgui.tcl:651 #, fuzzy msgid "Background" msgstr "XPM ברקע:" -#: ../src/dialog_iemgui.tcl:650 ../src/dialog_iemgui.tcl:654 #, fuzzy msgid "Front" msgstr "גופן:" -#: ../src/dialog_iemgui.tcl:662 ../src/dialog_iemgui.tcl:668 msgid "Compose color" msgstr "" -#: ../src/dialog_iemgui.tcl:682 ../src/dialog_iemgui.tcl:688 msgid "Test label" msgstr "" -#: ../src/dialog_midi.tcl:85 -msgid "MIDI Settings" +#, fuzzy +msgid "Send a Pd message" +msgstr "הודעת יציאה:" + +msgid "(use arrow keys for history)" msgstr "" -#: ../src/dialog_midi.tcl:220 -msgid "ALSA MIDI Settings" +msgid "MIDI Settings" msgstr "" -#: ../src/dialog_midi.tcl:331 -msgid "Use multiple ALSA devices" +msgid "ALSA MIDI Settings" msgstr "" -#: ../src/dialog_midi.tcl:337 msgid "In Ports:" msgstr "" -#: ../src/dialog_midi.tcl:340 msgid "Out Ports:" msgstr "" -#: ../src/g_editor.c:1663 -msgid "Discard changes to this window??" +msgid "Pd search path for objects, help, fonts, and other files" msgstr "" -#: ../src/g_editor.c:1668 -msgid "really quit?" +msgid "Use standard paths" msgstr "" -#: ../src/g_editor.c:1699 -msgid "Close this window??" +msgid "Verbose" msgstr "" -#: ../src/pd-gui.tcl:185 ../src/pd-gui.tcl:195 ../src/pd-gui.tcl:203 -#: ../src/pd-gui.tcl:206 ../src/pd-gui.tcl:215 ../src/pd-gui.tcl:226 -#, fuzzy -msgid "Associated Files" -msgstr "לאשר אוטומטית שליחות של דיסיסי" +msgid "Pd Documents Directory" +msgstr "" -#: ../src/pd-gui.tcl:186 ../src/pd-gui.tcl:196 ../src/pd-gui.tcl:204 -#: ../src/pd-gui.tcl:207 ../src/pd-gui.tcl:216 ../src/pd-gui.tcl:227 -msgid "Pd Files" +msgid "Browse" msgstr "" -#: ../src/pd-gui.tcl:187 ../src/pd-gui.tcl:205 ../src/pd-gui.tcl:208 -#: ../src/pd-gui.tcl:228 -msgid "Max Patch Files" +msgid "Reset" msgstr "" -#: ../src/pd-gui.tcl:188 ../src/pd-gui.tcl:206 ../src/pd-gui.tcl:209 -#: ../src/pd-gui.tcl:229 -msgid "Max Text Files" +msgid "Disable" msgstr "" -#: ../src/pd-gui.tcl:197 ../src/pd-gui.tcl:217 -msgid "Max Patch Files (.pat)" +msgid "Externals Install Directory" msgstr "" -#: ../src/pd-gui.tcl:198 ../src/pd-gui.tcl:218 -msgid "Max Text Files (.mxt)" +#, fuzzy +msgid "Clear" +msgstr "תפריט משתמש" + +msgid "Choose Pd documents directory:" msgstr "" -#: ../src/pd-gui.tcl:270 ../src/pd-gui.tcl:290 -#, tcl-format -msgid "WARNING: Font family '%s' not found, using default (%s)" +msgid "Install externals to directory:" msgstr "" -#: ../src/pd-gui.tcl:278 ../src/pd-gui.tcl:298 -#, tcl-format -msgid "WARNING: Font weight '%s' not found, using default (%s)" +msgid "Add a new path" msgstr "" -#: ../src/pd-gui.tcl:303 ../src/pd-gui.tcl:323 -#, tcl-format -msgid "ERROR: %s failed to find font size (%s) that fits into %sx%s!" +msgid "Add new library" msgstr "" -#: ../src/pd-gui.tcl:478 ../src/pd-gui.tcl:483 ../src/pd-gui.tcl:501 -msgid "ERROR: 'pd' never showed up, 'pd-gui' quitting!" +msgid "Edit library" msgstr "" -#: ../src/pd_menucommands.tcl:19 -#, fuzzy -msgid "Untitled" -msgstr "ללא סידור" +msgid "Pd libraries to load on startup" +msgstr "" -#: ../src/pd_menucommands.tcl:78 ../src/pd_menucommands.tcl:79 -#: ../src/pd_menucommands.tcl:90 -#, fuzzy -msgid "Send Message..." -msgstr "הודעת יציאה:" +msgid "Startup flags:" +msgstr "" -#: ../src/pd_menucommands.tcl:82 ../src/pd_menucommands.tcl:83 -#: ../src/pd_menucommands.tcl:94 ../src/pd_menus.tcl:87 ../src/pd_menus.tcl:88 -#: ../src/pd_menus.tcl:133 ../src/pd_menus.tcl:134 ../src/pd_menus.tcl:147 -#: ../src/pd_menus.tcl:192 ../src/pd_menus.tcl:193 ../src/pd_menus.tcl:265 -#: ../src/pd_menus.tcl:278 ../src/pd_menus.tcl:292 ../src/pd_menus.tcl:305 -#: ../src/pd_menus.tcl:329 ../src/pd_menus.tcl:342 ../src/pd_menus.tcl:360 -#: ../src/pd_menus.tcl:387 ../src/pd_menus.tcl:414 ../src/pd_menus.tcl:426 -#: ../src/pd_menus.tcl:453 ../startup/object_db.tcl:123 -#, fuzzy -msgid "Message" -msgstr "הודעת יציאה:" +msgid "Defeat real-time scheduling" +msgstr "" -#: ../src/pd_menucommands.tcl:108 ../src/pd_menucommands.tcl:111 -#: ../src/pd_menus.tcl:112 ../src/pd_menus.tcl:113 ../src/pd_menus.tcl:117 -#: ../src/pd_menus.tcl:118 ../src/pd_menus.tcl:158 ../src/pd_menus.tcl:159 -#: ../src/pd_menus.tcl:163 ../src/pd_menus.tcl:164 #, fuzzy -msgid "Font" -msgstr "גופן:" +msgid "Help Browser" +msgstr "דפדף..." + +msgid "(Tcl) MISSING CLOSE-BRACE '}': " +msgstr "" + +msgid "(Tcl) INVALID COMMAND NAME: " +msgstr "" + +msgid "(Tcl) UNHANDLED ERROR: " +msgstr "" + +#, tcl-format +msgid "[deken]: installed version [%1$s] > %2$s...skipping!" +msgstr "" + +#, tcl-format +msgid "[deken]: installed version [%1$s] < %2$s...overwriting!" +msgstr "" + +#, tcl-format +msgid "[deken]: installed version [%1$s] == %2$s...skipping!" +msgstr "" + +msgid "[deken]: " +msgstr "" + +#, tcl-format +msgid "Successfully unzipped %1$s into %2$s." +msgstr "" + +msgid "[deken]: Unable to extract package automatically." +msgstr "" + +msgid "Please perform the following steps manually:" +msgstr "" + +#, tcl-format +msgid "1. Unzip %s." +msgstr "" + +#, tcl-format +msgid "2. Copy the contents into %s." +msgstr "" + +#, tcl-format +msgid "[deken] uninstalling '%s'" +msgstr "" + +#, tcl-format +msgid "Uninstalling %1$s from %2$s failed!" +msgstr "" + +#, tcl-format +msgid "[deken] deken-plugin.tcl (Pd externals search) loaded from %s." +msgstr "" + +#, tcl-format +msgid "[deken] Platform detected: %s" +msgstr "" + +#, tcl-format +msgid "[deken] Platform re-detected: %s" +msgstr "" + +msgid "Show all" +msgstr "" + +#, fuzzy +msgid "Search" +msgstr "חפש בבאפר.." + +msgid "To get a list of all available externals, try an empty search." +msgstr "" + +msgid "Find externals" +msgstr "" + +msgid "Only install externals uploaded by people you trust." +msgstr "" -#: ../src/pd_menucommands.tcl:123 ../src/pd_menucommands.tcl:126 -#: ../src/pd_menus.tcl:138 ../src/pd_menus.tcl:183 ../src/pd_menus.tcl:184 #, fuzzy msgid "Preferences" msgstr "איקס-צ'אט: הגדרות" -#: ../src/pd_menus.tcl:45 -msgid "Edit" +msgid "Installation options:" msgstr "" -#: ../src/pd_menus.tcl:45 -msgid "File" +msgid "Try to remove libraries before (re)installing them?" msgstr "" -#: ../src/pd_menus.tcl:45 ../src/pdtk_canvas.tcl:48 ../src/pdtk_canvas.tcl:110 -#: ../src/pdtk_canvas.tcl:113 -msgid "Help" -msgstr "עזרה" +msgid "Show README of newly installed libraries (if present)?" +msgstr "" -#: ../src/pd_menus.tcl:45 -msgid "Media" +msgid "Should newly installed libraries be added to Pd's search path?" msgstr "" -#: ../src/pd_menus.tcl:45 -msgid "Put" +msgid "Platform settings:" msgstr "" -#: ../src/pd_menus.tcl:45 -#, fuzzy -msgid "Window" -msgstr "_חלונות" +#, tcl-format +msgid "Default platform: %s" +msgstr "" -#: ../src/pd_menus.tcl:81 ../src/pd_menus.tcl:82 ../src/pd_menus.tcl:127 -#: ../src/pd_menus.tcl:128 ../src/pd_menus.tcl:255 ../src/pd_menus.tcl:267 -#: ../src/pd_menus.tcl:285 ../src/pd_menus.tcl:298 ../src/pd_menus.tcl:322 -#: ../src/pd_menus.tcl:335 ../src/pd_menus.tcl:349 ../src/pd_menus.tcl:376 -#: ../src/pd_menus.tcl:380 ../src/pd_menus.tcl:407 ../src/pd_menus.tcl:419 -#: ../src/pd_menus.tcl:446 -msgid "New" +msgid "User-defined platform:" msgstr "" -#: ../src/pd_menus.tcl:82 ../src/pd_menus.tcl:83 ../src/pd_menus.tcl:128 -#: ../src/pd_menus.tcl:129 ../src/pd_menus.tcl:256 ../src/pd_menus.tcl:268 -#: ../src/pd_menus.tcl:286 ../src/pd_menus.tcl:299 ../src/pd_menus.tcl:323 -#: ../src/pd_menus.tcl:336 ../src/pd_menus.tcl:350 ../src/pd_menus.tcl:377 -#: ../src/pd_menus.tcl:381 ../src/pd_menus.tcl:408 ../src/pd_menus.tcl:420 -#: ../src/pd_menus.tcl:447 ../src/pdtk_canvas.tcl:46 -#: ../src/pdtk_canvas.tcl:108 ../src/pdtk_canvas.tcl:111 -#: ../src/pdtk_canvas.tcl:128 ../src/pdtk_canvas.tcl:130 -#: ../src/pdtk_canvas.tcl:131 ../src/pdtk_canvas.tcl:133 -msgid "Open" +msgid "Hide foreign architectures?" msgstr "" -#: ../src/pd_menus.tcl:84 ../src/pd_menus.tcl:85 ../src/pd_menus.tcl:130 -#: ../src/pd_menus.tcl:131 ../src/pd_menus.tcl:261 ../src/pd_menus.tcl:274 -#: ../src/pd_menus.tcl:289 ../src/pd_menus.tcl:302 ../src/pd_menus.tcl:326 -#: ../src/pd_menus.tcl:339 ../src/pd_menus.tcl:356 ../src/pd_menus.tcl:383 -#: ../src/pd_menus.tcl:384 ../src/pd_menus.tcl:411 ../src/pd_menus.tcl:423 -#: ../src/pd_menus.tcl:450 -#, fuzzy -msgid "Save As..." -msgstr "עריכת אירועי טקסט.." +#, fuzzy, tcl-format +msgid "Deken %s Preferences" +msgstr "איקס-צ'אט: הגדרות" -#: ../src/pd_menus.tcl:88 ../src/pd_menus.tcl:89 ../src/pd_menus.tcl:134 -#: ../src/pd_menus.tcl:135 ../src/pd_menus.tcl:267 ../src/pd_menus.tcl:280 -#: ../src/pd_menus.tcl:293 ../src/pd_menus.tcl:306 ../src/pd_menus.tcl:330 -#: ../src/pd_menus.tcl:343 ../src/pd_menus.tcl:362 ../src/pd_menus.tcl:388 -#: ../src/pd_menus.tcl:389 ../src/pd_menus.tcl:415 ../src/pd_menus.tcl:427 -#: ../src/pd_menus.tcl:454 -msgid "Print..." +msgid "[deken]: Start searching for externals..." msgstr "" -#: ../src/pd_menus.tcl:93 ../src/pd_menus.tcl:94 ../src/pd_menus.tcl:139 -#: ../src/pd_menus.tcl:140 -msgid "Undo" +#, tcl-format +msgid "[deken]: online? %s" msgstr "" -#: ../src/pd_menus.tcl:95 ../src/pd_menus.tcl:96 ../src/pd_menus.tcl:141 -#: ../src/pd_menus.tcl:142 -#, fuzzy -msgid "Redo" -msgstr "אדום:" +msgid "Are you online?" +msgstr "" -#: ../src/pd_menus.tcl:98 ../src/pd_menus.tcl:99 ../src/pd_menus.tcl:144 -#: ../src/pd_menus.tcl:145 -msgid "Cut" +msgid "Unable to perform search." msgstr "" -#: ../src/pd_menus.tcl:104 ../src/pd_menus.tcl:105 ../src/pd_menus.tcl:150 -#: ../src/pd_menus.tcl:151 -msgid "Duplicate" +msgid "[deken]: No matching externals found." +msgstr "" + +msgid "Try using the full name e.g. 'freeverb'." +msgstr "" + +msgid "No matching externals found." +msgstr "" + +msgid "Please select a (writable) installation directory!" +msgstr "" + +#, tcl-format +msgid "Install %1$s to %2$s?" +msgstr "" + +#, tcl-format +msgid "" +"Commencing downloading of:\n" +"%1$s\n" +"Into %2$s..." +msgstr "" + +msgid "aborting.\n" +msgstr "" + +#, tcl-format +msgid "Unable to add %s to search paths" +msgstr "" + +#, tcl-format +msgid "Add %s to the Pd search paths?" +msgstr "" + +#, tcl-format +msgid "Added %s to search paths" +msgstr "" + +#, tcl-format +msgid "Unable to download from %1$s [%2$s]" +msgstr "" + +#, tcl-format +msgid "Unable to remove stray file %s" +msgstr "" + +#, tcl-format +msgid "Unable to rename downloaded file to %s" +msgstr "" + +#, fuzzy, tcl-format +msgid "searching for '%s'" +msgstr "חפש בבאפר.." + +#, tcl-format +msgid "Uploaded by %1$s @ %2$s" +msgstr "" + +msgid "Install package" +msgstr "" + +msgid "Open webpage" +msgstr "" + +msgid "_" +msgstr "" + +#, tcl-format +msgid "" +"Do you want Pd to create a documents directory for patches and external " +"libraries?\n" +"\n" +"Location: %s\n" +"\n" +"You can change or disable this later in the Path preferences." +msgstr "" + +#, tcl-format +msgid "" +"Pd documents directory cannot be found:\n" +"\n" +"%s\n" +"\n" +"Choose a new location?" +msgstr "" + +#, tcl-format +msgid "Couldn't create Pd documents directory: %s\n" +msgstr "" + +#, tcl-format +msgid "Couldn't create \"externals\" directory in: %s\n" +msgstr "" + +#, tcl-format +msgid "Couldn't create preferences \"%1$s\" in %2$s" msgstr "" -#: ../src/pd_menus.tcl:106 ../src/pd_menus.tcl:107 ../src/pd_menus.tcl:152 -#: ../src/pd_menus.tcl:153 #, fuzzy -msgid "Select All" -msgstr "בחר גופן" +msgid "About Pd" +msgstr "אודות איקס-צ'אט" -#: ../src/pd_menus.tcl:110 ../src/pd_menus.tcl:111 ../src/pd_menus.tcl:115 -#: ../src/pd_menus.tcl:116 ../src/pd_menus.tcl:156 ../src/pd_menus.tcl:157 -#: ../src/pd_menus.tcl:161 ../src/pd_menus.tcl:162 -msgid "Text Editor" +msgid "Save" msgstr "" -#: ../src/pd_menus.tcl:120 ../src/pd_menus.tcl:121 ../src/pd_menus.tcl:166 -#: ../src/pd_menus.tcl:167 -msgid "Tidy Up" +#, fuzzy +msgid "Save As..." +msgstr "עריכת אירועי טקסט.." + +msgid "Print..." msgstr "" -#: ../src/pd_menus.tcl:122 ../src/pd_menus.tcl:123 ../src/pd_menus.tcl:168 -#: ../src/pd_menus.tcl:169 -msgid "Toggle Console" +msgid "Paste Replace" msgstr "" -#: ../src/pd_menus.tcl:124 ../src/pd_menus.tcl:125 ../src/pd_menus.tcl:170 -#: ../src/pd_menus.tcl:171 -msgid "Clear Console" +msgid "Duplicate" msgstr "" -#: ../src/pd_menus.tcl:128 ../src/pd_menus.tcl:129 ../src/pd_menus.tcl:174 -#: ../src/pd_menus.tcl:175 #, fuzzy -msgid "Edit Mode" -msgstr "עריכת תפריט משתמש" +msgid "Zoom In" +msgstr "תחתון" -#: ../src/pd_menus.tcl:145 ../src/pd_menus.tcl:190 ../src/pd_menus.tcl:191 -msgid "Object" +#, fuzzy +msgid "Zoom Out" +msgstr "תחתון" + +msgid "Tidy Up" msgstr "" -#: ../src/pd_menus.tcl:149 ../src/pd_menus.tcl:194 ../src/pd_menus.tcl:195 -msgid "Number" +msgid "(Dis)Connect Selection" msgstr "" -#: ../src/pd_menus.tcl:151 ../src/pd_menus.tcl:196 ../src/pd_menus.tcl:197 -msgid "Symbol" +msgid "Triggerize" msgstr "" -#: ../src/pd_menus.tcl:153 ../src/pd_menus.tcl:198 ../src/pd_menus.tcl:199 #, fuzzy -msgid "Comment" -msgstr "פקודה לניגון:" +msgid "Edit Mode" +msgstr "עריכת תפריט משתמש" + +msgid "Undo" +msgstr "" -#: ../src/pd_menus.tcl:156 ../src/pd_menus.tcl:201 ../src/pd_menus.tcl:202 #, fuzzy -msgid "Bang" -msgstr "כפתורים" +msgid "Redo" +msgstr "אדום:" -#: ../src/pd_menus.tcl:158 ../src/pd_menus.tcl:203 ../src/pd_menus.tcl:204 -msgid "Toggle" +msgid "List of objects..." msgstr "" -#: ../src/pd_menus.tcl:160 ../src/pd_menus.tcl:205 ../src/pd_menus.tcl:206 -msgid "Number2" +msgid "New" msgstr "" -#: ../src/pd_menus.tcl:162 ../src/pd_menus.tcl:207 ../src/pd_menus.tcl:208 -msgid "Vslider" +msgid "Open" msgstr "" -#: ../src/pd_menus.tcl:164 ../src/pd_menus.tcl:209 ../src/pd_menus.tcl:210 #, fuzzy -msgid "Hslider" -msgstr "מוחבא" +msgid "Message..." +msgstr "הודעת יציאה:" + +msgid "Cut" +msgstr "" -#: ../src/pd_menus.tcl:166 ../src/pd_menus.tcl:211 ../src/pd_menus.tcl:212 #, fuzzy -msgid "Vradio" -msgstr "הסתר גירסה" +msgid "Select All" +msgstr "בחר גופן" -#: ../src/pd_menus.tcl:168 ../src/pd_menus.tcl:213 ../src/pd_menus.tcl:214 -msgid "Hradio" +msgid "Clear Console" msgstr "" -#: ../src/pd_menus.tcl:170 ../src/pd_menus.tcl:215 ../src/pd_menus.tcl:216 -msgid "VU Meter" +msgid "Object" msgstr "" -#: ../src/pd_menus.tcl:172 ../src/pd_menus.tcl:217 ../src/pd_menus.tcl:218 #, fuzzy -msgid "Canvas" -msgstr "איקס-צ'אט" +msgid "Message" +msgstr "הודעת יציאה:" -#: ../src/pd_menus.tcl:175 ../src/pd_menus.tcl:220 ../src/pd_menus.tcl:221 -msgid "Graph" +msgid "Number" +msgstr "" + +msgid "Symbol" msgstr "" -#: ../src/pd_menus.tcl:176 ../src/pd_menus.tcl:221 ../src/pd_menus.tcl:222 #, fuzzy -msgid "Array" -msgstr "אוואי" +msgid "Comment" +msgstr "פקודה לניגון:" + +msgid "Graph" +msgstr "" -#: ../src/pd_menus.tcl:181 ../src/pd_menus.tcl:226 ../src/pd_menus.tcl:227 #, fuzzy msgid "Find..." msgstr "חלון שליחות דיסיסי.." -#: ../src/pd_menus.tcl:183 ../src/pd_menus.tcl:228 ../src/pd_menus.tcl:229 msgid "Find Again" msgstr "" -#: ../src/pd_menus.tcl:185 ../src/pd_menus.tcl:230 ../src/pd_menus.tcl:231 msgid "Find Last Error" msgstr "" -#: ../src/pd_menus.tcl:191 ../src/pd_menus.tcl:236 ../src/pd_menus.tcl:237 msgid "DSP On" msgstr "" -#: ../src/pd_menus.tcl:193 ../src/pd_menus.tcl:238 ../src/pd_menus.tcl:239 msgid "DSP Off" msgstr "" -#: ../src/pd_menus.tcl:196 ../src/pd_menus.tcl:242 ../src/pd_menus.tcl:269 msgid "Test Audio and MIDI..." msgstr "" -#: ../src/pd_menus.tcl:198 ../src/pd_menus.tcl:244 ../src/pd_menus.tcl:271 #, fuzzy msgid "Load Meter" msgstr "טען" -#: ../src/pd_menus.tcl:205 ../src/pd_menus.tcl:251 ../src/pd_menus.tcl:278 +msgid "Audio Settings..." +msgstr "" + +msgid "MIDI Settings..." +msgstr "" + msgid "Minimize" msgstr "" -#: ../src/pd_menus.tcl:207 ../src/pd_menus.tcl:253 ../src/pd_menus.tcl:280 #, fuzzy msgid "Zoom" msgstr "תחתון" -#: ../src/pd_menus.tcl:210 ../src/pd_menus.tcl:256 ../src/pd_menus.tcl:283 +msgid "Bring All to Front" +msgstr "" + #, fuzzy -msgid "Parent Window" +msgid "Next Window" msgstr "חלון ראשי" -#: ../src/pd_menus.tcl:216 ../src/pd_menus.tcl:262 ../src/pd_menus.tcl:289 -msgid "Bring All to Front" -msgstr "" +#, fuzzy +msgid "Previous Window" +msgstr "חלון ראשי" -#: ../src/pd_menus.tcl:224 ../src/pd_menus.tcl:241 ../src/pd_menus.tcl:253 -#: ../src/pd_menus.tcl:270 ../src/pd_menus.tcl:297 ../src/pd_menus.tcl:335 -#: ../src/pd_menus.tcl:362 #, fuzzy -msgid "About Pd" -msgstr "אודות איקס-צ'אט" +msgid "Parent Window" +msgstr "חלון ראשי" -#: ../src/pd_menus.tcl:227 ../src/pd_menus.tcl:273 ../src/pd_menus.tcl:300 msgid "HTML Manual..." msgstr "" -#: ../src/pd_menus.tcl:229 ../src/pd_menus.tcl:275 ../src/pd_menus.tcl:302 #, fuzzy msgid "Browser..." msgstr "דפדף..." -#: ../src/pd_menus.tcl:248 ../src/pd_menus.tcl:260 ../src/pd_menus.tcl:342 -#: ../src/pd_menus.tcl:369 +msgid "puredata.info" +msgstr "" + +msgid "Report a bug" +msgstr "" + #, fuzzy -msgid "Preferences..." +msgid "Clear Menu" +msgstr "תפריט משתמש" + +msgid "" +"Delete all preferences?\n" +"(takes effect when Pd is restarted)" +msgstr "" + +msgid "Path..." +msgstr "" + +msgid "Startup..." +msgstr "" + +msgid "Audio..." +msgstr "" + +msgid "MIDI..." +msgstr "" + +#, fuzzy +msgid "Zoom New Windows" +msgstr "חלון ראשי" + +#, fuzzy +msgid "Save All Preferences" msgstr "איקס-צ'אט: הגדרות" -#: ../src/pd_menus.tcl:257 ../src/pd_menus.tcl:270 ../src/pd_menus.tcl:352 -#: ../src/pd_menus.tcl:379 -msgid "Open Recent" +#, fuzzy +msgid "Save to..." +msgstr "עריכת אירועי טקסט.." + +msgid "Load from..." msgstr "" -#: ../src/pd_menus.tcl:263 -msgid "Audio Settings..." +msgid "Forget All..." msgstr "" -#: ../src/pd_menus.tcl:265 -msgid "MIDI Settings..." +msgid "Open Recent" msgstr "" -#: ../src/pd_menus.tcl:296 ../src/pd_menus.tcl:309 ../src/pd_menus.tcl:333 -#: ../src/pd_menus.tcl:346 ../src/pd_menus.tcl:393 ../src/pd_menus.tcl:420 -#: ../src/pd_menus.tcl:432 ../src/pd_menus.tcl:459 msgid "Quit" msgstr "יציאה" -#: ../src/pd_menus.tcl:304 ../src/pd_menus.tcl:331 -#, fuzzy -msgid "Clear Menu" -msgstr "תפריט משתמש" - -#: ../src/pdtk_canvas.tcl:44 ../src/pdtk_canvas.tcl:106 -#: ../src/pdtk_canvas.tcl:109 ../src/pdtk_canvas.tcl:123 -#: ../src/pdtk_canvas.tcl:125 ../src/pdtk_canvas.tcl:126 -#: ../src/pdtk_canvas.tcl:128 msgid "Properties" msgstr "" -#: ../src/pdwindow.tcl:43 +msgid "Audio on" +msgstr "" + +msgid "Audio off" +msgstr "" + +msgid "(Tcl) MISSING CLOSE-BRACKET ']': " +msgstr "" + +msgid "Tcl:" +msgstr "" + +msgid "Pd" +msgstr "" + msgid "DSP" msgstr "" -#: ../startup/object_db.tcl:113 -#, fuzzy -msgid "Signal" -msgstr "כללי" +msgid "Audio I/O error" +msgstr "" -#: ../startup/object_db.tcl:114 -#, fuzzy -msgid "Generators" -msgstr "כללי" +msgid "Log:" +msgstr "" -#: ../startup/object_db.tcl:115 -#, fuzzy -msgid "Filters" -msgstr "פאלט.." +msgid "fatal" +msgstr "" -#: ../startup/object_db.tcl:116 ../startup/object_db.tcl:124 -msgid "Math" +msgid "error" msgstr "" -#: ../startup/object_db.tcl:117 ../startup/object_db.tcl:125 -msgid "I/O" +msgid "normal" msgstr "" -#: ../startup/object_db.tcl:118 ../startup/object_db.tcl:126 -msgid "Sampling" +msgid "debug" msgstr "" -#: ../startup/object_db.tcl:119 ../startup/object_db.tcl:128 -msgid "Routing" +msgid "all" msgstr "" -#: ../startup/object_db.tcl:120 ../startup/object_db.tcl:129 -#, fuzzy -msgid "Others" -msgstr "אופציות אחרות של פריסה" +msgid "New..." +msgstr "" + +msgid "Edit..." +msgstr "" + +msgid "Delete" +msgstr "" + +#, tcl-format +msgid "Ignoring '%s': doesn't exist" +msgstr "" -#: ../startup/object_db.tcl:127 -msgid "GUI" +#, tcl-format +msgid "Ignoring '%s': doesn't look like a Pd-file" msgstr "" + +#, fuzzy +#~ msgid "for:" +#~ msgstr "גופן:" + +#, fuzzy +#~ msgid "Signal" +#~ msgstr "כללי" + +#, fuzzy +#~ msgid "Preferences..." +#~ msgstr "איקס-צ'אט: הגדרות" + +#, fuzzy +#~ msgid "Generators" +#~ msgstr "כללי" + +#, fuzzy +#~ msgid "Filters" +#~ msgstr "פאלט.." + +#, fuzzy +#~ msgid "Associated Files" +#~ msgstr "לאשר אוטומטית שליחות של דיסיסי" + +#, fuzzy +#~ msgid "Others" +#~ msgstr "אופציות אחרות של פריסה" + +#, fuzzy +#~ msgid "Untitled" +#~ msgstr "ללא סידור" diff --git a/po/hi.po b/po/hi.po index 982c8f7f2f..67bf4560e0 100644 --- a/po/hi.po +++ b/po/hi.po @@ -6,23 +6,98 @@ msgid "" msgstr "" "Project-Id-Version: Pure Data 0.43\n" "Report-Msgid-Bugs-To: pd-dev@iem.at\n" -"POT-Creation-Date: 2009-08-27 10:01-0400\n" +"POT-Creation-Date: 2017-07-06 18:10+0200\n" "PO-Revision-Date: 2005-05-04 12:50+0530\n" "Last-Translator: Rajesh Ranjan \n" "Language-Team: Hindi \n" +"Language: hi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: KBabel 1.9.1\n" +msgid "-------dimensions(digits)(pix):-------" +msgstr "" + +msgid "--------dimensions(pix)(pix):--------" +msgstr "" + +msgid "----------dimensions(pix):-----------" +msgstr "" + +msgid "--------flash-time(ms)(ms):---------" +msgstr "" + +msgid "-----------output-range:-----------" +msgstr "" + +msgid "------selectable_dimensions(pix):------" +msgstr "" + +msgid "------visible_rectangle(pix)(pix):------" +msgstr "" + #, fuzzy -msgid "Undo duplicate" -msgstr "तारीख़" +msgid "bottom:" +msgstr "नीचे" -msgid "Undo paste" +#, fuzzy +msgid "height:" +msgstr "दाहिना" + +msgid "hold:" msgstr "" -msgid "Undo motion" +msgid "intrrpt:" +msgstr "" + +msgid "left:" +msgstr "" + +msgid "lin" +msgstr "" + +msgid "log" +msgstr "" + +msgid "log-height:" +msgstr "" + +msgid "max:" +msgstr "" + +msgid "min:" +msgstr "" + +#, fuzzy +msgid "right:" +msgstr "दाहिना" + +#, fuzzy +msgid "size:" +msgstr "आकार" + +msgid "top:" +msgstr "" + +msgid "value:" +msgstr "" + +msgid "width:" +msgstr "" + +#, tcl-format +msgid "Do you want to save the changes you made in '%s'?" +msgstr "" + +#, tcl-format +msgid "Discard changes to '%s'?" +msgstr "" + +msgid "Undo clear" +msgstr "" + +msgid "Undo connect" msgstr "" #, fuzzy @@ -32,922 +107,1050 @@ msgstr "यूगांडा" msgid "Undo disconnect" msgstr "" -msgid "Undo connect" +#, fuzzy +msgid "Undo duplicate" +msgstr "तारीख़" + +msgid "Undo motion" msgstr "" -msgid "Undo clear" +msgid "Undo paste" msgstr "" msgid "Undo typing" msgstr "" -msgid "Discard changes to '%s'?" +msgid "Redo clear" msgstr "" -msgid "Do you want to save the changes you made in '%s'?" +msgid "Redo connect" +msgstr "" + +#, fuzzy +msgid "Redo cut" +msgstr "यूगांडा" + +msgid "Redo disconnect" +msgstr "" + +#, fuzzy +msgid "Redo duplicate" +msgstr "तारीख़" + +msgid "Redo motion" +msgstr "" + +msgid "Redo paste" +msgstr "" + +msgid "Redo typing" +msgstr "" + +msgid "no Pd settings to clear" +msgstr "" + +msgid "removed .pdsettings file" +msgstr "" + +msgid "couldn't delete .pdsettings file" +msgstr "" + +msgid "failed to erase Pd settings" +msgstr "" + +msgid "erased Pd settings" +msgstr "" + +msgid "no Pd settings to erase" +msgstr "" + +msgid "skipping loading preferences... Pd seems to have crashed on startup." +msgstr "" + +msgid "(re-save preferences to reinstate them)" +msgstr "" + +msgid "File" +msgstr "फाइल" + +#, fuzzy +msgid "Edit" +msgstr "संपादन (_E)" + +msgid "Put" +msgstr "" + +msgid "Find" +msgstr "ढूंढें" + +#, fuzzy +msgid "Media" +msgstr "मेसीडोनिया" + +#, fuzzy +msgid "Window" +msgstr "विंडो (_W)" + +msgid "Help" +msgstr "मदद" + +msgid "Show &Hidden Files and Directories" msgstr "" -#: ../src/dialog_array.tcl:115 ../src/dialog_array.tcl:117 -#: ../src/pd_menus.tcl:100 ../src/pd_menus.tcl:101 ../src/pd_menus.tcl:146 -#: ../src/pd_menus.tcl:147 msgid "Copy" msgstr "कॉपी" -#: ../src/dialog_array.tcl:118 ../src/dialog_array.tcl:120 -#: ../src/pd_menus.tcl:102 ../src/pd_menus.tcl:103 ../src/pd_menus.tcl:148 -#: ../src/pd_menus.tcl:149 #, fuzzy msgid "Paste" msgstr "तारीख़" -#: ../src/dialog_array.tcl:264 ../src/dialog_array.tcl:266 msgid "Array Properties" msgstr "" -#: ../src/dialog_array.tcl:270 ../src/dialog_array.tcl:272 +#, fuzzy +msgid "Array" +msgstr "अंडोरा" + #, fuzzy msgid "Name:" msgstr "नाम" -#: ../src/dialog_array.tcl:276 ../src/dialog_array.tcl:278 -#: ../src/dialog_canvas.tcl:178 ../src/dialog_canvas.tcl:193 -#: ../src/dialog_iemgui.tcl:619 ../src/dialog_iemgui.tcl:621 #, fuzzy msgid "Size:" msgstr "आकार" -#: ../src/dialog_array.tcl:280 ../src/dialog_array.tcl:282 #, fuzzy msgid "Save contents" msgstr "विषय सूची (_C)" -#: ../src/dialog_array.tcl:284 ../src/dialog_array.tcl:286 msgid "Draw as:" msgstr "" -#: ../src/dialog_array.tcl:287 ../src/dialog_array.tcl:289 -#, fuzzy -msgid "Points" -msgstr "पोर्ट" - -#: ../src/dialog_array.tcl:289 ../src/dialog_array.tcl:291 #, fuzzy msgid "Polygon" msgstr "पोलेंड" -#: ../src/dialog_array.tcl:291 ../src/dialog_array.tcl:293 +#, fuzzy +msgid "Points" +msgstr "पोर्ट" + msgid "Bezier curve" msgstr "" -#: ../src/dialog_array.tcl:297 ../src/dialog_array.tcl:299 msgid "Put array into:" msgstr "" -#: ../src/dialog_array.tcl:300 ../src/dialog_array.tcl:302 msgid "New graph" msgstr "" -#: ../src/dialog_array.tcl:302 ../src/dialog_array.tcl:304 msgid "Last graph" msgstr "" -#: ../src/dialog_array.tcl:306 ../src/dialog_array.tcl:308 -#, fuzzy -msgid "Delete array" -msgstr "मिटाओ" +msgid "Options" +msgstr "" -#: ../src/dialog_array.tcl:312 ../src/dialog_array.tcl:314 #, fuzzy msgid "Open List View..." msgstr "प्रतिबंध सूची..." -#: ../src/dialog_array.tcl:319 ../src/dialog_array.tcl:321 -#: ../src/dialog_audio.tcl:136 ../src/dialog_canvas.tcl:205 -#: ../src/dialog_font.tcl:51 ../src/dialog_gatom.tcl:153 -#: ../src/dialog_gatom.tcl:161 ../src/dialog_iemgui.tcl:742 -#: ../src/dialog_iemgui.tcl:748 ../src/dialog_midi.tcl:91 -#: ../src/dialog_midi.tcl:226 +#, fuzzy +msgid "Delete array" +msgstr "मिटाओ" + msgid "Cancel" msgstr "रद्द" -#: ../src/dialog_array.tcl:321 ../src/dialog_array.tcl:323 -#: ../src/dialog_audio.tcl:138 ../src/dialog_canvas.tcl:207 -#: ../src/dialog_gatom.tcl:156 ../src/dialog_gatom.tcl:164 -#: ../src/dialog_iemgui.tcl:745 ../src/dialog_iemgui.tcl:751 -#: ../src/dialog_midi.tcl:93 ../src/dialog_midi.tcl:228 msgid "Apply" msgstr "लागू करो" -#: ../src/dialog_array.tcl:323 ../src/dialog_array.tcl:325 -#: ../src/dialog_audio.tcl:140 ../src/dialog_canvas.tcl:209 -#: ../src/dialog_font.tcl:53 ../src/dialog_font.tcl:92 -#: ../src/dialog_font.tcl:100 ../src/dialog_font.tcl:101 -#: ../src/dialog_gatom.tcl:159 ../src/dialog_gatom.tcl:167 -#: ../src/dialog_iemgui.tcl:748 ../src/dialog_iemgui.tcl:754 -#: ../src/dialog_midi.tcl:95 ../src/dialog_midi.tcl:230 msgid "OK" msgstr "" -#: ../src/dialog_audio.tcl:130 msgid "Audio Settings" msgstr "" -#: ../src/dialog_audio.tcl:142 -msgid "Save All Settings" +msgid "Settings" msgstr "" -#: ../src/dialog_audio.tcl:151 msgid "Sample rate:" msgstr "" -#: ../src/dialog_audio.tcl:153 msgid "Delay (msec):" msgstr "" -#: ../src/dialog_audio.tcl:158 +msgid "Block size:" +msgstr "" + msgid "Use callbacks" msgstr "" -#: ../src/dialog_audio.tcl:166 ../src/dialog_midi.tcl:105 -#: ../src/dialog_midi.tcl:241 -msgid "Input device 1:" +msgid "Input Devices" msgstr "" -#: ../src/dialog_audio.tcl:169 ../src/dialog_audio.tcl:183 -#: ../src/dialog_audio.tcl:198 ../src/dialog_audio.tcl:213 -#: ../src/dialog_audio.tcl:232 ../src/dialog_audio.tcl:250 -#: ../src/dialog_audio.tcl:265 ../src/dialog_audio.tcl:280 #, fuzzy msgid "Channels:" msgstr "रद्द" -#: ../src/dialog_audio.tcl:179 ../src/dialog_midi.tcl:115 -#: ../src/dialog_midi.tcl:251 -msgid "Input device 2:" -msgstr "" - -#: ../src/dialog_audio.tcl:194 ../src/dialog_midi.tcl:127 -#: ../src/dialog_midi.tcl:263 -msgid "Input device 3:" -msgstr "" - -#: ../src/dialog_audio.tcl:209 ../src/dialog_midi.tcl:139 -#: ../src/dialog_midi.tcl:275 -msgid "Input device 4:" -msgstr "" - -#: ../src/dialog_audio.tcl:223 ../src/dialog_midi.tcl:150 -#: ../src/dialog_midi.tcl:286 -msgid "Output device 1:" -msgstr "" - -#: ../src/dialog_audio.tcl:226 -msgid "(same as input device) .............. " +msgid "Output Devices" msgstr "" -#: ../src/dialog_audio.tcl:246 ../src/dialog_midi.tcl:160 -#: ../src/dialog_midi.tcl:296 -msgid "Output device 2:" +msgid "(same as input device)..." msgstr "" -#: ../src/dialog_audio.tcl:261 ../src/dialog_midi.tcl:171 -#: ../src/dialog_midi.tcl:307 -msgid "Output device 3:" +msgid "Use Multiple Devices" msgstr "" -#: ../src/dialog_audio.tcl:276 ../src/dialog_midi.tcl:182 -#: ../src/dialog_midi.tcl:318 -msgid "Output device 4:" +msgid "Save All Settings" msgstr "" -#: ../src/dialog_audio.tcl:291 ../src/dialog_midi.tcl:195 -msgid "Use multiple devices" +msgid "WARNING: unknown graphme flags received in pdtk_canvas_dialog" msgstr "" -#: ../src/dialog_canvas.tcl:142 msgid "Canvas Properties" msgstr "" -#: ../src/dialog_canvas.tcl:146 #, fuzzy msgid "Scale" msgstr "सहेजें" -#: ../src/dialog_canvas.tcl:150 msgid "X units per pixel:" msgstr "" -#: ../src/dialog_canvas.tcl:155 msgid "Y units per pixel:" msgstr "" -#: ../src/dialog_canvas.tcl:159 msgid "Appearance on parent patch" msgstr "" -#: ../src/dialog_canvas.tcl:161 msgid "Graph-On-Parent" msgstr "" -#: ../src/dialog_canvas.tcl:165 msgid "Hide object name and arguments" msgstr "" -#: ../src/dialog_canvas.tcl:170 msgid "Range and size" msgstr "" -#: ../src/dialog_canvas.tcl:174 -msgid "X range, from" +msgid "X range: from" msgstr "" -#: ../src/dialog_canvas.tcl:176 ../src/dialog_canvas.tcl:191 msgid "to" msgstr "" -#: ../src/dialog_canvas.tcl:180 ../src/dialog_canvas.tcl:195 #, fuzzy msgid "Margin:" msgstr "मार्कर पंक्ति:" -#: ../src/dialog_canvas.tcl:189 -msgid "Y range, from" +msgid "Y range: from" msgstr "" -#: ../src/dialog_find.tcl:63 ../src/dialog_find.tcl:66 -#: ../src/dialog_find.tcl:79 ../src/dialog_find.tcl:80 -#: ../src/dialog_find.tcl:83 ../src/dialog_find.tcl:85 -#: ../src/dialog_find.tcl:87 ../src/dialog_find.tcl:101 -#: ../src/dialog_find.tcl:105 ../src/dialog_find.tcl:107 -#: ../src/pd_menus.tcl:45 -msgid "Find" -msgstr "ढूंढें" +msgid "Data Properties" +msgstr "" -#: ../src/dialog_find.tcl:70 ../src/dialog_find.tcl:73 -#: ../src/dialog_find.tcl:87 ../src/dialog_find.tcl:91 -#: ../src/dialog_find.tcl:93 -#, fuzzy -msgid "Search in" +#, tcl-format +msgid "Found '%1$s' in %2$s" +msgstr "" + +#, tcl-format +msgid "Couldn't find '%1$s' in %2$s" +msgstr "" + +#, fuzzy, tcl-format +msgid "Search in %s for:" msgstr "पाठ खोजें..." -#: ../src/dialog_find.tcl:72 ../src/dialog_find.tcl:75 -#: ../src/dialog_find.tcl:89 ../src/dialog_find.tcl:93 -#: ../src/dialog_find.tcl:95 -#, fuzzy -msgid "for:" -msgstr "पोर्टः" - -#: ../src/dialog_find.tcl:83 ../src/dialog_find.tcl:90 -#: ../src/dialog_find.tcl:104 ../src/dialog_find.tcl:108 -#: ../src/dialog_find.tcl:110 ../src/pd_menus.tcl:86 ../src/pd_menus.tcl:87 -#: ../src/pd_menus.tcl:132 ../src/pd_menus.tcl:133 ../src/pd_menus.tcl:259 -#: ../src/pd_menus.tcl:272 ../src/pd_menus.tcl:295 ../src/pd_menus.tcl:308 -#: ../src/pd_menus.tcl:332 ../src/pd_menus.tcl:345 ../src/pd_menus.tcl:354 -#: ../src/pd_menus.tcl:381 ../src/pd_menus.tcl:392 ../src/pd_menus.tcl:419 -#: ../src/pd_menus.tcl:431 ../src/pd_menus.tcl:458 -msgid "Close" -msgstr "बन्द करो" +#, tcl-format +msgid "Showed last '%1$s' in %2$s" +msgstr "" -#: ../src/dialog_find.tcl:83 ../src/dialog_find.tcl:97 -#: ../src/dialog_find.tcl:101 ../src/dialog_find.tcl:103 -msgid "Match whole word only" +#, tcl-format +msgid "Showing '%1$d' out of %2$d items in %3$s" msgstr "" -#: ../src/dialog_find.tcl:92 ../src/dialog_font.tcl:49 -#: ../src/dialog_font.tcl:50 ../src/pd-gui.tcl:280 ../src/pd-gui.tcl:283 -#: ../src/pd-gui.tcl:286 ../src/pd-gui.tcl:288 ../src/pd-gui.tcl:291 -#: ../src/pd_menus.tcl:212 ../src/pd_menus.tcl:258 ../src/pd_menus.tcl:285 -#: ../src/pdwindow.tcl:33 #, fuzzy msgid "Pd window" msgstr "भेजें विंडो" -#: ../src/dialog_font.tcl:45 -msgid "Font Properties" +msgid "Match whole word only" msgstr "" -#: ../src/dialog_font.tcl:46 ../src/dialog_font.tcl:54 -#: ../src/dialog_font.tcl:55 +msgid "Close" +msgstr "बन्द करो" + #, fuzzy, tcl-format msgid "%s Font" msgstr "फ़ॉन्टः" -#: ../src/dialog_font.tcl:61 ../src/dialog_font.tcl:96 -#: ../src/dialog_font.tcl:104 ../src/dialog_font.tcl:105 +#, fuzzy +msgid "Font" +msgstr "फ़ॉन्टः" + #, fuzzy msgid "Font Size" msgstr "फ़ॉन्टः" -#: ../src/dialog_font.tcl:89 ../src/dialog_font.tcl:108 -#: ../src/dialog_font.tcl:116 ../src/dialog_font.tcl:117 msgid "Stretch" msgstr "" -#: ../src/dialog_font.tcl:96 ../src/dialog_font.tcl:115 -#: ../src/dialog_font.tcl:123 ../src/dialog_font.tcl:124 msgid "X and Y" msgstr "" -#: ../src/dialog_font.tcl:98 ../src/dialog_font.tcl:117 -#: ../src/dialog_font.tcl:125 ../src/dialog_font.tcl:126 msgid "X only" msgstr "" -#: ../src/dialog_font.tcl:100 ../src/dialog_font.tcl:119 -#: ../src/dialog_font.tcl:127 ../src/dialog_font.tcl:128 msgid "Y only" msgstr "" -#: ../src/dialog_gatom.tcl:93 msgid "Atom Box Properties" msgstr "" -#: ../src/dialog_gatom.tcl:99 msgid "Width:" msgstr "" -#: ../src/dialog_gatom.tcl:103 #, fuzzy msgid "Limits" msgstr "उपयोक्ता सीमा" -#: ../src/dialog_gatom.tcl:107 msgid "Lower:" msgstr "" -#: ../src/dialog_gatom.tcl:112 ../src/dialog_gatom.tcl:113 #, fuzzy msgid "Upper:" msgstr "आपरेटर" -#: ../src/dialog_gatom.tcl:116 ../src/dialog_gatom.tcl:121 -#: ../src/dialog_iemgui.tcl:600 ../src/dialog_iemgui.tcl:652 -#: ../src/dialog_iemgui.tcl:657 msgid "Label" msgstr "" -#: ../src/dialog_gatom.tcl:124 ../src/dialog_gatom.tcl:129 #, fuzzy -msgid "Left " +msgid "Left" msgstr "बायाँ" -#: ../src/dialog_gatom.tcl:126 ../src/dialog_gatom.tcl:131 msgid "Right" msgstr "दाहिना" -#: ../src/dialog_gatom.tcl:128 ../src/dialog_gatom.tcl:133 msgid "Top" msgstr "ऊपर" -#: ../src/dialog_gatom.tcl:130 ../src/dialog_gatom.tcl:135 msgid "Bottom" msgstr "नीचे" -#: ../src/dialog_gatom.tcl:137 ../src/dialog_gatom.tcl:145 -#: ../src/dialog_iemgui.tcl:574 #, fuzzy msgid "Messages" msgstr "संदेश" -#: ../src/dialog_gatom.tcl:141 ../src/dialog_gatom.tcl:149 -#: ../src/dialog_iemgui.tcl:578 msgid "Send symbol:" msgstr "" -#: ../src/dialog_gatom.tcl:147 ../src/dialog_gatom.tcl:155 -#: ../src/dialog_iemgui.tcl:585 #, fuzzy msgid "Receive symbol:" msgstr "विंडो पायें" -#: ../src/dialog_iemgui.tcl:197 #, fuzzy msgid "Background color" msgstr "पृष्ठभूमि:" -#: ../src/dialog_iemgui.tcl:204 #, fuzzy msgid "Foreground color" msgstr "अग्रभूमि:" -#: ../src/dialog_iemgui.tcl:211 #, fuzzy msgid "Label color" msgstr "रंग चुनें" -#: ../src/dialog_iemgui.tcl:272 #, fuzzy msgid "Init" msgstr "निमंत्रित करें" -#: ../src/dialog_iemgui.tcl:275 ../src/dialog_iemgui.tcl:546 msgid "No init" msgstr "" -#: ../src/dialog_iemgui.tcl:287 ../src/dialog_iemgui.tcl:558 msgid "Jump on click" msgstr "" -#: ../src/dialog_iemgui.tcl:290 ../src/dialog_iemgui.tcl:561 msgid "Steady on click" msgstr "" -#: ../src/dialog_iemgui.tcl:498 +#, fuzzy +msgid "Bang" +msgstr "प्रतिबंध" + +msgid "Flash Time (msec)" +msgstr "" + +msgid "Intrrpt:" +msgstr "" + +msgid "Hold:" +msgstr "" + +#, fuzzy +msgid "Toggle" +msgstr "टोगो" + +msgid "Non Zero Value" +msgstr "" + +msgid "Value:" +msgstr "" + +#, fuzzy +msgid "Number2" +msgstr "$ संख्या" + +msgid "Width (digits):" +msgstr "" + +#, fuzzy +msgid "Height:" +msgstr "दाहिना" + +msgid "Output Range" +msgstr "" + +msgid "Log height:" +msgstr "" + +msgid "Vslider" +msgstr "" + +#, fuzzy +msgid "Hslider" +msgstr "छुपा हुआ" + +#, fuzzy +msgid "Vradio" +msgstr "संस्करण" + +msgid "Num cells:" +msgstr "" + +msgid "Hradio" +msgstr "" + +msgid "VU Meter" +msgstr "" + +#, fuzzy +msgid "Canvas" +msgstr "कनाडा" + +msgid "Visible Rectangle (pix)" +msgstr "" + #, tcl-format msgid "%s Properties" msgstr "" -#: ../src/dialog_iemgui.tcl:550 ../src/pd_menus.tcl:83 ../src/pd_menus.tcl:84 -#: ../src/pd_menus.tcl:129 ../src/pd_menus.tcl:130 ../src/pd_menus.tcl:260 -#: ../src/pd_menus.tcl:273 ../src/pd_menus.tcl:288 ../src/pd_menus.tcl:301 -#: ../src/pd_menus.tcl:325 ../src/pd_menus.tcl:338 ../src/pd_menus.tcl:355 -#: ../src/pd_menus.tcl:382 ../src/pd_menus.tcl:383 ../src/pd_menus.tcl:410 -#: ../src/pd_menus.tcl:422 ../src/pd_menus.tcl:449 -msgid "Save" -msgstr "सहेजें" +msgid "Parameters" +msgstr "" -#: ../src/dialog_iemgui.tcl:608 -msgid "X offset" +msgid "X offset:" msgstr "" -#: ../src/dialog_iemgui.tcl:611 ../src/dialog_iemgui.tcl:612 -msgid "Y offset" +msgid "Y offset:" msgstr "" -#: ../src/dialog_iemgui.tcl:642 ../src/dialog_iemgui.tcl:645 msgid "Colors" msgstr "रंग" -#: ../src/dialog_iemgui.tcl:648 ../src/dialog_iemgui.tcl:651 #, fuzzy msgid "Background" msgstr "पृष्ठभूमि:" -#: ../src/dialog_iemgui.tcl:650 ../src/dialog_iemgui.tcl:654 #, fuzzy msgid "Front" msgstr "फ़ॉन्टः" -#: ../src/dialog_iemgui.tcl:662 ../src/dialog_iemgui.tcl:668 msgid "Compose color" msgstr "" -#: ../src/dialog_iemgui.tcl:682 ../src/dialog_iemgui.tcl:688 #, fuzzy msgid "Test label" msgstr "सबको जांचें" -#: ../src/dialog_midi.tcl:85 -msgid "MIDI Settings" +#, fuzzy +msgid "Send a Pd message" +msgstr "संदेश" + +msgid "(use arrow keys for history)" msgstr "" -#: ../src/dialog_midi.tcl:220 -msgid "ALSA MIDI Settings" +msgid "MIDI Settings" msgstr "" -#: ../src/dialog_midi.tcl:331 -msgid "Use multiple ALSA devices" +msgid "ALSA MIDI Settings" msgstr "" -#: ../src/dialog_midi.tcl:337 msgid "In Ports:" msgstr "" -#: ../src/dialog_midi.tcl:340 msgid "Out Ports:" msgstr "" -#: ../src/g_editor.c:1663 -msgid "Discard changes to this window??" +msgid "Pd search path for objects, help, fonts, and other files" msgstr "" -#: ../src/g_editor.c:1668 -msgid "really quit?" +msgid "Use standard paths" msgstr "" -#: ../src/g_editor.c:1699 -#, fuzzy -msgid "Close this window??" -msgstr "इस tab/window बंद करें" +msgid "Verbose" +msgstr "" -#: ../src/pd-gui.tcl:185 ../src/pd-gui.tcl:195 ../src/pd-gui.tcl:203 -#: ../src/pd-gui.tcl:206 ../src/pd-gui.tcl:215 ../src/pd-gui.tcl:226 -msgid "Associated Files" +msgid "Pd Documents Directory" msgstr "" -#: ../src/pd-gui.tcl:186 ../src/pd-gui.tcl:196 ../src/pd-gui.tcl:204 -#: ../src/pd-gui.tcl:207 ../src/pd-gui.tcl:216 ../src/pd-gui.tcl:227 -#, fuzzy -msgid "Pd Files" -msgstr "फाइल" +msgid "Browse" +msgstr "ब्राउज़" -#: ../src/pd-gui.tcl:187 ../src/pd-gui.tcl:205 ../src/pd-gui.tcl:208 -#: ../src/pd-gui.tcl:228 -msgid "Max Patch Files" +msgid "Reset" msgstr "" -#: ../src/pd-gui.tcl:188 ../src/pd-gui.tcl:206 ../src/pd-gui.tcl:209 -#: ../src/pd-gui.tcl:229 -msgid "Max Text Files" +msgid "Disable" msgstr "" -#: ../src/pd-gui.tcl:197 ../src/pd-gui.tcl:217 -msgid "Max Patch Files (.pat)" +msgid "Externals Install Directory" msgstr "" -#: ../src/pd-gui.tcl:198 ../src/pd-gui.tcl:218 -msgid "Max Text Files (.mxt)" +#, fuzzy +msgid "Clear" +msgstr "सूची साफ करें" + +msgid "Choose Pd documents directory:" +msgstr "" + +msgid "Install externals to directory:" +msgstr "" + +msgid "Add a new path" +msgstr "" + +msgid "Add new library" +msgstr "" + +msgid "Edit library" +msgstr "" + +msgid "Pd libraries to load on startup" +msgstr "" + +msgid "Startup flags:" +msgstr "" + +msgid "Defeat real-time scheduling" +msgstr "" + +#, fuzzy +msgid "Help Browser" +msgstr "ब्राउज़..." + +msgid "(Tcl) MISSING CLOSE-BRACE '}': " +msgstr "" + +msgid "(Tcl) INVALID COMMAND NAME: " +msgstr "" + +msgid "(Tcl) UNHANDLED ERROR: " msgstr "" -#: ../src/pd-gui.tcl:270 ../src/pd-gui.tcl:290 #, tcl-format -msgid "WARNING: Font family '%s' not found, using default (%s)" +msgid "[deken]: installed version [%1$s] > %2$s...skipping!" msgstr "" -#: ../src/pd-gui.tcl:278 ../src/pd-gui.tcl:298 #, tcl-format -msgid "WARNING: Font weight '%s' not found, using default (%s)" +msgid "[deken]: installed version [%1$s] < %2$s...overwriting!" msgstr "" -#: ../src/pd-gui.tcl:303 ../src/pd-gui.tcl:323 #, tcl-format -msgid "ERROR: %s failed to find font size (%s) that fits into %sx%s!" +msgid "[deken]: installed version [%1$s] == %2$s...skipping!" msgstr "" -#: ../src/pd-gui.tcl:478 ../src/pd-gui.tcl:483 ../src/pd-gui.tcl:501 -msgid "ERROR: 'pd' never showed up, 'pd-gui' quitting!" +msgid "[deken]: " msgstr "" -#: ../src/pd_menucommands.tcl:19 -msgid "Untitled" +#, tcl-format +msgid "Successfully unzipped %1$s into %2$s." msgstr "" -#: ../src/pd_menucommands.tcl:78 ../src/pd_menucommands.tcl:79 -#: ../src/pd_menucommands.tcl:90 -#, fuzzy -msgid "Send Message..." -msgstr "संदेश" +msgid "[deken]: Unable to extract package automatically." +msgstr "" -#: ../src/pd_menucommands.tcl:82 ../src/pd_menucommands.tcl:83 -#: ../src/pd_menucommands.tcl:94 ../src/pd_menus.tcl:87 ../src/pd_menus.tcl:88 -#: ../src/pd_menus.tcl:133 ../src/pd_menus.tcl:134 ../src/pd_menus.tcl:147 -#: ../src/pd_menus.tcl:192 ../src/pd_menus.tcl:193 ../src/pd_menus.tcl:265 -#: ../src/pd_menus.tcl:278 ../src/pd_menus.tcl:292 ../src/pd_menus.tcl:305 -#: ../src/pd_menus.tcl:329 ../src/pd_menus.tcl:342 ../src/pd_menus.tcl:360 -#: ../src/pd_menus.tcl:387 ../src/pd_menus.tcl:414 ../src/pd_menus.tcl:426 -#: ../src/pd_menus.tcl:453 ../startup/object_db.tcl:123 -msgid "Message" -msgstr "संदेश" +msgid "Please perform the following steps manually:" +msgstr "" + +#, tcl-format +msgid "1. Unzip %s." +msgstr "" + +#, tcl-format +msgid "2. Copy the contents into %s." +msgstr "" + +#, tcl-format +msgid "[deken] uninstalling '%s'" +msgstr "" + +#, tcl-format +msgid "Uninstalling %1$s from %2$s failed!" +msgstr "" + +#, tcl-format +msgid "[deken] deken-plugin.tcl (Pd externals search) loaded from %s." +msgstr "" + +#, tcl-format +msgid "[deken] Platform detected: %s" +msgstr "" + +#, tcl-format +msgid "[deken] Platform re-detected: %s" +msgstr "" + +msgid "Show all" +msgstr "" -#: ../src/pd_menucommands.tcl:108 ../src/pd_menucommands.tcl:111 -#: ../src/pd_menus.tcl:112 ../src/pd_menus.tcl:113 ../src/pd_menus.tcl:117 -#: ../src/pd_menus.tcl:118 ../src/pd_menus.tcl:158 ../src/pd_menus.tcl:159 -#: ../src/pd_menus.tcl:163 ../src/pd_menus.tcl:164 #, fuzzy -msgid "Font" -msgstr "फ़ॉन्टः" +msgid "Search" +msgstr "पाठ खोजें..." + +msgid "To get a list of all available externals, try an empty search." +msgstr "" + +msgid "Find externals" +msgstr "" + +msgid "Only install externals uploaded by people you trust." +msgstr "" -#: ../src/pd_menucommands.tcl:123 ../src/pd_menucommands.tcl:126 -#: ../src/pd_menus.tcl:138 ../src/pd_menus.tcl:183 ../src/pd_menus.tcl:184 #, fuzzy msgid "Preferences" msgstr "प्राथमिकताएं..." -#: ../src/pd_menus.tcl:45 -#, fuzzy -msgid "Edit" -msgstr "संपादन (_E)" +msgid "Installation options:" +msgstr "" -#: ../src/pd_menus.tcl:45 -msgid "File" -msgstr "फाइल" +msgid "Try to remove libraries before (re)installing them?" +msgstr "" -#: ../src/pd_menus.tcl:45 ../src/pdtk_canvas.tcl:48 ../src/pdtk_canvas.tcl:110 -#: ../src/pdtk_canvas.tcl:113 -msgid "Help" -msgstr "मदद" +msgid "Show README of newly installed libraries (if present)?" +msgstr "" -#: ../src/pd_menus.tcl:45 -#, fuzzy -msgid "Media" -msgstr "मेसीडोनिया" +msgid "Should newly installed libraries be added to Pd's search path?" +msgstr "" -#: ../src/pd_menus.tcl:45 -msgid "Put" +msgid "Platform settings:" msgstr "" -#: ../src/pd_menus.tcl:45 -#, fuzzy -msgid "Window" -msgstr "विंडो (_W)" +#, tcl-format +msgid "Default platform: %s" +msgstr "" -#: ../src/pd_menus.tcl:81 ../src/pd_menus.tcl:82 ../src/pd_menus.tcl:127 -#: ../src/pd_menus.tcl:128 ../src/pd_menus.tcl:255 ../src/pd_menus.tcl:267 -#: ../src/pd_menus.tcl:285 ../src/pd_menus.tcl:298 ../src/pd_menus.tcl:322 -#: ../src/pd_menus.tcl:335 ../src/pd_menus.tcl:349 ../src/pd_menus.tcl:376 -#: ../src/pd_menus.tcl:380 ../src/pd_menus.tcl:407 ../src/pd_menus.tcl:419 -#: ../src/pd_menus.tcl:446 -msgid "New" -msgstr "नया" +msgid "User-defined platform:" +msgstr "" -#: ../src/pd_menus.tcl:82 ../src/pd_menus.tcl:83 ../src/pd_menus.tcl:128 -#: ../src/pd_menus.tcl:129 ../src/pd_menus.tcl:256 ../src/pd_menus.tcl:268 -#: ../src/pd_menus.tcl:286 ../src/pd_menus.tcl:299 ../src/pd_menus.tcl:323 -#: ../src/pd_menus.tcl:336 ../src/pd_menus.tcl:350 ../src/pd_menus.tcl:377 -#: ../src/pd_menus.tcl:381 ../src/pd_menus.tcl:408 ../src/pd_menus.tcl:420 -#: ../src/pd_menus.tcl:447 ../src/pdtk_canvas.tcl:46 -#: ../src/pdtk_canvas.tcl:108 ../src/pdtk_canvas.tcl:111 -#: ../src/pdtk_canvas.tcl:128 ../src/pdtk_canvas.tcl:130 -#: ../src/pdtk_canvas.tcl:131 ../src/pdtk_canvas.tcl:133 -msgid "Open" -msgstr "खोलें" +msgid "Hide foreign architectures?" +msgstr "" + +#, fuzzy, tcl-format +msgid "Deken %s Preferences" +msgstr "प्राथमिकताएं..." + +msgid "[deken]: Start searching for externals..." +msgstr "" + +#, tcl-format +msgid "[deken]: online? %s" +msgstr "" + +msgid "Are you online?" +msgstr "" + +msgid "Unable to perform search." +msgstr "" + +msgid "[deken]: No matching externals found." +msgstr "" + +msgid "Try using the full name e.g. 'freeverb'." +msgstr "" + +msgid "No matching externals found." +msgstr "" + +msgid "Please select a (writable) installation directory!" +msgstr "" + +#, tcl-format +msgid "Install %1$s to %2$s?" +msgstr "" + +#, tcl-format +msgid "" +"Commencing downloading of:\n" +"%1$s\n" +"Into %2$s..." +msgstr "" + +msgid "aborting.\n" +msgstr "" + +#, tcl-format +msgid "Unable to add %s to search paths" +msgstr "" + +#, tcl-format +msgid "Add %s to the Pd search paths?" +msgstr "" + +#, tcl-format +msgid "Added %s to search paths" +msgstr "" + +#, tcl-format +msgid "Unable to download from %1$s [%2$s]" +msgstr "" + +#, tcl-format +msgid "Unable to remove stray file %s" +msgstr "" + +#, tcl-format +msgid "Unable to rename downloaded file to %s" +msgstr "" + +#, fuzzy, tcl-format +msgid "searching for '%s'" +msgstr "पाठ खोजें..." + +#, tcl-format +msgid "Uploaded by %1$s @ %2$s" +msgstr "" + +msgid "Install package" +msgstr "" + +msgid "Open webpage" +msgstr "" + +msgid "_" +msgstr "" + +#, tcl-format +msgid "" +"Do you want Pd to create a documents directory for patches and external " +"libraries?\n" +"\n" +"Location: %s\n" +"\n" +"You can change or disable this later in the Path preferences." +msgstr "" + +#, tcl-format +msgid "" +"Pd documents directory cannot be found:\n" +"\n" +"%s\n" +"\n" +"Choose a new location?" +msgstr "" + +#, tcl-format +msgid "Couldn't create Pd documents directory: %s\n" +msgstr "" + +#, tcl-format +msgid "Couldn't create \"externals\" directory in: %s\n" +msgstr "" + +#, tcl-format +msgid "Couldn't create preferences \"%1$s\" in %2$s" +msgstr "" + +#, fuzzy +msgid "About Pd" +msgstr "के बारे में (_A)" + +msgid "Save" +msgstr "सहेजें" -#: ../src/pd_menus.tcl:84 ../src/pd_menus.tcl:85 ../src/pd_menus.tcl:130 -#: ../src/pd_menus.tcl:131 ../src/pd_menus.tcl:261 ../src/pd_menus.tcl:274 -#: ../src/pd_menus.tcl:289 ../src/pd_menus.tcl:302 ../src/pd_menus.tcl:326 -#: ../src/pd_menus.tcl:339 ../src/pd_menus.tcl:356 ../src/pd_menus.tcl:383 -#: ../src/pd_menus.tcl:384 ../src/pd_menus.tcl:411 ../src/pd_menus.tcl:423 -#: ../src/pd_menus.tcl:450 #, fuzzy msgid "Save As..." msgstr "इस रूप में सहेजें" -#: ../src/pd_menus.tcl:88 ../src/pd_menus.tcl:89 ../src/pd_menus.tcl:134 -#: ../src/pd_menus.tcl:135 ../src/pd_menus.tcl:267 ../src/pd_menus.tcl:280 -#: ../src/pd_menus.tcl:293 ../src/pd_menus.tcl:306 ../src/pd_menus.tcl:330 -#: ../src/pd_menus.tcl:343 ../src/pd_menus.tcl:362 ../src/pd_menus.tcl:388 -#: ../src/pd_menus.tcl:389 ../src/pd_menus.tcl:415 ../src/pd_menus.tcl:427 -#: ../src/pd_menus.tcl:454 #, fuzzy msgid "Print..." msgstr "संपादित करें (_E)..." -#: ../src/pd_menus.tcl:93 ../src/pd_menus.tcl:94 ../src/pd_menus.tcl:139 -#: ../src/pd_menus.tcl:140 -#, fuzzy -msgid "Undo" -msgstr "यूगांडा" - -#: ../src/pd_menus.tcl:95 ../src/pd_menus.tcl:96 ../src/pd_menus.tcl:141 -#: ../src/pd_menus.tcl:142 -#, fuzzy -msgid "Redo" -msgstr "लाल:" - -#: ../src/pd_menus.tcl:98 ../src/pd_menus.tcl:99 ../src/pd_menus.tcl:144 -#: ../src/pd_menus.tcl:145 -msgid "Cut" +msgid "Paste Replace" msgstr "" -#: ../src/pd_menus.tcl:104 ../src/pd_menus.tcl:105 ../src/pd_menus.tcl:150 -#: ../src/pd_menus.tcl:151 #, fuzzy msgid "Duplicate" msgstr "तारीख़" -#: ../src/pd_menus.tcl:106 ../src/pd_menus.tcl:107 ../src/pd_menus.tcl:152 -#: ../src/pd_menus.tcl:153 #, fuzzy -msgid "Select All" -msgstr "रंग चुनें" +msgid "Zoom In" +msgstr "नीचे" -#: ../src/pd_menus.tcl:110 ../src/pd_menus.tcl:111 ../src/pd_menus.tcl:115 -#: ../src/pd_menus.tcl:116 ../src/pd_menus.tcl:156 ../src/pd_menus.tcl:157 -#: ../src/pd_menus.tcl:161 ../src/pd_menus.tcl:162 #, fuzzy -msgid "Text Editor" -msgstr "पाठ रंग" +msgid "Zoom Out" +msgstr "नीचे" -#: ../src/pd_menus.tcl:120 ../src/pd_menus.tcl:121 ../src/pd_menus.tcl:166 -#: ../src/pd_menus.tcl:167 msgid "Tidy Up" msgstr "" -#: ../src/pd_menus.tcl:122 ../src/pd_menus.tcl:123 ../src/pd_menus.tcl:168 -#: ../src/pd_menus.tcl:169 -msgid "Toggle Console" +msgid "(Dis)Connect Selection" msgstr "" -#: ../src/pd_menus.tcl:124 ../src/pd_menus.tcl:125 ../src/pd_menus.tcl:170 -#: ../src/pd_menus.tcl:171 -#, fuzzy -msgid "Clear Console" -msgstr "सूची साफ करें" +msgid "Triggerize" +msgstr "" -#: ../src/pd_menus.tcl:128 ../src/pd_menus.tcl:129 ../src/pd_menus.tcl:174 -#: ../src/pd_menus.tcl:175 #, fuzzy msgid "Edit Mode" msgstr "मोड" -#: ../src/pd_menus.tcl:145 ../src/pd_menus.tcl:190 ../src/pd_menus.tcl:191 -msgid "Object" -msgstr "" +#, fuzzy +msgid "Undo" +msgstr "यूगांडा" -#: ../src/pd_menus.tcl:149 ../src/pd_menus.tcl:194 ../src/pd_menus.tcl:195 #, fuzzy -msgid "Number" -msgstr "$ संख्या" +msgid "Redo" +msgstr "लाल:" -#: ../src/pd_menus.tcl:151 ../src/pd_menus.tcl:196 ../src/pd_menus.tcl:197 -msgid "Symbol" +msgid "List of objects..." msgstr "" -#: ../src/pd_menus.tcl:153 ../src/pd_menus.tcl:198 ../src/pd_menus.tcl:199 -#, fuzzy -msgid "Comment" -msgstr "कमांड" - -#: ../src/pd_menus.tcl:156 ../src/pd_menus.tcl:201 ../src/pd_menus.tcl:202 -#, fuzzy -msgid "Bang" -msgstr "प्रतिबंध" +msgid "New" +msgstr "नया" -#: ../src/pd_menus.tcl:158 ../src/pd_menus.tcl:203 ../src/pd_menus.tcl:204 -#, fuzzy -msgid "Toggle" -msgstr "टोगो" +msgid "Open" +msgstr "खोलें" -#: ../src/pd_menus.tcl:160 ../src/pd_menus.tcl:205 ../src/pd_menus.tcl:206 #, fuzzy -msgid "Number2" -msgstr "$ संख्या" +msgid "Message..." +msgstr "संदेश" -#: ../src/pd_menus.tcl:162 ../src/pd_menus.tcl:207 ../src/pd_menus.tcl:208 -msgid "Vslider" +msgid "Cut" msgstr "" -#: ../src/pd_menus.tcl:164 ../src/pd_menus.tcl:209 ../src/pd_menus.tcl:210 #, fuzzy -msgid "Hslider" -msgstr "छुपा हुआ" +msgid "Select All" +msgstr "रंग चुनें" -#: ../src/pd_menus.tcl:166 ../src/pd_menus.tcl:211 ../src/pd_menus.tcl:212 #, fuzzy -msgid "Vradio" -msgstr "संस्करण" +msgid "Clear Console" +msgstr "सूची साफ करें" -#: ../src/pd_menus.tcl:168 ../src/pd_menus.tcl:213 ../src/pd_menus.tcl:214 -msgid "Hradio" +msgid "Object" msgstr "" -#: ../src/pd_menus.tcl:170 ../src/pd_menus.tcl:215 ../src/pd_menus.tcl:216 -msgid "VU Meter" +msgid "Message" +msgstr "संदेश" + +#, fuzzy +msgid "Number" +msgstr "$ संख्या" + +msgid "Symbol" msgstr "" -#: ../src/pd_menus.tcl:172 ../src/pd_menus.tcl:217 ../src/pd_menus.tcl:218 #, fuzzy -msgid "Canvas" -msgstr "कनाडा" +msgid "Comment" +msgstr "कमांड" -#: ../src/pd_menus.tcl:175 ../src/pd_menus.tcl:220 ../src/pd_menus.tcl:221 msgid "Graph" msgstr "ग्राफ" -#: ../src/pd_menus.tcl:176 ../src/pd_menus.tcl:221 ../src/pd_menus.tcl:222 -#, fuzzy -msgid "Array" -msgstr "अंडोरा" - -#: ../src/pd_menus.tcl:181 ../src/pd_menus.tcl:226 ../src/pd_menus.tcl:227 #, fuzzy msgid "Find..." msgstr "फाइल भेजें..." -#: ../src/pd_menus.tcl:183 ../src/pd_menus.tcl:228 ../src/pd_menus.tcl:229 msgid "Find Again" msgstr "" -#: ../src/pd_menus.tcl:185 ../src/pd_menus.tcl:230 ../src/pd_menus.tcl:231 msgid "Find Last Error" msgstr "" -#: ../src/pd_menus.tcl:191 ../src/pd_menus.tcl:236 ../src/pd_menus.tcl:237 msgid "DSP On" msgstr "" -#: ../src/pd_menus.tcl:193 ../src/pd_menus.tcl:238 ../src/pd_menus.tcl:239 #, fuzzy msgid "DSP Off" msgstr "बंद" -#: ../src/pd_menus.tcl:196 ../src/pd_menus.tcl:242 ../src/pd_menus.tcl:269 msgid "Test Audio and MIDI..." msgstr "" -#: ../src/pd_menus.tcl:198 ../src/pd_menus.tcl:244 ../src/pd_menus.tcl:271 #, fuzzy msgid "Load Meter" msgstr "लैग मीटर:" -#: ../src/pd_menus.tcl:205 ../src/pd_menus.tcl:251 ../src/pd_menus.tcl:278 +msgid "Audio Settings..." +msgstr "" + +msgid "MIDI Settings..." +msgstr "" + msgid "Minimize" msgstr "" -#: ../src/pd_menus.tcl:207 ../src/pd_menus.tcl:253 ../src/pd_menus.tcl:280 #, fuzzy msgid "Zoom" msgstr "नीचे" -#: ../src/pd_menus.tcl:210 ../src/pd_menus.tcl:256 ../src/pd_menus.tcl:283 +msgid "Bring All to Front" +msgstr "" + #, fuzzy -msgid "Parent Window" +msgid "Next Window" msgstr "भेजें विंडो" -#: ../src/pd_menus.tcl:216 ../src/pd_menus.tcl:262 ../src/pd_menus.tcl:289 -msgid "Bring All to Front" -msgstr "" +#, fuzzy +msgid "Previous Window" +msgstr "भेजें विंडो" -#: ../src/pd_menus.tcl:224 ../src/pd_menus.tcl:241 ../src/pd_menus.tcl:253 -#: ../src/pd_menus.tcl:270 ../src/pd_menus.tcl:297 ../src/pd_menus.tcl:335 -#: ../src/pd_menus.tcl:362 #, fuzzy -msgid "About Pd" -msgstr "के बारे में (_A)" +msgid "Parent Window" +msgstr "भेजें विंडो" -#: ../src/pd_menus.tcl:227 ../src/pd_menus.tcl:273 ../src/pd_menus.tcl:300 msgid "HTML Manual..." msgstr "" -#: ../src/pd_menus.tcl:229 ../src/pd_menus.tcl:275 ../src/pd_menus.tcl:302 #, fuzzy msgid "Browser..." msgstr "ब्राउज़..." -#: ../src/pd_menus.tcl:248 ../src/pd_menus.tcl:260 ../src/pd_menus.tcl:342 -#: ../src/pd_menus.tcl:369 -msgid "Preferences..." +msgid "puredata.info" +msgstr "" + +msgid "Report a bug" +msgstr "" + +#, fuzzy +msgid "Clear Menu" +msgstr "सूची साफ करें" + +msgid "" +"Delete all preferences?\n" +"(takes effect when Pd is restarted)" +msgstr "" + +msgid "Path..." +msgstr "" + +msgid "Startup..." +msgstr "" + +msgid "Audio..." +msgstr "" + +msgid "MIDI..." +msgstr "" + +#, fuzzy +msgid "Zoom New Windows" +msgstr "भेजें विंडो" + +#, fuzzy +msgid "Save All Preferences" msgstr "प्राथमिकताएं..." -#: ../src/pd_menus.tcl:257 ../src/pd_menus.tcl:270 ../src/pd_menus.tcl:352 -#: ../src/pd_menus.tcl:379 -msgid "Open Recent" +#, fuzzy +msgid "Save to..." +msgstr "इस रूप में सहेजें" + +msgid "Load from..." msgstr "" -#: ../src/pd_menus.tcl:263 -msgid "Audio Settings..." +msgid "Forget All..." msgstr "" -#: ../src/pd_menus.tcl:265 -msgid "MIDI Settings..." +msgid "Open Recent" msgstr "" -#: ../src/pd_menus.tcl:296 ../src/pd_menus.tcl:309 ../src/pd_menus.tcl:333 -#: ../src/pd_menus.tcl:346 ../src/pd_menus.tcl:393 ../src/pd_menus.tcl:420 -#: ../src/pd_menus.tcl:432 ../src/pd_menus.tcl:459 msgid "Quit" msgstr "बाहर" -#: ../src/pd_menus.tcl:304 ../src/pd_menus.tcl:331 -#, fuzzy -msgid "Clear Menu" -msgstr "सूची साफ करें" - -#: ../src/pdtk_canvas.tcl:44 ../src/pdtk_canvas.tcl:106 -#: ../src/pdtk_canvas.tcl:109 ../src/pdtk_canvas.tcl:123 -#: ../src/pdtk_canvas.tcl:125 ../src/pdtk_canvas.tcl:126 -#: ../src/pdtk_canvas.tcl:128 msgid "Properties" msgstr "" -#: ../src/pdwindow.tcl:43 +msgid "Audio on" +msgstr "" + +msgid "Audio off" +msgstr "" + +msgid "(Tcl) MISSING CLOSE-BRACKET ']': " +msgstr "" + +msgid "Tcl:" +msgstr "" + +msgid "Pd" +msgstr "" + #, fuzzy msgid "DSP" msgstr "बंद" -#: ../startup/object_db.tcl:113 -msgid "Signal" +msgid "Audio I/O error" msgstr "" -#: ../startup/object_db.tcl:114 -msgid "Generators" +msgid "Log:" msgstr "" -#: ../startup/object_db.tcl:115 -#, fuzzy -msgid "Filters" -msgstr "फाइल" +msgid "fatal" +msgstr "" -#: ../startup/object_db.tcl:116 ../startup/object_db.tcl:124 -msgid "Math" +msgid "error" msgstr "" -#: ../startup/object_db.tcl:117 ../startup/object_db.tcl:125 -msgid "I/O" +msgid "normal" msgstr "" -#: ../startup/object_db.tcl:118 ../startup/object_db.tcl:126 -msgid "Sampling" +msgid "debug" msgstr "" -#: ../startup/object_db.tcl:119 ../startup/object_db.tcl:128 -msgid "Routing" +msgid "all" msgstr "" -#: ../startup/object_db.tcl:120 ../startup/object_db.tcl:129 -msgid "Others" +msgid "New..." msgstr "" -#: ../startup/object_db.tcl:127 -msgid "GUI" +#, fuzzy +msgid "Edit..." +msgstr "संपादन (_E)" + +#, fuzzy +msgid "Delete" +msgstr "मिटाओ" + +#, tcl-format +msgid "Ignoring '%s': doesn't exist" msgstr "" + +#, tcl-format +msgid "Ignoring '%s': doesn't look like a Pd-file" +msgstr "" + +#, fuzzy +#~ msgid "for:" +#~ msgstr "पोर्टः" + +#~ msgid "Preferences..." +#~ msgstr "प्राथमिकताएं..." + +#, fuzzy +#~ msgid "Close this window??" +#~ msgstr "इस tab/window बंद करें" + +#, fuzzy +#~ msgid "Pd Files" +#~ msgstr "फाइल" + +#, fuzzy +#~ msgid "Filters" +#~ msgstr "फाइल" + +#, fuzzy +#~ msgid "Text Editor" +#~ msgstr "पाठ रंग" diff --git a/po/hu.po b/po/hu.po index 10562306e4..e9055bf6bf 100644 --- a/po/hu.po +++ b/po/hu.po @@ -6,890 +6,1202 @@ msgid "" msgstr "" "Project-Id-Version: Pure Data 0.43\n" "Report-Msgid-Bugs-To: pd-dev@iem.at\n" -"POT-Creation-Date: 2009-08-27 10:01-0400\n" +"POT-Creation-Date: 2017-07-06 18:10+0200\n" "PO-Revision-Date: 2010-01-29 21:09+0100\n" "Last-Translator: Andras Muranyi \n" "Language-Team: Hungarian \n" +"Language: hu\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: " +"Plural-Forms: \n" + +msgid "-------dimensions(digits)(pix):-------" +msgstr "" + +msgid "--------dimensions(pix)(pix):--------" +msgstr "" + +msgid "----------dimensions(pix):-----------" +msgstr "" + +msgid "--------flash-time(ms)(ms):---------" +msgstr "" + +msgid "-----------output-range:-----------" +msgstr "" + +msgid "------selectable_dimensions(pix):------" +msgstr "" + +msgid "------visible_rectangle(pix)(pix):------" +msgstr "" + +#, fuzzy +msgid "bottom:" +msgstr "Lent" + +#, fuzzy +msgid "height:" +msgstr "Jobb" + +msgid "hold:" +msgstr "" + +msgid "intrrpt:" +msgstr "" + +msgid "left:" +msgstr "" + +msgid "lin" +msgstr "" + +msgid "log" +msgstr "" + +msgid "log-height:" +msgstr "" + +msgid "max:" +msgstr "" + +msgid "min:" +msgstr "" + +#, fuzzy +msgid "right:" +msgstr "Jobb" + +#, fuzzy +msgid "size:" +msgstr "Méret:" + +msgid "top:" +msgstr "" + +msgid "value:" +msgstr "" + +#, fuzzy +msgid "width:" +msgstr "Szélesség:" + +#, tcl-format +msgid "Do you want to save the changes you made in '%s'?" +msgstr "El akarja menteni '%s' változásait?" + +#, tcl-format +msgid "Discard changes to '%s'?" +msgstr "Elveti '%s' változtatásait?" + +msgid "Undo clear" +msgstr "Mégsem töröl" + +msgid "Undo connect" +msgstr "Mégsem csatlakoztat" + +msgid "Undo cut" +msgstr "Mégsem vág ki" + +msgid "Undo disconnect" +msgstr "Mégsem törli a csatlakozást" msgid "Undo duplicate" msgstr "Mégsem duplikál" +msgid "Undo motion" +msgstr "Mégsem mozgat" + msgid "Undo paste" msgstr "Mégsem illeszt be" -msgid "Undo motion" -msgstr "Mégsem mozgat" +msgid "Undo typing" +msgstr "Mégsem ír" -msgid "Undo cut" +#, fuzzy +msgid "Redo clear" +msgstr "Mégsem töröl" + +#, fuzzy +msgid "Redo connect" +msgstr "Mégsem csatlakoztat" + +#, fuzzy +msgid "Redo cut" msgstr "Mégsem vág ki" -msgid "Undo disconnect" +#, fuzzy +msgid "Redo disconnect" msgstr "Mégsem törli a csatlakozást" -msgid "Undo connect" -msgstr "Mégsem csatlakoztat" +#, fuzzy +msgid "Redo duplicate" +msgstr "Mégsem duplikál" -msgid "Undo clear" -msgstr "Mégsem töröl" +#, fuzzy +msgid "Redo motion" +msgstr "Mégsem mozgat" -msgid "Undo typing" +#, fuzzy +msgid "Redo paste" +msgstr "Mégsem illeszt be" + +#, fuzzy +msgid "Redo typing" msgstr "Mégsem ír" -msgid "Discard changes to '%s'?" -msgstr "Elveti '%s' változtatásait?" +msgid "no Pd settings to clear" +msgstr "" -msgid "Do you want to save the changes you made in '%s'?" -msgstr "El akarja menteni '%s' változásait?" +msgid "removed .pdsettings file" +msgstr "" + +msgid "couldn't delete .pdsettings file" +msgstr "" + +msgid "failed to erase Pd settings" +msgstr "" + +#, fuzzy +msgid "erased Pd settings" +msgstr "Minden bellítást ment" + +msgid "no Pd settings to erase" +msgstr "" + +msgid "skipping loading preferences... Pd seems to have crashed on startup." +msgstr "" + +msgid "(re-save preferences to reinstate them)" +msgstr "" + +msgid "File" +msgstr "Fájl" + +#, fuzzy +msgid "Edit" +msgstr "Szerkeszt" + +msgid "Put" +msgstr "Új" + +msgid "Find" +msgstr "Keres" + +msgid "Media" +msgstr "Média" + +msgid "Window" +msgstr "Ablak" + +msgid "Help" +msgstr "Súgó" + +msgid "Show &Hidden Files and Directories" +msgstr "" -#: ../src/dialog_array.tcl:115 ../src/dialog_array.tcl:117 -#: ../src/pd_menus.tcl:100 ../src/pd_menus.tcl:101 ../src/pd_menus.tcl:146 -#: ../src/pd_menus.tcl:147 msgid "Copy" msgstr "Másol" -#: ../src/dialog_array.tcl:118 ../src/dialog_array.tcl:120 -#: ../src/pd_menus.tcl:102 ../src/pd_menus.tcl:103 ../src/pd_menus.tcl:148 -#: ../src/pd_menus.tcl:149 msgid "Paste" msgstr "Beilleszt" -#: ../src/dialog_array.tcl:264 ../src/dialog_array.tcl:266 msgid "Array Properties" msgstr "Array tulajdonságai" -#: ../src/dialog_array.tcl:270 ../src/dialog_array.tcl:272 +msgid "Array" +msgstr "Array" + msgid "Name:" msgstr "Név:" -#: ../src/dialog_array.tcl:276 ../src/dialog_array.tcl:278 -#: ../src/dialog_canvas.tcl:178 ../src/dialog_canvas.tcl:193 -#: ../src/dialog_iemgui.tcl:619 ../src/dialog_iemgui.tcl:621 msgid "Size:" msgstr "Méret:" -#: ../src/dialog_array.tcl:280 ../src/dialog_array.tcl:282 msgid "Save contents" msgstr "Tartalom mentése" -#: ../src/dialog_array.tcl:284 ../src/dialog_array.tcl:286 msgid "Draw as:" msgstr "Megjelenítés:" -#: ../src/dialog_array.tcl:287 ../src/dialog_array.tcl:289 -msgid "Points" -msgstr "Pontok" - -#: ../src/dialog_array.tcl:289 ../src/dialog_array.tcl:291 msgid "Polygon" msgstr "Sokszög" -#: ../src/dialog_array.tcl:291 ../src/dialog_array.tcl:293 +msgid "Points" +msgstr "Pontok" + msgid "Bezier curve" msgstr "Bezier görbe" -#: ../src/dialog_array.tcl:297 ../src/dialog_array.tcl:299 msgid "Put array into:" msgstr "Array helye:" -#: ../src/dialog_array.tcl:300 ../src/dialog_array.tcl:302 msgid "New graph" msgstr "Új graph" -#: ../src/dialog_array.tcl:302 ../src/dialog_array.tcl:304 msgid "Last graph" msgstr "Legutóbbi graph" -#: ../src/dialog_array.tcl:306 ../src/dialog_array.tcl:308 -msgid "Delete array" -msgstr "Array-t töröl" +msgid "Options" +msgstr "" -#: ../src/dialog_array.tcl:312 ../src/dialog_array.tcl:314 msgid "Open List View..." msgstr "Lista nézet megnyitása..." -#: ../src/dialog_array.tcl:319 ../src/dialog_array.tcl:321 -#: ../src/dialog_audio.tcl:136 ../src/dialog_canvas.tcl:205 -#: ../src/dialog_font.tcl:51 ../src/dialog_gatom.tcl:153 -#: ../src/dialog_gatom.tcl:161 ../src/dialog_iemgui.tcl:742 -#: ../src/dialog_iemgui.tcl:748 ../src/dialog_midi.tcl:91 -#: ../src/dialog_midi.tcl:226 +msgid "Delete array" +msgstr "Array-t töröl" + msgid "Cancel" msgstr "Mégsem" -#: ../src/dialog_array.tcl:321 ../src/dialog_array.tcl:323 -#: ../src/dialog_audio.tcl:138 ../src/dialog_canvas.tcl:207 -#: ../src/dialog_gatom.tcl:156 ../src/dialog_gatom.tcl:164 -#: ../src/dialog_iemgui.tcl:745 ../src/dialog_iemgui.tcl:751 -#: ../src/dialog_midi.tcl:93 ../src/dialog_midi.tcl:228 msgid "Apply" msgstr "Alkalmaz" -#: ../src/dialog_array.tcl:323 ../src/dialog_array.tcl:325 -#: ../src/dialog_audio.tcl:140 ../src/dialog_canvas.tcl:209 -#: ../src/dialog_font.tcl:53 ../src/dialog_font.tcl:92 -#: ../src/dialog_font.tcl:100 ../src/dialog_font.tcl:101 -#: ../src/dialog_gatom.tcl:159 ../src/dialog_gatom.tcl:167 -#: ../src/dialog_iemgui.tcl:748 ../src/dialog_iemgui.tcl:754 -#: ../src/dialog_midi.tcl:95 ../src/dialog_midi.tcl:230 msgid "OK" msgstr "OK" -#: ../src/dialog_audio.tcl:130 msgid "Audio Settings" msgstr "Hang beállítások" -#: ../src/dialog_audio.tcl:142 -msgid "Save All Settings" -msgstr "Minden bellítást ment" +#, fuzzy +msgid "Settings" +msgstr "MIDI beállítások" -#: ../src/dialog_audio.tcl:151 msgid "Sample rate:" msgstr "Mintavétel (Hz):" -#: ../src/dialog_audio.tcl:153 msgid "Delay (msec):" msgstr "Késés (ms):" -#: ../src/dialog_audio.tcl:158 +msgid "Block size:" +msgstr "" + msgid "Use callbacks" msgstr "Callback-ek használata" -#: ../src/dialog_audio.tcl:166 ../src/dialog_midi.tcl:105 -#: ../src/dialog_midi.tcl:241 -msgid "Input device 1:" -msgstr "1. bemeneti eszköz:" +#, fuzzy +msgid "Input Devices" +msgstr "Bemeneti eszköz:" -#: ../src/dialog_audio.tcl:169 ../src/dialog_audio.tcl:183 -#: ../src/dialog_audio.tcl:198 ../src/dialog_audio.tcl:213 -#: ../src/dialog_audio.tcl:232 ../src/dialog_audio.tcl:250 -#: ../src/dialog_audio.tcl:265 ../src/dialog_audio.tcl:280 msgid "Channels:" msgstr "Csatornák:" -#: ../src/dialog_audio.tcl:179 ../src/dialog_midi.tcl:115 -#: ../src/dialog_midi.tcl:251 -msgid "Input device 2:" -msgstr "2. bemeneti eszköz:" - -#: ../src/dialog_audio.tcl:194 ../src/dialog_midi.tcl:127 -#: ../src/dialog_midi.tcl:263 -msgid "Input device 3:" -msgstr "3. bemeneti eszköz:" +#, fuzzy +msgid "Output Devices" +msgstr "Kimeneti eszköz:" -#: ../src/dialog_audio.tcl:209 ../src/dialog_midi.tcl:139 -#: ../src/dialog_midi.tcl:275 -msgid "Input device 4:" -msgstr "4. bemeneti eszköz:" - -#: ../src/dialog_audio.tcl:223 ../src/dialog_midi.tcl:150 -#: ../src/dialog_midi.tcl:286 -msgid "Output device 1:" -msgstr "1. kimeneti eszköz:" - -#: ../src/dialog_audio.tcl:226 -msgid "(same as input device) .............. " +#, fuzzy +msgid "(same as input device)..." msgstr "(ugyanaz mint a bemeneti eszköz) .............. " -#: ../src/dialog_audio.tcl:246 ../src/dialog_midi.tcl:160 -#: ../src/dialog_midi.tcl:296 -msgid "Output device 2:" -msgstr "2. kimeneti eszköz:" - -#: ../src/dialog_audio.tcl:261 ../src/dialog_midi.tcl:171 -#: ../src/dialog_midi.tcl:307 -msgid "Output device 3:" -msgstr "3. kimeneti eszköz:" +#, fuzzy +msgid "Use Multiple Devices" +msgstr "Több eszköz használata" -#: ../src/dialog_audio.tcl:276 ../src/dialog_midi.tcl:182 -#: ../src/dialog_midi.tcl:318 -msgid "Output device 4:" -msgstr "4. kimeneti eszköz:" +msgid "Save All Settings" +msgstr "Minden bellítást ment" -#: ../src/dialog_audio.tcl:291 ../src/dialog_midi.tcl:195 -msgid "Use multiple devices" -msgstr "Több eszköz használata" +msgid "WARNING: unknown graphme flags received in pdtk_canvas_dialog" +msgstr "" -#: ../src/dialog_canvas.tcl:142 msgid "Canvas Properties" msgstr "Canvas tulajdonságai" -#: ../src/dialog_canvas.tcl:146 msgid "Scale" msgstr "Méretarány" -#: ../src/dialog_canvas.tcl:150 msgid "X units per pixel:" msgstr "X egység képpontonként:" -#: ../src/dialog_canvas.tcl:155 msgid "Y units per pixel:" msgstr "Y egység képpontonként:" -#: ../src/dialog_canvas.tcl:159 msgid "Appearance on parent patch" msgstr "Megjelenés a szülő patch-en" -#: ../src/dialog_canvas.tcl:161 msgid "Graph-On-Parent" msgstr "Megjelenítés a szülőn (GOP)" -#: ../src/dialog_canvas.tcl:165 msgid "Hide object name and arguments" msgstr "Elemnév és paraméterek elrejtése" -#: ../src/dialog_canvas.tcl:170 msgid "Range and size" msgstr "Tartomány és méret" -#: ../src/dialog_canvas.tcl:174 -msgid "X range, from" +#, fuzzy +msgid "X range: from" msgstr "X tartomány kezdete" -#: ../src/dialog_canvas.tcl:176 ../src/dialog_canvas.tcl:191 msgid "to" msgstr "vége" -#: ../src/dialog_canvas.tcl:180 ../src/dialog_canvas.tcl:195 msgid "Margin:" msgstr "Margó:" -#: ../src/dialog_canvas.tcl:189 -msgid "Y range, from" +#, fuzzy +msgid "Y range: from" msgstr "Y tartomány kezdete" -#: ../src/dialog_find.tcl:63 ../src/dialog_find.tcl:66 -#: ../src/dialog_find.tcl:79 ../src/dialog_find.tcl:80 -#: ../src/dialog_find.tcl:83 ../src/dialog_find.tcl:85 -#: ../src/dialog_find.tcl:87 ../src/dialog_find.tcl:101 -#: ../src/dialog_find.tcl:105 ../src/dialog_find.tcl:107 -#: ../src/pd_menus.tcl:45 -msgid "Find" -msgstr "Keres" +#, fuzzy +msgid "Data Properties" +msgstr "Canvas tulajdonságai" + +#, tcl-format +msgid "Found '%1$s' in %2$s" +msgstr "" + +#, tcl-format +msgid "Couldn't find '%1$s' in %2$s" +msgstr "" -#: ../src/dialog_find.tcl:70 ../src/dialog_find.tcl:73 -#: ../src/dialog_find.tcl:87 ../src/dialog_find.tcl:91 -#: ../src/dialog_find.tcl:93 -msgid "Search in" +#, fuzzy, tcl-format +msgid "Search in %s for:" msgstr "Keresés itt:" -#: ../src/dialog_find.tcl:72 ../src/dialog_find.tcl:75 -#: ../src/dialog_find.tcl:89 ../src/dialog_find.tcl:93 -#: ../src/dialog_find.tcl:95 -msgid "for:" -msgstr "erre:" - -#: ../src/dialog_find.tcl:83 ../src/dialog_find.tcl:90 -#: ../src/dialog_find.tcl:104 ../src/dialog_find.tcl:108 -#: ../src/dialog_find.tcl:110 ../src/pd_menus.tcl:86 ../src/pd_menus.tcl:87 -#: ../src/pd_menus.tcl:132 ../src/pd_menus.tcl:133 ../src/pd_menus.tcl:259 -#: ../src/pd_menus.tcl:272 ../src/pd_menus.tcl:295 ../src/pd_menus.tcl:308 -#: ../src/pd_menus.tcl:332 ../src/pd_menus.tcl:345 ../src/pd_menus.tcl:354 -#: ../src/pd_menus.tcl:381 ../src/pd_menus.tcl:392 ../src/pd_menus.tcl:419 -#: ../src/pd_menus.tcl:431 ../src/pd_menus.tcl:458 -msgid "Close" -msgstr "Bezár" +#, tcl-format +msgid "Showed last '%1$s' in %2$s" +msgstr "" -#: ../src/dialog_find.tcl:83 ../src/dialog_find.tcl:97 -#: ../src/dialog_find.tcl:101 ../src/dialog_find.tcl:103 -msgid "Match whole word only" -msgstr "Csak egész szavas egyezés" +#, tcl-format +msgid "Showing '%1$d' out of %2$d items in %3$s" +msgstr "" -#: ../src/dialog_find.tcl:92 ../src/dialog_font.tcl:49 -#: ../src/dialog_font.tcl:50 ../src/pd-gui.tcl:280 ../src/pd-gui.tcl:283 -#: ../src/pd-gui.tcl:286 ../src/pd-gui.tcl:288 ../src/pd-gui.tcl:291 -#: ../src/pd_menus.tcl:212 ../src/pd_menus.tcl:258 ../src/pd_menus.tcl:285 -#: ../src/pdwindow.tcl:33 msgid "Pd window" msgstr "Pd ablak" -#: ../src/dialog_font.tcl:45 -msgid "Font Properties" -msgstr "Betű tulajdonságai" +msgid "Match whole word only" +msgstr "Csak egész szavas egyezés" + +msgid "Close" +msgstr "Bezár" -#: ../src/dialog_font.tcl:46 ../src/dialog_font.tcl:54 -#: ../src/dialog_font.tcl:55 #, tcl-format msgid "%s Font" msgstr "%s betűkészlet" -#: ../src/dialog_font.tcl:61 ../src/dialog_font.tcl:96 -#: ../src/dialog_font.tcl:104 ../src/dialog_font.tcl:105 +msgid "Font" +msgstr "Betű" + msgid "Font Size" msgstr "Betűméret" -#: ../src/dialog_font.tcl:89 ../src/dialog_font.tcl:108 -#: ../src/dialog_font.tcl:116 ../src/dialog_font.tcl:117 msgid "Stretch" msgstr "Nyújtás" -#: ../src/dialog_font.tcl:96 ../src/dialog_font.tcl:115 -#: ../src/dialog_font.tcl:123 ../src/dialog_font.tcl:124 msgid "X and Y" msgstr "X és Y" -#: ../src/dialog_font.tcl:98 ../src/dialog_font.tcl:117 -#: ../src/dialog_font.tcl:125 ../src/dialog_font.tcl:126 msgid "X only" msgstr "csak X" -#: ../src/dialog_font.tcl:100 ../src/dialog_font.tcl:119 -#: ../src/dialog_font.tcl:127 ../src/dialog_font.tcl:128 msgid "Y only" msgstr "csak Y" -#: ../src/dialog_gatom.tcl:93 msgid "Atom Box Properties" msgstr "Atom Box tulajdonságai" -#: ../src/dialog_gatom.tcl:99 msgid "Width:" msgstr "Szélesség:" -#: ../src/dialog_gatom.tcl:103 msgid "Limits" msgstr "Korlátok" -#: ../src/dialog_gatom.tcl:107 msgid "Lower:" msgstr "Alsó:" -#: ../src/dialog_gatom.tcl:112 ../src/dialog_gatom.tcl:113 msgid "Upper:" msgstr "Felső:" -#: ../src/dialog_gatom.tcl:116 ../src/dialog_gatom.tcl:121 -#: ../src/dialog_iemgui.tcl:600 ../src/dialog_iemgui.tcl:652 -#: ../src/dialog_iemgui.tcl:657 msgid "Label" msgstr "Címke" -#: ../src/dialog_gatom.tcl:124 ../src/dialog_gatom.tcl:129 -msgid "Left " +#, fuzzy +msgid "Left" msgstr "Bal" -#: ../src/dialog_gatom.tcl:126 ../src/dialog_gatom.tcl:131 msgid "Right" msgstr "Jobb" -#: ../src/dialog_gatom.tcl:128 ../src/dialog_gatom.tcl:133 msgid "Top" msgstr "Fent" -#: ../src/dialog_gatom.tcl:130 ../src/dialog_gatom.tcl:135 msgid "Bottom" msgstr "Lent" -#: ../src/dialog_gatom.tcl:137 ../src/dialog_gatom.tcl:145 -#: ../src/dialog_iemgui.tcl:574 msgid "Messages" msgstr "Üzenetek" -#: ../src/dialog_gatom.tcl:141 ../src/dialog_gatom.tcl:149 -#: ../src/dialog_iemgui.tcl:578 msgid "Send symbol:" msgstr "Küldött symbol:" -#: ../src/dialog_gatom.tcl:147 ../src/dialog_gatom.tcl:155 -#: ../src/dialog_iemgui.tcl:585 msgid "Receive symbol:" msgstr "Fogadott symbol:" -#: ../src/dialog_iemgui.tcl:197 msgid "Background color" msgstr "Háttérszín" -#: ../src/dialog_iemgui.tcl:204 msgid "Foreground color" msgstr "Szín" -#: ../src/dialog_iemgui.tcl:211 msgid "Label color" msgstr "Címkeszín" -#: ../src/dialog_iemgui.tcl:272 msgid "Init" msgstr "Kezdőérték" -#: ../src/dialog_iemgui.tcl:275 ../src/dialog_iemgui.tcl:546 msgid "No init" msgstr "Nincs kezdőérték" -#: ../src/dialog_iemgui.tcl:287 ../src/dialog_iemgui.tcl:558 msgid "Jump on click" msgstr "Kattintásra ugorjon" -#: ../src/dialog_iemgui.tcl:290 ../src/dialog_iemgui.tcl:561 msgid "Steady on click" msgstr "Kattintásra várjon" -#: ../src/dialog_iemgui.tcl:498 +msgid "Bang" +msgstr "Bang" + +#, fuzzy +msgid "Flash Time (msec)" +msgstr "Késés (ms):" + +msgid "Intrrpt:" +msgstr "" + +msgid "Hold:" +msgstr "" + +msgid "Toggle" +msgstr "Toggle" + +msgid "Non Zero Value" +msgstr "" + +msgid "Value:" +msgstr "" + +msgid "Number2" +msgstr "Number2" + +msgid "Width (digits):" +msgstr "" + +#, fuzzy +msgid "Height:" +msgstr "Jobb" + +msgid "Output Range" +msgstr "" + +msgid "Log height:" +msgstr "" + +msgid "Vslider" +msgstr "Vslider" + +msgid "Hslider" +msgstr "Hslider" + +msgid "Vradio" +msgstr "Vradio" + +msgid "Num cells:" +msgstr "" + +msgid "Hradio" +msgstr "Hradio" + +msgid "VU Meter" +msgstr "VU meter" + +msgid "Canvas" +msgstr "Canvas" + +msgid "Visible Rectangle (pix)" +msgstr "" + #, tcl-format msgid "%s Properties" msgstr "%s tulajdonságai" -#: ../src/dialog_iemgui.tcl:550 ../src/pd_menus.tcl:83 ../src/pd_menus.tcl:84 -#: ../src/pd_menus.tcl:129 ../src/pd_menus.tcl:130 ../src/pd_menus.tcl:260 -#: ../src/pd_menus.tcl:273 ../src/pd_menus.tcl:288 ../src/pd_menus.tcl:301 -#: ../src/pd_menus.tcl:325 ../src/pd_menus.tcl:338 ../src/pd_menus.tcl:355 -#: ../src/pd_menus.tcl:382 ../src/pd_menus.tcl:383 ../src/pd_menus.tcl:410 -#: ../src/pd_menus.tcl:422 ../src/pd_menus.tcl:449 -msgid "Save" -msgstr "Ment" +msgid "Parameters" +msgstr "" -#: ../src/dialog_iemgui.tcl:608 -msgid "X offset" +#, fuzzy +msgid "X offset:" msgstr "X offszet" -#: ../src/dialog_iemgui.tcl:611 ../src/dialog_iemgui.tcl:612 -msgid "Y offset" +#, fuzzy +msgid "Y offset:" msgstr "Y offszet" -#: ../src/dialog_iemgui.tcl:642 ../src/dialog_iemgui.tcl:645 msgid "Colors" msgstr "Színek" -#: ../src/dialog_iemgui.tcl:648 ../src/dialog_iemgui.tcl:651 msgid "Background" msgstr "Háttér" -#: ../src/dialog_iemgui.tcl:650 ../src/dialog_iemgui.tcl:654 msgid "Front" msgstr "Előtér" -#: ../src/dialog_iemgui.tcl:662 ../src/dialog_iemgui.tcl:668 msgid "Compose color" msgstr "Színkeverés" -#: ../src/dialog_iemgui.tcl:682 ../src/dialog_iemgui.tcl:688 msgid "Test label" msgstr "Teszt címke" -#: ../src/dialog_midi.tcl:85 +#, fuzzy +msgid "Send a Pd message" +msgstr "Üzenet küldése..." + +msgid "(use arrow keys for history)" +msgstr "" + msgid "MIDI Settings" msgstr "MIDI beállítások" -#: ../src/dialog_midi.tcl:220 msgid "ALSA MIDI Settings" msgstr "ALSA MIDI beállítások" -#: ../src/dialog_midi.tcl:331 -msgid "Use multiple ALSA devices" -msgstr "Több ALSA eszköz használata" - -#: ../src/dialog_midi.tcl:337 msgid "In Ports:" msgstr "Bejövő portok:" -#: ../src/dialog_midi.tcl:340 msgid "Out Ports:" msgstr "Kimenő portok:" -#: ../src/g_editor.c:1663 -msgid "Discard changes to this window??" -msgstr "Elveti az ablak változtatásait?" +msgid "Pd search path for objects, help, fonts, and other files" +msgstr "" -#: ../src/g_editor.c:1668 -msgid "really quit?" -msgstr "tényleg kilép?" +msgid "Use standard paths" +msgstr "" -#: ../src/g_editor.c:1699 -msgid "Close this window??" -msgstr "Bezárja ezt az ablakot?" +msgid "Verbose" +msgstr "" -#: ../src/pd-gui.tcl:185 ../src/pd-gui.tcl:195 ../src/pd-gui.tcl:203 -#: ../src/pd-gui.tcl:206 ../src/pd-gui.tcl:215 ../src/pd-gui.tcl:226 -msgid "Associated Files" -msgstr "Kapcsolódó fájlok" +msgid "Pd Documents Directory" +msgstr "" -#: ../src/pd-gui.tcl:186 ../src/pd-gui.tcl:196 ../src/pd-gui.tcl:204 -#: ../src/pd-gui.tcl:207 ../src/pd-gui.tcl:216 ../src/pd-gui.tcl:227 -msgid "Pd Files" -msgstr "Pd fájlok" +msgid "Browse" +msgstr "" -#: ../src/pd-gui.tcl:187 ../src/pd-gui.tcl:205 ../src/pd-gui.tcl:208 -#: ../src/pd-gui.tcl:228 -msgid "Max Patch Files" -msgstr "Max patch fájlok" +msgid "Reset" +msgstr "" -#: ../src/pd-gui.tcl:188 ../src/pd-gui.tcl:206 ../src/pd-gui.tcl:209 -#: ../src/pd-gui.tcl:229 -msgid "Max Text Files" -msgstr "Max szövegfájlok" +msgid "Disable" +msgstr "" -#: ../src/pd-gui.tcl:197 ../src/pd-gui.tcl:217 -msgid "Max Patch Files (.pat)" -msgstr "Max patch fájlok (.pat)" +msgid "Externals Install Directory" +msgstr "" -#: ../src/pd-gui.tcl:198 ../src/pd-gui.tcl:218 -msgid "Max Text Files (.mxt)" -msgstr "Max szövegfájlok (.mxt)" +#, fuzzy +msgid "Clear" +msgstr "Menüt ürít" -#: ../src/pd-gui.tcl:270 ../src/pd-gui.tcl:290 -#, tcl-format -msgid "WARNING: Font family '%s' not found, using default (%s)" +msgid "Choose Pd documents directory:" msgstr "" -"FIGYELEM: Nem található '%s' betűcsalád, az alapbeállítás (%s) érvényes" -#: ../src/pd-gui.tcl:278 ../src/pd-gui.tcl:298 -#, tcl-format -msgid "WARNING: Font weight '%s' not found, using default (%s)" +msgid "Install externals to directory:" msgstr "" -"FIGYELEM: Nem található '%s' betűvastagság, az alapbeállítás (%s) érvényes" -#: ../src/pd-gui.tcl:303 ../src/pd-gui.tcl:323 -#, tcl-format -msgid "ERROR: %s failed to find font size (%s) that fits into %sx%s!" -msgstr "FIGYELEM: nem található %s betűkészlet %sx%s (%s) méretben!" +msgid "Add a new path" +msgstr "" -#: ../src/pd-gui.tcl:478 ../src/pd-gui.tcl:483 ../src/pd-gui.tcl:501 -msgid "ERROR: 'pd' never showed up, 'pd-gui' quitting!" -msgstr "HIBA: a 'pd' nem jelentkezett, a 'pd-gui' kilép!" +msgid "Add new library" +msgstr "" -#: ../src/pd_menucommands.tcl:19 -msgid "Untitled" -msgstr "Névtelen" +msgid "Edit library" +msgstr "" -#: ../src/pd_menucommands.tcl:78 ../src/pd_menucommands.tcl:79 -#: ../src/pd_menucommands.tcl:90 -msgid "Send Message..." -msgstr "Üzenet küldése..." +msgid "Pd libraries to load on startup" +msgstr "" -#: ../src/pd_menucommands.tcl:82 ../src/pd_menucommands.tcl:83 -#: ../src/pd_menucommands.tcl:94 ../src/pd_menus.tcl:87 ../src/pd_menus.tcl:88 -#: ../src/pd_menus.tcl:133 ../src/pd_menus.tcl:134 ../src/pd_menus.tcl:147 -#: ../src/pd_menus.tcl:192 ../src/pd_menus.tcl:193 ../src/pd_menus.tcl:265 -#: ../src/pd_menus.tcl:278 ../src/pd_menus.tcl:292 ../src/pd_menus.tcl:305 -#: ../src/pd_menus.tcl:329 ../src/pd_menus.tcl:342 ../src/pd_menus.tcl:360 -#: ../src/pd_menus.tcl:387 ../src/pd_menus.tcl:414 ../src/pd_menus.tcl:426 -#: ../src/pd_menus.tcl:453 ../startup/object_db.tcl:123 -msgid "Message" -msgstr "Üzenet" +msgid "Startup flags:" +msgstr "" -#: ../src/pd_menucommands.tcl:108 ../src/pd_menucommands.tcl:111 -#: ../src/pd_menus.tcl:112 ../src/pd_menus.tcl:113 ../src/pd_menus.tcl:117 -#: ../src/pd_menus.tcl:118 ../src/pd_menus.tcl:158 ../src/pd_menus.tcl:159 -#: ../src/pd_menus.tcl:163 ../src/pd_menus.tcl:164 -msgid "Font" -msgstr "Betű" +msgid "Defeat real-time scheduling" +msgstr "" + +#, fuzzy +msgid "Help Browser" +msgstr "Beépített böngésző..." + +msgid "(Tcl) MISSING CLOSE-BRACE '}': " +msgstr "" + +msgid "(Tcl) INVALID COMMAND NAME: " +msgstr "" + +msgid "(Tcl) UNHANDLED ERROR: " +msgstr "" + +#, tcl-format +msgid "[deken]: installed version [%1$s] > %2$s...skipping!" +msgstr "" + +#, tcl-format +msgid "[deken]: installed version [%1$s] < %2$s...overwriting!" +msgstr "" + +#, tcl-format +msgid "[deken]: installed version [%1$s] == %2$s...skipping!" +msgstr "" + +msgid "[deken]: " +msgstr "" + +#, tcl-format +msgid "Successfully unzipped %1$s into %2$s." +msgstr "" + +msgid "[deken]: Unable to extract package automatically." +msgstr "" + +msgid "Please perform the following steps manually:" +msgstr "" + +#, tcl-format +msgid "1. Unzip %s." +msgstr "" + +#, tcl-format +msgid "2. Copy the contents into %s." +msgstr "" + +#, tcl-format +msgid "[deken] uninstalling '%s'" +msgstr "" + +#, tcl-format +msgid "Uninstalling %1$s from %2$s failed!" +msgstr "" + +#, tcl-format +msgid "[deken] deken-plugin.tcl (Pd externals search) loaded from %s." +msgstr "" + +#, tcl-format +msgid "[deken] Platform detected: %s" +msgstr "" + +#, tcl-format +msgid "[deken] Platform re-detected: %s" +msgstr "" + +msgid "Show all" +msgstr "" + +#, fuzzy +msgid "Search" +msgstr "Keresés itt:" + +msgid "To get a list of all available externals, try an empty search." +msgstr "" + +msgid "Find externals" +msgstr "" + +msgid "Only install externals uploaded by people you trust." +msgstr "" -#: ../src/pd_menucommands.tcl:123 ../src/pd_menucommands.tcl:126 -#: ../src/pd_menus.tcl:138 ../src/pd_menus.tcl:183 ../src/pd_menus.tcl:184 msgid "Preferences" msgstr "Beállítások" -#: ../src/pd_menus.tcl:45 -msgid "Edit" -msgstr "Szerkeszt" +msgid "Installation options:" +msgstr "" -#: ../src/pd_menus.tcl:45 -msgid "File" -msgstr "Fájl" +msgid "Try to remove libraries before (re)installing them?" +msgstr "" -#: ../src/pd_menus.tcl:45 ../src/pdtk_canvas.tcl:48 ../src/pdtk_canvas.tcl:110 -#: ../src/pdtk_canvas.tcl:113 -msgid "Help" -msgstr "Súgó" +msgid "Show README of newly installed libraries (if present)?" +msgstr "" -#: ../src/pd_menus.tcl:45 -msgid "Media" -msgstr "Média" +msgid "Should newly installed libraries be added to Pd's search path?" +msgstr "" -#: ../src/pd_menus.tcl:45 -msgid "Put" -msgstr "Új" +msgid "Platform settings:" +msgstr "" -#: ../src/pd_menus.tcl:45 -msgid "Window" -msgstr "Ablak" +#, tcl-format +msgid "Default platform: %s" +msgstr "" -#: ../src/pd_menus.tcl:81 ../src/pd_menus.tcl:82 ../src/pd_menus.tcl:127 -#: ../src/pd_menus.tcl:128 ../src/pd_menus.tcl:255 ../src/pd_menus.tcl:267 -#: ../src/pd_menus.tcl:285 ../src/pd_menus.tcl:298 ../src/pd_menus.tcl:322 -#: ../src/pd_menus.tcl:335 ../src/pd_menus.tcl:349 ../src/pd_menus.tcl:376 -#: ../src/pd_menus.tcl:380 ../src/pd_menus.tcl:407 ../src/pd_menus.tcl:419 -#: ../src/pd_menus.tcl:446 -msgid "New" -msgstr "Új" +msgid "User-defined platform:" +msgstr "" -#: ../src/pd_menus.tcl:82 ../src/pd_menus.tcl:83 ../src/pd_menus.tcl:128 -#: ../src/pd_menus.tcl:129 ../src/pd_menus.tcl:256 ../src/pd_menus.tcl:268 -#: ../src/pd_menus.tcl:286 ../src/pd_menus.tcl:299 ../src/pd_menus.tcl:323 -#: ../src/pd_menus.tcl:336 ../src/pd_menus.tcl:350 ../src/pd_menus.tcl:377 -#: ../src/pd_menus.tcl:381 ../src/pd_menus.tcl:408 ../src/pd_menus.tcl:420 -#: ../src/pd_menus.tcl:447 ../src/pdtk_canvas.tcl:46 -#: ../src/pdtk_canvas.tcl:108 ../src/pdtk_canvas.tcl:111 -#: ../src/pdtk_canvas.tcl:128 ../src/pdtk_canvas.tcl:130 -#: ../src/pdtk_canvas.tcl:131 ../src/pdtk_canvas.tcl:133 -msgid "Open" -msgstr "Megnyit" +msgid "Hide foreign architectures?" +msgstr "" + +#, fuzzy, tcl-format +msgid "Deken %s Preferences" +msgstr "Beállítások" + +msgid "[deken]: Start searching for externals..." +msgstr "" + +#, tcl-format +msgid "[deken]: online? %s" +msgstr "" + +msgid "Are you online?" +msgstr "" + +msgid "Unable to perform search." +msgstr "" + +msgid "[deken]: No matching externals found." +msgstr "" + +msgid "Try using the full name e.g. 'freeverb'." +msgstr "" + +msgid "No matching externals found." +msgstr "" + +msgid "Please select a (writable) installation directory!" +msgstr "" + +#, tcl-format +msgid "Install %1$s to %2$s?" +msgstr "" + +#, tcl-format +msgid "" +"Commencing downloading of:\n" +"%1$s\n" +"Into %2$s..." +msgstr "" + +msgid "aborting.\n" +msgstr "" + +#, tcl-format +msgid "Unable to add %s to search paths" +msgstr "" + +#, tcl-format +msgid "Add %s to the Pd search paths?" +msgstr "" + +#, tcl-format +msgid "Added %s to search paths" +msgstr "" + +#, tcl-format +msgid "Unable to download from %1$s [%2$s]" +msgstr "" + +#, tcl-format +msgid "Unable to remove stray file %s" +msgstr "" + +#, tcl-format +msgid "Unable to rename downloaded file to %s" +msgstr "" + +#, fuzzy, tcl-format +msgid "searching for '%s'" +msgstr "Elveti '%s' változtatásait?" + +#, tcl-format +msgid "Uploaded by %1$s @ %2$s" +msgstr "" + +msgid "Install package" +msgstr "" + +#, fuzzy +msgid "Open webpage" +msgstr "Legutóbbi fájlok" + +msgid "_" +msgstr "" + +#, tcl-format +msgid "" +"Do you want Pd to create a documents directory for patches and external " +"libraries?\n" +"\n" +"Location: %s\n" +"\n" +"You can change or disable this later in the Path preferences." +msgstr "" + +#, tcl-format +msgid "" +"Pd documents directory cannot be found:\n" +"\n" +"%s\n" +"\n" +"Choose a new location?" +msgstr "" + +#, tcl-format +msgid "Couldn't create Pd documents directory: %s\n" +msgstr "" + +#, tcl-format +msgid "Couldn't create \"externals\" directory in: %s\n" +msgstr "" + +#, tcl-format +msgid "Couldn't create preferences \"%1$s\" in %2$s" +msgstr "" + +msgid "About Pd" +msgstr "A Pd-ről" + +msgid "Save" +msgstr "Ment" -#: ../src/pd_menus.tcl:84 ../src/pd_menus.tcl:85 ../src/pd_menus.tcl:130 -#: ../src/pd_menus.tcl:131 ../src/pd_menus.tcl:261 ../src/pd_menus.tcl:274 -#: ../src/pd_menus.tcl:289 ../src/pd_menus.tcl:302 ../src/pd_menus.tcl:326 -#: ../src/pd_menus.tcl:339 ../src/pd_menus.tcl:356 ../src/pd_menus.tcl:383 -#: ../src/pd_menus.tcl:384 ../src/pd_menus.tcl:411 ../src/pd_menus.tcl:423 -#: ../src/pd_menus.tcl:450 msgid "Save As..." msgstr "Ment új néven..." -#: ../src/pd_menus.tcl:88 ../src/pd_menus.tcl:89 ../src/pd_menus.tcl:134 -#: ../src/pd_menus.tcl:135 ../src/pd_menus.tcl:267 ../src/pd_menus.tcl:280 -#: ../src/pd_menus.tcl:293 ../src/pd_menus.tcl:306 ../src/pd_menus.tcl:330 -#: ../src/pd_menus.tcl:343 ../src/pd_menus.tcl:362 ../src/pd_menus.tcl:388 -#: ../src/pd_menus.tcl:389 ../src/pd_menus.tcl:415 ../src/pd_menus.tcl:427 -#: ../src/pd_menus.tcl:454 msgid "Print..." msgstr "Nyomtat..." -#: ../src/pd_menus.tcl:93 ../src/pd_menus.tcl:94 ../src/pd_menus.tcl:139 -#: ../src/pd_menus.tcl:140 -msgid "Undo" -msgstr "Mégsem!" - -#: ../src/pd_menus.tcl:95 ../src/pd_menus.tcl:96 ../src/pd_menus.tcl:141 -#: ../src/pd_menus.tcl:142 -msgid "Redo" -msgstr "Mégis!" - -#: ../src/pd_menus.tcl:98 ../src/pd_menus.tcl:99 ../src/pd_menus.tcl:144 -#: ../src/pd_menus.tcl:145 -msgid "Cut" -msgstr "Kivág" +msgid "Paste Replace" +msgstr "" -#: ../src/pd_menus.tcl:104 ../src/pd_menus.tcl:105 ../src/pd_menus.tcl:150 -#: ../src/pd_menus.tcl:151 msgid "Duplicate" msgstr "Duplikál" -#: ../src/pd_menus.tcl:106 ../src/pd_menus.tcl:107 ../src/pd_menus.tcl:152 -#: ../src/pd_menus.tcl:153 -msgid "Select All" -msgstr "Mindent kijelöl" +#, fuzzy +msgid "Zoom In" +msgstr "Nagyító" -#: ../src/pd_menus.tcl:110 ../src/pd_menus.tcl:111 ../src/pd_menus.tcl:115 -#: ../src/pd_menus.tcl:116 ../src/pd_menus.tcl:156 ../src/pd_menus.tcl:157 -#: ../src/pd_menus.tcl:161 ../src/pd_menus.tcl:162 -msgid "Text Editor" -msgstr "Szövegszerkesztő" +#, fuzzy +msgid "Zoom Out" +msgstr "Nagyító" -#: ../src/pd_menus.tcl:120 ../src/pd_menus.tcl:121 ../src/pd_menus.tcl:166 -#: ../src/pd_menus.tcl:167 msgid "Tidy Up" msgstr "Elrendez" -#: ../src/pd_menus.tcl:122 ../src/pd_menus.tcl:123 ../src/pd_menus.tcl:168 -#: ../src/pd_menus.tcl:169 -msgid "Toggle Console" -msgstr "Konzol ki/be" +msgid "(Dis)Connect Selection" +msgstr "" -#: ../src/pd_menus.tcl:124 ../src/pd_menus.tcl:125 ../src/pd_menus.tcl:170 -#: ../src/pd_menus.tcl:171 -msgid "Clear Console" -msgstr "Konzolt ürít" +msgid "Triggerize" +msgstr "" -#: ../src/pd_menus.tcl:128 ../src/pd_menus.tcl:129 ../src/pd_menus.tcl:174 -#: ../src/pd_menus.tcl:175 msgid "Edit Mode" msgstr "Szerkesztő üzemmód" -#: ../src/pd_menus.tcl:145 ../src/pd_menus.tcl:190 ../src/pd_menus.tcl:191 -msgid "Object" -msgstr "Object" +msgid "Undo" +msgstr "Mégsem!" -#: ../src/pd_menus.tcl:149 ../src/pd_menus.tcl:194 ../src/pd_menus.tcl:195 -msgid "Number" -msgstr "Number" +msgid "Redo" +msgstr "Mégis!" -#: ../src/pd_menus.tcl:151 ../src/pd_menus.tcl:196 ../src/pd_menus.tcl:197 -msgid "Symbol" -msgstr "Symbol" +msgid "List of objects..." +msgstr "" -#: ../src/pd_menus.tcl:153 ../src/pd_menus.tcl:198 ../src/pd_menus.tcl:199 -msgid "Comment" -msgstr "Comment" +msgid "New" +msgstr "Új" -#: ../src/pd_menus.tcl:156 ../src/pd_menus.tcl:201 ../src/pd_menus.tcl:202 -msgid "Bang" -msgstr "Bang" +msgid "Open" +msgstr "Megnyit" -#: ../src/pd_menus.tcl:158 ../src/pd_menus.tcl:203 ../src/pd_menus.tcl:204 -msgid "Toggle" -msgstr "Toggle" +#, fuzzy +msgid "Message..." +msgstr "Üzenet" -#: ../src/pd_menus.tcl:160 ../src/pd_menus.tcl:205 ../src/pd_menus.tcl:206 -msgid "Number2" -msgstr "Number2" +msgid "Cut" +msgstr "Kivág" -#: ../src/pd_menus.tcl:162 ../src/pd_menus.tcl:207 ../src/pd_menus.tcl:208 -msgid "Vslider" -msgstr "Vslider" +msgid "Select All" +msgstr "Mindent kijelöl" -#: ../src/pd_menus.tcl:164 ../src/pd_menus.tcl:209 ../src/pd_menus.tcl:210 -msgid "Hslider" -msgstr "Hslider" +msgid "Clear Console" +msgstr "Konzolt ürít" -#: ../src/pd_menus.tcl:166 ../src/pd_menus.tcl:211 ../src/pd_menus.tcl:212 -msgid "Vradio" -msgstr "Vradio" +msgid "Object" +msgstr "Object" -#: ../src/pd_menus.tcl:168 ../src/pd_menus.tcl:213 ../src/pd_menus.tcl:214 -msgid "Hradio" -msgstr "Hradio" +msgid "Message" +msgstr "Üzenet" -#: ../src/pd_menus.tcl:170 ../src/pd_menus.tcl:215 ../src/pd_menus.tcl:216 -msgid "VU Meter" -msgstr "VU meter" +msgid "Number" +msgstr "Number" -#: ../src/pd_menus.tcl:172 ../src/pd_menus.tcl:217 ../src/pd_menus.tcl:218 -msgid "Canvas" -msgstr "Canvas" +msgid "Symbol" +msgstr "Symbol" + +msgid "Comment" +msgstr "Comment" -#: ../src/pd_menus.tcl:175 ../src/pd_menus.tcl:220 ../src/pd_menus.tcl:221 msgid "Graph" msgstr "Graph" -#: ../src/pd_menus.tcl:176 ../src/pd_menus.tcl:221 ../src/pd_menus.tcl:222 -msgid "Array" -msgstr "Array" - -#: ../src/pd_menus.tcl:181 ../src/pd_menus.tcl:226 ../src/pd_menus.tcl:227 msgid "Find..." msgstr "Keres..." -#: ../src/pd_menus.tcl:183 ../src/pd_menus.tcl:228 ../src/pd_menus.tcl:229 msgid "Find Again" msgstr "Újra keres" -#: ../src/pd_menus.tcl:185 ../src/pd_menus.tcl:230 ../src/pd_menus.tcl:231 msgid "Find Last Error" msgstr "Legutóbbi hiba helye" -#: ../src/pd_menus.tcl:191 ../src/pd_menus.tcl:236 ../src/pd_menus.tcl:237 msgid "DSP On" msgstr "DSP be" -#: ../src/pd_menus.tcl:193 ../src/pd_menus.tcl:238 ../src/pd_menus.tcl:239 msgid "DSP Off" msgstr "DSP ki" -#: ../src/pd_menus.tcl:196 ../src/pd_menus.tcl:242 ../src/pd_menus.tcl:269 msgid "Test Audio and MIDI..." msgstr "Hang és MIDI tesztelése..." -#: ../src/pd_menus.tcl:198 ../src/pd_menus.tcl:244 ../src/pd_menus.tcl:271 msgid "Load Meter" msgstr "Terhelésmérő" -#: ../src/pd_menus.tcl:205 ../src/pd_menus.tcl:251 ../src/pd_menus.tcl:278 +msgid "Audio Settings..." +msgstr "Hang beállítások..." + +msgid "MIDI Settings..." +msgstr "MIDI beállítások..." + msgid "Minimize" msgstr "Kicsinyít" -#: ../src/pd_menus.tcl:207 ../src/pd_menus.tcl:253 ../src/pd_menus.tcl:280 msgid "Zoom" msgstr "Nagyító" -#: ../src/pd_menus.tcl:210 ../src/pd_menus.tcl:256 ../src/pd_menus.tcl:283 -msgid "Parent Window" -msgstr "Szülő ablak" - -#: ../src/pd_menus.tcl:216 ../src/pd_menus.tcl:262 ../src/pd_menus.tcl:289 msgid "Bring All to Front" msgstr "Mindent előtérbe hoz" -#: ../src/pd_menus.tcl:224 ../src/pd_menus.tcl:241 ../src/pd_menus.tcl:253 -#: ../src/pd_menus.tcl:270 ../src/pd_menus.tcl:297 ../src/pd_menus.tcl:335 -#: ../src/pd_menus.tcl:362 -msgid "About Pd" -msgstr "A Pd-ről" +#, fuzzy +msgid "Next Window" +msgstr "Szülő ablak" + +#, fuzzy +msgid "Previous Window" +msgstr "Szülő ablak" + +msgid "Parent Window" +msgstr "Szülő ablak" -#: ../src/pd_menus.tcl:227 ../src/pd_menus.tcl:273 ../src/pd_menus.tcl:300 msgid "HTML Manual..." msgstr "HTML kézikönyv..." -#: ../src/pd_menus.tcl:229 ../src/pd_menus.tcl:275 ../src/pd_menus.tcl:302 msgid "Browser..." msgstr "Beépített böngésző..." -#: ../src/pd_menus.tcl:248 ../src/pd_menus.tcl:260 ../src/pd_menus.tcl:342 -#: ../src/pd_menus.tcl:369 -msgid "Preferences..." -msgstr "Beállítások..." +msgid "puredata.info" +msgstr "" -#: ../src/pd_menus.tcl:257 ../src/pd_menus.tcl:270 ../src/pd_menus.tcl:352 -#: ../src/pd_menus.tcl:379 -msgid "Open Recent" -msgstr "Legutóbbi fájlok" +msgid "Report a bug" +msgstr "" -#: ../src/pd_menus.tcl:263 -msgid "Audio Settings..." +msgid "Clear Menu" +msgstr "Menüt ürít" + +msgid "" +"Delete all preferences?\n" +"(takes effect when Pd is restarted)" +msgstr "" + +msgid "Path..." +msgstr "" + +msgid "Startup..." +msgstr "" + +#, fuzzy +msgid "Audio..." msgstr "Hang beállítások..." -#: ../src/pd_menus.tcl:265 -msgid "MIDI Settings..." +#, fuzzy +msgid "MIDI..." msgstr "MIDI beállítások..." -#: ../src/pd_menus.tcl:296 ../src/pd_menus.tcl:309 ../src/pd_menus.tcl:333 -#: ../src/pd_menus.tcl:346 ../src/pd_menus.tcl:393 ../src/pd_menus.tcl:420 -#: ../src/pd_menus.tcl:432 ../src/pd_menus.tcl:459 +#, fuzzy +msgid "Zoom New Windows" +msgstr "Szülő ablak" + +#, fuzzy +msgid "Save All Preferences" +msgstr "Beállítások" + +#, fuzzy +msgid "Save to..." +msgstr "Ment új néven..." + +msgid "Load from..." +msgstr "" + +msgid "Forget All..." +msgstr "" + +msgid "Open Recent" +msgstr "Legutóbbi fájlok" + msgid "Quit" msgstr "Kilép" -#: ../src/pd_menus.tcl:304 ../src/pd_menus.tcl:331 -msgid "Clear Menu" -msgstr "Menüt ürít" - -#: ../src/pdtk_canvas.tcl:44 ../src/pdtk_canvas.tcl:106 -#: ../src/pdtk_canvas.tcl:109 ../src/pdtk_canvas.tcl:123 -#: ../src/pdtk_canvas.tcl:125 ../src/pdtk_canvas.tcl:126 -#: ../src/pdtk_canvas.tcl:128 msgid "Properties" msgstr "Tulajdonságok" -#: ../src/pdwindow.tcl:43 +#, fuzzy +msgid "Audio on" +msgstr "Hang beállítások" + +msgid "Audio off" +msgstr "" + +msgid "(Tcl) MISSING CLOSE-BRACKET ']': " +msgstr "" + +msgid "Tcl:" +msgstr "" + +msgid "Pd" +msgstr "" + msgid "DSP" msgstr "DSP" -#: ../startup/object_db.tcl:113 -msgid "Signal" -msgstr "Jel" +msgid "Audio I/O error" +msgstr "" -#: ../startup/object_db.tcl:114 -msgid "Generators" -msgstr "Generátorok" +msgid "Log:" +msgstr "" -#: ../startup/object_db.tcl:115 -msgid "Filters" -msgstr "Szűrők" +msgid "fatal" +msgstr "" -#: ../startup/object_db.tcl:116 ../startup/object_db.tcl:124 -msgid "Math" -msgstr "Számítások" +msgid "error" +msgstr "" -#: ../startup/object_db.tcl:117 ../startup/object_db.tcl:125 -msgid "I/O" -msgstr "I/O" +msgid "normal" +msgstr "" -#: ../startup/object_db.tcl:118 ../startup/object_db.tcl:126 -msgid "Sampling" -msgstr "Mintavételezés" +msgid "debug" +msgstr "" -#: ../startup/object_db.tcl:119 ../startup/object_db.tcl:128 -msgid "Routing" +msgid "all" msgstr "" -#: ../startup/object_db.tcl:120 ../startup/object_db.tcl:129 -msgid "Others" -msgstr "Egyéb" +msgid "New..." +msgstr "" + +#, fuzzy +msgid "Edit..." +msgstr "Szerkeszt" + +#, fuzzy +msgid "Delete" +msgstr "Array-t töröl" + +#, tcl-format +msgid "Ignoring '%s': doesn't exist" +msgstr "" + +#, tcl-format +msgid "Ignoring '%s': doesn't look like a Pd-file" +msgstr "" + +#~ msgid "for:" +#~ msgstr "erre:" + +#~ msgid "Filters" +#~ msgstr "Szűrők" + +#~ msgid "Input device 3:" +#~ msgstr "3. bemeneti eszköz:" + +#~ msgid "Sampling" +#~ msgstr "Mintavételezés" + +#~ msgid "Max Patch Files" +#~ msgstr "Max patch fájlok" + +#~ msgid "Untitled" +#~ msgstr "Névtelen" + +#~ msgid "Max Text Files (.mxt)" +#~ msgstr "Max szövegfájlok (.mxt)" + +#~ msgid "Pd Files" +#~ msgstr "Pd fájlok" + +#~ msgid "GUI" +#~ msgstr "Kezelőfelület" + +#~ msgid "ERROR: 'pd' never showed up, 'pd-gui' quitting!" +#~ msgstr "HIBA: a 'pd' nem jelentkezett, a 'pd-gui' kilép!" + +#~ msgid "Font Properties" +#~ msgstr "Betű tulajdonságai" -#: ../startup/object_db.tcl:127 -msgid "GUI" -msgstr "Kezelőfelület" +#~ msgid "Output device 3:" +#~ msgstr "3. kimeneti eszköz:" + +#~ msgid "Input device 2:" +#~ msgstr "2. bemeneti eszköz:" + +#~ msgid "Max Text Files" +#~ msgstr "Max szövegfájlok" + +#~ msgid "Signal" +#~ msgstr "Jel" + +#~ msgid "Others" +#~ msgstr "Egyéb" + +#~ msgid "really quit?" +#~ msgstr "tényleg kilép?" #~ msgid "Patch Font" #~ msgstr "Patch betűkészlet" - +#~ msgid "Close this window??" +#~ msgstr "Bezárja ezt az ablakot?" + +#~ msgid "Toggle Console" +#~ msgstr "Konzol ki/be" + +#~ msgid "Generators" +#~ msgstr "Generátorok" + +#~ msgid "ERROR: %s failed to find font size (%s) that fits into %sx%s!" +#~ msgstr "FIGYELEM: nem található %s betűkészlet %sx%s (%s) méretben!" + +#~ msgid "Math" +#~ msgstr "Számítások" + +#~ msgid "Output device 2:" +#~ msgstr "2. kimeneti eszköz:" + +#~ msgid "Associated Files" +#~ msgstr "Kapcsolódó fájlok" + +#~ msgid "Preferences..." +#~ msgstr "Beállítások..." + +#~ msgid "WARNING: Font family '%s' not found, using default (%s)" +#~ msgstr "" +#~ "FIGYELEM: Nem található '%s' betűcsalád, az alapbeállítás (%s) érvényes" + +#~ msgid "I/O" +#~ msgstr "I/O" + +#~ msgid "Max Patch Files (.pat)" +#~ msgstr "Max patch fájlok (.pat)" + +#~ msgid "Input device 4:" +#~ msgstr "4. bemeneti eszköz:" + +#~ msgid "WARNING: Font weight '%s' not found, using default (%s)" +#~ msgstr "" +#~ "FIGYELEM: Nem található '%s' betűvastagság, az alapbeállítás (%s) érvényes" + +#~ msgid "Discard changes to this window??" +#~ msgstr "Elveti az ablak változtatásait?" + +#~ msgid "Text Editor" +#~ msgstr "Szövegszerkesztő" + +#~ msgid "Use multiple ALSA devices" +#~ msgstr "Több ALSA eszköz használata" + +#~ msgid "Output device 4:" +#~ msgstr "4. kimeneti eszköz:" diff --git a/po/it.po b/po/it.po index eea27597c1..2ad004f656 100644 --- a/po/it.po +++ b/po/it.po @@ -6,888 +6,1192 @@ msgid "" msgstr "" "Project-Id-Version: Pure Data 0.43\n" "Report-Msgid-Bugs-To: pd-dev@iem.at\n" -"POT-Creation-Date: 2009-08-27 10:01-0400\n" +"POT-Creation-Date: 2017-07-06 18:10+0200\n" "PO-Revision-Date: 2009-10-27 21:07+0100\n" "Last-Translator: Lorenzo Sutton (lorenzosu) \n" "Language-Team: American English <>\n" +"Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Lokalize 1.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +msgid "-------dimensions(digits)(pix):-------" +msgstr "" + +msgid "--------dimensions(pix)(pix):--------" +msgstr "" + +msgid "----------dimensions(pix):-----------" +msgstr "" + +msgid "--------flash-time(ms)(ms):---------" +msgstr "" + +msgid "-----------output-range:-----------" +msgstr "" + +msgid "------selectable_dimensions(pix):------" +msgstr "" + +msgid "------visible_rectangle(pix)(pix):------" +msgstr "" + +#, fuzzy +msgid "bottom:" +msgstr "Sotto" + +#, fuzzy +msgid "height:" +msgstr "Destra" + +msgid "hold:" +msgstr "" + +msgid "intrrpt:" +msgstr "" + +msgid "left:" +msgstr "" + +msgid "lin" +msgstr "" + +msgid "log" +msgstr "" + +msgid "log-height:" +msgstr "" + +msgid "max:" +msgstr "" + +msgid "min:" +msgstr "" + +#, fuzzy +msgid "right:" +msgstr "Destra" + +#, fuzzy +msgid "size:" +msgstr "Dimensione:" + +msgid "top:" +msgstr "" + +msgid "value:" +msgstr "" + +#, fuzzy +msgid "width:" +msgstr "Larghezza:" + +#, tcl-format +msgid "Do you want to save the changes you made in '%s'?" +msgstr "Salvare le modifiche apportate a '%s'?" + +#, tcl-format +msgid "Discard changes to '%s'?" +msgstr "Cestinare le modifiche apportate a '%s'?" + +msgid "Undo clear" +msgstr "Annulla pulisci" + +msgid "Undo connect" +msgstr "Annulla connetti" + +msgid "Undo cut" +msgstr "Annulla taglia" + +msgid "Undo disconnect" +msgstr "Annulla disconnetti" + msgid "Undo duplicate" msgstr "Annulla duplica" +msgid "Undo motion" +msgstr "Annulla spostamento " + msgid "Undo paste" msgstr "Annulla incolla" -msgid "Undo motion" -msgstr "Annulla spostamento " +msgid "Undo typing" +msgstr "Annulla inserimento" -msgid "Undo cut" +#, fuzzy +msgid "Redo clear" +msgstr "Annulla pulisci" + +#, fuzzy +msgid "Redo connect" +msgstr "Annulla connetti" + +#, fuzzy +msgid "Redo cut" msgstr "Annulla taglia" -msgid "Undo disconnect" +#, fuzzy +msgid "Redo disconnect" msgstr "Annulla disconnetti" -msgid "Undo connect" -msgstr "Annulla connetti" +#, fuzzy +msgid "Redo duplicate" +msgstr "Annulla duplica" -msgid "Undo clear" -msgstr "Annulla pulisci" +#, fuzzy +msgid "Redo motion" +msgstr "Annulla spostamento " -msgid "Undo typing" +#, fuzzy +msgid "Redo paste" +msgstr "Annulla incolla" + +#, fuzzy +msgid "Redo typing" msgstr "Annulla inserimento" -msgid "Discard changes to '%s'?" -msgstr "Cestinare le modifiche apportate a '%s'?" +msgid "no Pd settings to clear" +msgstr "" -msgid "Do you want to save the changes you made in '%s'?" -msgstr "Salvare le modifiche apportate a '%s'?" +msgid "removed .pdsettings file" +msgstr "" + +msgid "couldn't delete .pdsettings file" +msgstr "" + +msgid "failed to erase Pd settings" +msgstr "" + +#, fuzzy +msgid "erased Pd settings" +msgstr "Salva tutti i settaggi" + +msgid "no Pd settings to erase" +msgstr "" + +msgid "skipping loading preferences... Pd seems to have crashed on startup." +msgstr "" + +msgid "(re-save preferences to reinstate them)" +msgstr "" + +msgid "File" +msgstr "File" + +#, fuzzy +msgid "Edit" +msgstr "Modifica" + +msgid "Put" +msgstr "Inserisci" + +msgid "Find" +msgstr "Trova" + +msgid "Media" +msgstr "Media" + +msgid "Window" +msgstr "Finestra" + +msgid "Help" +msgstr "Aiuto" + +msgid "Show &Hidden Files and Directories" +msgstr "" -#: ../src/dialog_array.tcl:115 ../src/dialog_array.tcl:117 -#: ../src/pd_menus.tcl:100 ../src/pd_menus.tcl:101 ../src/pd_menus.tcl:146 -#: ../src/pd_menus.tcl:147 msgid "Copy" msgstr "Copia" -#: ../src/dialog_array.tcl:118 ../src/dialog_array.tcl:120 -#: ../src/pd_menus.tcl:102 ../src/pd_menus.tcl:103 ../src/pd_menus.tcl:148 -#: ../src/pd_menus.tcl:149 msgid "Paste" msgstr "Incolla" -#: ../src/dialog_array.tcl:264 ../src/dialog_array.tcl:266 msgid "Array Properties" msgstr "Proprietà Array" -#: ../src/dialog_array.tcl:270 ../src/dialog_array.tcl:272 +msgid "Array" +msgstr "Array" + msgid "Name:" msgstr "Nome:" -#: ../src/dialog_array.tcl:276 ../src/dialog_array.tcl:278 -#: ../src/dialog_canvas.tcl:178 ../src/dialog_canvas.tcl:193 -#: ../src/dialog_iemgui.tcl:619 ../src/dialog_iemgui.tcl:621 msgid "Size:" msgstr "Dimensione:" -#: ../src/dialog_array.tcl:280 ../src/dialog_array.tcl:282 msgid "Save contents" msgstr "Salva contenuto" -#: ../src/dialog_array.tcl:284 ../src/dialog_array.tcl:286 msgid "Draw as:" msgstr "Disegna come:" -#: ../src/dialog_array.tcl:287 ../src/dialog_array.tcl:289 -msgid "Points" -msgstr "Punti" - -#: ../src/dialog_array.tcl:289 ../src/dialog_array.tcl:291 msgid "Polygon" msgstr "Poligono" -#: ../src/dialog_array.tcl:291 ../src/dialog_array.tcl:293 +msgid "Points" +msgstr "Punti" + msgid "Bezier curve" msgstr "Curva bezier" -#: ../src/dialog_array.tcl:297 ../src/dialog_array.tcl:299 msgid "Put array into:" msgstr "Matty l'array in:" -#: ../src/dialog_array.tcl:300 ../src/dialog_array.tcl:302 msgid "New graph" msgstr "Nuovo grafico" -#: ../src/dialog_array.tcl:302 ../src/dialog_array.tcl:304 msgid "Last graph" msgstr "Ultimo grafico" -#: ../src/dialog_array.tcl:306 ../src/dialog_array.tcl:308 -msgid "Delete array" -msgstr "Cancella array" +msgid "Options" +msgstr "" -#: ../src/dialog_array.tcl:312 ../src/dialog_array.tcl:314 msgid "Open List View..." msgstr "Apri visualizzazione lista..." -#: ../src/dialog_array.tcl:319 ../src/dialog_array.tcl:321 -#: ../src/dialog_audio.tcl:136 ../src/dialog_canvas.tcl:205 -#: ../src/dialog_font.tcl:51 ../src/dialog_gatom.tcl:153 -#: ../src/dialog_gatom.tcl:161 ../src/dialog_iemgui.tcl:742 -#: ../src/dialog_iemgui.tcl:748 ../src/dialog_midi.tcl:91 -#: ../src/dialog_midi.tcl:226 +msgid "Delete array" +msgstr "Cancella array" + msgid "Cancel" msgstr "Annulla" -#: ../src/dialog_array.tcl:321 ../src/dialog_array.tcl:323 -#: ../src/dialog_audio.tcl:138 ../src/dialog_canvas.tcl:207 -#: ../src/dialog_gatom.tcl:156 ../src/dialog_gatom.tcl:164 -#: ../src/dialog_iemgui.tcl:745 ../src/dialog_iemgui.tcl:751 -#: ../src/dialog_midi.tcl:93 ../src/dialog_midi.tcl:228 msgid "Apply" msgstr "Applica" -#: ../src/dialog_array.tcl:323 ../src/dialog_array.tcl:325 -#: ../src/dialog_audio.tcl:140 ../src/dialog_canvas.tcl:209 -#: ../src/dialog_font.tcl:53 ../src/dialog_font.tcl:92 -#: ../src/dialog_font.tcl:100 ../src/dialog_font.tcl:101 -#: ../src/dialog_gatom.tcl:159 ../src/dialog_gatom.tcl:167 -#: ../src/dialog_iemgui.tcl:748 ../src/dialog_iemgui.tcl:754 -#: ../src/dialog_midi.tcl:95 ../src/dialog_midi.tcl:230 msgid "OK" msgstr "OK" -#: ../src/dialog_audio.tcl:130 msgid "Audio Settings" msgstr "Settaggi Audio" -#: ../src/dialog_audio.tcl:142 -msgid "Save All Settings" -msgstr "Salva tutti i settaggi" +#, fuzzy +msgid "Settings" +msgstr "Settaggi MIDI" -#: ../src/dialog_audio.tcl:151 msgid "Sample rate:" msgstr "Frequenza di campionamento" -#: ../src/dialog_audio.tcl:153 msgid "Delay (msec):" msgstr "Ritardo (msec):" -#: ../src/dialog_audio.tcl:158 +msgid "Block size:" +msgstr "" + msgid "Use callbacks" msgstr "Usa callback" -#: ../src/dialog_audio.tcl:166 ../src/dialog_midi.tcl:105 -#: ../src/dialog_midi.tcl:241 -msgid "Input device 1:" -msgstr "Dispositivo di ingresso 1:" +msgid "Input Devices" +msgstr "Dispositivo di ingresso" -#: ../src/dialog_audio.tcl:169 ../src/dialog_audio.tcl:183 -#: ../src/dialog_audio.tcl:198 ../src/dialog_audio.tcl:213 -#: ../src/dialog_audio.tcl:232 ../src/dialog_audio.tcl:250 -#: ../src/dialog_audio.tcl:265 ../src/dialog_audio.tcl:280 msgid "Channels:" msgstr "Canali:" -#: ../src/dialog_audio.tcl:179 ../src/dialog_midi.tcl:115 -#: ../src/dialog_midi.tcl:251 -msgid "Input device 2:" -msgstr "Dispositivo di ingresso 2:" - -#: ../src/dialog_audio.tcl:194 ../src/dialog_midi.tcl:127 -#: ../src/dialog_midi.tcl:263 -msgid "Input device 3:" -msgstr "Dispositivo di ingresso 3:" +msgid "Output Devices" +msgstr "Dispositivo di uscita" -#: ../src/dialog_audio.tcl:209 ../src/dialog_midi.tcl:139 -#: ../src/dialog_midi.tcl:275 -msgid "Input device 4:" -msgstr "Dispositivo di ingresso 4:" - -#: ../src/dialog_audio.tcl:223 ../src/dialog_midi.tcl:150 -#: ../src/dialog_midi.tcl:286 -msgid "Output device 1:" -msgstr "Dispositivo di uscita 1:" - -#: ../src/dialog_audio.tcl:226 -msgid "(same as input device) .............. " +#, fuzzy +msgid "(same as input device)..." msgstr "(lo stesso del dispositivo di ingresso)..........." -#: ../src/dialog_audio.tcl:246 ../src/dialog_midi.tcl:160 -#: ../src/dialog_midi.tcl:296 -msgid "Output device 2:" -msgstr "Dispositivo di uscita 2:" - -#: ../src/dialog_audio.tcl:261 ../src/dialog_midi.tcl:171 -#: ../src/dialog_midi.tcl:307 -msgid "Output device 3:" -msgstr "Dispositivo di uscita 3:" +#, fuzzy +msgid "Use Multiple Devices" +msgstr "Usa dispositivi multipli" -#: ../src/dialog_audio.tcl:276 ../src/dialog_midi.tcl:182 -#: ../src/dialog_midi.tcl:318 -msgid "Output device 4:" -msgstr "Dispositivo di uscita 4:" +msgid "Save All Settings" +msgstr "Salva tutti i settaggi" -#: ../src/dialog_audio.tcl:291 ../src/dialog_midi.tcl:195 -msgid "Use multiple devices" -msgstr "Usa dispositivi multipli" +msgid "WARNING: unknown graphme flags received in pdtk_canvas_dialog" +msgstr "" -#: ../src/dialog_canvas.tcl:142 msgid "Canvas Properties" msgstr "Proprietà Canvas" -#: ../src/dialog_canvas.tcl:146 msgid "Scale" msgstr "Scala" -#: ../src/dialog_canvas.tcl:150 msgid "X units per pixel:" msgstr "X unità per pixel" -#: ../src/dialog_canvas.tcl:155 msgid "Y units per pixel:" msgstr "Y unità per pixel:" -#: ../src/dialog_canvas.tcl:159 msgid "Appearance on parent patch" msgstr "Aspetto sulla parent patch" -#: ../src/dialog_canvas.tcl:161 msgid "Graph-On-Parent" msgstr "Mostra sulla patent" -#: ../src/dialog_canvas.tcl:165 msgid "Hide object name and arguments" msgstr "Nascondi il nome oggetto e gli argomenti" -#: ../src/dialog_canvas.tcl:170 msgid "Range and size" msgstr "Intervallo e dimensioni" -#: ../src/dialog_canvas.tcl:174 -msgid "X range, from" +#, fuzzy +msgid "X range: from" msgstr "Intervallo X, da" -#: ../src/dialog_canvas.tcl:176 ../src/dialog_canvas.tcl:191 msgid "to" msgstr "a" -#: ../src/dialog_canvas.tcl:180 ../src/dialog_canvas.tcl:195 msgid "Margin:" msgstr "Margine:" -#: ../src/dialog_canvas.tcl:189 -msgid "Y range, from" +#, fuzzy +msgid "Y range: from" msgstr "Intervallo Y, da" -#: ../src/dialog_find.tcl:63 ../src/dialog_find.tcl:66 -#: ../src/dialog_find.tcl:79 ../src/dialog_find.tcl:80 -#: ../src/dialog_find.tcl:83 ../src/dialog_find.tcl:85 -#: ../src/dialog_find.tcl:87 ../src/dialog_find.tcl:101 -#: ../src/dialog_find.tcl:105 ../src/dialog_find.tcl:107 -#: ../src/pd_menus.tcl:45 -msgid "Find" -msgstr "Trova" +#, fuzzy +msgid "Data Properties" +msgstr "Proprietà Canvas" + +#, tcl-format +msgid "Found '%1$s' in %2$s" +msgstr "" + +#, tcl-format +msgid "Couldn't find '%1$s' in %2$s" +msgstr "" -#: ../src/dialog_find.tcl:70 ../src/dialog_find.tcl:73 -#: ../src/dialog_find.tcl:87 ../src/dialog_find.tcl:91 -#: ../src/dialog_find.tcl:93 -msgid "Search in" +#, fuzzy, tcl-format +msgid "Search in %s for:" msgstr "Cerca in" -#: ../src/dialog_find.tcl:72 ../src/dialog_find.tcl:75 -#: ../src/dialog_find.tcl:89 ../src/dialog_find.tcl:93 -#: ../src/dialog_find.tcl:95 -msgid "for:" -msgstr "per:" - -#: ../src/dialog_find.tcl:83 ../src/dialog_find.tcl:90 -#: ../src/dialog_find.tcl:104 ../src/dialog_find.tcl:108 -#: ../src/dialog_find.tcl:110 ../src/pd_menus.tcl:86 ../src/pd_menus.tcl:87 -#: ../src/pd_menus.tcl:132 ../src/pd_menus.tcl:133 ../src/pd_menus.tcl:259 -#: ../src/pd_menus.tcl:272 ../src/pd_menus.tcl:295 ../src/pd_menus.tcl:308 -#: ../src/pd_menus.tcl:332 ../src/pd_menus.tcl:345 ../src/pd_menus.tcl:354 -#: ../src/pd_menus.tcl:381 ../src/pd_menus.tcl:392 ../src/pd_menus.tcl:419 -#: ../src/pd_menus.tcl:431 ../src/pd_menus.tcl:458 -msgid "Close" -msgstr "Chiudi" +#, tcl-format +msgid "Showed last '%1$s' in %2$s" +msgstr "" -#: ../src/dialog_find.tcl:83 ../src/dialog_find.tcl:97 -#: ../src/dialog_find.tcl:101 ../src/dialog_find.tcl:103 -msgid "Match whole word only" -msgstr "Solo parole intere" +#, tcl-format +msgid "Showing '%1$d' out of %2$d items in %3$s" +msgstr "" -#: ../src/dialog_find.tcl:92 ../src/dialog_font.tcl:49 -#: ../src/dialog_font.tcl:50 ../src/pd-gui.tcl:280 ../src/pd-gui.tcl:283 -#: ../src/pd-gui.tcl:286 ../src/pd-gui.tcl:288 ../src/pd-gui.tcl:291 -#: ../src/pd_menus.tcl:212 ../src/pd_menus.tcl:258 ../src/pd_menus.tcl:285 -#: ../src/pdwindow.tcl:33 msgid "Pd window" msgstr "Finestra Pd" -#: ../src/dialog_font.tcl:45 -#, fuzzy -msgid "Font Properties" -msgstr "Proprietà" +msgid "Match whole word only" +msgstr "Solo parole intere" + +msgid "Close" +msgstr "Chiudi" -#: ../src/dialog_font.tcl:46 ../src/dialog_font.tcl:54 -#: ../src/dialog_font.tcl:55 #, fuzzy, tcl-format msgid "%s Font" msgstr "Carattere" -#: ../src/dialog_font.tcl:61 ../src/dialog_font.tcl:96 -#: ../src/dialog_font.tcl:104 ../src/dialog_font.tcl:105 +msgid "Font" +msgstr "Carattere" + msgid "Font Size" msgstr "Dimensione carattere:" -#: ../src/dialog_font.tcl:89 ../src/dialog_font.tcl:108 -#: ../src/dialog_font.tcl:116 ../src/dialog_font.tcl:117 msgid "Stretch" msgstr "Allarga/riduci:" -#: ../src/dialog_font.tcl:96 ../src/dialog_font.tcl:115 -#: ../src/dialog_font.tcl:123 ../src/dialog_font.tcl:124 msgid "X and Y" msgstr "X e Y" -#: ../src/dialog_font.tcl:98 ../src/dialog_font.tcl:117 -#: ../src/dialog_font.tcl:125 ../src/dialog_font.tcl:126 msgid "X only" msgstr "Solo X" -#: ../src/dialog_font.tcl:100 ../src/dialog_font.tcl:119 -#: ../src/dialog_font.tcl:127 ../src/dialog_font.tcl:128 msgid "Y only" msgstr "Solo Y" -#: ../src/dialog_gatom.tcl:93 msgid "Atom Box Properties" msgstr "Proprietà Atom Box" -#: ../src/dialog_gatom.tcl:99 msgid "Width:" msgstr "Larghezza:" -#: ../src/dialog_gatom.tcl:103 msgid "Limits" msgstr "Limiti" -#: ../src/dialog_gatom.tcl:107 msgid "Lower:" msgstr "Inferiore:" -#: ../src/dialog_gatom.tcl:112 ../src/dialog_gatom.tcl:113 msgid "Upper:" msgstr "Superiore:" -#: ../src/dialog_gatom.tcl:116 ../src/dialog_gatom.tcl:121 -#: ../src/dialog_iemgui.tcl:600 ../src/dialog_iemgui.tcl:652 -#: ../src/dialog_iemgui.tcl:657 msgid "Label" msgstr "Etichetta" -#: ../src/dialog_gatom.tcl:124 ../src/dialog_gatom.tcl:129 -msgid "Left " +#, fuzzy +msgid "Left" msgstr "Sinistra " -#: ../src/dialog_gatom.tcl:126 ../src/dialog_gatom.tcl:131 msgid "Right" msgstr "Destra" -#: ../src/dialog_gatom.tcl:128 ../src/dialog_gatom.tcl:133 msgid "Top" msgstr "Sopra" -#: ../src/dialog_gatom.tcl:130 ../src/dialog_gatom.tcl:135 msgid "Bottom" msgstr "Sotto" -#: ../src/dialog_gatom.tcl:137 ../src/dialog_gatom.tcl:145 -#: ../src/dialog_iemgui.tcl:574 msgid "Messages" msgstr "Messaggi" -#: ../src/dialog_gatom.tcl:141 ../src/dialog_gatom.tcl:149 -#: ../src/dialog_iemgui.tcl:578 msgid "Send symbol:" msgstr "Invia simbolo:" -#: ../src/dialog_gatom.tcl:147 ../src/dialog_gatom.tcl:155 -#: ../src/dialog_iemgui.tcl:585 msgid "Receive symbol:" msgstr "Ricevi simbolo:" -#: ../src/dialog_iemgui.tcl:197 msgid "Background color" msgstr "Colore sfondo" -#: ../src/dialog_iemgui.tcl:204 msgid "Foreground color" msgstr "Colore primo piano" -#: ../src/dialog_iemgui.tcl:211 msgid "Label color" msgstr "Colore etichetta" -#: ../src/dialog_iemgui.tcl:272 msgid "Init" msgstr "" -#: ../src/dialog_iemgui.tcl:275 ../src/dialog_iemgui.tcl:546 msgid "No init" msgstr "" -#: ../src/dialog_iemgui.tcl:287 ../src/dialog_iemgui.tcl:558 msgid "Jump on click" msgstr "Click imposta il valore" -#: ../src/dialog_iemgui.tcl:290 ../src/dialog_iemgui.tcl:561 msgid "Steady on click" msgstr "Click incrementa/decrementa" -#: ../src/dialog_iemgui.tcl:498 -#, tcl-format -msgid "%s Properties" -msgstr "%s Proprietà" - -#: ../src/dialog_iemgui.tcl:550 ../src/pd_menus.tcl:83 ../src/pd_menus.tcl:84 -#: ../src/pd_menus.tcl:129 ../src/pd_menus.tcl:130 ../src/pd_menus.tcl:260 -#: ../src/pd_menus.tcl:273 ../src/pd_menus.tcl:288 ../src/pd_menus.tcl:301 -#: ../src/pd_menus.tcl:325 ../src/pd_menus.tcl:338 ../src/pd_menus.tcl:355 -#: ../src/pd_menus.tcl:382 ../src/pd_menus.tcl:383 ../src/pd_menus.tcl:410 -#: ../src/pd_menus.tcl:422 ../src/pd_menus.tcl:449 -msgid "Save" -msgstr "Salva" +msgid "Bang" +msgstr "Bang" -#: ../src/dialog_iemgui.tcl:608 -msgid "X offset" -msgstr "Spostamento X" +#, fuzzy +msgid "Flash Time (msec)" +msgstr "Ritardo (msec):" -#: ../src/dialog_iemgui.tcl:611 ../src/dialog_iemgui.tcl:612 -msgid "Y offset" -msgstr "Spostamento Y" +msgid "Intrrpt:" +msgstr "" -#: ../src/dialog_iemgui.tcl:642 ../src/dialog_iemgui.tcl:645 -msgid "Colors" -msgstr "Colori" +msgid "Hold:" +msgstr "" -#: ../src/dialog_iemgui.tcl:648 ../src/dialog_iemgui.tcl:651 -msgid "Background" -msgstr "Colore sfondo" +msgid "Toggle" +msgstr "Toggle" -#: ../src/dialog_iemgui.tcl:650 ../src/dialog_iemgui.tcl:654 -msgid "Front" -msgstr "Primo piano" +msgid "Non Zero Value" +msgstr "" -#: ../src/dialog_iemgui.tcl:662 ../src/dialog_iemgui.tcl:668 -msgid "Compose color" -msgstr "Crea colore" +msgid "Value:" +msgstr "" -#: ../src/dialog_iemgui.tcl:682 ../src/dialog_iemgui.tcl:688 -msgid "Test label" -msgstr "Test etichetta" +msgid "Number2" +msgstr "Numero2" -#: ../src/dialog_midi.tcl:85 -msgid "MIDI Settings" -msgstr "Settaggi MIDI" +msgid "Width (digits):" +msgstr "" -#: ../src/dialog_midi.tcl:220 -msgid "ALSA MIDI Settings" -msgstr "Settaggi ALSA MIDI" +#, fuzzy +msgid "Height:" +msgstr "Destra" -#: ../src/dialog_midi.tcl:331 -msgid "Use multiple ALSA devices" -msgstr "Usa dispositivi ALSA multipli" +msgid "Output Range" +msgstr "" -#: ../src/dialog_midi.tcl:337 -msgid "In Ports:" -msgstr "Porte Ingresso:" +msgid "Log height:" +msgstr "" -#: ../src/dialog_midi.tcl:340 -msgid "Out Ports:" -msgstr "Porte Uscita:" +msgid "Vslider" +msgstr "Slider verticale" -#: ../src/g_editor.c:1663 -msgid "Discard changes to this window??" -msgstr "Cestinare le modifiche apportate in questa finestra?" +msgid "Hslider" +msgstr "Slider orizzontale" -#: ../src/g_editor.c:1668 -msgid "really quit?" -msgstr "Uscire veramente?" +msgid "Vradio" +msgstr "Radio verticale" -#: ../src/g_editor.c:1699 -msgid "Close this window??" -msgstr "Chiudere questa finestra??" +msgid "Num cells:" +msgstr "" -#: ../src/pd-gui.tcl:185 ../src/pd-gui.tcl:195 ../src/pd-gui.tcl:203 -#: ../src/pd-gui.tcl:206 ../src/pd-gui.tcl:215 ../src/pd-gui.tcl:226 -msgid "Associated Files" -msgstr "File associati" +msgid "Hradio" +msgstr "Radio orizzontale" + +msgid "VU Meter" +msgstr "Indicatore VU" + +msgid "Canvas" +msgstr "Tavolozza" + +msgid "Visible Rectangle (pix)" +msgstr "" + +#, tcl-format +msgid "%s Properties" +msgstr "%s Proprietà" + +msgid "Parameters" +msgstr "" + +#, fuzzy +msgid "X offset:" +msgstr "Spostamento X" + +#, fuzzy +msgid "Y offset:" +msgstr "Spostamento Y" + +msgid "Colors" +msgstr "Colori" + +msgid "Background" +msgstr "Colore sfondo" + +msgid "Front" +msgstr "Primo piano" + +msgid "Compose color" +msgstr "Crea colore" + +msgid "Test label" +msgstr "Test etichetta" + +#, fuzzy +msgid "Send a Pd message" +msgstr "Invia un Messaggio..." + +msgid "(use arrow keys for history)" +msgstr "" + +msgid "MIDI Settings" +msgstr "Settaggi MIDI" + +msgid "ALSA MIDI Settings" +msgstr "Settaggi ALSA MIDI" + +msgid "In Ports:" +msgstr "Porte Ingresso:" + +msgid "Out Ports:" +msgstr "Porte Uscita:" -#: ../src/pd-gui.tcl:186 ../src/pd-gui.tcl:196 ../src/pd-gui.tcl:204 -#: ../src/pd-gui.tcl:207 ../src/pd-gui.tcl:216 ../src/pd-gui.tcl:227 -msgid "Pd Files" -msgstr "File Pd" +msgid "Pd search path for objects, help, fonts, and other files" +msgstr "" + +msgid "Use standard paths" +msgstr "" + +msgid "Verbose" +msgstr "" + +msgid "Pd Documents Directory" +msgstr "" + +msgid "Browse" +msgstr "" + +msgid "Reset" +msgstr "" + +msgid "Disable" +msgstr "" + +msgid "Externals Install Directory" +msgstr "" + +#, fuzzy +msgid "Clear" +msgstr "Pulisci menu" + +msgid "Choose Pd documents directory:" +msgstr "" + +msgid "Install externals to directory:" +msgstr "" + +msgid "Add a new path" +msgstr "" + +msgid "Add new library" +msgstr "" + +msgid "Edit library" +msgstr "" + +msgid "Pd libraries to load on startup" +msgstr "" + +msgid "Startup flags:" +msgstr "" + +msgid "Defeat real-time scheduling" +msgstr "" -#: ../src/pd-gui.tcl:187 ../src/pd-gui.tcl:205 ../src/pd-gui.tcl:208 -#: ../src/pd-gui.tcl:228 -msgid "Max Patch Files" -msgstr "Patch Max" +msgid "Help Browser" +msgstr "" -#: ../src/pd-gui.tcl:188 ../src/pd-gui.tcl:206 ../src/pd-gui.tcl:209 -#: ../src/pd-gui.tcl:229 -msgid "Max Text Files" -msgstr "File di testo Max" +msgid "(Tcl) MISSING CLOSE-BRACE '}': " +msgstr "" -#: ../src/pd-gui.tcl:197 ../src/pd-gui.tcl:217 -msgid "Max Patch Files (.pat)" -msgstr "Patch Max (.pat)" +msgid "(Tcl) INVALID COMMAND NAME: " +msgstr "" -#: ../src/pd-gui.tcl:198 ../src/pd-gui.tcl:218 -msgid "Max Text Files (.mxt)" -msgstr "File di testo Max (.mxt)" +msgid "(Tcl) UNHANDLED ERROR: " +msgstr "" -#: ../src/pd-gui.tcl:270 ../src/pd-gui.tcl:290 #, tcl-format -msgid "WARNING: Font family '%s' not found, using default (%s)" +msgid "[deken]: installed version [%1$s] > %2$s...skipping!" msgstr "" -"ATTENZIONE: Famiglia di font '%s\" non trovata, uso quella di default (%s)" -#: ../src/pd-gui.tcl:278 ../src/pd-gui.tcl:298 #, tcl-format -msgid "WARNING: Font weight '%s' not found, using default (%s)" -msgstr "ATTENZIONE: Peso '%s' del font non trovato, uso quello di default (%s)" +msgid "[deken]: installed version [%1$s] < %2$s...overwriting!" +msgstr "" -#: ../src/pd-gui.tcl:303 ../src/pd-gui.tcl:323 #, tcl-format -msgid "ERROR: %s failed to find font size (%s) that fits into %sx%s!" +msgid "[deken]: installed version [%1$s] == %2$s...skipping!" msgstr "" -"ERRORE: %s impossibile trovare la dimensione del font (%s) che entra in %sx%s!" -#: ../src/pd-gui.tcl:478 ../src/pd-gui.tcl:483 ../src/pd-gui.tcl:501 -msgid "ERROR: 'pd' never showed up, 'pd-gui' quitting!" -msgstr "ERRORE: 'pd' non è mai partito, chiudo 'pd-gui'!" +msgid "[deken]: " +msgstr "" -#: ../src/pd_menucommands.tcl:19 -msgid "Untitled" +#, tcl-format +msgid "Successfully unzipped %1$s into %2$s." msgstr "" -#: ../src/pd_menucommands.tcl:78 ../src/pd_menucommands.tcl:79 -#: ../src/pd_menucommands.tcl:90 -msgid "Send Message..." -msgstr "Invia un Messaggio..." +msgid "[deken]: Unable to extract package automatically." +msgstr "" -#: ../src/pd_menucommands.tcl:82 ../src/pd_menucommands.tcl:83 -#: ../src/pd_menucommands.tcl:94 ../src/pd_menus.tcl:87 ../src/pd_menus.tcl:88 -#: ../src/pd_menus.tcl:133 ../src/pd_menus.tcl:134 ../src/pd_menus.tcl:147 -#: ../src/pd_menus.tcl:192 ../src/pd_menus.tcl:193 ../src/pd_menus.tcl:265 -#: ../src/pd_menus.tcl:278 ../src/pd_menus.tcl:292 ../src/pd_menus.tcl:305 -#: ../src/pd_menus.tcl:329 ../src/pd_menus.tcl:342 ../src/pd_menus.tcl:360 -#: ../src/pd_menus.tcl:387 ../src/pd_menus.tcl:414 ../src/pd_menus.tcl:426 -#: ../src/pd_menus.tcl:453 ../startup/object_db.tcl:123 -msgid "Message" -msgstr "Messaggio" +msgid "Please perform the following steps manually:" +msgstr "" -#: ../src/pd_menucommands.tcl:108 ../src/pd_menucommands.tcl:111 -#: ../src/pd_menus.tcl:112 ../src/pd_menus.tcl:113 ../src/pd_menus.tcl:117 -#: ../src/pd_menus.tcl:118 ../src/pd_menus.tcl:158 ../src/pd_menus.tcl:159 -#: ../src/pd_menus.tcl:163 ../src/pd_menus.tcl:164 -msgid "Font" -msgstr "Carattere" +#, tcl-format +msgid "1. Unzip %s." +msgstr "" + +#, tcl-format +msgid "2. Copy the contents into %s." +msgstr "" + +#, tcl-format +msgid "[deken] uninstalling '%s'" +msgstr "" + +#, tcl-format +msgid "Uninstalling %1$s from %2$s failed!" +msgstr "" + +#, tcl-format +msgid "[deken] deken-plugin.tcl (Pd externals search) loaded from %s." +msgstr "" + +#, tcl-format +msgid "[deken] Platform detected: %s" +msgstr "" + +#, tcl-format +msgid "[deken] Platform re-detected: %s" +msgstr "" + +msgid "Show all" +msgstr "" + +#, fuzzy +msgid "Search" +msgstr "Cerca in" + +msgid "To get a list of all available externals, try an empty search." +msgstr "" + +msgid "Find externals" +msgstr "" + +msgid "Only install externals uploaded by people you trust." +msgstr "" -#: ../src/pd_menucommands.tcl:123 ../src/pd_menucommands.tcl:126 -#: ../src/pd_menus.tcl:138 ../src/pd_menus.tcl:183 ../src/pd_menus.tcl:184 msgid "Preferences" msgstr "Preferenze" -#: ../src/pd_menus.tcl:45 -msgid "Edit" -msgstr "Modifica" +msgid "Installation options:" +msgstr "" -#: ../src/pd_menus.tcl:45 -msgid "File" -msgstr "File" +msgid "Try to remove libraries before (re)installing them?" +msgstr "" -#: ../src/pd_menus.tcl:45 ../src/pdtk_canvas.tcl:48 ../src/pdtk_canvas.tcl:110 -#: ../src/pdtk_canvas.tcl:113 -msgid "Help" -msgstr "Aiuto" +msgid "Show README of newly installed libraries (if present)?" +msgstr "" -#: ../src/pd_menus.tcl:45 -msgid "Media" -msgstr "Media" +msgid "Should newly installed libraries be added to Pd's search path?" +msgstr "" -#: ../src/pd_menus.tcl:45 -msgid "Put" -msgstr "Inserisci" +msgid "Platform settings:" +msgstr "" -#: ../src/pd_menus.tcl:45 -msgid "Window" -msgstr "Finestra" +#, tcl-format +msgid "Default platform: %s" +msgstr "" -#: ../src/pd_menus.tcl:81 ../src/pd_menus.tcl:82 ../src/pd_menus.tcl:127 -#: ../src/pd_menus.tcl:128 ../src/pd_menus.tcl:255 ../src/pd_menus.tcl:267 -#: ../src/pd_menus.tcl:285 ../src/pd_menus.tcl:298 ../src/pd_menus.tcl:322 -#: ../src/pd_menus.tcl:335 ../src/pd_menus.tcl:349 ../src/pd_menus.tcl:376 -#: ../src/pd_menus.tcl:380 ../src/pd_menus.tcl:407 ../src/pd_menus.tcl:419 -#: ../src/pd_menus.tcl:446 -msgid "New" -msgstr "Nuovo File" +msgid "User-defined platform:" +msgstr "" -#: ../src/pd_menus.tcl:82 ../src/pd_menus.tcl:83 ../src/pd_menus.tcl:128 -#: ../src/pd_menus.tcl:129 ../src/pd_menus.tcl:256 ../src/pd_menus.tcl:268 -#: ../src/pd_menus.tcl:286 ../src/pd_menus.tcl:299 ../src/pd_menus.tcl:323 -#: ../src/pd_menus.tcl:336 ../src/pd_menus.tcl:350 ../src/pd_menus.tcl:377 -#: ../src/pd_menus.tcl:381 ../src/pd_menus.tcl:408 ../src/pd_menus.tcl:420 -#: ../src/pd_menus.tcl:447 ../src/pdtk_canvas.tcl:46 -#: ../src/pdtk_canvas.tcl:108 ../src/pdtk_canvas.tcl:111 -#: ../src/pdtk_canvas.tcl:128 ../src/pdtk_canvas.tcl:130 -#: ../src/pdtk_canvas.tcl:131 ../src/pdtk_canvas.tcl:133 -msgid "Open" -msgstr "Apri File..." +msgid "Hide foreign architectures?" +msgstr "" + +#, fuzzy, tcl-format +msgid "Deken %s Preferences" +msgstr "Preferenze" + +msgid "[deken]: Start searching for externals..." +msgstr "" + +#, tcl-format +msgid "[deken]: online? %s" +msgstr "" + +msgid "Are you online?" +msgstr "" + +msgid "Unable to perform search." +msgstr "" + +msgid "[deken]: No matching externals found." +msgstr "" + +msgid "Try using the full name e.g. 'freeverb'." +msgstr "" + +msgid "No matching externals found." +msgstr "" + +msgid "Please select a (writable) installation directory!" +msgstr "" + +#, tcl-format +msgid "Install %1$s to %2$s?" +msgstr "" + +#, tcl-format +msgid "" +"Commencing downloading of:\n" +"%1$s\n" +"Into %2$s..." +msgstr "" + +msgid "aborting.\n" +msgstr "" + +#, tcl-format +msgid "Unable to add %s to search paths" +msgstr "" + +#, tcl-format +msgid "Add %s to the Pd search paths?" +msgstr "" + +#, tcl-format +msgid "Added %s to search paths" +msgstr "" + +#, tcl-format +msgid "Unable to download from %1$s [%2$s]" +msgstr "" + +#, tcl-format +msgid "Unable to remove stray file %s" +msgstr "" + +#, tcl-format +msgid "Unable to rename downloaded file to %s" +msgstr "" + +#, fuzzy, tcl-format +msgid "searching for '%s'" +msgstr "Cestinare le modifiche apportate a '%s'?" + +#, tcl-format +msgid "Uploaded by %1$s @ %2$s" +msgstr "" + +msgid "Install package" +msgstr "" + +#, fuzzy +msgid "Open webpage" +msgstr "Apri recenti" + +msgid "_" +msgstr "" + +#, tcl-format +msgid "" +"Do you want Pd to create a documents directory for patches and external " +"libraries?\n" +"\n" +"Location: %s\n" +"\n" +"You can change or disable this later in the Path preferences." +msgstr "" + +#, tcl-format +msgid "" +"Pd documents directory cannot be found:\n" +"\n" +"%s\n" +"\n" +"Choose a new location?" +msgstr "" + +#, tcl-format +msgid "Couldn't create Pd documents directory: %s\n" +msgstr "" + +#, tcl-format +msgid "Couldn't create \"externals\" directory in: %s\n" +msgstr "" + +#, tcl-format +msgid "Couldn't create preferences \"%1$s\" in %2$s" +msgstr "" + +msgid "About Pd" +msgstr "Informazioni su Pd..." + +msgid "Save" +msgstr "Salva" -#: ../src/pd_menus.tcl:84 ../src/pd_menus.tcl:85 ../src/pd_menus.tcl:130 -#: ../src/pd_menus.tcl:131 ../src/pd_menus.tcl:261 ../src/pd_menus.tcl:274 -#: ../src/pd_menus.tcl:289 ../src/pd_menus.tcl:302 ../src/pd_menus.tcl:326 -#: ../src/pd_menus.tcl:339 ../src/pd_menus.tcl:356 ../src/pd_menus.tcl:383 -#: ../src/pd_menus.tcl:384 ../src/pd_menus.tcl:411 ../src/pd_menus.tcl:423 -#: ../src/pd_menus.tcl:450 msgid "Save As..." msgstr "Salva con nome..." -#: ../src/pd_menus.tcl:88 ../src/pd_menus.tcl:89 ../src/pd_menus.tcl:134 -#: ../src/pd_menus.tcl:135 ../src/pd_menus.tcl:267 ../src/pd_menus.tcl:280 -#: ../src/pd_menus.tcl:293 ../src/pd_menus.tcl:306 ../src/pd_menus.tcl:330 -#: ../src/pd_menus.tcl:343 ../src/pd_menus.tcl:362 ../src/pd_menus.tcl:388 -#: ../src/pd_menus.tcl:389 ../src/pd_menus.tcl:415 ../src/pd_menus.tcl:427 -#: ../src/pd_menus.tcl:454 msgid "Print..." msgstr "Stampa..." -#: ../src/pd_menus.tcl:93 ../src/pd_menus.tcl:94 ../src/pd_menus.tcl:139 -#: ../src/pd_menus.tcl:140 -msgid "Undo" -msgstr "Annulla" - -#: ../src/pd_menus.tcl:95 ../src/pd_menus.tcl:96 ../src/pd_menus.tcl:141 -#: ../src/pd_menus.tcl:142 -msgid "Redo" -msgstr "Ripristina" - -#: ../src/pd_menus.tcl:98 ../src/pd_menus.tcl:99 ../src/pd_menus.tcl:144 -#: ../src/pd_menus.tcl:145 -msgid "Cut" -msgstr "Taglia" +msgid "Paste Replace" +msgstr "" -#: ../src/pd_menus.tcl:104 ../src/pd_menus.tcl:105 ../src/pd_menus.tcl:150 -#: ../src/pd_menus.tcl:151 msgid "Duplicate" msgstr "Duplica" -#: ../src/pd_menus.tcl:106 ../src/pd_menus.tcl:107 ../src/pd_menus.tcl:152 -#: ../src/pd_menus.tcl:153 -msgid "Select All" -msgstr "Seleziona tutto" +msgid "Zoom In" +msgstr "" -#: ../src/pd_menus.tcl:110 ../src/pd_menus.tcl:111 ../src/pd_menus.tcl:115 -#: ../src/pd_menus.tcl:116 ../src/pd_menus.tcl:156 ../src/pd_menus.tcl:157 -#: ../src/pd_menus.tcl:161 ../src/pd_menus.tcl:162 -msgid "Text Editor" -msgstr "Editor di Testo..." +msgid "Zoom Out" +msgstr "" -#: ../src/pd_menus.tcl:120 ../src/pd_menus.tcl:121 ../src/pd_menus.tcl:166 -#: ../src/pd_menus.tcl:167 msgid "Tidy Up" msgstr "Allinea elementi" -#: ../src/pd_menus.tcl:122 ../src/pd_menus.tcl:123 ../src/pd_menus.tcl:168 -#: ../src/pd_menus.tcl:169 -msgid "Toggle Console" -msgstr "Mostra/Nascondi console" +msgid "(Dis)Connect Selection" +msgstr "" -#: ../src/pd_menus.tcl:124 ../src/pd_menus.tcl:125 ../src/pd_menus.tcl:170 -#: ../src/pd_menus.tcl:171 -msgid "Clear Console" -msgstr "Pulisci console" +msgid "Triggerize" +msgstr "" -#: ../src/pd_menus.tcl:128 ../src/pd_menus.tcl:129 ../src/pd_menus.tcl:174 -#: ../src/pd_menus.tcl:175 msgid "Edit Mode" msgstr "Modalità modifica" -#: ../src/pd_menus.tcl:145 ../src/pd_menus.tcl:190 ../src/pd_menus.tcl:191 -msgid "Object" -msgstr "Oggetto" +msgid "Undo" +msgstr "Annulla" -#: ../src/pd_menus.tcl:149 ../src/pd_menus.tcl:194 ../src/pd_menus.tcl:195 -msgid "Number" -msgstr "Numero" +msgid "Redo" +msgstr "Ripristina" -#: ../src/pd_menus.tcl:151 ../src/pd_menus.tcl:196 ../src/pd_menus.tcl:197 -msgid "Symbol" -msgstr "Simbolo" +msgid "List of objects..." +msgstr "" -#: ../src/pd_menus.tcl:153 ../src/pd_menus.tcl:198 ../src/pd_menus.tcl:199 -msgid "Comment" -msgstr "Commento" +msgid "New" +msgstr "Nuovo File" -#: ../src/pd_menus.tcl:156 ../src/pd_menus.tcl:201 ../src/pd_menus.tcl:202 -msgid "Bang" -msgstr "Bang" +msgid "Open" +msgstr "Apri File..." -#: ../src/pd_menus.tcl:158 ../src/pd_menus.tcl:203 ../src/pd_menus.tcl:204 -msgid "Toggle" -msgstr "Toggle" +#, fuzzy +msgid "Message..." +msgstr "Messaggio" -#: ../src/pd_menus.tcl:160 ../src/pd_menus.tcl:205 ../src/pd_menus.tcl:206 -msgid "Number2" -msgstr "Numero2" +msgid "Cut" +msgstr "Taglia" -#: ../src/pd_menus.tcl:162 ../src/pd_menus.tcl:207 ../src/pd_menus.tcl:208 -msgid "Vslider" -msgstr "Slider verticale" +msgid "Select All" +msgstr "Seleziona tutto" -#: ../src/pd_menus.tcl:164 ../src/pd_menus.tcl:209 ../src/pd_menus.tcl:210 -msgid "Hslider" -msgstr "Slider orizzontale" +msgid "Clear Console" +msgstr "Pulisci console" -#: ../src/pd_menus.tcl:166 ../src/pd_menus.tcl:211 ../src/pd_menus.tcl:212 -msgid "Vradio" -msgstr "Radio verticale" +msgid "Object" +msgstr "Oggetto" -#: ../src/pd_menus.tcl:168 ../src/pd_menus.tcl:213 ../src/pd_menus.tcl:214 -msgid "Hradio" -msgstr "Radio orizzontale" +msgid "Message" +msgstr "Messaggio" -#: ../src/pd_menus.tcl:170 ../src/pd_menus.tcl:215 ../src/pd_menus.tcl:216 -msgid "VU Meter" -msgstr "Indicatore VU" +msgid "Number" +msgstr "Numero" -#: ../src/pd_menus.tcl:172 ../src/pd_menus.tcl:217 ../src/pd_menus.tcl:218 -msgid "Canvas" -msgstr "Tavolozza" +msgid "Symbol" +msgstr "Simbolo" + +msgid "Comment" +msgstr "Commento" -#: ../src/pd_menus.tcl:175 ../src/pd_menus.tcl:220 ../src/pd_menus.tcl:221 msgid "Graph" msgstr "Grafico" -#: ../src/pd_menus.tcl:176 ../src/pd_menus.tcl:221 ../src/pd_menus.tcl:222 -msgid "Array" -msgstr "Array" - -#: ../src/pd_menus.tcl:181 ../src/pd_menus.tcl:226 ../src/pd_menus.tcl:227 msgid "Find..." msgstr "Trova" -#: ../src/pd_menus.tcl:183 ../src/pd_menus.tcl:228 ../src/pd_menus.tcl:229 msgid "Find Again" msgstr "Cerca Ancora" -#: ../src/pd_menus.tcl:185 ../src/pd_menus.tcl:230 ../src/pd_menus.tcl:231 msgid "Find Last Error" msgstr "Trova l'ultimo errore" -#: ../src/pd_menus.tcl:191 ../src/pd_menus.tcl:236 ../src/pd_menus.tcl:237 msgid "DSP On" msgstr "" -#: ../src/pd_menus.tcl:193 ../src/pd_menus.tcl:238 ../src/pd_menus.tcl:239 msgid "DSP Off" msgstr "" -#: ../src/pd_menus.tcl:196 ../src/pd_menus.tcl:242 ../src/pd_menus.tcl:269 msgid "Test Audio and MIDI..." msgstr "Test Audio e MIDI" -#: ../src/pd_menus.tcl:198 ../src/pd_menus.tcl:244 ../src/pd_menus.tcl:271 msgid "Load Meter" msgstr "Misura carico cpu" -#: ../src/pd_menus.tcl:205 ../src/pd_menus.tcl:251 ../src/pd_menus.tcl:278 +msgid "Audio Settings..." +msgstr "Settaggi audio..." + +msgid "MIDI Settings..." +msgstr "Settaggi MIDI..." + msgid "Minimize" msgstr "Minimizza" -#: ../src/pd_menus.tcl:207 ../src/pd_menus.tcl:253 ../src/pd_menus.tcl:280 msgid "Zoom" msgstr "" -#: ../src/pd_menus.tcl:210 ../src/pd_menus.tcl:256 ../src/pd_menus.tcl:283 -msgid "Parent Window" -msgstr "Finestra parent" - -#: ../src/pd_menus.tcl:216 ../src/pd_menus.tcl:262 ../src/pd_menus.tcl:289 msgid "Bring All to Front" msgstr "Porta tutto in primo piano" -#: ../src/pd_menus.tcl:224 ../src/pd_menus.tcl:241 ../src/pd_menus.tcl:253 -#: ../src/pd_menus.tcl:270 ../src/pd_menus.tcl:297 ../src/pd_menus.tcl:335 -#: ../src/pd_menus.tcl:362 -msgid "About Pd" -msgstr "Informazioni su Pd..." +#, fuzzy +msgid "Next Window" +msgstr "Finestra parent" + +#, fuzzy +msgid "Previous Window" +msgstr "Finestra parent" + +msgid "Parent Window" +msgstr "Finestra parent" -#: ../src/pd_menus.tcl:227 ../src/pd_menus.tcl:273 ../src/pd_menus.tcl:300 msgid "HTML Manual..." msgstr "Manuale HTML..." -#: ../src/pd_menus.tcl:229 ../src/pd_menus.tcl:275 ../src/pd_menus.tcl:302 msgid "Browser..." msgstr "" -#: ../src/pd_menus.tcl:248 ../src/pd_menus.tcl:260 ../src/pd_menus.tcl:342 -#: ../src/pd_menus.tcl:369 -msgid "Preferences..." -msgstr "Preferenze..." +msgid "puredata.info" +msgstr "" -#: ../src/pd_menus.tcl:257 ../src/pd_menus.tcl:270 ../src/pd_menus.tcl:352 -#: ../src/pd_menus.tcl:379 -msgid "Open Recent" -msgstr "Apri recenti" +msgid "Report a bug" +msgstr "" -#: ../src/pd_menus.tcl:263 -msgid "Audio Settings..." +msgid "Clear Menu" +msgstr "Pulisci menu" + +msgid "" +"Delete all preferences?\n" +"(takes effect when Pd is restarted)" +msgstr "" + +msgid "Path..." +msgstr "" + +msgid "Startup..." +msgstr "" + +#, fuzzy +msgid "Audio..." msgstr "Settaggi audio..." -#: ../src/pd_menus.tcl:265 -msgid "MIDI Settings..." +#, fuzzy +msgid "MIDI..." msgstr "Settaggi MIDI..." -#: ../src/pd_menus.tcl:296 ../src/pd_menus.tcl:309 ../src/pd_menus.tcl:333 -#: ../src/pd_menus.tcl:346 ../src/pd_menus.tcl:393 ../src/pd_menus.tcl:420 -#: ../src/pd_menus.tcl:432 ../src/pd_menus.tcl:459 +#, fuzzy +msgid "Zoom New Windows" +msgstr "Finestra parent" + +#, fuzzy +msgid "Save All Preferences" +msgstr "Preferenze" + +#, fuzzy +msgid "Save to..." +msgstr "Salva con nome..." + +msgid "Load from..." +msgstr "" + +msgid "Forget All..." +msgstr "" + +msgid "Open Recent" +msgstr "Apri recenti" + msgid "Quit" msgstr "Esci" -#: ../src/pd_menus.tcl:304 ../src/pd_menus.tcl:331 -msgid "Clear Menu" -msgstr "Pulisci menu" - -#: ../src/pdtk_canvas.tcl:44 ../src/pdtk_canvas.tcl:106 -#: ../src/pdtk_canvas.tcl:109 ../src/pdtk_canvas.tcl:123 -#: ../src/pdtk_canvas.tcl:125 ../src/pdtk_canvas.tcl:126 -#: ../src/pdtk_canvas.tcl:128 msgid "Properties" msgstr "Proprietà" -#: ../src/pdwindow.tcl:43 +#, fuzzy +msgid "Audio on" +msgstr "Settaggi Audio" + +msgid "Audio off" +msgstr "" + +msgid "(Tcl) MISSING CLOSE-BRACKET ']': " +msgstr "" + +msgid "Tcl:" +msgstr "" + +msgid "Pd" +msgstr "" + msgid "DSP" msgstr "" -#: ../startup/object_db.tcl:113 -msgid "Signal" -msgstr "Segnali" +msgid "Audio I/O error" +msgstr "" + +msgid "Log:" +msgstr "" -#: ../startup/object_db.tcl:114 -msgid "Generators" -msgstr "Generatori" +msgid "fatal" +msgstr "" -#: ../startup/object_db.tcl:115 -msgid "Filters" -msgstr "Filtri" +msgid "error" +msgstr "" -#: ../startup/object_db.tcl:116 ../startup/object_db.tcl:124 -msgid "Math" -msgstr "Matematica" +msgid "normal" +msgstr "" -#: ../startup/object_db.tcl:117 ../startup/object_db.tcl:125 -msgid "I/O" -msgstr "Input/Output" +msgid "debug" +msgstr "" -#: ../startup/object_db.tcl:118 ../startup/object_db.tcl:126 -msgid "Sampling" -msgstr "Campionamento" +msgid "all" +msgstr "" -#: ../startup/object_db.tcl:119 ../startup/object_db.tcl:128 -msgid "Routing" +msgid "New..." msgstr "" -#: ../startup/object_db.tcl:120 ../startup/object_db.tcl:129 -msgid "Others" -msgstr "Altri" +#, fuzzy +msgid "Edit..." +msgstr "Modifica" -#: ../startup/object_db.tcl:127 -msgid "GUI" +#, fuzzy +msgid "Delete" +msgstr "Cancella array" + +#, tcl-format +msgid "Ignoring '%s': doesn't exist" +msgstr "" + +#, tcl-format +msgid "Ignoring '%s': doesn't look like a Pd-file" msgstr "" +#~ msgid "for:" +#~ msgstr "per:" + +#~ msgid "Signal" +#~ msgstr "Segnali" + +#~ msgid "WARNING: Font weight '%s' not found, using default (%s)" +#~ msgstr "" +#~ "ATTENZIONE: Peso '%s' del font non trovato, uso quello di default (%s)" + +#~ msgid "Close this window??" +#~ msgstr "Chiudere questa finestra??" + +#~ msgid "Input device 3:" +#~ msgstr "Dispositivo di ingresso 3:" + +#~ msgid "Associated Files" +#~ msgstr "File associati" + +#~ msgid "Output device 4:" +#~ msgstr "Dispositivo di uscita 4:" + +#~ msgid "Generators" +#~ msgstr "Generatori" + +#~ msgid "WARNING: Font family '%s' not found, using default (%s)" +#~ msgstr "" +#~ "ATTENZIONE: Famiglia di font '%s\" non trovata, uso quella di default (%s)" + +#~ msgid "Preferences..." +#~ msgstr "Preferenze..." + +#~ msgid "Output device 2:" +#~ msgstr "Dispositivo di uscita 2:" + +#~ msgid "Max Patch Files (.pat)" +#~ msgstr "Patch Max (.pat)" + +#~ msgid "Sampling" +#~ msgstr "Campionamento" + +#~ msgid "Others" +#~ msgstr "Altri" + +#~ msgid "Text Editor" +#~ msgstr "Editor di Testo..." + +#~ msgid "really quit?" +#~ msgstr "Uscire veramente?" + +#, fuzzy +#~ msgid "Font Properties" +#~ msgstr "Proprietà" + +#~ msgid "Max Patch Files" +#~ msgstr "Patch Max" + +#~ msgid "ERROR: %s failed to find font size (%s) that fits into %sx%s!" +#~ msgstr "" +#~ "ERRORE: %s impossibile trovare la dimensione del font (%s) che entra in " +#~ "%sx%s!" + +#~ msgid "Toggle Console" +#~ msgstr "Mostra/Nascondi console" + +#~ msgid "I/O" +#~ msgstr "Input/Output" + +#~ msgid "Math" +#~ msgstr "Matematica" + +#~ msgid "Input device 2:" +#~ msgstr "Dispositivo di ingresso 2:" + +#~ msgid "Input device 4:" +#~ msgstr "Dispositivo di ingresso 4:" + +#~ msgid "ERROR: 'pd' never showed up, 'pd-gui' quitting!" +#~ msgstr "ERRORE: 'pd' non è mai partito, chiudo 'pd-gui'!" + +#~ msgid "Filters" +#~ msgstr "Filtri" + +#~ msgid "Pd Files" +#~ msgstr "File Pd" + +#~ msgid "Max Text Files (.mxt)" +#~ msgstr "File di testo Max (.mxt)" + +#~ msgid "Max Text Files" +#~ msgstr "File di testo Max" + +#~ msgid "Output device 3:" +#~ msgstr "Dispositivo di uscita 3:" + +#~ msgid "Discard changes to this window??" +#~ msgstr "Cestinare le modifiche apportate in questa finestra?" + +#~ msgid "Use multiple ALSA devices" +#~ msgstr "Usa dispositivi ALSA multipli" diff --git a/po/pa.po b/po/pa.po index d82cf9acdf..1b6fba92df 100644 --- a/po/pa.po +++ b/po/pa.po @@ -6,24 +6,99 @@ msgid "" msgstr "" "Project-Id-Version: Pure Data 0.43\n" "Report-Msgid-Bugs-To: pd-dev@iem.at\n" -"POT-Creation-Date: 2009-08-27 10:01-0400\n" +"POT-Creation-Date: 2017-07-06 18:10+0200\n" "PO-Revision-Date: 2005-11-04 08:04+0530\n" "Last-Translator: Amanpreet Singh Alam \n" "Language-Team: Punjabi \n" +"Language: pa\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: KBabel 1.9.1\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +msgid "-------dimensions(digits)(pix):-------" +msgstr "" + +msgid "--------dimensions(pix)(pix):--------" +msgstr "" + +msgid "----------dimensions(pix):-----------" +msgstr "" + +msgid "--------flash-time(ms)(ms):---------" +msgstr "" + +msgid "-----------output-range:-----------" +msgstr "" + +msgid "------selectable_dimensions(pix):------" +msgstr "" + +msgid "------visible_rectangle(pix)(pix):------" +msgstr "" + #, fuzzy -msgid "Undo duplicate" -msgstr "ਮਿਤੀ" +msgid "bottom:" +msgstr "ਹੇਠਾਂ" -msgid "Undo paste" +#, fuzzy +msgid "height:" +msgstr "ਸੱਜਾ" + +msgid "hold:" msgstr "" -msgid "Undo motion" +msgid "intrrpt:" +msgstr "" + +msgid "left:" +msgstr "" + +msgid "lin" +msgstr "" + +msgid "log" +msgstr "" + +msgid "log-height:" +msgstr "" + +msgid "max:" +msgstr "" + +msgid "min:" +msgstr "" + +#, fuzzy +msgid "right:" +msgstr "ਸੱਜਾ" + +#, fuzzy +msgid "size:" +msgstr "ਅਕਾਰ:" + +msgid "top:" +msgstr "" + +msgid "value:" +msgstr "" + +msgid "width:" +msgstr "" + +#, tcl-format +msgid "Do you want to save the changes you made in '%s'?" +msgstr "" + +#, tcl-format +msgid "Discard changes to '%s'?" +msgstr "" + +msgid "Undo clear" +msgstr "" + +msgid "Undo connect" msgstr "" #, fuzzy @@ -33,923 +108,1051 @@ msgstr "ਯੂਗਾਂਡਾ" msgid "Undo disconnect" msgstr "" -msgid "Undo connect" +#, fuzzy +msgid "Undo duplicate" +msgstr "ਮਿਤੀ" + +msgid "Undo motion" msgstr "" -msgid "Undo clear" +msgid "Undo paste" msgstr "" msgid "Undo typing" msgstr "" -msgid "Discard changes to '%s'?" +msgid "Redo clear" msgstr "" -msgid "Do you want to save the changes you made in '%s'?" +msgid "Redo connect" +msgstr "" + +#, fuzzy +msgid "Redo cut" +msgstr "ਯੂਗਾਂਡਾ" + +msgid "Redo disconnect" +msgstr "" + +#, fuzzy +msgid "Redo duplicate" +msgstr "ਮਿਤੀ" + +msgid "Redo motion" +msgstr "" + +msgid "Redo paste" +msgstr "" + +msgid "Redo typing" +msgstr "" + +msgid "no Pd settings to clear" +msgstr "" + +msgid "removed .pdsettings file" +msgstr "" + +msgid "couldn't delete .pdsettings file" +msgstr "" + +msgid "failed to erase Pd settings" +msgstr "" + +msgid "erased Pd settings" +msgstr "" + +msgid "no Pd settings to erase" +msgstr "" + +msgid "skipping loading preferences... Pd seems to have crashed on startup." +msgstr "" + +msgid "(re-save preferences to reinstate them)" +msgstr "" + +msgid "File" +msgstr "ਫਾਇਲ" + +#, fuzzy +msgid "Edit" +msgstr "ਸੋਧ(_E)" + +msgid "Put" +msgstr "" + +msgid "Find" +msgstr "ਖੋਜ" + +#, fuzzy +msgid "Media" +msgstr "ਮੈਕਡੋਨੀਆ" + +#, fuzzy +msgid "Window" +msgstr "ਝਰੋਖਾ(_W)" + +msgid "Help" +msgstr "ਸਹਾਇਤਾ" + +msgid "Show &Hidden Files and Directories" msgstr "" -#: ../src/dialog_array.tcl:115 ../src/dialog_array.tcl:117 -#: ../src/pd_menus.tcl:100 ../src/pd_menus.tcl:101 ../src/pd_menus.tcl:146 -#: ../src/pd_menus.tcl:147 msgid "Copy" msgstr "ਨਕਲ" -#: ../src/dialog_array.tcl:118 ../src/dialog_array.tcl:120 -#: ../src/pd_menus.tcl:102 ../src/pd_menus.tcl:103 ../src/pd_menus.tcl:148 -#: ../src/pd_menus.tcl:149 #, fuzzy msgid "Paste" msgstr "ਮਿਤੀ" -#: ../src/dialog_array.tcl:264 ../src/dialog_array.tcl:266 msgid "Array Properties" msgstr "" -#: ../src/dialog_array.tcl:270 ../src/dialog_array.tcl:272 +#, fuzzy +msgid "Array" +msgstr "ਅਡੂਰਾ" + #, fuzzy msgid "Name:" msgstr "ਨਾਂ" -#: ../src/dialog_array.tcl:276 ../src/dialog_array.tcl:278 -#: ../src/dialog_canvas.tcl:178 ../src/dialog_canvas.tcl:193 -#: ../src/dialog_iemgui.tcl:619 ../src/dialog_iemgui.tcl:621 msgid "Size:" msgstr "ਅਕਾਰ:" -#: ../src/dialog_array.tcl:280 ../src/dialog_array.tcl:282 #, fuzzy msgid "Save contents" msgstr "ਭਾਗ(_C)" -#: ../src/dialog_array.tcl:284 ../src/dialog_array.tcl:286 msgid "Draw as:" msgstr "" -#: ../src/dialog_array.tcl:287 ../src/dialog_array.tcl:289 -#, fuzzy -msgid "Points" -msgstr "ਪੋਰਟ" - -#: ../src/dialog_array.tcl:289 ../src/dialog_array.tcl:291 #, fuzzy msgid "Polygon" msgstr "ਪੋਲੈਂਡ" -#: ../src/dialog_array.tcl:291 ../src/dialog_array.tcl:293 +#, fuzzy +msgid "Points" +msgstr "ਪੋਰਟ" + msgid "Bezier curve" msgstr "" -#: ../src/dialog_array.tcl:297 ../src/dialog_array.tcl:299 msgid "Put array into:" msgstr "" -#: ../src/dialog_array.tcl:300 ../src/dialog_array.tcl:302 msgid "New graph" msgstr "" -#: ../src/dialog_array.tcl:302 ../src/dialog_array.tcl:304 #, fuzzy msgid "Last graph" msgstr "ਆਖਰੀ ਸੁਨੇਹਾ:" -#: ../src/dialog_array.tcl:306 ../src/dialog_array.tcl:308 -#, fuzzy -msgid "Delete array" -msgstr "ਹਟਾਓ" +msgid "Options" +msgstr "" -#: ../src/dialog_array.tcl:312 ../src/dialog_array.tcl:314 #, fuzzy msgid "Open List View..." msgstr "ਪਾਬੰਦੀ ਸੂਚੀ..." -#: ../src/dialog_array.tcl:319 ../src/dialog_array.tcl:321 -#: ../src/dialog_audio.tcl:136 ../src/dialog_canvas.tcl:205 -#: ../src/dialog_font.tcl:51 ../src/dialog_gatom.tcl:153 -#: ../src/dialog_gatom.tcl:161 ../src/dialog_iemgui.tcl:742 -#: ../src/dialog_iemgui.tcl:748 ../src/dialog_midi.tcl:91 -#: ../src/dialog_midi.tcl:226 +#, fuzzy +msgid "Delete array" +msgstr "ਹਟਾਓ" + msgid "Cancel" msgstr "ਰੱਦ" -#: ../src/dialog_array.tcl:321 ../src/dialog_array.tcl:323 -#: ../src/dialog_audio.tcl:138 ../src/dialog_canvas.tcl:207 -#: ../src/dialog_gatom.tcl:156 ../src/dialog_gatom.tcl:164 -#: ../src/dialog_iemgui.tcl:745 ../src/dialog_iemgui.tcl:751 -#: ../src/dialog_midi.tcl:93 ../src/dialog_midi.tcl:228 msgid "Apply" msgstr "ਲਾਗੂ" -#: ../src/dialog_array.tcl:323 ../src/dialog_array.tcl:325 -#: ../src/dialog_audio.tcl:140 ../src/dialog_canvas.tcl:209 -#: ../src/dialog_font.tcl:53 ../src/dialog_font.tcl:92 -#: ../src/dialog_font.tcl:100 ../src/dialog_font.tcl:101 -#: ../src/dialog_gatom.tcl:159 ../src/dialog_gatom.tcl:167 -#: ../src/dialog_iemgui.tcl:748 ../src/dialog_iemgui.tcl:754 -#: ../src/dialog_midi.tcl:95 ../src/dialog_midi.tcl:230 msgid "OK" msgstr "" -#: ../src/dialog_audio.tcl:130 msgid "Audio Settings" msgstr "" -#: ../src/dialog_audio.tcl:142 -msgid "Save All Settings" +msgid "Settings" msgstr "" -#: ../src/dialog_audio.tcl:151 msgid "Sample rate:" msgstr "" -#: ../src/dialog_audio.tcl:153 msgid "Delay (msec):" msgstr "" -#: ../src/dialog_audio.tcl:158 +msgid "Block size:" +msgstr "" + msgid "Use callbacks" msgstr "" -#: ../src/dialog_audio.tcl:166 ../src/dialog_midi.tcl:105 -#: ../src/dialog_midi.tcl:241 -msgid "Input device 1:" +msgid "Input Devices" msgstr "" -#: ../src/dialog_audio.tcl:169 ../src/dialog_audio.tcl:183 -#: ../src/dialog_audio.tcl:198 ../src/dialog_audio.tcl:213 -#: ../src/dialog_audio.tcl:232 ../src/dialog_audio.tcl:250 -#: ../src/dialog_audio.tcl:265 ../src/dialog_audio.tcl:280 #, fuzzy msgid "Channels:" msgstr "ਰੱਦ" -#: ../src/dialog_audio.tcl:179 ../src/dialog_midi.tcl:115 -#: ../src/dialog_midi.tcl:251 -msgid "Input device 2:" -msgstr "" - -#: ../src/dialog_audio.tcl:194 ../src/dialog_midi.tcl:127 -#: ../src/dialog_midi.tcl:263 -msgid "Input device 3:" -msgstr "" - -#: ../src/dialog_audio.tcl:209 ../src/dialog_midi.tcl:139 -#: ../src/dialog_midi.tcl:275 -msgid "Input device 4:" -msgstr "" - -#: ../src/dialog_audio.tcl:223 ../src/dialog_midi.tcl:150 -#: ../src/dialog_midi.tcl:286 -msgid "Output device 1:" -msgstr "" - -#: ../src/dialog_audio.tcl:226 -msgid "(same as input device) .............. " +msgid "Output Devices" msgstr "" -#: ../src/dialog_audio.tcl:246 ../src/dialog_midi.tcl:160 -#: ../src/dialog_midi.tcl:296 -msgid "Output device 2:" +msgid "(same as input device)..." msgstr "" -#: ../src/dialog_audio.tcl:261 ../src/dialog_midi.tcl:171 -#: ../src/dialog_midi.tcl:307 -msgid "Output device 3:" +msgid "Use Multiple Devices" msgstr "" -#: ../src/dialog_audio.tcl:276 ../src/dialog_midi.tcl:182 -#: ../src/dialog_midi.tcl:318 -msgid "Output device 4:" +msgid "Save All Settings" msgstr "" -#: ../src/dialog_audio.tcl:291 ../src/dialog_midi.tcl:195 -msgid "Use multiple devices" +msgid "WARNING: unknown graphme flags received in pdtk_canvas_dialog" msgstr "" -#: ../src/dialog_canvas.tcl:142 msgid "Canvas Properties" msgstr "" -#: ../src/dialog_canvas.tcl:146 #, fuzzy msgid "Scale" msgstr "ਸੰਭਾਲੋ" -#: ../src/dialog_canvas.tcl:150 msgid "X units per pixel:" msgstr "" -#: ../src/dialog_canvas.tcl:155 msgid "Y units per pixel:" msgstr "" -#: ../src/dialog_canvas.tcl:159 msgid "Appearance on parent patch" msgstr "" -#: ../src/dialog_canvas.tcl:161 msgid "Graph-On-Parent" msgstr "" -#: ../src/dialog_canvas.tcl:165 msgid "Hide object name and arguments" msgstr "" -#: ../src/dialog_canvas.tcl:170 msgid "Range and size" msgstr "" -#: ../src/dialog_canvas.tcl:174 -msgid "X range, from" +msgid "X range: from" msgstr "" -#: ../src/dialog_canvas.tcl:176 ../src/dialog_canvas.tcl:191 msgid "to" msgstr "" -#: ../src/dialog_canvas.tcl:180 ../src/dialog_canvas.tcl:195 #, fuzzy msgid "Margin:" msgstr "ਨਿਸ਼ਾਨ ਰੇਖਾ:" -#: ../src/dialog_canvas.tcl:189 -msgid "Y range, from" +msgid "Y range: from" msgstr "" -#: ../src/dialog_find.tcl:63 ../src/dialog_find.tcl:66 -#: ../src/dialog_find.tcl:79 ../src/dialog_find.tcl:80 -#: ../src/dialog_find.tcl:83 ../src/dialog_find.tcl:85 -#: ../src/dialog_find.tcl:87 ../src/dialog_find.tcl:101 -#: ../src/dialog_find.tcl:105 ../src/dialog_find.tcl:107 -#: ../src/pd_menus.tcl:45 -msgid "Find" -msgstr "ਖੋਜ" +msgid "Data Properties" +msgstr "" -#: ../src/dialog_find.tcl:70 ../src/dialog_find.tcl:73 -#: ../src/dialog_find.tcl:87 ../src/dialog_find.tcl:91 -#: ../src/dialog_find.tcl:93 -#, fuzzy -msgid "Search in" +#, tcl-format +msgid "Found '%1$s' in %2$s" +msgstr "" + +#, tcl-format +msgid "Couldn't find '%1$s' in %2$s" +msgstr "" + +#, fuzzy, tcl-format +msgid "Search in %s for:" msgstr "ਪਾਠ ਖੋਜ..." -#: ../src/dialog_find.tcl:72 ../src/dialog_find.tcl:75 -#: ../src/dialog_find.tcl:89 ../src/dialog_find.tcl:93 -#: ../src/dialog_find.tcl:95 -#, fuzzy -msgid "for:" -msgstr "ਪੋਰਟ:" - -#: ../src/dialog_find.tcl:83 ../src/dialog_find.tcl:90 -#: ../src/dialog_find.tcl:104 ../src/dialog_find.tcl:108 -#: ../src/dialog_find.tcl:110 ../src/pd_menus.tcl:86 ../src/pd_menus.tcl:87 -#: ../src/pd_menus.tcl:132 ../src/pd_menus.tcl:133 ../src/pd_menus.tcl:259 -#: ../src/pd_menus.tcl:272 ../src/pd_menus.tcl:295 ../src/pd_menus.tcl:308 -#: ../src/pd_menus.tcl:332 ../src/pd_menus.tcl:345 ../src/pd_menus.tcl:354 -#: ../src/pd_menus.tcl:381 ../src/pd_menus.tcl:392 ../src/pd_menus.tcl:419 -#: ../src/pd_menus.tcl:431 ../src/pd_menus.tcl:458 -msgid "Close" -msgstr "ਬੰਦ ਕਰੋ" +#, tcl-format +msgid "Showed last '%1$s' in %2$s" +msgstr "" -#: ../src/dialog_find.tcl:83 ../src/dialog_find.tcl:97 -#: ../src/dialog_find.tcl:101 ../src/dialog_find.tcl:103 -msgid "Match whole word only" +#, tcl-format +msgid "Showing '%1$d' out of %2$d items in %3$s" msgstr "" -#: ../src/dialog_find.tcl:92 ../src/dialog_font.tcl:49 -#: ../src/dialog_font.tcl:50 ../src/pd-gui.tcl:280 ../src/pd-gui.tcl:283 -#: ../src/pd-gui.tcl:286 ../src/pd-gui.tcl:288 ../src/pd-gui.tcl:291 -#: ../src/pd_menus.tcl:212 ../src/pd_menus.tcl:258 ../src/pd_menus.tcl:285 -#: ../src/pdwindow.tcl:33 #, fuzzy msgid "Pd window" msgstr "ਭੇਜਣ ਝਰੋਖਾ" -#: ../src/dialog_font.tcl:45 -msgid "Font Properties" +msgid "Match whole word only" msgstr "" -#: ../src/dialog_font.tcl:46 ../src/dialog_font.tcl:54 -#: ../src/dialog_font.tcl:55 +msgid "Close" +msgstr "ਬੰਦ ਕਰੋ" + #, fuzzy, tcl-format msgid "%s Font" msgstr "ਫੋਂਟ:" -#: ../src/dialog_font.tcl:61 ../src/dialog_font.tcl:96 -#: ../src/dialog_font.tcl:104 ../src/dialog_font.tcl:105 +#, fuzzy +msgid "Font" +msgstr "ਫੋਂਟ:" + #, fuzzy msgid "Font Size" msgstr "ਅਕਾਰ:" -#: ../src/dialog_font.tcl:89 ../src/dialog_font.tcl:108 -#: ../src/dialog_font.tcl:116 ../src/dialog_font.tcl:117 #, fuzzy msgid "Stretch" msgstr "ਸ਼ੁਰੂ:" -#: ../src/dialog_font.tcl:96 ../src/dialog_font.tcl:115 -#: ../src/dialog_font.tcl:123 ../src/dialog_font.tcl:124 msgid "X and Y" msgstr "" -#: ../src/dialog_font.tcl:98 ../src/dialog_font.tcl:117 -#: ../src/dialog_font.tcl:125 ../src/dialog_font.tcl:126 msgid "X only" msgstr "" -#: ../src/dialog_font.tcl:100 ../src/dialog_font.tcl:119 -#: ../src/dialog_font.tcl:127 ../src/dialog_font.tcl:128 msgid "Y only" msgstr "" -#: ../src/dialog_gatom.tcl:93 msgid "Atom Box Properties" msgstr "" -#: ../src/dialog_gatom.tcl:99 msgid "Width:" msgstr "" -#: ../src/dialog_gatom.tcl:103 #, fuzzy msgid "Limits" msgstr "ਉਪਭੋਗੀ ਸੀਮਾ" -#: ../src/dialog_gatom.tcl:107 msgid "Lower:" msgstr "" -#: ../src/dialog_gatom.tcl:112 ../src/dialog_gatom.tcl:113 #, fuzzy msgid "Upper:" msgstr "ਉਪਭੋਗੀ:" -#: ../src/dialog_gatom.tcl:116 ../src/dialog_gatom.tcl:121 -#: ../src/dialog_iemgui.tcl:600 ../src/dialog_iemgui.tcl:652 -#: ../src/dialog_iemgui.tcl:657 msgid "Label" msgstr "" -#: ../src/dialog_gatom.tcl:124 ../src/dialog_gatom.tcl:129 #, fuzzy -msgid "Left " +msgid "Left" msgstr "ਖੱਬਾ" -#: ../src/dialog_gatom.tcl:126 ../src/dialog_gatom.tcl:131 msgid "Right" msgstr "ਸੱਜਾ" -#: ../src/dialog_gatom.tcl:128 ../src/dialog_gatom.tcl:133 msgid "Top" msgstr "ਉੱਪਰ" -#: ../src/dialog_gatom.tcl:130 ../src/dialog_gatom.tcl:135 msgid "Bottom" msgstr "ਹੇਠਾਂ" -#: ../src/dialog_gatom.tcl:137 ../src/dialog_gatom.tcl:145 -#: ../src/dialog_iemgui.tcl:574 #, fuzzy msgid "Messages" msgstr "ਸੁਨੇਹਾ" -#: ../src/dialog_gatom.tcl:141 ../src/dialog_gatom.tcl:149 -#: ../src/dialog_iemgui.tcl:578 msgid "Send symbol:" msgstr "" -#: ../src/dialog_gatom.tcl:147 ../src/dialog_gatom.tcl:155 -#: ../src/dialog_iemgui.tcl:585 #, fuzzy msgid "Receive symbol:" msgstr "ਪ੍ਰਾਪਤੀ ਝਰੋਖਾ" -#: ../src/dialog_iemgui.tcl:197 #, fuzzy msgid "Background color" msgstr "ਪਿੱਠਭੂਮੀ:" -#: ../src/dialog_iemgui.tcl:204 #, fuzzy msgid "Foreground color" msgstr "ਮੁੱਖ-ਭੂਮੀ:" -#: ../src/dialog_iemgui.tcl:211 #, fuzzy msgid "Label color" msgstr "ਚੋਣ ਰੰਗ" -#: ../src/dialog_iemgui.tcl:272 #, fuzzy msgid "Init" msgstr "ਸੱਦਾ" -#: ../src/dialog_iemgui.tcl:275 ../src/dialog_iemgui.tcl:546 msgid "No init" msgstr "" -#: ../src/dialog_iemgui.tcl:287 ../src/dialog_iemgui.tcl:558 msgid "Jump on click" msgstr "" -#: ../src/dialog_iemgui.tcl:290 ../src/dialog_iemgui.tcl:561 msgid "Steady on click" msgstr "" -#: ../src/dialog_iemgui.tcl:498 +#, fuzzy +msgid "Bang" +msgstr "ਪਾਬੰਦੀ" + +msgid "Flash Time (msec)" +msgstr "" + +msgid "Intrrpt:" +msgstr "" + +msgid "Hold:" +msgstr "" + +#, fuzzy +msgid "Toggle" +msgstr "ਟੂਗੂ" + +msgid "Non Zero Value" +msgstr "" + +msgid "Value:" +msgstr "" + +#, fuzzy +msgid "Number2" +msgstr "$ ਅੰਕ" + +msgid "Width (digits):" +msgstr "" + +#, fuzzy +msgid "Height:" +msgstr "ਸੱਜਾ" + +msgid "Output Range" +msgstr "" + +msgid "Log height:" +msgstr "" + +msgid "Vslider" +msgstr "" + +#, fuzzy +msgid "Hslider" +msgstr "ਓਹਲੇ" + +#, fuzzy +msgid "Vradio" +msgstr "ਵਰਜਨ" + +msgid "Num cells:" +msgstr "" + +msgid "Hradio" +msgstr "" + +msgid "VU Meter" +msgstr "" + +#, fuzzy +msgid "Canvas" +msgstr "ਕੈਨੇਡਾ" + +msgid "Visible Rectangle (pix)" +msgstr "" + #, tcl-format msgid "%s Properties" msgstr "" -#: ../src/dialog_iemgui.tcl:550 ../src/pd_menus.tcl:83 ../src/pd_menus.tcl:84 -#: ../src/pd_menus.tcl:129 ../src/pd_menus.tcl:130 ../src/pd_menus.tcl:260 -#: ../src/pd_menus.tcl:273 ../src/pd_menus.tcl:288 ../src/pd_menus.tcl:301 -#: ../src/pd_menus.tcl:325 ../src/pd_menus.tcl:338 ../src/pd_menus.tcl:355 -#: ../src/pd_menus.tcl:382 ../src/pd_menus.tcl:383 ../src/pd_menus.tcl:410 -#: ../src/pd_menus.tcl:422 ../src/pd_menus.tcl:449 -msgid "Save" -msgstr "ਸੰਭਾਲੋ" +msgid "Parameters" +msgstr "" -#: ../src/dialog_iemgui.tcl:608 -msgid "X offset" +msgid "X offset:" msgstr "" -#: ../src/dialog_iemgui.tcl:611 ../src/dialog_iemgui.tcl:612 -msgid "Y offset" +msgid "Y offset:" msgstr "" -#: ../src/dialog_iemgui.tcl:642 ../src/dialog_iemgui.tcl:645 msgid "Colors" msgstr "ਰੰਗ" -#: ../src/dialog_iemgui.tcl:648 ../src/dialog_iemgui.tcl:651 #, fuzzy msgid "Background" msgstr "ਪਿੱਠਭੂਮੀ:" -#: ../src/dialog_iemgui.tcl:650 ../src/dialog_iemgui.tcl:654 #, fuzzy msgid "Front" msgstr "ਫੋਂਟ:" -#: ../src/dialog_iemgui.tcl:662 ../src/dialog_iemgui.tcl:668 msgid "Compose color" msgstr "" -#: ../src/dialog_iemgui.tcl:682 ../src/dialog_iemgui.tcl:688 #, fuzzy msgid "Test label" msgstr "ਸਭ ਦੀ ਜਾਂਚ" -#: ../src/dialog_midi.tcl:85 -msgid "MIDI Settings" +#, fuzzy +msgid "Send a Pd message" +msgstr "ਸੁਨੇਹਾ" + +msgid "(use arrow keys for history)" msgstr "" -#: ../src/dialog_midi.tcl:220 -msgid "ALSA MIDI Settings" +msgid "MIDI Settings" msgstr "" -#: ../src/dialog_midi.tcl:331 -msgid "Use multiple ALSA devices" +msgid "ALSA MIDI Settings" msgstr "" -#: ../src/dialog_midi.tcl:337 msgid "In Ports:" msgstr "" -#: ../src/dialog_midi.tcl:340 msgid "Out Ports:" msgstr "" -#: ../src/g_editor.c:1663 -msgid "Discard changes to this window??" +msgid "Pd search path for objects, help, fonts, and other files" msgstr "" -#: ../src/g_editor.c:1668 -msgid "really quit?" +msgid "Use standard paths" msgstr "" -#: ../src/g_editor.c:1699 -#, fuzzy -msgid "Close this window??" -msgstr "ਝਰੋਖਾ ਬੰਦ(_C)" - -#: ../src/pd-gui.tcl:185 ../src/pd-gui.tcl:195 ../src/pd-gui.tcl:203 -#: ../src/pd-gui.tcl:206 ../src/pd-gui.tcl:215 ../src/pd-gui.tcl:226 -msgid "Associated Files" +msgid "Verbose" msgstr "" -#: ../src/pd-gui.tcl:186 ../src/pd-gui.tcl:196 ../src/pd-gui.tcl:204 -#: ../src/pd-gui.tcl:207 ../src/pd-gui.tcl:216 ../src/pd-gui.tcl:227 -#, fuzzy -msgid "Pd Files" -msgstr "ਫਾਇਲ" - -#: ../src/pd-gui.tcl:187 ../src/pd-gui.tcl:205 ../src/pd-gui.tcl:208 -#: ../src/pd-gui.tcl:228 -msgid "Max Patch Files" +msgid "Pd Documents Directory" msgstr "" -#: ../src/pd-gui.tcl:188 ../src/pd-gui.tcl:206 ../src/pd-gui.tcl:209 -#: ../src/pd-gui.tcl:229 -msgid "Max Text Files" +msgid "Browse" msgstr "" -#: ../src/pd-gui.tcl:197 ../src/pd-gui.tcl:217 -msgid "Max Patch Files (.pat)" +msgid "Reset" msgstr "" -#: ../src/pd-gui.tcl:198 ../src/pd-gui.tcl:218 -msgid "Max Text Files (.mxt)" +msgid "Disable" msgstr "" -#: ../src/pd-gui.tcl:270 ../src/pd-gui.tcl:290 -#, tcl-format -msgid "WARNING: Font family '%s' not found, using default (%s)" +msgid "Externals Install Directory" msgstr "" -#: ../src/pd-gui.tcl:278 ../src/pd-gui.tcl:298 -#, tcl-format -msgid "WARNING: Font weight '%s' not found, using default (%s)" +#, fuzzy +msgid "Clear" +msgstr "ਸੂਚੀ ਸਾਫ਼" + +msgid "Choose Pd documents directory:" msgstr "" -#: ../src/pd-gui.tcl:303 ../src/pd-gui.tcl:323 -#, tcl-format -msgid "ERROR: %s failed to find font size (%s) that fits into %sx%s!" +msgid "Install externals to directory:" +msgstr "" + +msgid "Add a new path" +msgstr "" + +msgid "Add new library" +msgstr "" + +msgid "Edit library" +msgstr "" + +msgid "Pd libraries to load on startup" msgstr "" -#: ../src/pd-gui.tcl:478 ../src/pd-gui.tcl:483 ../src/pd-gui.tcl:501 -msgid "ERROR: 'pd' never showed up, 'pd-gui' quitting!" +msgid "Startup flags:" msgstr "" -#: ../src/pd_menucommands.tcl:19 -msgid "Untitled" +msgid "Defeat real-time scheduling" msgstr "" -#: ../src/pd_menucommands.tcl:78 ../src/pd_menucommands.tcl:79 -#: ../src/pd_menucommands.tcl:90 #, fuzzy -msgid "Send Message..." -msgstr "ਸੁਨੇਹਾ" +msgid "Help Browser" +msgstr "ਝਲਕ..." -#: ../src/pd_menucommands.tcl:82 ../src/pd_menucommands.tcl:83 -#: ../src/pd_menucommands.tcl:94 ../src/pd_menus.tcl:87 ../src/pd_menus.tcl:88 -#: ../src/pd_menus.tcl:133 ../src/pd_menus.tcl:134 ../src/pd_menus.tcl:147 -#: ../src/pd_menus.tcl:192 ../src/pd_menus.tcl:193 ../src/pd_menus.tcl:265 -#: ../src/pd_menus.tcl:278 ../src/pd_menus.tcl:292 ../src/pd_menus.tcl:305 -#: ../src/pd_menus.tcl:329 ../src/pd_menus.tcl:342 ../src/pd_menus.tcl:360 -#: ../src/pd_menus.tcl:387 ../src/pd_menus.tcl:414 ../src/pd_menus.tcl:426 -#: ../src/pd_menus.tcl:453 ../startup/object_db.tcl:123 -msgid "Message" -msgstr "ਸੁਨੇਹਾ" +msgid "(Tcl) MISSING CLOSE-BRACE '}': " +msgstr "" + +msgid "(Tcl) INVALID COMMAND NAME: " +msgstr "" + +msgid "(Tcl) UNHANDLED ERROR: " +msgstr "" + +#, tcl-format +msgid "[deken]: installed version [%1$s] > %2$s...skipping!" +msgstr "" + +#, tcl-format +msgid "[deken]: installed version [%1$s] < %2$s...overwriting!" +msgstr "" + +#, tcl-format +msgid "[deken]: installed version [%1$s] == %2$s...skipping!" +msgstr "" + +msgid "[deken]: " +msgstr "" + +#, tcl-format +msgid "Successfully unzipped %1$s into %2$s." +msgstr "" + +msgid "[deken]: Unable to extract package automatically." +msgstr "" + +msgid "Please perform the following steps manually:" +msgstr "" + +#, tcl-format +msgid "1. Unzip %s." +msgstr "" + +#, tcl-format +msgid "2. Copy the contents into %s." +msgstr "" + +#, tcl-format +msgid "[deken] uninstalling '%s'" +msgstr "" + +#, tcl-format +msgid "Uninstalling %1$s from %2$s failed!" +msgstr "" + +#, tcl-format +msgid "[deken] deken-plugin.tcl (Pd externals search) loaded from %s." +msgstr "" + +#, tcl-format +msgid "[deken] Platform detected: %s" +msgstr "" + +#, tcl-format +msgid "[deken] Platform re-detected: %s" +msgstr "" + +msgid "Show all" +msgstr "" -#: ../src/pd_menucommands.tcl:108 ../src/pd_menucommands.tcl:111 -#: ../src/pd_menus.tcl:112 ../src/pd_menus.tcl:113 ../src/pd_menus.tcl:117 -#: ../src/pd_menus.tcl:118 ../src/pd_menus.tcl:158 ../src/pd_menus.tcl:159 -#: ../src/pd_menus.tcl:163 ../src/pd_menus.tcl:164 #, fuzzy -msgid "Font" -msgstr "ਫੋਂਟ:" +msgid "Search" +msgstr "ਪਾਠ ਖੋਜ..." + +msgid "To get a list of all available externals, try an empty search." +msgstr "" + +msgid "Find externals" +msgstr "" + +msgid "Only install externals uploaded by people you trust." +msgstr "" -#: ../src/pd_menucommands.tcl:123 ../src/pd_menucommands.tcl:126 -#: ../src/pd_menus.tcl:138 ../src/pd_menus.tcl:183 ../src/pd_menus.tcl:184 #, fuzzy msgid "Preferences" msgstr "ਮੇਰੀ ਪਸੰਦ..." -#: ../src/pd_menus.tcl:45 -#, fuzzy -msgid "Edit" -msgstr "ਸੋਧ(_E)" +msgid "Installation options:" +msgstr "" -#: ../src/pd_menus.tcl:45 -msgid "File" -msgstr "ਫਾਇਲ" +msgid "Try to remove libraries before (re)installing them?" +msgstr "" -#: ../src/pd_menus.tcl:45 ../src/pdtk_canvas.tcl:48 ../src/pdtk_canvas.tcl:110 -#: ../src/pdtk_canvas.tcl:113 -msgid "Help" -msgstr "ਸਹਾਇਤਾ" +msgid "Show README of newly installed libraries (if present)?" +msgstr "" -#: ../src/pd_menus.tcl:45 -#, fuzzy -msgid "Media" -msgstr "ਮੈਕਡੋਨੀਆ" +msgid "Should newly installed libraries be added to Pd's search path?" +msgstr "" -#: ../src/pd_menus.tcl:45 -msgid "Put" +msgid "Platform settings:" msgstr "" -#: ../src/pd_menus.tcl:45 -#, fuzzy -msgid "Window" -msgstr "ਝਰੋਖਾ(_W)" +#, tcl-format +msgid "Default platform: %s" +msgstr "" + +msgid "User-defined platform:" +msgstr "" + +msgid "Hide foreign architectures?" +msgstr "" + +#, fuzzy, tcl-format +msgid "Deken %s Preferences" +msgstr "ਮੇਰੀ ਪਸੰਦ..." + +msgid "[deken]: Start searching for externals..." +msgstr "" + +#, tcl-format +msgid "[deken]: online? %s" +msgstr "" + +msgid "Are you online?" +msgstr "" + +msgid "Unable to perform search." +msgstr "" + +msgid "[deken]: No matching externals found." +msgstr "" + +msgid "Try using the full name e.g. 'freeverb'." +msgstr "" + +msgid "No matching externals found." +msgstr "" + +msgid "Please select a (writable) installation directory!" +msgstr "" + +#, tcl-format +msgid "Install %1$s to %2$s?" +msgstr "" + +#, tcl-format +msgid "" +"Commencing downloading of:\n" +"%1$s\n" +"Into %2$s..." +msgstr "" + +msgid "aborting.\n" +msgstr "" + +#, tcl-format +msgid "Unable to add %s to search paths" +msgstr "" + +#, tcl-format +msgid "Add %s to the Pd search paths?" +msgstr "" + +#, tcl-format +msgid "Added %s to search paths" +msgstr "" + +#, tcl-format +msgid "Unable to download from %1$s [%2$s]" +msgstr "" + +#, tcl-format +msgid "Unable to remove stray file %s" +msgstr "" + +#, tcl-format +msgid "Unable to rename downloaded file to %s" +msgstr "" + +#, fuzzy, tcl-format +msgid "searching for '%s'" +msgstr "ਪਾਠ ਖੋਜ..." + +#, tcl-format +msgid "Uploaded by %1$s @ %2$s" +msgstr "" + +msgid "Install package" +msgstr "" + +msgid "Open webpage" +msgstr "" + +msgid "_" +msgstr "" + +#, tcl-format +msgid "" +"Do you want Pd to create a documents directory for patches and external " +"libraries?\n" +"\n" +"Location: %s\n" +"\n" +"You can change or disable this later in the Path preferences." +msgstr "" + +#, tcl-format +msgid "" +"Pd documents directory cannot be found:\n" +"\n" +"%s\n" +"\n" +"Choose a new location?" +msgstr "" + +#, tcl-format +msgid "Couldn't create Pd documents directory: %s\n" +msgstr "" + +#, tcl-format +msgid "Couldn't create \"externals\" directory in: %s\n" +msgstr "" + +#, tcl-format +msgid "Couldn't create preferences \"%1$s\" in %2$s" +msgstr "" -#: ../src/pd_menus.tcl:81 ../src/pd_menus.tcl:82 ../src/pd_menus.tcl:127 -#: ../src/pd_menus.tcl:128 ../src/pd_menus.tcl:255 ../src/pd_menus.tcl:267 -#: ../src/pd_menus.tcl:285 ../src/pd_menus.tcl:298 ../src/pd_menus.tcl:322 -#: ../src/pd_menus.tcl:335 ../src/pd_menus.tcl:349 ../src/pd_menus.tcl:376 -#: ../src/pd_menus.tcl:380 ../src/pd_menus.tcl:407 ../src/pd_menus.tcl:419 -#: ../src/pd_menus.tcl:446 #, fuzzy -msgid "New" -msgstr "ਨਵਾਂ(_N)" +msgid "About Pd" +msgstr "ਇਸ ਬਾਰੇ(_A)" -#: ../src/pd_menus.tcl:82 ../src/pd_menus.tcl:83 ../src/pd_menus.tcl:128 -#: ../src/pd_menus.tcl:129 ../src/pd_menus.tcl:256 ../src/pd_menus.tcl:268 -#: ../src/pd_menus.tcl:286 ../src/pd_menus.tcl:299 ../src/pd_menus.tcl:323 -#: ../src/pd_menus.tcl:336 ../src/pd_menus.tcl:350 ../src/pd_menus.tcl:377 -#: ../src/pd_menus.tcl:381 ../src/pd_menus.tcl:408 ../src/pd_menus.tcl:420 -#: ../src/pd_menus.tcl:447 ../src/pdtk_canvas.tcl:46 -#: ../src/pdtk_canvas.tcl:108 ../src/pdtk_canvas.tcl:111 -#: ../src/pdtk_canvas.tcl:128 ../src/pdtk_canvas.tcl:130 -#: ../src/pdtk_canvas.tcl:131 ../src/pdtk_canvas.tcl:133 -msgid "Open" -msgstr "ਖੋਲੋ" +msgid "Save" +msgstr "ਸੰਭਾਲੋ" -#: ../src/pd_menus.tcl:84 ../src/pd_menus.tcl:85 ../src/pd_menus.tcl:130 -#: ../src/pd_menus.tcl:131 ../src/pd_menus.tcl:261 ../src/pd_menus.tcl:274 -#: ../src/pd_menus.tcl:289 ../src/pd_menus.tcl:302 ../src/pd_menus.tcl:326 -#: ../src/pd_menus.tcl:339 ../src/pd_menus.tcl:356 ../src/pd_menus.tcl:383 -#: ../src/pd_menus.tcl:384 ../src/pd_menus.tcl:411 ../src/pd_menus.tcl:423 -#: ../src/pd_menus.tcl:450 msgid "Save As..." msgstr "ਇੰਞ ਸੰਭਾਲੋ..." -#: ../src/pd_menus.tcl:88 ../src/pd_menus.tcl:89 ../src/pd_menus.tcl:134 -#: ../src/pd_menus.tcl:135 ../src/pd_menus.tcl:267 ../src/pd_menus.tcl:280 -#: ../src/pd_menus.tcl:293 ../src/pd_menus.tcl:306 ../src/pd_menus.tcl:330 -#: ../src/pd_menus.tcl:343 ../src/pd_menus.tcl:362 ../src/pd_menus.tcl:388 -#: ../src/pd_menus.tcl:389 ../src/pd_menus.tcl:415 ../src/pd_menus.tcl:427 -#: ../src/pd_menus.tcl:454 #, fuzzy msgid "Print..." msgstr "ਸੋਧ(_E)..." -#: ../src/pd_menus.tcl:93 ../src/pd_menus.tcl:94 ../src/pd_menus.tcl:139 -#: ../src/pd_menus.tcl:140 -#, fuzzy -msgid "Undo" -msgstr "ਯੂਗਾਂਡਾ" - -#: ../src/pd_menus.tcl:95 ../src/pd_menus.tcl:96 ../src/pd_menus.tcl:141 -#: ../src/pd_menus.tcl:142 -#, fuzzy -msgid "Redo" -msgstr "ਲਾਲ:" - -#: ../src/pd_menus.tcl:98 ../src/pd_menus.tcl:99 ../src/pd_menus.tcl:144 -#: ../src/pd_menus.tcl:145 -msgid "Cut" +msgid "Paste Replace" msgstr "" -#: ../src/pd_menus.tcl:104 ../src/pd_menus.tcl:105 ../src/pd_menus.tcl:150 -#: ../src/pd_menus.tcl:151 #, fuzzy msgid "Duplicate" msgstr "ਮਿਤੀ" -#: ../src/pd_menus.tcl:106 ../src/pd_menus.tcl:107 ../src/pd_menus.tcl:152 -#: ../src/pd_menus.tcl:153 #, fuzzy -msgid "Select All" -msgstr "ਚੋਣ ਰੰਗ" +msgid "Zoom In" +msgstr "ਹੇਠਾਂ" -#: ../src/pd_menus.tcl:110 ../src/pd_menus.tcl:111 ../src/pd_menus.tcl:115 -#: ../src/pd_menus.tcl:116 ../src/pd_menus.tcl:156 ../src/pd_menus.tcl:157 -#: ../src/pd_menus.tcl:161 ../src/pd_menus.tcl:162 #, fuzzy -msgid "Text Editor" -msgstr "ਪਾਠ ਰੰਗ" +msgid "Zoom Out" +msgstr "ਹੇਠਾਂ" -#: ../src/pd_menus.tcl:120 ../src/pd_menus.tcl:121 ../src/pd_menus.tcl:166 -#: ../src/pd_menus.tcl:167 msgid "Tidy Up" msgstr "" -#: ../src/pd_menus.tcl:122 ../src/pd_menus.tcl:123 ../src/pd_menus.tcl:168 -#: ../src/pd_menus.tcl:169 -msgid "Toggle Console" +msgid "(Dis)Connect Selection" msgstr "" -#: ../src/pd_menus.tcl:124 ../src/pd_menus.tcl:125 ../src/pd_menus.tcl:170 -#: ../src/pd_menus.tcl:171 -#, fuzzy -msgid "Clear Console" -msgstr "ਸੂਚੀ ਸਾਫ਼" +msgid "Triggerize" +msgstr "" -#: ../src/pd_menus.tcl:128 ../src/pd_menus.tcl:129 ../src/pd_menus.tcl:174 -#: ../src/pd_menus.tcl:175 #, fuzzy msgid "Edit Mode" msgstr "ਮੋਡ" -#: ../src/pd_menus.tcl:145 ../src/pd_menus.tcl:190 ../src/pd_menus.tcl:191 -msgid "Object" -msgstr "" +#, fuzzy +msgid "Undo" +msgstr "ਯੂਗਾਂਡਾ" -#: ../src/pd_menus.tcl:149 ../src/pd_menus.tcl:194 ../src/pd_menus.tcl:195 #, fuzzy -msgid "Number" -msgstr "$ ਅੰਕ" +msgid "Redo" +msgstr "ਲਾਲ:" -#: ../src/pd_menus.tcl:151 ../src/pd_menus.tcl:196 ../src/pd_menus.tcl:197 -msgid "Symbol" +msgid "List of objects..." msgstr "" -#: ../src/pd_menus.tcl:153 ../src/pd_menus.tcl:198 ../src/pd_menus.tcl:199 #, fuzzy -msgid "Comment" -msgstr "ਕਮਾਂਡ" - -#: ../src/pd_menus.tcl:156 ../src/pd_menus.tcl:201 ../src/pd_menus.tcl:202 -#, fuzzy -msgid "Bang" -msgstr "ਪਾਬੰਦੀ" +msgid "New" +msgstr "ਨਵਾਂ(_N)" -#: ../src/pd_menus.tcl:158 ../src/pd_menus.tcl:203 ../src/pd_menus.tcl:204 -#, fuzzy -msgid "Toggle" -msgstr "ਟੂਗੂ" +msgid "Open" +msgstr "ਖੋਲੋ" -#: ../src/pd_menus.tcl:160 ../src/pd_menus.tcl:205 ../src/pd_menus.tcl:206 #, fuzzy -msgid "Number2" -msgstr "$ ਅੰਕ" +msgid "Message..." +msgstr "ਸੁਨੇਹਾ" -#: ../src/pd_menus.tcl:162 ../src/pd_menus.tcl:207 ../src/pd_menus.tcl:208 -msgid "Vslider" +msgid "Cut" msgstr "" -#: ../src/pd_menus.tcl:164 ../src/pd_menus.tcl:209 ../src/pd_menus.tcl:210 #, fuzzy -msgid "Hslider" -msgstr "ਓਹਲੇ" +msgid "Select All" +msgstr "ਚੋਣ ਰੰਗ" -#: ../src/pd_menus.tcl:166 ../src/pd_menus.tcl:211 ../src/pd_menus.tcl:212 #, fuzzy -msgid "Vradio" -msgstr "ਵਰਜਨ" +msgid "Clear Console" +msgstr "ਸੂਚੀ ਸਾਫ਼" -#: ../src/pd_menus.tcl:168 ../src/pd_menus.tcl:213 ../src/pd_menus.tcl:214 -msgid "Hradio" +msgid "Object" msgstr "" -#: ../src/pd_menus.tcl:170 ../src/pd_menus.tcl:215 ../src/pd_menus.tcl:216 -msgid "VU Meter" +msgid "Message" +msgstr "ਸੁਨੇਹਾ" + +#, fuzzy +msgid "Number" +msgstr "$ ਅੰਕ" + +msgid "Symbol" msgstr "" -#: ../src/pd_menus.tcl:172 ../src/pd_menus.tcl:217 ../src/pd_menus.tcl:218 #, fuzzy -msgid "Canvas" -msgstr "ਕੈਨੇਡਾ" +msgid "Comment" +msgstr "ਕਮਾਂਡ" -#: ../src/pd_menus.tcl:175 ../src/pd_menus.tcl:220 ../src/pd_menus.tcl:221 msgid "Graph" msgstr "ਗਰਾਫ਼" -#: ../src/pd_menus.tcl:176 ../src/pd_menus.tcl:221 ../src/pd_menus.tcl:222 -#, fuzzy -msgid "Array" -msgstr "ਅਡੂਰਾ" - -#: ../src/pd_menus.tcl:181 ../src/pd_menus.tcl:226 ../src/pd_menus.tcl:227 #, fuzzy msgid "Find..." msgstr "ਖੋਜ" -#: ../src/pd_menus.tcl:183 ../src/pd_menus.tcl:228 ../src/pd_menus.tcl:229 msgid "Find Again" msgstr "" -#: ../src/pd_menus.tcl:185 ../src/pd_menus.tcl:230 ../src/pd_menus.tcl:231 msgid "Find Last Error" msgstr "" -#: ../src/pd_menus.tcl:191 ../src/pd_menus.tcl:236 ../src/pd_menus.tcl:237 msgid "DSP On" msgstr "" -#: ../src/pd_menus.tcl:193 ../src/pd_menus.tcl:238 ../src/pd_menus.tcl:239 #, fuzzy msgid "DSP Off" msgstr "ਬੰਦ" -#: ../src/pd_menus.tcl:196 ../src/pd_menus.tcl:242 ../src/pd_menus.tcl:269 msgid "Test Audio and MIDI..." msgstr "" -#: ../src/pd_menus.tcl:198 ../src/pd_menus.tcl:244 ../src/pd_menus.tcl:271 msgid "Load Meter" msgstr "" -#: ../src/pd_menus.tcl:205 ../src/pd_menus.tcl:251 ../src/pd_menus.tcl:278 +msgid "Audio Settings..." +msgstr "" + +msgid "MIDI Settings..." +msgstr "" + msgid "Minimize" msgstr "" -#: ../src/pd_menus.tcl:207 ../src/pd_menus.tcl:253 ../src/pd_menus.tcl:280 #, fuzzy msgid "Zoom" msgstr "ਹੇਠਾਂ" -#: ../src/pd_menus.tcl:210 ../src/pd_menus.tcl:256 ../src/pd_menus.tcl:283 +msgid "Bring All to Front" +msgstr "" + #, fuzzy -msgid "Parent Window" +msgid "Next Window" msgstr "ਭੇਜਣ ਝਰੋਖਾ" -#: ../src/pd_menus.tcl:216 ../src/pd_menus.tcl:262 ../src/pd_menus.tcl:289 -msgid "Bring All to Front" -msgstr "" +#, fuzzy +msgid "Previous Window" +msgstr "ਭੇਜਣ ਝਰੋਖਾ" -#: ../src/pd_menus.tcl:224 ../src/pd_menus.tcl:241 ../src/pd_menus.tcl:253 -#: ../src/pd_menus.tcl:270 ../src/pd_menus.tcl:297 ../src/pd_menus.tcl:335 -#: ../src/pd_menus.tcl:362 #, fuzzy -msgid "About Pd" -msgstr "ਇਸ ਬਾਰੇ(_A)" +msgid "Parent Window" +msgstr "ਭੇਜਣ ਝਰੋਖਾ" -#: ../src/pd_menus.tcl:227 ../src/pd_menus.tcl:273 ../src/pd_menus.tcl:300 msgid "HTML Manual..." msgstr "" -#: ../src/pd_menus.tcl:229 ../src/pd_menus.tcl:275 ../src/pd_menus.tcl:302 #, fuzzy msgid "Browser..." msgstr "ਝਲਕ..." -#: ../src/pd_menus.tcl:248 ../src/pd_menus.tcl:260 ../src/pd_menus.tcl:342 -#: ../src/pd_menus.tcl:369 -msgid "Preferences..." +msgid "puredata.info" +msgstr "" + +msgid "Report a bug" +msgstr "" + +#, fuzzy +msgid "Clear Menu" +msgstr "ਸੂਚੀ ਸਾਫ਼" + +msgid "" +"Delete all preferences?\n" +"(takes effect when Pd is restarted)" +msgstr "" + +msgid "Path..." +msgstr "" + +msgid "Startup..." +msgstr "" + +msgid "Audio..." +msgstr "" + +msgid "MIDI..." +msgstr "" + +#, fuzzy +msgid "Zoom New Windows" +msgstr "ਭੇਜਣ ਝਰੋਖਾ" + +#, fuzzy +msgid "Save All Preferences" msgstr "ਮੇਰੀ ਪਸੰਦ..." -#: ../src/pd_menus.tcl:257 ../src/pd_menus.tcl:270 ../src/pd_menus.tcl:352 -#: ../src/pd_menus.tcl:379 -msgid "Open Recent" +#, fuzzy +msgid "Save to..." +msgstr "ਇੰਞ ਸੰਭਾਲੋ..." + +msgid "Load from..." msgstr "" -#: ../src/pd_menus.tcl:263 -msgid "Audio Settings..." +msgid "Forget All..." msgstr "" -#: ../src/pd_menus.tcl:265 -msgid "MIDI Settings..." +msgid "Open Recent" msgstr "" -#: ../src/pd_menus.tcl:296 ../src/pd_menus.tcl:309 ../src/pd_menus.tcl:333 -#: ../src/pd_menus.tcl:346 ../src/pd_menus.tcl:393 ../src/pd_menus.tcl:420 -#: ../src/pd_menus.tcl:432 ../src/pd_menus.tcl:459 #, fuzzy msgid "Quit" msgstr "ਬਾਹਰ(_Q)" -#: ../src/pd_menus.tcl:304 ../src/pd_menus.tcl:331 -#, fuzzy -msgid "Clear Menu" -msgstr "ਸੂਚੀ ਸਾਫ਼" - -#: ../src/pdtk_canvas.tcl:44 ../src/pdtk_canvas.tcl:106 -#: ../src/pdtk_canvas.tcl:109 ../src/pdtk_canvas.tcl:123 -#: ../src/pdtk_canvas.tcl:125 ../src/pdtk_canvas.tcl:126 -#: ../src/pdtk_canvas.tcl:128 msgid "Properties" msgstr "" -#: ../src/pdwindow.tcl:43 +msgid "Audio on" +msgstr "" + +msgid "Audio off" +msgstr "" + +msgid "(Tcl) MISSING CLOSE-BRACKET ']': " +msgstr "" + +msgid "Tcl:" +msgstr "" + +msgid "Pd" +msgstr "" + #, fuzzy msgid "DSP" msgstr "ਬੰਦ" -#: ../startup/object_db.tcl:113 -msgid "Signal" +msgid "Audio I/O error" msgstr "" -#: ../startup/object_db.tcl:114 -msgid "Generators" +msgid "Log:" msgstr "" -#: ../startup/object_db.tcl:115 -#, fuzzy -msgid "Filters" -msgstr "ਫਾਇਲ" +msgid "fatal" +msgstr "" -#: ../startup/object_db.tcl:116 ../startup/object_db.tcl:124 -msgid "Math" +msgid "error" msgstr "" -#: ../startup/object_db.tcl:117 ../startup/object_db.tcl:125 -msgid "I/O" +msgid "normal" msgstr "" -#: ../startup/object_db.tcl:118 ../startup/object_db.tcl:126 -msgid "Sampling" +msgid "debug" msgstr "" -#: ../startup/object_db.tcl:119 ../startup/object_db.tcl:128 -msgid "Routing" +msgid "all" msgstr "" -#: ../startup/object_db.tcl:120 ../startup/object_db.tcl:129 -msgid "Others" +msgid "New..." msgstr "" -#: ../startup/object_db.tcl:127 -msgid "GUI" +#, fuzzy +msgid "Edit..." +msgstr "ਸੋਧ(_E)" + +#, fuzzy +msgid "Delete" +msgstr "ਹਟਾਓ" + +#, tcl-format +msgid "Ignoring '%s': doesn't exist" msgstr "" + +#, tcl-format +msgid "Ignoring '%s': doesn't look like a Pd-file" +msgstr "" + +#, fuzzy +#~ msgid "for:" +#~ msgstr "ਪੋਰਟ:" + +#~ msgid "Preferences..." +#~ msgstr "ਮੇਰੀ ਪਸੰਦ..." + +#, fuzzy +#~ msgid "Close this window??" +#~ msgstr "ਝਰੋਖਾ ਬੰਦ(_C)" + +#, fuzzy +#~ msgid "Pd Files" +#~ msgstr "ਫਾਇਲ" + +#, fuzzy +#~ msgid "Filters" +#~ msgstr "ਫਾਇਲ" + +#, fuzzy +#~ msgid "Text Editor" +#~ msgstr "ਪਾਠ ਰੰਗ" diff --git a/po/pd_dynamic_strings.tcl b/po/pd_dynamic_strings.tcl index 32b14a1b28..984dde95cb 100644 --- a/po/pd_dynamic_strings.tcl +++ b/po/pd_dynamic_strings.tcl @@ -27,3 +27,30 @@ puts [_ "Redo duplicate"] puts [_ "Redo motion"] puts [_ "Redo paste"] puts [_ "Redo typing"] + +# preferences feedback strings in s_file.c + +puts [_ "no Pd settings to clear"] +puts [_ "removed .pdsettings file"] +puts [_ "couldn't delete .pdsettings file"] +puts [_ "failed to erase Pd settings"] +puts [_ "erased Pd settings"] +puts [_ "no Pd settings to erase"] +puts [_ "skipping loading preferences... Pd seems to have crashed on startup."] +puts [_ "(re-save preferences to reinstate them)"] + +# These are strings which, for some reason or another, are used in the Pd GUI +# Tcl, but xgettext doesn't find them. + +# Menu Titles +puts [_ "File"] +puts [_ "Edit"] +puts [_ "Put"] +puts [_ "Find"] +puts [_ "Media"] +puts [_ "Window"] +puts [_ "Help"] + +# These are strings built into Tk that msgcat should know about. + +puts [_ "Show &Hidden Files and Directories"] diff --git a/po/pt_br.po b/po/pt_br.po index 64706cbc5f..1ac69e54c0 100644 --- a/po/pt_br.po +++ b/po/pt_br.po @@ -1,1342 +1,1240 @@ # Brazilian Portuguese translation of Pure Data. # This file is put in the public domain -# +# msgid "" msgstr "" "Project-Id-Version: Pure Data 0.43\n" "Report-Msgid-Bugs-To: pd-dev@iem.at\n" -"POT-Creation-Date: 2010-01-17 19:19-0500\n" -"PO-Revision-Date: 2010-01-23 03:45-0200\n" -"Last-Translator: Vilson Vieira \n" +"POT-Creation-Date: 2017-07-06 18:10+0200\n" +"PO-Revision-Date: 2018-09-11 16:26+0200\n" +"Last-Translator: Alexandre Torres Porres\n" "Language-Team: \n" +"Language: pt_BR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 2.1.1\n" + +# iemgui +msgid "-------dimensions(digits)(pix):-------" +msgstr "------dimensões(dígitos)(pix):--------" + +# iemgui +msgid "--------dimensions(pix)(pix):--------" +msgstr "--------dimensões(pix)(pix):---------" + +# iemgui +msgid "----------dimensions(pix):-----------" +msgstr "----------dimensões(pix):------------" + +# iemgui +msgid "--------flash-time(ms)(ms):---------" +msgstr "-----tempo-de-piscagem(ms)(ms):------" + +# iemgui +msgid "-----------output-range:-----------" +msgstr "---------limite-de-saída:----------" + +# iemgui +# iemgui +msgid "------selectable_dimensions(pix):------" +msgstr "----dimensões_selecionáveis(pix):------" + +# iemgui +msgid "------visible_rectangle(pix)(pix):------" +msgstr "-----retângulo_visível(pix)(pix):-------" + +# iemgui +msgid "bottom:" +msgstr "abaixo:" + +# iemgui +msgid "height:" +msgstr "altura:" + +# iemgui +msgid "hold:" +msgstr "segurar:" + +# iemgui +msgid "intrrpt:" +msgstr "interromper:" + +# iemgui +msgid "left:" +msgstr "esquerda:" + +# iemgui +msgid "lin" +msgstr "linear" + +# iemgui +msgid "log" +msgstr "logarítmico" + +# iemgui +msgid "log-height:" +msgstr "altura-do-log:" + +# iemgui +msgid "max:" +msgstr "máximo:" + +# iemgui +msgid "min:" +msgstr "mínimo:" + +# iemgui +msgid "right:" +msgstr "direita:" + +# iemgui +msgid "size:" +msgstr "tamanho:" + +# iemgui +msgid "top:" +msgstr "topo:" + +# iemgui +msgid "value:" +msgstr "valor:" + +# iemgui +msgid "width:" +msgstr "largura:" + +#, tcl-format +msgid "Do you want to save the changes you made in '%s'?" +msgstr "Você deseja salvar as alterações feitas em '%s'?" + +#, tcl-format +msgid "Discard changes to '%s'?" +msgstr "Descartar as mudanças feitas em '%s'?" + +msgid "Undo clear" +msgstr "Desfazer limpar" + +msgid "Undo connect" +msgstr "Desfazer conectar" + +msgid "Undo cut" +msgstr "Desfazer cortar" + +msgid "Undo disconnect" +msgstr "Desfazer desconectar" + +msgid "Undo duplicate" +msgstr "Desfazer duplicar" + +msgid "Undo motion" +msgstr "Desfazer movimentar" + +msgid "Undo paste" +msgstr "Desfazer colar" + +msgid "Undo typing" +msgstr "Desfazer digitação" + +msgid "Redo clear" +msgstr "Refazer limpar" + +msgid "Redo connect" +msgstr "Refazer conectar" + +msgid "Redo cut" +msgstr "Refazer cortar" + +msgid "Redo disconnect" +msgstr "Refazer desconectar" + +msgid "Redo duplicate" +msgstr "Refazer duplicar" + +msgid "Redo motion" +msgstr "Refazer movimentar" + +msgid "Redo paste" +msgstr "Refazer colar" + +msgid "Redo typing" +msgstr "Refazer digitação" + +msgid "no Pd settings to clear" +msgstr "nenhuma configuração do Pd para limpar" + +msgid "removed .pdsettings file" +msgstr "arquivo .pdsettings removido" + +msgid "couldn't delete .pdsettings file" +msgstr "impossível deletar arquivo .pdsettings" + +msgid "failed to erase Pd settings" +msgstr "falha ao apagar configurações do Pd" + +msgid "erased Pd settings" +msgstr "configurações do Pd apagadas" + +msgid "no Pd settings to erase" +msgstr "Nenhuma configuração do Pd para apagar" + +msgid "skipping loading preferences... Pd seems to have crashed on startup." +msgstr "" +"pulando carregar preferências... o Pd parece ter travado na inicialização." + +msgid "(re-save preferences to reinstate them)" +msgstr "(re-salvar preferências para reinstancia-las)" + +msgid "File" +msgstr "Arquivo" + +msgid "Edit" +msgstr "Editar" + +msgid "Put" +msgstr "Inserir" + +msgid "Find" +msgstr "Procurar" + +msgid "Media" +msgstr "Mídia" + +msgid "Window" +msgstr "Janela" + +msgid "Help" +msgstr "Ajuda" + +msgid "Show &Hidden Files and Directories" +msgstr "Mostrar Diretórios e Arquivos &Escondidos" -#: ../src/dialog_array.tcl:115 ../src/dialog_array.tcl:117 -#: ../src/pd_menus.tcl:100 ../src/pd_menus.tcl:101 ../src/pd_menus.tcl:146 -#: ../src/pd_menus.tcl:147 ../src/pd_menus.tcl:152 ../src/pd_menus.tcl:157 msgid "Copy" msgstr "Copiar" -#: ../src/dialog_array.tcl:118 ../src/dialog_array.tcl:120 -#: ../src/pd_menus.tcl:102 ../src/pd_menus.tcl:103 ../src/pd_menus.tcl:148 -#: ../src/pd_menus.tcl:149 ../src/pd_menus.tcl:154 ../src/pd_menus.tcl:159 msgid "Paste" msgstr "Colar" -#: ../src/dialog_array.tcl:264 ../src/dialog_array.tcl:266 msgid "Array Properties" msgstr "Propriedades do Vetor" -#: ../src/dialog_array.tcl:270 ../src/dialog_array.tcl:272 -#: ../src/dialog_array.tcl:274 +msgid "Array" +msgstr "Vetor" + msgid "Name:" msgstr "Nome:" -#: ../src/dialog_array.tcl:276 ../src/dialog_array.tcl:278 -#: ../src/dialog_array.tcl:280 ../src/dialog_canvas.tcl:178 -#: ../src/dialog_canvas.tcl:182 ../src/dialog_canvas.tcl:193 -#: ../src/dialog_canvas.tcl:197 ../src/dialog_iemgui.tcl:617 -#: ../src/dialog_iemgui.tcl:619 ../src/dialog_iemgui.tcl:621 -#: ../src/dialog_iemgui.tcl:626 msgid "Size:" msgstr "Tamanho:" -#: ../src/dialog_array.tcl:280 ../src/dialog_array.tcl:282 -#: ../src/dialog_array.tcl:284 msgid "Save contents" msgstr "Salvar conteúdo" -#: ../src/dialog_array.tcl:284 ../src/dialog_array.tcl:286 -#: ../src/dialog_array.tcl:288 msgid "Draw as:" msgstr "Desenhar como:" -#: ../src/dialog_array.tcl:287 ../src/dialog_array.tcl:289 -#: ../src/dialog_array.tcl:291 -msgid "Points" -msgstr "Pontos" - -#: ../src/dialog_array.tcl:289 ../src/dialog_array.tcl:291 -#: ../src/dialog_array.tcl:293 msgid "Polygon" msgstr "Polígono" -#: ../src/dialog_array.tcl:291 ../src/dialog_array.tcl:293 -#: ../src/dialog_array.tcl:295 +msgid "Points" +msgstr "Pontos" + msgid "Bezier curve" msgstr "Curva de Bezier" -#: ../src/dialog_array.tcl:297 ../src/dialog_array.tcl:299 -#: ../src/dialog_array.tcl:301 msgid "Put array into:" msgstr "Inserir vetor em:" -#: ../src/dialog_array.tcl:300 ../src/dialog_array.tcl:302 -#: ../src/dialog_array.tcl:304 msgid "New graph" msgstr "Novo gráfico" -#: ../src/dialog_array.tcl:302 ../src/dialog_array.tcl:304 -#: ../src/dialog_array.tcl:306 msgid "Last graph" msgstr "Último gráfico" -#: ../src/dialog_array.tcl:306 ../src/dialog_array.tcl:308 -#: ../src/dialog_array.tcl:310 +msgid "Options" +msgstr "Opções" + +msgid "Open List View..." +msgstr "Abrir Visualização da Lista..." + msgid "Delete array" msgstr "Excluir vetor" -#: ../src/dialog_array.tcl:312 ../src/dialog_array.tcl:314 -#: ../src/dialog_array.tcl:316 -msgid "Open List View..." -msgstr "Abrir Visualização em Lista..." - -#: ../src/dialog_array.tcl:319 ../src/dialog_array.tcl:321 -#: ../src/dialog_array.tcl:323 ../src/dialog_audio.tcl:136 -#: ../src/dialog_audio.tcl:138 ../src/dialog_audio.tcl:144 -#: ../src/dialog_canvas.tcl:205 ../src/dialog_canvas.tcl:209 -#: ../src/dialog_find.tcl:160 ../src/dialog_font.tcl:51 -#: ../src/dialog_gatom.tcl:153 ../src/dialog_gatom.tcl:157 -#: ../src/dialog_gatom.tcl:161 ../src/dialog_iemgui.tcl:738 -#: ../src/dialog_iemgui.tcl:742 ../src/dialog_iemgui.tcl:747 -#: ../src/dialog_iemgui.tcl:748 ../src/dialog_midi.tcl:91 -#: ../src/dialog_midi.tcl:93 ../src/dialog_midi.tcl:97 -#: ../src/dialog_midi.tcl:226 ../src/dialog_midi.tcl:228 -#: ../src/dialog_midi.tcl:232 ../src/scrollboxwindow.tcl:82 msgid "Cancel" msgstr "Cancelar" -#: ../src/dialog_array.tcl:321 ../src/dialog_array.tcl:323 -#: ../src/dialog_array.tcl:327 ../src/dialog_audio.tcl:138 -#: ../src/dialog_audio.tcl:140 ../src/dialog_audio.tcl:148 -#: ../src/dialog_canvas.tcl:207 ../src/dialog_canvas.tcl:213 -#: ../src/dialog_gatom.tcl:156 ../src/dialog_gatom.tcl:161 -#: ../src/dialog_gatom.tcl:164 ../src/dialog_iemgui.tcl:741 -#: ../src/dialog_iemgui.tcl:745 ../src/dialog_iemgui.tcl:751 -#: ../src/dialog_midi.tcl:93 ../src/dialog_midi.tcl:95 -#: ../src/dialog_midi.tcl:99 ../src/dialog_midi.tcl:228 -#: ../src/dialog_midi.tcl:230 ../src/dialog_midi.tcl:234 -#: ../src/scrollboxwindow.tcl:84 msgid "Apply" msgstr "Aplicar" -#: ../src/dialog_array.tcl:323 ../src/dialog_array.tcl:325 -#: ../src/dialog_array.tcl:331 ../src/dialog_audio.tcl:140 -#: ../src/dialog_audio.tcl:142 ../src/dialog_audio.tcl:152 -#: ../src/dialog_canvas.tcl:209 ../src/dialog_canvas.tcl:217 -#: ../src/dialog_font.tcl:53 ../src/dialog_font.tcl:92 -#: ../src/dialog_font.tcl:100 ../src/dialog_font.tcl:101 -#: ../src/dialog_font.tcl:103 ../src/dialog_gatom.tcl:159 -#: ../src/dialog_gatom.tcl:165 ../src/dialog_gatom.tcl:167 -#: ../src/dialog_iemgui.tcl:744 ../src/dialog_iemgui.tcl:748 -#: ../src/dialog_iemgui.tcl:754 ../src/dialog_iemgui.tcl:755 -#: ../src/dialog_midi.tcl:95 ../src/dialog_midi.tcl:97 -#: ../src/dialog_midi.tcl:101 ../src/dialog_midi.tcl:230 -#: ../src/dialog_midi.tcl:232 ../src/dialog_midi.tcl:236 -#: ../src/dialog_startup.tcl:29 ../src/dialog_startup.tcl:30 -#: ../src/scrollboxwindow.tcl:86 msgid "OK" msgstr "OK" -#: ../src/dialog_audio.tcl:130 ../src/dialog_audio.tcl:132 msgid "Audio Settings" msgstr "Configurações de Áudio" -#: ../src/dialog_audio.tcl:142 ../src/dialog_audio.tcl:144 -#: ../src/dialog_audio.tcl:156 -msgid "Save all settings" -msgstr "Salvar todas as configurações" +msgid "Settings" +msgstr "Configurações" -#: ../src/dialog_audio.tcl:151 ../src/dialog_audio.tcl:153 -#: ../src/dialog_audio.tcl:164 msgid "Sample rate:" msgstr "Taxa de amostragem:" -#: ../src/dialog_audio.tcl:153 ../src/dialog_audio.tcl:155 -#: ../src/dialog_audio.tcl:166 msgid "Delay (msec):" -msgstr "Delay (ms):" +msgstr "Latência (ms):" + +# iemgui +msgid "Block size:" +msgstr "Tamanho do bloco:" -#: ../src/dialog_audio.tcl:158 ../src/dialog_audio.tcl:160 -#: ../src/dialog_audio.tcl:172 msgid "Use callbacks" msgstr "Usar callbacks" -#: ../src/dialog_audio.tcl:166 ../src/dialog_audio.tcl:168 -#: ../src/dialog_audio.tcl:180 ../src/dialog_midi.tcl:105 -#: ../src/dialog_midi.tcl:107 ../src/dialog_midi.tcl:111 -#: ../src/dialog_midi.tcl:241 ../src/dialog_midi.tcl:243 -#: ../src/dialog_midi.tcl:247 -msgid "Input device 1:" -msgstr "Dispositivo de entrada 1:" - -#: ../src/dialog_audio.tcl:169 ../src/dialog_audio.tcl:171 -#: ../src/dialog_audio.tcl:183 ../src/dialog_audio.tcl:185 -#: ../src/dialog_audio.tcl:198 ../src/dialog_audio.tcl:200 -#: ../src/dialog_audio.tcl:213 ../src/dialog_audio.tcl:214 -#: ../src/dialog_audio.tcl:215 ../src/dialog_audio.tcl:229 -#: ../src/dialog_audio.tcl:232 ../src/dialog_audio.tcl:234 -#: ../src/dialog_audio.tcl:249 ../src/dialog_audio.tcl:250 -#: ../src/dialog_audio.tcl:252 ../src/dialog_audio.tcl:265 -#: ../src/dialog_audio.tcl:267 ../src/dialog_audio.tcl:268 -#: ../src/dialog_audio.tcl:280 ../src/dialog_audio.tcl:282 -#: ../src/dialog_audio.tcl:284 ../src/dialog_audio.tcl:300 +msgid "Input Devices" +msgstr "Dispositivos de Entrada" + msgid "Channels:" msgstr "Canais:" -#: ../src/dialog_audio.tcl:179 ../src/dialog_audio.tcl:181 -#: ../src/dialog_audio.tcl:194 ../src/dialog_midi.tcl:115 -#: ../src/dialog_midi.tcl:117 ../src/dialog_midi.tcl:121 -#: ../src/dialog_midi.tcl:251 ../src/dialog_midi.tcl:253 -#: ../src/dialog_midi.tcl:257 -msgid "Input device 2:" -msgstr "Dispositivo de entrada 2:" - -#: ../src/dialog_audio.tcl:194 ../src/dialog_audio.tcl:196 -#: ../src/dialog_audio.tcl:210 ../src/dialog_midi.tcl:127 -#: ../src/dialog_midi.tcl:129 ../src/dialog_midi.tcl:133 -#: ../src/dialog_midi.tcl:263 ../src/dialog_midi.tcl:265 -#: ../src/dialog_midi.tcl:269 -msgid "Input device 3:" -msgstr "Dispositivo de entrada 3:" - -#: ../src/dialog_audio.tcl:209 ../src/dialog_audio.tcl:211 -#: ../src/dialog_audio.tcl:225 ../src/dialog_midi.tcl:139 -#: ../src/dialog_midi.tcl:141 ../src/dialog_midi.tcl:145 -#: ../src/dialog_midi.tcl:275 ../src/dialog_midi.tcl:277 -#: ../src/dialog_midi.tcl:281 -msgid "Input device 4:" -msgstr "Dispositivo de entrada 4:" - -#: ../src/dialog_audio.tcl:223 ../src/dialog_audio.tcl:225 -#: ../src/dialog_audio.tcl:240 ../src/dialog_midi.tcl:150 -#: ../src/dialog_midi.tcl:152 ../src/dialog_midi.tcl:156 -#: ../src/dialog_midi.tcl:286 ../src/dialog_midi.tcl:288 -#: ../src/dialog_midi.tcl:292 -msgid "Output device 1:" -msgstr "Dispositivo de saída 1:" - -#: ../src/dialog_audio.tcl:226 ../src/dialog_audio.tcl:228 -#: ../src/dialog_audio.tcl:243 -msgid "(same as input device) .............. " -msgstr "(mesmo que o dispositivo de entrada) .............. " - -#: ../src/dialog_audio.tcl:246 ../src/dialog_audio.tcl:248 -#: ../src/dialog_audio.tcl:264 ../src/dialog_midi.tcl:160 -#: ../src/dialog_midi.tcl:162 ../src/dialog_midi.tcl:166 -#: ../src/dialog_midi.tcl:296 ../src/dialog_midi.tcl:298 -#: ../src/dialog_midi.tcl:302 -msgid "Output device 2:" -msgstr "Dispositivo de saída 2:" - -#: ../src/dialog_audio.tcl:261 ../src/dialog_audio.tcl:263 -#: ../src/dialog_audio.tcl:280 ../src/dialog_midi.tcl:171 -#: ../src/dialog_midi.tcl:173 ../src/dialog_midi.tcl:177 -#: ../src/dialog_midi.tcl:307 ../src/dialog_midi.tcl:309 -#: ../src/dialog_midi.tcl:313 -msgid "Output device 3:" -msgstr "Dispositivo de saída 3:" - -#: ../src/dialog_audio.tcl:276 ../src/dialog_audio.tcl:278 -#: ../src/dialog_audio.tcl:296 ../src/dialog_midi.tcl:182 -#: ../src/dialog_midi.tcl:184 ../src/dialog_midi.tcl:188 -#: ../src/dialog_midi.tcl:318 ../src/dialog_midi.tcl:320 -#: ../src/dialog_midi.tcl:324 -msgid "Output device 4:" -msgstr "Dispositivo de saída 4:" - -#: ../src/dialog_audio.tcl:291 ../src/dialog_audio.tcl:293 -#: ../src/dialog_audio.tcl:312 ../src/dialog_midi.tcl:195 -#: ../src/dialog_midi.tcl:197 ../src/dialog_midi.tcl:201 -msgid "Use multiple devices" -msgstr "Usar múltiplos dispositivos" - -#: ../src/dialog_canvas.tcl:122 +msgid "Output Devices" +msgstr "Dispositivos de Saída" + +msgid "(same as input device)..." +msgstr "(mesmo que o dispositivo de entrada)..." + +msgid "Use Multiple Devices" +msgstr "Usar Múltiplos Dispositivos" + +msgid "Save All Settings" +msgstr "Salvar Todas as Configurações" + msgid "WARNING: unknown graphme flags received in pdtk_canvas_dialog" -msgstr "AVISO: flags graphme desconhecidas recebidas em pdtk_canvas_dialog" +msgstr "" +"AVISO: marcadores 'graphme' desconhecidos recebidos em pdtk_canvas_dialog" -#: ../src/dialog_canvas.tcl:142 msgid "Canvas Properties" msgstr "Propriedades da Tela" -#: ../src/dialog_canvas.tcl:146 ../src/dialog_canvas.tcl:150 msgid "Scale" msgstr "Escala" -#: ../src/dialog_canvas.tcl:150 ../src/dialog_canvas.tcl:154 msgid "X units per pixel:" -msgstr "Unidades X por pixel:" +msgstr "X unidades por pixel:" -#: ../src/dialog_canvas.tcl:155 ../src/dialog_canvas.tcl:159 msgid "Y units per pixel:" -msgstr "Unidades Y por pixel:" +msgstr "Y unidades por pixel:" -#: ../src/dialog_canvas.tcl:159 ../src/dialog_canvas.tcl:163 msgid "Appearance on parent patch" msgstr "Aparência no patch pai" -#: ../src/dialog_canvas.tcl:161 ../src/dialog_canvas.tcl:165 msgid "Graph-On-Parent" -msgstr "Desenhar-No-Pai" +msgstr "Mostrar Gráfico no Patch Pai" -#: ../src/dialog_canvas.tcl:165 ../src/dialog_canvas.tcl:169 msgid "Hide object name and arguments" -msgstr "Esconder nome e argumentos do objeto" +msgstr "Esconder nome e argumentos" -#: ../src/dialog_canvas.tcl:170 ../src/dialog_canvas.tcl:174 msgid "Range and size" -msgstr "Registro de valores e tamanho" +msgstr "Amplitude e tamanho" -#: ../src/dialog_canvas.tcl:174 ../src/dialog_canvas.tcl:178 -msgid "X range, from" -msgstr "Registro de X, de" +msgid "X range: from" +msgstr "Amplitude de X: de" -#: ../src/dialog_canvas.tcl:176 ../src/dialog_canvas.tcl:180 -#: ../src/dialog_canvas.tcl:191 ../src/dialog_canvas.tcl:195 msgid "to" msgstr "a" -#: ../src/dialog_canvas.tcl:180 ../src/dialog_canvas.tcl:184 -#: ../src/dialog_canvas.tcl:195 ../src/dialog_canvas.tcl:199 msgid "Margin:" msgstr "Margem:" -#: ../src/dialog_canvas.tcl:189 ../src/dialog_canvas.tcl:193 -msgid "Y range, from" -msgstr "Registro de Y, de" +msgid "Y range: from" +msgstr "Amplitude de Y: de" -#: ../src/dialog_data.tcl:29 msgid "Data Properties" msgstr "Propriedades dos Dados" -#: ../src/dialog_data.tcl:37 -msgid "Send (Ctrl s)" -msgstr "Enviar (Ctrl s)" - -#: ../src/dialog_data.tcl:39 -msgid "OK (Ctrl t)" -msgstr "OK (Ctrl t)" - -#: ../src/dialog_find.tcl:63 ../src/dialog_find.tcl:66 -#: ../src/dialog_find.tcl:79 ../src/dialog_find.tcl:80 -#: ../src/dialog_find.tcl:83 ../src/dialog_find.tcl:85 -#: ../src/dialog_find.tcl:87 ../src/dialog_find.tcl:93 -#: ../src/dialog_find.tcl:101 ../src/dialog_find.tcl:105 -#: ../src/dialog_find.tcl:107 ../src/dialog_find.tcl:115 -#: ../src/dialog_find.tcl:123 ../src/dialog_find.tcl:164 -#: ../src/pd_menus.tcl:45 -msgid "Find" -msgstr "Procurar" +#, tcl-format +msgid "Found '%1$s' in %2$s" +msgstr "Encontrado '%1$s' em %2$s" -#: ../src/dialog_find.tcl:70 ../src/dialog_find.tcl:73 -#: ../src/dialog_find.tcl:87 ../src/dialog_find.tcl:91 -#: ../src/dialog_find.tcl:93 ../src/dialog_find.tcl:101 -#: ../src/dialog_find.tcl:142 -msgid "Search in" -msgstr "Procurar em" - -#: ../src/dialog_find.tcl:72 ../src/dialog_find.tcl:75 -#: ../src/dialog_find.tcl:89 ../src/dialog_find.tcl:93 -#: ../src/dialog_find.tcl:95 ../src/dialog_find.tcl:103 -#: ../src/dialog_find.tcl:144 -msgid "for:" -msgstr "por:" - -#: ../src/dialog_find.tcl:83 ../src/dialog_find.tcl:90 -#: ../src/dialog_find.tcl:104 ../src/dialog_find.tcl:108 -#: ../src/dialog_find.tcl:110 ../src/dialog_find.tcl:118 -#: ../src/dialog_find.tcl:168 ../src/pd_menus.tcl:63 ../src/pd_menus.tcl:74 -#: ../src/pd_menus.tcl:85 ../src/pd_menus.tcl:86 ../src/pd_menus.tcl:87 -#: ../src/pd_menus.tcl:95 ../src/pd_menus.tcl:111 ../src/pd_menus.tcl:118 -#: ../src/pd_menus.tcl:132 ../src/pd_menus.tcl:133 ../src/pd_menus.tcl:138 -#: ../src/pd_menus.tcl:143 ../src/pd_menus.tcl:259 ../src/pd_menus.tcl:272 -#: ../src/pd_menus.tcl:295 ../src/pd_menus.tcl:308 ../src/pd_menus.tcl:332 -#: ../src/pd_menus.tcl:345 ../src/pd_menus.tcl:354 ../src/pd_menus.tcl:381 -#: ../src/pd_menus.tcl:392 ../src/pd_menus.tcl:410 ../src/pd_menus.tcl:419 -#: ../src/pd_menus.tcl:431 ../src/pd_menus.tcl:448 ../src/pd_menus.tcl:458 -#: ../src/pd_menus.tcl:489 ../src/pd_menus.tcl:496 ../src/pd_menus.tcl:527 -#: ../src/pd_menus.tcl:574 -msgid "Close" -msgstr "Fechar" +#, tcl-format +msgid "Couldn't find '%1$s' in %2$s" +msgstr "Não foi possível encontrar '%1$s' em %2$s" -#: ../src/dialog_find.tcl:83 ../src/dialog_find.tcl:97 -#: ../src/dialog_find.tcl:101 ../src/dialog_find.tcl:103 -#: ../src/dialog_find.tcl:111 ../src/dialog_find.tcl:154 -msgid "Match whole word only" -msgstr "Casar somente palavra inteira" - -#: ../src/dialog_find.tcl:92 ../src/dialog_find.tcl:102 -#: ../src/dialog_find.tcl:143 ../src/dialog_font.tcl:49 -#: ../src/dialog_font.tcl:50 ../src/pd-gui.tcl:280 ../src/pd-gui.tcl:283 -#: ../src/pd-gui.tcl:286 ../src/pd-gui.tcl:288 ../src/pd-gui.tcl:291 -#: ../src/pd_menus.tcl:212 ../src/pd_menus.tcl:258 ../src/pd_menus.tcl:285 -#: ../src/pd_menus.tcl:289 ../src/pd_menus.tcl:296 ../src/pdwindow.tcl:33 -#: ../src/pdwindow.tcl:128 ../src/pdwindow.tcl:277 ../src/pdwindow.tcl:278 -msgid "Pd window" -msgstr "Janela do PD" +#, tcl-format +msgid "Search in %s for:" +msgstr "Procurar em %s por:" + +#, tcl-format +msgid "Showed last '%1$s' in %2$s" +msgstr "Mostrado último '%1$s' em %2$s" -#: ../src/dialog_find.tcl:105 #, tcl-format -msgid "Couldn't find '%s' in %s" -msgstr "Não foi possível encontrar '%s' em %s" +msgid "Showing '%1$d' out of %2$d items in %3$s" +msgstr "Mostrando '%1$d' de %2$d ítens em %3$s" + +msgid "Pd window" +msgstr "Janela do Pd" + +msgid "Match whole word only" +msgstr "Procurar apenas pela palavra inteira" -#: ../src/dialog_font.tcl:45 -msgid "Font Properties" -msgstr "Propriedades da Fonte" +msgid "Close" +msgstr "Fechar" -#: ../src/dialog_font.tcl:46 ../src/dialog_font.tcl:49 -#: ../src/dialog_font.tcl:54 ../src/dialog_font.tcl:55 #, tcl-format msgid "%s Font" msgstr "Fonte %s" -#: ../src/dialog_font.tcl:61 ../src/dialog_font.tcl:96 -#: ../src/dialog_font.tcl:104 ../src/dialog_font.tcl:105 -#: ../src/dialog_font.tcl:107 +msgid "Font" +msgstr "Fonte" + msgid "Font Size" msgstr "Tamanho da Fonte" -#: ../src/dialog_font.tcl:89 ../src/dialog_font.tcl:108 -#: ../src/dialog_font.tcl:116 ../src/dialog_font.tcl:117 -#: ../src/dialog_font.tcl:119 msgid "Stretch" msgstr "Esticar" -#: ../src/dialog_font.tcl:96 ../src/dialog_font.tcl:115 -#: ../src/dialog_font.tcl:123 ../src/dialog_font.tcl:124 -#: ../src/dialog_font.tcl:126 msgid "X and Y" msgstr "X e Y" -#: ../src/dialog_font.tcl:98 ../src/dialog_font.tcl:117 -#: ../src/dialog_font.tcl:125 ../src/dialog_font.tcl:126 -#: ../src/dialog_font.tcl:128 msgid "X only" msgstr "Somente X" -#: ../src/dialog_font.tcl:100 ../src/dialog_font.tcl:119 -#: ../src/dialog_font.tcl:127 ../src/dialog_font.tcl:128 -#: ../src/dialog_font.tcl:130 msgid "Y only" msgstr "Somente Y" -#: ../src/dialog_gatom.tcl:93 msgid "Atom Box Properties" -msgstr "Propriedades de Caixa de Átomos" +msgstr "Propriedades da Caixa de Átomos" -#: ../src/dialog_gatom.tcl:99 ../src/dialog_gatom.tcl:103 msgid "Width:" msgstr "Largura:" -#: ../src/dialog_gatom.tcl:103 ../src/dialog_gatom.tcl:107 msgid "Limits" msgstr "Limites" -#: ../src/dialog_gatom.tcl:107 ../src/dialog_gatom.tcl:111 msgid "Lower:" -msgstr "Menor:" +msgstr "Mínimo:" -#: ../src/dialog_gatom.tcl:112 ../src/dialog_gatom.tcl:113 -#: ../src/dialog_gatom.tcl:116 msgid "Upper:" -msgstr "Maior:" +msgstr "Máximo:" -#: ../src/dialog_gatom.tcl:116 ../src/dialog_gatom.tcl:120 -#: ../src/dialog_gatom.tcl:121 ../src/dialog_iemgui.tcl:598 -#: ../src/dialog_iemgui.tcl:600 ../src/dialog_iemgui.tcl:606 -#: ../src/dialog_iemgui.tcl:650 ../src/dialog_iemgui.tcl:652 -#: ../src/dialog_iemgui.tcl:657 ../src/dialog_iemgui.tcl:659 msgid "Label" -msgstr "Etiqueta" +msgstr "Rótulo" -#: ../src/dialog_gatom.tcl:124 ../src/dialog_gatom.tcl:128 -#: ../src/dialog_gatom.tcl:129 -msgid "Left " -msgstr "Esquerda " +msgid "Left" +msgstr "Esquerda" -#: ../src/dialog_gatom.tcl:126 ../src/dialog_gatom.tcl:130 -#: ../src/dialog_gatom.tcl:131 msgid "Right" msgstr "Direita" -#: ../src/dialog_gatom.tcl:128 ../src/dialog_gatom.tcl:132 -#: ../src/dialog_gatom.tcl:133 msgid "Top" -msgstr "Topo" +msgstr "Acima" -#: ../src/dialog_gatom.tcl:130 ../src/dialog_gatom.tcl:134 -#: ../src/dialog_gatom.tcl:135 msgid "Bottom" -msgstr "Fundo" +msgstr "Abaixo" -#: ../src/dialog_gatom.tcl:137 ../src/dialog_gatom.tcl:141 -#: ../src/dialog_gatom.tcl:145 ../src/dialog_iemgui.tcl:572 -#: ../src/dialog_iemgui.tcl:574 ../src/dialog_iemgui.tcl:576 msgid "Messages" msgstr "Mensagens" -#: ../src/dialog_gatom.tcl:141 ../src/dialog_gatom.tcl:145 -#: ../src/dialog_gatom.tcl:149 ../src/dialog_iemgui.tcl:576 -#: ../src/dialog_iemgui.tcl:578 ../src/dialog_iemgui.tcl:580 msgid "Send symbol:" msgstr "Símbolo de 'send':" -#: ../src/dialog_gatom.tcl:147 ../src/dialog_gatom.tcl:151 -#: ../src/dialog_gatom.tcl:155 ../src/dialog_iemgui.tcl:583 -#: ../src/dialog_iemgui.tcl:585 ../src/dialog_iemgui.tcl:589 msgid "Receive symbol:" msgstr "Símbolo de 'receive':" -#: ../src/dialog_iemgui.tcl:197 msgid "Background color" -msgstr "Cor de plano de fundo" +msgstr "Cor de fundo" -#: ../src/dialog_iemgui.tcl:204 msgid "Foreground color" -msgstr "Cor de plano de frente" +msgstr "Cor de frente" -#: ../src/dialog_iemgui.tcl:211 msgid "Label color" -msgstr "Cor da etiqueta" +msgstr "Cor do rótulo" -#: ../src/dialog_iemgui.tcl:272 msgid "Init" -msgstr "Inicialização" +msgstr "Com Inicialização" -#: ../src/dialog_iemgui.tcl:275 ../src/dialog_iemgui.tcl:546 -#: ../src/dialog_iemgui.tcl:550 msgid "No init" msgstr "Sem inicialização" -#: ../src/dialog_iemgui.tcl:287 ../src/dialog_iemgui.tcl:556 -#: ../src/dialog_iemgui.tcl:558 ../src/dialog_iemgui.tcl:560 msgid "Jump on click" msgstr "Pular ao clicar" -#: ../src/dialog_iemgui.tcl:290 ../src/dialog_iemgui.tcl:559 -#: ../src/dialog_iemgui.tcl:561 ../src/dialog_iemgui.tcl:563 msgid "Steady on click" msgstr "Fixo ao clicar" -#: ../src/dialog_iemgui.tcl:498 +msgid "Bang" +msgstr "Bang" + +msgid "Flash Time (msec)" +msgstr "Tempo de piscagem (ms)" + +# iemgui +msgid "Intrrpt:" +msgstr "Interromper:" + +# iemgui +msgid "Hold:" +msgstr "Segurar:" + +msgid "Toggle" +msgstr "Interruptor" + +msgid "Non Zero Value" +msgstr "Valor Ligado (Não Zero)" + +# iemgui +msgid "Value:" +msgstr "Valor:" + +msgid "Number2" +msgstr "Número2" + +msgid "Width (digits):" +msgstr "Largura (dígitos):" + +# iemgui +msgid "Height:" +msgstr "Altura:" + +msgid "Output Range" +msgstr "Limite de Saída" + +# iemgui +msgid "Log height:" +msgstr "Altura-do-log:" + +msgid "Vslider" +msgstr "Controle Deslizante Vertical" + +msgid "Hslider" +msgstr "Controle Deslizante Horizontal" + +msgid "Vradio" +msgstr "Botão Seletor Vertical" + +msgid "Num cells:" +msgstr "Número de células:" + +msgid "Hradio" +msgstr "Botão Seletor Horizontal" + +msgid "VU Meter" +msgstr "Medidor de VU" + +msgid "Canvas" +msgstr "Tela" + +# iemgui +msgid "Visible Rectangle (pix)" +msgstr "Retângulo Visível (pix)" + #, tcl-format msgid "%s Properties" msgstr "Propriedades de %s" -#: ../src/dialog_iemgui.tcl:549 ../src/dialog_iemgui.tcl:550 -#: ../src/dialog_iemgui.tcl:553 ../src/pd_menus.tcl:60 ../src/pd_menus.tcl:71 -#: ../src/pd_menus.tcl:82 ../src/pd_menus.tcl:83 ../src/pd_menus.tcl:84 -#: ../src/pd_menus.tcl:92 ../src/pd_menus.tcl:107 ../src/pd_menus.tcl:115 -#: ../src/pd_menus.tcl:129 ../src/pd_menus.tcl:130 ../src/pd_menus.tcl:135 -#: ../src/pd_menus.tcl:140 ../src/pd_menus.tcl:260 ../src/pd_menus.tcl:273 -#: ../src/pd_menus.tcl:288 ../src/pd_menus.tcl:301 ../src/pd_menus.tcl:325 -#: ../src/pd_menus.tcl:338 ../src/pd_menus.tcl:355 ../src/pd_menus.tcl:382 -#: ../src/pd_menus.tcl:383 ../src/pd_menus.tcl:410 ../src/pd_menus.tcl:411 -#: ../src/pd_menus.tcl:422 ../src/pd_menus.tcl:439 ../src/pd_menus.tcl:449 -#: ../src/pd_menus.tcl:487 ../src/pd_menus.tcl:490 ../src/pd_menus.tcl:518 -#: ../src/pd_menus.tcl:563 -msgid "Save" -msgstr "Salvar" +msgid "Parameters" +msgstr "Parâmetros" -#: ../src/dialog_iemgui.tcl:606 ../src/dialog_iemgui.tcl:608 -#: ../src/dialog_iemgui.tcl:614 -msgid "X offset" -msgstr "Deslocamento X" +msgid "X offset:" +msgstr "Deslocamento eixo X:" -#: ../src/dialog_iemgui.tcl:609 ../src/dialog_iemgui.tcl:611 -#: ../src/dialog_iemgui.tcl:612 ../src/dialog_iemgui.tcl:617 -msgid "Y offset" -msgstr "Deslocamento Y" +msgid "Y offset:" +msgstr "Deslocamento eixo Y:" -#: ../src/dialog_iemgui.tcl:640 ../src/dialog_iemgui.tcl:642 -#: ../src/dialog_iemgui.tcl:645 ../src/dialog_iemgui.tcl:649 msgid "Colors" msgstr "Cores" -#: ../src/dialog_iemgui.tcl:646 ../src/dialog_iemgui.tcl:648 -#: ../src/dialog_iemgui.tcl:651 ../src/dialog_iemgui.tcl:655 msgid "Background" -msgstr "Plano de fundo" +msgstr "Fundo" -#: ../src/dialog_iemgui.tcl:648 ../src/dialog_iemgui.tcl:650 -#: ../src/dialog_iemgui.tcl:654 ../src/dialog_iemgui.tcl:657 msgid "Front" msgstr "Frente" -#: ../src/dialog_iemgui.tcl:660 ../src/dialog_iemgui.tcl:662 -#: ../src/dialog_iemgui.tcl:668 ../src/dialog_iemgui.tcl:669 msgid "Compose color" msgstr "Compor cor" -#: ../src/dialog_iemgui.tcl:679 ../src/dialog_iemgui.tcl:682 -#: ../src/dialog_iemgui.tcl:688 msgid "Test label" -msgstr "Etiqueta de teste" +msgstr "Rótulo teste" -#: ../src/dialog_message.tcl:61 msgid "Send a Pd message" -msgstr "Enviar uma mensagem PD" +msgstr "Enviar mensagens" -#: ../src/dialog_message.tcl:80 msgid "(use arrow keys for history)" -msgstr "(use as setas do teclado para histórico)" +msgstr "(use setas para histórico)" -#: ../src/dialog_midi.tcl:85 msgid "MIDI Settings" msgstr "Configurações de MIDI" -#: ../src/dialog_midi.tcl:220 ../src/dialog_midi.tcl:222 -#: ../src/dialog_midi.tcl:226 msgid "ALSA MIDI Settings" msgstr "Configurações de ALSA MIDI" -#: ../src/dialog_midi.tcl:331 ../src/dialog_midi.tcl:333 -#: ../src/dialog_midi.tcl:337 -msgid "Use multiple ALSA devices" -msgstr "Usar múltiplos dispositivos ALSA" - -#: ../src/dialog_midi.tcl:337 ../src/dialog_midi.tcl:339 -#: ../src/dialog_midi.tcl:343 msgid "In Ports:" msgstr "Portas de Entrada:" -#: ../src/dialog_midi.tcl:340 ../src/dialog_midi.tcl:342 -#: ../src/dialog_midi.tcl:346 msgid "Out Ports:" msgstr "Portas de Saída:" -#: ../src/dialog_path.tcl:30 msgid "Pd search path for objects, help, fonts, and other files" -msgstr "Caminho de busca do PD para objetos, arquivos de ajuda, fontes e outros" +msgstr "" +"Caminho de busca do PD para objetos, arquivos de ajuda, fontes e outros" -#: ../src/dialog_path.tcl:35 -msgid "Use standard extensions" -msgstr "Usar extensões padrões" +msgid "Use standard paths" +msgstr "Usar caminhos padrões" -#: ../src/dialog_path.tcl:37 msgid "Verbose" -msgstr "Informativo" +msgstr "Detalhado" -#: ../src/dialog_startup.tcl:49 -msgid "Add new library" -msgstr "Adicionar nova biblioteca" +msgid "Pd Documents Directory" +msgstr "Diretório dos Documentos Pd" -#: ../src/dialog_startup.tcl:53 -msgid "Edit library" -msgstr "Editar biblioteca" +msgid "Browse" +msgstr "Navegar" -#: ../src/dialog_startup.tcl:79 -msgid "Pd libraries to load on startup" -msgstr "Bibliotecas PD para carregar na inicialização" +msgid "Reset" +msgstr "Resetar" -#: ../src/dialog_startup.tcl:82 -msgid "Startup flags:" -msgstr "Flags de inicialização:" +msgid "Disable" +msgstr "Desabilitar" -#: ../src/dialog_startup.tcl:91 -msgid "Defeat real-time scheduling" -msgstr "Anular agendamento em tempo real" +msgid "Externals Install Directory" +msgstr "Instalar externals no diretório:" + +msgid "Clear" +msgstr "Limpar" + +msgid "Choose Pd documents directory:" +msgstr "Escolher diretório dos documentos Pd:" -#: ../src/g_editor.c:1663 -msgid "Discard changes to this window??" -msgstr "Descartar mudanças feitas nessa janela??" +msgid "Install externals to directory:" +msgstr "Instalar externals no diretório:" -#: ../src/g_editor.c:1668 -msgid "really quit?" -msgstr "deseja realmente sair?" +msgid "Add a new path" +msgstr "Adicionar um novo caminho" -#: ../src/g_editor.c:1699 -msgid "Close this window??" -msgstr "Fechar esta janela??" +msgid "Add new library" +msgstr "Adicionar nova biblioteca" + +msgid "Edit library" +msgstr "Editar biblioteca" + +msgid "Pd libraries to load on startup" +msgstr "Bibliotecas de Pd para carregar na inicialização" + +msgid "Startup flags:" +msgstr "Marcadores de inicialização:" + +msgid "Defeat real-time scheduling" +msgstr "Anular agendamento em tempo real" -#: ../src/helpbrowser.tcl:25 msgid "Help Browser" -msgstr "Navegador da Ajuda" - -#: ../src/pd-gui.tcl:185 ../src/pd-gui.tcl:195 ../src/pd-gui.tcl:203 -#: ../src/pd-gui.tcl:206 ../src/pd-gui.tcl:215 ../src/pd-gui.tcl:218 -#: ../src/pd-gui.tcl:226 ../src/pd-gui.tcl:230 ../src/pd-gui.tcl:241 -#: ../src/pd-gui.tcl:259 ../src/pd-gui.tcl:277 ../src/pd-gui.tcl:296 -msgid "Associated Files" -msgstr "Arquivos Associados" - -#: ../src/pd-gui.tcl:186 ../src/pd-gui.tcl:196 ../src/pd-gui.tcl:204 -#: ../src/pd-gui.tcl:207 ../src/pd-gui.tcl:216 ../src/pd-gui.tcl:219 -#: ../src/pd-gui.tcl:227 ../src/pd-gui.tcl:231 ../src/pd-gui.tcl:242 -#: ../src/pd-gui.tcl:260 ../src/pd-gui.tcl:278 ../src/pd-gui.tcl:297 -msgid "Pd Files" -msgstr "Arquivos PD" - -#: ../src/pd-gui.tcl:187 ../src/pd-gui.tcl:205 ../src/pd-gui.tcl:208 -#: ../src/pd-gui.tcl:220 ../src/pd-gui.tcl:228 ../src/pd-gui.tcl:243 -#: ../src/pd-gui.tcl:261 ../src/pd-gui.tcl:298 -msgid "Max Patch Files" -msgstr "Arquivos de Patch Max" - -#: ../src/pd-gui.tcl:188 ../src/pd-gui.tcl:206 ../src/pd-gui.tcl:209 -#: ../src/pd-gui.tcl:221 ../src/pd-gui.tcl:229 ../src/pd-gui.tcl:244 -#: ../src/pd-gui.tcl:262 ../src/pd-gui.tcl:299 -msgid "Max Text Files" -msgstr "Arquivos de Texto Max" - -#: ../src/pd-gui.tcl:197 ../src/pd-gui.tcl:217 ../src/pd-gui.tcl:232 -#: ../src/pd-gui.tcl:279 -msgid "Max Patch Files (.pat)" -msgstr "Arquivos de Patch Max (.pat)" - -#: ../src/pd-gui.tcl:198 ../src/pd-gui.tcl:218 ../src/pd-gui.tcl:233 -#: ../src/pd-gui.tcl:280 -msgid "Max Text Files (.mxt)" -msgstr "Arquivos de Texto Max (.mxt)" - -#: ../src/pd-gui.tcl:270 ../src/pd-gui.tcl:290 ../src/pd-gui.tcl:305 -#: ../src/pd-gui.tcl:374 +msgstr "Navegador de Ajuda" + +msgid "(Tcl) MISSING CLOSE-BRACE '}': " +msgstr "(Tcl) FALTANDO FECHA CHAVES '}': " + +msgid "(Tcl) INVALID COMMAND NAME: " +msgstr "(Tcl) NOME DE COMANDO INVÁLIDO: " + +msgid "(Tcl) UNHANDLED ERROR: " +msgstr "(Tcl) ERRO NÃO TRATADO:" + #, tcl-format -msgid "WARNING: Font family '%s' not found, using default (%s)" -msgstr "AVISO: Fonte '%s' não encontrada, usando a padrão (%s)" +msgid "[deken]: installed version [%1$s] > %2$s...skipping!" +msgstr "[deken]: versão instalada [%1$s] > %2$s...pulando!" -#: ../src/pd-gui.tcl:278 ../src/pd-gui.tcl:298 ../src/pd-gui.tcl:313 -#: ../src/pd-gui.tcl:382 #, tcl-format -msgid "WARNING: Font weight '%s' not found, using default (%s)" -msgstr "AVISO: Tamanho de fonte '%s' não encontrado, usando o padrão (%s)" +msgid "[deken]: installed version [%1$s] < %2$s...overwriting!" +msgstr "[deken]: versão instalada [%1$s] < %2$s...sobrescrevendo!" -#: ../src/pd-gui.tcl:303 ../src/pd-gui.tcl:323 #, tcl-format -msgid "ERROR: %s failed to find font size (%s) that fits into %sx%s!" -msgstr "ERRO: %s Falha ao procurar o tamanho de fonte (%s) que caiba em %sx%s!" +msgid "[deken]: installed version [%1$s] == %2$s...skipping!" +msgstr "[deken]: versão instalada [%1$s] == %2$s...pulando!" + +msgid "[deken]: " +msgstr "[deken]: " -#: ../src/pd-gui.tcl:338 ../src/pd-gui.tcl:407 #, tcl-format -msgid "WARNING: %s failed to find font size (%s) that fits into %sx%s!" -msgstr "AVISO: %s Falha ao procurar o tamanho de fonte (%s) que caiba em %sx%s!" +msgid "Successfully unzipped %1$s into %2$s." +msgstr "%1$s descompactado em %2$s com sucesso." -#: ../src/pd-gui.tcl:478 ../src/pd-gui.tcl:483 ../src/pd-gui.tcl:501 -#: ../src/pd-gui.tcl:518 ../src/pd-gui.tcl:620 -msgid "ERROR: 'pd' never showed up, 'pd-gui' quitting!" -msgstr "ERRO: 'pd' não apareceu, 'pd-gui' saindo!" +msgid "[deken]: Unable to extract package automatically." +msgstr "[deken]: Incapaz de extrair o pacote automaticamente." -#: ../src/pd_connect.tcl:76 ../src/pd_connect.tcl:85 ../src/pdwindow.tcl:90 -#: ../src/pdwindow.tcl:239 -msgid "(Tcl) INVALID COMMAND NAME: " -msgstr "(Tcl) NOME DE COMANDO INVÁLIDO: " +msgid "Please perform the following steps manually:" +msgstr "Por favor realize os seguintes passos manualmente:" -#: ../src/pd_connect.tcl:78 ../src/pd_connect.tcl:87 ../src/pdwindow.tcl:92 -#: ../src/pdwindow.tcl:241 -msgid "(Tcl) UNHANDLED ERROR: " -msgstr "(Tcl) ERRO NÃO TRATADO:" +#, tcl-format +msgid "1. Unzip %s." +msgstr "1. Descompactar %s." -#: ../src/pd_menucommands.tcl:19 -msgid "Untitled" -msgstr "Sem título" - -#: ../src/pd_menucommands.tcl:78 ../src/pd_menucommands.tcl:79 -#: ../src/pd_menucommands.tcl:83 ../src/pd_menucommands.tcl:90 -msgid "Send Message..." -msgstr "Enviar Mensagem..." - -#: ../src/pd_menucommands.tcl:82 ../src/pd_menucommands.tcl:83 -#: ../src/pd_menucommands.tcl:87 ../src/pd_menucommands.tcl:94 -#: ../src/pd_menus.tcl:87 ../src/pd_menus.tcl:88 ../src/pd_menus.tcl:133 -#: ../src/pd_menus.tcl:134 ../src/pd_menus.tcl:144 ../src/pd_menus.tcl:147 -#: ../src/pd_menus.tcl:190 ../src/pd_menus.tcl:192 ../src/pd_menus.tcl:193 -#: ../src/pd_menus.tcl:203 ../src/pd_menus.tcl:265 ../src/pd_menus.tcl:278 -#: ../src/pd_menus.tcl:292 ../src/pd_menus.tcl:305 ../src/pd_menus.tcl:329 -#: ../src/pd_menus.tcl:342 ../src/pd_menus.tcl:360 ../src/pd_menus.tcl:387 -#: ../src/pd_menus.tcl:414 ../src/pd_menus.tcl:416 ../src/pd_menus.tcl:426 -#: ../src/pd_menus.tcl:443 ../src/pd_menus.tcl:453 ../src/pd_menus.tcl:491 -#: ../startup/object_db.tcl:123 -msgid "Message" -msgstr "Mensagem" +#, tcl-format +msgid "2. Copy the contents into %s." +msgstr "2. Copiar o conteúdo para %s." -#: ../src/pd_menucommands.tcl:108 ../src/pd_menucommands.tcl:111 -#: ../src/pd_menus.tcl:112 ../src/pd_menus.tcl:113 ../src/pd_menus.tcl:117 -#: ../src/pd_menus.tcl:118 ../src/pd_menus.tcl:158 ../src/pd_menus.tcl:159 -#: ../src/pd_menus.tcl:163 ../src/pd_menus.tcl:164 ../src/pd_menus.tcl:169 -#: ../src/pd_menus.tcl:174 -msgid "Font" -msgstr "Fonte" +#, tcl-format +msgid "[deken] uninstalling '%s'" +msgstr "[deken] desinstalando '%s'" + +#, tcl-format +msgid "Uninstalling %1$s from %2$s failed!" +msgstr "Falha ao desinstalar %1$s de %2$s!" + +#, tcl-format +msgid "[deken] deken-plugin.tcl (Pd externals search) loaded from %s." +msgstr "[deken] deken-plugin.tcl (busca de externals Pd) carregado de %s." + +#, tcl-format +msgid "[deken] Platform detected: %s" +msgstr "[deken] Platforma detectada: %s" + +#, fuzzy, tcl-format +msgid "[deken] Platform re-detected: %s" +msgstr "[deken] Platforma redetectada: %s" + +msgid "Show all" +msgstr "Mostrar todos" + +msgid "Search" +msgstr "Procurar" + +msgid "To get a list of all available externals, try an empty search." +msgstr "" +"Para receber uma lista com todos os externals disponíveis, tente uma busca " +"vazia." + +msgid "Find externals" +msgstr "Procurar por externals" + +msgid "Only install externals uploaded by people you trust." +msgstr "Instale apenas externals enviados por quem você confia." -#: ../src/pd_menucommands.tcl:123 ../src/pd_menucommands.tcl:126 -#: ../src/pd_menus.tcl:138 ../src/pd_menus.tcl:183 ../src/pd_menus.tcl:184 -#: ../src/pd_menus.tcl:194 ../src/pd_menus.tcl:267 ../src/pd_menus.tcl:475 -#: ../src/pd_menus.tcl:569 msgid "Preferences" msgstr "Preferências" -#: ../src/pd_menus.tcl:45 -msgid "Edit" -msgstr "Editar" +#, fuzzy +msgid "Installation options:" +msgstr "Instalar externals em:" -#: ../src/pd_menus.tcl:45 -msgid "File" -msgstr "Arquivo" +msgid "Try to remove libraries before (re)installing them?" +msgstr "Tentar remover bibliotecas antes de reinstala-las?" -#: ../src/pd_menus.tcl:45 ../src/pdtk_canvas.tcl:48 ../src/pdtk_canvas.tcl:110 -#: ../src/pdtk_canvas.tcl:113 ../src/pdtk_canvas.tcl:160 -msgid "Help" -msgstr "Ajuda" +msgid "Show README of newly installed libraries (if present)?" +msgstr "Mostrar README de bibliotecas recém instaladas (se presente)?" -#: ../src/pd_menus.tcl:45 -msgid "Media" -msgstr "Mídia" +msgid "Should newly installed libraries be added to Pd's search path?" +msgstr "" +"Bibliotecas recém instaladas devem ser adicionadas aos caminhos de busca do " +"Pd?" -#: ../src/pd_menus.tcl:45 -msgid "Put" -msgstr "Inserir" +msgid "Platform settings:" +msgstr "Configurações de platforma" -#: ../src/pd_menus.tcl:45 -msgid "Window" -msgstr "Janela" +#, tcl-format +msgid "Default platform: %s" +msgstr "Plataforma padrão: %s" + +msgid "User-defined platform:" +msgstr "platforma definida pelo usuário" + +msgid "Hide foreign architectures?" +msgstr "Esconder arquiteturas estrangeiras?" + +#, tcl-format +msgid "Deken %s Preferences" +msgstr "Deken %s Preferências" + +msgid "[deken]: Start searching for externals..." +msgstr "[deken]: Procurando por externals" + +#, tcl-format +msgid "[deken]: online? %s" +msgstr "[deken]: Você está online? %s" + +msgid "Are you online?" +msgstr "Você está online?" + +msgid "Unable to perform search." +msgstr "Incapaz de realizar busca." + +msgid "[deken]: No matching externals found." +msgstr "[deken]: Nenhum external encontrado." + +msgid "Try using the full name e.g. 'freeverb'." +msgstr "Tente usar o nome completo (como 'freeverb')." + +msgid "No matching externals found." +msgstr "Nenhum external encontrado." + +msgid "Please select a (writable) installation directory!" +msgstr "Por favor escolha um diretório de instalação com permissão de escrita!" + +#, tcl-format +msgid "Install %1$s to %2$s?" +msgstr "Instalar %1$s em %2$s?" + +#, tcl-format +msgid "" +"Commencing downloading of:\n" +"%1$s\n" +"Into %2$s..." +msgstr "" +"Começando a baixar:\n" +"%1$s\n" +"Em %2$s..." + +#, fuzzy +msgid "aborting.\n" +msgstr "abortando." + +#, tcl-format +msgid "Unable to add %s to search paths" +msgstr "Incapaz de adicionar %s aos caminhos de busca" + +#, tcl-format +msgid "Add %s to the Pd search paths?" +msgstr "Adicionar %s aos caminhos de busca do Pd?" + +#, tcl-format +msgid "Added %s to search paths" +msgstr "%s adicionado aos caminhos de busca" + +#, tcl-format +msgid "Unable to download from %1$s [%2$s]" +msgstr "Incapaz de baixar de %1$s [%2$s]" + +#, tcl-format +msgid "Unable to remove stray file %s" +msgstr "Incapaz de remover arquivo %s" + +#, tcl-format +msgid "Unable to rename downloaded file to %s" +msgstr "Incapaz de renomear o arquivo baixado para %s" + +#, tcl-format +msgid "searching for '%s'" +msgstr "procurando por '%s'" + +#, tcl-format +msgid "Uploaded by %1$s @ %2$s" +msgstr "Enviado por '%1$s' em %2$s" + +msgid "Install package" +msgstr "Instalar pacote" + +msgid "Open webpage" +msgstr "Abrir página da web" + +msgid "_" +msgstr "" + +#, tcl-format +msgid "" +"Do you want Pd to create a documents directory for patches and external " +"libraries?\n" +"\n" +"Location: %s\n" +"\n" +"You can change or disable this later in the Path preferences." +msgstr "" +"Você quer criar um diretório de documentos para patches e bibliotecas de " +"externals?\n" +"\n" +"Localização: %s\n" +"\n" +"Você pode mudar ou desabilitar posteriormente em Preferências/Caminho de " +"busca." + +#, tcl-format +msgid "" +"Pd documents directory cannot be found:\n" +"\n" +"%s\n" +"\n" +"Choose a new location?" +msgstr "" +"Diretórios de documentos Pd não pôde ser encontrado:\n" +"\n" +"%s\n" +"\n" +"Escolher uma nova localização?" + +#, tcl-format +msgid "Couldn't create Pd documents directory: %s\n" +msgstr "Impossível criar diretório de documentos Pd: %s\n" + +#, tcl-format +msgid "Couldn't create \"externals\" directory in: %s\n" +msgstr "Impossível criar diretório \"externals\" em: %s\n" + +#, fuzzy, tcl-format +msgid "Couldn't create preferences \"%1$s\" in %2$s" +msgstr "Não foi possível criar preferências em '%1$s' em %2$s" + +msgid "About Pd" +msgstr "Sobre o Pd" + +msgid "Save" +msgstr "Salvar" -#: ../src/pd_menus.tcl:61 ../src/pd_menus.tcl:72 ../src/pd_menus.tcl:83 -#: ../src/pd_menus.tcl:84 ../src/pd_menus.tcl:85 ../src/pd_menus.tcl:93 -#: ../src/pd_menus.tcl:108 ../src/pd_menus.tcl:116 ../src/pd_menus.tcl:130 -#: ../src/pd_menus.tcl:131 ../src/pd_menus.tcl:136 ../src/pd_menus.tcl:141 -#: ../src/pd_menus.tcl:261 ../src/pd_menus.tcl:274 ../src/pd_menus.tcl:289 -#: ../src/pd_menus.tcl:302 ../src/pd_menus.tcl:326 ../src/pd_menus.tcl:339 -#: ../src/pd_menus.tcl:356 ../src/pd_menus.tcl:383 ../src/pd_menus.tcl:384 -#: ../src/pd_menus.tcl:411 ../src/pd_menus.tcl:412 ../src/pd_menus.tcl:423 -#: ../src/pd_menus.tcl:440 ../src/pd_menus.tcl:450 ../src/pd_menus.tcl:488 -#: ../src/pd_menus.tcl:491 ../src/pd_menus.tcl:519 ../src/pd_menus.tcl:564 msgid "Save As..." msgstr "Salvar Como..." -#: ../src/pd_menus.tcl:62 ../src/pd_menus.tcl:73 ../src/pd_menus.tcl:84 -#: ../src/pd_menus.tcl:88 ../src/pd_menus.tcl:89 ../src/pd_menus.tcl:94 -#: ../src/pd_menus.tcl:109 ../src/pd_menus.tcl:117 ../src/pd_menus.tcl:134 -#: ../src/pd_menus.tcl:135 ../src/pd_menus.tcl:140 ../src/pd_menus.tcl:145 -#: ../src/pd_menus.tcl:267 ../src/pd_menus.tcl:280 ../src/pd_menus.tcl:293 -#: ../src/pd_menus.tcl:306 ../src/pd_menus.tcl:330 ../src/pd_menus.tcl:343 -#: ../src/pd_menus.tcl:362 ../src/pd_menus.tcl:388 ../src/pd_menus.tcl:389 -#: ../src/pd_menus.tcl:415 ../src/pd_menus.tcl:418 ../src/pd_menus.tcl:427 -#: ../src/pd_menus.tcl:444 ../src/pd_menus.tcl:454 ../src/pd_menus.tcl:492 -#: ../src/pd_menus.tcl:497 ../src/pd_menus.tcl:523 ../src/pd_menus.tcl:570 msgid "Print..." msgstr "Imprimir..." -#: ../src/pd_menus.tcl:65 ../src/pd_menus.tcl:76 ../src/pd_menus.tcl:87 -#: ../src/pd_menus.tcl:97 ../src/pd_menus.tcl:104 ../src/pd_menus.tcl:105 -#: ../src/pd_menus.tcl:113 ../src/pd_menus.tcl:120 ../src/pd_menus.tcl:150 -#: ../src/pd_menus.tcl:151 ../src/pd_menus.tcl:156 ../src/pd_menus.tcl:161 +msgid "Paste Replace" +msgstr "Colar Substituir" + msgid "Duplicate" msgstr "Duplicar" -#: ../src/pd_menus.tcl:66 ../src/pd_menus.tcl:77 ../src/pd_menus.tcl:88 -#: ../src/pd_menus.tcl:98 ../src/pd_menus.tcl:114 ../src/pd_menus.tcl:120 -#: ../src/pd_menus.tcl:121 ../src/pd_menus.tcl:166 ../src/pd_menus.tcl:167 -#: ../src/pd_menus.tcl:172 ../src/pd_menus.tcl:177 +msgid "Zoom In" +msgstr "Ampliar Zoom" + +msgid "Zoom Out" +msgstr "Reduzir Zoom" + msgid "Tidy Up" msgstr "Organizar" -#: ../src/pd_menus.tcl:67 ../src/pd_menus.tcl:78 ../src/pd_menus.tcl:89 -#: ../src/pd_menus.tcl:99 ../src/pd_menus.tcl:115 ../src/pd_menus.tcl:122 -#: ../src/pd_menus.tcl:128 ../src/pd_menus.tcl:129 ../src/pd_menus.tcl:174 -#: ../src/pd_menus.tcl:175 ../src/pd_menus.tcl:178 ../src/pd_menus.tcl:185 -#: ../src/pd_menus.tcl:551 ../src/pdtk_canvas.tcl:224 -#: ../src/pdtk_canvas.tcl:226 +msgid "(Dis)Connect Selection" +msgstr "(Des)Conectar Seleção" + +msgid "Triggerize" +msgstr "" + msgid "Edit Mode" msgstr "Modo de Edição" -#: ../src/pd_menus.tcl:70 ../src/pd_menus.tcl:80 ../src/pd_menus.tcl:93 -#: ../src/pd_menus.tcl:94 ../src/pd_menus.tcl:118 ../src/pd_menus.tcl:124 -#: ../src/pd_menus.tcl:139 ../src/pd_menus.tcl:140 ../src/pd_menus.tcl:145 -#: ../src/pd_menus.tcl:150 ../src/pd_menus.tcl:320 ../src/pd_menus.tcl:326 msgid "Undo" msgstr "Desfazer" -#: ../src/pd_menus.tcl:71 ../src/pd_menus.tcl:81 ../src/pd_menus.tcl:95 -#: ../src/pd_menus.tcl:96 ../src/pd_menus.tcl:119 ../src/pd_menus.tcl:125 -#: ../src/pd_menus.tcl:141 ../src/pd_menus.tcl:142 ../src/pd_menus.tcl:147 -#: ../src/pd_menus.tcl:152 ../src/pd_menus.tcl:326 ../src/pd_menus.tcl:332 msgid "Redo" msgstr "Refazer" -#: ../src/pd_menus.tcl:81 ../src/pd_menus.tcl:82 ../src/pd_menus.tcl:127 -#: ../src/pd_menus.tcl:128 ../src/pd_menus.tcl:133 ../src/pd_menus.tcl:138 -#: ../src/pd_menus.tcl:255 ../src/pd_menus.tcl:267 ../src/pd_menus.tcl:285 -#: ../src/pd_menus.tcl:298 ../src/pd_menus.tcl:322 ../src/pd_menus.tcl:335 -#: ../src/pd_menus.tcl:349 ../src/pd_menus.tcl:376 ../src/pd_menus.tcl:380 -#: ../src/pd_menus.tcl:405 ../src/pd_menus.tcl:407 ../src/pd_menus.tcl:419 -#: ../src/pd_menus.tcl:436 ../src/pd_menus.tcl:446 ../src/pd_menus.tcl:484 -#: ../src/pd_menus.tcl:515 ../src/pd_menus.tcl:560 +msgid "List of objects..." +msgstr "Lista de objetos..." + msgid "New" msgstr "Novo" -#: ../src/pd_menus.tcl:82 ../src/pd_menus.tcl:83 ../src/pd_menus.tcl:128 -#: ../src/pd_menus.tcl:129 ../src/pd_menus.tcl:134 ../src/pd_menus.tcl:139 -#: ../src/pd_menus.tcl:256 ../src/pd_menus.tcl:268 ../src/pd_menus.tcl:286 -#: ../src/pd_menus.tcl:299 ../src/pd_menus.tcl:323 ../src/pd_menus.tcl:336 -#: ../src/pd_menus.tcl:350 ../src/pd_menus.tcl:377 ../src/pd_menus.tcl:381 -#: ../src/pd_menus.tcl:406 ../src/pd_menus.tcl:408 ../src/pd_menus.tcl:420 -#: ../src/pd_menus.tcl:437 ../src/pd_menus.tcl:447 ../src/pd_menus.tcl:485 -#: ../src/pd_menus.tcl:516 ../src/pd_menus.tcl:561 ../src/pdtk_canvas.tcl:46 -#: ../src/pdtk_canvas.tcl:108 ../src/pdtk_canvas.tcl:111 -#: ../src/pdtk_canvas.tcl:128 ../src/pdtk_canvas.tcl:130 -#: ../src/pdtk_canvas.tcl:131 ../src/pdtk_canvas.tcl:133 -#: ../src/pdtk_canvas.tcl:158 ../src/pdtk_canvas.tcl:178 -#: ../src/pdtk_canvas.tcl:180 msgid "Open" msgstr "Abrir" -#: ../src/pd_menus.tcl:98 ../src/pd_menus.tcl:99 ../src/pd_menus.tcl:144 -#: ../src/pd_menus.tcl:145 ../src/pd_menus.tcl:150 ../src/pd_menus.tcl:155 +msgid "Message..." +msgstr "Mensagem..." + msgid "Cut" msgstr "Cortar" -#: ../src/pd_menus.tcl:106 ../src/pd_menus.tcl:107 ../src/pd_menus.tcl:152 -#: ../src/pd_menus.tcl:153 ../src/pd_menus.tcl:158 ../src/pd_menus.tcl:163 msgid "Select All" msgstr "Selecionar Tudo" -#: ../src/pd_menus.tcl:110 ../src/pd_menus.tcl:111 ../src/pd_menus.tcl:115 -#: ../src/pd_menus.tcl:116 ../src/pd_menus.tcl:156 ../src/pd_menus.tcl:157 -#: ../src/pd_menus.tcl:161 ../src/pd_menus.tcl:162 ../src/pd_menus.tcl:167 -#: ../src/pd_menus.tcl:172 -msgid "Text Editor" -msgstr "Editor de Texto" - -#: ../src/pd_menus.tcl:122 ../src/pd_menus.tcl:123 ../src/pd_menus.tcl:168 -#: ../src/pd_menus.tcl:169 ../src/pd_menus.tcl:179 -msgid "Toggle Console" -msgstr "Ativar Console" - -#: ../src/pd_menus.tcl:124 ../src/pd_menus.tcl:125 ../src/pd_menus.tcl:170 -#: ../src/pd_menus.tcl:171 ../src/pd_menus.tcl:174 ../src/pd_menus.tcl:181 msgid "Clear Console" msgstr "Limpar Console" -#: ../src/pd_menus.tcl:139 ../src/pd_menus.tcl:495 ../src/pd_menus.tcl:522 -#: ../src/pd_menus.tcl:567 -msgid "Message..." -msgstr "Mensagem..." - -#: ../src/pd_menus.tcl:145 ../src/pd_menus.tcl:188 ../src/pd_menus.tcl:190 -#: ../src/pd_menus.tcl:191 ../src/pd_menus.tcl:201 msgid "Object" msgstr "Objeto" -#: ../src/pd_menus.tcl:149 ../src/pd_menus.tcl:192 ../src/pd_menus.tcl:194 -#: ../src/pd_menus.tcl:195 ../src/pd_menus.tcl:205 +msgid "Message" +msgstr "Mensagem" + msgid "Number" msgstr "Número" -#: ../src/pd_menus.tcl:151 ../src/pd_menus.tcl:194 ../src/pd_menus.tcl:196 -#: ../src/pd_menus.tcl:197 ../src/pd_menus.tcl:207 msgid "Symbol" msgstr "Símbolo" -#: ../src/pd_menus.tcl:153 ../src/pd_menus.tcl:196 ../src/pd_menus.tcl:198 -#: ../src/pd_menus.tcl:199 ../src/pd_menus.tcl:209 msgid "Comment" msgstr "Comentário" -#: ../src/pd_menus.tcl:156 ../src/pd_menus.tcl:199 ../src/pd_menus.tcl:201 -#: ../src/pd_menus.tcl:202 ../src/pd_menus.tcl:212 -msgid "Bang" -msgstr "Bang" - -#: ../src/pd_menus.tcl:158 ../src/pd_menus.tcl:201 ../src/pd_menus.tcl:203 -#: ../src/pd_menus.tcl:204 ../src/pd_menus.tcl:214 -msgid "Toggle" -msgstr "Toggle" - -#: ../src/pd_menus.tcl:160 ../src/pd_menus.tcl:203 ../src/pd_menus.tcl:205 -#: ../src/pd_menus.tcl:206 ../src/pd_menus.tcl:216 -msgid "Number2" -msgstr "Número2" - -#: ../src/pd_menus.tcl:162 ../src/pd_menus.tcl:205 ../src/pd_menus.tcl:207 -#: ../src/pd_menus.tcl:208 ../src/pd_menus.tcl:218 -msgid "Vslider" -msgstr "Slider Vertical" - -#: ../src/pd_menus.tcl:164 ../src/pd_menus.tcl:207 ../src/pd_menus.tcl:209 -#: ../src/pd_menus.tcl:210 ../src/pd_menus.tcl:220 -msgid "Hslider" -msgstr "Slider Horizontal" - -#: ../src/pd_menus.tcl:166 ../src/pd_menus.tcl:209 ../src/pd_menus.tcl:211 -#: ../src/pd_menus.tcl:212 ../src/pd_menus.tcl:222 -msgid "Vradio" -msgstr "Seleção Vertical" - -#: ../src/pd_menus.tcl:168 ../src/pd_menus.tcl:211 ../src/pd_menus.tcl:213 -#: ../src/pd_menus.tcl:214 ../src/pd_menus.tcl:224 -msgid "Hradio" -msgstr "Seleção Horizontal" - -#: ../src/pd_menus.tcl:170 ../src/pd_menus.tcl:213 ../src/pd_menus.tcl:215 -#: ../src/pd_menus.tcl:216 ../src/pd_menus.tcl:226 -msgid "VU Meter" -msgstr "Medidor de VU" - -#: ../src/pd_menus.tcl:172 ../src/pd_menus.tcl:215 ../src/pd_menus.tcl:217 -#: ../src/pd_menus.tcl:218 ../src/pd_menus.tcl:228 -msgid "Canvas" -msgstr "Tela" - -#: ../src/pd_menus.tcl:175 ../src/pd_menus.tcl:218 ../src/pd_menus.tcl:220 -#: ../src/pd_menus.tcl:221 ../src/pd_menus.tcl:231 msgid "Graph" msgstr "Gráfico" -#: ../src/pd_menus.tcl:176 ../src/pd_menus.tcl:219 ../src/pd_menus.tcl:221 -#: ../src/pd_menus.tcl:222 ../src/pd_menus.tcl:232 -msgid "Array" -msgstr "Vetor" - -#: ../src/pd_menus.tcl:181 ../src/pd_menus.tcl:224 ../src/pd_menus.tcl:226 -#: ../src/pd_menus.tcl:227 ../src/pd_menus.tcl:237 msgid "Find..." msgstr "Procurar..." -#: ../src/pd_menus.tcl:183 ../src/pd_menus.tcl:226 ../src/pd_menus.tcl:228 -#: ../src/pd_menus.tcl:229 ../src/pd_menus.tcl:239 msgid "Find Again" msgstr "Procurar Novamente" -#: ../src/pd_menus.tcl:185 ../src/pd_menus.tcl:228 ../src/pd_menus.tcl:230 -#: ../src/pd_menus.tcl:231 ../src/pd_menus.tcl:241 msgid "Find Last Error" msgstr "Procurar Último Erro" -#: ../src/pd_menus.tcl:191 ../src/pd_menus.tcl:234 ../src/pd_menus.tcl:236 -#: ../src/pd_menus.tcl:237 ../src/pd_menus.tcl:247 msgid "DSP On" msgstr "DSP Ligado" -#: ../src/pd_menus.tcl:193 ../src/pd_menus.tcl:236 ../src/pd_menus.tcl:238 -#: ../src/pd_menus.tcl:239 ../src/pd_menus.tcl:249 msgid "DSP Off" msgstr "DSP Desligado" -#: ../src/pd_menus.tcl:196 ../src/pd_menus.tcl:240 ../src/pd_menus.tcl:242 -#: ../src/pd_menus.tcl:269 ../src/pd_menus.tcl:280 msgid "Test Audio and MIDI..." msgstr "Testar Áudio e MIDI..." -#: ../src/pd_menus.tcl:198 ../src/pd_menus.tcl:242 ../src/pd_menus.tcl:244 -#: ../src/pd_menus.tcl:271 ../src/pd_menus.tcl:282 msgid "Load Meter" -msgstr "Medidor de Carga de CPU" +msgstr "Medidor de CPU" + +msgid "Audio Settings..." +msgstr "Configurações de Áudio..." + +msgid "MIDI Settings..." +msgstr "Configurações de MIDI..." -#: ../src/pd_menus.tcl:205 ../src/pd_menus.tcl:251 ../src/pd_menus.tcl:274 -#: ../src/pd_menus.tcl:278 ../src/pd_menus.tcl:289 msgid "Minimize" msgstr "Minimizar" -#: ../src/pd_menus.tcl:207 ../src/pd_menus.tcl:253 ../src/pd_menus.tcl:276 -#: ../src/pd_menus.tcl:280 ../src/pd_menus.tcl:291 msgid "Zoom" -msgstr "Ampliar" - -#: ../src/pd_menus.tcl:210 ../src/pd_menus.tcl:256 ../src/pd_menus.tcl:283 -#: ../src/pd_menus.tcl:291 ../src/pd_menus.tcl:294 -msgid "Parent Window" -msgstr "Janela Mãe" +msgstr "Zoom" -#: ../src/pd_menus.tcl:216 ../src/pd_menus.tcl:262 ../src/pd_menus.tcl:278 -#: ../src/pd_menus.tcl:289 ../src/pd_menus.tcl:300 msgid "Bring All to Front" -msgstr "Trazer Tudo para Frente" +msgstr "Trazer Todas para Frente" -#: ../src/pd_menus.tcl:224 ../src/pd_menus.tcl:241 ../src/pd_menus.tcl:253 -#: ../src/pd_menus.tcl:270 ../src/pd_menus.tcl:297 ../src/pd_menus.tcl:298 -#: ../src/pd_menus.tcl:308 ../src/pd_menus.tcl:335 ../src/pd_menus.tcl:362 -#: ../src/pd_menus.tcl:390 ../src/pd_menus.tcl:472 -msgid "About Pd" -msgstr "Sobre PD" - -#: ../src/pd_menus.tcl:227 ../src/pd_menus.tcl:273 ../src/pd_menus.tcl:300 -#: ../src/pd_menus.tcl:311 -msgid "HTML Manual..." -msgstr "Manual HTML..." - -#: ../src/pd_menus.tcl:229 ../src/pd_menus.tcl:275 ../src/pd_menus.tcl:302 -#: ../src/pd_menus.tcl:313 -msgid "Browser..." -msgstr "Navegador..." - -#: ../src/pd_menus.tcl:248 ../src/pd_menus.tcl:260 ../src/pd_menus.tcl:342 -#: ../src/pd_menus.tcl:369 ../src/pd_menus.tcl:395 -msgid "Preferences..." -msgstr "Preferências..." - -#: ../src/pd_menus.tcl:257 ../src/pd_menus.tcl:270 ../src/pd_menus.tcl:352 -#: ../src/pd_menus.tcl:379 ../src/pd_menus.tcl:408 ../src/pd_menus.tcl:487 -msgid "Open Recent" -msgstr "Abrir Recente" - -#: ../src/pd_menus.tcl:263 ../src/pd_menus.tcl:274 -msgid "Audio settings..." -msgstr "Configurações de Áudio..." - -#: ../src/pd_menus.tcl:265 ../src/pd_menus.tcl:276 ../src/pd_menus.tcl:461 -msgid "MIDI settings..." -msgstr "Configurações de MIDI..." - -#: ../src/pd_menus.tcl:281 msgid "Next Window" msgstr "Próxima Janela" -#: ../src/pd_menus.tcl:284 msgid "Previous Window" msgstr "Janela Anterior" -#: ../src/pd_menus.tcl:296 ../src/pd_menus.tcl:309 ../src/pd_menus.tcl:333 -#: ../src/pd_menus.tcl:346 ../src/pd_menus.tcl:393 ../src/pd_menus.tcl:420 -#: ../src/pd_menus.tcl:432 ../src/pd_menus.tcl:449 ../src/pd_menus.tcl:459 -#: ../src/pd_menus.tcl:497 ../src/pd_menus.tcl:528 ../src/pd_menus.tcl:575 -msgid "Quit" -msgstr "Sair" +msgid "Parent Window" +msgstr "Janela Mãe" -#: ../src/pd_menus.tcl:304 ../src/pd_menus.tcl:331 ../src/pd_menus.tcl:350 -#: ../src/pd_menus.tcl:356 -msgid "Clear Menu" -msgstr "Limpar Menu" +msgid "HTML Manual..." +msgstr "Manual em HTML..." + +msgid "Browser..." +msgstr "Navegador..." -#: ../src/pd_menus.tcl:305 msgid "puredata.info" msgstr "puredata.info" -#: ../src/pd_menus.tcl:307 msgid "Report a bug" -msgstr "Reportar um bug" +msgstr "Reportar falha (bug)" + +msgid "Clear Menu" +msgstr "Limpar Menu" + +msgid "" +"Delete all preferences?\n" +"(takes effect when Pd is restarted)" +msgstr "" +"Deletar todas as preferências?\n" +"(faz efeito quando o Pd é reiniciado)" -#: ../src/pd_menus.tcl:455 msgid "Path..." -msgstr "Caminho..." +msgstr "Caminho de busca..." -#: ../src/pd_menus.tcl:457 msgid "Startup..." msgstr "Inicialização..." -#: ../src/pd_menus.tcl:459 -msgid "Audio Settings..." +msgid "Audio..." msgstr "Configurações de Áudio..." -#: ../src/pdtk_canvas.tcl:44 ../src/pdtk_canvas.tcl:106 -#: ../src/pdtk_canvas.tcl:109 ../src/pdtk_canvas.tcl:123 -#: ../src/pdtk_canvas.tcl:125 ../src/pdtk_canvas.tcl:126 -#: ../src/pdtk_canvas.tcl:128 ../src/pdtk_canvas.tcl:156 -#: ../src/pdtk_canvas.tcl:173 ../src/pdtk_canvas.tcl:175 +msgid "MIDI..." +msgstr "Configurações de MIDI..." + +msgid "Zoom New Windows" +msgstr "Amplicar Zoom em Novas Janelas" + +msgid "Save All Preferences" +msgstr "Salvar Todas as Preferências" + +msgid "Save to..." +msgstr "Salvar em..." + +msgid "Load from..." +msgstr "Carregar de..." + +msgid "Forget All..." +msgstr "Esquecer Todas..." + +msgid "Open Recent" +msgstr "Abrir Recente" + +msgid "Quit" +msgstr "Sair" + msgid "Properties" msgstr "Propriedades" -#: ../src/pdwindow.tcl:43 ../src/pdwindow.tcl:164 ../src/pdwindow.tcl:309 -msgid "DSP" -msgstr "DSP" +msgid "Audio on" +msgstr "Áudio ligado" -#: ../src/pdwindow.tcl:86 ../src/pdwindow.tcl:235 -msgid "(Tcl) MISSING CLOSE-BRACE '}': " -msgstr "(Tcl) FALTANDO FECHA CHAVES '}': " +msgid "Audio off" +msgstr "Áudio desligado" -#: ../src/pdwindow.tcl:88 ../src/pdwindow.tcl:237 msgid "(Tcl) MISSING CLOSE-BRACKET ']': " msgstr "(Tcl) FALTANDO FECHA COLCHETES ']': " -#: ../src/pdwindow.tcl:161 ../src/pdwindow.tcl:306 -msgid "IN" -msgstr "ENTRADA" +msgid "Tcl:" +msgstr "Tcl:" -#: ../src/pdwindow.tcl:162 ../src/pdwindow.tcl:307 -msgid "OUT" -msgstr "SAÍDA" +msgid "Pd" +msgstr "Pd" -#: ../src/pdwindow.tcl:168 ../src/pdwindow.tcl:314 -msgid "DIO" -msgstr "DIO" +msgid "DSP" +msgstr "DSP" -#: ../src/pdwindow.tcl:177 ../src/pdwindow.tcl:324 -msgid "Tcl:" -msgstr "Tcl:" +msgid "Audio I/O error" +msgstr "Erro de Entrada/Saída de áudio" -#: ../src/wheredoesthisgo.tcl:19 -#, tcl-format -msgid "Ignoring '%s': doesn't look like a Pd-file" -msgstr "Ignorando '%s': não parece ser um arquivo PD válido" +msgid "Log:" +msgstr "Log:" -#: ../startup/object_db.tcl:113 -msgid "Signal" -msgstr "Sinal" +msgid "fatal" +msgstr "fatal" -#: ../startup/object_db.tcl:114 -msgid "Generators" -msgstr "Geradores" +msgid "error" +msgstr "erro" -#: ../startup/object_db.tcl:115 -msgid "Filters" -msgstr "Filtros" +msgid "normal" +msgstr "normal" -#: ../startup/object_db.tcl:116 ../startup/object_db.tcl:124 -msgid "Math" -msgstr "Matemática" +msgid "debug" +msgstr "debugar" -#: ../startup/object_db.tcl:117 ../startup/object_db.tcl:125 -msgid "I/O" -msgstr "E/S" +msgid "all" +msgstr "todos" -#: ../startup/object_db.tcl:118 ../startup/object_db.tcl:126 -msgid "Sampling" -msgstr "Amostragem" +msgid "New..." +msgstr "Novo..." -#: ../startup/object_db.tcl:119 ../startup/object_db.tcl:128 -msgid "Routing" -msgstr "Roteamento" +msgid "Edit..." +msgstr "Editar..." -#: ../startup/object_db.tcl:120 ../startup/object_db.tcl:129 -msgid "Others" -msgstr "Outros" +msgid "Delete" +msgstr "Deletar" -#: ../startup/object_db.tcl:127 -msgid "GUI" -msgstr "GUI" +#, tcl-format +msgid "Ignoring '%s': doesn't exist" +msgstr "Ignorando '%s': não existe" -# iemgui -msgid "-------dimensions(digits)(pix):-------" -msgstr "------dimensões(dígitos)(pix):-------" +#, tcl-format +msgid "Ignoring '%s': doesn't look like a Pd-file" +msgstr "Ignorando '%s': não parece ser um arquivo de Pd válido" -# iemgui -msgid "--------dimensions(pix)(pix):--------" -msgstr "--------dimensões(pix)(pix):--------" +#~ msgid "Unable to perform search. Are you online?" +#~ msgstr "Incapaz de realizar busca. Você está online?" -# iemgui -msgid "----------dimensions(pix):-----------" -msgstr "----------dimensões(pix):-----------" +#~ msgid "for:" +#~ msgstr "por:" -# iemgui -# iemgui -msgid "------selectable_dimensions(pix):------" -msgstr "----dimensões_selecionáveis(pix):-----" +#~ msgid "Discard changes to this window??" +#~ msgstr "Descartar mudanças feitas nesta janela??" -# iemgui -msgid "------visible_rectangle(pix)(pix):------" -msgstr "-----retângulo_visível(pix)(pix):------" +#~ msgid "Max Text Files" +#~ msgstr "Arquivos de Texto Max" -# iemgui -msgid "-----------output-range:-----------" -msgstr "---------registro-de-saída:---------" +#~ msgid "Signal" +#~ msgstr "Sinal" -# iemgui -msgid "--------flash-time(ms)(ms):---------" -msgstr "-----tempo-de-flash(ms)(ms):-------" +#~ msgid "Input device 2:" +#~ msgstr "Dispositivo de entrada 2:" -# iemgui -msgid "log-height:" -msgstr "altura-do-log:" +#~ msgid "Routing" +#~ msgstr "Roteamento" -# iemgui -msgid "log" -msgstr "log" +#~ msgid "Send (Ctrl s)" +#~ msgstr "Enviar (Ctrl s)" -# iemgui -msgid "lin" -msgstr "lin" +#~ msgid "IN" +#~ msgstr "ENTRADA" -# iemgui -msgid "top:" -msgstr "topo:" +#~ msgid "Max Patch Files (.pat)" +#~ msgstr "Arquivos de Patch Max (.pat)" -# iemgui -msgid "bottom:" -msgstr "fundo:" +#~ msgid "OUT" +#~ msgstr "SAÍDA" -# iemgui -msgid "value:" -msgstr "valor:" +#~ msgid "DIO" +#~ msgstr "DIO" -# iemgui -msgid "max:" -msgstr "máx:" +#~ msgid "Sampling" +#~ msgstr "Amostragem" -# iemgui -msgid "min:" -msgstr "min:" +#~ msgid "Use multiple ALSA devices" +#~ msgstr "Usar múltiplos dispositivos ALSA" -# iemgui -msgid "right:" -msgstr "direita:" +#~ msgid "Preferences..." +#~ msgstr "Preferências..." -# iemgui -msgid "left:" -msgstr "esquerda:" +#~ msgid "Close this window??" +#~ msgstr "Fechar esta janela??" -# iemgui -msgid "hold:" -msgstr "segurar:" +#~ msgid "Font Properties" +#~ msgstr "Propriedades da Fonte" -# iemgui -msgid "intrrpt:" -msgstr "interromper:" +#~ msgid "really quit?" +#~ msgstr "deseja realmente sair?" -# iemgui -msgid "size:" -msgstr "tamanho:" +#~ msgid "Input device 4:" +#~ msgstr "Dispositivo de entrada 4:" -# iemgui -msgid "width:" -msgstr "largura:" +#~ msgid "Output device 3:" +#~ msgstr "Dispositivo de saída 3:" -# iemgui -msgid "height:" -msgstr "altura:" +#~ msgid "Generators" +#~ msgstr "Geradores" -msgid "Do you want to save the changes you made in '%s'?" -msgstr "Você deseja salvar as alterações feitas em '%s'?" +#~ msgid "GUI" +#~ msgstr "GUI" -msgid "Discard changes to '%s'?" -msgstr "Descartar as mudanças em '%s'?" +#~ msgid "Max Patch Files" +#~ msgstr "Arquivos de Patch Max" -msgid "Undo typing" -msgstr "Desfazer digitação" +#~ msgid "WARNING: Font weight '%s' not found, using default (%s)" +#~ msgstr "AVISO: Peso de fonte '%s' não encontrado, usando o padrão (%s)" -msgid "Undo clear" -msgstr "Desfazer limpar" +#~ msgid "Text Editor" +#~ msgstr "Editor de Texto" -msgid "Undo connect" -msgstr "Desfazer conectar" +#~ msgid "Toggle Console" +#~ msgstr "Ativar Console" -msgid "Undo disconnect" -msgstr "Desfazer desconectar" +#~ msgid "Output device 4:" +#~ msgstr "Dispositivo de saída 4:" -msgid "Undo cut" -msgstr "Desfazer cortar" +#~ msgid "Untitled" +#~ msgstr "Sem título" -msgid "Undo motion" -msgstr "Desfazer movimentar" +#~ msgid "Max Text Files (.mxt)" +#~ msgstr "Arquivos de Texto Max (.mxt)" -msgid "Undo paste" -msgstr "Desfazer colar" +#~ msgid "WARNING: Font family '%s' not found, using default (%s)" +#~ msgstr "AVISO: Família de fonte '%s' não encontrada, usando a padrão (%s)" -msgid "Undo duplicate" -msgstr "Desfazer duplicar" +#~ msgid "Math" +#~ msgstr "Matemática" -msgid "Redo typing" -msgstr "Refazer digitação" +#~ msgid "OK (Ctrl t)" +#~ msgstr "OK (Ctrl t)" -msgid "Redo clear" -msgstr "Refazer limpar" +#~ msgid "Others" +#~ msgstr "Outros" -msgid "Redo connect" -msgstr "Refazer conectar" +#~ msgid "Input device 3:" +#~ msgstr "Dispositivo de entrada 3:" -msgid "Redo disconnect" -msgstr "Refazer desconectar" +#~ msgid "Output device 2:" +#~ msgstr "Dispositivo de saída 2:" -msgid "Redo cut" -msgstr "Refazer cortar" +#~ msgid "WARNING: %s failed to find font size (%s) that fits into %sx%s!" +#~ msgstr "" +#~ "AVISO: %s Falha ao procurar tamanho de fonte (%s) que caiba em %sx%s!" -msgid "Redo motion" -msgstr "Refazer movimentar" +#~ msgid "ERROR: 'pd' never showed up, 'pd-gui' quitting!" +#~ msgstr "ERRO: 'pd' nunca apareceu, 'pd-gui' fechando!" -msgid "Redo paste" -msgstr "Refazer colar" +#~ msgid "I/O" +#~ msgstr "Entrada/Saída" -msgid "Redo duplicate" -msgstr "Refazer duplicar" +#~ msgid "Send Message..." +#~ msgstr "Enviar Mensagem..." + +#~ msgid "ERROR: %s failed to find font size (%s) that fits into %sx%s!" +#~ msgstr "" +#~ "ERRO: %s Falha ao procurar tamanho de fonte (%s) que caiba em %sx%s!" + +#~ msgid "Pd Files" +#~ msgstr "Arquivos de Pd" +#~ msgid "Filters" +#~ msgstr "Filtros" - +#~ msgid "Associated Files" +#~ msgstr "Arquivos Associados" diff --git a/po/pt_pt.po b/po/pt_pt.po index 1d95ffb07d..51272a0e0e 100644 --- a/po/pt_pt.po +++ b/po/pt_pt.po @@ -5,1140 +5,1195 @@ msgid "" msgstr "" "Project-Id-Version: Pure Data 0.43\n" "Report-Msgid-Bugs-To: pd-dev@iem.at\n" -"POT-Creation-Date: 2009-08-25 23:00-0400\n" +"POT-Creation-Date: 2017-07-06 18:10+0200\n" "PO-Revision-Date: \n" "Last-Translator: João Pais \n" "Language-Team: \n" +"Language: pt_PT\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Poedit-Language: Portuguese\n" "X-Poedit-Country: PORTUGAL\n" -msgid "Discard changes to '%s'?" -msgstr "Rejeitar modificações em '%s'?" +msgid "-------dimensions(digits)(pix):-------" +msgstr "" + +msgid "--------dimensions(pix)(pix):--------" +msgstr "" + +msgid "----------dimensions(pix):-----------" +msgstr "" + +msgid "--------flash-time(ms)(ms):---------" +msgstr "" + +msgid "-----------output-range:-----------" +msgstr "" + +msgid "------selectable_dimensions(pix):------" +msgstr "" + +msgid "------visible_rectangle(pix)(pix):------" +msgstr "" + +#, fuzzy +msgid "bottom:" +msgstr "Abaixo" + +#, fuzzy +msgid "height:" +msgstr "Direita" + +msgid "hold:" +msgstr "" + +msgid "intrrpt:" +msgstr "" + +msgid "left:" +msgstr "" + +msgid "lin" +msgstr "" + +msgid "log" +msgstr "" + +msgid "log-height:" +msgstr "" + +msgid "max:" +msgstr "" + +msgid "min:" +msgstr "" + +#, fuzzy +msgid "right:" +msgstr "Direita" + +#, fuzzy +msgid "size:" +msgstr "Tamanho:" + +msgid "top:" +msgstr "" + +msgid "value:" +msgstr "" + +#, fuzzy +msgid "width:" +msgstr "Largura:" +#, tcl-format msgid "Do you want to save the changes you made in '%s'?" msgstr "Quer gravar as modificações feitas em '%s'?" -#: ../src/dialog_array.tcl:115 -#: ../src/dialog_array.tcl:117 -#: ../src/pd_menus.tcl:100 -#: ../src/pd_menus.tcl:101 -#: ../src/pd_menus.tcl:146 -#: ../src/pd_menus.tcl:147 +#, tcl-format +msgid "Discard changes to '%s'?" +msgstr "Rejeitar modificações em '%s'?" + +msgid "Undo clear" +msgstr "" + +msgid "Undo connect" +msgstr "" + +#, fuzzy +msgid "Undo cut" +msgstr "Anular" + +msgid "Undo disconnect" +msgstr "" + +#, fuzzy +msgid "Undo duplicate" +msgstr "Duplicar" + +msgid "Undo motion" +msgstr "" + +msgid "Undo paste" +msgstr "" + +msgid "Undo typing" +msgstr "" + +msgid "Redo clear" +msgstr "" + +msgid "Redo connect" +msgstr "" + +#, fuzzy +msgid "Redo cut" +msgstr "Restaurar" + +msgid "Redo disconnect" +msgstr "" + +#, fuzzy +msgid "Redo duplicate" +msgstr "Duplicar" + +msgid "Redo motion" +msgstr "" + +msgid "Redo paste" +msgstr "" + +msgid "Redo typing" +msgstr "" + +msgid "no Pd settings to clear" +msgstr "" + +msgid "removed .pdsettings file" +msgstr "" + +msgid "couldn't delete .pdsettings file" +msgstr "" + +msgid "failed to erase Pd settings" +msgstr "" + +#, fuzzy +msgid "erased Pd settings" +msgstr "Gravar a configuração" + +msgid "no Pd settings to erase" +msgstr "" + +msgid "skipping loading preferences... Pd seems to have crashed on startup." +msgstr "" + +msgid "(re-save preferences to reinstate them)" +msgstr "" + +msgid "File" +msgstr "Ficheiro" + +#, fuzzy +msgid "Edit" +msgstr "Editar" + +msgid "Put" +msgstr "Put" + +msgid "Find" +msgstr "Localizar" + +msgid "Media" +msgstr "" + +msgid "Window" +msgstr "Janela" + +msgid "Help" +msgstr "Ajuda" + +msgid "Show &Hidden Files and Directories" +msgstr "" + msgid "Copy" msgstr "Copiar" -#: ../src/dialog_array.tcl:118 -#: ../src/dialog_array.tcl:120 -#: ../src/pd_menus.tcl:102 -#: ../src/pd_menus.tcl:103 -#: ../src/pd_menus.tcl:148 -#: ../src/pd_menus.tcl:149 msgid "Paste" msgstr "Colar" -#: ../src/dialog_array.tcl:264 -#: ../src/dialog_array.tcl:266 msgid "Array Properties" msgstr "Propriedades do array" -#: ../src/dialog_array.tcl:270 -#: ../src/dialog_array.tcl:272 +msgid "Array" +msgstr "Array" + msgid "Name:" msgstr "Nome:" -#: ../src/dialog_array.tcl:276 -#: ../src/dialog_array.tcl:278 -#: ../src/dialog_canvas.tcl:178 -#: ../src/dialog_canvas.tcl:193 -#: ../src/dialog_iemgui.tcl:619 -#: ../src/dialog_iemgui.tcl:621 msgid "Size:" msgstr "Tamanho:" -#: ../src/dialog_array.tcl:280 -#: ../src/dialog_array.tcl:282 msgid "Save contents" msgstr "Guardar conteúdo" -#: ../src/dialog_array.tcl:284 -#: ../src/dialog_array.tcl:286 msgid "Draw as:" msgstr "Desenhar como:" -#: ../src/dialog_array.tcl:287 -#: ../src/dialog_array.tcl:289 -msgid "Points" -msgstr "Pontos" - -#: ../src/dialog_array.tcl:289 -#: ../src/dialog_array.tcl:291 msgid "Polygon" msgstr "Polígono" -#: ../src/dialog_array.tcl:291 -#: ../src/dialog_array.tcl:293 +msgid "Points" +msgstr "Pontos" + msgid "Bezier curve" msgstr "Curva de Bézier" -#: ../src/dialog_array.tcl:297 -#: ../src/dialog_array.tcl:299 msgid "Put array into:" msgstr "Pôr array em:" -#: ../src/dialog_array.tcl:300 -#: ../src/dialog_array.tcl:302 msgid "New graph" msgstr "Gráfico novo" -#: ../src/dialog_array.tcl:302 -#: ../src/dialog_array.tcl:304 msgid "Last graph" msgstr "Gráfico precedente" -#: ../src/dialog_array.tcl:306 -#: ../src/dialog_array.tcl:308 -msgid "Delete array" -msgstr "Apagar array" +msgid "Options" +msgstr "" -#: ../src/dialog_array.tcl:312 -#: ../src/dialog_array.tcl:314 msgid "Open List View..." msgstr "Ver lista" -#: ../src/dialog_array.tcl:319 -#: ../src/dialog_array.tcl:321 -#: ../src/dialog_audio.tcl:136 -#: ../src/dialog_canvas.tcl:205 -#: ../src/dialog_font.tcl:51 -#: ../src/dialog_gatom.tcl:153 -#: ../src/dialog_gatom.tcl:161 -#: ../src/dialog_iemgui.tcl:742 -#: ../src/dialog_iemgui.tcl:748 -#: ../src/dialog_midi.tcl:91 -#: ../src/dialog_midi.tcl:226 +msgid "Delete array" +msgstr "Apagar array" + msgid "Cancel" msgstr "Cancelar" -#: ../src/dialog_array.tcl:321 -#: ../src/dialog_array.tcl:323 -#: ../src/dialog_audio.tcl:138 -#: ../src/dialog_canvas.tcl:207 -#: ../src/dialog_gatom.tcl:156 -#: ../src/dialog_gatom.tcl:164 -#: ../src/dialog_iemgui.tcl:745 -#: ../src/dialog_iemgui.tcl:751 -#: ../src/dialog_midi.tcl:93 -#: ../src/dialog_midi.tcl:228 msgid "Apply" msgstr "Aplicar" -#: ../src/dialog_array.tcl:323 -#: ../src/dialog_array.tcl:325 -#: ../src/dialog_audio.tcl:140 -#: ../src/dialog_canvas.tcl:209 -#: ../src/dialog_font.tcl:53 -#: ../src/dialog_font.tcl:92 -#: ../src/dialog_font.tcl:100 -#: ../src/dialog_gatom.tcl:159 -#: ../src/dialog_gatom.tcl:167 -#: ../src/dialog_iemgui.tcl:748 -#: ../src/dialog_iemgui.tcl:754 -#: ../src/dialog_midi.tcl:95 -#: ../src/dialog_midi.tcl:230 msgid "OK" msgstr "OK" -#: ../src/dialog_audio.tcl:130 msgid "Audio Settings" msgstr "Configuração audio" -#: ../src/dialog_audio.tcl:142 -msgid "Save All Settings" -msgstr "Gravar a configuração" +#, fuzzy +msgid "Settings" +msgstr "Configuração MIDI" -#: ../src/dialog_audio.tcl:151 msgid "Sample rate:" msgstr "Sample rate:" -#: ../src/dialog_audio.tcl:153 msgid "Delay (msec):" msgstr "Delay (mseg):" -#: ../src/dialog_audio.tcl:158 +msgid "Block size:" +msgstr "" + msgid "Use callbacks" msgstr "Usar callbacks" -#: ../src/dialog_audio.tcl:166 -#: ../src/dialog_midi.tcl:105 -#: ../src/dialog_midi.tcl:241 -msgid "Input device 1:" -msgstr "Dispositivo de entrada 1:" - -#: ../src/dialog_audio.tcl:169 -#: ../src/dialog_audio.tcl:183 -#: ../src/dialog_audio.tcl:198 -#: ../src/dialog_audio.tcl:213 -#: ../src/dialog_audio.tcl:232 -#: ../src/dialog_audio.tcl:250 -#: ../src/dialog_audio.tcl:265 -#: ../src/dialog_audio.tcl:280 +msgid "Input Devices" +msgstr "Dispositivo de entrada" + msgid "Channels:" msgstr "Canais:" -#: ../src/dialog_audio.tcl:179 -#: ../src/dialog_midi.tcl:115 -#: ../src/dialog_midi.tcl:251 -msgid "Input device 2:" -msgstr "Dispositivo de entrada 2:" - -#: ../src/dialog_audio.tcl:194 -#: ../src/dialog_midi.tcl:127 -#: ../src/dialog_midi.tcl:263 -msgid "Input device 3:" -msgstr "Dispositivo de entrada 3:" - -#: ../src/dialog_audio.tcl:209 -#: ../src/dialog_midi.tcl:139 -#: ../src/dialog_midi.tcl:275 -msgid "Input device 4:" -msgstr "Dispositivo de entrada 4:" - -#: ../src/dialog_audio.tcl:223 -#: ../src/dialog_midi.tcl:150 -#: ../src/dialog_midi.tcl:286 -msgid "Output device 1:" -msgstr "Dispositivo de saída 1:" - -#: ../src/dialog_audio.tcl:226 -msgid "(same as input device) .............. " +msgid "Output Devices" +msgstr "Dispositivo de saída" + +#, fuzzy +msgid "(same as input device)..." msgstr "(igual ao dispositivo de entrada) .............." -#: ../src/dialog_audio.tcl:246 -#: ../src/dialog_midi.tcl:160 -#: ../src/dialog_midi.tcl:296 -msgid "Output device 2:" -msgstr "Dispositivo de saída 2:" - -#: ../src/dialog_audio.tcl:261 -#: ../src/dialog_midi.tcl:171 -#: ../src/dialog_midi.tcl:307 -msgid "Output device 3:" -msgstr "Dispositivo de saída 3:" - -#: ../src/dialog_audio.tcl:276 -#: ../src/dialog_midi.tcl:182 -#: ../src/dialog_midi.tcl:318 -msgid "Output device 4:" -msgstr "Dispositivo de saída 4:" - -#: ../src/dialog_audio.tcl:291 -#: ../src/dialog_midi.tcl:195 -msgid "Use multiple devices" +#, fuzzy +msgid "Use Multiple Devices" msgstr "Usar vários dispositivos" -#: ../src/dialog_canvas.tcl:142 +msgid "Save All Settings" +msgstr "Gravar a configuração" + +msgid "WARNING: unknown graphme flags received in pdtk_canvas_dialog" +msgstr "" + msgid "Canvas Properties" msgstr "Propriedades da tela" -#: ../src/dialog_canvas.tcl:146 msgid "Scale" msgstr "Escala" -#: ../src/dialog_canvas.tcl:150 msgid "X units per pixel:" msgstr "Unidades de X por pixel" -#: ../src/dialog_canvas.tcl:155 msgid "Y units per pixel:" msgstr "Unidades de Y por pixel" -#: ../src/dialog_canvas.tcl:159 msgid "Appearance on parent patch" msgstr "" -#: ../src/dialog_canvas.tcl:161 msgid "Graph-On-Parent" msgstr "Mostrar na janela superior" -#: ../src/dialog_canvas.tcl:165 msgid "Hide object name and arguments" msgstr "Esconder nome e variáveis do objecto" -#: ../src/dialog_canvas.tcl:170 msgid "Range and size" msgstr "" -#: ../src/dialog_canvas.tcl:174 -msgid "X range, from" +#, fuzzy +msgid "X range: from" msgstr "Faixa X, de" -#: ../src/dialog_canvas.tcl:176 -#: ../src/dialog_canvas.tcl:191 msgid "to" msgstr "a" -#: ../src/dialog_canvas.tcl:180 -#: ../src/dialog_canvas.tcl:195 msgid "Margin:" msgstr "Margem:" -#: ../src/dialog_canvas.tcl:189 -msgid "Y range, from" +#, fuzzy +msgid "Y range: from" msgstr "Faixa Y, de" -#: ../src/dialog_find.tcl:63 -#: ../src/dialog_find.tcl:66 -#: ../src/dialog_find.tcl:79 -#: ../src/dialog_find.tcl:80 -#: ../src/dialog_find.tcl:85 -#: ../src/dialog_find.tcl:87 -#: ../src/dialog_find.tcl:101 -#: ../src/dialog_find.tcl:107 -#: ../src/pd_menus.tcl:45 -msgid "Find" -msgstr "Localizar" +#, fuzzy +msgid "Data Properties" +msgstr "Propriedades da tela" -#: ../src/dialog_find.tcl:70 -#: ../src/dialog_find.tcl:73 -#: ../src/dialog_find.tcl:87 -#: ../src/dialog_find.tcl:93 -msgid "Search in" +#, tcl-format +msgid "Found '%1$s' in %2$s" +msgstr "" + +#, tcl-format +msgid "Couldn't find '%1$s' in %2$s" +msgstr "" + +#, fuzzy, tcl-format +msgid "Search in %s for:" msgstr "Procurar em" -#: ../src/dialog_find.tcl:72 -#: ../src/dialog_find.tcl:75 -#: ../src/dialog_find.tcl:89 -#: ../src/dialog_find.tcl:95 -msgid "for:" -msgstr "por:" - -#: ../src/dialog_find.tcl:83 -#: ../src/dialog_find.tcl:90 -#: ../src/dialog_find.tcl:104 -#: ../src/dialog_find.tcl:110 -#: ../src/pd_menus.tcl:86 -#: ../src/pd_menus.tcl:87 -#: ../src/pd_menus.tcl:132 -#: ../src/pd_menus.tcl:133 -#: ../src/pd_menus.tcl:259 -#: ../src/pd_menus.tcl:272 -#: ../src/pd_menus.tcl:295 -#: ../src/pd_menus.tcl:308 -#: ../src/pd_menus.tcl:332 -#: ../src/pd_menus.tcl:345 -#: ../src/pd_menus.tcl:354 -#: ../src/pd_menus.tcl:381 -#: ../src/pd_menus.tcl:392 -#: ../src/pd_menus.tcl:419 -#: ../src/pd_menus.tcl:431 -#: ../src/pd_menus.tcl:458 -msgid "Close" -msgstr "Fechar" +#, tcl-format +msgid "Showed last '%1$s' in %2$s" +msgstr "" + +#, tcl-format +msgid "Showing '%1$d' out of %2$d items in %3$s" +msgstr "" + +msgid "Pd window" +msgstr "Janela Pd" -#: ../src/dialog_find.tcl:83 -#: ../src/dialog_find.tcl:97 -#: ../src/dialog_find.tcl:103 msgid "Match whole word only" msgstr "" -#: ../src/dialog_font.tcl:45 -msgid "Font Properties" -msgstr "Propriedades do tipo de letra" +msgid "Close" +msgstr "Fechar" -#: ../src/dialog_font.tcl:46 -#: ../src/dialog_font.tcl:54 #, tcl-format msgid "%s Font" msgstr "" -#: ../src/dialog_font.tcl:49 -#: ../src/pd-gui.tcl:280 -#: ../src/pd-gui.tcl:283 -#: ../src/pd-gui.tcl:286 -#: ../src/pd-gui.tcl:288 -#: ../src/pd-gui.tcl:291 -#: ../src/pd_menus.tcl:212 -#: ../src/pd_menus.tcl:258 -#: ../src/pd_menus.tcl:285 -#: ../src/pdwindow.tcl:33 -msgid "Pd window" -msgstr "Janela Pd" +msgid "Font" +msgstr "Tipo de letra" -#: ../src/dialog_font.tcl:61 -#: ../src/dialog_font.tcl:96 -#: ../src/dialog_font.tcl:104 msgid "Font Size" msgstr "Tamanho do tipo de letra" -#: ../src/dialog_font.tcl:89 -#: ../src/dialog_font.tcl:108 -#: ../src/dialog_font.tcl:116 msgid "Stretch" msgstr "Expandir" -#: ../src/dialog_font.tcl:96 -#: ../src/dialog_font.tcl:115 -#: ../src/dialog_font.tcl:123 msgid "X and Y" msgstr "X e Y" -#: ../src/dialog_font.tcl:98 -#: ../src/dialog_font.tcl:117 -#: ../src/dialog_font.tcl:125 msgid "X only" msgstr "Apenas X" -#: ../src/dialog_font.tcl:100 -#: ../src/dialog_font.tcl:119 -#: ../src/dialog_font.tcl:127 msgid "Y only" msgstr "Apenas Y" -#: ../src/dialog_gatom.tcl:93 msgid "Atom Box Properties" msgstr "Propriedades da atom box" -#: ../src/dialog_gatom.tcl:99 msgid "Width:" msgstr "Largura:" -#: ../src/dialog_gatom.tcl:103 msgid "Limits" msgstr "Limites" -#: ../src/dialog_gatom.tcl:107 msgid "Lower:" msgstr "Inferior:" -#: ../src/dialog_gatom.tcl:112 -#: ../src/dialog_gatom.tcl:113 msgid "Upper:" msgstr "Superior:" -#: ../src/dialog_gatom.tcl:116 -#: ../src/dialog_gatom.tcl:121 -#: ../src/dialog_iemgui.tcl:600 -#: ../src/dialog_iemgui.tcl:652 -#: ../src/dialog_iemgui.tcl:657 msgid "Label" msgstr "Legenda" -#: ../src/dialog_gatom.tcl:124 -#: ../src/dialog_gatom.tcl:129 -msgid "Left " +#, fuzzy +msgid "Left" msgstr "Esquerda" -#: ../src/dialog_gatom.tcl:126 -#: ../src/dialog_gatom.tcl:131 msgid "Right" msgstr "Direita" -#: ../src/dialog_gatom.tcl:128 -#: ../src/dialog_gatom.tcl:133 msgid "Top" msgstr "Acima" -#: ../src/dialog_gatom.tcl:130 -#: ../src/dialog_gatom.tcl:135 msgid "Bottom" msgstr "Abaixo" -#: ../src/dialog_gatom.tcl:137 -#: ../src/dialog_gatom.tcl:145 -#: ../src/dialog_iemgui.tcl:574 msgid "Messages" msgstr "" -#: ../src/dialog_gatom.tcl:141 -#: ../src/dialog_gatom.tcl:149 -#: ../src/dialog_iemgui.tcl:578 msgid "Send symbol:" msgstr "Símbolo para enviar:" -#: ../src/dialog_gatom.tcl:147 -#: ../src/dialog_gatom.tcl:155 -#: ../src/dialog_iemgui.tcl:585 msgid "Receive symbol:" msgstr "Símbolo para receber:" -#: ../src/dialog_iemgui.tcl:197 msgid "Background color" msgstr "Cor de fundo" -#: ../src/dialog_iemgui.tcl:204 msgid "Foreground color" msgstr "Cor frontal" -#: ../src/dialog_iemgui.tcl:211 msgid "Label color" msgstr "Cor da legenda" -#: ../src/dialog_iemgui.tcl:272 msgid "Init" msgstr "Iniciar" -#: ../src/dialog_iemgui.tcl:275 -#: ../src/dialog_iemgui.tcl:546 msgid "No init" msgstr "Não iniciar" -#: ../src/dialog_iemgui.tcl:287 -#: ../src/dialog_iemgui.tcl:558 msgid "Jump on click" msgstr "Saltar no clique" -#: ../src/dialog_iemgui.tcl:290 -#: ../src/dialog_iemgui.tcl:561 msgid "Steady on click" msgstr "Manter no clique" -#: ../src/dialog_iemgui.tcl:498 +msgid "Bang" +msgstr "Bang" + +#, fuzzy +msgid "Flash Time (msec)" +msgstr "Delay (mseg):" + +msgid "Intrrpt:" +msgstr "" + +msgid "Hold:" +msgstr "" + +msgid "Toggle" +msgstr "Toggle" + +msgid "Non Zero Value" +msgstr "" + +msgid "Value:" +msgstr "" + +msgid "Number2" +msgstr "Number2" + +msgid "Width (digits):" +msgstr "" + +#, fuzzy +msgid "Height:" +msgstr "Direita" + +msgid "Output Range" +msgstr "" + +msgid "Log height:" +msgstr "" + +msgid "Vslider" +msgstr "Vslider" + +msgid "Hslider" +msgstr "Hslider" + +msgid "Vradio" +msgstr "Vradio" + +msgid "Num cells:" +msgstr "" + +msgid "Hradio" +msgstr "Hradio" + +msgid "VU Meter" +msgstr "VU Meter" + +msgid "Canvas" +msgstr "Canvas" + +msgid "Visible Rectangle (pix)" +msgstr "" + #, tcl-format msgid "%s Properties" msgstr "Propriedades de %s" -#: ../src/dialog_iemgui.tcl:550 -#: ../src/pd_menus.tcl:83 -#: ../src/pd_menus.tcl:84 -#: ../src/pd_menus.tcl:129 -#: ../src/pd_menus.tcl:130 -#: ../src/pd_menus.tcl:260 -#: ../src/pd_menus.tcl:273 -#: ../src/pd_menus.tcl:288 -#: ../src/pd_menus.tcl:301 -#: ../src/pd_menus.tcl:325 -#: ../src/pd_menus.tcl:338 -#: ../src/pd_menus.tcl:355 -#: ../src/pd_menus.tcl:382 -#: ../src/pd_menus.tcl:383 -#: ../src/pd_menus.tcl:410 -#: ../src/pd_menus.tcl:422 -#: ../src/pd_menus.tcl:449 -msgid "Save" -msgstr "Guardar" +msgid "Parameters" +msgstr "" -#: ../src/dialog_iemgui.tcl:608 -msgid "X offset" +#, fuzzy +msgid "X offset:" msgstr "Posição X" -#: ../src/dialog_iemgui.tcl:611 -#: ../src/dialog_iemgui.tcl:612 -msgid "Y offset" +#, fuzzy +msgid "Y offset:" msgstr "Posição Y" -#: ../src/dialog_iemgui.tcl:642 -#: ../src/dialog_iemgui.tcl:645 msgid "Colors" msgstr "Cores" -#: ../src/dialog_iemgui.tcl:648 -#: ../src/dialog_iemgui.tcl:651 msgid "Background" msgstr "Fundo" -#: ../src/dialog_iemgui.tcl:650 -#: ../src/dialog_iemgui.tcl:654 msgid "Front" msgstr "Fachada" -#: ../src/dialog_iemgui.tcl:662 -#: ../src/dialog_iemgui.tcl:668 msgid "Compose color" msgstr "Criar uma cor" -#: ../src/dialog_iemgui.tcl:682 -#: ../src/dialog_iemgui.tcl:688 msgid "Test label" msgstr "teste" -#: ../src/dialog_midi.tcl:85 +#, fuzzy +msgid "Send a Pd message" +msgstr "Enviar mensagem..." + +msgid "(use arrow keys for history)" +msgstr "" + msgid "MIDI Settings" msgstr "Configuração MIDI" -#: ../src/dialog_midi.tcl:220 msgid "ALSA MIDI Settings" msgstr "Configuração MIDI ALSA" -#: ../src/dialog_midi.tcl:331 -msgid "Use multiple ALSA devices" -msgstr "Usar vários dispositivos ALSA" - -#: ../src/dialog_midi.tcl:337 msgid "In Ports:" msgstr "Ports de entrada:" -#: ../src/dialog_midi.tcl:340 msgid "Out Ports:" msgstr "Ports de saída:" -#: ../src/g_editor.c:1663 -msgid "Discard changes to this window??" -msgstr "Rejeitar mudanças " - -#: ../src/g_editor.c:1668 -msgid "really quit?" -msgstr "Fechar mesmo?" - -#: ../src/g_editor.c:1699 -msgid "Close this window??" -msgstr "Fechar esta janela?" - -#: ../src/pd-gui.tcl:185 -#: ../src/pd-gui.tcl:195 -#: ../src/pd-gui.tcl:206 -msgid "Associated Files" -msgstr "Ficheiros associados" - -#: ../src/pd-gui.tcl:186 -#: ../src/pd-gui.tcl:196 -#: ../src/pd-gui.tcl:207 -msgid "Pd Files" -msgstr "Ficheiros Pd" - -#: ../src/pd-gui.tcl:187 -#: ../src/pd-gui.tcl:208 -msgid "Max Patch Files" -msgstr "Ficheiros Max-Patches" - -#: ../src/pd-gui.tcl:188 -#: ../src/pd-gui.tcl:209 -msgid "Max Text Files" -msgstr "Ficheiros Max-Texto" - -#: ../src/pd-gui.tcl:197 -msgid "Max Patch Files (.pat)" -msgstr "Ficheiros Max-Patches (.pat)" - -#: ../src/pd-gui.tcl:198 -msgid "Max Text Files (.mxt)" -msgstr "Ficheiros Max-Texto (.mxt)" - -#: ../src/pd-gui.tcl:270 -#, tcl-format -msgid "WARNING: Font family '%s' not found, using default (%s)" -msgstr "AVISO: O tipo de letra '%s' não foi encontrado, usando o padrão (%s)" +msgid "Pd search path for objects, help, fonts, and other files" +msgstr "" -#: ../src/pd-gui.tcl:278 -#, tcl-format -msgid "WARNING: Font weight '%s' not found, using default (%s)" -msgstr "AVISO: O formato de letra '%s' não foi encontrado, usando o padrão (%s)" +msgid "Use standard paths" +msgstr "" + +msgid "Verbose" +msgstr "" + +msgid "Pd Documents Directory" +msgstr "" + +msgid "Browse" +msgstr "" + +msgid "Reset" +msgstr "" + +msgid "Disable" +msgstr "" + +msgid "Externals Install Directory" +msgstr "" -#: ../src/pd-gui.tcl:303 -#, tcl-format #, fuzzy -# this is broken, its missing all of the formats -msgid "ERROR: %s failed to find font size (%s) that fits into %sx%s!" -msgstr "AVISO: O tamanho de letra '%s' não foi encontrado, usando o padrão (%s)" +msgid "Clear" +msgstr "Limpar menu" + +msgid "Choose Pd documents directory:" +msgstr "" + +msgid "Install externals to directory:" +msgstr "" + +msgid "Add a new path" +msgstr "" + +msgid "Add new library" +msgstr "" + +msgid "Edit library" +msgstr "" + +msgid "Pd libraries to load on startup" +msgstr "" + +msgid "Startup flags:" +msgstr "" + +msgid "Defeat real-time scheduling" +msgstr "" -#: ../src/pd-gui.tcl:478 #, fuzzy -msgid "ERROR: 'pd' never showed up, 'pd-gui' quitting!" -msgstr "ERRO: 'pd' não apareceu, 'pd-gui' vai desligar-se!" +msgid "Help Browser" +msgstr "Navegador" -#: ../src/pd_menucommands.tcl:19 -msgid "Untitled" -msgstr "Sem título" +msgid "(Tcl) MISSING CLOSE-BRACE '}': " +msgstr "" -#: ../src/pd_menucommands.tcl:78 -#: ../src/pd_menucommands.tcl:79 -#: ../src/pd_menucommands.tcl:90 -msgid "Send Message..." -msgstr "Enviar mensagem..." +msgid "(Tcl) INVALID COMMAND NAME: " +msgstr "" -#: ../src/pd_menucommands.tcl:82 -#: ../src/pd_menucommands.tcl:83 -#: ../src/pd_menucommands.tcl:94 -#: ../src/pd_menus.tcl:87 -#: ../src/pd_menus.tcl:88 -#: ../src/pd_menus.tcl:133 -#: ../src/pd_menus.tcl:134 -#: ../src/pd_menus.tcl:147 -#: ../src/pd_menus.tcl:192 -#: ../src/pd_menus.tcl:193 -#: ../src/pd_menus.tcl:265 -#: ../src/pd_menus.tcl:278 -#: ../src/pd_menus.tcl:292 -#: ../src/pd_menus.tcl:305 -#: ../src/pd_menus.tcl:329 -#: ../src/pd_menus.tcl:342 -#: ../src/pd_menus.tcl:360 -#: ../src/pd_menus.tcl:387 -#: ../src/pd_menus.tcl:414 -#: ../src/pd_menus.tcl:426 -#: ../src/pd_menus.tcl:453 -#: ../startup/object_db.tcl:123 -msgid "Message" -msgstr "Mensagem" +msgid "(Tcl) UNHANDLED ERROR: " +msgstr "" -#: ../src/pd_menucommands.tcl:108 -#: ../src/pd_menucommands.tcl:111 -#: ../src/pd_menus.tcl:112 -#: ../src/pd_menus.tcl:113 -#: ../src/pd_menus.tcl:117 -#: ../src/pd_menus.tcl:118 -#: ../src/pd_menus.tcl:158 -#: ../src/pd_menus.tcl:159 -#: ../src/pd_menus.tcl:163 -#: ../src/pd_menus.tcl:164 -msgid "Font" -msgstr "Tipo de letra" +#, tcl-format +msgid "[deken]: installed version [%1$s] > %2$s...skipping!" +msgstr "" + +#, tcl-format +msgid "[deken]: installed version [%1$s] < %2$s...overwriting!" +msgstr "" + +#, tcl-format +msgid "[deken]: installed version [%1$s] == %2$s...skipping!" +msgstr "" + +msgid "[deken]: " +msgstr "" + +#, tcl-format +msgid "Successfully unzipped %1$s into %2$s." +msgstr "" + +msgid "[deken]: Unable to extract package automatically." +msgstr "" + +msgid "Please perform the following steps manually:" +msgstr "" + +#, tcl-format +msgid "1. Unzip %s." +msgstr "" + +#, tcl-format +msgid "2. Copy the contents into %s." +msgstr "" + +#, tcl-format +msgid "[deken] uninstalling '%s'" +msgstr "" + +#, tcl-format +msgid "Uninstalling %1$s from %2$s failed!" +msgstr "" + +#, tcl-format +msgid "[deken] deken-plugin.tcl (Pd externals search) loaded from %s." +msgstr "" + +#, tcl-format +msgid "[deken] Platform detected: %s" +msgstr "" + +#, tcl-format +msgid "[deken] Platform re-detected: %s" +msgstr "" + +msgid "Show all" +msgstr "" + +#, fuzzy +msgid "Search" +msgstr "Procurar em" + +msgid "To get a list of all available externals, try an empty search." +msgstr "" + +msgid "Find externals" +msgstr "" + +msgid "Only install externals uploaded by people you trust." +msgstr "" -#: ../src/pd_menucommands.tcl:123 -#: ../src/pd_menucommands.tcl:126 -#: ../src/pd_menus.tcl:138 -#: ../src/pd_menus.tcl:183 -#: ../src/pd_menus.tcl:184 msgid "Preferences" msgstr "Preferências" -#: ../src/pd_menus.tcl:45 -msgid "Edit" -msgstr "Editar" +msgid "Installation options:" +msgstr "" -#: ../src/pd_menus.tcl:45 -msgid "File" -msgstr "Ficheiro" +msgid "Try to remove libraries before (re)installing them?" +msgstr "" -#: ../src/pd_menus.tcl:45 -#: ../src/pdtk_canvas.tcl:48 -#: ../src/pdtk_canvas.tcl:113 -msgid "Help" -msgstr "Ajuda" +msgid "Show README of newly installed libraries (if present)?" +msgstr "" -#: ../src/pd_menus.tcl:45 -msgid "Media" +msgid "Should newly installed libraries be added to Pd's search path?" msgstr "" -#: ../src/pd_menus.tcl:45 -msgid "Put" -msgstr "Put" +msgid "Platform settings:" +msgstr "" -#: ../src/pd_menus.tcl:45 -msgid "Window" -msgstr "Janela" +#, tcl-format +msgid "Default platform: %s" +msgstr "" -#: ../src/pd_menus.tcl:81 -#: ../src/pd_menus.tcl:82 -#: ../src/pd_menus.tcl:127 -#: ../src/pd_menus.tcl:128 -#: ../src/pd_menus.tcl:255 -#: ../src/pd_menus.tcl:267 -#: ../src/pd_menus.tcl:285 -#: ../src/pd_menus.tcl:298 -#: ../src/pd_menus.tcl:322 -#: ../src/pd_menus.tcl:335 -#: ../src/pd_menus.tcl:349 -#: ../src/pd_menus.tcl:376 -#: ../src/pd_menus.tcl:380 -#: ../src/pd_menus.tcl:407 -#: ../src/pd_menus.tcl:419 -#: ../src/pd_menus.tcl:446 -msgid "New" -msgstr "Novo" +msgid "User-defined platform:" +msgstr "" -#: ../src/pd_menus.tcl:82 -#: ../src/pd_menus.tcl:83 -#: ../src/pd_menus.tcl:128 -#: ../src/pd_menus.tcl:129 -#: ../src/pd_menus.tcl:256 -#: ../src/pd_menus.tcl:268 -#: ../src/pd_menus.tcl:286 -#: ../src/pd_menus.tcl:299 -#: ../src/pd_menus.tcl:323 -#: ../src/pd_menus.tcl:336 -#: ../src/pd_menus.tcl:350 -#: ../src/pd_menus.tcl:377 -#: ../src/pd_menus.tcl:381 -#: ../src/pd_menus.tcl:408 -#: ../src/pd_menus.tcl:420 -#: ../src/pd_menus.tcl:447 -#: ../src/pdtk_canvas.tcl:46 -#: ../src/pdtk_canvas.tcl:111 -#: ../src/pdtk_canvas.tcl:131 -#: ../src/pdtk_canvas.tcl:133 -msgid "Open" -msgstr "Abrir" +msgid "Hide foreign architectures?" +msgstr "" + +#, fuzzy, tcl-format +msgid "Deken %s Preferences" +msgstr "Preferências" + +msgid "[deken]: Start searching for externals..." +msgstr "" + +#, tcl-format +msgid "[deken]: online? %s" +msgstr "" + +msgid "Are you online?" +msgstr "" + +msgid "Unable to perform search." +msgstr "" + +msgid "[deken]: No matching externals found." +msgstr "" + +msgid "Try using the full name e.g. 'freeverb'." +msgstr "" + +msgid "No matching externals found." +msgstr "" + +msgid "Please select a (writable) installation directory!" +msgstr "" + +#, tcl-format +msgid "Install %1$s to %2$s?" +msgstr "" + +#, tcl-format +msgid "" +"Commencing downloading of:\n" +"%1$s\n" +"Into %2$s..." +msgstr "" + +msgid "aborting.\n" +msgstr "" + +#, tcl-format +msgid "Unable to add %s to search paths" +msgstr "" + +#, tcl-format +msgid "Add %s to the Pd search paths?" +msgstr "" + +#, tcl-format +msgid "Added %s to search paths" +msgstr "" + +#, tcl-format +msgid "Unable to download from %1$s [%2$s]" +msgstr "" + +#, tcl-format +msgid "Unable to remove stray file %s" +msgstr "" + +#, tcl-format +msgid "Unable to rename downloaded file to %s" +msgstr "" + +#, fuzzy, tcl-format +msgid "searching for '%s'" +msgstr "Rejeitar modificações em '%s'?" + +#, tcl-format +msgid "Uploaded by %1$s @ %2$s" +msgstr "" + +msgid "Install package" +msgstr "" + +#, fuzzy +msgid "Open webpage" +msgstr "Abrir recente" + +msgid "_" +msgstr "" + +#, tcl-format +msgid "" +"Do you want Pd to create a documents directory for patches and external " +"libraries?\n" +"\n" +"Location: %s\n" +"\n" +"You can change or disable this later in the Path preferences." +msgstr "" + +#, tcl-format +msgid "" +"Pd documents directory cannot be found:\n" +"\n" +"%s\n" +"\n" +"Choose a new location?" +msgstr "" + +#, tcl-format +msgid "Couldn't create Pd documents directory: %s\n" +msgstr "" + +#, tcl-format +msgid "Couldn't create \"externals\" directory in: %s\n" +msgstr "" + +#, tcl-format +msgid "Couldn't create preferences \"%1$s\" in %2$s" +msgstr "" + +msgid "About Pd" +msgstr "Sobre o Pd" + +msgid "Save" +msgstr "Guardar" -#: ../src/pd_menus.tcl:84 -#: ../src/pd_menus.tcl:85 -#: ../src/pd_menus.tcl:130 -#: ../src/pd_menus.tcl:131 -#: ../src/pd_menus.tcl:261 -#: ../src/pd_menus.tcl:274 -#: ../src/pd_menus.tcl:289 -#: ../src/pd_menus.tcl:302 -#: ../src/pd_menus.tcl:326 -#: ../src/pd_menus.tcl:339 -#: ../src/pd_menus.tcl:356 -#: ../src/pd_menus.tcl:383 -#: ../src/pd_menus.tcl:384 -#: ../src/pd_menus.tcl:411 -#: ../src/pd_menus.tcl:423 -#: ../src/pd_menus.tcl:450 msgid "Save As..." msgstr "Guardar como..." -#: ../src/pd_menus.tcl:88 -#: ../src/pd_menus.tcl:89 -#: ../src/pd_menus.tcl:134 -#: ../src/pd_menus.tcl:135 -#: ../src/pd_menus.tcl:267 -#: ../src/pd_menus.tcl:280 -#: ../src/pd_menus.tcl:293 -#: ../src/pd_menus.tcl:306 -#: ../src/pd_menus.tcl:330 -#: ../src/pd_menus.tcl:343 -#: ../src/pd_menus.tcl:362 -#: ../src/pd_menus.tcl:388 -#: ../src/pd_menus.tcl:389 -#: ../src/pd_menus.tcl:415 -#: ../src/pd_menus.tcl:427 -#: ../src/pd_menus.tcl:454 msgid "Print..." msgstr "Imprimir" -#: ../src/pd_menus.tcl:93 -#: ../src/pd_menus.tcl:94 -#: ../src/pd_menus.tcl:139 -#: ../src/pd_menus.tcl:140 +msgid "Paste Replace" +msgstr "" + +msgid "Duplicate" +msgstr "Duplicar" + +#, fuzzy +msgid "Zoom In" +msgstr "Zoom" + +#, fuzzy +msgid "Zoom Out" +msgstr "Zoom" + +msgid "Tidy Up" +msgstr "Arrumar" + +msgid "(Dis)Connect Selection" +msgstr "" + +msgid "Triggerize" +msgstr "" + +msgid "Edit Mode" +msgstr "Modo de edição" + msgid "Undo" msgstr "Anular" -#: ../src/pd_menus.tcl:95 -#: ../src/pd_menus.tcl:96 -#: ../src/pd_menus.tcl:141 -#: ../src/pd_menus.tcl:142 msgid "Redo" msgstr "Restaurar" -#: ../src/pd_menus.tcl:98 -#: ../src/pd_menus.tcl:99 -#: ../src/pd_menus.tcl:144 -#: ../src/pd_menus.tcl:145 +msgid "List of objects..." +msgstr "" + +msgid "New" +msgstr "Novo" + +msgid "Open" +msgstr "Abrir" + +#, fuzzy +msgid "Message..." +msgstr "Mensagem" + msgid "Cut" msgstr "Cortar" -#: ../src/pd_menus.tcl:104 -#: ../src/pd_menus.tcl:105 -#: ../src/pd_menus.tcl:150 -#: ../src/pd_menus.tcl:151 -msgid "Duplicate" -msgstr "Duplicar" - -#: ../src/pd_menus.tcl:106 -#: ../src/pd_menus.tcl:107 -#: ../src/pd_menus.tcl:152 -#: ../src/pd_menus.tcl:153 msgid "Select All" msgstr "Escolher tudo" -#: ../src/pd_menus.tcl:110 -#: ../src/pd_menus.tcl:111 -#: ../src/pd_menus.tcl:115 -#: ../src/pd_menus.tcl:116 -#: ../src/pd_menus.tcl:156 -#: ../src/pd_menus.tcl:157 -#: ../src/pd_menus.tcl:161 -#: ../src/pd_menus.tcl:162 -msgid "Text Editor" -msgstr "Editor de texto" - -#: ../src/pd_menus.tcl:120 -#: ../src/pd_menus.tcl:121 -#: ../src/pd_menus.tcl:166 -#: ../src/pd_menus.tcl:167 -msgid "Tidy Up" -msgstr "Arrumar" - -#: ../src/pd_menus.tcl:122 -#: ../src/pd_menus.tcl:123 -#: ../src/pd_menus.tcl:168 -#: ../src/pd_menus.tcl:169 -msgid "Toggle Console" -msgstr "Mostrar consola" - -#: ../src/pd_menus.tcl:124 -#: ../src/pd_menus.tcl:125 -#: ../src/pd_menus.tcl:170 -#: ../src/pd_menus.tcl:171 msgid "Clear Console" msgstr "Limpar consola" -#: ../src/pd_menus.tcl:128 -#: ../src/pd_menus.tcl:129 -#: ../src/pd_menus.tcl:174 -#: ../src/pd_menus.tcl:175 -msgid "Edit Mode" -msgstr "Modo de edição" - -#: ../src/pd_menus.tcl:145 -#: ../src/pd_menus.tcl:190 -#: ../src/pd_menus.tcl:191 msgid "Object" msgstr "Object" -#: ../src/pd_menus.tcl:149 -#: ../src/pd_menus.tcl:194 -#: ../src/pd_menus.tcl:195 +msgid "Message" +msgstr "Mensagem" + msgid "Number" msgstr "Número" -#: ../src/pd_menus.tcl:151 -#: ../src/pd_menus.tcl:196 -#: ../src/pd_menus.tcl:197 msgid "Symbol" msgstr "Symbol" -#: ../src/pd_menus.tcl:153 -#: ../src/pd_menus.tcl:198 -#: ../src/pd_menus.tcl:199 msgid "Comment" msgstr "Comment" -#: ../src/pd_menus.tcl:156 -#: ../src/pd_menus.tcl:201 -#: ../src/pd_menus.tcl:202 -msgid "Bang" -msgstr "Bang" - -#: ../src/pd_menus.tcl:158 -#: ../src/pd_menus.tcl:203 -#: ../src/pd_menus.tcl:204 -msgid "Toggle" -msgstr "Toggle" - -#: ../src/pd_menus.tcl:160 -#: ../src/pd_menus.tcl:205 -#: ../src/pd_menus.tcl:206 -msgid "Number2" -msgstr "Number2" - -#: ../src/pd_menus.tcl:162 -#: ../src/pd_menus.tcl:207 -#: ../src/pd_menus.tcl:208 -msgid "Vslider" -msgstr "Vslider" - -#: ../src/pd_menus.tcl:164 -#: ../src/pd_menus.tcl:209 -#: ../src/pd_menus.tcl:210 -msgid "Hslider" -msgstr "Hslider" - -#: ../src/pd_menus.tcl:166 -#: ../src/pd_menus.tcl:211 -#: ../src/pd_menus.tcl:212 -msgid "Vradio" -msgstr "Vradio" - -#: ../src/pd_menus.tcl:168 -#: ../src/pd_menus.tcl:213 -#: ../src/pd_menus.tcl:214 -msgid "Hradio" -msgstr "Hradio" - -#: ../src/pd_menus.tcl:170 -#: ../src/pd_menus.tcl:215 -#: ../src/pd_menus.tcl:216 -msgid "VU Meter" -msgstr "VU Meter" - -#: ../src/pd_menus.tcl:172 -#: ../src/pd_menus.tcl:217 -#: ../src/pd_menus.tcl:218 -msgid "Canvas" -msgstr "Canvas" - -#: ../src/pd_menus.tcl:175 -#: ../src/pd_menus.tcl:220 -#: ../src/pd_menus.tcl:221 msgid "Graph" msgstr "Graph" -#: ../src/pd_menus.tcl:176 -#: ../src/pd_menus.tcl:221 -#: ../src/pd_menus.tcl:222 -msgid "Array" -msgstr "Array" - -#: ../src/pd_menus.tcl:181 -#: ../src/pd_menus.tcl:226 -#: ../src/pd_menus.tcl:227 msgid "Find..." msgstr "Localizar..." -#: ../src/pd_menus.tcl:183 -#: ../src/pd_menus.tcl:228 -#: ../src/pd_menus.tcl:229 msgid "Find Again" msgstr "Localizar de novo" -#: ../src/pd_menus.tcl:185 -#: ../src/pd_menus.tcl:230 -#: ../src/pd_menus.tcl:231 msgid "Find Last Error" msgstr "Localizar último erro" -#: ../src/pd_menus.tcl:191 -#: ../src/pd_menus.tcl:236 -#: ../src/pd_menus.tcl:237 msgid "DSP On" msgstr "DSP Ligado" -#: ../src/pd_menus.tcl:193 -#: ../src/pd_menus.tcl:238 -#: ../src/pd_menus.tcl:239 msgid "DSP Off" msgstr "DSP Desligado" -#: ../src/pd_menus.tcl:196 -#: ../src/pd_menus.tcl:242 -#: ../src/pd_menus.tcl:269 msgid "Test Audio and MIDI..." msgstr "Testar audio e MIDI..." -#: ../src/pd_menus.tcl:198 -#: ../src/pd_menus.tcl:244 -#: ../src/pd_menus.tcl:271 msgid "Load Meter" msgstr "Carregar medidor" -#: ../src/pd_menus.tcl:205 -#: ../src/pd_menus.tcl:251 -#: ../src/pd_menus.tcl:278 +msgid "Audio Settings..." +msgstr "Configuração audio..." + +msgid "MIDI Settings..." +msgstr "Configuração MIDI..." + msgid "Minimize" msgstr "Minimizar" -#: ../src/pd_menus.tcl:207 -#: ../src/pd_menus.tcl:253 -#: ../src/pd_menus.tcl:280 msgid "Zoom" msgstr "Zoom" -#: ../src/pd_menus.tcl:210 -#: ../src/pd_menus.tcl:256 -#: ../src/pd_menus.tcl:283 -msgid "Parent Window" -msgstr "Janela superior" - -#: ../src/pd_menus.tcl:216 -#: ../src/pd_menus.tcl:262 -#: ../src/pd_menus.tcl:289 msgid "Bring All to Front" msgstr "" -#: ../src/pd_menus.tcl:224 -#: ../src/pd_menus.tcl:241 -#: ../src/pd_menus.tcl:253 -#: ../src/pd_menus.tcl:270 -#: ../src/pd_menus.tcl:297 -#: ../src/pd_menus.tcl:335 -#: ../src/pd_menus.tcl:362 -msgid "About Pd" -msgstr "Sobre o Pd" +#, fuzzy +msgid "Next Window" +msgstr "Janela superior" + +#, fuzzy +msgid "Previous Window" +msgstr "Janela superior" + +msgid "Parent Window" +msgstr "Janela superior" -#: ../src/pd_menus.tcl:227 -#: ../src/pd_menus.tcl:273 -#: ../src/pd_menus.tcl:300 msgid "HTML Manual..." msgstr "Manual HTML" -#: ../src/pd_menus.tcl:229 -#: ../src/pd_menus.tcl:275 -#: ../src/pd_menus.tcl:302 msgid "Browser..." msgstr "Navegador" -#: ../src/pd_menus.tcl:248 -#: ../src/pd_menus.tcl:260 -#: ../src/pd_menus.tcl:342 -#: ../src/pd_menus.tcl:369 -msgid "Preferences..." -msgstr "Preferências..." - -#: ../src/pd_menus.tcl:257 -#: ../src/pd_menus.tcl:270 -#: ../src/pd_menus.tcl:352 -#: ../src/pd_menus.tcl:379 -msgid "Open Recent" -msgstr "Abrir recente" +msgid "puredata.info" +msgstr "" -#: ../src/pd_menus.tcl:263 -msgid "Audio Settings..." +msgid "Report a bug" +msgstr "" + +msgid "Clear Menu" +msgstr "Limpar menu" + +msgid "" +"Delete all preferences?\n" +"(takes effect when Pd is restarted)" +msgstr "" + +msgid "Path..." +msgstr "" + +msgid "Startup..." +msgstr "" + +#, fuzzy +msgid "Audio..." msgstr "Configuração audio..." -#: ../src/pd_menus.tcl:265 -msgid "MIDI Settings..." +#, fuzzy +msgid "MIDI..." msgstr "Configuração MIDI..." -#: ../src/pd_menus.tcl:296 -#: ../src/pd_menus.tcl:309 -#: ../src/pd_menus.tcl:333 -#: ../src/pd_menus.tcl:346 -#: ../src/pd_menus.tcl:393 -#: ../src/pd_menus.tcl:420 -#: ../src/pd_menus.tcl:432 -#: ../src/pd_menus.tcl:459 +#, fuzzy +msgid "Zoom New Windows" +msgstr "Janela superior" + +#, fuzzy +msgid "Save All Preferences" +msgstr "Preferências" + +#, fuzzy +msgid "Save to..." +msgstr "Guardar como..." + +msgid "Load from..." +msgstr "" + +msgid "Forget All..." +msgstr "" + +msgid "Open Recent" +msgstr "Abrir recente" + msgid "Quit" msgstr "Sair" -#: ../src/pd_menus.tcl:304 -#: ../src/pd_menus.tcl:331 -msgid "Clear Menu" -msgstr "Limpar menu" - -#: ../src/pdtk_canvas.tcl:44 -#: ../src/pdtk_canvas.tcl:109 -#: ../src/pdtk_canvas.tcl:126 -#: ../src/pdtk_canvas.tcl:128 msgid "Properties" msgstr "Propriedades" -#: ../src/pdwindow.tcl:43 +#, fuzzy +msgid "Audio on" +msgstr "Configuração audio" + +msgid "Audio off" +msgstr "" + +msgid "(Tcl) MISSING CLOSE-BRACKET ']': " +msgstr "" + +msgid "Tcl:" +msgstr "" + +msgid "Pd" +msgstr "" + msgid "DSP" msgstr "DSP" -#: ../startup/object_db.tcl:113 -msgid "Signal" -msgstr "Sinal" +msgid "Audio I/O error" +msgstr "" -#: ../startup/object_db.tcl:114 -msgid "Generators" -msgstr "Geradores" +msgid "Log:" +msgstr "" -#: ../startup/object_db.tcl:115 -msgid "Filters" -msgstr "Filtros" +msgid "fatal" +msgstr "" -#: ../startup/object_db.tcl:116 -#: ../startup/object_db.tcl:124 -msgid "Math" -msgstr "Matemática" +msgid "error" +msgstr "" -#: ../startup/object_db.tcl:117 -#: ../startup/object_db.tcl:125 -msgid "I/O" -msgstr "Entrada/Saída" +msgid "normal" +msgstr "" + +msgid "debug" +msgstr "" + +msgid "all" +msgstr "" + +msgid "New..." +msgstr "" + +#, fuzzy +msgid "Edit..." +msgstr "Editar" + +#, fuzzy +msgid "Delete" +msgstr "Apagar array" -#: ../startup/object_db.tcl:118 -#: ../startup/object_db.tcl:126 -msgid "Sampling" +#, tcl-format +msgid "Ignoring '%s': doesn't exist" msgstr "" -#: ../startup/object_db.tcl:119 -#: ../startup/object_db.tcl:128 -msgid "Routing" +#, tcl-format +msgid "Ignoring '%s': doesn't look like a Pd-file" msgstr "" -#: ../startup/object_db.tcl:120 -#: ../startup/object_db.tcl:129 -msgid "Others" -msgstr "Outros" +#~ msgid "for:" +#~ msgstr "por:" + +#~ msgid "WARNING: Font family '%s' not found, using default (%s)" +#~ msgstr "" +#~ "AVISO: O tipo de letra '%s' não foi encontrado, usando o padrão (%s)" + +#~ msgid "WARNING: Font weight '%s' not found, using default (%s)" +#~ msgstr "" +#~ "AVISO: O formato de letra '%s' não foi encontrado, usando o padrão (%s)" + +#~ msgid "really quit?" +#~ msgstr "Fechar mesmo?" + +#~ msgid "GUI" +#~ msgstr "GUI" + +#~ msgid "Close this window??" +#~ msgstr "Fechar esta janela?" + +#~ msgid "Output device 3:" +#~ msgstr "Dispositivo de saída 3:" + +#~ msgid "Preferences..." +#~ msgstr "Preferências..." + +#~ msgid "Filters" +#~ msgstr "Filtros" + +#, fuzzy +#~ msgid "ERROR: 'pd' never showed up, 'pd-gui' quitting!" +#~ msgstr "ERRO: 'pd' não apareceu, 'pd-gui' vai desligar-se!" + +#~ msgid "Input device 3:" +#~ msgstr "Dispositivo de entrada 3:" + +#~ msgid "Toggle Console" +#~ msgstr "Mostrar consola" + +#~ msgid "Math" +#~ msgstr "Matemática" + +#~ msgid "Others" +#~ msgstr "Outros" + +#~ msgid "Text Editor" +#~ msgstr "Editor de texto" + +#~ msgid "Discard changes to this window??" +#~ msgstr "Rejeitar mudanças " + +#~ msgid "Output device 4:" +#~ msgstr "Dispositivo de saída 4:" + +#~ msgid "Max Patch Files" +#~ msgstr "Ficheiros Max-Patches" + +# this is broken, its missing all of the formats +#, fuzzy +#~ msgid "ERROR: %s failed to find font size (%s) that fits into %sx%s!" +#~ msgstr "" +#~ "AVISO: O tamanho de letra '%s' não foi encontrado, usando o padrão (%s)" + +#~ msgid "Pd Files" +#~ msgstr "Ficheiros Pd" + +#~ msgid "Max Patch Files (.pat)" +#~ msgstr "Ficheiros Max-Patches (.pat)" + +#~ msgid "Generators" +#~ msgstr "Geradores" + +#~ msgid "Input device 2:" +#~ msgstr "Dispositivo de entrada 2:" + +#~ msgid "I/O" +#~ msgstr "Entrada/Saída" + +#~ msgid "Input device 4:" +#~ msgstr "Dispositivo de entrada 4:" + +#~ msgid "Untitled" +#~ msgstr "Sem título" + +#~ msgid "Max Text Files (.mxt)" +#~ msgstr "Ficheiros Max-Texto (.mxt)" + +#~ msgid "Associated Files" +#~ msgstr "Ficheiros associados" + +#~ msgid "Signal" +#~ msgstr "Sinal" + +#~ msgid "Max Text Files" +#~ msgstr "Ficheiros Max-Texto" + +#~ msgid "Output device 2:" +#~ msgstr "Dispositivo de saída 2:" -#: ../startup/object_db.tcl:127 -msgid "GUI" -msgstr "GUI" +#~ msgid "Use multiple ALSA devices" +#~ msgstr "Usar vários dispositivos ALSA" +#~ msgid "Font Properties" +#~ msgstr "Propriedades do tipo de letra" diff --git a/po/ru.po b/po/ru.po index 0283ee3b2a..04b1de3b21 100644 --- a/po/ru.po +++ b/po/ru.po @@ -3,8 +3,8 @@ msgid "" msgstr "" "Project-Id-Version: Pure Data 0.47.1_ceammc\n" "Report-Msgid-Bugs-To: pd-dev@iem.at\n" -"POT-Creation-Date: 2019-04-09 22:10+0300\n" -"PO-Revision-Date: 2019-04-09 22:11+0300\n" +"POT-Creation-Date: 2019-11-19 03:38+0300\n" +"PO-Revision-Date: 2019-11-28 13:34+0300\n" "Last-Translator: Serge Poltavski \n" "Language-Team: Russian\n" "Language: ru\n" @@ -186,6 +186,10 @@ msgstr "Выравнивание" msgid "Align To Grid" msgstr "Выровнять по сетке" +#: ../ceammc/ext/src/spat/hoa_2d_scope.cpp +msgid "Ambisonic Order" +msgstr "Порядок Амбисоника" + #: ../tcl/dialog_canvas.tcl msgid "Appearance on parent patch" msgstr "Вид на родительском патче" @@ -232,7 +236,7 @@ msgstr "Сторона прикрепления" msgid "Audio I/O error" msgstr "Ошибка Audio I/O" -#: ../tcl/dialog_audio.tcl +#: ../ceammc/ext/src/ui/ui_dsp.cpp ../tcl/dialog_audio.tcl msgid "Audio Settings" msgstr "Настройки аудио" @@ -298,6 +302,10 @@ msgstr "Цвет границы" msgid "Bottom" msgstr "Снизу" +#: ../ceammc/ext/src/ui/ui_slider2d.cpp +msgid "Bottom Y-value" +msgstr "Нижнее Y-значение" + #: ../ceammc/ext/src/lib/cicm/Sources/eclass.cpp #: ../ceammc/ext/src/ui/cicm/Sources/eclass.c ../ceammc/ext/src/ui/ui_gain.cpp #: ../ceammc/ext/src/ui/ui_gain2.cpp ../ceammc/ext/src/ui/ui_rslider.cpp @@ -367,6 +375,10 @@ msgstr "Очистить консоль" msgid "Clear Menu" msgstr "Очистить меню" +#: ../ceammc/ext/src/ui/ui_polar.cpp +msgid "Clockwise" +msgstr "По часовой стрелке" + #: ../tcl/dialog_find.tcl ../tcl/pd_menus.tcl msgid "Close" msgstr "Закрыть" @@ -512,6 +524,10 @@ msgstr "Удалить array" msgid "Digits" msgstr "Число разрядов" +#: ../ceammc/ext/src/ui/ui_polar.cpp +msgid "Direction" +msgstr "Направление" + #: ../tcl/dialog_path.tcl msgid "Disable" msgstr "Отключить" @@ -667,6 +683,10 @@ msgstr "Найдено ‘%1$s’ в %2$s" msgid "Front" msgstr "Передний план" +#: ../ceammc/ext/src/spat/hoa_2d_scope.cpp +msgid "Gain" +msgstr "Чувствительность" + #: ../tcl/pd_menus.tcl msgid "Graph" msgstr "" @@ -851,6 +871,10 @@ msgstr "Слева" msgid "Left " msgstr "Слева " +#: ../ceammc/ext/src/ui/ui_slider2d.cpp +msgid "Left X-value" +msgstr "Левое X-значение" + #: ../ceammc/ext/src/ui/ui_keyboard.cpp msgid "Leftmost MIDI note" msgstr "Начальная MIDI нота" @@ -916,15 +940,18 @@ msgstr "Настройки MIDI" msgid "MIDI Settings..." msgstr "Настройки MIDI..." -#: ../ceammc/ext/src/ui/ui_knob.cpp ../ceammc/ext/src/ui/ui_slider.cpp +#: ../ceammc/ext/src/ui/ui_gain.cpp ../ceammc/ext/src/ui/ui_knob.cpp +#: ../ceammc/ext/src/ui/ui_slider.cpp msgid "MIDI channel" msgstr "MIDI канал" -#: ../ceammc/ext/src/ui/ui_knob.cpp ../ceammc/ext/src/ui/ui_slider.cpp +#: ../ceammc/ext/src/ui/ui_gain.cpp ../ceammc/ext/src/ui/ui_knob.cpp +#: ../ceammc/ext/src/ui/ui_slider.cpp msgid "MIDI control" msgstr "MIDI контроллер" -#: ../ceammc/ext/src/ui/ui_knob.cpp ../ceammc/ext/src/ui/ui_slider.cpp +#: ../ceammc/ext/src/ui/ui_gain.cpp ../ceammc/ext/src/ui/ui_knob.cpp +#: ../ceammc/ext/src/ui/ui_slider.cpp msgid "MIDI pickup" msgstr "Подхват MIDI значения" @@ -933,6 +960,7 @@ msgid "MIDI..." msgstr "MIDI…" #: ../ceammc/ext/src/lib/cicm/Sources/eclass.cpp +#: ../ceammc/ext/src/spat/hoa_2d_scope.cpp #: ../ceammc/ext/src/ui/ui_arrayview.cpp ../ceammc/ext/src/ui/ui_display.cpp #: ../ceammc/ext/src/ui/ui_env.cpp ../ceammc/ext/src/ui/ui_gain.cpp #: ../ceammc/ext/src/ui/ui_gain2.cpp ../ceammc/ext/src/ui/ui_icon.cpp @@ -940,8 +968,8 @@ msgstr "MIDI…" #: ../ceammc/ext/src/ui/ui_link.cpp ../ceammc/ext/src/ui/ui_matrix.cpp #: ../ceammc/ext/src/ui/ui_menu.cpp ../ceammc/ext/src/ui/ui_meter.cpp #: ../ceammc/ext/src/ui/ui_number.cpp ../ceammc/ext/src/ui/ui_number_tilde.cpp -#: ../ceammc/ext/src/ui/ui_radio.cpp ../ceammc/ext/src/ui/ui_rslider.cpp -#: ../ceammc/ext/src/ui/ui_scope.cpp +#: ../ceammc/ext/src/ui/ui_polar.cpp ../ceammc/ext/src/ui/ui_radio.cpp +#: ../ceammc/ext/src/ui/ui_rslider.cpp ../ceammc/ext/src/ui/ui_scope.cpp msgid "Main" msgstr "Основные" @@ -1071,6 +1099,10 @@ msgstr "Синхронизировать с мышью" msgid "Name:" msgstr "Имя:" +#: ../ceammc/ext/src/spat/hoa_2d_scope.cpp +msgid "Negative Harmonics Color" +msgstr "Цвет негативных гармоник" + #: ../tcl/pd_menus.tcl msgid "New" msgstr "Новый" @@ -1173,6 +1205,10 @@ msgstr "Устройства вывода" msgid "Output Range" msgstr "Диапазон значений" +#: ../ceammc/ext/src/lib/ceammc_ui.h +msgid "Output mouse events" +msgstr "Выводить события мыши" + #: ../ceammc/ext/src/ui/ui_slider.cpp msgid "Output on mouse up" msgstr "Выводить при отпускании мыши" @@ -1216,7 +1252,7 @@ msgstr "" #: ../tcl/dialog_path.tcl msgid "Pd Documents Directory" -msgstr "" +msgstr "Каталог Pd документов" #: ../tcl/pd-gui.tcl msgid "Pd Files" @@ -1282,6 +1318,14 @@ msgstr "Линиями" msgid "Position" msgstr "Положение" +#: ../ceammc/ext/src/spat/hoa_2d_scope.cpp +msgid "Positive Harmonics Color" +msgstr "Цвет позитивных гармоник" + +#: ../ceammc/ext/src/ui/ui_polar.cpp +msgid "Positive output" +msgstr "Положительный вывод" + #: ../ceammc/ext/src/ui/ui_slider.cpp msgid "Precision" msgstr "Десятичная точность" @@ -1369,7 +1413,8 @@ msgstr "Повторить ввод" msgid "Refresh interval (ms)" msgstr "Интервал обновления (мс)" -#: ../ceammc/ext/src/ui/ui_scope.cpp ../ceammc/ext/src/ui/ui_spectroscope.cpp +#: ../ceammc/ext/src/spat/hoa_2d_scope.cpp ../ceammc/ext/src/ui/ui_scope.cpp +#: ../ceammc/ext/src/ui/ui_spectroscope.cpp msgid "Refresh time (ms)" msgstr "Интервал обновления (мс)" @@ -1377,6 +1422,10 @@ msgstr "Интервал обновления (мс)" msgid "Relative Mode" msgstr "Относительный режим" +#: ../ceammc/ext/src/ui/ui_gain.cpp ../ceammc/ext/src/ui/ui_gain2.cpp +msgid "Relative mode" +msgstr "Относительный режим" + #: ../tcl/pd_menus.tcl msgid "Report a bug" msgstr "Сообщить об ошибке" @@ -1389,6 +1438,10 @@ msgstr "Сбросить" msgid "Right" msgstr "Справа" +#: ../ceammc/ext/src/ui/ui_slider2d.cpp +msgid "Right X-value" +msgstr "Правое X-значение" + #: ../ceammc/ext/src/ui/ui_matrix.cpp msgid "Rows" msgstr "Ряды" @@ -1437,6 +1490,10 @@ msgstr "Масштаб" msgid "Scale Color" msgstr "Цвет шкалы" +#: ../ceammc/ext/src/ui/ui_knob.cpp ../ceammc/ext/src/ui/ui_slider.cpp +msgid "Scale Mode" +msgstr "Режим вывода" + #: ../tcl/pd_deken.tcl msgid "Search" msgstr "Поиск" @@ -1612,6 +1669,7 @@ msgstr "Проверка аудио и MIDI..." msgid "Test label" msgstr "" +#: ../ceammc/ext/src/lib/cicm/Sources/eclass.cpp #: ../ceammc/ext/src/ui/ui_label.cpp msgid "Text" msgstr "Текст" @@ -1651,6 +1709,10 @@ msgstr "Режим переключателя" msgid "Top" msgstr "Сверху" +#: ../ceammc/ext/src/ui/ui_slider2d.cpp +msgid "Top Y-value" +msgstr "Верхнее Y-значение" + #: ../tcl/pd_menus.tcl msgid "Triggerize" msgstr "" @@ -1762,10 +1824,18 @@ msgstr "Использовать несколько устройств" msgid "Use callbacks" msgstr "Использовать обратные вызовы" +#: ../ceammc/ext/src/ui/ui_polar.cpp +msgid "Use degrees" +msgstr "Использовать градусы" + #: ../tcl/dialog_audio.tcl ../tcl/dialog_midi.tcl msgid "Use multiple devices" msgstr "Использовать несколько устройств" +#: ../ceammc/ext/src/ui/ui_polar.cpp +msgid "Use radians" +msgstr "Использовать радианы" + #: ../tcl/dialog_path.tcl msgid "Use standard extensions" msgstr "Использовать стандартные расширения" @@ -1802,6 +1872,10 @@ msgstr "Вертикально" msgid "Vertical align" msgstr "Вертикальное выравнивание" +#: ../ceammc/ext/src/spat/hoa_2d_scope.cpp +msgid "View rotation" +msgstr "Поворот отображения" + #: ../tcl/dialog_iemgui.tcl msgid "Visible Rectangle (pix)" msgstr "Видимый размер (в пикселях)" @@ -1890,6 +1964,18 @@ msgstr "Y единиц на пиксель:" msgid "Zoom" msgstr "Раскрыть" +#: ../ceammc/ext/src/ui/ui_scope.cpp +msgid "Zoom 100%" +msgstr "Масштаб 100%" + +#: ../ceammc/ext/src/ui/ui_scope.cpp +msgid "Zoom 200%" +msgstr "Масштаб 200%" + +#: ../ceammc/ext/src/ui/ui_scope.cpp +msgid "Zoom 50%" +msgstr "Масштаб 50%" + #: ../tcl/pd_menus.tcl msgid "Zoom In" msgstr "Увеличить" @@ -1974,7 +2060,7 @@ msgstr "" msgid "all" msgstr "все" -#: ../ceammc/ext/src/ui/ui_slider2d.cpp +#: ../ceammc/ext/src/ui/ui_polar.cpp ../ceammc/ext/src/ui/ui_slider2d.cpp msgid "bottom center" msgstr "внизу по центру" @@ -1982,7 +2068,8 @@ msgstr "внизу по центру" msgid "bottom:" msgstr "снизу:" -#: ../ceammc/ext/src/ui/ui_knob.cpp ../ceammc/ext/src/ui/ui_slider2d.cpp +#: ../ceammc/ext/src/ui/ui_knob.cpp ../ceammc/ext/src/ui/ui_polar.cpp +#: ../ceammc/ext/src/ui/ui_slider2d.cpp msgid "center" msgstr "по центру" @@ -2003,10 +2090,18 @@ msgstr "критические ошибки" msgid "fill with %f" msgstr "заполнить %f" -#: ../ceammc/ext/src/ui/ui_matrix.cpp +#: ../ceammc/ext/src/ui/ui_matrix.cpp ../ceammc/ext/src/ui/ui_radio.cpp msgid "flip" msgstr "инвертировать" +#: ../ceammc/ext/src/ui/ui_matrix.cpp +msgid "flip column" +msgstr "инвертировать столбец" + +#: ../ceammc/ext/src/ui/ui_matrix.cpp +msgid "flip row" +msgstr "инвертировать строку" + #: ../tcl/dialog_find.tcl msgid "for:" msgstr ":" @@ -2023,7 +2118,7 @@ msgstr "" msgid "intrrpt:" msgstr "" -#: ../ceammc/ext/src/ui/ui_slider2d.cpp +#: ../ceammc/ext/src/ui/ui_polar.cpp ../ceammc/ext/src/ui/ui_slider2d.cpp msgid "left center" msgstr "по центре левой стороны" @@ -2035,10 +2130,18 @@ msgstr "слева:" msgid "lin" msgstr "lin" +#: ../ceammc/ext/src/ui/ui_sliders.cpp +msgid "linear down" +msgstr "линейно вниз" + #: ../ceammc/ext/src/ui/ui_spectroscope.cpp msgid "linear scale" msgstr "линейная шкала" +#: ../ceammc/ext/src/ui/ui_sliders.cpp +msgid "linear up" +msgstr "линейно наверх" + #: ../ceammc/ext/src/ui/ui_matrix.cpp msgid "load" msgstr "загрузить" @@ -2080,19 +2183,32 @@ msgstr "обычный" msgid "puredata.info" msgstr "puredata.info" -#: ../ceammc/ext/src/ui/ui_matrix.cpp +#: ../ceammc/ext/src/ui/ui_matrix.cpp ../ceammc/ext/src/ui/ui_radio.cpp +#: ../ceammc/ext/src/ui/ui_sliders.cpp msgid "random" msgstr "случайное значение" +#: ../ceammc/ext/src/ui/ui_preset.cpp +msgid "read" +msgstr "" + #: ../ceammc/ext/src/ui/ui_keyboard.cpp msgid "release all" msgstr "отпустить все" -#: ../ceammc/ext/src/ui/ui_matrix.cpp +#: ../ceammc/ext/src/ui/ui_matrix.cpp ../ceammc/ext/src/ui/ui_radio.cpp msgid "reset" msgstr "сбросить" -#: ../ceammc/ext/src/ui/ui_slider2d.cpp +#: ../ceammc/ext/src/ui/ui_matrix.cpp +msgid "reset column" +msgstr "сбросить столбец" + +#: ../ceammc/ext/src/ui/ui_matrix.cpp +msgid "reset row" +msgstr "сбросить строку" + +#: ../ceammc/ext/src/ui/ui_polar.cpp ../ceammc/ext/src/ui/ui_slider2d.cpp msgid "right center" msgstr "по центру правой стороны" @@ -2117,7 +2233,7 @@ msgstr "размер:" msgid "to" msgstr "до" -#: ../ceammc/ext/src/ui/ui_slider2d.cpp +#: ../ceammc/ext/src/ui/ui_polar.cpp ../ceammc/ext/src/ui/ui_slider2d.cpp msgid "top center" msgstr "вверху по центру" @@ -2133,6 +2249,10 @@ msgstr "значение:" msgid "width:" msgstr "ширина:" +#: ../ceammc/ext/src/ui/ui_preset.cpp +msgid "write" +msgstr "" + #~ msgid "Active Cell Color" #~ msgstr "Цвет активной ячейки" @@ -2157,9 +2277,6 @@ msgstr "ширина:" #~ msgid "Label y-margin" #~ msgstr "Отступ ярлыка по y" -#~ msgid "Leftmost value" -#~ msgstr "Крайнее левое значение" - #~ msgid "Number of decimal" #~ msgstr "Число разрядов" @@ -2169,8 +2286,5 @@ msgstr "ширина:" #~ msgid "Shift" #~ msgstr "Смещение" -#~ msgid "Topmost value" -#~ msgstr "Крайнее верхнее значение" - #~ msgid "Value range" #~ msgstr "Диапазон значений" diff --git a/po/sq.po b/po/sq.po index 6db875663f..df07b8c3f0 100644 --- a/po/sq.po +++ b/po/sq.po @@ -6,22 +6,97 @@ msgid "" msgstr "" "Project-Id-Version: Pure Data 0.43\n" "Report-Msgid-Bugs-To: pd-dev@iem.at\n" -"POT-Creation-Date: 2009-08-27 10:01-0400\n" +"POT-Creation-Date: 2017-07-06 18:10+0200\n" "PO-Revision-Date: 2005-03-07 11:12+0200\n" "Last-Translator: Besnik Bleta \n" "Language-Team: Albanian \n" +"Language: sq\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +msgid "-------dimensions(digits)(pix):-------" +msgstr "" + +msgid "--------dimensions(pix)(pix):--------" +msgstr "" + +msgid "----------dimensions(pix):-----------" +msgstr "" + +msgid "--------flash-time(ms)(ms):---------" +msgstr "" + +msgid "-----------output-range:-----------" +msgstr "" + +msgid "------selectable_dimensions(pix):------" +msgstr "" + +msgid "------visible_rectangle(pix)(pix):------" +msgstr "" + #, fuzzy -msgid "Undo duplicate" -msgstr "Datë" +msgid "bottom:" +msgstr "Poshtë" -msgid "Undo paste" +#, fuzzy +msgid "height:" +msgstr "Djathtas" + +msgid "hold:" msgstr "" -msgid "Undo motion" +msgid "intrrpt:" +msgstr "" + +msgid "left:" +msgstr "" + +msgid "lin" +msgstr "" + +msgid "log" +msgstr "" + +msgid "log-height:" +msgstr "" + +msgid "max:" +msgstr "" + +msgid "min:" +msgstr "" + +#, fuzzy +msgid "right:" +msgstr "Djathtas" + +#, fuzzy +msgid "size:" +msgstr "Madhësi" + +msgid "top:" +msgstr "" + +msgid "value:" +msgstr "" + +msgid "width:" +msgstr "" + +#, tcl-format +msgid "Do you want to save the changes you made in '%s'?" +msgstr "" + +#, tcl-format +msgid "Discard changes to '%s'?" +msgstr "" + +msgid "Undo clear" +msgstr "" + +msgid "Undo connect" msgstr "" #, fuzzy @@ -31,924 +106,1052 @@ msgstr "Uganda" msgid "Undo disconnect" msgstr "" -msgid "Undo connect" +#, fuzzy +msgid "Undo duplicate" +msgstr "Datë" + +msgid "Undo motion" msgstr "" -msgid "Undo clear" +msgid "Undo paste" msgstr "" msgid "Undo typing" msgstr "" -msgid "Discard changes to '%s'?" +msgid "Redo clear" msgstr "" -msgid "Do you want to save the changes you made in '%s'?" +msgid "Redo connect" +msgstr "" + +#, fuzzy +msgid "Redo cut" +msgstr "Uganda" + +msgid "Redo disconnect" +msgstr "" + +#, fuzzy +msgid "Redo duplicate" +msgstr "Datë" + +msgid "Redo motion" +msgstr "" + +msgid "Redo paste" +msgstr "" + +msgid "Redo typing" +msgstr "" + +msgid "no Pd settings to clear" +msgstr "" + +msgid "removed .pdsettings file" +msgstr "" + +msgid "couldn't delete .pdsettings file" +msgstr "" + +msgid "failed to erase Pd settings" +msgstr "" + +msgid "erased Pd settings" +msgstr "" + +msgid "no Pd settings to erase" +msgstr "" + +msgid "skipping loading preferences... Pd seems to have crashed on startup." +msgstr "" + +msgid "(re-save preferences to reinstate them)" +msgstr "" + +msgid "File" +msgstr "Kartelë" + +#, fuzzy +msgid "Edit" +msgstr "_Përpuno" + +msgid "Put" +msgstr "" + +msgid "Find" +msgstr "Gjej" + +#, fuzzy +msgid "Media" +msgstr "Maqedonia" + +#, fuzzy +msgid "Window" +msgstr "_Dritare" + +msgid "Help" +msgstr "Ndihmë" + +msgid "Show &Hidden Files and Directories" msgstr "" -#: ../src/dialog_array.tcl:115 ../src/dialog_array.tcl:117 -#: ../src/pd_menus.tcl:100 ../src/pd_menus.tcl:101 ../src/pd_menus.tcl:146 -#: ../src/pd_menus.tcl:147 msgid "Copy" msgstr "Kopjo" -#: ../src/dialog_array.tcl:118 ../src/dialog_array.tcl:120 -#: ../src/pd_menus.tcl:102 ../src/pd_menus.tcl:103 ../src/pd_menus.tcl:148 -#: ../src/pd_menus.tcl:149 #, fuzzy msgid "Paste" msgstr "Datë" -#: ../src/dialog_array.tcl:264 ../src/dialog_array.tcl:266 msgid "Array Properties" msgstr "" -#: ../src/dialog_array.tcl:270 ../src/dialog_array.tcl:272 +#, fuzzy +msgid "Array" +msgstr "Andorra" + #, fuzzy msgid "Name:" msgstr "Emër" -#: ../src/dialog_array.tcl:276 ../src/dialog_array.tcl:278 -#: ../src/dialog_canvas.tcl:178 ../src/dialog_canvas.tcl:193 -#: ../src/dialog_iemgui.tcl:619 ../src/dialog_iemgui.tcl:621 #, fuzzy msgid "Size:" msgstr "Madhësi" -#: ../src/dialog_array.tcl:280 ../src/dialog_array.tcl:282 #, fuzzy msgid "Save contents" msgstr "_Përmbajtje" -#: ../src/dialog_array.tcl:284 ../src/dialog_array.tcl:286 msgid "Draw as:" msgstr "" -#: ../src/dialog_array.tcl:287 ../src/dialog_array.tcl:289 -#, fuzzy -msgid "Points" -msgstr "Portë" - -#: ../src/dialog_array.tcl:289 ../src/dialog_array.tcl:291 #, fuzzy msgid "Polygon" msgstr "Poloni" -#: ../src/dialog_array.tcl:291 ../src/dialog_array.tcl:293 +#, fuzzy +msgid "Points" +msgstr "Portë" + msgid "Bezier curve" msgstr "" -#: ../src/dialog_array.tcl:297 ../src/dialog_array.tcl:299 msgid "Put array into:" msgstr "" -#: ../src/dialog_array.tcl:300 ../src/dialog_array.tcl:302 msgid "New graph" msgstr "" -#: ../src/dialog_array.tcl:302 ../src/dialog_array.tcl:304 #, fuzzy msgid "Last graph" msgstr "Msz i Fundit: %s" -#: ../src/dialog_array.tcl:306 ../src/dialog_array.tcl:308 -#, fuzzy -msgid "Delete array" -msgstr "Fshij" +msgid "Options" +msgstr "" -#: ../src/dialog_array.tcl:312 ../src/dialog_array.tcl:314 #, fuzzy msgid "Open List View..." msgstr "Listë Ndalimesh..." -#: ../src/dialog_array.tcl:319 ../src/dialog_array.tcl:321 -#: ../src/dialog_audio.tcl:136 ../src/dialog_canvas.tcl:205 -#: ../src/dialog_font.tcl:51 ../src/dialog_gatom.tcl:153 -#: ../src/dialog_gatom.tcl:161 ../src/dialog_iemgui.tcl:742 -#: ../src/dialog_iemgui.tcl:748 ../src/dialog_midi.tcl:91 -#: ../src/dialog_midi.tcl:226 +#, fuzzy +msgid "Delete array" +msgstr "Fshij" + msgid "Cancel" msgstr "Anulo" -#: ../src/dialog_array.tcl:321 ../src/dialog_array.tcl:323 -#: ../src/dialog_audio.tcl:138 ../src/dialog_canvas.tcl:207 -#: ../src/dialog_gatom.tcl:156 ../src/dialog_gatom.tcl:164 -#: ../src/dialog_iemgui.tcl:745 ../src/dialog_iemgui.tcl:751 -#: ../src/dialog_midi.tcl:93 ../src/dialog_midi.tcl:228 msgid "Apply" msgstr "Zbato" -#: ../src/dialog_array.tcl:323 ../src/dialog_array.tcl:325 -#: ../src/dialog_audio.tcl:140 ../src/dialog_canvas.tcl:209 -#: ../src/dialog_font.tcl:53 ../src/dialog_font.tcl:92 -#: ../src/dialog_font.tcl:100 ../src/dialog_font.tcl:101 -#: ../src/dialog_gatom.tcl:159 ../src/dialog_gatom.tcl:167 -#: ../src/dialog_iemgui.tcl:748 ../src/dialog_iemgui.tcl:754 -#: ../src/dialog_midi.tcl:95 ../src/dialog_midi.tcl:230 msgid "OK" msgstr "" -#: ../src/dialog_audio.tcl:130 msgid "Audio Settings" msgstr "" -#: ../src/dialog_audio.tcl:142 -msgid "Save All Settings" +msgid "Settings" msgstr "" -#: ../src/dialog_audio.tcl:151 msgid "Sample rate:" msgstr "" -#: ../src/dialog_audio.tcl:153 msgid "Delay (msec):" msgstr "" -#: ../src/dialog_audio.tcl:158 +msgid "Block size:" +msgstr "" + msgid "Use callbacks" msgstr "" -#: ../src/dialog_audio.tcl:166 ../src/dialog_midi.tcl:105 -#: ../src/dialog_midi.tcl:241 -msgid "Input device 1:" +msgid "Input Devices" msgstr "" -#: ../src/dialog_audio.tcl:169 ../src/dialog_audio.tcl:183 -#: ../src/dialog_audio.tcl:198 ../src/dialog_audio.tcl:213 -#: ../src/dialog_audio.tcl:232 ../src/dialog_audio.tcl:250 -#: ../src/dialog_audio.tcl:265 ../src/dialog_audio.tcl:280 #, fuzzy msgid "Channels:" msgstr "Anulo" -#: ../src/dialog_audio.tcl:179 ../src/dialog_midi.tcl:115 -#: ../src/dialog_midi.tcl:251 -msgid "Input device 2:" -msgstr "" - -#: ../src/dialog_audio.tcl:194 ../src/dialog_midi.tcl:127 -#: ../src/dialog_midi.tcl:263 -msgid "Input device 3:" -msgstr "" - -#: ../src/dialog_audio.tcl:209 ../src/dialog_midi.tcl:139 -#: ../src/dialog_midi.tcl:275 -msgid "Input device 4:" -msgstr "" - -#: ../src/dialog_audio.tcl:223 ../src/dialog_midi.tcl:150 -#: ../src/dialog_midi.tcl:286 -msgid "Output device 1:" -msgstr "" - -#: ../src/dialog_audio.tcl:226 -msgid "(same as input device) .............. " +msgid "Output Devices" msgstr "" -#: ../src/dialog_audio.tcl:246 ../src/dialog_midi.tcl:160 -#: ../src/dialog_midi.tcl:296 -msgid "Output device 2:" +msgid "(same as input device)..." msgstr "" -#: ../src/dialog_audio.tcl:261 ../src/dialog_midi.tcl:171 -#: ../src/dialog_midi.tcl:307 -msgid "Output device 3:" +msgid "Use Multiple Devices" msgstr "" -#: ../src/dialog_audio.tcl:276 ../src/dialog_midi.tcl:182 -#: ../src/dialog_midi.tcl:318 -msgid "Output device 4:" +msgid "Save All Settings" msgstr "" -#: ../src/dialog_audio.tcl:291 ../src/dialog_midi.tcl:195 -msgid "Use multiple devices" +msgid "WARNING: unknown graphme flags received in pdtk_canvas_dialog" msgstr "" -#: ../src/dialog_canvas.tcl:142 msgid "Canvas Properties" msgstr "" -#: ../src/dialog_canvas.tcl:146 #, fuzzy msgid "Scale" msgstr "Ruaj" -#: ../src/dialog_canvas.tcl:150 msgid "X units per pixel:" msgstr "" -#: ../src/dialog_canvas.tcl:155 msgid "Y units per pixel:" msgstr "" -#: ../src/dialog_canvas.tcl:159 msgid "Appearance on parent patch" msgstr "" -#: ../src/dialog_canvas.tcl:161 msgid "Graph-On-Parent" msgstr "" -#: ../src/dialog_canvas.tcl:165 msgid "Hide object name and arguments" msgstr "" -#: ../src/dialog_canvas.tcl:170 msgid "Range and size" msgstr "" -#: ../src/dialog_canvas.tcl:174 -msgid "X range, from" +msgid "X range: from" msgstr "" -#: ../src/dialog_canvas.tcl:176 ../src/dialog_canvas.tcl:191 msgid "to" msgstr "" -#: ../src/dialog_canvas.tcl:180 ../src/dialog_canvas.tcl:195 #, fuzzy msgid "Margin:" msgstr "Vijë shënimi" -#: ../src/dialog_canvas.tcl:189 -msgid "Y range, from" +msgid "Y range: from" msgstr "" -#: ../src/dialog_find.tcl:63 ../src/dialog_find.tcl:66 -#: ../src/dialog_find.tcl:79 ../src/dialog_find.tcl:80 -#: ../src/dialog_find.tcl:83 ../src/dialog_find.tcl:85 -#: ../src/dialog_find.tcl:87 ../src/dialog_find.tcl:101 -#: ../src/dialog_find.tcl:105 ../src/dialog_find.tcl:107 -#: ../src/pd_menus.tcl:45 -msgid "Find" -msgstr "Gjej" +msgid "Data Properties" +msgstr "" -#: ../src/dialog_find.tcl:70 ../src/dialog_find.tcl:73 -#: ../src/dialog_find.tcl:87 ../src/dialog_find.tcl:91 -#: ../src/dialog_find.tcl:93 -#, fuzzy -msgid "Search in" +#, tcl-format +msgid "Found '%1$s' in %2$s" +msgstr "" + +#, tcl-format +msgid "Couldn't find '%1$s' in %2$s" +msgstr "" + +#, fuzzy, tcl-format +msgid "Search in %s for:" msgstr "Kërko Tekst..." -#: ../src/dialog_find.tcl:72 ../src/dialog_find.tcl:75 -#: ../src/dialog_find.tcl:89 ../src/dialog_find.tcl:93 -#: ../src/dialog_find.tcl:95 -#, fuzzy -msgid "for:" -msgstr "Portë:" - -#: ../src/dialog_find.tcl:83 ../src/dialog_find.tcl:90 -#: ../src/dialog_find.tcl:104 ../src/dialog_find.tcl:108 -#: ../src/dialog_find.tcl:110 ../src/pd_menus.tcl:86 ../src/pd_menus.tcl:87 -#: ../src/pd_menus.tcl:132 ../src/pd_menus.tcl:133 ../src/pd_menus.tcl:259 -#: ../src/pd_menus.tcl:272 ../src/pd_menus.tcl:295 ../src/pd_menus.tcl:308 -#: ../src/pd_menus.tcl:332 ../src/pd_menus.tcl:345 ../src/pd_menus.tcl:354 -#: ../src/pd_menus.tcl:381 ../src/pd_menus.tcl:392 ../src/pd_menus.tcl:419 -#: ../src/pd_menus.tcl:431 ../src/pd_menus.tcl:458 -msgid "Close" -msgstr "Mbyll" +#, tcl-format +msgid "Showed last '%1$s' in %2$s" +msgstr "" -#: ../src/dialog_find.tcl:83 ../src/dialog_find.tcl:97 -#: ../src/dialog_find.tcl:101 ../src/dialog_find.tcl:103 -msgid "Match whole word only" +#, tcl-format +msgid "Showing '%1$d' out of %2$d items in %3$s" msgstr "" -#: ../src/dialog_find.tcl:92 ../src/dialog_font.tcl:49 -#: ../src/dialog_font.tcl:50 ../src/pd-gui.tcl:280 ../src/pd-gui.tcl:283 -#: ../src/pd-gui.tcl:286 ../src/pd-gui.tcl:288 ../src/pd-gui.tcl:291 -#: ../src/pd_menus.tcl:212 ../src/pd_menus.tcl:258 ../src/pd_menus.tcl:285 -#: ../src/pdwindow.tcl:33 #, fuzzy msgid "Pd window" msgstr "Dritare dërgimesh" -#: ../src/dialog_font.tcl:45 -msgid "Font Properties" +msgid "Match whole word only" msgstr "" -#: ../src/dialog_font.tcl:46 ../src/dialog_font.tcl:54 -#: ../src/dialog_font.tcl:55 +msgid "Close" +msgstr "Mbyll" + #, fuzzy, tcl-format msgid "%s Font" msgstr "Gërma:" -#: ../src/dialog_font.tcl:61 ../src/dialog_font.tcl:96 -#: ../src/dialog_font.tcl:104 ../src/dialog_font.tcl:105 +#, fuzzy +msgid "Font" +msgstr "Gërma:" + #, fuzzy msgid "Font Size" msgstr "Madhësi" -#: ../src/dialog_font.tcl:89 ../src/dialog_font.tcl:108 -#: ../src/dialog_font.tcl:116 ../src/dialog_font.tcl:117 #, fuzzy msgid "Stretch" msgstr "KohëFillim" -#: ../src/dialog_font.tcl:96 ../src/dialog_font.tcl:115 -#: ../src/dialog_font.tcl:123 ../src/dialog_font.tcl:124 msgid "X and Y" msgstr "" -#: ../src/dialog_font.tcl:98 ../src/dialog_font.tcl:117 -#: ../src/dialog_font.tcl:125 ../src/dialog_font.tcl:126 msgid "X only" msgstr "" -#: ../src/dialog_font.tcl:100 ../src/dialog_font.tcl:119 -#: ../src/dialog_font.tcl:127 ../src/dialog_font.tcl:128 msgid "Y only" msgstr "" -#: ../src/dialog_gatom.tcl:93 msgid "Atom Box Properties" msgstr "" -#: ../src/dialog_gatom.tcl:99 msgid "Width:" msgstr "" -#: ../src/dialog_gatom.tcl:103 #, fuzzy msgid "Limits" msgstr "Kufi Përdoruesi" -#: ../src/dialog_gatom.tcl:107 msgid "Lower:" msgstr "" -#: ../src/dialog_gatom.tcl:112 ../src/dialog_gatom.tcl:113 #, fuzzy msgid "Upper:" msgstr "Përdorues" -#: ../src/dialog_gatom.tcl:116 ../src/dialog_gatom.tcl:121 -#: ../src/dialog_iemgui.tcl:600 ../src/dialog_iemgui.tcl:652 -#: ../src/dialog_iemgui.tcl:657 msgid "Label" msgstr "" -#: ../src/dialog_gatom.tcl:124 ../src/dialog_gatom.tcl:129 #, fuzzy -msgid "Left " +msgid "Left" msgstr "Majtas" -#: ../src/dialog_gatom.tcl:126 ../src/dialog_gatom.tcl:131 msgid "Right" msgstr "Djathtas" -#: ../src/dialog_gatom.tcl:128 ../src/dialog_gatom.tcl:133 msgid "Top" msgstr "Sipër" -#: ../src/dialog_gatom.tcl:130 ../src/dialog_gatom.tcl:135 msgid "Bottom" msgstr "Poshtë" -#: ../src/dialog_gatom.tcl:137 ../src/dialog_gatom.tcl:145 -#: ../src/dialog_iemgui.tcl:574 #, fuzzy msgid "Messages" msgstr "Mesazh" -#: ../src/dialog_gatom.tcl:141 ../src/dialog_gatom.tcl:149 -#: ../src/dialog_iemgui.tcl:578 msgid "Send symbol:" msgstr "" -#: ../src/dialog_gatom.tcl:147 ../src/dialog_gatom.tcl:155 -#: ../src/dialog_iemgui.tcl:585 #, fuzzy msgid "Receive symbol:" msgstr "Dritare marrjesh" -#: ../src/dialog_iemgui.tcl:197 #, fuzzy msgid "Background color" msgstr "Sfond:" -#: ../src/dialog_iemgui.tcl:204 #, fuzzy msgid "Foreground color" msgstr "Përpara:" -#: ../src/dialog_iemgui.tcl:211 #, fuzzy msgid "Label color" msgstr "Përzgjidhni ngjyrë" -#: ../src/dialog_iemgui.tcl:272 #, fuzzy msgid "Init" msgstr "Fto" -#: ../src/dialog_iemgui.tcl:275 ../src/dialog_iemgui.tcl:546 msgid "No init" msgstr "" -#: ../src/dialog_iemgui.tcl:287 ../src/dialog_iemgui.tcl:558 msgid "Jump on click" msgstr "" -#: ../src/dialog_iemgui.tcl:290 ../src/dialog_iemgui.tcl:561 msgid "Steady on click" msgstr "" -#: ../src/dialog_iemgui.tcl:498 +#, fuzzy +msgid "Bang" +msgstr "Ndalo" + +msgid "Flash Time (msec)" +msgstr "" + +msgid "Intrrpt:" +msgstr "" + +msgid "Hold:" +msgstr "" + +#, fuzzy +msgid "Toggle" +msgstr "Togo" + +msgid "Non Zero Value" +msgstr "" + +msgid "Value:" +msgstr "" + +#, fuzzy +msgid "Number2" +msgstr "$ Numër" + +msgid "Width (digits):" +msgstr "" + +#, fuzzy +msgid "Height:" +msgstr "Djathtas" + +msgid "Output Range" +msgstr "" + +msgid "Log height:" +msgstr "" + +msgid "Vslider" +msgstr "" + +#, fuzzy +msgid "Hslider" +msgstr "Fshehur" + +#, fuzzy +msgid "Vradio" +msgstr "Version" + +msgid "Num cells:" +msgstr "" + +msgid "Hradio" +msgstr "" + +msgid "VU Meter" +msgstr "" + +#, fuzzy +msgid "Canvas" +msgstr "Kanada" + +msgid "Visible Rectangle (pix)" +msgstr "" + #, tcl-format msgid "%s Properties" msgstr "" -#: ../src/dialog_iemgui.tcl:550 ../src/pd_menus.tcl:83 ../src/pd_menus.tcl:84 -#: ../src/pd_menus.tcl:129 ../src/pd_menus.tcl:130 ../src/pd_menus.tcl:260 -#: ../src/pd_menus.tcl:273 ../src/pd_menus.tcl:288 ../src/pd_menus.tcl:301 -#: ../src/pd_menus.tcl:325 ../src/pd_menus.tcl:338 ../src/pd_menus.tcl:355 -#: ../src/pd_menus.tcl:382 ../src/pd_menus.tcl:383 ../src/pd_menus.tcl:410 -#: ../src/pd_menus.tcl:422 ../src/pd_menus.tcl:449 -msgid "Save" -msgstr "Ruaj" +msgid "Parameters" +msgstr "" -#: ../src/dialog_iemgui.tcl:608 -msgid "X offset" +msgid "X offset:" msgstr "" -#: ../src/dialog_iemgui.tcl:611 ../src/dialog_iemgui.tcl:612 -msgid "Y offset" +msgid "Y offset:" msgstr "" -#: ../src/dialog_iemgui.tcl:642 ../src/dialog_iemgui.tcl:645 msgid "Colors" msgstr "Ngjyra" -#: ../src/dialog_iemgui.tcl:648 ../src/dialog_iemgui.tcl:651 #, fuzzy msgid "Background" msgstr "Sfond:" -#: ../src/dialog_iemgui.tcl:650 ../src/dialog_iemgui.tcl:654 #, fuzzy msgid "Front" msgstr "Gërma:" -#: ../src/dialog_iemgui.tcl:662 ../src/dialog_iemgui.tcl:668 msgid "Compose color" msgstr "" -#: ../src/dialog_iemgui.tcl:682 ../src/dialog_iemgui.tcl:688 #, fuzzy msgid "Test label" msgstr "Testo Tërë" -#: ../src/dialog_midi.tcl:85 -msgid "MIDI Settings" +#, fuzzy +msgid "Send a Pd message" +msgstr "Mesazh" + +msgid "(use arrow keys for history)" msgstr "" -#: ../src/dialog_midi.tcl:220 -msgid "ALSA MIDI Settings" +msgid "MIDI Settings" msgstr "" -#: ../src/dialog_midi.tcl:331 -msgid "Use multiple ALSA devices" +msgid "ALSA MIDI Settings" msgstr "" -#: ../src/dialog_midi.tcl:337 msgid "In Ports:" msgstr "" -#: ../src/dialog_midi.tcl:340 msgid "Out Ports:" msgstr "" -#: ../src/g_editor.c:1663 -msgid "Discard changes to this window??" +msgid "Pd search path for objects, help, fonts, and other files" msgstr "" -#: ../src/g_editor.c:1668 -msgid "really quit?" +msgid "Use standard paths" msgstr "" -#: ../src/g_editor.c:1699 -#, fuzzy -msgid "Close this window??" -msgstr "Mbyll këtë skedë/dritare" - -#: ../src/pd-gui.tcl:185 ../src/pd-gui.tcl:195 ../src/pd-gui.tcl:203 -#: ../src/pd-gui.tcl:206 ../src/pd-gui.tcl:215 ../src/pd-gui.tcl:226 -msgid "Associated Files" +msgid "Verbose" msgstr "" -#: ../src/pd-gui.tcl:186 ../src/pd-gui.tcl:196 ../src/pd-gui.tcl:204 -#: ../src/pd-gui.tcl:207 ../src/pd-gui.tcl:216 ../src/pd-gui.tcl:227 -#, fuzzy -msgid "Pd Files" -msgstr "Kartelë" - -#: ../src/pd-gui.tcl:187 ../src/pd-gui.tcl:205 ../src/pd-gui.tcl:208 -#: ../src/pd-gui.tcl:228 -msgid "Max Patch Files" +msgid "Pd Documents Directory" msgstr "" -#: ../src/pd-gui.tcl:188 ../src/pd-gui.tcl:206 ../src/pd-gui.tcl:209 -#: ../src/pd-gui.tcl:229 -msgid "Max Text Files" +msgid "Browse" msgstr "" -#: ../src/pd-gui.tcl:197 ../src/pd-gui.tcl:217 -msgid "Max Patch Files (.pat)" +msgid "Reset" msgstr "" -#: ../src/pd-gui.tcl:198 ../src/pd-gui.tcl:218 -msgid "Max Text Files (.mxt)" +msgid "Disable" msgstr "" -#: ../src/pd-gui.tcl:270 ../src/pd-gui.tcl:290 -#, tcl-format -msgid "WARNING: Font family '%s' not found, using default (%s)" +msgid "Externals Install Directory" msgstr "" -#: ../src/pd-gui.tcl:278 ../src/pd-gui.tcl:298 -#, tcl-format -msgid "WARNING: Font weight '%s' not found, using default (%s)" +#, fuzzy +msgid "Clear" +msgstr "Fshij listë" + +msgid "Choose Pd documents directory:" msgstr "" -#: ../src/pd-gui.tcl:303 ../src/pd-gui.tcl:323 -#, tcl-format -msgid "ERROR: %s failed to find font size (%s) that fits into %sx%s!" +msgid "Install externals to directory:" +msgstr "" + +msgid "Add a new path" +msgstr "" + +msgid "Add new library" +msgstr "" + +msgid "Edit library" +msgstr "" + +msgid "Pd libraries to load on startup" msgstr "" -#: ../src/pd-gui.tcl:478 ../src/pd-gui.tcl:483 ../src/pd-gui.tcl:501 -msgid "ERROR: 'pd' never showed up, 'pd-gui' quitting!" +msgid "Startup flags:" msgstr "" -#: ../src/pd_menucommands.tcl:19 -msgid "Untitled" +msgid "Defeat real-time scheduling" msgstr "" -#: ../src/pd_menucommands.tcl:78 ../src/pd_menucommands.tcl:79 -#: ../src/pd_menucommands.tcl:90 #, fuzzy -msgid "Send Message..." -msgstr "Mesazh" +msgid "Help Browser" +msgstr "Shfleto..." -#: ../src/pd_menucommands.tcl:82 ../src/pd_menucommands.tcl:83 -#: ../src/pd_menucommands.tcl:94 ../src/pd_menus.tcl:87 ../src/pd_menus.tcl:88 -#: ../src/pd_menus.tcl:133 ../src/pd_menus.tcl:134 ../src/pd_menus.tcl:147 -#: ../src/pd_menus.tcl:192 ../src/pd_menus.tcl:193 ../src/pd_menus.tcl:265 -#: ../src/pd_menus.tcl:278 ../src/pd_menus.tcl:292 ../src/pd_menus.tcl:305 -#: ../src/pd_menus.tcl:329 ../src/pd_menus.tcl:342 ../src/pd_menus.tcl:360 -#: ../src/pd_menus.tcl:387 ../src/pd_menus.tcl:414 ../src/pd_menus.tcl:426 -#: ../src/pd_menus.tcl:453 ../startup/object_db.tcl:123 -msgid "Message" -msgstr "Mesazh" +msgid "(Tcl) MISSING CLOSE-BRACE '}': " +msgstr "" + +msgid "(Tcl) INVALID COMMAND NAME: " +msgstr "" + +msgid "(Tcl) UNHANDLED ERROR: " +msgstr "" + +#, tcl-format +msgid "[deken]: installed version [%1$s] > %2$s...skipping!" +msgstr "" + +#, tcl-format +msgid "[deken]: installed version [%1$s] < %2$s...overwriting!" +msgstr "" + +#, tcl-format +msgid "[deken]: installed version [%1$s] == %2$s...skipping!" +msgstr "" + +msgid "[deken]: " +msgstr "" + +#, tcl-format +msgid "Successfully unzipped %1$s into %2$s." +msgstr "" + +msgid "[deken]: Unable to extract package automatically." +msgstr "" + +msgid "Please perform the following steps manually:" +msgstr "" + +#, tcl-format +msgid "1. Unzip %s." +msgstr "" + +#, tcl-format +msgid "2. Copy the contents into %s." +msgstr "" + +#, tcl-format +msgid "[deken] uninstalling '%s'" +msgstr "" + +#, tcl-format +msgid "Uninstalling %1$s from %2$s failed!" +msgstr "" + +#, tcl-format +msgid "[deken] deken-plugin.tcl (Pd externals search) loaded from %s." +msgstr "" + +#, tcl-format +msgid "[deken] Platform detected: %s" +msgstr "" + +#, tcl-format +msgid "[deken] Platform re-detected: %s" +msgstr "" + +msgid "Show all" +msgstr "" -#: ../src/pd_menucommands.tcl:108 ../src/pd_menucommands.tcl:111 -#: ../src/pd_menus.tcl:112 ../src/pd_menus.tcl:113 ../src/pd_menus.tcl:117 -#: ../src/pd_menus.tcl:118 ../src/pd_menus.tcl:158 ../src/pd_menus.tcl:159 -#: ../src/pd_menus.tcl:163 ../src/pd_menus.tcl:164 #, fuzzy -msgid "Font" -msgstr "Gërma:" +msgid "Search" +msgstr "Kërko Tekst..." + +msgid "To get a list of all available externals, try an empty search." +msgstr "" + +msgid "Find externals" +msgstr "" + +msgid "Only install externals uploaded by people you trust." +msgstr "" -#: ../src/pd_menucommands.tcl:123 ../src/pd_menucommands.tcl:126 -#: ../src/pd_menus.tcl:138 ../src/pd_menus.tcl:183 ../src/pd_menus.tcl:184 #, fuzzy msgid "Preferences" msgstr "Parapëlqime..." -#: ../src/pd_menus.tcl:45 -#, fuzzy -msgid "Edit" -msgstr "_Përpuno" +msgid "Installation options:" +msgstr "" -#: ../src/pd_menus.tcl:45 -msgid "File" -msgstr "Kartelë" +msgid "Try to remove libraries before (re)installing them?" +msgstr "" -#: ../src/pd_menus.tcl:45 ../src/pdtk_canvas.tcl:48 ../src/pdtk_canvas.tcl:110 -#: ../src/pdtk_canvas.tcl:113 -msgid "Help" -msgstr "Ndihmë" +msgid "Show README of newly installed libraries (if present)?" +msgstr "" -#: ../src/pd_menus.tcl:45 -#, fuzzy -msgid "Media" -msgstr "Maqedonia" +msgid "Should newly installed libraries be added to Pd's search path?" +msgstr "" -#: ../src/pd_menus.tcl:45 -msgid "Put" +msgid "Platform settings:" msgstr "" -#: ../src/pd_menus.tcl:45 -#, fuzzy -msgid "Window" -msgstr "_Dritare" +#, tcl-format +msgid "Default platform: %s" +msgstr "" -#: ../src/pd_menus.tcl:81 ../src/pd_menus.tcl:82 ../src/pd_menus.tcl:127 -#: ../src/pd_menus.tcl:128 ../src/pd_menus.tcl:255 ../src/pd_menus.tcl:267 -#: ../src/pd_menus.tcl:285 ../src/pd_menus.tcl:298 ../src/pd_menus.tcl:322 -#: ../src/pd_menus.tcl:335 ../src/pd_menus.tcl:349 ../src/pd_menus.tcl:376 -#: ../src/pd_menus.tcl:380 ../src/pd_menus.tcl:407 ../src/pd_menus.tcl:419 -#: ../src/pd_menus.tcl:446 -msgid "New" -msgstr "E re" +msgid "User-defined platform:" +msgstr "" -#: ../src/pd_menus.tcl:82 ../src/pd_menus.tcl:83 ../src/pd_menus.tcl:128 -#: ../src/pd_menus.tcl:129 ../src/pd_menus.tcl:256 ../src/pd_menus.tcl:268 -#: ../src/pd_menus.tcl:286 ../src/pd_menus.tcl:299 ../src/pd_menus.tcl:323 -#: ../src/pd_menus.tcl:336 ../src/pd_menus.tcl:350 ../src/pd_menus.tcl:377 -#: ../src/pd_menus.tcl:381 ../src/pd_menus.tcl:408 ../src/pd_menus.tcl:420 -#: ../src/pd_menus.tcl:447 ../src/pdtk_canvas.tcl:46 -#: ../src/pdtk_canvas.tcl:108 ../src/pdtk_canvas.tcl:111 -#: ../src/pdtk_canvas.tcl:128 ../src/pdtk_canvas.tcl:130 -#: ../src/pdtk_canvas.tcl:131 ../src/pdtk_canvas.tcl:133 -msgid "Open" -msgstr "Hap" +msgid "Hide foreign architectures?" +msgstr "" + +#, fuzzy, tcl-format +msgid "Deken %s Preferences" +msgstr "Parapëlqime..." + +msgid "[deken]: Start searching for externals..." +msgstr "" + +#, tcl-format +msgid "[deken]: online? %s" +msgstr "" + +msgid "Are you online?" +msgstr "" + +msgid "Unable to perform search." +msgstr "" + +msgid "[deken]: No matching externals found." +msgstr "" + +msgid "Try using the full name e.g. 'freeverb'." +msgstr "" + +msgid "No matching externals found." +msgstr "" + +msgid "Please select a (writable) installation directory!" +msgstr "" + +#, tcl-format +msgid "Install %1$s to %2$s?" +msgstr "" + +#, tcl-format +msgid "" +"Commencing downloading of:\n" +"%1$s\n" +"Into %2$s..." +msgstr "" + +msgid "aborting.\n" +msgstr "" + +#, tcl-format +msgid "Unable to add %s to search paths" +msgstr "" + +#, tcl-format +msgid "Add %s to the Pd search paths?" +msgstr "" + +#, tcl-format +msgid "Added %s to search paths" +msgstr "" + +#, tcl-format +msgid "Unable to download from %1$s [%2$s]" +msgstr "" + +#, tcl-format +msgid "Unable to remove stray file %s" +msgstr "" + +#, tcl-format +msgid "Unable to rename downloaded file to %s" +msgstr "" + +#, fuzzy, tcl-format +msgid "searching for '%s'" +msgstr "Kërko Tekst..." + +#, tcl-format +msgid "Uploaded by %1$s @ %2$s" +msgstr "" + +msgid "Install package" +msgstr "" + +msgid "Open webpage" +msgstr "" + +msgid "_" +msgstr "" + +#, tcl-format +msgid "" +"Do you want Pd to create a documents directory for patches and external " +"libraries?\n" +"\n" +"Location: %s\n" +"\n" +"You can change or disable this later in the Path preferences." +msgstr "" + +#, tcl-format +msgid "" +"Pd documents directory cannot be found:\n" +"\n" +"%s\n" +"\n" +"Choose a new location?" +msgstr "" + +#, tcl-format +msgid "Couldn't create Pd documents directory: %s\n" +msgstr "" + +#, tcl-format +msgid "Couldn't create \"externals\" directory in: %s\n" +msgstr "" + +#, tcl-format +msgid "Couldn't create preferences \"%1$s\" in %2$s" +msgstr "" + +#, fuzzy +msgid "About Pd" +msgstr "_Rreth" + +msgid "Save" +msgstr "Ruaj" -#: ../src/pd_menus.tcl:84 ../src/pd_menus.tcl:85 ../src/pd_menus.tcl:130 -#: ../src/pd_menus.tcl:131 ../src/pd_menus.tcl:261 ../src/pd_menus.tcl:274 -#: ../src/pd_menus.tcl:289 ../src/pd_menus.tcl:302 ../src/pd_menus.tcl:326 -#: ../src/pd_menus.tcl:339 ../src/pd_menus.tcl:356 ../src/pd_menus.tcl:383 -#: ../src/pd_menus.tcl:384 ../src/pd_menus.tcl:411 ../src/pd_menus.tcl:423 -#: ../src/pd_menus.tcl:450 #, fuzzy msgid "Save As..." msgstr "Ruaj Si" -#: ../src/pd_menus.tcl:88 ../src/pd_menus.tcl:89 ../src/pd_menus.tcl:134 -#: ../src/pd_menus.tcl:135 ../src/pd_menus.tcl:267 ../src/pd_menus.tcl:280 -#: ../src/pd_menus.tcl:293 ../src/pd_menus.tcl:306 ../src/pd_menus.tcl:330 -#: ../src/pd_menus.tcl:343 ../src/pd_menus.tcl:362 ../src/pd_menus.tcl:388 -#: ../src/pd_menus.tcl:389 ../src/pd_menus.tcl:415 ../src/pd_menus.tcl:427 -#: ../src/pd_menus.tcl:454 #, fuzzy msgid "Print..." msgstr "_Përpuno..." -#: ../src/pd_menus.tcl:93 ../src/pd_menus.tcl:94 ../src/pd_menus.tcl:139 -#: ../src/pd_menus.tcl:140 -#, fuzzy -msgid "Undo" -msgstr "Uganda" - -#: ../src/pd_menus.tcl:95 ../src/pd_menus.tcl:96 ../src/pd_menus.tcl:141 -#: ../src/pd_menus.tcl:142 -#, fuzzy -msgid "Redo" -msgstr "E kuqe:" - -#: ../src/pd_menus.tcl:98 ../src/pd_menus.tcl:99 ../src/pd_menus.tcl:144 -#: ../src/pd_menus.tcl:145 -msgid "Cut" +msgid "Paste Replace" msgstr "" -#: ../src/pd_menus.tcl:104 ../src/pd_menus.tcl:105 ../src/pd_menus.tcl:150 -#: ../src/pd_menus.tcl:151 #, fuzzy msgid "Duplicate" msgstr "Datë" -#: ../src/pd_menus.tcl:106 ../src/pd_menus.tcl:107 ../src/pd_menus.tcl:152 -#: ../src/pd_menus.tcl:153 #, fuzzy -msgid "Select All" -msgstr "Fshij Tërë" +msgid "Zoom In" +msgstr "Poshtë" -#: ../src/pd_menus.tcl:110 ../src/pd_menus.tcl:111 ../src/pd_menus.tcl:115 -#: ../src/pd_menus.tcl:116 ../src/pd_menus.tcl:156 ../src/pd_menus.tcl:157 -#: ../src/pd_menus.tcl:161 ../src/pd_menus.tcl:162 #, fuzzy -msgid "Text Editor" -msgstr "Ngjyra Teksti" +msgid "Zoom Out" +msgstr "Poshtë" -#: ../src/pd_menus.tcl:120 ../src/pd_menus.tcl:121 ../src/pd_menus.tcl:166 -#: ../src/pd_menus.tcl:167 msgid "Tidy Up" msgstr "" -#: ../src/pd_menus.tcl:122 ../src/pd_menus.tcl:123 ../src/pd_menus.tcl:168 -#: ../src/pd_menus.tcl:169 -msgid "Toggle Console" +msgid "(Dis)Connect Selection" msgstr "" -#: ../src/pd_menus.tcl:124 ../src/pd_menus.tcl:125 ../src/pd_menus.tcl:170 -#: ../src/pd_menus.tcl:171 -#, fuzzy -msgid "Clear Console" -msgstr "Fshij listë" +msgid "Triggerize" +msgstr "" -#: ../src/pd_menus.tcl:128 ../src/pd_menus.tcl:129 ../src/pd_menus.tcl:174 -#: ../src/pd_menus.tcl:175 #, fuzzy msgid "Edit Mode" msgstr "Mënyrë" -#: ../src/pd_menus.tcl:145 ../src/pd_menus.tcl:190 ../src/pd_menus.tcl:191 -msgid "Object" -msgstr "" +#, fuzzy +msgid "Undo" +msgstr "Uganda" -#: ../src/pd_menus.tcl:149 ../src/pd_menus.tcl:194 ../src/pd_menus.tcl:195 #, fuzzy -msgid "Number" -msgstr "$ Numër" +msgid "Redo" +msgstr "E kuqe:" -#: ../src/pd_menus.tcl:151 ../src/pd_menus.tcl:196 ../src/pd_menus.tcl:197 -msgid "Symbol" +msgid "List of objects..." msgstr "" -#: ../src/pd_menus.tcl:153 ../src/pd_menus.tcl:198 ../src/pd_menus.tcl:199 -#, fuzzy -msgid "Comment" -msgstr "Urdhër" - -#: ../src/pd_menus.tcl:156 ../src/pd_menus.tcl:201 ../src/pd_menus.tcl:202 -#, fuzzy -msgid "Bang" -msgstr "Ndalo" +msgid "New" +msgstr "E re" -#: ../src/pd_menus.tcl:158 ../src/pd_menus.tcl:203 ../src/pd_menus.tcl:204 -#, fuzzy -msgid "Toggle" -msgstr "Togo" +msgid "Open" +msgstr "Hap" -#: ../src/pd_menus.tcl:160 ../src/pd_menus.tcl:205 ../src/pd_menus.tcl:206 #, fuzzy -msgid "Number2" -msgstr "$ Numër" +msgid "Message..." +msgstr "Mesazh" -#: ../src/pd_menus.tcl:162 ../src/pd_menus.tcl:207 ../src/pd_menus.tcl:208 -msgid "Vslider" +msgid "Cut" msgstr "" -#: ../src/pd_menus.tcl:164 ../src/pd_menus.tcl:209 ../src/pd_menus.tcl:210 #, fuzzy -msgid "Hslider" -msgstr "Fshehur" +msgid "Select All" +msgstr "Fshij Tërë" -#: ../src/pd_menus.tcl:166 ../src/pd_menus.tcl:211 ../src/pd_menus.tcl:212 #, fuzzy -msgid "Vradio" -msgstr "Version" +msgid "Clear Console" +msgstr "Fshij listë" -#: ../src/pd_menus.tcl:168 ../src/pd_menus.tcl:213 ../src/pd_menus.tcl:214 -msgid "Hradio" +msgid "Object" msgstr "" -#: ../src/pd_menus.tcl:170 ../src/pd_menus.tcl:215 ../src/pd_menus.tcl:216 -msgid "VU Meter" +msgid "Message" +msgstr "Mesazh" + +#, fuzzy +msgid "Number" +msgstr "$ Numër" + +msgid "Symbol" msgstr "" -#: ../src/pd_menus.tcl:172 ../src/pd_menus.tcl:217 ../src/pd_menus.tcl:218 #, fuzzy -msgid "Canvas" -msgstr "Kanada" +msgid "Comment" +msgstr "Urdhër" -#: ../src/pd_menus.tcl:175 ../src/pd_menus.tcl:220 ../src/pd_menus.tcl:221 msgid "Graph" msgstr "Grafik" -#: ../src/pd_menus.tcl:176 ../src/pd_menus.tcl:221 ../src/pd_menus.tcl:222 -#, fuzzy -msgid "Array" -msgstr "Andorra" - -#: ../src/pd_menus.tcl:181 ../src/pd_menus.tcl:226 ../src/pd_menus.tcl:227 #, fuzzy msgid "Find..." msgstr "Dërgo Kartelë..." -#: ../src/pd_menus.tcl:183 ../src/pd_menus.tcl:228 ../src/pd_menus.tcl:229 msgid "Find Again" msgstr "" -#: ../src/pd_menus.tcl:185 ../src/pd_menus.tcl:230 ../src/pd_menus.tcl:231 msgid "Find Last Error" msgstr "" -#: ../src/pd_menus.tcl:191 ../src/pd_menus.tcl:236 ../src/pd_menus.tcl:237 msgid "DSP On" msgstr "" -#: ../src/pd_menus.tcl:193 ../src/pd_menus.tcl:238 ../src/pd_menus.tcl:239 #, fuzzy msgid "DSP Off" msgstr "Asnjë" -#: ../src/pd_menus.tcl:196 ../src/pd_menus.tcl:242 ../src/pd_menus.tcl:269 msgid "Test Audio and MIDI..." msgstr "" -#: ../src/pd_menus.tcl:198 ../src/pd_menus.tcl:244 ../src/pd_menus.tcl:271 #, fuzzy msgid "Load Meter" msgstr "Matës vonese:" -#: ../src/pd_menus.tcl:205 ../src/pd_menus.tcl:251 ../src/pd_menus.tcl:278 +msgid "Audio Settings..." +msgstr "" + +msgid "MIDI Settings..." +msgstr "" + msgid "Minimize" msgstr "" -#: ../src/pd_menus.tcl:207 ../src/pd_menus.tcl:253 ../src/pd_menus.tcl:280 #, fuzzy msgid "Zoom" msgstr "Poshtë" -#: ../src/pd_menus.tcl:210 ../src/pd_menus.tcl:256 ../src/pd_menus.tcl:283 +msgid "Bring All to Front" +msgstr "" + #, fuzzy -msgid "Parent Window" +msgid "Next Window" msgstr "Dritare dërgimesh" -#: ../src/pd_menus.tcl:216 ../src/pd_menus.tcl:262 ../src/pd_menus.tcl:289 -msgid "Bring All to Front" -msgstr "" +#, fuzzy +msgid "Previous Window" +msgstr "Dritare dërgimesh" -#: ../src/pd_menus.tcl:224 ../src/pd_menus.tcl:241 ../src/pd_menus.tcl:253 -#: ../src/pd_menus.tcl:270 ../src/pd_menus.tcl:297 ../src/pd_menus.tcl:335 -#: ../src/pd_menus.tcl:362 #, fuzzy -msgid "About Pd" -msgstr "_Rreth" +msgid "Parent Window" +msgstr "Dritare dërgimesh" -#: ../src/pd_menus.tcl:227 ../src/pd_menus.tcl:273 ../src/pd_menus.tcl:300 msgid "HTML Manual..." msgstr "" -#: ../src/pd_menus.tcl:229 ../src/pd_menus.tcl:275 ../src/pd_menus.tcl:302 #, fuzzy msgid "Browser..." msgstr "Shfleto..." -#: ../src/pd_menus.tcl:248 ../src/pd_menus.tcl:260 ../src/pd_menus.tcl:342 -#: ../src/pd_menus.tcl:369 -msgid "Preferences..." +msgid "puredata.info" +msgstr "" + +msgid "Report a bug" +msgstr "" + +#, fuzzy +msgid "Clear Menu" +msgstr "Fshij listë" + +msgid "" +"Delete all preferences?\n" +"(takes effect when Pd is restarted)" +msgstr "" + +msgid "Path..." +msgstr "" + +msgid "Startup..." +msgstr "" + +msgid "Audio..." +msgstr "" + +msgid "MIDI..." +msgstr "" + +#, fuzzy +msgid "Zoom New Windows" +msgstr "Dritare dërgimesh" + +#, fuzzy +msgid "Save All Preferences" msgstr "Parapëlqime..." -#: ../src/pd_menus.tcl:257 ../src/pd_menus.tcl:270 ../src/pd_menus.tcl:352 -#: ../src/pd_menus.tcl:379 -msgid "Open Recent" +#, fuzzy +msgid "Save to..." +msgstr "Ruaj Si" + +msgid "Load from..." msgstr "" -#: ../src/pd_menus.tcl:263 -msgid "Audio Settings..." +msgid "Forget All..." msgstr "" -#: ../src/pd_menus.tcl:265 -msgid "MIDI Settings..." +msgid "Open Recent" msgstr "" -#: ../src/pd_menus.tcl:296 ../src/pd_menus.tcl:309 ../src/pd_menus.tcl:333 -#: ../src/pd_menus.tcl:346 ../src/pd_menus.tcl:393 ../src/pd_menus.tcl:420 -#: ../src/pd_menus.tcl:432 ../src/pd_menus.tcl:459 msgid "Quit" msgstr "Lër" -#: ../src/pd_menus.tcl:304 ../src/pd_menus.tcl:331 -#, fuzzy -msgid "Clear Menu" -msgstr "Fshij listë" - -#: ../src/pdtk_canvas.tcl:44 ../src/pdtk_canvas.tcl:106 -#: ../src/pdtk_canvas.tcl:109 ../src/pdtk_canvas.tcl:123 -#: ../src/pdtk_canvas.tcl:125 ../src/pdtk_canvas.tcl:126 -#: ../src/pdtk_canvas.tcl:128 msgid "Properties" msgstr "" -#: ../src/pdwindow.tcl:43 +msgid "Audio on" +msgstr "" + +msgid "Audio off" +msgstr "" + +msgid "(Tcl) MISSING CLOSE-BRACKET ']': " +msgstr "" + +msgid "Tcl:" +msgstr "" + +msgid "Pd" +msgstr "" + #, fuzzy msgid "DSP" msgstr "Asnjë" -#: ../startup/object_db.tcl:113 -msgid "Signal" +msgid "Audio I/O error" msgstr "" -#: ../startup/object_db.tcl:114 -msgid "Generators" +msgid "Log:" msgstr "" -#: ../startup/object_db.tcl:115 -#, fuzzy -msgid "Filters" -msgstr "Kartelë" +msgid "fatal" +msgstr "" -#: ../startup/object_db.tcl:116 ../startup/object_db.tcl:124 -msgid "Math" +msgid "error" msgstr "" -#: ../startup/object_db.tcl:117 ../startup/object_db.tcl:125 -msgid "I/O" +msgid "normal" msgstr "" -#: ../startup/object_db.tcl:118 ../startup/object_db.tcl:126 -msgid "Sampling" +msgid "debug" msgstr "" -#: ../startup/object_db.tcl:119 ../startup/object_db.tcl:128 -msgid "Routing" +msgid "all" msgstr "" -#: ../startup/object_db.tcl:120 ../startup/object_db.tcl:129 -msgid "Others" +msgid "New..." msgstr "" -#: ../startup/object_db.tcl:127 -msgid "GUI" +#, fuzzy +msgid "Edit..." +msgstr "_Përpuno" + +#, fuzzy +msgid "Delete" +msgstr "Fshij" + +#, tcl-format +msgid "Ignoring '%s': doesn't exist" msgstr "" + +#, tcl-format +msgid "Ignoring '%s': doesn't look like a Pd-file" +msgstr "" + +#, fuzzy +#~ msgid "for:" +#~ msgstr "Portë:" + +#~ msgid "Preferences..." +#~ msgstr "Parapëlqime..." + +#, fuzzy +#~ msgid "Close this window??" +#~ msgstr "Mbyll këtë skedë/dritare" + +#, fuzzy +#~ msgid "Pd Files" +#~ msgstr "Kartelë" + +#, fuzzy +#~ msgid "Filters" +#~ msgstr "Kartelë" + +#, fuzzy +#~ msgid "Text Editor" +#~ msgstr "Ngjyra Teksti" diff --git a/po/sv.po b/po/sv.po index 327ec101ff..49249be6f3 100644 --- a/po/sv.po +++ b/po/sv.po @@ -6,10 +6,11 @@ msgid "" msgstr "" "Project-Id-Version: Pure Data 0.43\n" "Report-Msgid-Bugs-To: pd-dev@iem.at\n" -"POT-Creation-Date: 2009-08-27 10:01-0400\n" +"POT-Creation-Date: 2017-07-06 18:10+0200\n" "PO-Revision-Date: 2009-08-22 11:20+0100\n" "Last-Translator: Johannes Burström \n" "Language-Team: Johannes Burström \n" +"Language: sv\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -17,14 +18,89 @@ msgstr "" "X-Poedit-Country: Sweden\n" "X-Poedit-SourceCharset: utf-8\n" +msgid "-------dimensions(digits)(pix):-------" +msgstr "" + +msgid "--------dimensions(pix)(pix):--------" +msgstr "" + +msgid "----------dimensions(pix):-----------" +msgstr "" + +msgid "--------flash-time(ms)(ms):---------" +msgstr "" + +msgid "-----------output-range:-----------" +msgstr "" + +msgid "------selectable_dimensions(pix):------" +msgstr "" + +msgid "------visible_rectangle(pix)(pix):------" +msgstr "" + #, fuzzy -msgid "Undo duplicate" -msgstr "Duplicera" +msgid "bottom:" +msgstr "Underkant" -msgid "Undo paste" +#, fuzzy +msgid "height:" +msgstr "Höger" + +msgid "hold:" msgstr "" -msgid "Undo motion" +msgid "intrrpt:" +msgstr "" + +msgid "left:" +msgstr "" + +msgid "lin" +msgstr "" + +msgid "log" +msgstr "" + +msgid "log-height:" +msgstr "" + +msgid "max:" +msgstr "" + +msgid "min:" +msgstr "" + +#, fuzzy +msgid "right:" +msgstr "Höger" + +#, fuzzy +msgid "size:" +msgstr "Storlek:" + +msgid "top:" +msgstr "" + +msgid "value:" +msgstr "" + +#, fuzzy +msgid "width:" +msgstr "Bredd:" + +#, tcl-format +msgid "Do you want to save the changes you made in '%s'?" +msgstr "Vill du spara dina ändringar i '%s'?" + +#, tcl-format +msgid "Discard changes to '%s'?" +msgstr "Förkasta ändringar i '%s'?" + +msgid "Undo clear" +msgstr "" + +msgid "Undo connect" msgstr "" #, fuzzy @@ -34,888 +110,1038 @@ msgstr "Ångra" msgid "Undo disconnect" msgstr "" -msgid "Undo connect" +#, fuzzy +msgid "Undo duplicate" +msgstr "Duplicera" + +msgid "Undo motion" msgstr "" -msgid "Undo clear" +msgid "Undo paste" msgstr "" msgid "Undo typing" msgstr "" -msgid "Discard changes to '%s'?" -msgstr "Förkasta ändringar i '%s'?" +msgid "Redo clear" +msgstr "" -msgid "Do you want to save the changes you made in '%s'?" -msgstr "Vill du spara dina ändringar i '%s'?" +msgid "Redo connect" +msgstr "" + +#, fuzzy +msgid "Redo cut" +msgstr "Ångra" + +msgid "Redo disconnect" +msgstr "" + +#, fuzzy +msgid "Redo duplicate" +msgstr "Duplicera" + +msgid "Redo motion" +msgstr "" + +msgid "Redo paste" +msgstr "" + +msgid "Redo typing" +msgstr "" + +msgid "no Pd settings to clear" +msgstr "" + +msgid "removed .pdsettings file" +msgstr "" + +msgid "couldn't delete .pdsettings file" +msgstr "" + +msgid "failed to erase Pd settings" +msgstr "" + +msgid "erased Pd settings" +msgstr "" + +msgid "no Pd settings to erase" +msgstr "" + +msgid "skipping loading preferences... Pd seems to have crashed on startup." +msgstr "" + +msgid "(re-save preferences to reinstate them)" +msgstr "" + +msgid "File" +msgstr "Fil" + +#, fuzzy +msgid "Edit" +msgstr "Redigera" + +msgid "Put" +msgstr "Placera" + +msgid "Find" +msgstr "Sök" + +msgid "Media" +msgstr "Media" + +msgid "Window" +msgstr "Fönster" + +msgid "Help" +msgstr "Hjälp" + +msgid "Show &Hidden Files and Directories" +msgstr "" -#: ../src/dialog_array.tcl:115 ../src/dialog_array.tcl:117 -#: ../src/pd_menus.tcl:100 ../src/pd_menus.tcl:101 ../src/pd_menus.tcl:146 -#: ../src/pd_menus.tcl:147 msgid "Copy" msgstr "Kopiera" -#: ../src/dialog_array.tcl:118 ../src/dialog_array.tcl:120 -#: ../src/pd_menus.tcl:102 ../src/pd_menus.tcl:103 ../src/pd_menus.tcl:148 -#: ../src/pd_menus.tcl:149 msgid "Paste" msgstr "Klistra in" -#: ../src/dialog_array.tcl:264 ../src/dialog_array.tcl:266 #, fuzzy msgid "Array Properties" msgstr "Egenskaper för Array" -#: ../src/dialog_array.tcl:270 ../src/dialog_array.tcl:272 +msgid "Array" +msgstr "Array" + msgid "Name:" msgstr "Namn:" -#: ../src/dialog_array.tcl:276 ../src/dialog_array.tcl:278 -#: ../src/dialog_canvas.tcl:178 ../src/dialog_canvas.tcl:193 -#: ../src/dialog_iemgui.tcl:619 ../src/dialog_iemgui.tcl:621 msgid "Size:" msgstr "Storlek:" -#: ../src/dialog_array.tcl:280 ../src/dialog_array.tcl:282 msgid "Save contents" msgstr "Spara innehåll" -#: ../src/dialog_array.tcl:284 ../src/dialog_array.tcl:286 msgid "Draw as:" msgstr "Rita som:" -#: ../src/dialog_array.tcl:287 ../src/dialog_array.tcl:289 -msgid "Points" -msgstr "Punkter" - -#: ../src/dialog_array.tcl:289 ../src/dialog_array.tcl:291 msgid "Polygon" msgstr "Polygon" -#: ../src/dialog_array.tcl:291 ../src/dialog_array.tcl:293 +msgid "Points" +msgstr "Punkter" + msgid "Bezier curve" msgstr "Bezier-kurva" -#: ../src/dialog_array.tcl:297 ../src/dialog_array.tcl:299 #, fuzzy msgid "Put array into:" msgstr "Rita array i:" -#: ../src/dialog_array.tcl:300 ../src/dialog_array.tcl:302 #, fuzzy msgid "New graph" msgstr "Ny graf" -#: ../src/dialog_array.tcl:302 ../src/dialog_array.tcl:304 #, fuzzy msgid "Last graph" msgstr "Senaste graf" -#: ../src/dialog_array.tcl:306 ../src/dialog_array.tcl:308 -#, fuzzy -msgid "Delete array" -msgstr "Radera array" +msgid "Options" +msgstr "" -#: ../src/dialog_array.tcl:312 ../src/dialog_array.tcl:314 msgid "Open List View..." msgstr "Öppna listvy..." -#: ../src/dialog_array.tcl:319 ../src/dialog_array.tcl:321 -#: ../src/dialog_audio.tcl:136 ../src/dialog_canvas.tcl:205 -#: ../src/dialog_font.tcl:51 ../src/dialog_gatom.tcl:153 -#: ../src/dialog_gatom.tcl:161 ../src/dialog_iemgui.tcl:742 -#: ../src/dialog_iemgui.tcl:748 ../src/dialog_midi.tcl:91 -#: ../src/dialog_midi.tcl:226 +#, fuzzy +msgid "Delete array" +msgstr "Radera array" + msgid "Cancel" msgstr "Ångra" -#: ../src/dialog_array.tcl:321 ../src/dialog_array.tcl:323 -#: ../src/dialog_audio.tcl:138 ../src/dialog_canvas.tcl:207 -#: ../src/dialog_gatom.tcl:156 ../src/dialog_gatom.tcl:164 -#: ../src/dialog_iemgui.tcl:745 ../src/dialog_iemgui.tcl:751 -#: ../src/dialog_midi.tcl:93 ../src/dialog_midi.tcl:228 msgid "Apply" msgstr "Verkställ" -#: ../src/dialog_array.tcl:323 ../src/dialog_array.tcl:325 -#: ../src/dialog_audio.tcl:140 ../src/dialog_canvas.tcl:209 -#: ../src/dialog_font.tcl:53 ../src/dialog_font.tcl:92 -#: ../src/dialog_font.tcl:100 ../src/dialog_font.tcl:101 -#: ../src/dialog_gatom.tcl:159 ../src/dialog_gatom.tcl:167 -#: ../src/dialog_iemgui.tcl:748 ../src/dialog_iemgui.tcl:754 -#: ../src/dialog_midi.tcl:95 ../src/dialog_midi.tcl:230 msgid "OK" msgstr "Ok" -#: ../src/dialog_audio.tcl:130 msgid "Audio Settings" msgstr "" -#: ../src/dialog_audio.tcl:142 -msgid "Save All Settings" +msgid "Settings" msgstr "" -#: ../src/dialog_audio.tcl:151 msgid "Sample rate:" msgstr "" -#: ../src/dialog_audio.tcl:153 msgid "Delay (msec):" msgstr "" -#: ../src/dialog_audio.tcl:158 +msgid "Block size:" +msgstr "" + msgid "Use callbacks" msgstr "" -#: ../src/dialog_audio.tcl:166 ../src/dialog_midi.tcl:105 -#: ../src/dialog_midi.tcl:241 -msgid "Input device 1:" +msgid "Input Devices" msgstr "" -#: ../src/dialog_audio.tcl:169 ../src/dialog_audio.tcl:183 -#: ../src/dialog_audio.tcl:198 ../src/dialog_audio.tcl:213 -#: ../src/dialog_audio.tcl:232 ../src/dialog_audio.tcl:250 -#: ../src/dialog_audio.tcl:265 ../src/dialog_audio.tcl:280 #, fuzzy msgid "Channels:" msgstr "Ångra" -#: ../src/dialog_audio.tcl:179 ../src/dialog_midi.tcl:115 -#: ../src/dialog_midi.tcl:251 -msgid "Input device 2:" -msgstr "" - -#: ../src/dialog_audio.tcl:194 ../src/dialog_midi.tcl:127 -#: ../src/dialog_midi.tcl:263 -msgid "Input device 3:" -msgstr "" - -#: ../src/dialog_audio.tcl:209 ../src/dialog_midi.tcl:139 -#: ../src/dialog_midi.tcl:275 -msgid "Input device 4:" -msgstr "" - -#: ../src/dialog_audio.tcl:223 ../src/dialog_midi.tcl:150 -#: ../src/dialog_midi.tcl:286 -msgid "Output device 1:" -msgstr "" - -#: ../src/dialog_audio.tcl:226 -msgid "(same as input device) .............. " +msgid "Output Devices" msgstr "" -#: ../src/dialog_audio.tcl:246 ../src/dialog_midi.tcl:160 -#: ../src/dialog_midi.tcl:296 -msgid "Output device 2:" +msgid "(same as input device)..." msgstr "" -#: ../src/dialog_audio.tcl:261 ../src/dialog_midi.tcl:171 -#: ../src/dialog_midi.tcl:307 -msgid "Output device 3:" +msgid "Use Multiple Devices" msgstr "" -#: ../src/dialog_audio.tcl:276 ../src/dialog_midi.tcl:182 -#: ../src/dialog_midi.tcl:318 -msgid "Output device 4:" +msgid "Save All Settings" msgstr "" -#: ../src/dialog_audio.tcl:291 ../src/dialog_midi.tcl:195 -msgid "Use multiple devices" +msgid "WARNING: unknown graphme flags received in pdtk_canvas_dialog" msgstr "" -#: ../src/dialog_canvas.tcl:142 #, fuzzy msgid "Canvas Properties" msgstr "Egenskaper för canvas" -#: ../src/dialog_canvas.tcl:146 msgid "Scale" msgstr "Skala" -#: ../src/dialog_canvas.tcl:150 #, fuzzy msgid "X units per pixel:" msgstr "X enheter per pixel:" -#: ../src/dialog_canvas.tcl:155 #, fuzzy msgid "Y units per pixel:" msgstr "Y enheter per pixel:" -#: ../src/dialog_canvas.tcl:159 #, fuzzy msgid "Appearance on parent patch" msgstr "Utseende på föräldrapatchen" -#: ../src/dialog_canvas.tcl:161 #, fuzzy msgid "Graph-On-Parent" msgstr "Graph-On-Parent" -#: ../src/dialog_canvas.tcl:165 msgid "Hide object name and arguments" msgstr "Göm objektnamn och argument" -#: ../src/dialog_canvas.tcl:170 msgid "Range and size" msgstr "Omfång och storlek" -#: ../src/dialog_canvas.tcl:174 -msgid "X range, from" +#, fuzzy +msgid "X range: from" msgstr "Omfång (x), från" -#: ../src/dialog_canvas.tcl:176 ../src/dialog_canvas.tcl:191 msgid "to" msgstr "till" -#: ../src/dialog_canvas.tcl:180 ../src/dialog_canvas.tcl:195 msgid "Margin:" msgstr "Marginal:" -#: ../src/dialog_canvas.tcl:189 -msgid "Y range, from" +#, fuzzy +msgid "Y range: from" msgstr "Omfång (y), från:" -#: ../src/dialog_find.tcl:63 ../src/dialog_find.tcl:66 -#: ../src/dialog_find.tcl:79 ../src/dialog_find.tcl:80 -#: ../src/dialog_find.tcl:83 ../src/dialog_find.tcl:85 -#: ../src/dialog_find.tcl:87 ../src/dialog_find.tcl:101 -#: ../src/dialog_find.tcl:105 ../src/dialog_find.tcl:107 -#: ../src/pd_menus.tcl:45 -msgid "Find" -msgstr "Sök" +#, fuzzy +msgid "Data Properties" +msgstr "Egenskaper för canvas" + +#, tcl-format +msgid "Found '%1$s' in %2$s" +msgstr "" + +#, tcl-format +msgid "Couldn't find '%1$s' in %2$s" +msgstr "" -#: ../src/dialog_find.tcl:70 ../src/dialog_find.tcl:73 -#: ../src/dialog_find.tcl:87 ../src/dialog_find.tcl:91 -#: ../src/dialog_find.tcl:93 -msgid "Search in" +#, fuzzy, tcl-format +msgid "Search in %s for:" msgstr "Sök i" -#: ../src/dialog_find.tcl:72 ../src/dialog_find.tcl:75 -#: ../src/dialog_find.tcl:89 ../src/dialog_find.tcl:93 -#: ../src/dialog_find.tcl:95 -msgid "for:" -msgstr "efter:" - -#: ../src/dialog_find.tcl:83 ../src/dialog_find.tcl:90 -#: ../src/dialog_find.tcl:104 ../src/dialog_find.tcl:108 -#: ../src/dialog_find.tcl:110 ../src/pd_menus.tcl:86 ../src/pd_menus.tcl:87 -#: ../src/pd_menus.tcl:132 ../src/pd_menus.tcl:133 ../src/pd_menus.tcl:259 -#: ../src/pd_menus.tcl:272 ../src/pd_menus.tcl:295 ../src/pd_menus.tcl:308 -#: ../src/pd_menus.tcl:332 ../src/pd_menus.tcl:345 ../src/pd_menus.tcl:354 -#: ../src/pd_menus.tcl:381 ../src/pd_menus.tcl:392 ../src/pd_menus.tcl:419 -#: ../src/pd_menus.tcl:431 ../src/pd_menus.tcl:458 -msgid "Close" -msgstr "Stäng" +#, tcl-format +msgid "Showed last '%1$s' in %2$s" +msgstr "" -#: ../src/dialog_find.tcl:83 ../src/dialog_find.tcl:97 -#: ../src/dialog_find.tcl:101 ../src/dialog_find.tcl:103 -msgid "Match whole word only" -msgstr "Endast hela ord" +#, tcl-format +msgid "Showing '%1$d' out of %2$d items in %3$s" +msgstr "" -#: ../src/dialog_find.tcl:92 ../src/dialog_font.tcl:49 -#: ../src/dialog_font.tcl:50 ../src/pd-gui.tcl:280 ../src/pd-gui.tcl:283 -#: ../src/pd-gui.tcl:286 ../src/pd-gui.tcl:288 ../src/pd-gui.tcl:291 -#: ../src/pd_menus.tcl:212 ../src/pd_menus.tcl:258 ../src/pd_menus.tcl:285 -#: ../src/pdwindow.tcl:33 msgid "Pd window" msgstr "Huvudfönster" -#: ../src/dialog_font.tcl:45 -#, fuzzy -msgid "Font Properties" -msgstr "Egenskaper" +msgid "Match whole word only" +msgstr "Endast hela ord" + +msgid "Close" +msgstr "Stäng" -#: ../src/dialog_font.tcl:46 ../src/dialog_font.tcl:54 -#: ../src/dialog_font.tcl:55 #, fuzzy, tcl-format msgid "%s Font" msgstr "Typsnitt" -#: ../src/dialog_font.tcl:61 ../src/dialog_font.tcl:96 -#: ../src/dialog_font.tcl:104 ../src/dialog_font.tcl:105 +msgid "Font" +msgstr "Typsnitt" + #, fuzzy msgid "Font Size" msgstr "Typsnittsstorlek:" -#: ../src/dialog_font.tcl:89 ../src/dialog_font.tcl:108 -#: ../src/dialog_font.tcl:116 ../src/dialog_font.tcl:117 #, fuzzy msgid "Stretch" msgstr "Sträck:" -#: ../src/dialog_font.tcl:96 ../src/dialog_font.tcl:115 -#: ../src/dialog_font.tcl:123 ../src/dialog_font.tcl:124 msgid "X and Y" msgstr "X och Y" -#: ../src/dialog_font.tcl:98 ../src/dialog_font.tcl:117 -#: ../src/dialog_font.tcl:125 ../src/dialog_font.tcl:126 msgid "X only" msgstr "Bara X" -#: ../src/dialog_font.tcl:100 ../src/dialog_font.tcl:119 -#: ../src/dialog_font.tcl:127 ../src/dialog_font.tcl:128 msgid "Y only" msgstr "Bara Y" -#: ../src/dialog_gatom.tcl:93 msgid "Atom Box Properties" msgstr "Egenskaper för Atom" -#: ../src/dialog_gatom.tcl:99 msgid "Width:" msgstr "Bredd:" -#: ../src/dialog_gatom.tcl:103 #, fuzzy msgid "Limits" msgstr "Gränser" -#: ../src/dialog_gatom.tcl:107 msgid "Lower:" msgstr "Lägre:" -#: ../src/dialog_gatom.tcl:112 ../src/dialog_gatom.tcl:113 msgid "Upper:" msgstr "Övre" -#: ../src/dialog_gatom.tcl:116 ../src/dialog_gatom.tcl:121 -#: ../src/dialog_iemgui.tcl:600 ../src/dialog_iemgui.tcl:652 -#: ../src/dialog_iemgui.tcl:657 #, fuzzy msgid "Label" msgstr "Text" -#: ../src/dialog_gatom.tcl:124 ../src/dialog_gatom.tcl:129 -msgid "Left " +#, fuzzy +msgid "Left" msgstr "Vänster" -#: ../src/dialog_gatom.tcl:126 ../src/dialog_gatom.tcl:131 msgid "Right" msgstr "Höger" -#: ../src/dialog_gatom.tcl:128 ../src/dialog_gatom.tcl:133 msgid "Top" msgstr "Överkant" -#: ../src/dialog_gatom.tcl:130 ../src/dialog_gatom.tcl:135 msgid "Bottom" msgstr "Underkant" -#: ../src/dialog_gatom.tcl:137 ../src/dialog_gatom.tcl:145 -#: ../src/dialog_iemgui.tcl:574 msgid "Messages" msgstr "Meddelanden" -#: ../src/dialog_gatom.tcl:141 ../src/dialog_gatom.tcl:149 -#: ../src/dialog_iemgui.tcl:578 #, fuzzy msgid "Send symbol:" msgstr "Sändsymbol:" -#: ../src/dialog_gatom.tcl:147 ../src/dialog_gatom.tcl:155 -#: ../src/dialog_iemgui.tcl:585 msgid "Receive symbol:" msgstr "Mottagarsymbol:" -#: ../src/dialog_iemgui.tcl:197 msgid "Background color" msgstr "Bakgrundsfärg" -#: ../src/dialog_iemgui.tcl:204 msgid "Foreground color" msgstr "Förgrundsfärg" -#: ../src/dialog_iemgui.tcl:211 msgid "Label color" msgstr "Textfärg" -#: ../src/dialog_iemgui.tcl:272 msgid "Init" msgstr "Initiera" -#: ../src/dialog_iemgui.tcl:275 ../src/dialog_iemgui.tcl:546 msgid "No init" msgstr "Initiera inte" -#: ../src/dialog_iemgui.tcl:287 ../src/dialog_iemgui.tcl:558 msgid "Jump on click" msgstr "Ändra värde vid klick" -#: ../src/dialog_iemgui.tcl:290 ../src/dialog_iemgui.tcl:561 msgid "Steady on click" msgstr "Behåll värde vid klick" -#: ../src/dialog_iemgui.tcl:498 +msgid "Bang" +msgstr "Bang" + +msgid "Flash Time (msec)" +msgstr "" + +msgid "Intrrpt:" +msgstr "" + +msgid "Hold:" +msgstr "" + +msgid "Toggle" +msgstr "Toggle" + +msgid "Non Zero Value" +msgstr "" + +msgid "Value:" +msgstr "" + +msgid "Number2" +msgstr "Number2" + +msgid "Width (digits):" +msgstr "" + +#, fuzzy +msgid "Height:" +msgstr "Höger" + +msgid "Output Range" +msgstr "" + +msgid "Log height:" +msgstr "" + +msgid "Vslider" +msgstr "Vslider" + +msgid "Hslider" +msgstr "Hslider" + +msgid "Vradio" +msgstr "Vradio" + +msgid "Num cells:" +msgstr "" + +msgid "Hradio" +msgstr "Hradio" + +msgid "VU Meter" +msgstr "VU-mätare" + +msgid "Canvas" +msgstr "Canvas" + +msgid "Visible Rectangle (pix)" +msgstr "" + #, tcl-format msgid "%s Properties" msgstr "Egenskaper för %s" -#: ../src/dialog_iemgui.tcl:550 ../src/pd_menus.tcl:83 ../src/pd_menus.tcl:84 -#: ../src/pd_menus.tcl:129 ../src/pd_menus.tcl:130 ../src/pd_menus.tcl:260 -#: ../src/pd_menus.tcl:273 ../src/pd_menus.tcl:288 ../src/pd_menus.tcl:301 -#: ../src/pd_menus.tcl:325 ../src/pd_menus.tcl:338 ../src/pd_menus.tcl:355 -#: ../src/pd_menus.tcl:382 ../src/pd_menus.tcl:383 ../src/pd_menus.tcl:410 -#: ../src/pd_menus.tcl:422 ../src/pd_menus.tcl:449 -msgid "Save" -msgstr "Spara" +msgid "Parameters" +msgstr "" -#: ../src/dialog_iemgui.tcl:608 -msgid "X offset" +#, fuzzy +msgid "X offset:" msgstr "x-position" -#: ../src/dialog_iemgui.tcl:611 ../src/dialog_iemgui.tcl:612 -msgid "Y offset" +#, fuzzy +msgid "Y offset:" msgstr "y-position" -#: ../src/dialog_iemgui.tcl:642 ../src/dialog_iemgui.tcl:645 msgid "Colors" msgstr "Färger" -#: ../src/dialog_iemgui.tcl:648 ../src/dialog_iemgui.tcl:651 msgid "Background" msgstr "Bakgrund" -#: ../src/dialog_iemgui.tcl:650 ../src/dialog_iemgui.tcl:654 msgid "Front" msgstr "Förgrund" -#: ../src/dialog_iemgui.tcl:662 ../src/dialog_iemgui.tcl:668 msgid "Compose color" msgstr "Skapa ny färg" -#: ../src/dialog_iemgui.tcl:682 ../src/dialog_iemgui.tcl:688 msgid "Test label" msgstr "Testtext" -#: ../src/dialog_midi.tcl:85 -msgid "MIDI Settings" +#, fuzzy +msgid "Send a Pd message" +msgstr "Sänd meddelande" + +msgid "(use arrow keys for history)" msgstr "" -#: ../src/dialog_midi.tcl:220 -msgid "ALSA MIDI Settings" +msgid "MIDI Settings" msgstr "" -#: ../src/dialog_midi.tcl:331 -msgid "Use multiple ALSA devices" +msgid "ALSA MIDI Settings" msgstr "" -#: ../src/dialog_midi.tcl:337 msgid "In Ports:" msgstr "" -#: ../src/dialog_midi.tcl:340 msgid "Out Ports:" msgstr "" -#: ../src/g_editor.c:1663 -#, fuzzy -msgid "Discard changes to this window??" -msgstr "Ignorera ändringar i detta fönster?" +msgid "Pd search path for objects, help, fonts, and other files" +msgstr "" -#: ../src/g_editor.c:1668 -msgid "really quit?" -msgstr "Vill du avsluta?" +msgid "Use standard paths" +msgstr "" -#: ../src/g_editor.c:1699 -msgid "Close this window??" -msgstr "Stäng fönstret?" +msgid "Verbose" +msgstr "" -#: ../src/pd-gui.tcl:185 ../src/pd-gui.tcl:195 ../src/pd-gui.tcl:203 -#: ../src/pd-gui.tcl:206 ../src/pd-gui.tcl:215 ../src/pd-gui.tcl:226 -msgid "Associated Files" +msgid "Pd Documents Directory" +msgstr "" + +msgid "Browse" +msgstr "" + +msgid "Reset" +msgstr "" + +msgid "Disable" +msgstr "" + +msgid "Externals Install Directory" msgstr "" -#: ../src/pd-gui.tcl:186 ../src/pd-gui.tcl:196 ../src/pd-gui.tcl:204 -#: ../src/pd-gui.tcl:207 ../src/pd-gui.tcl:216 ../src/pd-gui.tcl:227 #, fuzzy -msgid "Pd Files" -msgstr "Fil" +msgid "Clear" +msgstr "Rensa konsoll" + +msgid "Choose Pd documents directory:" +msgstr "" + +msgid "Install externals to directory:" +msgstr "" + +msgid "Add a new path" +msgstr "" + +msgid "Add new library" +msgstr "" + +msgid "Edit library" +msgstr "" + +msgid "Pd libraries to load on startup" +msgstr "" -#: ../src/pd-gui.tcl:187 ../src/pd-gui.tcl:205 ../src/pd-gui.tcl:208 -#: ../src/pd-gui.tcl:228 -msgid "Max Patch Files" +msgid "Startup flags:" msgstr "" -#: ../src/pd-gui.tcl:188 ../src/pd-gui.tcl:206 ../src/pd-gui.tcl:209 -#: ../src/pd-gui.tcl:229 -msgid "Max Text Files" +msgid "Defeat real-time scheduling" msgstr "" -#: ../src/pd-gui.tcl:197 ../src/pd-gui.tcl:217 -msgid "Max Patch Files (.pat)" +#, fuzzy +msgid "Help Browser" +msgstr "Bläddra..." + +msgid "(Tcl) MISSING CLOSE-BRACE '}': " msgstr "" -#: ../src/pd-gui.tcl:198 ../src/pd-gui.tcl:218 -msgid "Max Text Files (.mxt)" +msgid "(Tcl) INVALID COMMAND NAME: " +msgstr "" + +msgid "(Tcl) UNHANDLED ERROR: " msgstr "" -#: ../src/pd-gui.tcl:270 ../src/pd-gui.tcl:290 #, tcl-format -msgid "WARNING: Font family '%s' not found, using default (%s)" +msgid "[deken]: installed version [%1$s] > %2$s...skipping!" msgstr "" -#: ../src/pd-gui.tcl:278 ../src/pd-gui.tcl:298 #, tcl-format -msgid "WARNING: Font weight '%s' not found, using default (%s)" +msgid "[deken]: installed version [%1$s] < %2$s...overwriting!" msgstr "" -#: ../src/pd-gui.tcl:303 ../src/pd-gui.tcl:323 #, tcl-format -msgid "ERROR: %s failed to find font size (%s) that fits into %sx%s!" +msgid "[deken]: installed version [%1$s] == %2$s...skipping!" msgstr "" -#: ../src/pd-gui.tcl:478 ../src/pd-gui.tcl:483 ../src/pd-gui.tcl:501 -msgid "ERROR: 'pd' never showed up, 'pd-gui' quitting!" +msgid "[deken]: " msgstr "" -#: ../src/pd_menucommands.tcl:19 -msgid "Untitled" +#, tcl-format +msgid "Successfully unzipped %1$s into %2$s." msgstr "" -#: ../src/pd_menucommands.tcl:78 ../src/pd_menucommands.tcl:79 -#: ../src/pd_menucommands.tcl:90 -msgid "Send Message..." -msgstr "Sänd meddelande" +msgid "[deken]: Unable to extract package automatically." +msgstr "" -#: ../src/pd_menucommands.tcl:82 ../src/pd_menucommands.tcl:83 -#: ../src/pd_menucommands.tcl:94 ../src/pd_menus.tcl:87 ../src/pd_menus.tcl:88 -#: ../src/pd_menus.tcl:133 ../src/pd_menus.tcl:134 ../src/pd_menus.tcl:147 -#: ../src/pd_menus.tcl:192 ../src/pd_menus.tcl:193 ../src/pd_menus.tcl:265 -#: ../src/pd_menus.tcl:278 ../src/pd_menus.tcl:292 ../src/pd_menus.tcl:305 -#: ../src/pd_menus.tcl:329 ../src/pd_menus.tcl:342 ../src/pd_menus.tcl:360 -#: ../src/pd_menus.tcl:387 ../src/pd_menus.tcl:414 ../src/pd_menus.tcl:426 -#: ../src/pd_menus.tcl:453 ../startup/object_db.tcl:123 -msgid "Message" -msgstr "Meddelande" +msgid "Please perform the following steps manually:" +msgstr "" -#: ../src/pd_menucommands.tcl:108 ../src/pd_menucommands.tcl:111 -#: ../src/pd_menus.tcl:112 ../src/pd_menus.tcl:113 ../src/pd_menus.tcl:117 -#: ../src/pd_menus.tcl:118 ../src/pd_menus.tcl:158 ../src/pd_menus.tcl:159 -#: ../src/pd_menus.tcl:163 ../src/pd_menus.tcl:164 -msgid "Font" -msgstr "Typsnitt" +#, tcl-format +msgid "1. Unzip %s." +msgstr "" + +#, tcl-format +msgid "2. Copy the contents into %s." +msgstr "" + +#, tcl-format +msgid "[deken] uninstalling '%s'" +msgstr "" + +#, tcl-format +msgid "Uninstalling %1$s from %2$s failed!" +msgstr "" + +#, tcl-format +msgid "[deken] deken-plugin.tcl (Pd externals search) loaded from %s." +msgstr "" + +#, tcl-format +msgid "[deken] Platform detected: %s" +msgstr "" + +#, tcl-format +msgid "[deken] Platform re-detected: %s" +msgstr "" + +msgid "Show all" +msgstr "" + +#, fuzzy +msgid "Search" +msgstr "Sök i" + +msgid "To get a list of all available externals, try an empty search." +msgstr "" + +msgid "Find externals" +msgstr "" + +msgid "Only install externals uploaded by people you trust." +msgstr "" -#: ../src/pd_menucommands.tcl:123 ../src/pd_menucommands.tcl:126 -#: ../src/pd_menus.tcl:138 ../src/pd_menus.tcl:183 ../src/pd_menus.tcl:184 msgid "Preferences" msgstr "Inställningar" -#: ../src/pd_menus.tcl:45 -msgid "Edit" -msgstr "Redigera" +msgid "Installation options:" +msgstr "" -#: ../src/pd_menus.tcl:45 -msgid "File" -msgstr "Fil" +msgid "Try to remove libraries before (re)installing them?" +msgstr "" -#: ../src/pd_menus.tcl:45 ../src/pdtk_canvas.tcl:48 ../src/pdtk_canvas.tcl:110 -#: ../src/pdtk_canvas.tcl:113 -msgid "Help" -msgstr "Hjälp" +msgid "Show README of newly installed libraries (if present)?" +msgstr "" -#: ../src/pd_menus.tcl:45 -msgid "Media" -msgstr "Media" +msgid "Should newly installed libraries be added to Pd's search path?" +msgstr "" -#: ../src/pd_menus.tcl:45 -msgid "Put" -msgstr "Placera" +msgid "Platform settings:" +msgstr "" -#: ../src/pd_menus.tcl:45 -msgid "Window" -msgstr "Fönster" +#, tcl-format +msgid "Default platform: %s" +msgstr "" -#: ../src/pd_menus.tcl:81 ../src/pd_menus.tcl:82 ../src/pd_menus.tcl:127 -#: ../src/pd_menus.tcl:128 ../src/pd_menus.tcl:255 ../src/pd_menus.tcl:267 -#: ../src/pd_menus.tcl:285 ../src/pd_menus.tcl:298 ../src/pd_menus.tcl:322 -#: ../src/pd_menus.tcl:335 ../src/pd_menus.tcl:349 ../src/pd_menus.tcl:376 -#: ../src/pd_menus.tcl:380 ../src/pd_menus.tcl:407 ../src/pd_menus.tcl:419 -#: ../src/pd_menus.tcl:446 -msgid "New" -msgstr "Ny" +msgid "User-defined platform:" +msgstr "" -#: ../src/pd_menus.tcl:82 ../src/pd_menus.tcl:83 ../src/pd_menus.tcl:128 -#: ../src/pd_menus.tcl:129 ../src/pd_menus.tcl:256 ../src/pd_menus.tcl:268 -#: ../src/pd_menus.tcl:286 ../src/pd_menus.tcl:299 ../src/pd_menus.tcl:323 -#: ../src/pd_menus.tcl:336 ../src/pd_menus.tcl:350 ../src/pd_menus.tcl:377 -#: ../src/pd_menus.tcl:381 ../src/pd_menus.tcl:408 ../src/pd_menus.tcl:420 -#: ../src/pd_menus.tcl:447 ../src/pdtk_canvas.tcl:46 -#: ../src/pdtk_canvas.tcl:108 ../src/pdtk_canvas.tcl:111 -#: ../src/pdtk_canvas.tcl:128 ../src/pdtk_canvas.tcl:130 -#: ../src/pdtk_canvas.tcl:131 ../src/pdtk_canvas.tcl:133 -msgid "Open" -msgstr "Öppna" +msgid "Hide foreign architectures?" +msgstr "" + +#, fuzzy, tcl-format +msgid "Deken %s Preferences" +msgstr "Inställningar" + +msgid "[deken]: Start searching for externals..." +msgstr "" + +#, tcl-format +msgid "[deken]: online? %s" +msgstr "" + +msgid "Are you online?" +msgstr "" + +msgid "Unable to perform search." +msgstr "" + +msgid "[deken]: No matching externals found." +msgstr "" + +msgid "Try using the full name e.g. 'freeverb'." +msgstr "" + +msgid "No matching externals found." +msgstr "" + +msgid "Please select a (writable) installation directory!" +msgstr "" + +#, tcl-format +msgid "Install %1$s to %2$s?" +msgstr "" + +#, tcl-format +msgid "" +"Commencing downloading of:\n" +"%1$s\n" +"Into %2$s..." +msgstr "" + +msgid "aborting.\n" +msgstr "" + +#, tcl-format +msgid "Unable to add %s to search paths" +msgstr "" + +#, tcl-format +msgid "Add %s to the Pd search paths?" +msgstr "" + +#, tcl-format +msgid "Added %s to search paths" +msgstr "" + +#, tcl-format +msgid "Unable to download from %1$s [%2$s]" +msgstr "" + +#, tcl-format +msgid "Unable to remove stray file %s" +msgstr "" + +#, tcl-format +msgid "Unable to rename downloaded file to %s" +msgstr "" + +#, fuzzy, tcl-format +msgid "searching for '%s'" +msgstr "Förkasta ändringar i '%s'?" + +#, tcl-format +msgid "Uploaded by %1$s @ %2$s" +msgstr "" + +msgid "Install package" +msgstr "" + +#, fuzzy +msgid "Open webpage" +msgstr "Öppna senaste" + +msgid "_" +msgstr "" + +#, tcl-format +msgid "" +"Do you want Pd to create a documents directory for patches and external " +"libraries?\n" +"\n" +"Location: %s\n" +"\n" +"You can change or disable this later in the Path preferences." +msgstr "" + +#, tcl-format +msgid "" +"Pd documents directory cannot be found:\n" +"\n" +"%s\n" +"\n" +"Choose a new location?" +msgstr "" + +#, tcl-format +msgid "Couldn't create Pd documents directory: %s\n" +msgstr "" + +#, tcl-format +msgid "Couldn't create \"externals\" directory in: %s\n" +msgstr "" + +#, tcl-format +msgid "Couldn't create preferences \"%1$s\" in %2$s" +msgstr "" + +msgid "About Pd" +msgstr "Om Pd" + +msgid "Save" +msgstr "Spara" -#: ../src/pd_menus.tcl:84 ../src/pd_menus.tcl:85 ../src/pd_menus.tcl:130 -#: ../src/pd_menus.tcl:131 ../src/pd_menus.tcl:261 ../src/pd_menus.tcl:274 -#: ../src/pd_menus.tcl:289 ../src/pd_menus.tcl:302 ../src/pd_menus.tcl:326 -#: ../src/pd_menus.tcl:339 ../src/pd_menus.tcl:356 ../src/pd_menus.tcl:383 -#: ../src/pd_menus.tcl:384 ../src/pd_menus.tcl:411 ../src/pd_menus.tcl:423 -#: ../src/pd_menus.tcl:450 msgid "Save As..." msgstr "Spara som..." -#: ../src/pd_menus.tcl:88 ../src/pd_menus.tcl:89 ../src/pd_menus.tcl:134 -#: ../src/pd_menus.tcl:135 ../src/pd_menus.tcl:267 ../src/pd_menus.tcl:280 -#: ../src/pd_menus.tcl:293 ../src/pd_menus.tcl:306 ../src/pd_menus.tcl:330 -#: ../src/pd_menus.tcl:343 ../src/pd_menus.tcl:362 ../src/pd_menus.tcl:388 -#: ../src/pd_menus.tcl:389 ../src/pd_menus.tcl:415 ../src/pd_menus.tcl:427 -#: ../src/pd_menus.tcl:454 msgid "Print..." msgstr "Skriv ut..." -#: ../src/pd_menus.tcl:93 ../src/pd_menus.tcl:94 ../src/pd_menus.tcl:139 -#: ../src/pd_menus.tcl:140 +msgid "Paste Replace" +msgstr "" + +msgid "Duplicate" +msgstr "Duplicera" + +#, fuzzy +msgid "Zoom In" +msgstr "Zooma" + +#, fuzzy +msgid "Zoom Out" +msgstr "Zooma" + +msgid "Tidy Up" +msgstr "Städa upp" + +msgid "(Dis)Connect Selection" +msgstr "" + +msgid "Triggerize" +msgstr "" + +msgid "Edit Mode" +msgstr "Redigeringsläge" + msgid "Undo" msgstr "Ångra" -#: ../src/pd_menus.tcl:95 ../src/pd_menus.tcl:96 ../src/pd_menus.tcl:141 -#: ../src/pd_menus.tcl:142 msgid "Redo" msgstr "Gör om" -#: ../src/pd_menus.tcl:98 ../src/pd_menus.tcl:99 ../src/pd_menus.tcl:144 -#: ../src/pd_menus.tcl:145 -msgid "Cut" -msgstr "Klipp ut" +msgid "List of objects..." +msgstr "" -#: ../src/pd_menus.tcl:104 ../src/pd_menus.tcl:105 ../src/pd_menus.tcl:150 -#: ../src/pd_menus.tcl:151 -msgid "Duplicate" -msgstr "Duplicera" +msgid "New" +msgstr "Ny" -#: ../src/pd_menus.tcl:106 ../src/pd_menus.tcl:107 ../src/pd_menus.tcl:152 -#: ../src/pd_menus.tcl:153 -msgid "Select All" -msgstr "Markera allt" +msgid "Open" +msgstr "Öppna" -#: ../src/pd_menus.tcl:110 ../src/pd_menus.tcl:111 ../src/pd_menus.tcl:115 -#: ../src/pd_menus.tcl:116 ../src/pd_menus.tcl:156 ../src/pd_menus.tcl:157 -#: ../src/pd_menus.tcl:161 ../src/pd_menus.tcl:162 -msgid "Text Editor" -msgstr "Textredigerare" +#, fuzzy +msgid "Message..." +msgstr "Meddelande" -#: ../src/pd_menus.tcl:120 ../src/pd_menus.tcl:121 ../src/pd_menus.tcl:166 -#: ../src/pd_menus.tcl:167 -msgid "Tidy Up" -msgstr "Städa upp" +msgid "Cut" +msgstr "Klipp ut" -#: ../src/pd_menus.tcl:122 ../src/pd_menus.tcl:123 ../src/pd_menus.tcl:168 -#: ../src/pd_menus.tcl:169 -#, fuzzy -msgid "Toggle Console" -msgstr "Växla visning av konsoll" +msgid "Select All" +msgstr "Markera allt" -#: ../src/pd_menus.tcl:124 ../src/pd_menus.tcl:125 ../src/pd_menus.tcl:170 -#: ../src/pd_menus.tcl:171 #, fuzzy msgid "Clear Console" msgstr "Rensa konsoll" -#: ../src/pd_menus.tcl:128 ../src/pd_menus.tcl:129 ../src/pd_menus.tcl:174 -#: ../src/pd_menus.tcl:175 -msgid "Edit Mode" -msgstr "Redigeringsläge" - -#: ../src/pd_menus.tcl:145 ../src/pd_menus.tcl:190 ../src/pd_menus.tcl:191 msgid "Object" msgstr "Objekt" -#: ../src/pd_menus.tcl:149 ../src/pd_menus.tcl:194 ../src/pd_menus.tcl:195 +msgid "Message" +msgstr "Meddelande" + msgid "Number" msgstr "Number" -#: ../src/pd_menus.tcl:151 ../src/pd_menus.tcl:196 ../src/pd_menus.tcl:197 msgid "Symbol" msgstr "Symbol" -#: ../src/pd_menus.tcl:153 ../src/pd_menus.tcl:198 ../src/pd_menus.tcl:199 msgid "Comment" msgstr "Kommentar" -#: ../src/pd_menus.tcl:156 ../src/pd_menus.tcl:201 ../src/pd_menus.tcl:202 -msgid "Bang" -msgstr "Bang" - -#: ../src/pd_menus.tcl:158 ../src/pd_menus.tcl:203 ../src/pd_menus.tcl:204 -msgid "Toggle" -msgstr "Toggle" - -#: ../src/pd_menus.tcl:160 ../src/pd_menus.tcl:205 ../src/pd_menus.tcl:206 -msgid "Number2" -msgstr "Number2" - -#: ../src/pd_menus.tcl:162 ../src/pd_menus.tcl:207 ../src/pd_menus.tcl:208 -msgid "Vslider" -msgstr "Vslider" - -#: ../src/pd_menus.tcl:164 ../src/pd_menus.tcl:209 ../src/pd_menus.tcl:210 -msgid "Hslider" -msgstr "Hslider" - -#: ../src/pd_menus.tcl:166 ../src/pd_menus.tcl:211 ../src/pd_menus.tcl:212 -msgid "Vradio" -msgstr "Vradio" - -#: ../src/pd_menus.tcl:168 ../src/pd_menus.tcl:213 ../src/pd_menus.tcl:214 -msgid "Hradio" -msgstr "Hradio" - -#: ../src/pd_menus.tcl:170 ../src/pd_menus.tcl:215 ../src/pd_menus.tcl:216 -msgid "VU Meter" -msgstr "VU-mätare" - -#: ../src/pd_menus.tcl:172 ../src/pd_menus.tcl:217 ../src/pd_menus.tcl:218 -msgid "Canvas" -msgstr "Canvas" - -#: ../src/pd_menus.tcl:175 ../src/pd_menus.tcl:220 ../src/pd_menus.tcl:221 msgid "Graph" msgstr "Graf" -#: ../src/pd_menus.tcl:176 ../src/pd_menus.tcl:221 ../src/pd_menus.tcl:222 -msgid "Array" -msgstr "Array" - -#: ../src/pd_menus.tcl:181 ../src/pd_menus.tcl:226 ../src/pd_menus.tcl:227 msgid "Find..." msgstr "Sök..." -#: ../src/pd_menus.tcl:183 ../src/pd_menus.tcl:228 ../src/pd_menus.tcl:229 msgid "Find Again" msgstr "Sök igen" -#: ../src/pd_menus.tcl:185 ../src/pd_menus.tcl:230 ../src/pd_menus.tcl:231 msgid "Find Last Error" msgstr "Sök senaste fel" -#: ../src/pd_menus.tcl:191 ../src/pd_menus.tcl:236 ../src/pd_menus.tcl:237 msgid "DSP On" msgstr "DSP på" -#: ../src/pd_menus.tcl:193 ../src/pd_menus.tcl:238 ../src/pd_menus.tcl:239 msgid "DSP Off" msgstr "DSP av" -#: ../src/pd_menus.tcl:196 ../src/pd_menus.tcl:242 ../src/pd_menus.tcl:269 msgid "Test Audio and MIDI..." msgstr "Testa ljud och MIDI..." -#: ../src/pd_menus.tcl:198 ../src/pd_menus.tcl:244 ../src/pd_menus.tcl:271 #, fuzzy msgid "Load Meter" msgstr "Belastningsmätare" -#: ../src/pd_menus.tcl:205 ../src/pd_menus.tcl:251 ../src/pd_menus.tcl:278 +msgid "Audio Settings..." +msgstr "" + +msgid "MIDI Settings..." +msgstr "" + msgid "Minimize" msgstr "Minimera" -#: ../src/pd_menus.tcl:207 ../src/pd_menus.tcl:253 ../src/pd_menus.tcl:280 msgid "Zoom" msgstr "Zooma" -#: ../src/pd_menus.tcl:210 ../src/pd_menus.tcl:256 ../src/pd_menus.tcl:283 -msgid "Parent Window" -msgstr "Föräldrafönster" - -#: ../src/pd_menus.tcl:216 ../src/pd_menus.tcl:262 ../src/pd_menus.tcl:289 #, fuzzy msgid "Bring All to Front" msgstr "Lägg alla överst" -#: ../src/pd_menus.tcl:224 ../src/pd_menus.tcl:241 ../src/pd_menus.tcl:253 -#: ../src/pd_menus.tcl:270 ../src/pd_menus.tcl:297 ../src/pd_menus.tcl:335 -#: ../src/pd_menus.tcl:362 -msgid "About Pd" -msgstr "Om Pd" +#, fuzzy +msgid "Next Window" +msgstr "Föräldrafönster" + +#, fuzzy +msgid "Previous Window" +msgstr "Föräldrafönster" + +msgid "Parent Window" +msgstr "Föräldrafönster" -#: ../src/pd_menus.tcl:227 ../src/pd_menus.tcl:273 ../src/pd_menus.tcl:300 msgid "HTML Manual..." msgstr "HTML-manual..." -#: ../src/pd_menus.tcl:229 ../src/pd_menus.tcl:275 ../src/pd_menus.tcl:302 msgid "Browser..." msgstr "Bläddra..." -#: ../src/pd_menus.tcl:248 ../src/pd_menus.tcl:260 ../src/pd_menus.tcl:342 -#: ../src/pd_menus.tcl:369 -msgid "Preferences..." -msgstr "Inställningar..." +msgid "puredata.info" +msgstr "" -#: ../src/pd_menus.tcl:257 ../src/pd_menus.tcl:270 ../src/pd_menus.tcl:352 -#: ../src/pd_menus.tcl:379 -msgid "Open Recent" -msgstr "Öppna senaste" +msgid "Report a bug" +msgstr "" -#: ../src/pd_menus.tcl:263 -msgid "Audio Settings..." +#, fuzzy +msgid "Clear Menu" +msgstr "Rensa konsoll" + +msgid "" +"Delete all preferences?\n" +"(takes effect when Pd is restarted)" msgstr "" -#: ../src/pd_menus.tcl:265 -msgid "MIDI Settings..." +msgid "Path..." msgstr "" -#: ../src/pd_menus.tcl:296 ../src/pd_menus.tcl:309 ../src/pd_menus.tcl:333 -#: ../src/pd_menus.tcl:346 ../src/pd_menus.tcl:393 ../src/pd_menus.tcl:420 -#: ../src/pd_menus.tcl:432 ../src/pd_menus.tcl:459 -msgid "Quit" -msgstr "Avsluta" +msgid "Startup..." +msgstr "" + +msgid "Audio..." +msgstr "" + +msgid "MIDI..." +msgstr "" -#: ../src/pd_menus.tcl:304 ../src/pd_menus.tcl:331 #, fuzzy -msgid "Clear Menu" -msgstr "Rensa konsoll" +msgid "Zoom New Windows" +msgstr "Föräldrafönster" + +#, fuzzy +msgid "Save All Preferences" +msgstr "Inställningar" + +#, fuzzy +msgid "Save to..." +msgstr "Spara som..." + +msgid "Load from..." +msgstr "" + +msgid "Forget All..." +msgstr "" + +msgid "Open Recent" +msgstr "Öppna senaste" + +msgid "Quit" +msgstr "Avsluta" -#: ../src/pdtk_canvas.tcl:44 ../src/pdtk_canvas.tcl:106 -#: ../src/pdtk_canvas.tcl:109 ../src/pdtk_canvas.tcl:123 -#: ../src/pdtk_canvas.tcl:125 ../src/pdtk_canvas.tcl:126 -#: ../src/pdtk_canvas.tcl:128 msgid "Properties" msgstr "Egenskaper" -#: ../src/pdwindow.tcl:43 +msgid "Audio on" +msgstr "" + +msgid "Audio off" +msgstr "" + +msgid "(Tcl) MISSING CLOSE-BRACKET ']': " +msgstr "" + +msgid "Tcl:" +msgstr "" + +msgid "Pd" +msgstr "" + #, fuzzy msgid "DSP" msgstr "DSP på" -#: ../startup/object_db.tcl:113 -msgid "Signal" +msgid "Audio I/O error" msgstr "" -#: ../startup/object_db.tcl:114 -msgid "Generators" +msgid "Log:" msgstr "" -#: ../startup/object_db.tcl:115 -#, fuzzy -msgid "Filters" -msgstr "Fil" +msgid "fatal" +msgstr "" -#: ../startup/object_db.tcl:116 ../startup/object_db.tcl:124 -msgid "Math" +msgid "error" msgstr "" -#: ../startup/object_db.tcl:117 ../startup/object_db.tcl:125 -msgid "I/O" +msgid "normal" msgstr "" -#: ../startup/object_db.tcl:118 ../startup/object_db.tcl:126 -msgid "Sampling" +msgid "debug" msgstr "" -#: ../startup/object_db.tcl:119 ../startup/object_db.tcl:128 -msgid "Routing" +msgid "all" msgstr "" -#: ../startup/object_db.tcl:120 ../startup/object_db.tcl:129 -msgid "Others" +msgid "New..." msgstr "" -#: ../startup/object_db.tcl:127 -msgid "GUI" +#, fuzzy +msgid "Edit..." +msgstr "Redigera" + +#, fuzzy +msgid "Delete" +msgstr "Radera array" + +#, tcl-format +msgid "Ignoring '%s': doesn't exist" +msgstr "" + +#, tcl-format +msgid "Ignoring '%s': doesn't look like a Pd-file" msgstr "" +#~ msgid "for:" +#~ msgstr "efter:" + #~ msgid "Patch Font" #~ msgstr "Patchtypsnitt" + +#, fuzzy +#~ msgid "Toggle Console" +#~ msgstr "Växla visning av konsoll" + +#~ msgid "Text Editor" +#~ msgstr "Textredigerare" + +#, fuzzy +#~ msgid "Discard changes to this window??" +#~ msgstr "Ignorera ändringar i detta fönster?" + +#, fuzzy +#~ msgid "Font Properties" +#~ msgstr "Egenskaper" + +#, fuzzy +#~ msgid "Pd Files" +#~ msgstr "Fil" + +#~ msgid "really quit?" +#~ msgstr "Vill du avsluta?" + +#, fuzzy +#~ msgid "Filters" +#~ msgstr "Fil" + +#~ msgid "Close this window??" +#~ msgstr "Stäng fönstret?" + +#~ msgid "Preferences..." +#~ msgstr "Inställningar..." diff --git a/po/template.pot b/po/template.pot index 6c9bd6f0d1..d6ceefc2f9 100644 --- a/po/template.pot +++ b/po/template.pot @@ -5,9 +5,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: Pure\\ Data 0.49.1_ceammc\n" +"Project-Id-Version: Pure\\ Data 0.50.1_ceammc\n" "Report-Msgid-Bugs-To: pd-dev@iem.at\n" -"POT-Creation-Date: 2019-04-09 22:10+0300\n" +"POT-Creation-Date: 2019-11-19 03:38+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -41,6 +41,10 @@ msgstr "" msgid "Preset Name" msgstr "" +#: ../ceammc/ext/src/lib/ceammc_ui.h +msgid "Output mouse events" +msgstr "" + #: ../ceammc/ext/src/lib/cicm/Sources/eclass.cpp #, c-format msgid "%s properties" @@ -86,6 +90,10 @@ msgstr "" msgid "Horizontal align" msgstr "" +#: ../ceammc/ext/src/lib/cicm/Sources/eclass.cpp +msgid "Inner position" +msgstr "" + #: ../ceammc/ext/src/lib/cicm/Sources/eclass.cpp ../tcl/dialog_gatom.tcl #: ../tcl/dialog_iemgui.tcl msgid "Label" @@ -121,6 +129,7 @@ msgid "MIDI" msgstr "" #: ../ceammc/ext/src/lib/cicm/Sources/eclass.cpp +#: ../ceammc/ext/src/spat/hoa_2d_scope.cpp #: ../ceammc/ext/src/ui/ui_arrayview.cpp ../ceammc/ext/src/ui/ui_display.cpp #: ../ceammc/ext/src/ui/ui_env.cpp ../ceammc/ext/src/ui/ui_gain.cpp #: ../ceammc/ext/src/ui/ui_gain2.cpp ../ceammc/ext/src/ui/ui_icon.cpp @@ -128,8 +137,8 @@ msgstr "" #: ../ceammc/ext/src/ui/ui_link.cpp ../ceammc/ext/src/ui/ui_matrix.cpp #: ../ceammc/ext/src/ui/ui_menu.cpp ../ceammc/ext/src/ui/ui_meter.cpp #: ../ceammc/ext/src/ui/ui_number.cpp ../ceammc/ext/src/ui/ui_number_tilde.cpp -#: ../ceammc/ext/src/ui/ui_radio.cpp ../ceammc/ext/src/ui/ui_rslider.cpp -#: ../ceammc/ext/src/ui/ui_scope.cpp +#: ../ceammc/ext/src/ui/ui_polar.cpp ../ceammc/ext/src/ui/ui_radio.cpp +#: ../ceammc/ext/src/ui/ui_rslider.cpp ../ceammc/ext/src/ui/ui_scope.cpp msgid "Main" msgstr "" @@ -166,6 +175,11 @@ msgstr "" msgid "Send Symbol" msgstr "" +#: ../ceammc/ext/src/lib/cicm/Sources/eclass.cpp +#: ../ceammc/ext/src/ui/ui_label.cpp +msgid "Text" +msgstr "" + #: ../ceammc/ext/src/lib/cicm/Sources/eclass.cpp msgid "Vertical align" msgstr "" @@ -175,8 +189,29 @@ msgstr "" msgid "normal" msgstr "" -#: ../ceammc/ext/src/lib/cicm/Sources/eclass.cpp -msgid "Inner position" +#: ../ceammc/ext/src/spat/hoa_2d_scope.cpp +msgid "Ambisonic Order" +msgstr "" + +#: ../ceammc/ext/src/spat/hoa_2d_scope.cpp +msgid "Gain" +msgstr "" + +#: ../ceammc/ext/src/spat/hoa_2d_scope.cpp +msgid "Negative Harmonics Color" +msgstr "" + +#: ../ceammc/ext/src/spat/hoa_2d_scope.cpp +msgid "Positive Harmonics Color" +msgstr "" + +#: ../ceammc/ext/src/spat/hoa_2d_scope.cpp ../ceammc/ext/src/ui/ui_scope.cpp +#: ../ceammc/ext/src/ui/ui_spectroscope.cpp +msgid "Refresh time (ms)" +msgstr "" + +#: ../ceammc/ext/src/spat/hoa_2d_scope.cpp +msgid "View rotation" msgstr "" #: ../ceammc/ext/src/ui/ui_arrayview.cpp @@ -252,6 +287,10 @@ msgstr "" msgid "Text Color" msgstr "" +#: ../ceammc/ext/src/ui/ui_dsp.cpp ../tcl/dialog_audio.tcl +msgid "Audio Settings" +msgstr "" + #: ../ceammc/ext/src/ui/ui_env.cpp msgid "Length" msgstr "" @@ -270,6 +309,21 @@ msgstr "" msgid "Knob Color" msgstr "" +#: ../ceammc/ext/src/ui/ui_gain.cpp ../ceammc/ext/src/ui/ui_knob.cpp +#: ../ceammc/ext/src/ui/ui_slider.cpp +msgid "MIDI channel" +msgstr "" + +#: ../ceammc/ext/src/ui/ui_gain.cpp ../ceammc/ext/src/ui/ui_knob.cpp +#: ../ceammc/ext/src/ui/ui_slider.cpp +msgid "MIDI control" +msgstr "" + +#: ../ceammc/ext/src/ui/ui_gain.cpp ../ceammc/ext/src/ui/ui_knob.cpp +#: ../ceammc/ext/src/ui/ui_slider.cpp +msgid "MIDI pickup" +msgstr "" + #: ../ceammc/ext/src/ui/ui_gain.cpp ../ceammc/ext/src/ui/ui_gain2.cpp #: ../ceammc/ext/src/ui/ui_scope.cpp msgid "Maximum value" @@ -288,6 +342,10 @@ msgstr "" msgid "Output value" msgstr "" +#: ../ceammc/ext/src/ui/ui_gain.cpp ../ceammc/ext/src/ui/ui_gain2.cpp +msgid "Relative mode" +msgstr "" + #: ../ceammc/ext/src/ui/ui_gain.cpp ../ceammc/ext/src/ui/ui_gain2.cpp #: ../ceammc/ext/src/ui/ui_knob.cpp ../ceammc/ext/src/ui/ui_slider2d.cpp #: ../ceammc/ext/src/ui/ui_sliders.cpp @@ -330,18 +388,6 @@ msgstr "" msgid "Draw active scale" msgstr "" -#: ../ceammc/ext/src/ui/ui_knob.cpp ../ceammc/ext/src/ui/ui_slider.cpp -msgid "MIDI channel" -msgstr "" - -#: ../ceammc/ext/src/ui/ui_knob.cpp ../ceammc/ext/src/ui/ui_slider.cpp -msgid "MIDI control" -msgstr "" - -#: ../ceammc/ext/src/ui/ui_knob.cpp ../ceammc/ext/src/ui/ui_slider.cpp -msgid "MIDI pickup" -msgstr "" - #: ../ceammc/ext/src/ui/ui_knob.cpp ../ceammc/ext/src/ui/ui_number.cpp #: ../ceammc/ext/src/ui/ui_rslider.cpp ../ceammc/ext/src/ui/ui_slider.cpp #: ../ceammc/ext/src/ui/ui_sliders.cpp @@ -358,7 +404,12 @@ msgstr "" msgid "Scale Color" msgstr "" -#: ../ceammc/ext/src/ui/ui_knob.cpp ../ceammc/ext/src/ui/ui_slider2d.cpp +#: ../ceammc/ext/src/ui/ui_knob.cpp ../ceammc/ext/src/ui/ui_slider.cpp +msgid "Scale Mode" +msgstr "" + +#: ../ceammc/ext/src/ui/ui_knob.cpp ../ceammc/ext/src/ui/ui_polar.cpp +#: ../ceammc/ext/src/ui/ui_slider2d.cpp msgid "center" msgstr "" @@ -390,10 +441,6 @@ msgstr "" msgid "Margin top" msgstr "" -#: ../ceammc/ext/src/ui/ui_label.cpp -msgid "Text" -msgstr "" - #: ../ceammc/ext/src/ui/ui_link.cpp ../ceammc/ext/src/ui/ui_tab.cpp msgid "Hover Color" msgstr "" @@ -422,19 +469,28 @@ msgstr "" msgid "Rows" msgstr "" -#: ../ceammc/ext/src/ui/ui_matrix.cpp +#: ../ceammc/ext/src/ui/ui_matrix.cpp ../ceammc/ext/src/ui/ui_radio.cpp msgid "flip" msgstr "" #: ../ceammc/ext/src/ui/ui_matrix.cpp -msgid "load" +msgid "flip column" msgstr "" #: ../ceammc/ext/src/ui/ui_matrix.cpp -msgid "random" +msgid "flip row" msgstr "" #: ../ceammc/ext/src/ui/ui_matrix.cpp +msgid "load" +msgstr "" + +#: ../ceammc/ext/src/ui/ui_matrix.cpp ../ceammc/ext/src/ui/ui_radio.cpp +#: ../ceammc/ext/src/ui/ui_sliders.cpp +msgid "random" +msgstr "" + +#: ../ceammc/ext/src/ui/ui_matrix.cpp ../ceammc/ext/src/ui/ui_radio.cpp msgid "reset" msgstr "" @@ -442,6 +498,14 @@ msgstr "" msgid "save" msgstr "" +#: ../ceammc/ext/src/ui/ui_matrix.cpp +msgid "reset row" +msgstr "" + +#: ../ceammc/ext/src/ui/ui_matrix.cpp +msgid "reset column" +msgstr "" + #: ../ceammc/ext/src/ui/ui_menu.cpp ../ceammc/ext/src/ui/ui_tab.cpp msgid "Items" msgstr "" @@ -486,6 +550,42 @@ msgstr "" msgid "Decimal precision" msgstr "" +#: ../ceammc/ext/src/ui/ui_polar.cpp +msgid "Clockwise" +msgstr "" + +#: ../ceammc/ext/src/ui/ui_polar.cpp +msgid "Direction" +msgstr "" + +#: ../ceammc/ext/src/ui/ui_polar.cpp +msgid "Positive output" +msgstr "" + +#: ../ceammc/ext/src/ui/ui_polar.cpp +msgid "Use degrees" +msgstr "" + +#: ../ceammc/ext/src/ui/ui_polar.cpp +msgid "Use radians" +msgstr "" + +#: ../ceammc/ext/src/ui/ui_polar.cpp ../ceammc/ext/src/ui/ui_slider2d.cpp +msgid "bottom center" +msgstr "" + +#: ../ceammc/ext/src/ui/ui_polar.cpp ../ceammc/ext/src/ui/ui_slider2d.cpp +msgid "left center" +msgstr "" + +#: ../ceammc/ext/src/ui/ui_polar.cpp ../ceammc/ext/src/ui/ui_slider2d.cpp +msgid "right center" +msgstr "" + +#: ../ceammc/ext/src/ui/ui_polar.cpp ../ceammc/ext/src/ui/ui_slider2d.cpp +msgid "top center" +msgstr "" + #: ../ceammc/ext/src/ui/ui_preset.cpp msgid "Empty Button Color" msgstr "" @@ -494,6 +594,14 @@ msgstr "" msgid "Stored Button Color" msgstr "" +#: ../ceammc/ext/src/ui/ui_preset.cpp +msgid "read" +msgstr "" + +#: ../ceammc/ext/src/ui/ui_preset.cpp +msgid "write" +msgstr "" + #: ../ceammc/ext/src/ui/ui_radio.cpp msgid "Check List Mode" msgstr "" @@ -506,12 +614,20 @@ msgstr "" msgid "Mouse sync" msgstr "" -#: ../ceammc/ext/src/ui/ui_scope.cpp ../ceammc/ext/src/ui/ui_spectroscope.cpp -msgid "Refresh time (ms)" +#: ../ceammc/ext/src/ui/ui_scope.cpp +msgid "Window size" msgstr "" #: ../ceammc/ext/src/ui/ui_scope.cpp -msgid "Window size" +msgid "Zoom 100%" +msgstr "" + +#: ../ceammc/ext/src/ui/ui_scope.cpp +msgid "Zoom 200%" +msgstr "" + +#: ../ceammc/ext/src/ui/ui_scope.cpp +msgid "Zoom 50%" msgstr "" #: ../ceammc/ext/src/ui/ui_slider.cpp @@ -535,39 +651,39 @@ msgid "Value position" msgstr "" #: ../ceammc/ext/src/ui/ui_slider2d.cpp -msgid "Maximum X-value" +msgid "Bottom Y-value" msgstr "" #: ../ceammc/ext/src/ui/ui_slider2d.cpp -msgid "Maximum Y-value" +msgid "Left X-value" msgstr "" #: ../ceammc/ext/src/ui/ui_slider2d.cpp -msgid "Minimum X-value" +msgid "Maximum X-value" msgstr "" #: ../ceammc/ext/src/ui/ui_slider2d.cpp -msgid "Minimum Y-value" +msgid "Maximum Y-value" msgstr "" #: ../ceammc/ext/src/ui/ui_slider2d.cpp -msgid "Show grid" +msgid "Minimum X-value" msgstr "" #: ../ceammc/ext/src/ui/ui_slider2d.cpp -msgid "bottom center" +msgid "Minimum Y-value" msgstr "" #: ../ceammc/ext/src/ui/ui_slider2d.cpp -msgid "left center" +msgid "Right X-value" msgstr "" #: ../ceammc/ext/src/ui/ui_slider2d.cpp -msgid "right center" +msgid "Show grid" msgstr "" #: ../ceammc/ext/src/ui/ui_slider2d.cpp -msgid "top center" +msgid "Top Y-value" msgstr "" #: ../ceammc/ext/src/ui/ui_sliders.cpp @@ -591,6 +707,14 @@ msgstr "" msgid "fill with %f" msgstr "" +#: ../ceammc/ext/src/ui/ui_sliders.cpp +msgid "linear down" +msgstr "" + +#: ../ceammc/ext/src/ui/ui_sliders.cpp +msgid "linear up" +msgstr "" + #: ../ceammc/ext/src/ui/ui_spectroscope.cpp msgid "Log scale" msgstr "" @@ -731,10 +855,6 @@ msgstr "" msgid "4:" msgstr "" -#: ../tcl/dialog_audio.tcl -msgid "Audio Settings" -msgstr "" - #: ../tcl/dialog_audio.tcl msgid "Block size:" msgstr "" diff --git a/po/vi.po b/po/vi.po index 9a26c50d32..b1f2e654f4 100644 --- a/po/vi.po +++ b/po/vi.po @@ -5,24 +5,99 @@ msgid "" msgstr "" "Project-Id-Version: Pure Data 0.43\n" "Report-Msgid-Bugs-To: pd-dev@iem.at\n" -"POT-Creation-Date: 2009-08-27 10:01-0400\n" +"POT-Creation-Date: 2017-07-06 18:10+0200\n" "PO-Revision-Date: 2005-07-28 17:29+0930\n" "Last-Translator: Clytie Siddall \n" "Language-Team: Vietnamese \n" +"Language: vi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0\n" "X-Generator: LocFactoryEditor 1.2.2\n" +msgid "-------dimensions(digits)(pix):-------" +msgstr "" + +msgid "--------dimensions(pix)(pix):--------" +msgstr "" + +msgid "----------dimensions(pix):-----------" +msgstr "" + +msgid "--------flash-time(ms)(ms):---------" +msgstr "" + +msgid "-----------output-range:-----------" +msgstr "" + +msgid "------selectable_dimensions(pix):------" +msgstr "" + +msgid "------visible_rectangle(pix)(pix):------" +msgstr "" + #, fuzzy -msgid "Undo duplicate" -msgstr "Ngày" +msgid "bottom:" +msgstr "Đáy" -msgid "Undo paste" +#, fuzzy +msgid "height:" +msgstr "Bên phải" + +msgid "hold:" msgstr "" -msgid "Undo motion" +msgid "intrrpt:" +msgstr "" + +msgid "left:" +msgstr "" + +msgid "lin" +msgstr "" + +msgid "log" +msgstr "" + +msgid "log-height:" +msgstr "" + +msgid "max:" +msgstr "" + +msgid "min:" +msgstr "" + +#, fuzzy +msgid "right:" +msgstr "Bên phải" + +#, fuzzy +msgid "size:" +msgstr "Cỡ:" + +msgid "top:" +msgstr "" + +msgid "value:" +msgstr "" + +msgid "width:" +msgstr "" + +#, tcl-format +msgid "Do you want to save the changes you made in '%s'?" +msgstr "" + +#, tcl-format +msgid "Discard changes to '%s'?" +msgstr "" + +msgid "Undo clear" +msgstr "" + +msgid "Undo connect" msgstr "" #, fuzzy @@ -32,923 +107,1051 @@ msgstr "U-gan-đa" msgid "Undo disconnect" msgstr "" -msgid "Undo connect" +#, fuzzy +msgid "Undo duplicate" +msgstr "Ngày" + +msgid "Undo motion" msgstr "" -msgid "Undo clear" +msgid "Undo paste" msgstr "" msgid "Undo typing" msgstr "" -msgid "Discard changes to '%s'?" +msgid "Redo clear" msgstr "" -msgid "Do you want to save the changes you made in '%s'?" +msgid "Redo connect" +msgstr "" + +#, fuzzy +msgid "Redo cut" +msgstr "U-gan-đa" + +msgid "Redo disconnect" +msgstr "" + +#, fuzzy +msgid "Redo duplicate" +msgstr "Ngày" + +msgid "Redo motion" +msgstr "" + +msgid "Redo paste" +msgstr "" + +msgid "Redo typing" +msgstr "" + +msgid "no Pd settings to clear" +msgstr "" + +msgid "removed .pdsettings file" +msgstr "" + +msgid "couldn't delete .pdsettings file" +msgstr "" + +msgid "failed to erase Pd settings" +msgstr "" + +msgid "erased Pd settings" +msgstr "" + +msgid "no Pd settings to erase" +msgstr "" + +msgid "skipping loading preferences... Pd seems to have crashed on startup." +msgstr "" + +msgid "(re-save preferences to reinstate them)" +msgstr "" + +msgid "File" +msgstr "Tập tin" + +#, fuzzy +msgid "Edit" +msgstr "_Hiệu chỉnh" + +msgid "Put" +msgstr "" + +msgid "Find" +msgstr "Tìm" + +#, fuzzy +msgid "Media" +msgstr "Maxêđôni" + +#, fuzzy +msgid "Window" +msgstr "_Cửa sổ" + +msgid "Help" +msgstr "Trợ giúp" + +msgid "Show &Hidden Files and Directories" msgstr "" -#: ../src/dialog_array.tcl:115 ../src/dialog_array.tcl:117 -#: ../src/pd_menus.tcl:100 ../src/pd_menus.tcl:101 ../src/pd_menus.tcl:146 -#: ../src/pd_menus.tcl:147 msgid "Copy" msgstr "Chép" -#: ../src/dialog_array.tcl:118 ../src/dialog_array.tcl:120 -#: ../src/pd_menus.tcl:102 ../src/pd_menus.tcl:103 ../src/pd_menus.tcl:148 -#: ../src/pd_menus.tcl:149 #, fuzzy msgid "Paste" msgstr "Ngày" -#: ../src/dialog_array.tcl:264 ../src/dialog_array.tcl:266 msgid "Array Properties" msgstr "" -#: ../src/dialog_array.tcl:270 ../src/dialog_array.tcl:272 +#, fuzzy +msgid "Array" +msgstr "Ăn-đoa-râ" + #, fuzzy msgid "Name:" msgstr "Tên" -#: ../src/dialog_array.tcl:276 ../src/dialog_array.tcl:278 -#: ../src/dialog_canvas.tcl:178 ../src/dialog_canvas.tcl:193 -#: ../src/dialog_iemgui.tcl:619 ../src/dialog_iemgui.tcl:621 msgid "Size:" msgstr "Cỡ:" -#: ../src/dialog_array.tcl:280 ../src/dialog_array.tcl:282 #, fuzzy msgid "Save contents" msgstr "_Nội dụng" -#: ../src/dialog_array.tcl:284 ../src/dialog_array.tcl:286 msgid "Draw as:" msgstr "" -#: ../src/dialog_array.tcl:287 ../src/dialog_array.tcl:289 -#, fuzzy -msgid "Points" -msgstr "Cổng" - -#: ../src/dialog_array.tcl:289 ../src/dialog_array.tcl:291 #, fuzzy msgid "Polygon" msgstr "Ba-lan" -#: ../src/dialog_array.tcl:291 ../src/dialog_array.tcl:293 +#, fuzzy +msgid "Points" +msgstr "Cổng" + msgid "Bezier curve" msgstr "" -#: ../src/dialog_array.tcl:297 ../src/dialog_array.tcl:299 msgid "Put array into:" msgstr "" -#: ../src/dialog_array.tcl:300 ../src/dialog_array.tcl:302 msgid "New graph" msgstr "" -#: ../src/dialog_array.tcl:302 ../src/dialog_array.tcl:304 #, fuzzy msgid "Last graph" msgstr "Tin nhẳn trước:" -#: ../src/dialog_array.tcl:306 ../src/dialog_array.tcl:308 -#, fuzzy -msgid "Delete array" -msgstr "Xóa bỏ" +msgid "Options" +msgstr "" -#: ../src/dialog_array.tcl:312 ../src/dialog_array.tcl:314 #, fuzzy msgid "Open List View..." msgstr "Danh sách đuổi ra..." -#: ../src/dialog_array.tcl:319 ../src/dialog_array.tcl:321 -#: ../src/dialog_audio.tcl:136 ../src/dialog_canvas.tcl:205 -#: ../src/dialog_font.tcl:51 ../src/dialog_gatom.tcl:153 -#: ../src/dialog_gatom.tcl:161 ../src/dialog_iemgui.tcl:742 -#: ../src/dialog_iemgui.tcl:748 ../src/dialog_midi.tcl:91 -#: ../src/dialog_midi.tcl:226 +#, fuzzy +msgid "Delete array" +msgstr "Xóa bỏ" + msgid "Cancel" msgstr "Thôi" -#: ../src/dialog_array.tcl:321 ../src/dialog_array.tcl:323 -#: ../src/dialog_audio.tcl:138 ../src/dialog_canvas.tcl:207 -#: ../src/dialog_gatom.tcl:156 ../src/dialog_gatom.tcl:164 -#: ../src/dialog_iemgui.tcl:745 ../src/dialog_iemgui.tcl:751 -#: ../src/dialog_midi.tcl:93 ../src/dialog_midi.tcl:228 msgid "Apply" msgstr "Áp dụng" -#: ../src/dialog_array.tcl:323 ../src/dialog_array.tcl:325 -#: ../src/dialog_audio.tcl:140 ../src/dialog_canvas.tcl:209 -#: ../src/dialog_font.tcl:53 ../src/dialog_font.tcl:92 -#: ../src/dialog_font.tcl:100 ../src/dialog_font.tcl:101 -#: ../src/dialog_gatom.tcl:159 ../src/dialog_gatom.tcl:167 -#: ../src/dialog_iemgui.tcl:748 ../src/dialog_iemgui.tcl:754 -#: ../src/dialog_midi.tcl:95 ../src/dialog_midi.tcl:230 msgid "OK" msgstr "" -#: ../src/dialog_audio.tcl:130 msgid "Audio Settings" msgstr "" -#: ../src/dialog_audio.tcl:142 -msgid "Save All Settings" +msgid "Settings" msgstr "" -#: ../src/dialog_audio.tcl:151 msgid "Sample rate:" msgstr "" -#: ../src/dialog_audio.tcl:153 msgid "Delay (msec):" msgstr "" -#: ../src/dialog_audio.tcl:158 +msgid "Block size:" +msgstr "" + msgid "Use callbacks" msgstr "" -#: ../src/dialog_audio.tcl:166 ../src/dialog_midi.tcl:105 -#: ../src/dialog_midi.tcl:241 -msgid "Input device 1:" +msgid "Input Devices" msgstr "" -#: ../src/dialog_audio.tcl:169 ../src/dialog_audio.tcl:183 -#: ../src/dialog_audio.tcl:198 ../src/dialog_audio.tcl:213 -#: ../src/dialog_audio.tcl:232 ../src/dialog_audio.tcl:250 -#: ../src/dialog_audio.tcl:265 ../src/dialog_audio.tcl:280 #, fuzzy msgid "Channels:" msgstr "Thôi" -#: ../src/dialog_audio.tcl:179 ../src/dialog_midi.tcl:115 -#: ../src/dialog_midi.tcl:251 -msgid "Input device 2:" -msgstr "" - -#: ../src/dialog_audio.tcl:194 ../src/dialog_midi.tcl:127 -#: ../src/dialog_midi.tcl:263 -msgid "Input device 3:" -msgstr "" - -#: ../src/dialog_audio.tcl:209 ../src/dialog_midi.tcl:139 -#: ../src/dialog_midi.tcl:275 -msgid "Input device 4:" -msgstr "" - -#: ../src/dialog_audio.tcl:223 ../src/dialog_midi.tcl:150 -#: ../src/dialog_midi.tcl:286 -msgid "Output device 1:" -msgstr "" - -#: ../src/dialog_audio.tcl:226 -msgid "(same as input device) .............. " +msgid "Output Devices" msgstr "" -#: ../src/dialog_audio.tcl:246 ../src/dialog_midi.tcl:160 -#: ../src/dialog_midi.tcl:296 -msgid "Output device 2:" +msgid "(same as input device)..." msgstr "" -#: ../src/dialog_audio.tcl:261 ../src/dialog_midi.tcl:171 -#: ../src/dialog_midi.tcl:307 -msgid "Output device 3:" +msgid "Use Multiple Devices" msgstr "" -#: ../src/dialog_audio.tcl:276 ../src/dialog_midi.tcl:182 -#: ../src/dialog_midi.tcl:318 -msgid "Output device 4:" +msgid "Save All Settings" msgstr "" -#: ../src/dialog_audio.tcl:291 ../src/dialog_midi.tcl:195 -msgid "Use multiple devices" +msgid "WARNING: unknown graphme flags received in pdtk_canvas_dialog" msgstr "" -#: ../src/dialog_canvas.tcl:142 msgid "Canvas Properties" msgstr "" -#: ../src/dialog_canvas.tcl:146 #, fuzzy msgid "Scale" msgstr "Lưu" -#: ../src/dialog_canvas.tcl:150 msgid "X units per pixel:" msgstr "" -#: ../src/dialog_canvas.tcl:155 msgid "Y units per pixel:" msgstr "" -#: ../src/dialog_canvas.tcl:159 msgid "Appearance on parent patch" msgstr "" -#: ../src/dialog_canvas.tcl:161 msgid "Graph-On-Parent" msgstr "" -#: ../src/dialog_canvas.tcl:165 msgid "Hide object name and arguments" msgstr "" -#: ../src/dialog_canvas.tcl:170 msgid "Range and size" msgstr "" -#: ../src/dialog_canvas.tcl:174 -msgid "X range, from" +msgid "X range: from" msgstr "" -#: ../src/dialog_canvas.tcl:176 ../src/dialog_canvas.tcl:191 msgid "to" msgstr "" -#: ../src/dialog_canvas.tcl:180 ../src/dialog_canvas.tcl:195 #, fuzzy msgid "Margin:" msgstr "Dòng đánh dấu:" -#: ../src/dialog_canvas.tcl:189 -msgid "Y range, from" +msgid "Y range: from" msgstr "" -#: ../src/dialog_find.tcl:63 ../src/dialog_find.tcl:66 -#: ../src/dialog_find.tcl:79 ../src/dialog_find.tcl:80 -#: ../src/dialog_find.tcl:83 ../src/dialog_find.tcl:85 -#: ../src/dialog_find.tcl:87 ../src/dialog_find.tcl:101 -#: ../src/dialog_find.tcl:105 ../src/dialog_find.tcl:107 -#: ../src/pd_menus.tcl:45 -msgid "Find" -msgstr "Tìm" +msgid "Data Properties" +msgstr "" -#: ../src/dialog_find.tcl:70 ../src/dialog_find.tcl:73 -#: ../src/dialog_find.tcl:87 ../src/dialog_find.tcl:91 -#: ../src/dialog_find.tcl:93 -#, fuzzy -msgid "Search in" +#, tcl-format +msgid "Found '%1$s' in %2$s" +msgstr "" + +#, tcl-format +msgid "Couldn't find '%1$s' in %2$s" +msgstr "" + +#, fuzzy, tcl-format +msgid "Search in %s for:" msgstr "Tìm kiếm trong văn bản..." -#: ../src/dialog_find.tcl:72 ../src/dialog_find.tcl:75 -#: ../src/dialog_find.tcl:89 ../src/dialog_find.tcl:93 -#: ../src/dialog_find.tcl:95 -#, fuzzy -msgid "for:" -msgstr "Cổng:" - -#: ../src/dialog_find.tcl:83 ../src/dialog_find.tcl:90 -#: ../src/dialog_find.tcl:104 ../src/dialog_find.tcl:108 -#: ../src/dialog_find.tcl:110 ../src/pd_menus.tcl:86 ../src/pd_menus.tcl:87 -#: ../src/pd_menus.tcl:132 ../src/pd_menus.tcl:133 ../src/pd_menus.tcl:259 -#: ../src/pd_menus.tcl:272 ../src/pd_menus.tcl:295 ../src/pd_menus.tcl:308 -#: ../src/pd_menus.tcl:332 ../src/pd_menus.tcl:345 ../src/pd_menus.tcl:354 -#: ../src/pd_menus.tcl:381 ../src/pd_menus.tcl:392 ../src/pd_menus.tcl:419 -#: ../src/pd_menus.tcl:431 ../src/pd_menus.tcl:458 -msgid "Close" -msgstr "Đóng" +#, tcl-format +msgid "Showed last '%1$s' in %2$s" +msgstr "" -#: ../src/dialog_find.tcl:83 ../src/dialog_find.tcl:97 -#: ../src/dialog_find.tcl:101 ../src/dialog_find.tcl:103 -msgid "Match whole word only" +#, tcl-format +msgid "Showing '%1$d' out of %2$d items in %3$s" msgstr "" -#: ../src/dialog_find.tcl:92 ../src/dialog_font.tcl:49 -#: ../src/dialog_font.tcl:50 ../src/pd-gui.tcl:280 ../src/pd-gui.tcl:283 -#: ../src/pd-gui.tcl:286 ../src/pd-gui.tcl:288 ../src/pd-gui.tcl:291 -#: ../src/pd_menus.tcl:212 ../src/pd_menus.tcl:258 ../src/pd_menus.tcl:285 -#: ../src/pdwindow.tcl:33 #, fuzzy msgid "Pd window" msgstr "Cửa sô Gởi" -#: ../src/dialog_font.tcl:45 -msgid "Font Properties" +msgid "Match whole word only" msgstr "" -#: ../src/dialog_font.tcl:46 ../src/dialog_font.tcl:54 -#: ../src/dialog_font.tcl:55 +msgid "Close" +msgstr "Đóng" + #, fuzzy, tcl-format msgid "%s Font" msgstr "Phông chữ:" -#: ../src/dialog_font.tcl:61 ../src/dialog_font.tcl:96 -#: ../src/dialog_font.tcl:104 ../src/dialog_font.tcl:105 +#, fuzzy +msgid "Font" +msgstr "Phông chữ:" + #, fuzzy msgid "Font Size" msgstr "Cỡ:" -#: ../src/dialog_font.tcl:89 ../src/dialog_font.tcl:108 -#: ../src/dialog_font.tcl:116 ../src/dialog_font.tcl:117 #, fuzzy msgid "Stretch" msgstr "Bắt đầu:" -#: ../src/dialog_font.tcl:96 ../src/dialog_font.tcl:115 -#: ../src/dialog_font.tcl:123 ../src/dialog_font.tcl:124 msgid "X and Y" msgstr "" -#: ../src/dialog_font.tcl:98 ../src/dialog_font.tcl:117 -#: ../src/dialog_font.tcl:125 ../src/dialog_font.tcl:126 msgid "X only" msgstr "" -#: ../src/dialog_font.tcl:100 ../src/dialog_font.tcl:119 -#: ../src/dialog_font.tcl:127 ../src/dialog_font.tcl:128 msgid "Y only" msgstr "" -#: ../src/dialog_gatom.tcl:93 msgid "Atom Box Properties" msgstr "" -#: ../src/dialog_gatom.tcl:99 msgid "Width:" msgstr "" -#: ../src/dialog_gatom.tcl:103 #, fuzzy msgid "Limits" msgstr "Giới hạn người dùng" -#: ../src/dialog_gatom.tcl:107 msgid "Lower:" msgstr "" -#: ../src/dialog_gatom.tcl:112 ../src/dialog_gatom.tcl:113 #, fuzzy msgid "Upper:" msgstr "Người dùng:" -#: ../src/dialog_gatom.tcl:116 ../src/dialog_gatom.tcl:121 -#: ../src/dialog_iemgui.tcl:600 ../src/dialog_iemgui.tcl:652 -#: ../src/dialog_iemgui.tcl:657 msgid "Label" msgstr "" -#: ../src/dialog_gatom.tcl:124 ../src/dialog_gatom.tcl:129 #, fuzzy -msgid "Left " +msgid "Left" msgstr "Bên trái" -#: ../src/dialog_gatom.tcl:126 ../src/dialog_gatom.tcl:131 msgid "Right" msgstr "Bên phải" -#: ../src/dialog_gatom.tcl:128 ../src/dialog_gatom.tcl:133 msgid "Top" msgstr "Đầu" -#: ../src/dialog_gatom.tcl:130 ../src/dialog_gatom.tcl:135 msgid "Bottom" msgstr "Đáy" -#: ../src/dialog_gatom.tcl:137 ../src/dialog_gatom.tcl:145 -#: ../src/dialog_iemgui.tcl:574 #, fuzzy msgid "Messages" msgstr "Tin nhẳn" -#: ../src/dialog_gatom.tcl:141 ../src/dialog_gatom.tcl:149 -#: ../src/dialog_iemgui.tcl:578 msgid "Send symbol:" msgstr "" -#: ../src/dialog_gatom.tcl:147 ../src/dialog_gatom.tcl:155 -#: ../src/dialog_iemgui.tcl:585 #, fuzzy msgid "Receive symbol:" msgstr "Cửa sổ Nhận" -#: ../src/dialog_iemgui.tcl:197 #, fuzzy msgid "Background color" msgstr "Nền:" -#: ../src/dialog_iemgui.tcl:204 #, fuzzy msgid "Foreground color" msgstr "Tiền cảnh:" -#: ../src/dialog_iemgui.tcl:211 #, fuzzy msgid "Label color" msgstr "Chọn màu" -#: ../src/dialog_iemgui.tcl:272 #, fuzzy msgid "Init" msgstr "Mời" -#: ../src/dialog_iemgui.tcl:275 ../src/dialog_iemgui.tcl:546 msgid "No init" msgstr "" -#: ../src/dialog_iemgui.tcl:287 ../src/dialog_iemgui.tcl:558 msgid "Jump on click" msgstr "" -#: ../src/dialog_iemgui.tcl:290 ../src/dialog_iemgui.tcl:561 msgid "Steady on click" msgstr "" -#: ../src/dialog_iemgui.tcl:498 +#, fuzzy +msgid "Bang" +msgstr "Đuổi" + +msgid "Flash Time (msec)" +msgstr "" + +msgid "Intrrpt:" +msgstr "" + +msgid "Hold:" +msgstr "" + +#, fuzzy +msgid "Toggle" +msgstr "Tô-gô" + +msgid "Non Zero Value" +msgstr "" + +msgid "Value:" +msgstr "" + +#, fuzzy +msgid "Number2" +msgstr "$ Số" + +msgid "Width (digits):" +msgstr "" + +#, fuzzy +msgid "Height:" +msgstr "Bên phải" + +msgid "Output Range" +msgstr "" + +msgid "Log height:" +msgstr "" + +msgid "Vslider" +msgstr "" + +#, fuzzy +msgid "Hslider" +msgstr "Bị ẩn" + +#, fuzzy +msgid "Vradio" +msgstr "Phiên bản" + +msgid "Num cells:" +msgstr "" + +msgid "Hradio" +msgstr "" + +msgid "VU Meter" +msgstr "" + +#, fuzzy +msgid "Canvas" +msgstr "Ca-na-đa" + +msgid "Visible Rectangle (pix)" +msgstr "" + #, tcl-format msgid "%s Properties" msgstr "" -#: ../src/dialog_iemgui.tcl:550 ../src/pd_menus.tcl:83 ../src/pd_menus.tcl:84 -#: ../src/pd_menus.tcl:129 ../src/pd_menus.tcl:130 ../src/pd_menus.tcl:260 -#: ../src/pd_menus.tcl:273 ../src/pd_menus.tcl:288 ../src/pd_menus.tcl:301 -#: ../src/pd_menus.tcl:325 ../src/pd_menus.tcl:338 ../src/pd_menus.tcl:355 -#: ../src/pd_menus.tcl:382 ../src/pd_menus.tcl:383 ../src/pd_menus.tcl:410 -#: ../src/pd_menus.tcl:422 ../src/pd_menus.tcl:449 -msgid "Save" -msgstr "Lưu" +msgid "Parameters" +msgstr "" -#: ../src/dialog_iemgui.tcl:608 -msgid "X offset" +msgid "X offset:" msgstr "" -#: ../src/dialog_iemgui.tcl:611 ../src/dialog_iemgui.tcl:612 -msgid "Y offset" +msgid "Y offset:" msgstr "" -#: ../src/dialog_iemgui.tcl:642 ../src/dialog_iemgui.tcl:645 msgid "Colors" msgstr "Màu" -#: ../src/dialog_iemgui.tcl:648 ../src/dialog_iemgui.tcl:651 #, fuzzy msgid "Background" msgstr "Nền:" -#: ../src/dialog_iemgui.tcl:650 ../src/dialog_iemgui.tcl:654 #, fuzzy msgid "Front" msgstr "Phông chữ:" -#: ../src/dialog_iemgui.tcl:662 ../src/dialog_iemgui.tcl:668 msgid "Compose color" msgstr "" -#: ../src/dialog_iemgui.tcl:682 ../src/dialog_iemgui.tcl:688 #, fuzzy msgid "Test label" msgstr "Kiểm tra tất cả" -#: ../src/dialog_midi.tcl:85 -msgid "MIDI Settings" +#, fuzzy +msgid "Send a Pd message" +msgstr "Tin nhẳn" + +msgid "(use arrow keys for history)" msgstr "" -#: ../src/dialog_midi.tcl:220 -msgid "ALSA MIDI Settings" +msgid "MIDI Settings" msgstr "" -#: ../src/dialog_midi.tcl:331 -msgid "Use multiple ALSA devices" +msgid "ALSA MIDI Settings" msgstr "" -#: ../src/dialog_midi.tcl:337 msgid "In Ports:" msgstr "" -#: ../src/dialog_midi.tcl:340 msgid "Out Ports:" msgstr "" -#: ../src/g_editor.c:1663 -msgid "Discard changes to this window??" +msgid "Pd search path for objects, help, fonts, and other files" msgstr "" -#: ../src/g_editor.c:1668 -msgid "really quit?" +msgid "Use standard paths" msgstr "" -#: ../src/g_editor.c:1699 -#, fuzzy -msgid "Close this window??" -msgstr "Đóng thanh/cửa sổ này" - -#: ../src/pd-gui.tcl:185 ../src/pd-gui.tcl:195 ../src/pd-gui.tcl:203 -#: ../src/pd-gui.tcl:206 ../src/pd-gui.tcl:215 ../src/pd-gui.tcl:226 -msgid "Associated Files" +msgid "Verbose" msgstr "" -#: ../src/pd-gui.tcl:186 ../src/pd-gui.tcl:196 ../src/pd-gui.tcl:204 -#: ../src/pd-gui.tcl:207 ../src/pd-gui.tcl:216 ../src/pd-gui.tcl:227 -#, fuzzy -msgid "Pd Files" -msgstr "Tập tin" - -#: ../src/pd-gui.tcl:187 ../src/pd-gui.tcl:205 ../src/pd-gui.tcl:208 -#: ../src/pd-gui.tcl:228 -msgid "Max Patch Files" +msgid "Pd Documents Directory" msgstr "" -#: ../src/pd-gui.tcl:188 ../src/pd-gui.tcl:206 ../src/pd-gui.tcl:209 -#: ../src/pd-gui.tcl:229 -msgid "Max Text Files" +msgid "Browse" msgstr "" -#: ../src/pd-gui.tcl:197 ../src/pd-gui.tcl:217 -msgid "Max Patch Files (.pat)" +msgid "Reset" msgstr "" -#: ../src/pd-gui.tcl:198 ../src/pd-gui.tcl:218 -msgid "Max Text Files (.mxt)" +msgid "Disable" msgstr "" -#: ../src/pd-gui.tcl:270 ../src/pd-gui.tcl:290 -#, tcl-format -msgid "WARNING: Font family '%s' not found, using default (%s)" +msgid "Externals Install Directory" msgstr "" -#: ../src/pd-gui.tcl:278 ../src/pd-gui.tcl:298 -#, tcl-format -msgid "WARNING: Font weight '%s' not found, using default (%s)" +#, fuzzy +msgid "Clear" +msgstr "Xóa danh sách" + +msgid "Choose Pd documents directory:" msgstr "" -#: ../src/pd-gui.tcl:303 ../src/pd-gui.tcl:323 -#, tcl-format -msgid "ERROR: %s failed to find font size (%s) that fits into %sx%s!" +msgid "Install externals to directory:" +msgstr "" + +msgid "Add a new path" +msgstr "" + +msgid "Add new library" +msgstr "" + +msgid "Edit library" +msgstr "" + +msgid "Pd libraries to load on startup" msgstr "" -#: ../src/pd-gui.tcl:478 ../src/pd-gui.tcl:483 ../src/pd-gui.tcl:501 -msgid "ERROR: 'pd' never showed up, 'pd-gui' quitting!" +msgid "Startup flags:" msgstr "" -#: ../src/pd_menucommands.tcl:19 -msgid "Untitled" +msgid "Defeat real-time scheduling" msgstr "" -#: ../src/pd_menucommands.tcl:78 ../src/pd_menucommands.tcl:79 -#: ../src/pd_menucommands.tcl:90 #, fuzzy -msgid "Send Message..." -msgstr "Tin nhẳn" +msgid "Help Browser" +msgstr "Duyệt..." -#: ../src/pd_menucommands.tcl:82 ../src/pd_menucommands.tcl:83 -#: ../src/pd_menucommands.tcl:94 ../src/pd_menus.tcl:87 ../src/pd_menus.tcl:88 -#: ../src/pd_menus.tcl:133 ../src/pd_menus.tcl:134 ../src/pd_menus.tcl:147 -#: ../src/pd_menus.tcl:192 ../src/pd_menus.tcl:193 ../src/pd_menus.tcl:265 -#: ../src/pd_menus.tcl:278 ../src/pd_menus.tcl:292 ../src/pd_menus.tcl:305 -#: ../src/pd_menus.tcl:329 ../src/pd_menus.tcl:342 ../src/pd_menus.tcl:360 -#: ../src/pd_menus.tcl:387 ../src/pd_menus.tcl:414 ../src/pd_menus.tcl:426 -#: ../src/pd_menus.tcl:453 ../startup/object_db.tcl:123 -msgid "Message" -msgstr "Tin nhẳn" +msgid "(Tcl) MISSING CLOSE-BRACE '}': " +msgstr "" + +msgid "(Tcl) INVALID COMMAND NAME: " +msgstr "" + +msgid "(Tcl) UNHANDLED ERROR: " +msgstr "" + +#, tcl-format +msgid "[deken]: installed version [%1$s] > %2$s...skipping!" +msgstr "" + +#, tcl-format +msgid "[deken]: installed version [%1$s] < %2$s...overwriting!" +msgstr "" + +#, tcl-format +msgid "[deken]: installed version [%1$s] == %2$s...skipping!" +msgstr "" + +msgid "[deken]: " +msgstr "" + +#, tcl-format +msgid "Successfully unzipped %1$s into %2$s." +msgstr "" + +msgid "[deken]: Unable to extract package automatically." +msgstr "" + +msgid "Please perform the following steps manually:" +msgstr "" + +#, tcl-format +msgid "1. Unzip %s." +msgstr "" + +#, tcl-format +msgid "2. Copy the contents into %s." +msgstr "" + +#, tcl-format +msgid "[deken] uninstalling '%s'" +msgstr "" + +#, tcl-format +msgid "Uninstalling %1$s from %2$s failed!" +msgstr "" + +#, tcl-format +msgid "[deken] deken-plugin.tcl (Pd externals search) loaded from %s." +msgstr "" + +#, tcl-format +msgid "[deken] Platform detected: %s" +msgstr "" + +#, tcl-format +msgid "[deken] Platform re-detected: %s" +msgstr "" + +msgid "Show all" +msgstr "" -#: ../src/pd_menucommands.tcl:108 ../src/pd_menucommands.tcl:111 -#: ../src/pd_menus.tcl:112 ../src/pd_menus.tcl:113 ../src/pd_menus.tcl:117 -#: ../src/pd_menus.tcl:118 ../src/pd_menus.tcl:158 ../src/pd_menus.tcl:159 -#: ../src/pd_menus.tcl:163 ../src/pd_menus.tcl:164 #, fuzzy -msgid "Font" -msgstr "Phông chữ:" +msgid "Search" +msgstr "Tìm kiếm trong văn bản..." + +msgid "To get a list of all available externals, try an empty search." +msgstr "" + +msgid "Find externals" +msgstr "" + +msgid "Only install externals uploaded by people you trust." +msgstr "" -#: ../src/pd_menucommands.tcl:123 ../src/pd_menucommands.tcl:126 -#: ../src/pd_menus.tcl:138 ../src/pd_menus.tcl:183 ../src/pd_menus.tcl:184 #, fuzzy msgid "Preferences" msgstr "Sở thích..." -#: ../src/pd_menus.tcl:45 -#, fuzzy -msgid "Edit" -msgstr "_Hiệu chỉnh" +msgid "Installation options:" +msgstr "" -#: ../src/pd_menus.tcl:45 -msgid "File" -msgstr "Tập tin" +msgid "Try to remove libraries before (re)installing them?" +msgstr "" -#: ../src/pd_menus.tcl:45 ../src/pdtk_canvas.tcl:48 ../src/pdtk_canvas.tcl:110 -#: ../src/pdtk_canvas.tcl:113 -msgid "Help" -msgstr "Trợ giúp" +msgid "Show README of newly installed libraries (if present)?" +msgstr "" -#: ../src/pd_menus.tcl:45 -#, fuzzy -msgid "Media" -msgstr "Maxêđôni" +msgid "Should newly installed libraries be added to Pd's search path?" +msgstr "" -#: ../src/pd_menus.tcl:45 -msgid "Put" +msgid "Platform settings:" msgstr "" -#: ../src/pd_menus.tcl:45 -#, fuzzy -msgid "Window" -msgstr "_Cửa sổ" +#, tcl-format +msgid "Default platform: %s" +msgstr "" -#: ../src/pd_menus.tcl:81 ../src/pd_menus.tcl:82 ../src/pd_menus.tcl:127 -#: ../src/pd_menus.tcl:128 ../src/pd_menus.tcl:255 ../src/pd_menus.tcl:267 -#: ../src/pd_menus.tcl:285 ../src/pd_menus.tcl:298 ../src/pd_menus.tcl:322 -#: ../src/pd_menus.tcl:335 ../src/pd_menus.tcl:349 ../src/pd_menus.tcl:376 -#: ../src/pd_menus.tcl:380 ../src/pd_menus.tcl:407 ../src/pd_menus.tcl:419 -#: ../src/pd_menus.tcl:446 -msgid "New" -msgstr "Mới" +msgid "User-defined platform:" +msgstr "" -#: ../src/pd_menus.tcl:82 ../src/pd_menus.tcl:83 ../src/pd_menus.tcl:128 -#: ../src/pd_menus.tcl:129 ../src/pd_menus.tcl:256 ../src/pd_menus.tcl:268 -#: ../src/pd_menus.tcl:286 ../src/pd_menus.tcl:299 ../src/pd_menus.tcl:323 -#: ../src/pd_menus.tcl:336 ../src/pd_menus.tcl:350 ../src/pd_menus.tcl:377 -#: ../src/pd_menus.tcl:381 ../src/pd_menus.tcl:408 ../src/pd_menus.tcl:420 -#: ../src/pd_menus.tcl:447 ../src/pdtk_canvas.tcl:46 -#: ../src/pdtk_canvas.tcl:108 ../src/pdtk_canvas.tcl:111 -#: ../src/pdtk_canvas.tcl:128 ../src/pdtk_canvas.tcl:130 -#: ../src/pdtk_canvas.tcl:131 ../src/pdtk_canvas.tcl:133 -msgid "Open" -msgstr "Mở" +msgid "Hide foreign architectures?" +msgstr "" + +#, fuzzy, tcl-format +msgid "Deken %s Preferences" +msgstr "Sở thích..." + +msgid "[deken]: Start searching for externals..." +msgstr "" + +#, tcl-format +msgid "[deken]: online? %s" +msgstr "" + +msgid "Are you online?" +msgstr "" + +msgid "Unable to perform search." +msgstr "" + +msgid "[deken]: No matching externals found." +msgstr "" + +msgid "Try using the full name e.g. 'freeverb'." +msgstr "" + +msgid "No matching externals found." +msgstr "" + +msgid "Please select a (writable) installation directory!" +msgstr "" + +#, tcl-format +msgid "Install %1$s to %2$s?" +msgstr "" + +#, tcl-format +msgid "" +"Commencing downloading of:\n" +"%1$s\n" +"Into %2$s..." +msgstr "" + +msgid "aborting.\n" +msgstr "" + +#, tcl-format +msgid "Unable to add %s to search paths" +msgstr "" + +#, tcl-format +msgid "Add %s to the Pd search paths?" +msgstr "" + +#, tcl-format +msgid "Added %s to search paths" +msgstr "" + +#, tcl-format +msgid "Unable to download from %1$s [%2$s]" +msgstr "" + +#, tcl-format +msgid "Unable to remove stray file %s" +msgstr "" + +#, tcl-format +msgid "Unable to rename downloaded file to %s" +msgstr "" + +#, fuzzy, tcl-format +msgid "searching for '%s'" +msgstr "Tìm kiếm trong văn bản..." + +#, tcl-format +msgid "Uploaded by %1$s @ %2$s" +msgstr "" + +msgid "Install package" +msgstr "" + +msgid "Open webpage" +msgstr "" + +msgid "_" +msgstr "" + +#, tcl-format +msgid "" +"Do you want Pd to create a documents directory for patches and external " +"libraries?\n" +"\n" +"Location: %s\n" +"\n" +"You can change or disable this later in the Path preferences." +msgstr "" + +#, tcl-format +msgid "" +"Pd documents directory cannot be found:\n" +"\n" +"%s\n" +"\n" +"Choose a new location?" +msgstr "" + +#, tcl-format +msgid "Couldn't create Pd documents directory: %s\n" +msgstr "" + +#, tcl-format +msgid "Couldn't create \"externals\" directory in: %s\n" +msgstr "" + +#, tcl-format +msgid "Couldn't create preferences \"%1$s\" in %2$s" +msgstr "" + +#, fuzzy +msgid "About Pd" +msgstr "_Giới thiệu" + +msgid "Save" +msgstr "Lưu" -#: ../src/pd_menus.tcl:84 ../src/pd_menus.tcl:85 ../src/pd_menus.tcl:130 -#: ../src/pd_menus.tcl:131 ../src/pd_menus.tcl:261 ../src/pd_menus.tcl:274 -#: ../src/pd_menus.tcl:289 ../src/pd_menus.tcl:302 ../src/pd_menus.tcl:326 -#: ../src/pd_menus.tcl:339 ../src/pd_menus.tcl:356 ../src/pd_menus.tcl:383 -#: ../src/pd_menus.tcl:384 ../src/pd_menus.tcl:411 ../src/pd_menus.tcl:423 -#: ../src/pd_menus.tcl:450 #, fuzzy msgid "Save As..." msgstr "Lưu là" -#: ../src/pd_menus.tcl:88 ../src/pd_menus.tcl:89 ../src/pd_menus.tcl:134 -#: ../src/pd_menus.tcl:135 ../src/pd_menus.tcl:267 ../src/pd_menus.tcl:280 -#: ../src/pd_menus.tcl:293 ../src/pd_menus.tcl:306 ../src/pd_menus.tcl:330 -#: ../src/pd_menus.tcl:343 ../src/pd_menus.tcl:362 ../src/pd_menus.tcl:388 -#: ../src/pd_menus.tcl:389 ../src/pd_menus.tcl:415 ../src/pd_menus.tcl:427 -#: ../src/pd_menus.tcl:454 #, fuzzy msgid "Print..." msgstr "_Hiệu chỉnh..." -#: ../src/pd_menus.tcl:93 ../src/pd_menus.tcl:94 ../src/pd_menus.tcl:139 -#: ../src/pd_menus.tcl:140 -#, fuzzy -msgid "Undo" -msgstr "U-gan-đa" - -#: ../src/pd_menus.tcl:95 ../src/pd_menus.tcl:96 ../src/pd_menus.tcl:141 -#: ../src/pd_menus.tcl:142 -#, fuzzy -msgid "Redo" -msgstr "Màu đỏ:" - -#: ../src/pd_menus.tcl:98 ../src/pd_menus.tcl:99 ../src/pd_menus.tcl:144 -#: ../src/pd_menus.tcl:145 -msgid "Cut" +msgid "Paste Replace" msgstr "" -#: ../src/pd_menus.tcl:104 ../src/pd_menus.tcl:105 ../src/pd_menus.tcl:150 -#: ../src/pd_menus.tcl:151 #, fuzzy msgid "Duplicate" msgstr "Ngày" -#: ../src/pd_menus.tcl:106 ../src/pd_menus.tcl:107 ../src/pd_menus.tcl:152 -#: ../src/pd_menus.tcl:153 #, fuzzy -msgid "Select All" -msgstr "Chọn màu" +msgid "Zoom In" +msgstr "Đáy" -#: ../src/pd_menus.tcl:110 ../src/pd_menus.tcl:111 ../src/pd_menus.tcl:115 -#: ../src/pd_menus.tcl:116 ../src/pd_menus.tcl:156 ../src/pd_menus.tcl:157 -#: ../src/pd_menus.tcl:161 ../src/pd_menus.tcl:162 #, fuzzy -msgid "Text Editor" -msgstr "Màu chữ" +msgid "Zoom Out" +msgstr "Đáy" -#: ../src/pd_menus.tcl:120 ../src/pd_menus.tcl:121 ../src/pd_menus.tcl:166 -#: ../src/pd_menus.tcl:167 msgid "Tidy Up" msgstr "" -#: ../src/pd_menus.tcl:122 ../src/pd_menus.tcl:123 ../src/pd_menus.tcl:168 -#: ../src/pd_menus.tcl:169 -msgid "Toggle Console" +msgid "(Dis)Connect Selection" msgstr "" -#: ../src/pd_menus.tcl:124 ../src/pd_menus.tcl:125 ../src/pd_menus.tcl:170 -#: ../src/pd_menus.tcl:171 -#, fuzzy -msgid "Clear Console" -msgstr "Xóa danh sách" +msgid "Triggerize" +msgstr "" -#: ../src/pd_menus.tcl:128 ../src/pd_menus.tcl:129 ../src/pd_menus.tcl:174 -#: ../src/pd_menus.tcl:175 #, fuzzy msgid "Edit Mode" msgstr "Chế độ" -#: ../src/pd_menus.tcl:145 ../src/pd_menus.tcl:190 ../src/pd_menus.tcl:191 -msgid "Object" -msgstr "" +#, fuzzy +msgid "Undo" +msgstr "U-gan-đa" -#: ../src/pd_menus.tcl:149 ../src/pd_menus.tcl:194 ../src/pd_menus.tcl:195 #, fuzzy -msgid "Number" -msgstr "$ Số" +msgid "Redo" +msgstr "Màu đỏ:" -#: ../src/pd_menus.tcl:151 ../src/pd_menus.tcl:196 ../src/pd_menus.tcl:197 -msgid "Symbol" +msgid "List of objects..." msgstr "" -#: ../src/pd_menus.tcl:153 ../src/pd_menus.tcl:198 ../src/pd_menus.tcl:199 -#, fuzzy -msgid "Comment" -msgstr "Lệnh" - -#: ../src/pd_menus.tcl:156 ../src/pd_menus.tcl:201 ../src/pd_menus.tcl:202 -#, fuzzy -msgid "Bang" -msgstr "Đuổi" +msgid "New" +msgstr "Mới" -#: ../src/pd_menus.tcl:158 ../src/pd_menus.tcl:203 ../src/pd_menus.tcl:204 -#, fuzzy -msgid "Toggle" -msgstr "Tô-gô" +msgid "Open" +msgstr "Mở" -#: ../src/pd_menus.tcl:160 ../src/pd_menus.tcl:205 ../src/pd_menus.tcl:206 #, fuzzy -msgid "Number2" -msgstr "$ Số" +msgid "Message..." +msgstr "Tin nhẳn" -#: ../src/pd_menus.tcl:162 ../src/pd_menus.tcl:207 ../src/pd_menus.tcl:208 -msgid "Vslider" +msgid "Cut" msgstr "" -#: ../src/pd_menus.tcl:164 ../src/pd_menus.tcl:209 ../src/pd_menus.tcl:210 #, fuzzy -msgid "Hslider" -msgstr "Bị ẩn" +msgid "Select All" +msgstr "Chọn màu" -#: ../src/pd_menus.tcl:166 ../src/pd_menus.tcl:211 ../src/pd_menus.tcl:212 #, fuzzy -msgid "Vradio" -msgstr "Phiên bản" +msgid "Clear Console" +msgstr "Xóa danh sách" -#: ../src/pd_menus.tcl:168 ../src/pd_menus.tcl:213 ../src/pd_menus.tcl:214 -msgid "Hradio" +msgid "Object" msgstr "" -#: ../src/pd_menus.tcl:170 ../src/pd_menus.tcl:215 ../src/pd_menus.tcl:216 -msgid "VU Meter" +msgid "Message" +msgstr "Tin nhẳn" + +#, fuzzy +msgid "Number" +msgstr "$ Số" + +msgid "Symbol" msgstr "" -#: ../src/pd_menus.tcl:172 ../src/pd_menus.tcl:217 ../src/pd_menus.tcl:218 #, fuzzy -msgid "Canvas" -msgstr "Ca-na-đa" +msgid "Comment" +msgstr "Lệnh" -#: ../src/pd_menus.tcl:175 ../src/pd_menus.tcl:220 ../src/pd_menus.tcl:221 msgid "Graph" msgstr "Đồ thị" -#: ../src/pd_menus.tcl:176 ../src/pd_menus.tcl:221 ../src/pd_menus.tcl:222 -#, fuzzy -msgid "Array" -msgstr "Ăn-đoa-râ" - -#: ../src/pd_menus.tcl:181 ../src/pd_menus.tcl:226 ../src/pd_menus.tcl:227 #, fuzzy msgid "Find..." msgstr "Gởi tâp tin..." -#: ../src/pd_menus.tcl:183 ../src/pd_menus.tcl:228 ../src/pd_menus.tcl:229 msgid "Find Again" msgstr "" -#: ../src/pd_menus.tcl:185 ../src/pd_menus.tcl:230 ../src/pd_menus.tcl:231 msgid "Find Last Error" msgstr "" -#: ../src/pd_menus.tcl:191 ../src/pd_menus.tcl:236 ../src/pd_menus.tcl:237 msgid "DSP On" msgstr "" -#: ../src/pd_menus.tcl:193 ../src/pd_menus.tcl:238 ../src/pd_menus.tcl:239 #, fuzzy msgid "DSP Off" msgstr "Tất" -#: ../src/pd_menus.tcl:196 ../src/pd_menus.tcl:242 ../src/pd_menus.tcl:269 msgid "Test Audio and MIDI..." msgstr "" -#: ../src/pd_menus.tcl:198 ../src/pd_menus.tcl:244 ../src/pd_menus.tcl:271 #, fuzzy msgid "Load Meter" msgstr "Bộ đo trễ:" -#: ../src/pd_menus.tcl:205 ../src/pd_menus.tcl:251 ../src/pd_menus.tcl:278 +msgid "Audio Settings..." +msgstr "" + +msgid "MIDI Settings..." +msgstr "" + msgid "Minimize" msgstr "" -#: ../src/pd_menus.tcl:207 ../src/pd_menus.tcl:253 ../src/pd_menus.tcl:280 #, fuzzy msgid "Zoom" msgstr "Đáy" -#: ../src/pd_menus.tcl:210 ../src/pd_menus.tcl:256 ../src/pd_menus.tcl:283 +msgid "Bring All to Front" +msgstr "" + #, fuzzy -msgid "Parent Window" +msgid "Next Window" msgstr "Cửa sô Gởi" -#: ../src/pd_menus.tcl:216 ../src/pd_menus.tcl:262 ../src/pd_menus.tcl:289 -msgid "Bring All to Front" -msgstr "" +#, fuzzy +msgid "Previous Window" +msgstr "Cửa sô Gởi" -#: ../src/pd_menus.tcl:224 ../src/pd_menus.tcl:241 ../src/pd_menus.tcl:253 -#: ../src/pd_menus.tcl:270 ../src/pd_menus.tcl:297 ../src/pd_menus.tcl:335 -#: ../src/pd_menus.tcl:362 #, fuzzy -msgid "About Pd" -msgstr "_Giới thiệu" +msgid "Parent Window" +msgstr "Cửa sô Gởi" -#: ../src/pd_menus.tcl:227 ../src/pd_menus.tcl:273 ../src/pd_menus.tcl:300 msgid "HTML Manual..." msgstr "" -#: ../src/pd_menus.tcl:229 ../src/pd_menus.tcl:275 ../src/pd_menus.tcl:302 #, fuzzy msgid "Browser..." msgstr "Duyệt..." -#: ../src/pd_menus.tcl:248 ../src/pd_menus.tcl:260 ../src/pd_menus.tcl:342 -#: ../src/pd_menus.tcl:369 -msgid "Preferences..." +msgid "puredata.info" +msgstr "" + +msgid "Report a bug" +msgstr "" + +#, fuzzy +msgid "Clear Menu" +msgstr "Xóa danh sách" + +msgid "" +"Delete all preferences?\n" +"(takes effect when Pd is restarted)" +msgstr "" + +msgid "Path..." +msgstr "" + +msgid "Startup..." +msgstr "" + +msgid "Audio..." +msgstr "" + +msgid "MIDI..." +msgstr "" + +#, fuzzy +msgid "Zoom New Windows" +msgstr "Cửa sô Gởi" + +#, fuzzy +msgid "Save All Preferences" msgstr "Sở thích..." -#: ../src/pd_menus.tcl:257 ../src/pd_menus.tcl:270 ../src/pd_menus.tcl:352 -#: ../src/pd_menus.tcl:379 -msgid "Open Recent" +#, fuzzy +msgid "Save to..." +msgstr "Lưu là" + +msgid "Load from..." msgstr "" -#: ../src/pd_menus.tcl:263 -msgid "Audio Settings..." +msgid "Forget All..." msgstr "" -#: ../src/pd_menus.tcl:265 -msgid "MIDI Settings..." +msgid "Open Recent" msgstr "" -#: ../src/pd_menus.tcl:296 ../src/pd_menus.tcl:309 ../src/pd_menus.tcl:333 -#: ../src/pd_menus.tcl:346 ../src/pd_menus.tcl:393 ../src/pd_menus.tcl:420 -#: ../src/pd_menus.tcl:432 ../src/pd_menus.tcl:459 msgid "Quit" msgstr "Thoát" -#: ../src/pd_menus.tcl:304 ../src/pd_menus.tcl:331 -#, fuzzy -msgid "Clear Menu" -msgstr "Xóa danh sách" - -#: ../src/pdtk_canvas.tcl:44 ../src/pdtk_canvas.tcl:106 -#: ../src/pdtk_canvas.tcl:109 ../src/pdtk_canvas.tcl:123 -#: ../src/pdtk_canvas.tcl:125 ../src/pdtk_canvas.tcl:126 -#: ../src/pdtk_canvas.tcl:128 msgid "Properties" msgstr "" -#: ../src/pdwindow.tcl:43 +msgid "Audio on" +msgstr "" + +msgid "Audio off" +msgstr "" + +msgid "(Tcl) MISSING CLOSE-BRACKET ']': " +msgstr "" + +msgid "Tcl:" +msgstr "" + +msgid "Pd" +msgstr "" + #, fuzzy msgid "DSP" msgstr "Tất" -#: ../startup/object_db.tcl:113 -msgid "Signal" +msgid "Audio I/O error" msgstr "" -#: ../startup/object_db.tcl:114 -msgid "Generators" +msgid "Log:" msgstr "" -#: ../startup/object_db.tcl:115 -#, fuzzy -msgid "Filters" -msgstr "Tập tin" +msgid "fatal" +msgstr "" -#: ../startup/object_db.tcl:116 ../startup/object_db.tcl:124 -msgid "Math" +msgid "error" msgstr "" -#: ../startup/object_db.tcl:117 ../startup/object_db.tcl:125 -msgid "I/O" +msgid "normal" msgstr "" -#: ../startup/object_db.tcl:118 ../startup/object_db.tcl:126 -msgid "Sampling" +msgid "debug" msgstr "" -#: ../startup/object_db.tcl:119 ../startup/object_db.tcl:128 -msgid "Routing" +msgid "all" msgstr "" -#: ../startup/object_db.tcl:120 ../startup/object_db.tcl:129 -msgid "Others" +msgid "New..." msgstr "" -#: ../startup/object_db.tcl:127 -msgid "GUI" +#, fuzzy +msgid "Edit..." +msgstr "_Hiệu chỉnh" + +#, fuzzy +msgid "Delete" +msgstr "Xóa bỏ" + +#, tcl-format +msgid "Ignoring '%s': doesn't exist" msgstr "" + +#, tcl-format +msgid "Ignoring '%s': doesn't look like a Pd-file" +msgstr "" + +#, fuzzy +#~ msgid "for:" +#~ msgstr "Cổng:" + +#~ msgid "Preferences..." +#~ msgstr "Sở thích..." + +#, fuzzy +#~ msgid "Close this window??" +#~ msgstr "Đóng thanh/cửa sổ này" + +#, fuzzy +#~ msgid "Pd Files" +#~ msgstr "Tập tin" + +#, fuzzy +#~ msgid "Filters" +#~ msgstr "Tập tin" + +#, fuzzy +#~ msgid "Text Editor" +#~ msgstr "Màu chữ" diff --git a/portaudio/Makefile.am b/portaudio/Makefile.am new file mode 100644 index 0000000000..d565fa5dd3 --- /dev/null +++ b/portaudio/Makefile.am @@ -0,0 +1,109 @@ +# this is built as a static convenience library + +######################################### +##### Defaults & Paths ##### + +AUTOMAKE_OPTIONS = foreign +AM_CFLAGS = -DNEWBUFFER +AM_CPPFLAGS += \ + -I$(top_srcdir)/portaudio/portaudio/include \ + -I$(top_srcdir)/portaudio/portaudio/src/common + +######################################### +##### Files, Binaries, & Libs ##### + +noinst_LIBRARIES = libportaudio.a + +libportaudio_a_SOURCES = \ + portaudio/src/common/pa_allocation.c \ + portaudio/src/common/pa_converters.c \ + portaudio/src/common/pa_cpuload.c \ + portaudio/src/common/pa_debugprint.c \ + portaudio/src/common/pa_dither.c \ + portaudio/src/common/pa_front.c \ + portaudio/src/common/pa_process.c \ + portaudio/src/common/pa_ringbuffer.c \ + portaudio/src/common/pa_stream.c \ + portaudio/src/common/pa_trace.c + +if LINUX +AM_CPPFLAGS += -I$(top_srcdir)/portaudio/portaudio/src/os/unix +libportaudio_a_SOURCES += \ + portaudio/src/os/unix/pa_unix_hostapis.c \ + portaudio/src/os/unix/pa_unix_util.c \ + portaudio/src/hostapi/alsa/pa_linux_alsa.c +endif + +if MACOSX +AM_CFLAGS += -DPA_USE_COREAUDIO +AM_CPPFLAGS += -I$(top_srcdir)/portaudio/portaudio/src/os/unix +libportaudio_a_SOURCES += \ + portaudio/src/os/unix/pa_unix_hostapis.c \ + portaudio/src/os/unix/pa_unix_util.c \ + portaudio/src/hostapi/coreaudio/pa_mac_core.c \ + portaudio/src/hostapi/coreaudio/pa_mac_core_blocking.c \ + portaudio/src/hostapi/coreaudio/pa_mac_core_utilities.c +# required for PortAudio to build on newer versions of macOS as it +# disables deprecation warnings stopping the build +AM_CFLAGS += -Wno-error -Wno-deprecated +endif + +if WINDOWS +AM_CFLAGS += -DPA_USE_WMME +AM_CPPFLAGS += -I$(top_srcdir)/portaudio/portaudio/src/os/win +libportaudio_a_SOURCES += \ + portaudio/src/os/win/pa_win_coinitialize.c \ + portaudio/src/os/win/pa_win_hostapis.c \ + portaudio/src/os/win/pa_win_util.c \ + portaudio/src/os/win/pa_win_waveformat.c \ + portaudio/src/hostapi/wmme/pa_win_wmme.c +if ASIO +AM_CFLAGS += -DPA_USE_ASIO +if MINGW +# hack for /asio/ASIOSDK/common/combase.h +AM_CPPFLAGS += -DWINVER=0x0502 -D_WIN32_WINNT=0x0502 +endif +AM_CPPFLAGS += \ + -I$(top_srcdir)/asio/ASIOSDK/common -I$(top_srcdir)/asio/ASIOSDK/host \ + -I$(top_srcdir)/asio/ASIOSDK/host/pc +libportaudio_a_SOURCES += \ + portaudio/src/hostapi/asio/iasiothiscallresolver.cpp \ + portaudio/src/hostapi/asio/pa_asio.cpp +endif +endif + +# empty var for headers list footer +empty= + +# include the headers in the dist so you can build +# find portaudio -type file -name *.h | sort | awk '{print " ", $1, "\\"}'; echo ' $(empty)' +nobase_noinst_HEADERS = \ + portaudio/include/pa_asio.h \ + portaudio/include/pa_jack.h \ + portaudio/include/pa_linux_alsa.h \ + portaudio/include/pa_mac_core.h \ + portaudio/include/pa_win_waveformat.h \ + portaudio/include/pa_win_wmme.h \ + portaudio/include/portaudio.h \ + portaudio/src/common/pa_allocation.h \ + portaudio/src/common/pa_converters.h \ + portaudio/src/common/pa_cpuload.h \ + portaudio/src/common/pa_debugprint.h \ + portaudio/src/common/pa_dither.h \ + portaudio/src/common/pa_endianness.h \ + portaudio/src/common/pa_gitrevision.h \ + portaudio/src/common/pa_hostapi.h \ + portaudio/src/common/pa_memorybarrier.h \ + portaudio/src/common/pa_process.h \ + portaudio/src/common/pa_ringbuffer.h \ + portaudio/src/common/pa_stream.h \ + portaudio/src/common/pa_trace.h \ + portaudio/src/common/pa_types.h \ + portaudio/src/common/pa_util.h \ + portaudio/src/hostapi/asio/iasiothiscallresolver.h \ + portaudio/src/hostapi/coreaudio/pa_mac_core_blocking.h \ + portaudio/src/hostapi/coreaudio/pa_mac_core_internal.h \ + portaudio/src/hostapi/coreaudio/pa_mac_core_utilities.h \ + portaudio/src/os/unix/pa_unix_util.h \ + portaudio/src/os/win/pa_win_coinitialize.h \ + $(empty) diff --git a/portaudio/Makefile.dist b/portaudio/Makefile.dist deleted file mode 100644 index 7a6922d531..0000000000 --- a/portaudio/Makefile.dist +++ /dev/null @@ -1,118 +0,0 @@ -## distdir target by IOhannes m zmölnig -## portaudio's original build-system lacks a "distdir" target -## which prevents us from easily creating a distribution tarball -## for Pd! -## so we provide a simplified target here, to satisfy autotools needs - -# list of all files to be installed -## generated with `make distclean; find . -type f` -DISTFILES=\ - LICENSE.txt \ - include/pa_asio.h \ - include/pa_jack.h \ - include/pa_linux_alsa.h \ - include/pa_mac_core.h \ - include/pa_win_waveformat.h \ - include/pa_win_wmme.h \ - include/portaudio.h \ - src/common/pa_allocation.c \ - src/common/pa_allocation.h \ - src/common/pa_converters.c \ - src/common/pa_converters.h \ - src/common/pa_cpuload.c \ - src/common/pa_cpuload.h \ - src/common/pa_debugprint.c \ - src/common/pa_debugprint.h \ - src/common/pa_dither.c \ - src/common/pa_dither.h \ - src/common/pa_endianness.h \ - src/common/pa_front.c \ - src/common/pa_hostapi.h \ - src/common/pa_memorybarrier.h \ - src/common/pa_process.c \ - src/common/pa_process.h \ - src/common/pa_ringbuffer.c \ - src/common/pa_ringbuffer.h \ - src/common/pa_stream.c \ - src/common/pa_stream.h \ - src/common/pa_trace.c \ - src/common/pa_trace.h \ - src/common/pa_types.h \ - src/common/pa_util.h \ - src/hostapi/alsa/pa_linux_alsa.c \ - src/hostapi/asio/iasiothiscallresolver.cpp \ - src/hostapi/asio/iasiothiscallresolver.h \ - src/hostapi/asio/pa_asio.cpp \ - src/hostapi/coreaudio/notes.txt \ - src/hostapi/coreaudio/pa_mac_core.c \ - src/hostapi/coreaudio/pa_mac_core_blocking.c \ - src/hostapi/coreaudio/pa_mac_core_blocking.h \ - src/hostapi/coreaudio/pa_mac_core_internal.h \ - src/hostapi/coreaudio/pa_mac_core_old.c \ - src/hostapi/coreaudio/pa_mac_core_utilities.c \ - src/hostapi/coreaudio/pa_mac_core_utilities.h \ - src/hostapi/jack/pa_jack.c \ - src/hostapi/oss/low_latency_tip.txt \ - src/hostapi/oss/pa_unix_oss.c \ - src/hostapi/oss/recplay.c \ - src/hostapi/wmme/pa_win_wmme.c \ - src/os/mac_osx/pa_mac_hostapis.c \ - src/os/unix/pa_unix_hostapis.c \ - src/os/unix/pa_unix_util.c \ - src/os/unix/pa_unix_util.h \ - src/os/win/pa_win_coinitialize.c \ - src/os/win/pa_win_coinitialize.h \ - src/os/win/pa_win_hostapis.c \ - src/os/win/pa_win_util.c \ - src/os/win/pa_win_waveformat.c \ - src/os/win/pa_win_wdmks_utils.c \ - src/os/win/pa_win_wdmks_utils.h \ - src/os/win/pa_x86_plain_converters.c \ - src/os/win/pa_x86_plain_converters.h \ - aclocal.m4 \ - configure.in \ - configure \ - Makefile.in \ - Makefile.dist \ - Makefile \ - config.guess \ - config.sub \ - config.status \ - install-sh \ - ltmain.sh - -## this is the actual target, stolen from an automake generated Makefile -distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ - dist_files=`for file in $$list; do echo $$file; done | \ - sed -e "s|^$$srcdirstrip/||;t" \ - -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ - case $$dist_files in \ - */*) $(MKDIR_P) `echo "$$dist_files" | \ - sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ - sort -u` ;; \ - esac; \ - for file in $$dist_files; do \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test -d "$(distdir)/$$file"; then \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ - else \ - test -f "$(distdir)/$$file" \ - || cp -p $$d/$$file "$(distdir)/$$file" \ - || exit 1; \ - fi; \ - done - -## some dummy targets, -## that are needed by autotools but are not provided by portaudio -dvi check installcheck distuninstallcheck: diff --git a/portaudio/Makefile.in b/portaudio/Makefile.in deleted file mode 100644 index 41009928c2..0000000000 --- a/portaudio/Makefile.in +++ /dev/null @@ -1,214 +0,0 @@ -# -# PortAudio V19 Makefile.in -# -# Dominic Mazzoni -# Modifications by Mikael Magnusson -# Modifications by Stelios Bounanos -# - -top_srcdir = @top_srcdir@ -srcdir = @srcdir@ -VPATH = @srcdir@ -top_builddir = . -PREFIX = @prefix@ -prefix = $(PREFIX) -exec_prefix = @exec_prefix@ -bindir = @bindir@ -libdir = @libdir@ -includedir = @includedir@ -CC = @CC@ -CXX = @CXX@ -CFLAGS = @CFLAGS@ @DEFS@ -LIBS = @LIBS@ -AR = @AR@ -RANLIB = @RANLIB@ -SHELL = @SHELL@ -LIBTOOL = @LIBTOOL@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -SHARED_FLAGS = @SHARED_FLAGS@ -LDFLAGS = @LDFLAGS@ -DLL_LIBS = @DLL_LIBS@ -CXXFLAGS = @CXXFLAGS@ -NASM = @NASM@ -NASMOPT = @NASMOPT@ -LN_S = @LN_S@ -LT_CURRENT=@LT_CURRENT@ -LT_REVISION=@LT_REVISION@ -LT_AGE=@LT_AGE@ - -OTHER_OBJS = @OTHER_OBJS@ -INCLUDES = @INCLUDES@ - -PALIB = libportaudio.la -PAINC = include/portaudio.h - -PA_LDFLAGS = $(LDFLAGS) $(SHARED_FLAGS) -rpath $(libdir) -no-undefined \ - -export-symbols-regex "(Pa|PaMacCore|PaJack|PaAlsa|PaAsio|PaOSS)_.*" \ - -version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE) - -COMMON_OBJS = \ - src/common/pa_allocation.o \ - src/common/pa_converters.o \ - src/common/pa_cpuload.o \ - src/common/pa_dither.o \ - src/common/pa_debugprint.o \ - src/common/pa_front.o \ - src/common/pa_process.o \ - src/common/pa_stream.o \ - src/common/pa_trace.o - -LOOPBACK_OBJS = \ - qa/loopback/src/audio_analyzer.o \ - qa/loopback/src/biquad_filter.o \ - qa/loopback/src/paqa_tools.o \ - qa/loopback/src/test_audio_analyzer.o \ - qa/loopback/src/write_wav.o \ - qa/loopback/src/paqa.o - -EXAMPLES = \ - -SELFTESTS = \ - -TESTS = \ - -# Most of these don't compile yet. Put them in TESTS, above, if -# you want to try to compile them... -ALL_TESTS = \ - $(TESTS) \ - bin/patest_sync \ - bin/debug_convert \ - bin/debug_dither_calc \ - bin/debug_dual \ - bin/debug_multi_in \ - bin/debug_multi_out \ - bin/debug_record \ - bin/debug_record_reuse \ - bin/debug_sine_amp \ - bin/debug_sine \ - bin/debug_sine_formats \ - bin/debug_srate \ - bin/debug_test1 - -OBJS := $(COMMON_OBJS) $(OTHER_OBJS) - -LTOBJS := $(OBJS:.o=.lo) - -SRC_DIRS = \ - src/common \ - src/hostapi/alsa \ - src/hostapi/asihpi \ - src/hostapi/asio \ - src/hostapi/coreaudio \ - src/hostapi/dsound \ - src/hostapi/jack \ - src/hostapi/oss \ - src/hostapi/wasapi \ - src/hostapi/wdmks \ - src/hostapi/wmme \ - src/os/unix \ - src/os/win - -SUBDIRS = -@ENABLE_CXX_TRUE@SUBDIRS += bindings/cpp - -all: lib/$(PALIB) all-recursive tests examples selftests - -tests: bin-stamp $(TESTS) - -examples: bin-stamp $(EXAMPLES) - -selftests: bin-stamp $(SELFTESTS) - -loopback: bin-stamp bin/paloopback - -# With ASIO enabled we must link libportaudio and all test programs with CXX -lib/$(PALIB): lib-stamp $(LTOBJS) $(MAKEFILE) $(PAINC) - @WITH_ASIO_FALSE@ $(LIBTOOL) --mode=link $(CC) $(PA_LDFLAGS) -o lib/$(PALIB) $(LTOBJS) $(DLL_LIBS) - @WITH_ASIO_TRUE@ $(LIBTOOL) --mode=link --tag=CXX $(CXX) $(PA_LDFLAGS) -o lib/$(PALIB) $(LTOBJS) $(DLL_LIBS) - -$(ALL_TESTS): bin/%: lib/$(PALIB) $(MAKEFILE) $(PAINC) test/%.c - @WITH_ASIO_FALSE@ $(LIBTOOL) --mode=link $(CC) -o $@ $(CFLAGS) $(top_srcdir)/test/$*.c lib/$(PALIB) $(LIBS) - @WITH_ASIO_TRUE@ $(LIBTOOL) --mode=link --tag=CXX $(CXX) -o $@ $(CXXFLAGS) $(top_srcdir)/test/$*.c lib/$(PALIB) $(LIBS) - -$(EXAMPLES): bin/%: lib/$(PALIB) $(MAKEFILE) $(PAINC) examples/%.c - @WITH_ASIO_FALSE@ $(LIBTOOL) --mode=link $(CC) -o $@ $(CFLAGS) $(top_srcdir)/examples/$*.c lib/$(PALIB) $(LIBS) - @WITH_ASIO_TRUE@ $(LIBTOOL) --mode=link --tag=CXX $(CXX) -o $@ $(CXXFLAGS) $(top_srcdir)/examples/$*.c lib/$(PALIB) $(LIBS) - -$(SELFTESTS): bin/%: lib/$(PALIB) $(MAKEFILE) $(PAINC) qa/%.c - @WITH_ASIO_FALSE@ $(LIBTOOL) --mode=link $(CC) -o $@ $(CFLAGS) $(top_srcdir)/qa/$*.c lib/$(PALIB) $(LIBS) - @WITH_ASIO_TRUE@ $(LIBTOOL) --mode=link --tag=CXX $(CXX) -o $@ $(CXXFLAGS) $(top_srcdir)/qa/$*.c lib/$(PALIB) $(LIBS) - -bin/paloopback: lib/$(PALIB) $(MAKEFILE) $(PAINC) $(LOOPBACK_OBJS) - @WITH_ASIO_FALSE@ $(LIBTOOL) --mode=link $(CC) -o $@ $(CFLAGS) $(LOOPBACK_OBJS) lib/$(PALIB) $(LIBS) - @WITH_ASIO_TRUE@ $(LIBTOOL) --mode=link --tag=CXX $(CXX) -o $@ $(CXXFLAGS) $(LOOPBACK_OBJS) lib/$(PALIB) $(LIBS) - -install: lib/$(PALIB) portaudio-2.0.pc - $(INSTALL) -d $(DESTDIR)$(libdir) - $(LIBTOOL) --mode=install $(INSTALL) lib/$(PALIB) $(DESTDIR)$(libdir) - $(INSTALL) -d $(DESTDIR)$(includedir) - for include in $(INCLUDES); do \ - $(INSTALL_DATA) -m 644 $(top_srcdir)/include/$$include $(DESTDIR)$(includedir)/$$include; \ - done - $(INSTALL) -d $(DESTDIR)$(libdir)/pkgconfig - $(INSTALL) -m 644 portaudio-2.0.pc $(DESTDIR)$(libdir)/pkgconfig/portaudio-2.0.pc - @echo "" - @echo "------------------------------------------------------------" - @echo "PortAudio was successfully installed." - @echo "" - @echo "On some systems (e.g. Linux) you should run 'ldconfig' now" - @echo "to make the shared object available. You may also need to" - @echo "modify your LD_LIBRARY_PATH environment variable to include" - @echo "the directory $(libdir)" - @echo "------------------------------------------------------------" - @echo "" - $(MAKE) install-recursive - -uninstall: - $(LIBTOOL) --mode=uninstall rm -f $(DESTDIR)$(libdir)/$(PALIB) - $(LIBTOOL) --mode=uninstall rm -f $(DESTDIR)$(includedir)/portaudio.h - $(MAKE) uninstall-recursive - -clean: - $(LIBTOOL) --mode=clean rm -f $(LTOBJS) $(LOOPBACK_OBJS) $(ALL_TESTS) lib/$(PALIB) - $(RM) bin-stamp lib-stamp - -$(RM) -r bin lib - -distclean: clean - $(RM) config.log config.status Makefile libtool portaudio-2.0.pc - -%.o: %.c $(MAKEFILE) $(PAINC) - $(CC) -c $(CFLAGS) $< -o $@ - -%.lo: %.c $(MAKEFILE) $(PAINC) - $(LIBTOOL) --mode=compile $(CC) -c $(CFLAGS) $< -o $@ - -%.lo: %.cpp $(MAKEFILE) $(PAINC) - $(LIBTOOL) --mode=compile --tag=CXX $(CXX) -c $(CXXFLAGS) $< -o $@ - -%.o: %.cpp $(MAKEFILE) $(PAINC) - $(CXX) -c $(CXXFLAGS) $< -o $@ - -%.o: %.asm - $(NASM) $(NASMOPT) -o $@ $< - -bin-stamp: - -mkdir bin - touch $@ - -lib-stamp: - -mkdir lib - -mkdir -p $(SRC_DIRS) - touch $@ - -Makefile: Makefile.in config.status - $(SHELL) config.status - -all-recursive: - if test -n "$(SUBDIRS)" ; then for dir in "$(SUBDIRS)"; do $(MAKE) -C $$dir all; done ; fi - -install-recursive: - if test -n "$(SUBDIRS)" ; then for dir in "$(SUBDIRS)"; do $(MAKE) -C $$dir install; done ; fi - -uninstall-recursive: - if test -n "$(SUBDIRS)" ; then for dir in "$(SUBDIRS)"; do $(MAKE) -C $$dir uninstall; done ; fi diff --git a/portaudio/README.txt b/portaudio/README.txt new file mode 100644 index 0000000000..89676b3033 --- /dev/null +++ b/portaudio/README.txt @@ -0,0 +1,29 @@ +The cross-platform PortAudio library is included with the PureData distribution +so that Pd can be built without any main external dependencies. + +It is built as a libtool convenience library when using autotools to build Pd: + + ./configure + make + +If you want to update to a newer version of PortAudio, simply use the +"update.sh" script: + + cd portaudio + + # update to latest PortAudio git master + ./update.sh + + # update to a specific tag/branch/commit + ./update.sh c0d239712d + +You *may* need to add or remove source file or header lines in the Makefile.am, +if the source or include files have changed in PortAudio. To check the current +git revision, see "portaudio/src/common/pa_gitrevision.h" + +As a second option, you can build Pd using a system-installed PortAudio via: + + ./configure --without-local-portaudio + make + +For more info on PortAudio, see http://portaudio.com diff --git a/portaudio/config.guess b/portaudio/config.guess deleted file mode 100755 index 40eaed4821..0000000000 --- a/portaudio/config.guess +++ /dev/null @@ -1,1517 +0,0 @@ -#! /bin/sh -# Attempt to guess a canonical system name. -# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, -# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, -# 2011 Free Software Foundation, Inc. - -timestamp='2011-05-11' - -# This file 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 -# (at your option) 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. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA -# 02110-1301, USA. -# -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - - -# Originally written by Per Bothner. Please send patches (context -# diff format) to and include a ChangeLog -# entry. -# -# This script attempts to guess a canonical system name similar to -# config.sub. If it succeeds, it prints the system name on stdout, and -# exits with 0. Otherwise, it exits with 1. -# -# You can get the latest version of this script from: -# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD - -me=`echo "$0" | sed -e 's,.*/,,'` - -usage="\ -Usage: $0 [OPTION] - -Output the configuration name of the system \`$me' is run on. - -Operation modes: - -h, --help print this help, then exit - -t, --time-stamp print date of last modification, then exit - -v, --version print version number, then exit - -Report bugs and patches to ." - -version="\ -GNU config.guess ($timestamp) - -Originally written by Per Bothner. -Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, -2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free -Software Foundation, Inc. - -This is free software; see the source for copying conditions. There is NO -warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." - -help=" -Try \`$me --help' for more information." - -# Parse command line -while test $# -gt 0 ; do - case $1 in - --time-stamp | --time* | -t ) - echo "$timestamp" ; exit ;; - --version | -v ) - echo "$version" ; exit ;; - --help | --h* | -h ) - echo "$usage"; exit ;; - -- ) # Stop option processing - shift; break ;; - - ) # Use stdin as input. - break ;; - -* ) - echo "$me: invalid option $1$help" >&2 - exit 1 ;; - * ) - break ;; - esac -done - -if test $# != 0; then - echo "$me: too many arguments$help" >&2 - exit 1 -fi - -trap 'exit 1' 1 2 15 - -# CC_FOR_BUILD -- compiler used by this script. Note that the use of a -# compiler to aid in system detection is discouraged as it requires -# temporary files to be created and, as you can see below, it is a -# headache to deal with in a portable fashion. - -# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still -# use `HOST_CC' if defined, but it is deprecated. - -# Portable tmp directory creation inspired by the Autoconf team. - -set_cc_for_build=' -trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; -trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; -: ${TMPDIR=/tmp} ; - { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || - { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || - { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || - { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; -dummy=$tmp/dummy ; -tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; -case $CC_FOR_BUILD,$HOST_CC,$CC in - ,,) echo "int x;" > $dummy.c ; - for c in cc gcc c89 c99 ; do - if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then - CC_FOR_BUILD="$c"; break ; - fi ; - done ; - if test x"$CC_FOR_BUILD" = x ; then - CC_FOR_BUILD=no_compiler_found ; - fi - ;; - ,,*) CC_FOR_BUILD=$CC ;; - ,*,*) CC_FOR_BUILD=$HOST_CC ;; -esac ; set_cc_for_build= ;' - -# This is needed to find uname on a Pyramid OSx when run in the BSD universe. -# (ghazi@noc.rutgers.edu 1994-08-24) -if (test -f /.attbin/uname) >/dev/null 2>&1 ; then - PATH=$PATH:/.attbin ; export PATH -fi - -UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown -UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown -UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown -UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown - -# Note: order is significant - the case branches are not exclusive. - -case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in - *:NetBSD:*:*) - # NetBSD (nbsd) targets should (where applicable) match one or - # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, - # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently - # switched to ELF, *-*-netbsd* would select the old - # object file format. This provides both forward - # compatibility and a consistent mechanism for selecting the - # object file format. - # - # Note: NetBSD doesn't particularly care about the vendor - # portion of the name. We always set it to "unknown". - sysctl="sysctl -n hw.machine_arch" - UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ - /usr/sbin/$sysctl 2>/dev/null || echo unknown)` - case "${UNAME_MACHINE_ARCH}" in - armeb) machine=armeb-unknown ;; - arm*) machine=arm-unknown ;; - sh3el) machine=shl-unknown ;; - sh3eb) machine=sh-unknown ;; - sh5el) machine=sh5le-unknown ;; - *) machine=${UNAME_MACHINE_ARCH}-unknown ;; - esac - # The Operating System including object format, if it has switched - # to ELF recently, or will in the future. - case "${UNAME_MACHINE_ARCH}" in - arm*|i386|m68k|ns32k|sh3*|sparc|vax) - eval $set_cc_for_build - if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ - | grep -q __ELF__ - then - # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). - # Return netbsd for either. FIX? - os=netbsd - else - os=netbsdelf - fi - ;; - *) - os=netbsd - ;; - esac - # The OS release - # Debian GNU/NetBSD machines have a different userland, and - # thus, need a distinct triplet. However, they do not need - # kernel version information, so it can be replaced with a - # suitable tag, in the style of linux-gnu. - case "${UNAME_VERSION}" in - Debian*) - release='-gnu' - ;; - *) - release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` - ;; - esac - # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: - # contains redundant information, the shorter form: - # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. - echo "${machine}-${os}${release}" - exit ;; - *:OpenBSD:*:*) - UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` - echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} - exit ;; - *:ekkoBSD:*:*) - echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} - exit ;; - *:SolidBSD:*:*) - echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} - exit ;; - macppc:MirBSD:*:*) - echo powerpc-unknown-mirbsd${UNAME_RELEASE} - exit ;; - *:MirBSD:*:*) - echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} - exit ;; - alpha:OSF1:*:*) - case $UNAME_RELEASE in - *4.0) - UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` - ;; - *5.*) - UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` - ;; - esac - # According to Compaq, /usr/sbin/psrinfo has been available on - # OSF/1 and Tru64 systems produced since 1995. I hope that - # covers most systems running today. This code pipes the CPU - # types through head -n 1, so we only detect the type of CPU 0. - ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` - case "$ALPHA_CPU_TYPE" in - "EV4 (21064)") - UNAME_MACHINE="alpha" ;; - "EV4.5 (21064)") - UNAME_MACHINE="alpha" ;; - "LCA4 (21066/21068)") - UNAME_MACHINE="alpha" ;; - "EV5 (21164)") - UNAME_MACHINE="alphaev5" ;; - "EV5.6 (21164A)") - UNAME_MACHINE="alphaev56" ;; - "EV5.6 (21164PC)") - UNAME_MACHINE="alphapca56" ;; - "EV5.7 (21164PC)") - UNAME_MACHINE="alphapca57" ;; - "EV6 (21264)") - UNAME_MACHINE="alphaev6" ;; - "EV6.7 (21264A)") - UNAME_MACHINE="alphaev67" ;; - "EV6.8CB (21264C)") - UNAME_MACHINE="alphaev68" ;; - "EV6.8AL (21264B)") - UNAME_MACHINE="alphaev68" ;; - "EV6.8CX (21264D)") - UNAME_MACHINE="alphaev68" ;; - "EV6.9A (21264/EV69A)") - UNAME_MACHINE="alphaev69" ;; - "EV7 (21364)") - UNAME_MACHINE="alphaev7" ;; - "EV7.9 (21364A)") - UNAME_MACHINE="alphaev79" ;; - esac - # A Pn.n version is a patched version. - # A Vn.n version is a released version. - # A Tn.n version is a released field test version. - # A Xn.n version is an unreleased experimental baselevel. - # 1.2 uses "1.2" for uname -r. - echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` - # Reset EXIT trap before exiting to avoid spurious non-zero exit code. - exitcode=$? - trap '' 0 - exit $exitcode ;; - Alpha\ *:Windows_NT*:*) - # How do we know it's Interix rather than the generic POSIX subsystem? - # Should we change UNAME_MACHINE based on the output of uname instead - # of the specific Alpha model? - echo alpha-pc-interix - exit ;; - 21064:Windows_NT:50:3) - echo alpha-dec-winnt3.5 - exit ;; - Amiga*:UNIX_System_V:4.0:*) - echo m68k-unknown-sysv4 - exit ;; - *:[Aa]miga[Oo][Ss]:*:*) - echo ${UNAME_MACHINE}-unknown-amigaos - exit ;; - *:[Mm]orph[Oo][Ss]:*:*) - echo ${UNAME_MACHINE}-unknown-morphos - exit ;; - *:OS/390:*:*) - echo i370-ibm-openedition - exit ;; - *:z/VM:*:*) - echo s390-ibm-zvmoe - exit ;; - *:OS400:*:*) - echo powerpc-ibm-os400 - exit ;; - arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) - echo arm-acorn-riscix${UNAME_RELEASE} - exit ;; - arm:riscos:*:*|arm:RISCOS:*:*) - echo arm-unknown-riscos - exit ;; - SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) - echo hppa1.1-hitachi-hiuxmpp - exit ;; - Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) - # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. - if test "`(/bin/universe) 2>/dev/null`" = att ; then - echo pyramid-pyramid-sysv3 - else - echo pyramid-pyramid-bsd - fi - exit ;; - NILE*:*:*:dcosx) - echo pyramid-pyramid-svr4 - exit ;; - DRS?6000:unix:4.0:6*) - echo sparc-icl-nx6 - exit ;; - DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) - case `/usr/bin/uname -p` in - sparc) echo sparc-icl-nx7; exit ;; - esac ;; - s390x:SunOS:*:*) - echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - sun4H:SunOS:5.*:*) - echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) - echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) - echo i386-pc-auroraux${UNAME_RELEASE} - exit ;; - i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) - eval $set_cc_for_build - SUN_ARCH="i386" - # If there is a compiler, see if it is configured for 64-bit objects. - # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. - # This test works for both compilers. - if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then - if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ - (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ - grep IS_64BIT_ARCH >/dev/null - then - SUN_ARCH="x86_64" - fi - fi - echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - sun4*:SunOS:6*:*) - # According to config.sub, this is the proper way to canonicalize - # SunOS6. Hard to guess exactly what SunOS6 will be like, but - # it's likely to be more like Solaris than SunOS4. - echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - sun4*:SunOS:*:*) - case "`/usr/bin/arch -k`" in - Series*|S4*) - UNAME_RELEASE=`uname -v` - ;; - esac - # Japanese Language versions have a version number like `4.1.3-JL'. - echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` - exit ;; - sun3*:SunOS:*:*) - echo m68k-sun-sunos${UNAME_RELEASE} - exit ;; - sun*:*:4.2BSD:*) - UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` - test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 - case "`/bin/arch`" in - sun3) - echo m68k-sun-sunos${UNAME_RELEASE} - ;; - sun4) - echo sparc-sun-sunos${UNAME_RELEASE} - ;; - esac - exit ;; - aushp:SunOS:*:*) - echo sparc-auspex-sunos${UNAME_RELEASE} - exit ;; - # The situation for MiNT is a little confusing. The machine name - # can be virtually everything (everything which is not - # "atarist" or "atariste" at least should have a processor - # > m68000). The system name ranges from "MiNT" over "FreeMiNT" - # to the lowercase version "mint" (or "freemint"). Finally - # the system name "TOS" denotes a system which is actually not - # MiNT. But MiNT is downward compatible to TOS, so this should - # be no problem. - atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit ;; - atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit ;; - *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit ;; - milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) - echo m68k-milan-mint${UNAME_RELEASE} - exit ;; - hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) - echo m68k-hades-mint${UNAME_RELEASE} - exit ;; - *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) - echo m68k-unknown-mint${UNAME_RELEASE} - exit ;; - m68k:machten:*:*) - echo m68k-apple-machten${UNAME_RELEASE} - exit ;; - powerpc:machten:*:*) - echo powerpc-apple-machten${UNAME_RELEASE} - exit ;; - RISC*:Mach:*:*) - echo mips-dec-mach_bsd4.3 - exit ;; - RISC*:ULTRIX:*:*) - echo mips-dec-ultrix${UNAME_RELEASE} - exit ;; - VAX*:ULTRIX*:*:*) - echo vax-dec-ultrix${UNAME_RELEASE} - exit ;; - 2020:CLIX:*:* | 2430:CLIX:*:*) - echo clipper-intergraph-clix${UNAME_RELEASE} - exit ;; - mips:*:*:UMIPS | mips:*:*:RISCos) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c -#ifdef __cplusplus -#include /* for printf() prototype */ - int main (int argc, char *argv[]) { -#else - int main (argc, argv) int argc; char *argv[]; { -#endif - #if defined (host_mips) && defined (MIPSEB) - #if defined (SYSTYPE_SYSV) - printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); - #endif - #if defined (SYSTYPE_SVR4) - printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); - #endif - #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) - printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); - #endif - #endif - exit (-1); - } -EOF - $CC_FOR_BUILD -o $dummy $dummy.c && - dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && - SYSTEM_NAME=`$dummy $dummyarg` && - { echo "$SYSTEM_NAME"; exit; } - echo mips-mips-riscos${UNAME_RELEASE} - exit ;; - Motorola:PowerMAX_OS:*:*) - echo powerpc-motorola-powermax - exit ;; - Motorola:*:4.3:PL8-*) - echo powerpc-harris-powermax - exit ;; - Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) - echo powerpc-harris-powermax - exit ;; - Night_Hawk:Power_UNIX:*:*) - echo powerpc-harris-powerunix - exit ;; - m88k:CX/UX:7*:*) - echo m88k-harris-cxux7 - exit ;; - m88k:*:4*:R4*) - echo m88k-motorola-sysv4 - exit ;; - m88k:*:3*:R3*) - echo m88k-motorola-sysv3 - exit ;; - AViiON:dgux:*:*) - # DG/UX returns AViiON for all architectures - UNAME_PROCESSOR=`/usr/bin/uname -p` - if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] - then - if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ - [ ${TARGET_BINARY_INTERFACE}x = x ] - then - echo m88k-dg-dgux${UNAME_RELEASE} - else - echo m88k-dg-dguxbcs${UNAME_RELEASE} - fi - else - echo i586-dg-dgux${UNAME_RELEASE} - fi - exit ;; - M88*:DolphinOS:*:*) # DolphinOS (SVR3) - echo m88k-dolphin-sysv3 - exit ;; - M88*:*:R3*:*) - # Delta 88k system running SVR3 - echo m88k-motorola-sysv3 - exit ;; - XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) - echo m88k-tektronix-sysv3 - exit ;; - Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) - echo m68k-tektronix-bsd - exit ;; - *:IRIX*:*:*) - echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` - exit ;; - ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. - echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id - exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' - i*86:AIX:*:*) - echo i386-ibm-aix - exit ;; - ia64:AIX:*:*) - if [ -x /usr/bin/oslevel ] ; then - IBM_REV=`/usr/bin/oslevel` - else - IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} - fi - echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} - exit ;; - *:AIX:2:3) - if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #include - - main() - { - if (!__power_pc()) - exit(1); - puts("powerpc-ibm-aix3.2.5"); - exit(0); - } -EOF - if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` - then - echo "$SYSTEM_NAME" - else - echo rs6000-ibm-aix3.2.5 - fi - elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then - echo rs6000-ibm-aix3.2.4 - else - echo rs6000-ibm-aix3.2 - fi - exit ;; - *:AIX:*:[4567]) - IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` - if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then - IBM_ARCH=rs6000 - else - IBM_ARCH=powerpc - fi - if [ -x /usr/bin/oslevel ] ; then - IBM_REV=`/usr/bin/oslevel` - else - IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} - fi - echo ${IBM_ARCH}-ibm-aix${IBM_REV} - exit ;; - *:AIX:*:*) - echo rs6000-ibm-aix - exit ;; - ibmrt:4.4BSD:*|romp-ibm:BSD:*) - echo romp-ibm-bsd4.4 - exit ;; - ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and - echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to - exit ;; # report: romp-ibm BSD 4.3 - *:BOSX:*:*) - echo rs6000-bull-bosx - exit ;; - DPX/2?00:B.O.S.:*:*) - echo m68k-bull-sysv3 - exit ;; - 9000/[34]??:4.3bsd:1.*:*) - echo m68k-hp-bsd - exit ;; - hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) - echo m68k-hp-bsd4.4 - exit ;; - 9000/[34678]??:HP-UX:*:*) - HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` - case "${UNAME_MACHINE}" in - 9000/31? ) HP_ARCH=m68000 ;; - 9000/[34]?? ) HP_ARCH=m68k ;; - 9000/[678][0-9][0-9]) - if [ -x /usr/bin/getconf ]; then - sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` - sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` - case "${sc_cpu_version}" in - 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 - 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 - 532) # CPU_PA_RISC2_0 - case "${sc_kernel_bits}" in - 32) HP_ARCH="hppa2.0n" ;; - 64) HP_ARCH="hppa2.0w" ;; - '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 - esac ;; - esac - fi - if [ "${HP_ARCH}" = "" ]; then - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - - #define _HPUX_SOURCE - #include - #include - - int main () - { - #if defined(_SC_KERNEL_BITS) - long bits = sysconf(_SC_KERNEL_BITS); - #endif - long cpu = sysconf (_SC_CPU_VERSION); - - switch (cpu) - { - case CPU_PA_RISC1_0: puts ("hppa1.0"); break; - case CPU_PA_RISC1_1: puts ("hppa1.1"); break; - case CPU_PA_RISC2_0: - #if defined(_SC_KERNEL_BITS) - switch (bits) - { - case 64: puts ("hppa2.0w"); break; - case 32: puts ("hppa2.0n"); break; - default: puts ("hppa2.0"); break; - } break; - #else /* !defined(_SC_KERNEL_BITS) */ - puts ("hppa2.0"); break; - #endif - default: puts ("hppa1.0"); break; - } - exit (0); - } -EOF - (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` - test -z "$HP_ARCH" && HP_ARCH=hppa - fi ;; - esac - if [ ${HP_ARCH} = "hppa2.0w" ] - then - eval $set_cc_for_build - - # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating - # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler - # generating 64-bit code. GNU and HP use different nomenclature: - # - # $ CC_FOR_BUILD=cc ./config.guess - # => hppa2.0w-hp-hpux11.23 - # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess - # => hppa64-hp-hpux11.23 - - if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | - grep -q __LP64__ - then - HP_ARCH="hppa2.0w" - else - HP_ARCH="hppa64" - fi - fi - echo ${HP_ARCH}-hp-hpux${HPUX_REV} - exit ;; - ia64:HP-UX:*:*) - HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` - echo ia64-hp-hpux${HPUX_REV} - exit ;; - 3050*:HI-UX:*:*) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #include - int - main () - { - long cpu = sysconf (_SC_CPU_VERSION); - /* The order matters, because CPU_IS_HP_MC68K erroneously returns - true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct - results, however. */ - if (CPU_IS_PA_RISC (cpu)) - { - switch (cpu) - { - case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; - case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; - case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; - default: puts ("hppa-hitachi-hiuxwe2"); break; - } - } - else if (CPU_IS_HP_MC68K (cpu)) - puts ("m68k-hitachi-hiuxwe2"); - else puts ("unknown-hitachi-hiuxwe2"); - exit (0); - } -EOF - $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && - { echo "$SYSTEM_NAME"; exit; } - echo unknown-hitachi-hiuxwe2 - exit ;; - 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) - echo hppa1.1-hp-bsd - exit ;; - 9000/8??:4.3bsd:*:*) - echo hppa1.0-hp-bsd - exit ;; - *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) - echo hppa1.0-hp-mpeix - exit ;; - hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) - echo hppa1.1-hp-osf - exit ;; - hp8??:OSF1:*:*) - echo hppa1.0-hp-osf - exit ;; - i*86:OSF1:*:*) - if [ -x /usr/sbin/sysversion ] ; then - echo ${UNAME_MACHINE}-unknown-osf1mk - else - echo ${UNAME_MACHINE}-unknown-osf1 - fi - exit ;; - parisc*:Lites*:*:*) - echo hppa1.1-hp-lites - exit ;; - C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) - echo c1-convex-bsd - exit ;; - C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) - if getsysinfo -f scalar_acc - then echo c32-convex-bsd - else echo c2-convex-bsd - fi - exit ;; - C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) - echo c34-convex-bsd - exit ;; - C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) - echo c38-convex-bsd - exit ;; - C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) - echo c4-convex-bsd - exit ;; - CRAY*Y-MP:*:*:*) - echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*[A-Z]90:*:*:*) - echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ - | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ - -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ - -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*TS:*:*:*) - echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*T3E:*:*:*) - echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*SV1:*:*:*) - echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - *:UNICOS/mp:*:*) - echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) - FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` - FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` - FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` - echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" - exit ;; - 5000:UNIX_System_V:4.*:*) - FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` - FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` - echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" - exit ;; - i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) - echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} - exit ;; - sparc*:BSD/OS:*:*) - echo sparc-unknown-bsdi${UNAME_RELEASE} - exit ;; - *:BSD/OS:*:*) - echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} - exit ;; - *:FreeBSD:*:*) - case ${UNAME_MACHINE} in - pc98) - echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; - amd64) - echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; - *) - echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; - esac - exit ;; - i*:CYGWIN*:*) - echo ${UNAME_MACHINE}-pc-cygwin - exit ;; - *:MINGW*:*) - echo ${UNAME_MACHINE}-pc-mingw32 - exit ;; - i*:windows32*:*) - # uname -m includes "-pc" on this system. - echo ${UNAME_MACHINE}-mingw32 - exit ;; - i*:PW*:*) - echo ${UNAME_MACHINE}-pc-pw32 - exit ;; - *:Interix*:*) - case ${UNAME_MACHINE} in - x86) - echo i586-pc-interix${UNAME_RELEASE} - exit ;; - authenticamd | genuineintel | EM64T) - echo x86_64-unknown-interix${UNAME_RELEASE} - exit ;; - IA64) - echo ia64-unknown-interix${UNAME_RELEASE} - exit ;; - esac ;; - [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) - echo i${UNAME_MACHINE}-pc-mks - exit ;; - 8664:Windows_NT:*) - echo x86_64-pc-mks - exit ;; - i*:Windows_NT*:* | Pentium*:Windows_NT*:*) - # How do we know it's Interix rather than the generic POSIX subsystem? - # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we - # UNAME_MACHINE based on the output of uname instead of i386? - echo i586-pc-interix - exit ;; - i*:UWIN*:*) - echo ${UNAME_MACHINE}-pc-uwin - exit ;; - amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) - echo x86_64-unknown-cygwin - exit ;; - p*:CYGWIN*:*) - echo powerpcle-unknown-cygwin - exit ;; - prep*:SunOS:5.*:*) - echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - *:GNU:*:*) - # the GNU system - echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` - exit ;; - *:GNU/*:*:*) - # other systems with GNU libc and userland - echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu - exit ;; - i*86:Minix:*:*) - echo ${UNAME_MACHINE}-pc-minix - exit ;; - alpha:Linux:*:*) - case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in - EV5) UNAME_MACHINE=alphaev5 ;; - EV56) UNAME_MACHINE=alphaev56 ;; - PCA56) UNAME_MACHINE=alphapca56 ;; - PCA57) UNAME_MACHINE=alphapca56 ;; - EV6) UNAME_MACHINE=alphaev6 ;; - EV67) UNAME_MACHINE=alphaev67 ;; - EV68*) UNAME_MACHINE=alphaev68 ;; - esac - objdump --private-headers /bin/sh | grep -q ld.so.1 - if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi - echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} - exit ;; - arm*:Linux:*:*) - eval $set_cc_for_build - if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ - | grep -q __ARM_EABI__ - then - echo ${UNAME_MACHINE}-unknown-linux-gnu - else - if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ - | grep -q __ARM_PCS_VFP - then - echo ${UNAME_MACHINE}-unknown-linux-gnueabi - else - echo ${UNAME_MACHINE}-unknown-linux-gnueabihf - fi - fi - exit ;; - avr32*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - cris:Linux:*:*) - echo cris-axis-linux-gnu - exit ;; - crisv32:Linux:*:*) - echo crisv32-axis-linux-gnu - exit ;; - frv:Linux:*:*) - echo frv-unknown-linux-gnu - exit ;; - i*86:Linux:*:*) - LIBC=gnu - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #ifdef __dietlibc__ - LIBC=dietlibc - #endif -EOF - eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'` - echo "${UNAME_MACHINE}-pc-linux-${LIBC}" - exit ;; - ia64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - m32r*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - m68*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - mips:Linux:*:* | mips64:Linux:*:*) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #undef CPU - #undef ${UNAME_MACHINE} - #undef ${UNAME_MACHINE}el - #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) - CPU=${UNAME_MACHINE}el - #else - #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) - CPU=${UNAME_MACHINE} - #else - CPU= - #endif - #endif -EOF - eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` - test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } - ;; - or32:Linux:*:*) - echo or32-unknown-linux-gnu - exit ;; - padre:Linux:*:*) - echo sparc-unknown-linux-gnu - exit ;; - parisc64:Linux:*:* | hppa64:Linux:*:*) - echo hppa64-unknown-linux-gnu - exit ;; - parisc:Linux:*:* | hppa:Linux:*:*) - # Look for CPU level - case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in - PA7*) echo hppa1.1-unknown-linux-gnu ;; - PA8*) echo hppa2.0-unknown-linux-gnu ;; - *) echo hppa-unknown-linux-gnu ;; - esac - exit ;; - ppc64:Linux:*:*) - echo powerpc64-unknown-linux-gnu - exit ;; - ppc:Linux:*:*) - echo powerpc-unknown-linux-gnu - exit ;; - s390:Linux:*:* | s390x:Linux:*:*) - echo ${UNAME_MACHINE}-ibm-linux - exit ;; - sh64*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - sh*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - sparc:Linux:*:* | sparc64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - tile*:Linux:*:*) - echo ${UNAME_MACHINE}-tilera-linux-gnu - exit ;; - vax:Linux:*:*) - echo ${UNAME_MACHINE}-dec-linux-gnu - exit ;; - x86_64:Linux:*:*) - echo x86_64-unknown-linux-gnu - exit ;; - xtensa*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - i*86:DYNIX/ptx:4*:*) - # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. - # earlier versions are messed up and put the nodename in both - # sysname and nodename. - echo i386-sequent-sysv4 - exit ;; - i*86:UNIX_SV:4.2MP:2.*) - # Unixware is an offshoot of SVR4, but it has its own version - # number series starting with 2... - # I am not positive that other SVR4 systems won't match this, - # I just have to hope. -- rms. - # Use sysv4.2uw... so that sysv4* matches it. - echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} - exit ;; - i*86:OS/2:*:*) - # If we were able to find `uname', then EMX Unix compatibility - # is probably installed. - echo ${UNAME_MACHINE}-pc-os2-emx - exit ;; - i*86:XTS-300:*:STOP) - echo ${UNAME_MACHINE}-unknown-stop - exit ;; - i*86:atheos:*:*) - echo ${UNAME_MACHINE}-unknown-atheos - exit ;; - i*86:syllable:*:*) - echo ${UNAME_MACHINE}-pc-syllable - exit ;; - i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) - echo i386-unknown-lynxos${UNAME_RELEASE} - exit ;; - i*86:*DOS:*:*) - echo ${UNAME_MACHINE}-pc-msdosdjgpp - exit ;; - i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) - UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` - if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then - echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} - else - echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} - fi - exit ;; - i*86:*:5:[678]*) - # UnixWare 7.x, OpenUNIX and OpenServer 6. - case `/bin/uname -X | grep "^Machine"` in - *486*) UNAME_MACHINE=i486 ;; - *Pentium) UNAME_MACHINE=i586 ;; - *Pent*|*Celeron) UNAME_MACHINE=i686 ;; - esac - echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} - exit ;; - i*86:*:3.2:*) - if test -f /usr/options/cb.name; then - UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then - UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` - (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 - (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ - && UNAME_MACHINE=i586 - (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ - && UNAME_MACHINE=i686 - (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ - && UNAME_MACHINE=i686 - echo ${UNAME_MACHINE}-pc-sco$UNAME_REL - else - echo ${UNAME_MACHINE}-pc-sysv32 - fi - exit ;; - pc:*:*:*) - # Left here for compatibility: - # uname -m prints for DJGPP always 'pc', but it prints nothing about - # the processor, so we play safe by assuming i586. - # Note: whatever this is, it MUST be the same as what config.sub - # prints for the "djgpp" host, or else GDB configury will decide that - # this is a cross-build. - echo i586-pc-msdosdjgpp - exit ;; - Intel:Mach:3*:*) - echo i386-pc-mach3 - exit ;; - paragon:*:*:*) - echo i860-intel-osf1 - exit ;; - i860:*:4.*:*) # i860-SVR4 - if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then - echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 - else # Add other i860-SVR4 vendors below as they are discovered. - echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 - fi - exit ;; - mini*:CTIX:SYS*5:*) - # "miniframe" - echo m68010-convergent-sysv - exit ;; - mc68k:UNIX:SYSTEM5:3.51m) - echo m68k-convergent-sysv - exit ;; - M680?0:D-NIX:5.3:*) - echo m68k-diab-dnix - exit ;; - M68*:*:R3V[5678]*:*) - test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; - 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) - OS_REL='' - test -r /etc/.relid \ - && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` - /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && { echo i486-ncr-sysv4.3${OS_REL}; exit; } - /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ - && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; - 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) - /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && { echo i486-ncr-sysv4; exit; } ;; - NCR*:*:4.2:* | MPRAS*:*:4.2:*) - OS_REL='.3' - test -r /etc/.relid \ - && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` - /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && { echo i486-ncr-sysv4.3${OS_REL}; exit; } - /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ - && { echo i586-ncr-sysv4.3${OS_REL}; exit; } - /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ - && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; - m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) - echo m68k-unknown-lynxos${UNAME_RELEASE} - exit ;; - mc68030:UNIX_System_V:4.*:*) - echo m68k-atari-sysv4 - exit ;; - TSUNAMI:LynxOS:2.*:*) - echo sparc-unknown-lynxos${UNAME_RELEASE} - exit ;; - rs6000:LynxOS:2.*:*) - echo rs6000-unknown-lynxos${UNAME_RELEASE} - exit ;; - PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) - echo powerpc-unknown-lynxos${UNAME_RELEASE} - exit ;; - SM[BE]S:UNIX_SV:*:*) - echo mips-dde-sysv${UNAME_RELEASE} - exit ;; - RM*:ReliantUNIX-*:*:*) - echo mips-sni-sysv4 - exit ;; - RM*:SINIX-*:*:*) - echo mips-sni-sysv4 - exit ;; - *:SINIX-*:*:*) - if uname -p 2>/dev/null >/dev/null ; then - UNAME_MACHINE=`(uname -p) 2>/dev/null` - echo ${UNAME_MACHINE}-sni-sysv4 - else - echo ns32k-sni-sysv - fi - exit ;; - PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort - # says - echo i586-unisys-sysv4 - exit ;; - *:UNIX_System_V:4*:FTX*) - # From Gerald Hewes . - # How about differentiating between stratus architectures? -djm - echo hppa1.1-stratus-sysv4 - exit ;; - *:*:*:FTX*) - # From seanf@swdc.stratus.com. - echo i860-stratus-sysv4 - exit ;; - i*86:VOS:*:*) - # From Paul.Green@stratus.com. - echo ${UNAME_MACHINE}-stratus-vos - exit ;; - *:VOS:*:*) - # From Paul.Green@stratus.com. - echo hppa1.1-stratus-vos - exit ;; - mc68*:A/UX:*:*) - echo m68k-apple-aux${UNAME_RELEASE} - exit ;; - news*:NEWS-OS:6*:*) - echo mips-sony-newsos6 - exit ;; - R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) - if [ -d /usr/nec ]; then - echo mips-nec-sysv${UNAME_RELEASE} - else - echo mips-unknown-sysv${UNAME_RELEASE} - fi - exit ;; - BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. - echo powerpc-be-beos - exit ;; - BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. - echo powerpc-apple-beos - exit ;; - BePC:BeOS:*:*) # BeOS running on Intel PC compatible. - echo i586-pc-beos - exit ;; - BePC:Haiku:*:*) # Haiku running on Intel PC compatible. - echo i586-pc-haiku - exit ;; - SX-4:SUPER-UX:*:*) - echo sx4-nec-superux${UNAME_RELEASE} - exit ;; - SX-5:SUPER-UX:*:*) - echo sx5-nec-superux${UNAME_RELEASE} - exit ;; - SX-6:SUPER-UX:*:*) - echo sx6-nec-superux${UNAME_RELEASE} - exit ;; - SX-7:SUPER-UX:*:*) - echo sx7-nec-superux${UNAME_RELEASE} - exit ;; - SX-8:SUPER-UX:*:*) - echo sx8-nec-superux${UNAME_RELEASE} - exit ;; - SX-8R:SUPER-UX:*:*) - echo sx8r-nec-superux${UNAME_RELEASE} - exit ;; - Power*:Rhapsody:*:*) - echo powerpc-apple-rhapsody${UNAME_RELEASE} - exit ;; - *:Rhapsody:*:*) - echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} - exit ;; - *:Darwin:*:*) - UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown - case $UNAME_PROCESSOR in - i386) - eval $set_cc_for_build - if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then - if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ - (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ - grep IS_64BIT_ARCH >/dev/null - then - UNAME_PROCESSOR="x86_64" - fi - fi ;; - unknown) UNAME_PROCESSOR=powerpc ;; - esac - echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} - exit ;; - *:procnto*:*:* | *:QNX:[0123456789]*:*) - UNAME_PROCESSOR=`uname -p` - if test "$UNAME_PROCESSOR" = "x86"; then - UNAME_PROCESSOR=i386 - UNAME_MACHINE=pc - fi - echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} - exit ;; - *:QNX:*:4*) - echo i386-pc-qnx - exit ;; - NEO-?:NONSTOP_KERNEL:*:*) - echo neo-tandem-nsk${UNAME_RELEASE} - exit ;; - NSE-?:NONSTOP_KERNEL:*:*) - echo nse-tandem-nsk${UNAME_RELEASE} - exit ;; - NSR-?:NONSTOP_KERNEL:*:*) - echo nsr-tandem-nsk${UNAME_RELEASE} - exit ;; - *:NonStop-UX:*:*) - echo mips-compaq-nonstopux - exit ;; - BS2000:POSIX*:*:*) - echo bs2000-siemens-sysv - exit ;; - DS/*:UNIX_System_V:*:*) - echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} - exit ;; - *:Plan9:*:*) - # "uname -m" is not consistent, so use $cputype instead. 386 - # is converted to i386 for consistency with other x86 - # operating systems. - if test "$cputype" = "386"; then - UNAME_MACHINE=i386 - else - UNAME_MACHINE="$cputype" - fi - echo ${UNAME_MACHINE}-unknown-plan9 - exit ;; - *:TOPS-10:*:*) - echo pdp10-unknown-tops10 - exit ;; - *:TENEX:*:*) - echo pdp10-unknown-tenex - exit ;; - KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) - echo pdp10-dec-tops20 - exit ;; - XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) - echo pdp10-xkl-tops20 - exit ;; - *:TOPS-20:*:*) - echo pdp10-unknown-tops20 - exit ;; - *:ITS:*:*) - echo pdp10-unknown-its - exit ;; - SEI:*:*:SEIUX) - echo mips-sei-seiux${UNAME_RELEASE} - exit ;; - *:DragonFly:*:*) - echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` - exit ;; - *:*VMS:*:*) - UNAME_MACHINE=`(uname -p) 2>/dev/null` - case "${UNAME_MACHINE}" in - A*) echo alpha-dec-vms ; exit ;; - I*) echo ia64-dec-vms ; exit ;; - V*) echo vax-dec-vms ; exit ;; - esac ;; - *:XENIX:*:SysV) - echo i386-pc-xenix - exit ;; - i*86:skyos:*:*) - echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' - exit ;; - i*86:rdos:*:*) - echo ${UNAME_MACHINE}-pc-rdos - exit ;; - i*86:AROS:*:*) - echo ${UNAME_MACHINE}-pc-aros - exit ;; -esac - -#echo '(No uname command or uname output not recognized.)' 1>&2 -#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 - -eval $set_cc_for_build -cat >$dummy.c < -# include -#endif -main () -{ -#if defined (sony) -#if defined (MIPSEB) - /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, - I don't know.... */ - printf ("mips-sony-bsd\n"); exit (0); -#else -#include - printf ("m68k-sony-newsos%s\n", -#ifdef NEWSOS4 - "4" -#else - "" -#endif - ); exit (0); -#endif -#endif - -#if defined (__arm) && defined (__acorn) && defined (__unix) - printf ("arm-acorn-riscix\n"); exit (0); -#endif - -#if defined (hp300) && !defined (hpux) - printf ("m68k-hp-bsd\n"); exit (0); -#endif - -#if defined (NeXT) -#if !defined (__ARCHITECTURE__) -#define __ARCHITECTURE__ "m68k" -#endif - int version; - version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; - if (version < 4) - printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); - else - printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); - exit (0); -#endif - -#if defined (MULTIMAX) || defined (n16) -#if defined (UMAXV) - printf ("ns32k-encore-sysv\n"); exit (0); -#else -#if defined (CMU) - printf ("ns32k-encore-mach\n"); exit (0); -#else - printf ("ns32k-encore-bsd\n"); exit (0); -#endif -#endif -#endif - -#if defined (__386BSD__) - printf ("i386-pc-bsd\n"); exit (0); -#endif - -#if defined (sequent) -#if defined (i386) - printf ("i386-sequent-dynix\n"); exit (0); -#endif -#if defined (ns32000) - printf ("ns32k-sequent-dynix\n"); exit (0); -#endif -#endif - -#if defined (_SEQUENT_) - struct utsname un; - - uname(&un); - - if (strncmp(un.version, "V2", 2) == 0) { - printf ("i386-sequent-ptx2\n"); exit (0); - } - if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ - printf ("i386-sequent-ptx1\n"); exit (0); - } - printf ("i386-sequent-ptx\n"); exit (0); - -#endif - -#if defined (vax) -# if !defined (ultrix) -# include -# if defined (BSD) -# if BSD == 43 - printf ("vax-dec-bsd4.3\n"); exit (0); -# else -# if BSD == 199006 - printf ("vax-dec-bsd4.3reno\n"); exit (0); -# else - printf ("vax-dec-bsd\n"); exit (0); -# endif -# endif -# else - printf ("vax-dec-bsd\n"); exit (0); -# endif -# else - printf ("vax-dec-ultrix\n"); exit (0); -# endif -#endif - -#if defined (alliant) && defined (i860) - printf ("i860-alliant-bsd\n"); exit (0); -#endif - - exit (1); -} -EOF - -$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && - { echo "$SYSTEM_NAME"; exit; } - -# Apollos put the system type in the environment. - -test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } - -# Convex versions that predate uname can use getsysinfo(1) - -if [ -x /usr/convex/getsysinfo ] -then - case `getsysinfo -f cpu_type` in - c1*) - echo c1-convex-bsd - exit ;; - c2*) - if getsysinfo -f scalar_acc - then echo c32-convex-bsd - else echo c2-convex-bsd - fi - exit ;; - c34*) - echo c34-convex-bsd - exit ;; - c38*) - echo c38-convex-bsd - exit ;; - c4*) - echo c4-convex-bsd - exit ;; - esac -fi - -cat >&2 < in order to provide the needed -information to handle your system. - -config.guess timestamp = $timestamp - -uname -m = `(uname -m) 2>/dev/null || echo unknown` -uname -r = `(uname -r) 2>/dev/null || echo unknown` -uname -s = `(uname -s) 2>/dev/null || echo unknown` -uname -v = `(uname -v) 2>/dev/null || echo unknown` - -/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` -/bin/uname -X = `(/bin/uname -X) 2>/dev/null` - -hostinfo = `(hostinfo) 2>/dev/null` -/bin/universe = `(/bin/universe) 2>/dev/null` -/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` -/bin/arch = `(/bin/arch) 2>/dev/null` -/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` -/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` - -UNAME_MACHINE = ${UNAME_MACHINE} -UNAME_RELEASE = ${UNAME_RELEASE} -UNAME_SYSTEM = ${UNAME_SYSTEM} -UNAME_VERSION = ${UNAME_VERSION} -EOF - -exit 1 - -# Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "timestamp='" -# time-stamp-format: "%:y-%02m-%02d" -# time-stamp-end: "'" -# End: diff --git a/portaudio/config.sub b/portaudio/config.sub deleted file mode 100755 index 30fdca8121..0000000000 --- a/portaudio/config.sub +++ /dev/null @@ -1,1760 +0,0 @@ -#! /bin/sh -# Configuration validation subroutine script. -# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, -# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, -# 2011 Free Software Foundation, Inc. - -timestamp='2011-03-23' - -# This file is (in principle) common to ALL GNU software. -# The presence of a machine in this file suggests that SOME GNU software -# can handle that machine. It does not imply ALL GNU software can. -# -# This file 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 -# (at your option) 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. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA -# 02110-1301, USA. -# -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - - -# Please send patches to . Submit a context -# diff and a properly formatted GNU ChangeLog entry. -# -# Configuration subroutine to validate and canonicalize a configuration type. -# Supply the specified configuration type as an argument. -# If it is invalid, we print an error message on stderr and exit with code 1. -# Otherwise, we print the canonical config type on stdout and succeed. - -# You can get the latest version of this script from: -# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD - -# This file is supposed to be the same for all GNU packages -# and recognize all the CPU types, system types and aliases -# that are meaningful with *any* GNU software. -# Each package is responsible for reporting which valid configurations -# it does not support. The user should be able to distinguish -# a failure to support a valid configuration from a meaningless -# configuration. - -# The goal of this file is to map all the various variations of a given -# machine specification into a single specification in the form: -# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM -# or in some cases, the newer four-part form: -# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM -# It is wrong to echo any other type of specification. - -me=`echo "$0" | sed -e 's,.*/,,'` - -usage="\ -Usage: $0 [OPTION] CPU-MFR-OPSYS - $0 [OPTION] ALIAS - -Canonicalize a configuration name. - -Operation modes: - -h, --help print this help, then exit - -t, --time-stamp print date of last modification, then exit - -v, --version print version number, then exit - -Report bugs and patches to ." - -version="\ -GNU config.sub ($timestamp) - -Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, -2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free -Software Foundation, Inc. - -This is free software; see the source for copying conditions. There is NO -warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." - -help=" -Try \`$me --help' for more information." - -# Parse command line -while test $# -gt 0 ; do - case $1 in - --time-stamp | --time* | -t ) - echo "$timestamp" ; exit ;; - --version | -v ) - echo "$version" ; exit ;; - --help | --h* | -h ) - echo "$usage"; exit ;; - -- ) # Stop option processing - shift; break ;; - - ) # Use stdin as input. - break ;; - -* ) - echo "$me: invalid option $1$help" - exit 1 ;; - - *local*) - # First pass through any local machine types. - echo $1 - exit ;; - - * ) - break ;; - esac -done - -case $# in - 0) echo "$me: missing argument$help" >&2 - exit 1;; - 1) ;; - *) echo "$me: too many arguments$help" >&2 - exit 1;; -esac - -# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). -# Here we must recognize all the valid KERNEL-OS combinations. -maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` -case $maybe_os in - nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ - linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ - knetbsd*-gnu* | netbsd*-gnu* | \ - kopensolaris*-gnu* | \ - storm-chaos* | os2-emx* | rtmk-nova*) - os=-$maybe_os - basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` - ;; - *) - basic_machine=`echo $1 | sed 's/-[^-]*$//'` - if [ $basic_machine != $1 ] - then os=`echo $1 | sed 's/.*-/-/'` - else os=; fi - ;; -esac - -### Let's recognize common machines as not being operating systems so -### that things like config.sub decstation-3100 work. We also -### recognize some manufacturers as not being operating systems, so we -### can provide default operating systems below. -case $os in - -sun*os*) - # Prevent following clause from handling this invalid input. - ;; - -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ - -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ - -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ - -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ - -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ - -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ - -apple | -axis | -knuth | -cray | -microblaze) - os= - basic_machine=$1 - ;; - -bluegene*) - os=-cnk - ;; - -sim | -cisco | -oki | -wec | -winbond) - os= - basic_machine=$1 - ;; - -scout) - ;; - -wrs) - os=-vxworks - basic_machine=$1 - ;; - -chorusos*) - os=-chorusos - basic_machine=$1 - ;; - -chorusrdb) - os=-chorusrdb - basic_machine=$1 - ;; - -hiux*) - os=-hiuxwe2 - ;; - -sco6) - os=-sco5v6 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco5) - os=-sco3.2v5 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco4) - os=-sco3.2v4 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco3.2.[4-9]*) - os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco3.2v[4-9]*) - # Don't forget version if it is 3.2v4 or newer. - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco5v6*) - # Don't forget version if it is 3.2v4 or newer. - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco*) - os=-sco3.2v2 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -udk*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -isc) - os=-isc2.2 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -clix*) - basic_machine=clipper-intergraph - ;; - -isc*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -lynx*) - os=-lynxos - ;; - -ptx*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` - ;; - -windowsnt*) - os=`echo $os | sed -e 's/windowsnt/winnt/'` - ;; - -psos*) - os=-psos - ;; - -mint | -mint[0-9]*) - basic_machine=m68k-atari - os=-mint - ;; -esac - -# Decode aliases for certain CPU-COMPANY combinations. -case $basic_machine in - # Recognize the basic CPU types without company name. - # Some are omitted here because they have special meanings below. - 1750a | 580 \ - | a29k \ - | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ - | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ - | am33_2.0 \ - | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ - | bfin \ - | c4x | clipper \ - | d10v | d30v | dlx | dsp16xx \ - | fido | fr30 | frv \ - | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ - | i370 | i860 | i960 | ia64 \ - | ip2k | iq2000 \ - | lm32 \ - | m32c | m32r | m32rle | m68000 | m68k | m88k \ - | maxq | mb | microblaze | mcore | mep | metag \ - | mips | mipsbe | mipseb | mipsel | mipsle \ - | mips16 \ - | mips64 | mips64el \ - | mips64octeon | mips64octeonel \ - | mips64orion | mips64orionel \ - | mips64r5900 | mips64r5900el \ - | mips64vr | mips64vrel \ - | mips64vr4100 | mips64vr4100el \ - | mips64vr4300 | mips64vr4300el \ - | mips64vr5000 | mips64vr5000el \ - | mips64vr5900 | mips64vr5900el \ - | mipsisa32 | mipsisa32el \ - | mipsisa32r2 | mipsisa32r2el \ - | mipsisa64 | mipsisa64el \ - | mipsisa64r2 | mipsisa64r2el \ - | mipsisa64sb1 | mipsisa64sb1el \ - | mipsisa64sr71k | mipsisa64sr71kel \ - | mipstx39 | mipstx39el \ - | mn10200 | mn10300 \ - | moxie \ - | mt \ - | msp430 \ - | nds32 | nds32le | nds32be \ - | nios | nios2 \ - | ns16k | ns32k \ - | open8 \ - | or32 \ - | pdp10 | pdp11 | pj | pjl \ - | powerpc | powerpc64 | powerpc64le | powerpcle \ - | pyramid \ - | rx \ - | score \ - | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ - | sh64 | sh64le \ - | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ - | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ - | spu \ - | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ - | ubicom32 \ - | v850 | v850e \ - | we32k \ - | x86 | xc16x | xstormy16 | xtensa \ - | z8k | z80) - basic_machine=$basic_machine-unknown - ;; - c54x) - basic_machine=tic54x-unknown - ;; - c55x) - basic_machine=tic55x-unknown - ;; - c6x) - basic_machine=tic6x-unknown - ;; - m6811 | m68hc11 | m6812 | m68hc12 | picochip) - # Motorola 68HC11/12. - basic_machine=$basic_machine-unknown - os=-none - ;; - m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) - ;; - ms1) - basic_machine=mt-unknown - ;; - - strongarm | thumb | xscale) - basic_machine=arm-unknown - ;; - - xscaleeb) - basic_machine=armeb-unknown - ;; - - xscaleel) - basic_machine=armel-unknown - ;; - - # We use `pc' rather than `unknown' - # because (1) that's what they normally are, and - # (2) the word "unknown" tends to confuse beginning users. - i*86 | x86_64) - basic_machine=$basic_machine-pc - ;; - # Object if more than one company name word. - *-*-*) - echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 - exit 1 - ;; - # Recognize the basic CPU types with company name. - 580-* \ - | a29k-* \ - | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ - | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ - | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ - | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ - | avr-* | avr32-* \ - | bfin-* | bs2000-* \ - | c[123]* | c30-* | [cjt]90-* | c4x-* \ - | clipper-* | craynv-* | cydra-* \ - | d10v-* | d30v-* | dlx-* \ - | elxsi-* \ - | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ - | h8300-* | h8500-* \ - | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ - | i*86-* | i860-* | i960-* | ia64-* \ - | ip2k-* | iq2000-* \ - | lm32-* \ - | m32c-* | m32r-* | m32rle-* \ - | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ - | m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \ - | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ - | mips16-* \ - | mips64-* | mips64el-* \ - | mips64octeon-* | mips64octeonel-* \ - | mips64orion-* | mips64orionel-* \ - | mips64r5900-* | mips64r5900el-* \ - | mips64vr-* | mips64vrel-* \ - | mips64vr4100-* | mips64vr4100el-* \ - | mips64vr4300-* | mips64vr4300el-* \ - | mips64vr5000-* | mips64vr5000el-* \ - | mips64vr5900-* | mips64vr5900el-* \ - | mipsisa32-* | mipsisa32el-* \ - | mipsisa32r2-* | mipsisa32r2el-* \ - | mipsisa64-* | mipsisa64el-* \ - | mipsisa64r2-* | mipsisa64r2el-* \ - | mipsisa64sb1-* | mipsisa64sb1el-* \ - | mipsisa64sr71k-* | mipsisa64sr71kel-* \ - | mipstx39-* | mipstx39el-* \ - | mmix-* \ - | mt-* \ - | msp430-* \ - | nds32-* | nds32le-* | nds32be-* \ - | nios-* | nios2-* \ - | none-* | np1-* | ns16k-* | ns32k-* \ - | open8-* \ - | orion-* \ - | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ - | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ - | pyramid-* \ - | romp-* | rs6000-* | rx-* \ - | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ - | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ - | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ - | sparclite-* \ - | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \ - | tahoe-* \ - | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ - | tile-* | tilegx-* \ - | tron-* \ - | ubicom32-* \ - | v850-* | v850e-* | vax-* \ - | we32k-* \ - | x86-* | x86_64-* | xc16x-* | xps100-* \ - | xstormy16-* | xtensa*-* \ - | ymp-* \ - | z8k-* | z80-*) - ;; - # Recognize the basic CPU types without company name, with glob match. - xtensa*) - basic_machine=$basic_machine-unknown - ;; - # Recognize the various machine names and aliases which stand - # for a CPU type and a company and sometimes even an OS. - 386bsd) - basic_machine=i386-unknown - os=-bsd - ;; - 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) - basic_machine=m68000-att - ;; - 3b*) - basic_machine=we32k-att - ;; - a29khif) - basic_machine=a29k-amd - os=-udi - ;; - abacus) - basic_machine=abacus-unknown - ;; - adobe68k) - basic_machine=m68010-adobe - os=-scout - ;; - alliant | fx80) - basic_machine=fx80-alliant - ;; - altos | altos3068) - basic_machine=m68k-altos - ;; - am29k) - basic_machine=a29k-none - os=-bsd - ;; - amd64) - basic_machine=x86_64-pc - ;; - amd64-*) - basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - amdahl) - basic_machine=580-amdahl - os=-sysv - ;; - amiga | amiga-*) - basic_machine=m68k-unknown - ;; - amigaos | amigados) - basic_machine=m68k-unknown - os=-amigaos - ;; - amigaunix | amix) - basic_machine=m68k-unknown - os=-sysv4 - ;; - apollo68) - basic_machine=m68k-apollo - os=-sysv - ;; - apollo68bsd) - basic_machine=m68k-apollo - os=-bsd - ;; - aros) - basic_machine=i386-pc - os=-aros - ;; - aux) - basic_machine=m68k-apple - os=-aux - ;; - balance) - basic_machine=ns32k-sequent - os=-dynix - ;; - blackfin) - basic_machine=bfin-unknown - os=-linux - ;; - blackfin-*) - basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` - os=-linux - ;; - bluegene*) - basic_machine=powerpc-ibm - os=-cnk - ;; - c54x-*) - basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - c55x-*) - basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - c6x-*) - basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - c90) - basic_machine=c90-cray - os=-unicos - ;; - cegcc) - basic_machine=arm-unknown - os=-cegcc - ;; - convex-c1) - basic_machine=c1-convex - os=-bsd - ;; - convex-c2) - basic_machine=c2-convex - os=-bsd - ;; - convex-c32) - basic_machine=c32-convex - os=-bsd - ;; - convex-c34) - basic_machine=c34-convex - os=-bsd - ;; - convex-c38) - basic_machine=c38-convex - os=-bsd - ;; - cray | j90) - basic_machine=j90-cray - os=-unicos - ;; - craynv) - basic_machine=craynv-cray - os=-unicosmp - ;; - cr16 | cr16-*) - basic_machine=cr16-unknown - os=-elf - ;; - crds | unos) - basic_machine=m68k-crds - ;; - crisv32 | crisv32-* | etraxfs*) - basic_machine=crisv32-axis - ;; - cris | cris-* | etrax*) - basic_machine=cris-axis - ;; - crx) - basic_machine=crx-unknown - os=-elf - ;; - da30 | da30-*) - basic_machine=m68k-da30 - ;; - decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) - basic_machine=mips-dec - ;; - decsystem10* | dec10*) - basic_machine=pdp10-dec - os=-tops10 - ;; - decsystem20* | dec20*) - basic_machine=pdp10-dec - os=-tops20 - ;; - delta | 3300 | motorola-3300 | motorola-delta \ - | 3300-motorola | delta-motorola) - basic_machine=m68k-motorola - ;; - delta88) - basic_machine=m88k-motorola - os=-sysv3 - ;; - dicos) - basic_machine=i686-pc - os=-dicos - ;; - djgpp) - basic_machine=i586-pc - os=-msdosdjgpp - ;; - dpx20 | dpx20-*) - basic_machine=rs6000-bull - os=-bosx - ;; - dpx2* | dpx2*-bull) - basic_machine=m68k-bull - os=-sysv3 - ;; - ebmon29k) - basic_machine=a29k-amd - os=-ebmon - ;; - elxsi) - basic_machine=elxsi-elxsi - os=-bsd - ;; - encore | umax | mmax) - basic_machine=ns32k-encore - ;; - es1800 | OSE68k | ose68k | ose | OSE) - basic_machine=m68k-ericsson - os=-ose - ;; - fx2800) - basic_machine=i860-alliant - ;; - genix) - basic_machine=ns32k-ns - ;; - gmicro) - basic_machine=tron-gmicro - os=-sysv - ;; - go32) - basic_machine=i386-pc - os=-go32 - ;; - h3050r* | hiux*) - basic_machine=hppa1.1-hitachi - os=-hiuxwe2 - ;; - h8300hms) - basic_machine=h8300-hitachi - os=-hms - ;; - h8300xray) - basic_machine=h8300-hitachi - os=-xray - ;; - h8500hms) - basic_machine=h8500-hitachi - os=-hms - ;; - harris) - basic_machine=m88k-harris - os=-sysv3 - ;; - hp300-*) - basic_machine=m68k-hp - ;; - hp300bsd) - basic_machine=m68k-hp - os=-bsd - ;; - hp300hpux) - basic_machine=m68k-hp - os=-hpux - ;; - hp3k9[0-9][0-9] | hp9[0-9][0-9]) - basic_machine=hppa1.0-hp - ;; - hp9k2[0-9][0-9] | hp9k31[0-9]) - basic_machine=m68000-hp - ;; - hp9k3[2-9][0-9]) - basic_machine=m68k-hp - ;; - hp9k6[0-9][0-9] | hp6[0-9][0-9]) - basic_machine=hppa1.0-hp - ;; - hp9k7[0-79][0-9] | hp7[0-79][0-9]) - basic_machine=hppa1.1-hp - ;; - hp9k78[0-9] | hp78[0-9]) - # FIXME: really hppa2.0-hp - basic_machine=hppa1.1-hp - ;; - hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) - # FIXME: really hppa2.0-hp - basic_machine=hppa1.1-hp - ;; - hp9k8[0-9][13679] | hp8[0-9][13679]) - basic_machine=hppa1.1-hp - ;; - hp9k8[0-9][0-9] | hp8[0-9][0-9]) - basic_machine=hppa1.0-hp - ;; - hppa-next) - os=-nextstep3 - ;; - hppaosf) - basic_machine=hppa1.1-hp - os=-osf - ;; - hppro) - basic_machine=hppa1.1-hp - os=-proelf - ;; - i370-ibm* | ibm*) - basic_machine=i370-ibm - ;; -# I'm not sure what "Sysv32" means. Should this be sysv3.2? - i*86v32) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv32 - ;; - i*86v4*) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv4 - ;; - i*86v) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv - ;; - i*86sol2) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-solaris2 - ;; - i386mach) - basic_machine=i386-mach - os=-mach - ;; - i386-vsta | vsta) - basic_machine=i386-unknown - os=-vsta - ;; - iris | iris4d) - basic_machine=mips-sgi - case $os in - -irix*) - ;; - *) - os=-irix4 - ;; - esac - ;; - isi68 | isi) - basic_machine=m68k-isi - os=-sysv - ;; - m68knommu) - basic_machine=m68k-unknown - os=-linux - ;; - m68knommu-*) - basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` - os=-linux - ;; - m88k-omron*) - basic_machine=m88k-omron - ;; - magnum | m3230) - basic_machine=mips-mips - os=-sysv - ;; - merlin) - basic_machine=ns32k-utek - os=-sysv - ;; - microblaze) - basic_machine=microblaze-xilinx - ;; - mingw32) - basic_machine=i386-pc - os=-mingw32 - ;; - mingw32ce) - basic_machine=arm-unknown - os=-mingw32ce - ;; - miniframe) - basic_machine=m68000-convergent - ;; - *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) - basic_machine=m68k-atari - os=-mint - ;; - mips3*-*) - basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` - ;; - mips3*) - basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown - ;; - monitor) - basic_machine=m68k-rom68k - os=-coff - ;; - morphos) - basic_machine=powerpc-unknown - os=-morphos - ;; - msdos) - basic_machine=i386-pc - os=-msdos - ;; - ms1-*) - basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` - ;; - mvs) - basic_machine=i370-ibm - os=-mvs - ;; - ncr3000) - basic_machine=i486-ncr - os=-sysv4 - ;; - netbsd386) - basic_machine=i386-unknown - os=-netbsd - ;; - netwinder) - basic_machine=armv4l-rebel - os=-linux - ;; - news | news700 | news800 | news900) - basic_machine=m68k-sony - os=-newsos - ;; - news1000) - basic_machine=m68030-sony - os=-newsos - ;; - news-3600 | risc-news) - basic_machine=mips-sony - os=-newsos - ;; - necv70) - basic_machine=v70-nec - os=-sysv - ;; - next | m*-next ) - basic_machine=m68k-next - case $os in - -nextstep* ) - ;; - -ns2*) - os=-nextstep2 - ;; - *) - os=-nextstep3 - ;; - esac - ;; - nh3000) - basic_machine=m68k-harris - os=-cxux - ;; - nh[45]000) - basic_machine=m88k-harris - os=-cxux - ;; - nindy960) - basic_machine=i960-intel - os=-nindy - ;; - mon960) - basic_machine=i960-intel - os=-mon960 - ;; - nonstopux) - basic_machine=mips-compaq - os=-nonstopux - ;; - np1) - basic_machine=np1-gould - ;; - neo-tandem) - basic_machine=neo-tandem - ;; - nse-tandem) - basic_machine=nse-tandem - ;; - nsr-tandem) - basic_machine=nsr-tandem - ;; - op50n-* | op60c-*) - basic_machine=hppa1.1-oki - os=-proelf - ;; - openrisc | openrisc-*) - basic_machine=or32-unknown - ;; - os400) - basic_machine=powerpc-ibm - os=-os400 - ;; - OSE68000 | ose68000) - basic_machine=m68000-ericsson - os=-ose - ;; - os68k) - basic_machine=m68k-none - os=-os68k - ;; - pa-hitachi) - basic_machine=hppa1.1-hitachi - os=-hiuxwe2 - ;; - paragon) - basic_machine=i860-intel - os=-osf - ;; - parisc) - basic_machine=hppa-unknown - os=-linux - ;; - parisc-*) - basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` - os=-linux - ;; - pbd) - basic_machine=sparc-tti - ;; - pbb) - basic_machine=m68k-tti - ;; - pc532 | pc532-*) - basic_machine=ns32k-pc532 - ;; - pc98) - basic_machine=i386-pc - ;; - pc98-*) - basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentium | p5 | k5 | k6 | nexgen | viac3) - basic_machine=i586-pc - ;; - pentiumpro | p6 | 6x86 | athlon | athlon_*) - basic_machine=i686-pc - ;; - pentiumii | pentium2 | pentiumiii | pentium3) - basic_machine=i686-pc - ;; - pentium4) - basic_machine=i786-pc - ;; - pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) - basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentiumpro-* | p6-* | 6x86-* | athlon-*) - basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) - basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentium4-*) - basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pn) - basic_machine=pn-gould - ;; - power) basic_machine=power-ibm - ;; - ppc | ppcbe) basic_machine=powerpc-unknown - ;; - ppc-* | ppcbe-*) - basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ppcle | powerpclittle | ppc-le | powerpc-little) - basic_machine=powerpcle-unknown - ;; - ppcle-* | powerpclittle-*) - basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ppc64) basic_machine=powerpc64-unknown - ;; - ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ppc64le | powerpc64little | ppc64-le | powerpc64-little) - basic_machine=powerpc64le-unknown - ;; - ppc64le-* | powerpc64little-*) - basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ps2) - basic_machine=i386-ibm - ;; - pw32) - basic_machine=i586-unknown - os=-pw32 - ;; - rdos) - basic_machine=i386-pc - os=-rdos - ;; - rom68k) - basic_machine=m68k-rom68k - os=-coff - ;; - rm[46]00) - basic_machine=mips-siemens - ;; - rtpc | rtpc-*) - basic_machine=romp-ibm - ;; - s390 | s390-*) - basic_machine=s390-ibm - ;; - s390x | s390x-*) - basic_machine=s390x-ibm - ;; - sa29200) - basic_machine=a29k-amd - os=-udi - ;; - sb1) - basic_machine=mipsisa64sb1-unknown - ;; - sb1el) - basic_machine=mipsisa64sb1el-unknown - ;; - sde) - basic_machine=mipsisa32-sde - os=-elf - ;; - sei) - basic_machine=mips-sei - os=-seiux - ;; - sequent) - basic_machine=i386-sequent - ;; - sh) - basic_machine=sh-hitachi - os=-hms - ;; - sh5el) - basic_machine=sh5le-unknown - ;; - sh64) - basic_machine=sh64-unknown - ;; - sparclite-wrs | simso-wrs) - basic_machine=sparclite-wrs - os=-vxworks - ;; - sps7) - basic_machine=m68k-bull - os=-sysv2 - ;; - spur) - basic_machine=spur-unknown - ;; - st2000) - basic_machine=m68k-tandem - ;; - stratus) - basic_machine=i860-stratus - os=-sysv4 - ;; - strongarm-* | thumb-*) - basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - sun2) - basic_machine=m68000-sun - ;; - sun2os3) - basic_machine=m68000-sun - os=-sunos3 - ;; - sun2os4) - basic_machine=m68000-sun - os=-sunos4 - ;; - sun3os3) - basic_machine=m68k-sun - os=-sunos3 - ;; - sun3os4) - basic_machine=m68k-sun - os=-sunos4 - ;; - sun4os3) - basic_machine=sparc-sun - os=-sunos3 - ;; - sun4os4) - basic_machine=sparc-sun - os=-sunos4 - ;; - sun4sol2) - basic_machine=sparc-sun - os=-solaris2 - ;; - sun3 | sun3-*) - basic_machine=m68k-sun - ;; - sun4) - basic_machine=sparc-sun - ;; - sun386 | sun386i | roadrunner) - basic_machine=i386-sun - ;; - sv1) - basic_machine=sv1-cray - os=-unicos - ;; - symmetry) - basic_machine=i386-sequent - os=-dynix - ;; - t3e) - basic_machine=alphaev5-cray - os=-unicos - ;; - t90) - basic_machine=t90-cray - os=-unicos - ;; - # This must be matched before tile*. - tilegx*) - basic_machine=tilegx-unknown - os=-linux-gnu - ;; - tile*) - basic_machine=tile-unknown - os=-linux-gnu - ;; - tx39) - basic_machine=mipstx39-unknown - ;; - tx39el) - basic_machine=mipstx39el-unknown - ;; - toad1) - basic_machine=pdp10-xkl - os=-tops20 - ;; - tower | tower-32) - basic_machine=m68k-ncr - ;; - tpf) - basic_machine=s390x-ibm - os=-tpf - ;; - udi29k) - basic_machine=a29k-amd - os=-udi - ;; - ultra3) - basic_machine=a29k-nyu - os=-sym1 - ;; - v810 | necv810) - basic_machine=v810-nec - os=-none - ;; - vaxv) - basic_machine=vax-dec - os=-sysv - ;; - vms) - basic_machine=vax-dec - os=-vms - ;; - vpp*|vx|vx-*) - basic_machine=f301-fujitsu - ;; - vxworks960) - basic_machine=i960-wrs - os=-vxworks - ;; - vxworks68) - basic_machine=m68k-wrs - os=-vxworks - ;; - vxworks29k) - basic_machine=a29k-wrs - os=-vxworks - ;; - w65*) - basic_machine=w65-wdc - os=-none - ;; - w89k-*) - basic_machine=hppa1.1-winbond - os=-proelf - ;; - xbox) - basic_machine=i686-pc - os=-mingw32 - ;; - xps | xps100) - basic_machine=xps100-honeywell - ;; - xscale-* | xscalee[bl]-*) - basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` - ;; - ymp) - basic_machine=ymp-cray - os=-unicos - ;; - z8k-*-coff) - basic_machine=z8k-unknown - os=-sim - ;; - z80-*-coff) - basic_machine=z80-unknown - os=-sim - ;; - none) - basic_machine=none-none - os=-none - ;; - -# Here we handle the default manufacturer of certain CPU types. It is in -# some cases the only manufacturer, in others, it is the most popular. - w89k) - basic_machine=hppa1.1-winbond - ;; - op50n) - basic_machine=hppa1.1-oki - ;; - op60c) - basic_machine=hppa1.1-oki - ;; - romp) - basic_machine=romp-ibm - ;; - mmix) - basic_machine=mmix-knuth - ;; - rs6000) - basic_machine=rs6000-ibm - ;; - vax) - basic_machine=vax-dec - ;; - pdp10) - # there are many clones, so DEC is not a safe bet - basic_machine=pdp10-unknown - ;; - pdp11) - basic_machine=pdp11-dec - ;; - we32k) - basic_machine=we32k-att - ;; - sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) - basic_machine=sh-unknown - ;; - sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) - basic_machine=sparc-sun - ;; - cydra) - basic_machine=cydra-cydrome - ;; - orion) - basic_machine=orion-highlevel - ;; - orion105) - basic_machine=clipper-highlevel - ;; - mac | mpw | mac-mpw) - basic_machine=m68k-apple - ;; - pmac | pmac-mpw) - basic_machine=powerpc-apple - ;; - *-unknown) - # Make sure to match an already-canonicalized machine name. - ;; - *) - echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 - exit 1 - ;; -esac - -# Here we canonicalize certain aliases for manufacturers. -case $basic_machine in - *-digital*) - basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` - ;; - *-commodore*) - basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` - ;; - *) - ;; -esac - -# Decode manufacturer-specific aliases for certain operating systems. - -if [ x"$os" != x"" ] -then -case $os in - # First match some system type aliases - # that might get confused with valid system types. - # -solaris* is a basic system type, with this one exception. - -auroraux) - os=-auroraux - ;; - -solaris1 | -solaris1.*) - os=`echo $os | sed -e 's|solaris1|sunos4|'` - ;; - -solaris) - os=-solaris2 - ;; - -svr4*) - os=-sysv4 - ;; - -unixware*) - os=-sysv4.2uw - ;; - -gnu/linux*) - os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` - ;; - # First accept the basic system types. - # The portable systems comes first. - # Each alternative MUST END IN A *, to match a version number. - # -sysv* is not here because it comes later, after sysvr4. - -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ - | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ - | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ - | -sym* | -kopensolaris* \ - | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ - | -aos* | -aros* \ - | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ - | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ - | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ - | -openbsd* | -solidbsd* \ - | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ - | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ - | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ - | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ - | -chorusos* | -chorusrdb* | -cegcc* \ - | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ - | -mingw32* | -linux-gnu* | -linux-android* \ - | -linux-newlib* | -linux-uclibc* \ - | -uxpv* | -beos* | -mpeix* | -udk* \ - | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ - | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ - | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ - | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ - | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ - | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ - | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*) - # Remember, each alternative MUST END IN *, to match a version number. - ;; - -qnx*) - case $basic_machine in - x86-* | i*86-*) - ;; - *) - os=-nto$os - ;; - esac - ;; - -nto-qnx*) - ;; - -nto*) - os=`echo $os | sed -e 's|nto|nto-qnx|'` - ;; - -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ - | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ - | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) - ;; - -mac*) - os=`echo $os | sed -e 's|mac|macos|'` - ;; - -linux-dietlibc) - os=-linux-dietlibc - ;; - -linux*) - os=`echo $os | sed -e 's|linux|linux-gnu|'` - ;; - -sunos5*) - os=`echo $os | sed -e 's|sunos5|solaris2|'` - ;; - -sunos6*) - os=`echo $os | sed -e 's|sunos6|solaris3|'` - ;; - -opened*) - os=-openedition - ;; - -os400*) - os=-os400 - ;; - -wince*) - os=-wince - ;; - -osfrose*) - os=-osfrose - ;; - -osf*) - os=-osf - ;; - -utek*) - os=-bsd - ;; - -dynix*) - os=-bsd - ;; - -acis*) - os=-aos - ;; - -atheos*) - os=-atheos - ;; - -syllable*) - os=-syllable - ;; - -386bsd) - os=-bsd - ;; - -ctix* | -uts*) - os=-sysv - ;; - -nova*) - os=-rtmk-nova - ;; - -ns2 ) - os=-nextstep2 - ;; - -nsk*) - os=-nsk - ;; - # Preserve the version number of sinix5. - -sinix5.*) - os=`echo $os | sed -e 's|sinix|sysv|'` - ;; - -sinix*) - os=-sysv4 - ;; - -tpf*) - os=-tpf - ;; - -triton*) - os=-sysv3 - ;; - -oss*) - os=-sysv3 - ;; - -svr4) - os=-sysv4 - ;; - -svr3) - os=-sysv3 - ;; - -sysvr4) - os=-sysv4 - ;; - # This must come after -sysvr4. - -sysv*) - ;; - -ose*) - os=-ose - ;; - -es1800*) - os=-ose - ;; - -xenix) - os=-xenix - ;; - -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) - os=-mint - ;; - -aros*) - os=-aros - ;; - -kaos*) - os=-kaos - ;; - -zvmoe) - os=-zvmoe - ;; - -dicos*) - os=-dicos - ;; - -nacl*) - ;; - -none) - ;; - *) - # Get rid of the `-' at the beginning of $os. - os=`echo $os | sed 's/[^-]*-//'` - echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 - exit 1 - ;; -esac -else - -# Here we handle the default operating systems that come with various machines. -# The value should be what the vendor currently ships out the door with their -# machine or put another way, the most popular os provided with the machine. - -# Note that if you're going to try to match "-MANUFACTURER" here (say, -# "-sun"), then you have to tell the case statement up towards the top -# that MANUFACTURER isn't an operating system. Otherwise, code above -# will signal an error saying that MANUFACTURER isn't an operating -# system, and we'll never get to this point. - -case $basic_machine in - score-*) - os=-elf - ;; - spu-*) - os=-elf - ;; - *-acorn) - os=-riscix1.2 - ;; - arm*-rebel) - os=-linux - ;; - arm*-semi) - os=-aout - ;; - c4x-* | tic4x-*) - os=-coff - ;; - tic54x-*) - os=-coff - ;; - tic55x-*) - os=-coff - ;; - tic6x-*) - os=-coff - ;; - # This must come before the *-dec entry. - pdp10-*) - os=-tops20 - ;; - pdp11-*) - os=-none - ;; - *-dec | vax-*) - os=-ultrix4.2 - ;; - m68*-apollo) - os=-domain - ;; - i386-sun) - os=-sunos4.0.2 - ;; - m68000-sun) - os=-sunos3 - # This also exists in the configure program, but was not the - # default. - # os=-sunos4 - ;; - m68*-cisco) - os=-aout - ;; - mep-*) - os=-elf - ;; - mips*-cisco) - os=-elf - ;; - mips*-*) - os=-elf - ;; - or32-*) - os=-coff - ;; - *-tti) # must be before sparc entry or we get the wrong os. - os=-sysv3 - ;; - sparc-* | *-sun) - os=-sunos4.1.1 - ;; - *-be) - os=-beos - ;; - *-haiku) - os=-haiku - ;; - *-ibm) - os=-aix - ;; - *-knuth) - os=-mmixware - ;; - *-wec) - os=-proelf - ;; - *-winbond) - os=-proelf - ;; - *-oki) - os=-proelf - ;; - *-hp) - os=-hpux - ;; - *-hitachi) - os=-hiux - ;; - i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) - os=-sysv - ;; - *-cbm) - os=-amigaos - ;; - *-dg) - os=-dgux - ;; - *-dolphin) - os=-sysv3 - ;; - m68k-ccur) - os=-rtu - ;; - m88k-omron*) - os=-luna - ;; - *-next ) - os=-nextstep - ;; - *-sequent) - os=-ptx - ;; - *-crds) - os=-unos - ;; - *-ns) - os=-genix - ;; - i370-*) - os=-mvs - ;; - *-next) - os=-nextstep3 - ;; - *-gould) - os=-sysv - ;; - *-highlevel) - os=-bsd - ;; - *-encore) - os=-bsd - ;; - *-sgi) - os=-irix - ;; - *-siemens) - os=-sysv4 - ;; - *-masscomp) - os=-rtu - ;; - f30[01]-fujitsu | f700-fujitsu) - os=-uxpv - ;; - *-rom68k) - os=-coff - ;; - *-*bug) - os=-coff - ;; - *-apple) - os=-macos - ;; - *-atari*) - os=-mint - ;; - *) - os=-none - ;; -esac -fi - -# Here we handle the case where we know the os, and the CPU type, but not the -# manufacturer. We pick the logical manufacturer. -vendor=unknown -case $basic_machine in - *-unknown) - case $os in - -riscix*) - vendor=acorn - ;; - -sunos*) - vendor=sun - ;; - -cnk*|-aix*) - vendor=ibm - ;; - -beos*) - vendor=be - ;; - -hpux*) - vendor=hp - ;; - -mpeix*) - vendor=hp - ;; - -hiux*) - vendor=hitachi - ;; - -unos*) - vendor=crds - ;; - -dgux*) - vendor=dg - ;; - -luna*) - vendor=omron - ;; - -genix*) - vendor=ns - ;; - -mvs* | -opened*) - vendor=ibm - ;; - -os400*) - vendor=ibm - ;; - -ptx*) - vendor=sequent - ;; - -tpf*) - vendor=ibm - ;; - -vxsim* | -vxworks* | -windiss*) - vendor=wrs - ;; - -aux*) - vendor=apple - ;; - -hms*) - vendor=hitachi - ;; - -mpw* | -macos*) - vendor=apple - ;; - -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) - vendor=atari - ;; - -vos*) - vendor=stratus - ;; - esac - basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` - ;; -esac - -echo $basic_machine$os -exit - -# Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "timestamp='" -# time-stamp-format: "%:y-%02m-%02d" -# time-stamp-end: "'" -# End: diff --git a/portaudio/configure.in b/portaudio/configure.in deleted file mode 100644 index 146b057529..0000000000 --- a/portaudio/configure.in +++ /dev/null @@ -1,513 +0,0 @@ -dnl -dnl portaudio V19 configure.in script -dnl -dnl Dominic Mazzoni, Arve Knudsen, Stelios Bounanos -dnl - -dnl Require autoconf >= 2.13 -AC_PREREQ(2.13) - -dnl Init autoconf and make sure configure is being called -dnl from the right directory -AC_INIT([include/portaudio.h]) - -dnl Define build, build_cpu, build_vendor, build_os -AC_CANONICAL_BUILD -dnl Define host, host_cpu, host_vendor, host_os -AC_CANONICAL_HOST -dnl Define target, target_cpu, target_vendor, target_os -AC_CANONICAL_TARGET - -dnl Specify options - -AC_ARG_WITH(alsa, - AS_HELP_STRING([--with-alsa], [Enable support for ALSA @<:@autodetect@:>@]), - [with_alsa=$withval]) - -AC_ARG_WITH(jack, - AS_HELP_STRING([--with-jack], [Enable support for JACK @<:@autodetect@:>@]), - [with_jack=$withval]) - -AC_ARG_WITH(oss, - AS_HELP_STRING([--with-oss], [Enable support for OSS @<:@autodetect@:>@]), - [with_oss=$withval]) - -AC_ARG_WITH(asihpi, - AS_HELP_STRING([--with-asihpi], [Enable support for ASIHPI @<:@autodetect@:>@]), - [with_asihpi=$withval]) - -AC_ARG_WITH(winapi, - AS_HELP_STRING([--with-winapi], - [Select Windows API support (@<:@wmme|directx|asio|wasapi|wdmks@:>@@<:@,...@:>@) @<:@wmme@:>@]), - [with_winapi=$withval], [with_winapi="wmme"]) -case "$target_os" in *mingw* | *cygwin*) - with_wmme=no - with_directx=no - with_asio=no - with_wasapi=no - with_wdmks=no - for api in $(echo $with_winapi | sed 's/,/ /g'); do - case "$api" in - wmme|directx|asio|wasapi|wdmks) - eval with_$api=yes - ;; - *) - AC_MSG_ERROR([unknown Windows API \"$api\" (do you need --help?)]) - ;; - esac - done - ;; -esac - -AC_ARG_WITH(asiodir, - AS_HELP_STRING([--with-asiodir], [ASIO directory @<:@/usr/local/asiosdk2@:>@]), - with_asiodir=$withval, with_asiodir="/usr/local/asiosdk2") - -AC_ARG_WITH(dxdir, - AS_HELP_STRING([--with-dxdir], [DirectX directory @<:@/usr/local/dx7sdk@:>@]), - with_dxdir=$withval, with_dxdir="/usr/local/dx7sdk") - -debug_output=no -AC_ARG_ENABLE(debug-output, - AS_HELP_STRING([--enable-debug-output], [Enable debug output @<:@no@:>@]), - [if test "x$enableval" != "xno" ; then - AC_DEFINE(PA_ENABLE_DEBUG_OUTPUT,,[Enable debugging messages]) - debug_output=yes - fi - ]) - -AC_ARG_ENABLE(cxx, - AS_HELP_STRING([--enable-cxx], [Enable C++ bindings @<:@no@:>@]), - enable_cxx=$enableval, enable_cxx="no") - -AC_ARG_ENABLE(mac-debug, - AS_HELP_STRING([--enable-mac-debug], [Enable Mac debug @<:@no@:>@]), - enable_mac_debug=$enableval, enable_mac_debug="no") - -AC_ARG_ENABLE(mac-universal, - AS_HELP_STRING([--enable-mac-universal], [Build Mac universal binaries @<:@yes@:>@]), - enable_mac_universal=$enableval, enable_mac_universal="yes") - -dnl Continue to accept --host_os for compatibility but do not document -dnl it (the correct way to change host_os is with --host=...). Moved -dnl here because the empty help string generates a blank line which we -dnl can use to separate PA options from libtool options. -AC_ARG_WITH(host_os, [], host_os=$withval) - -dnl Checks for programs. - -AC_PROG_CC -dnl ASIO and CXX bindings need a C++ compiler -if [[ "$with_asio" = "yes" ] || [ "$enable_cxx" = "yes" ]] ; then - AC_PROG_CXX -fi -AC_LIBTOOL_WIN32_DLL -AC_PROG_LIBTOOL -AC_PROG_INSTALL -AC_PROG_LN_S -AC_PATH_PROG(AR, ar, no) -if [[ $AR = "no" ]] ; then - AC_MSG_ERROR("Could not find ar - needed to create a library") -fi - -dnl This must be one of the first tests we do or it will fail... -AC_C_BIGENDIAN - -dnl checks for various host APIs and arguments to configure that -dnl turn them on or off - -have_alsa=no -if test "x$with_alsa" != "xno"; then - AC_CHECK_LIB(asound, snd_pcm_open, have_alsa=yes, have_alsa=no) -fi -have_asihpi=no -if test "x$with_asihpi" != "xno"; then - AC_CHECK_LIB(hpi, HPI_SubSysCreate, have_asihpi=yes, have_asihpi=no, -lm) -fi -have_libossaudio=no -have_oss=no -if test "x$with_oss" != "xno"; then - AC_CHECK_HEADERS([sys/soundcard.h linux/soundcard.h machine/soundcard.h], [have_oss=yes]) - if test "x$have_oss" = "xyes"; then - AC_CHECK_LIB(ossaudio, _oss_ioctl, have_libossaudio=yes, have_libossaudio=no) - fi -fi -have_jack=no -if test "x$with_jack" != "xno"; then - PKG_CHECK_MODULES(JACK, jack, have_jack=yes, have_jack=no) -fi - - -dnl sizeof checks: we will need a 16-bit and a 32-bit type - -AC_CHECK_SIZEOF(short) -AC_CHECK_SIZEOF(int) -AC_CHECK_SIZEOF(long) - -save_LIBS="${LIBS}" -AC_CHECK_LIB(rt, clock_gettime, [rt_libs=" -lrt"]) -LIBS="${LIBS}${rt_libs}" -DLL_LIBS="${DLL_LIBS}${rt_libs}" -AC_CHECK_FUNCS([clock_gettime nanosleep]) -LIBS="${save_LIBS}" - -dnl LT_RELEASE=19 -LT_CURRENT=2 -LT_REVISION=0 -LT_AGE=0 - -AC_SUBST(LT_CURRENT) -AC_SUBST(LT_REVISION) -AC_SUBST(LT_AGE) - -dnl extra variables -AC_SUBST(OTHER_OBJS) -AC_SUBST(PADLL) -AC_SUBST(SHARED_FLAGS) -AC_SUBST(THREAD_CFLAGS) -AC_SUBST(DLL_LIBS) -AC_SUBST(CXXFLAGS) -AC_SUBST(NASM) -AC_SUBST(NASMOPT) -AC_SUBST(INCLUDES) - -dnl -g is optional on darwin -if ( echo "${host_os}" | grep ^darwin >> /dev/null ) && - [[ "$enable_mac_universal" = "yes" ] && - [ "$enable_mac_debug" != "yes" ]] ; then - CFLAGS="-O2 -Wall -pedantic -pipe -fPIC -DNDEBUG" -else - CFLAGS=${CFLAGS:-"-g -O2 -Wall -pedantic -pipe -fPIC"} -fi - -if [[ $ac_cv_c_bigendian = "yes" ]] ; then - CFLAGS="$CFLAGS -DPA_BIG_ENDIAN" -else - CFLAGS="$CFLAGS -DPA_LITTLE_ENDIAN" -fi - -add_objects() -{ - for o in $@; do - test "${OTHER_OBJS#*${o}*}" = "${OTHER_OBJS}" && OTHER_OBJS="$OTHER_OBJS $o" - done -} - -INCLUDES=portaudio.h - -dnl Include directories needed by all implementations -CFLAGS="$CFLAGS -I\$(top_srcdir)/include -I\$(top_srcdir)/src/common" - -case "${host_os}" in - darwin* ) - dnl Mac OS X configuration - - AC_DEFINE(PA_USE_COREAUDIO,1) - - CFLAGS="$CFLAGS -I\$(top_srcdir)/src/os/unix -Werror" - LIBS="-framework CoreAudio -framework AudioToolbox -framework AudioUnit -framework Carbon" - - if test "x$enable_mac_universal" = "xyes" ; then - case `xcodebuild -version | sed -n 's/Xcode \(.*\)/\1/p'` in - - [12]*|3.0|3.1) - dnl In pre-3.2 versions of Xcode, xcodebuild doesn't - dnl support -sdk, so we can't use that to look for - dnl SDKs. However, in those versions of Xcode, the - dnl SDKs are under /Developer/SDKs, so we can just look - dnl there. Also, we assume they had no SDKs later - dnl than 10.5, as 3.2 was the version that came with - dnl 10.6, at least if the Wikipedia page for Xcode - dnl is to be believed. - if [[ -d /Developer/SDKs/MacOSX10.5.sdk ]] ; then - mac_version_min="-mmacosx-version-min=10.3" - mac_sysroot="-isysroot /Developer/SDKs/MacOSX10.5.sdk" - else - mac_version_min="-mmacosx-version-min=10.3" - mac_sysroot="-isysroot /Developer/SDKs/MacOSX10.4u.sdk" - fi - ;; - - *) - dnl In 3.2 and later, xcodebuild supports -sdk, and, in - dnl 4.3 and later, the SDKs aren't under /Developer/SDKs - dnl as there *is* no /Developer, so we use -sdk to check - dnl what SDKs are available and to get the full path of - dnl the SDKs. - if xcodebuild -version -sdk macosx10.5 Path >/dev/null 2>&1 ; then - mac_version_min="-mmacosx-version-min=10.3" - mac_sysroot="-isysroot `xcodebuild -version -sdk macosx10.5 Path`" - elif xcodebuild -version -sdk macosx10.6 Path >/dev/null 2>&1 ; then - mac_version_min="-mmacosx-version-min=10.4" - mac_sysroot="-isysroot `xcodebuild -version -sdk macosx10.6 Path`" - elif xcodebuild -version -sdk macosx10.7 Path >/dev/null 2>&1 ; then - mac_version_min="-mmacosx-version-min=10.4" - mac_sysroot="-isysroot `xcodebuild -version -sdk macosx10.7 Path`" - elif xcodebuild -version -sdk macosx10.8 Path >/dev/null 2>&1 ; then - mac_version_min="-mmacosx-version-min=10.4" - mac_sysroot="-isysroot `xcodebuild -version -sdk macosx10.8 Path`" - elif xcodebuild -version -sdk macosx10.9 Path >/dev/null 2>&1 ; then - mac_version_min="-mmacosx-version-min=10.4" - mac_sysroot="-isysroot `xcodebuild -version -sdk macosx10.9 Path`" - elif xcodebuild -version -sdk macosx10.10 Path >/dev/null 2>&1 ; then - mac_version_min="-mmacosx-version-min=10.4" - mac_sysroot="-isysroot `xcodebuild -version -sdk macosx10.10 Path`" - elif xcodebuild -version -sdk macosx10.11 Path >/dev/null 2>&1 ; then - mac_version_min="-mmacosx-version-min=10.4" - mac_sysroot="-isysroot `xcodebuild -version -sdk macosx10.11 Path`" - else - AC_MSG_ERROR([Couldn't find 10.5, 10.6, 10.7, 10.8, 10.9, 10.10, 0r 10.11 SDK]) - fi - esac - - dnl Pick which architectures to build for based on what - dnl the compiler supports. - mac_arches="" - for arch in i386 x86_64 ppc ppc64 - do - save_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -arch $arch" - AC_TRY_COMPILE([], [return 0;], - [ - if [[ -z "$mac_arches" ]] ; then - mac_arches="-arch $arch" - else - mac_arches="$mac_arches -arch $arch" - fi - ]) - CFLAGS="$save_CFLAGS" - done - else - mac_arches="" - mac_sysroot="" - mac_version="" - fi - SHARED_FLAGS="$LIBS -dynamiclib $mac_arches $mac_sysroot $mac_version_min" - CFLAGS="-std=c99 $CFLAGS $mac_arches $mac_sysroot $mac_version_min" - OTHER_OBJS="src/os/unix/pa_unix_hostapis.o src/os/unix/pa_unix_util.o src/hostapi/coreaudio/pa_mac_core.o src/hostapi/coreaudio/pa_mac_core_utilities.o src/hostapi/coreaudio/pa_mac_core_blocking.o src/common/pa_ringbuffer.o" - PADLL="libportaudio.dylib" - ;; - - mingw* ) - dnl MingW configuration - - PADLL="portaudio.dll" - THREAD_CFLAGS="-mthreads" - SHARED_FLAGS="-shared" - CFLAGS="$CFLAGS -I\$(top_srcdir)/src/os/win -DPA_USE_WMME=0 -DPA_USE_ASIO=0 -DPA_USE_WDMKS=0 -DPA_USE_DS=0 -DPA_USE_WASAPI=0" - - if [[ "x$with_directx" = "xyes" ]]; then - DXDIR="$with_dxdir" - add_objects src/hostapi/dsound/pa_win_ds.o src/hostapi/dsound/pa_win_ds_dynlink.o src/os/win/pa_win_hostapis.o src/os/win/pa_win_util.o src/os/win/pa_win_coinitialize.o src/os/win/pa_win_waveformat.o - LIBS="${LIBS} -lwinmm -lm -ldsound -lole32" - DLL_LIBS="${DLL_LIBS} -lwinmm -lm -L$DXDIR/lib -ldsound -lole32" - #VC98="\"/c/Program Files/Microsoft Visual Studio/VC98/Include\"" - #CFLAGS="$CFLAGS -I$VC98 -DPA_NO_WMME -DPA_NO_ASIO" - CFLAGS="$CFLAGS -I$DXDIR/include -UPA_USE_DS -DPA_USE_DS=1" - fi - - if [[ "x$with_asio" = "xyes" ]]; then - ASIODIR="$with_asiodir" - add_objects src/hostapi/asio/pa_asio.o src/common/pa_ringbuffer.o src/os/win/pa_win_hostapis.o src/os/win/pa_win_util.o src/os/win/pa_win_coinitialize.o src/hostapi/asio/iasiothiscallresolver.o $ASIODIR/common/asio.o $ASIODIR/host/asiodrivers.o $ASIODIR/host/pc/asiolist.o - LIBS="${LIBS} -lwinmm -lm -lole32 -luuid" - DLL_LIBS="${DLL_LIBS} -lwinmm -lm -lole32 -luuid" - CFLAGS="$CFLAGS -ffast-math -fomit-frame-pointer -I\$(top_srcdir)/src/hostapi/asio -I$ASIODIR/host/pc -I$ASIODIR/common -I$ASIODIR/host -UPA_USE_ASIO -DPA_USE_ASIO=1 -DWINDOWS" - - dnl Setting the windows version flags below resolves a conflict between Interlocked* - dnl definitions in mingw winbase.h and Interlocked* hacks in ASIO SDK combase.h - dnl combase.h is included by asiodrvr.h - dnl PortAudio does not actually require Win XP (winver 501) APIs - CFLAGS="$CFLAGS -D_WIN32_WINNT=0x0501 -DWINVER=0x0501" - - CXXFLAGS="$CFLAGS" - fi - - if [[ "x$with_wdmks" = "xyes" ]]; then - DXDIR="$with_dxdir" - add_objects src/hostapi/wdmks/pa_win_wdmks.o src/common/pa_ringbuffer.o src/os/win/pa_win_hostapis.o src/os/win/pa_win_util.o src/os/win/pa_win_wdmks_util.o src/os/win/pa_win_waveformat.o - LIBS="${LIBS} -lwinmm -lm -luuid -lsetupapi -lole32" - DLL_LIBS="${DLL_LIBS} -lwinmm -lm -L$DXDIR/lib -luuid -lsetupapi -lole32" - #VC98="\"/c/Program Files/Microsoft Visual Studio/VC98/Include\"" - #CFLAGS="$CFLAGS -I$VC98 -DPA_NO_WMME -DPA_NO_ASIO" - CFLAGS="$CFLAGS -I$DXDIR/include -UPA_USE_WDMKS -DPA_USE_WDMKS=1" - fi - - if [[ "x$with_wmme" = "xyes" ]]; then - add_objects src/hostapi/wmme/pa_win_wmme.o src/os/win/pa_win_hostapis.o src/os/win/pa_win_util.o src/os/win/pa_win_waveformat.o - LIBS="${LIBS} -lwinmm -lm -lole32 -luuid" - DLL_LIBS="${DLL_LIBS} -lwinmm" - CFLAGS="$CFLAGS -UPA_USE_WMME -DPA_USE_WMME=1" - fi - - if [[ "x$with_wasapi" = "xyes" ]]; then - add_objects src/hostapi/wasapi/pa_win_wasapi.o src/common/pa_ringbuffer.o src/os/win/pa_win_hostapis.o src/os/win/pa_win_util.o src/os/win/pa_win_coinitialize.o src/os/win/pa_win_waveformat.o - LIBS="${LIBS} -lwinmm -lm -lole32 -luuid" - DLL_LIBS="${DLL_LIBS} -lwinmm -lole32" - CFLAGS="$CFLAGS -I\$(top_srcdir)/src/hostapi/wasapi/mingw-include -UPA_USE_WASAPI -DPA_USE_WASAPI=1" - fi - ;; - - cygwin* ) - dnl Cygwin configuration - - OTHER_OBJS="src/hostapi/wmme/pa_win_wmme.o src/os/win/pa_win_hostapis.o src/os/win/pa_win_util.o src/os/win/pa_win_waveformat.o" - CFLAGS="$CFLAGS -I\$(top_srcdir)/src/os/win -DPA_USE_DS=0 -DPA_USE_WDMKS=0 -DPA_USE_ASIO=0 -DPA_USE_WASAPI=0 -DPA_USE_WMME=1" - LIBS="-lwinmm -lm" - PADLL="portaudio.dll" - THREAD_CFLAGS="-mthreads" - SHARED_FLAGS="-shared" - DLL_LIBS="${DLL_LIBS} -lwinmm" - ;; - - irix* ) - dnl SGI IRIX audio library (AL) configuration (Pieter, oct 2-13, 2003). - dnl The 'dmedia' library is needed to read the Unadjusted System Time (UST). - dnl - AC_CHECK_LIB(pthread, pthread_create, , AC_MSG_ERROR([IRIX posix thread library not found!])) - AC_CHECK_LIB(audio, alOpenPort, , AC_MSG_ERROR([IRIX audio library not found!])) - AC_CHECK_LIB(dmedia, dmGetUST, , AC_MSG_ERROR([IRIX digital media library not found!])) - - dnl See the '#ifdef PA_USE_SGI' in file pa_unix/pa_unix_hostapis.c - dnl which selects the appropriate PaXXX_Initialize() function. - dnl - AC_DEFINE(PA_USE_SGI,1) - - CFLAGS="$CFLAGS -I\$(top_srcdir)/src/os/unix" - - dnl The _REENTRANT option for pthread safety. Perhaps not necessary but it 'll do no harm. - dnl - THREAD_CFLAGS="-D_REENTRANT" - - OTHER_OBJS="pa_sgi/pa_sgi.o src/os/unix/pa_unix_hostapis.o src/os/unix/pa_unix_util.o" - - dnl SGI books say -lpthread should be the last of the libs mentioned. - dnl - LIBS="-lm -ldmedia -laudio -lpthread" - PADLL="libportaudio.so" - SHARED_FLAGS="" - ;; - - *) - dnl Unix configuration - - CFLAGS="$CFLAGS -I\$(top_srcdir)/src/os/unix" - - AC_CHECK_LIB(pthread, pthread_create,[have_pthread="yes"], - AC_MSG_ERROR([libpthread not found!])) - - if [[ "$have_alsa" = "yes" ] && [ "$with_alsa" != "no" ]] ; then - DLL_LIBS="$DLL_LIBS -lasound" - LIBS="$LIBS -lasound" - OTHER_OBJS="$OTHER_OBJS src/hostapi/alsa/pa_linux_alsa.o" - INCLUDES="$INCLUDES pa_linux_alsa.h" - AC_DEFINE(PA_USE_ALSA,1) - fi - - if [[ "$have_jack" = "yes" ] && [ "$with_jack" != "no" ]] ; then - DLL_LIBS="$DLL_LIBS $JACK_LIBS" - CFLAGS="$CFLAGS $JACK_CFLAGS" - OTHER_OBJS="$OTHER_OBJS src/hostapi/jack/pa_jack.o src/common/pa_ringbuffer.o" - INCLUDES="$INCLUDES pa_jack.h" - AC_DEFINE(PA_USE_JACK,1) - fi - - if [[ "$with_oss" != "no" ]] ; then - OTHER_OBJS="$OTHER_OBJS src/hostapi/oss/pa_unix_oss.o" - if [[ "$have_libossaudio" = "yes" ]] ; then - DLL_LIBS="$DLL_LIBS -lossaudio" - LIBS="$LIBS -lossaudio" - fi - AC_DEFINE(PA_USE_OSS,1) - fi - - if [[ "$have_asihpi" = "yes" ] && [ "$with_asihpi" != "no" ]] ; then - LIBS="$LIBS -lhpi" - DLL_LIBS="$DLL_LIBS -lhpi" - OTHER_OBJS="$OTHER_OBJS src/hostapi/asihpi/pa_linux_asihpi.o" - AC_DEFINE(PA_USE_ASIHPI,1) - fi - - DLL_LIBS="$DLL_LIBS -lm -lpthread" - LIBS="$LIBS -lm -lpthread" - PADLL="libportaudio.so" - - ## support sun cc compiler flags - case "${host_os}" in - solaris*) - SHARED_FLAGS="-G" - THREAD_CFLAGS="-mt" - ;; - *) - SHARED_FLAGS="-fPIC" - THREAD_CFLAGS="-pthread" - ;; - esac - - OTHER_OBJS="$OTHER_OBJS src/os/unix/pa_unix_hostapis.o src/os/unix/pa_unix_util.o" -esac -CFLAGS="$CFLAGS $THREAD_CFLAGS" - -test "$enable_shared" != "yes" && SHARED_FLAGS="" - -if test "$enable_cxx" = "yes"; then - AC_CONFIG_SUBDIRS([bindings/cpp]) - ENABLE_CXX_TRUE="" - ENABLE_CXX_FALSE="#" -else - ENABLE_CXX_TRUE="#" - ENABLE_CXX_FALSE="" -fi -AC_SUBST(ENABLE_CXX_TRUE) -AC_SUBST(ENABLE_CXX_FALSE) - -if test "x$with_asio" = "xyes"; then - WITH_ASIO_TRUE="" - WITH_ASIO_FALSE="@ #" -else - WITH_ASIO_TRUE="@ #" - WITH_ASIO_FALSE="" -fi -AC_SUBST(WITH_ASIO_TRUE) -AC_SUBST(WITH_ASIO_FALSE) - -AC_OUTPUT([Makefile portaudio-2.0.pc]) - -AC_MSG_RESULT([ -Configuration summary: - - Target ...................... $target - C++ bindings ................ $enable_cxx - Debug output ................ $debug_output]) - -case "$target_os" in *linux*) - AC_MSG_RESULT([ - ALSA ........................ $have_alsa - ASIHPI ...................... $have_asihpi]) - ;; -esac -case "$target_os" in - *mingw* | *cygwin*) - test "x$with_directx" = "xyes" && with_directx="$with_directx (${with_dxdir})" - test "x$with_wdmks" = "xyes" && with_wdmks="$with_wdmks (${with_dxdir})" - test "x$with_asio" = "xyes" && with_asio="$with_asio (${with_asiodir})" - test "x$with_wasapi" = "xyes" - AC_MSG_RESULT([ - WMME ........................ $with_wmme - DSound ...................... $with_directx - ASIO ........................ $with_asio - WASAPI ...................... $with_wasapi - WDMKS ....................... $with_wdmks -]) - ;; - *darwin*) - AC_MSG_RESULT([ - Mac debug flags ............. $enable_mac_debug -]) - ;; - *) - AC_MSG_RESULT([ - OSS ......................... $have_oss - JACK ........................ $have_jack -]) - ;; -esac diff --git a/portaudio/install-sh b/portaudio/install-sh deleted file mode 100755 index 6781b987bd..0000000000 --- a/portaudio/install-sh +++ /dev/null @@ -1,520 +0,0 @@ -#!/bin/sh -# install - install a program, script, or datafile - -scriptversion=2009-04-28.21; # UTC - -# This originates from X11R5 (mit/util/scripts/install.sh), which was -# later released in X11R6 (xc/config/util/install.sh) with the -# following copyright and license. -# -# Copyright (C) 1994 X Consortium -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to -# deal in the Software without restriction, including without limitation the -# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -# sell copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- -# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# -# Except as contained in this notice, the name of the X Consortium shall not -# be used in advertising or otherwise to promote the sale, use or other deal- -# ings in this Software without prior written authorization from the X Consor- -# tium. -# -# -# FSF changes to this file are in the public domain. -# -# Calling this script install-sh is preferred over install.sh, to prevent -# `make' implicit rules from creating a file called install from it -# when there is no Makefile. -# -# This script is compatible with the BSD install script, but was written -# from scratch. - -nl=' -' -IFS=" "" $nl" - -# set DOITPROG to echo to test this script - -# Don't use :- since 4.3BSD and earlier shells don't like it. -doit=${DOITPROG-} -if test -z "$doit"; then - doit_exec=exec -else - doit_exec=$doit -fi - -# Put in absolute file names if you don't have them in your path; -# or use environment vars. - -chgrpprog=${CHGRPPROG-chgrp} -chmodprog=${CHMODPROG-chmod} -chownprog=${CHOWNPROG-chown} -cmpprog=${CMPPROG-cmp} -cpprog=${CPPROG-cp} -mkdirprog=${MKDIRPROG-mkdir} -mvprog=${MVPROG-mv} -rmprog=${RMPROG-rm} -stripprog=${STRIPPROG-strip} - -posix_glob='?' -initialize_posix_glob=' - test "$posix_glob" != "?" || { - if (set -f) 2>/dev/null; then - posix_glob= - else - posix_glob=: - fi - } -' - -posix_mkdir= - -# Desired mode of installed file. -mode=0755 - -chgrpcmd= -chmodcmd=$chmodprog -chowncmd= -mvcmd=$mvprog -rmcmd="$rmprog -f" -stripcmd= - -src= -dst= -dir_arg= -dst_arg= - -copy_on_change=false -no_target_directory= - -usage="\ -Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE - or: $0 [OPTION]... SRCFILES... DIRECTORY - or: $0 [OPTION]... -t DIRECTORY SRCFILES... - or: $0 [OPTION]... -d DIRECTORIES... - -In the 1st form, copy SRCFILE to DSTFILE. -In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. -In the 4th, create DIRECTORIES. - -Options: - --help display this help and exit. - --version display version info and exit. - - -c (ignored) - -C install only if different (preserve the last data modification time) - -d create directories instead of installing files. - -g GROUP $chgrpprog installed files to GROUP. - -m MODE $chmodprog installed files to MODE. - -o USER $chownprog installed files to USER. - -s $stripprog installed files. - -t DIRECTORY install into DIRECTORY. - -T report an error if DSTFILE is a directory. - -Environment variables override the default commands: - CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG - RMPROG STRIPPROG -" - -while test $# -ne 0; do - case $1 in - -c) ;; - - -C) copy_on_change=true;; - - -d) dir_arg=true;; - - -g) chgrpcmd="$chgrpprog $2" - shift;; - - --help) echo "$usage"; exit $?;; - - -m) mode=$2 - case $mode in - *' '* | *' '* | *' -'* | *'*'* | *'?'* | *'['*) - echo "$0: invalid mode: $mode" >&2 - exit 1;; - esac - shift;; - - -o) chowncmd="$chownprog $2" - shift;; - - -s) stripcmd=$stripprog;; - - -t) dst_arg=$2 - shift;; - - -T) no_target_directory=true;; - - --version) echo "$0 $scriptversion"; exit $?;; - - --) shift - break;; - - -*) echo "$0: invalid option: $1" >&2 - exit 1;; - - *) break;; - esac - shift -done - -if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then - # When -d is used, all remaining arguments are directories to create. - # When -t is used, the destination is already specified. - # Otherwise, the last argument is the destination. Remove it from $@. - for arg - do - if test -n "$dst_arg"; then - # $@ is not empty: it contains at least $arg. - set fnord "$@" "$dst_arg" - shift # fnord - fi - shift # arg - dst_arg=$arg - done -fi - -if test $# -eq 0; then - if test -z "$dir_arg"; then - echo "$0: no input file specified." >&2 - exit 1 - fi - # It's OK to call `install-sh -d' without argument. - # This can happen when creating conditional directories. - exit 0 -fi - -if test -z "$dir_arg"; then - trap '(exit $?); exit' 1 2 13 15 - - # Set umask so as not to create temps with too-generous modes. - # However, 'strip' requires both read and write access to temps. - case $mode in - # Optimize common cases. - *644) cp_umask=133;; - *755) cp_umask=22;; - - *[0-7]) - if test -z "$stripcmd"; then - u_plus_rw= - else - u_plus_rw='% 200' - fi - cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; - *) - if test -z "$stripcmd"; then - u_plus_rw= - else - u_plus_rw=,u+rw - fi - cp_umask=$mode$u_plus_rw;; - esac -fi - -for src -do - # Protect names starting with `-'. - case $src in - -*) src=./$src;; - esac - - if test -n "$dir_arg"; then - dst=$src - dstdir=$dst - test -d "$dstdir" - dstdir_status=$? - else - - # Waiting for this to be detected by the "$cpprog $src $dsttmp" command - # might cause directories to be created, which would be especially bad - # if $src (and thus $dsttmp) contains '*'. - if test ! -f "$src" && test ! -d "$src"; then - echo "$0: $src does not exist." >&2 - exit 1 - fi - - if test -z "$dst_arg"; then - echo "$0: no destination specified." >&2 - exit 1 - fi - - dst=$dst_arg - # Protect names starting with `-'. - case $dst in - -*) dst=./$dst;; - esac - - # If destination is a directory, append the input filename; won't work - # if double slashes aren't ignored. - if test -d "$dst"; then - if test -n "$no_target_directory"; then - echo "$0: $dst_arg: Is a directory" >&2 - exit 1 - fi - dstdir=$dst - dst=$dstdir/`basename "$src"` - dstdir_status=0 - else - # Prefer dirname, but fall back on a substitute if dirname fails. - dstdir=` - (dirname "$dst") 2>/dev/null || - expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$dst" : 'X\(//\)[^/]' \| \ - X"$dst" : 'X\(//\)$' \| \ - X"$dst" : 'X\(/\)' \| . 2>/dev/null || - echo X"$dst" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q' - ` - - test -d "$dstdir" - dstdir_status=$? - fi - fi - - obsolete_mkdir_used=false - - if test $dstdir_status != 0; then - case $posix_mkdir in - '') - # Create intermediate dirs using mode 755 as modified by the umask. - # This is like FreeBSD 'install' as of 1997-10-28. - umask=`umask` - case $stripcmd.$umask in - # Optimize common cases. - *[2367][2367]) mkdir_umask=$umask;; - .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; - - *[0-7]) - mkdir_umask=`expr $umask + 22 \ - - $umask % 100 % 40 + $umask % 20 \ - - $umask % 10 % 4 + $umask % 2 - `;; - *) mkdir_umask=$umask,go-w;; - esac - - # With -d, create the new directory with the user-specified mode. - # Otherwise, rely on $mkdir_umask. - if test -n "$dir_arg"; then - mkdir_mode=-m$mode - else - mkdir_mode= - fi - - posix_mkdir=false - case $umask in - *[123567][0-7][0-7]) - # POSIX mkdir -p sets u+wx bits regardless of umask, which - # is incompatible with FreeBSD 'install' when (umask & 300) != 0. - ;; - *) - tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ - trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 - - if (umask $mkdir_umask && - exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 - then - if test -z "$dir_arg" || { - # Check for POSIX incompatibilities with -m. - # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or - # other-writeable bit of parent directory when it shouldn't. - # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. - ls_ld_tmpdir=`ls -ld "$tmpdir"` - case $ls_ld_tmpdir in - d????-?r-*) different_mode=700;; - d????-?--*) different_mode=755;; - *) false;; - esac && - $mkdirprog -m$different_mode -p -- "$tmpdir" && { - ls_ld_tmpdir_1=`ls -ld "$tmpdir"` - test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" - } - } - then posix_mkdir=: - fi - rmdir "$tmpdir/d" "$tmpdir" - else - # Remove any dirs left behind by ancient mkdir implementations. - rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null - fi - trap '' 0;; - esac;; - esac - - if - $posix_mkdir && ( - umask $mkdir_umask && - $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" - ) - then : - else - - # The umask is ridiculous, or mkdir does not conform to POSIX, - # or it failed possibly due to a race condition. Create the - # directory the slow way, step by step, checking for races as we go. - - case $dstdir in - /*) prefix='/';; - -*) prefix='./';; - *) prefix='';; - esac - - eval "$initialize_posix_glob" - - oIFS=$IFS - IFS=/ - $posix_glob set -f - set fnord $dstdir - shift - $posix_glob set +f - IFS=$oIFS - - prefixes= - - for d - do - test -z "$d" && continue - - prefix=$prefix$d - if test -d "$prefix"; then - prefixes= - else - if $posix_mkdir; then - (umask=$mkdir_umask && - $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break - # Don't fail if two instances are running concurrently. - test -d "$prefix" || exit 1 - else - case $prefix in - *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; - *) qprefix=$prefix;; - esac - prefixes="$prefixes '$qprefix'" - fi - fi - prefix=$prefix/ - done - - if test -n "$prefixes"; then - # Don't fail if two instances are running concurrently. - (umask $mkdir_umask && - eval "\$doit_exec \$mkdirprog $prefixes") || - test -d "$dstdir" || exit 1 - obsolete_mkdir_used=true - fi - fi - fi - - if test -n "$dir_arg"; then - { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && - { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && - { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || - test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 - else - - # Make a couple of temp file names in the proper directory. - dsttmp=$dstdir/_inst.$$_ - rmtmp=$dstdir/_rm.$$_ - - # Trap to clean up those temp files at exit. - trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 - - # Copy the file name to the temp name. - (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && - - # and set any options; do chmod last to preserve setuid bits. - # - # If any of these fail, we abort the whole thing. If we want to - # ignore errors from any of these, just make sure not to ignore - # errors from the above "$doit $cpprog $src $dsttmp" command. - # - { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && - { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && - { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && - { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && - - # If -C, don't bother to copy if it wouldn't change the file. - if $copy_on_change && - old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && - new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && - - eval "$initialize_posix_glob" && - $posix_glob set -f && - set X $old && old=:$2:$4:$5:$6 && - set X $new && new=:$2:$4:$5:$6 && - $posix_glob set +f && - - test "$old" = "$new" && - $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 - then - rm -f "$dsttmp" - else - # Rename the file to the real destination. - $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || - - # The rename failed, perhaps because mv can't rename something else - # to itself, or perhaps because mv is so ancient that it does not - # support -f. - { - # Now remove or move aside any old file at destination location. - # We try this two ways since rm can't unlink itself on some - # systems and the destination file might be busy for other - # reasons. In this case, the final cleanup might fail but the new - # file should still install successfully. - { - test ! -f "$dst" || - $doit $rmcmd -f "$dst" 2>/dev/null || - { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && - { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } - } || - { echo "$0: cannot unlink or rename $dst" >&2 - (exit 1); exit 1 - } - } && - - # Now rename the file to the real destination. - $doit $mvcmd "$dsttmp" "$dst" - } - fi || exit 1 - - trap '' 0 - fi -done - -# Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "scriptversion=" -# time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-time-zone: "UTC" -# time-stamp-end: "; # UTC" -# End: diff --git a/portaudio/portaudio-2.0.pc.in b/portaudio/portaudio-2.0.pc.in deleted file mode 100644 index f5c196913a..0000000000 --- a/portaudio/portaudio-2.0.pc.in +++ /dev/null @@ -1,12 +0,0 @@ -prefix=@prefix@ -exec_prefix=@exec_prefix@ -libdir=@libdir@ -includedir=@includedir@ - -Name: PortAudio -Description: Portable audio I/O -Requires: -Version: 19 - -Libs: -L${libdir} -lportaudio @LIBS@ -Cflags: -I${includedir} @THREAD_CFLAGS@ diff --git a/portaudio/LICENSE.txt b/portaudio/portaudio/LICENSE.txt similarity index 100% rename from portaudio/LICENSE.txt rename to portaudio/portaudio/LICENSE.txt diff --git a/portaudio/include/pa_asio.h b/portaudio/portaudio/include/pa_asio.h similarity index 99% rename from portaudio/include/pa_asio.h rename to portaudio/portaudio/include/pa_asio.h index 8f4624e686..9c606a9c7c 100644 --- a/portaudio/include/pa_asio.h +++ b/portaudio/portaudio/include/pa_asio.h @@ -1,7 +1,7 @@ #ifndef PA_ASIO_H #define PA_ASIO_H /* - * $Id: pa_asio.h 1667 2011-05-02 15:49:20Z rossb $ + * $Id$ * PortAudio Portable Real-Time Audio Library * ASIO specific extensions * diff --git a/portaudio/include/pa_jack.h b/portaudio/portaudio/include/pa_jack.h similarity index 100% rename from portaudio/include/pa_jack.h rename to portaudio/portaudio/include/pa_jack.h diff --git a/portaudio/include/pa_linux_alsa.h b/portaudio/portaudio/include/pa_linux_alsa.h similarity index 98% rename from portaudio/include/pa_linux_alsa.h rename to portaudio/portaudio/include/pa_linux_alsa.h index 21627bdf11..7ac6736456 100644 --- a/portaudio/include/pa_linux_alsa.h +++ b/portaudio/portaudio/include/pa_linux_alsa.h @@ -2,7 +2,7 @@ #define PA_LINUX_ALSA_H /* - * $Id: pa_linux_alsa.h 1597 2011-02-11 00:15:51Z dmitrykos $ + * $Id$ * PortAudio Portable Real-Time Audio Library * ALSA-specific extensions * diff --git a/portaudio/include/pa_mac_core.h b/portaudio/portaudio/include/pa_mac_core.h similarity index 100% rename from portaudio/include/pa_mac_core.h rename to portaudio/portaudio/include/pa_mac_core.h diff --git a/portaudio/include/pa_win_waveformat.h b/portaudio/portaudio/include/pa_win_waveformat.h similarity index 97% rename from portaudio/include/pa_win_waveformat.h rename to portaudio/portaudio/include/pa_win_waveformat.h index dce18c0d93..2c00267117 100644 --- a/portaudio/include/pa_win_waveformat.h +++ b/portaudio/portaudio/include/pa_win_waveformat.h @@ -1,199 +1,199 @@ -#ifndef PA_WIN_WAVEFORMAT_H -#define PA_WIN_WAVEFORMAT_H - -/* - * PortAudio Portable Real-Time Audio Library - * Windows WAVEFORMAT* data structure utilities - * portaudio.h should be included before this file. - * - * Copyright (c) 2007 Ross Bencina - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF - * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -/* - * The text above constitutes the entire PortAudio license; however, - * the PortAudio community also makes the following non-binding requests: - * - * Any person wishing to distribute modifications to the Software is - * requested to send the modifications to the original developer so that - * they can be incorporated into the canonical version. It is also - * requested that these non-binding requests be included along with the - * license above. - */ - -/** @file - @ingroup public_header - @brief Windows specific PortAudio API extension and utilities header file. -*/ - -#ifdef __cplusplus -extern "C" { -#endif - -/* - The following #defines for speaker channel masks are the same - as those in ksmedia.h, except with PAWIN_ prepended, KSAUDIO_ removed - in some cases, and casts to PaWinWaveFormatChannelMask added. -*/ - -typedef unsigned long PaWinWaveFormatChannelMask; - -/* Speaker Positions: */ -#define PAWIN_SPEAKER_FRONT_LEFT ((PaWinWaveFormatChannelMask)0x1) -#define PAWIN_SPEAKER_FRONT_RIGHT ((PaWinWaveFormatChannelMask)0x2) -#define PAWIN_SPEAKER_FRONT_CENTER ((PaWinWaveFormatChannelMask)0x4) -#define PAWIN_SPEAKER_LOW_FREQUENCY ((PaWinWaveFormatChannelMask)0x8) -#define PAWIN_SPEAKER_BACK_LEFT ((PaWinWaveFormatChannelMask)0x10) -#define PAWIN_SPEAKER_BACK_RIGHT ((PaWinWaveFormatChannelMask)0x20) -#define PAWIN_SPEAKER_FRONT_LEFT_OF_CENTER ((PaWinWaveFormatChannelMask)0x40) -#define PAWIN_SPEAKER_FRONT_RIGHT_OF_CENTER ((PaWinWaveFormatChannelMask)0x80) -#define PAWIN_SPEAKER_BACK_CENTER ((PaWinWaveFormatChannelMask)0x100) -#define PAWIN_SPEAKER_SIDE_LEFT ((PaWinWaveFormatChannelMask)0x200) -#define PAWIN_SPEAKER_SIDE_RIGHT ((PaWinWaveFormatChannelMask)0x400) -#define PAWIN_SPEAKER_TOP_CENTER ((PaWinWaveFormatChannelMask)0x800) -#define PAWIN_SPEAKER_TOP_FRONT_LEFT ((PaWinWaveFormatChannelMask)0x1000) -#define PAWIN_SPEAKER_TOP_FRONT_CENTER ((PaWinWaveFormatChannelMask)0x2000) -#define PAWIN_SPEAKER_TOP_FRONT_RIGHT ((PaWinWaveFormatChannelMask)0x4000) -#define PAWIN_SPEAKER_TOP_BACK_LEFT ((PaWinWaveFormatChannelMask)0x8000) -#define PAWIN_SPEAKER_TOP_BACK_CENTER ((PaWinWaveFormatChannelMask)0x10000) -#define PAWIN_SPEAKER_TOP_BACK_RIGHT ((PaWinWaveFormatChannelMask)0x20000) - -/* Bit mask locations reserved for future use */ -#define PAWIN_SPEAKER_RESERVED ((PaWinWaveFormatChannelMask)0x7FFC0000) - -/* Used to specify that any possible permutation of speaker configurations */ -#define PAWIN_SPEAKER_ALL ((PaWinWaveFormatChannelMask)0x80000000) - -/* DirectSound Speaker Config */ -#define PAWIN_SPEAKER_DIRECTOUT 0 -#define PAWIN_SPEAKER_MONO (PAWIN_SPEAKER_FRONT_CENTER) -#define PAWIN_SPEAKER_STEREO (PAWIN_SPEAKER_FRONT_LEFT | PAWIN_SPEAKER_FRONT_RIGHT) -#define PAWIN_SPEAKER_QUAD (PAWIN_SPEAKER_FRONT_LEFT | PAWIN_SPEAKER_FRONT_RIGHT | \ - PAWIN_SPEAKER_BACK_LEFT | PAWIN_SPEAKER_BACK_RIGHT) -#define PAWIN_SPEAKER_SURROUND (PAWIN_SPEAKER_FRONT_LEFT | PAWIN_SPEAKER_FRONT_RIGHT | \ - PAWIN_SPEAKER_FRONT_CENTER | PAWIN_SPEAKER_BACK_CENTER) -#define PAWIN_SPEAKER_5POINT1 (PAWIN_SPEAKER_FRONT_LEFT | PAWIN_SPEAKER_FRONT_RIGHT | \ - PAWIN_SPEAKER_FRONT_CENTER | PAWIN_SPEAKER_LOW_FREQUENCY | \ - PAWIN_SPEAKER_BACK_LEFT | PAWIN_SPEAKER_BACK_RIGHT) -#define PAWIN_SPEAKER_7POINT1 (PAWIN_SPEAKER_FRONT_LEFT | PAWIN_SPEAKER_FRONT_RIGHT | \ - PAWIN_SPEAKER_FRONT_CENTER | PAWIN_SPEAKER_LOW_FREQUENCY | \ - PAWIN_SPEAKER_BACK_LEFT | PAWIN_SPEAKER_BACK_RIGHT | \ - PAWIN_SPEAKER_FRONT_LEFT_OF_CENTER | PAWIN_SPEAKER_FRONT_RIGHT_OF_CENTER) -#define PAWIN_SPEAKER_5POINT1_SURROUND (PAWIN_SPEAKER_FRONT_LEFT | PAWIN_SPEAKER_FRONT_RIGHT | \ - PAWIN_SPEAKER_FRONT_CENTER | PAWIN_SPEAKER_LOW_FREQUENCY | \ - PAWIN_SPEAKER_SIDE_LEFT | PAWIN_SPEAKER_SIDE_RIGHT) -#define PAWIN_SPEAKER_7POINT1_SURROUND (PAWIN_SPEAKER_FRONT_LEFT | PAWIN_SPEAKER_FRONT_RIGHT | \ - PAWIN_SPEAKER_FRONT_CENTER | PAWIN_SPEAKER_LOW_FREQUENCY | \ - PAWIN_SPEAKER_BACK_LEFT | PAWIN_SPEAKER_BACK_RIGHT | \ - PAWIN_SPEAKER_SIDE_LEFT | PAWIN_SPEAKER_SIDE_RIGHT) -/* - According to the Microsoft documentation: - The following are obsolete 5.1 and 7.1 settings (they lack side speakers). Note this means - that the default 5.1 and 7.1 settings (KSAUDIO_SPEAKER_5POINT1 and KSAUDIO_SPEAKER_7POINT1 are - similarly obsolete but are unchanged for compatibility reasons). -*/ -#define PAWIN_SPEAKER_5POINT1_BACK PAWIN_SPEAKER_5POINT1 -#define PAWIN_SPEAKER_7POINT1_WIDE PAWIN_SPEAKER_7POINT1 - -/* DVD Speaker Positions */ -#define PAWIN_SPEAKER_GROUND_FRONT_LEFT PAWIN_SPEAKER_FRONT_LEFT -#define PAWIN_SPEAKER_GROUND_FRONT_CENTER PAWIN_SPEAKER_FRONT_CENTER -#define PAWIN_SPEAKER_GROUND_FRONT_RIGHT PAWIN_SPEAKER_FRONT_RIGHT -#define PAWIN_SPEAKER_GROUND_REAR_LEFT PAWIN_SPEAKER_BACK_LEFT -#define PAWIN_SPEAKER_GROUND_REAR_RIGHT PAWIN_SPEAKER_BACK_RIGHT -#define PAWIN_SPEAKER_TOP_MIDDLE PAWIN_SPEAKER_TOP_CENTER -#define PAWIN_SPEAKER_SUPER_WOOFER PAWIN_SPEAKER_LOW_FREQUENCY - - -/* - PaWinWaveFormat is defined here to provide compatibility with - compilation environments which don't have headers defining - WAVEFORMATEXTENSIBLE (e.g. older versions of MSVC, Borland C++ etc. - - The fields for WAVEFORMATEX and WAVEFORMATEXTENSIBLE are declared as an - unsigned char array here to avoid clients who include this file having - a dependency on windows.h and mmsystem.h, and also to to avoid having - to write separate packing pragmas for each compiler. -*/ -#define PAWIN_SIZEOF_WAVEFORMATEX 18 -#define PAWIN_SIZEOF_WAVEFORMATEXTENSIBLE (PAWIN_SIZEOF_WAVEFORMATEX + 22) - -typedef struct{ - unsigned char fields[ PAWIN_SIZEOF_WAVEFORMATEXTENSIBLE ]; - unsigned long extraLongForAlignment; /* ensure that compiler aligns struct to DWORD */ -} PaWinWaveFormat; - -/* - WAVEFORMATEXTENSIBLE fields: - - union { - WORD wValidBitsPerSample; - WORD wSamplesPerBlock; - WORD wReserved; - } Samples; - DWORD dwChannelMask; - GUID SubFormat; -*/ - -#define PAWIN_INDEXOF_WVALIDBITSPERSAMPLE (PAWIN_SIZEOF_WAVEFORMATEX+0) -#define PAWIN_INDEXOF_DWCHANNELMASK (PAWIN_SIZEOF_WAVEFORMATEX+2) -#define PAWIN_INDEXOF_SUBFORMAT (PAWIN_SIZEOF_WAVEFORMATEX+6) - - -/* - Valid values to pass for the waveFormatTag PaWin_InitializeWaveFormatEx and - PaWin_InitializeWaveFormatExtensible functions below. These must match - the standard Windows WAVE_FORMAT_* values. -*/ -#define PAWIN_WAVE_FORMAT_PCM (1) -#define PAWIN_WAVE_FORMAT_IEEE_FLOAT (3) -#define PAWIN_WAVE_FORMAT_DOLBY_AC3_SPDIF (0x0092) -#define PAWIN_WAVE_FORMAT_WMA_SPDIF (0x0164) - - -/* - returns PAWIN_WAVE_FORMAT_PCM or PAWIN_WAVE_FORMAT_IEEE_FLOAT - depending on the sampleFormat parameter. -*/ -int PaWin_SampleFormatToLinearWaveFormatTag( PaSampleFormat sampleFormat ); - -/* - Use the following two functions to initialize the waveformat structure. -*/ - -void PaWin_InitializeWaveFormatEx( PaWinWaveFormat *waveFormat, - int numChannels, PaSampleFormat sampleFormat, int waveFormatTag, double sampleRate ); - - -void PaWin_InitializeWaveFormatExtensible( PaWinWaveFormat *waveFormat, - int numChannels, PaSampleFormat sampleFormat, int waveFormatTag, double sampleRate, - PaWinWaveFormatChannelMask channelMask ); - - -/* Map a channel count to a speaker channel mask */ -PaWinWaveFormatChannelMask PaWin_DefaultChannelMask( int numChannels ); - - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - +#ifndef PA_WIN_WAVEFORMAT_H +#define PA_WIN_WAVEFORMAT_H + +/* + * PortAudio Portable Real-Time Audio Library + * Windows WAVEFORMAT* data structure utilities + * portaudio.h should be included before this file. + * + * Copyright (c) 2007 Ross Bencina + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files + * (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, + * publish, distribute, sublicense, and/or sell copies of the Software, + * and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +/* + * The text above constitutes the entire PortAudio license; however, + * the PortAudio community also makes the following non-binding requests: + * + * Any person wishing to distribute modifications to the Software is + * requested to send the modifications to the original developer so that + * they can be incorporated into the canonical version. It is also + * requested that these non-binding requests be included along with the + * license above. + */ + +/** @file + @ingroup public_header + @brief Windows specific PortAudio API extension and utilities header file. +*/ + +#ifdef __cplusplus +extern "C" { +#endif + +/* + The following #defines for speaker channel masks are the same + as those in ksmedia.h, except with PAWIN_ prepended, KSAUDIO_ removed + in some cases, and casts to PaWinWaveFormatChannelMask added. +*/ + +typedef unsigned long PaWinWaveFormatChannelMask; + +/* Speaker Positions: */ +#define PAWIN_SPEAKER_FRONT_LEFT ((PaWinWaveFormatChannelMask)0x1) +#define PAWIN_SPEAKER_FRONT_RIGHT ((PaWinWaveFormatChannelMask)0x2) +#define PAWIN_SPEAKER_FRONT_CENTER ((PaWinWaveFormatChannelMask)0x4) +#define PAWIN_SPEAKER_LOW_FREQUENCY ((PaWinWaveFormatChannelMask)0x8) +#define PAWIN_SPEAKER_BACK_LEFT ((PaWinWaveFormatChannelMask)0x10) +#define PAWIN_SPEAKER_BACK_RIGHT ((PaWinWaveFormatChannelMask)0x20) +#define PAWIN_SPEAKER_FRONT_LEFT_OF_CENTER ((PaWinWaveFormatChannelMask)0x40) +#define PAWIN_SPEAKER_FRONT_RIGHT_OF_CENTER ((PaWinWaveFormatChannelMask)0x80) +#define PAWIN_SPEAKER_BACK_CENTER ((PaWinWaveFormatChannelMask)0x100) +#define PAWIN_SPEAKER_SIDE_LEFT ((PaWinWaveFormatChannelMask)0x200) +#define PAWIN_SPEAKER_SIDE_RIGHT ((PaWinWaveFormatChannelMask)0x400) +#define PAWIN_SPEAKER_TOP_CENTER ((PaWinWaveFormatChannelMask)0x800) +#define PAWIN_SPEAKER_TOP_FRONT_LEFT ((PaWinWaveFormatChannelMask)0x1000) +#define PAWIN_SPEAKER_TOP_FRONT_CENTER ((PaWinWaveFormatChannelMask)0x2000) +#define PAWIN_SPEAKER_TOP_FRONT_RIGHT ((PaWinWaveFormatChannelMask)0x4000) +#define PAWIN_SPEAKER_TOP_BACK_LEFT ((PaWinWaveFormatChannelMask)0x8000) +#define PAWIN_SPEAKER_TOP_BACK_CENTER ((PaWinWaveFormatChannelMask)0x10000) +#define PAWIN_SPEAKER_TOP_BACK_RIGHT ((PaWinWaveFormatChannelMask)0x20000) + +/* Bit mask locations reserved for future use */ +#define PAWIN_SPEAKER_RESERVED ((PaWinWaveFormatChannelMask)0x7FFC0000) + +/* Used to specify that any possible permutation of speaker configurations */ +#define PAWIN_SPEAKER_ALL ((PaWinWaveFormatChannelMask)0x80000000) + +/* DirectSound Speaker Config */ +#define PAWIN_SPEAKER_DIRECTOUT 0 +#define PAWIN_SPEAKER_MONO (PAWIN_SPEAKER_FRONT_CENTER) +#define PAWIN_SPEAKER_STEREO (PAWIN_SPEAKER_FRONT_LEFT | PAWIN_SPEAKER_FRONT_RIGHT) +#define PAWIN_SPEAKER_QUAD (PAWIN_SPEAKER_FRONT_LEFT | PAWIN_SPEAKER_FRONT_RIGHT | \ + PAWIN_SPEAKER_BACK_LEFT | PAWIN_SPEAKER_BACK_RIGHT) +#define PAWIN_SPEAKER_SURROUND (PAWIN_SPEAKER_FRONT_LEFT | PAWIN_SPEAKER_FRONT_RIGHT | \ + PAWIN_SPEAKER_FRONT_CENTER | PAWIN_SPEAKER_BACK_CENTER) +#define PAWIN_SPEAKER_5POINT1 (PAWIN_SPEAKER_FRONT_LEFT | PAWIN_SPEAKER_FRONT_RIGHT | \ + PAWIN_SPEAKER_FRONT_CENTER | PAWIN_SPEAKER_LOW_FREQUENCY | \ + PAWIN_SPEAKER_BACK_LEFT | PAWIN_SPEAKER_BACK_RIGHT) +#define PAWIN_SPEAKER_7POINT1 (PAWIN_SPEAKER_FRONT_LEFT | PAWIN_SPEAKER_FRONT_RIGHT | \ + PAWIN_SPEAKER_FRONT_CENTER | PAWIN_SPEAKER_LOW_FREQUENCY | \ + PAWIN_SPEAKER_BACK_LEFT | PAWIN_SPEAKER_BACK_RIGHT | \ + PAWIN_SPEAKER_FRONT_LEFT_OF_CENTER | PAWIN_SPEAKER_FRONT_RIGHT_OF_CENTER) +#define PAWIN_SPEAKER_5POINT1_SURROUND (PAWIN_SPEAKER_FRONT_LEFT | PAWIN_SPEAKER_FRONT_RIGHT | \ + PAWIN_SPEAKER_FRONT_CENTER | PAWIN_SPEAKER_LOW_FREQUENCY | \ + PAWIN_SPEAKER_SIDE_LEFT | PAWIN_SPEAKER_SIDE_RIGHT) +#define PAWIN_SPEAKER_7POINT1_SURROUND (PAWIN_SPEAKER_FRONT_LEFT | PAWIN_SPEAKER_FRONT_RIGHT | \ + PAWIN_SPEAKER_FRONT_CENTER | PAWIN_SPEAKER_LOW_FREQUENCY | \ + PAWIN_SPEAKER_BACK_LEFT | PAWIN_SPEAKER_BACK_RIGHT | \ + PAWIN_SPEAKER_SIDE_LEFT | PAWIN_SPEAKER_SIDE_RIGHT) +/* + According to the Microsoft documentation: + The following are obsolete 5.1 and 7.1 settings (they lack side speakers). Note this means + that the default 5.1 and 7.1 settings (KSAUDIO_SPEAKER_5POINT1 and KSAUDIO_SPEAKER_7POINT1 are + similarly obsolete but are unchanged for compatibility reasons). +*/ +#define PAWIN_SPEAKER_5POINT1_BACK PAWIN_SPEAKER_5POINT1 +#define PAWIN_SPEAKER_7POINT1_WIDE PAWIN_SPEAKER_7POINT1 + +/* DVD Speaker Positions */ +#define PAWIN_SPEAKER_GROUND_FRONT_LEFT PAWIN_SPEAKER_FRONT_LEFT +#define PAWIN_SPEAKER_GROUND_FRONT_CENTER PAWIN_SPEAKER_FRONT_CENTER +#define PAWIN_SPEAKER_GROUND_FRONT_RIGHT PAWIN_SPEAKER_FRONT_RIGHT +#define PAWIN_SPEAKER_GROUND_REAR_LEFT PAWIN_SPEAKER_BACK_LEFT +#define PAWIN_SPEAKER_GROUND_REAR_RIGHT PAWIN_SPEAKER_BACK_RIGHT +#define PAWIN_SPEAKER_TOP_MIDDLE PAWIN_SPEAKER_TOP_CENTER +#define PAWIN_SPEAKER_SUPER_WOOFER PAWIN_SPEAKER_LOW_FREQUENCY + + +/* + PaWinWaveFormat is defined here to provide compatibility with + compilation environments which don't have headers defining + WAVEFORMATEXTENSIBLE (e.g. older versions of MSVC, Borland C++ etc. + + The fields for WAVEFORMATEX and WAVEFORMATEXTENSIBLE are declared as an + unsigned char array here to avoid clients who include this file having + a dependency on windows.h and mmsystem.h, and also to to avoid having + to write separate packing pragmas for each compiler. +*/ +#define PAWIN_SIZEOF_WAVEFORMATEX 18 +#define PAWIN_SIZEOF_WAVEFORMATEXTENSIBLE (PAWIN_SIZEOF_WAVEFORMATEX + 22) + +typedef struct{ + unsigned char fields[ PAWIN_SIZEOF_WAVEFORMATEXTENSIBLE ]; + unsigned long extraLongForAlignment; /* ensure that compiler aligns struct to DWORD */ +} PaWinWaveFormat; + +/* + WAVEFORMATEXTENSIBLE fields: + + union { + WORD wValidBitsPerSample; + WORD wSamplesPerBlock; + WORD wReserved; + } Samples; + DWORD dwChannelMask; + GUID SubFormat; +*/ + +#define PAWIN_INDEXOF_WVALIDBITSPERSAMPLE (PAWIN_SIZEOF_WAVEFORMATEX+0) +#define PAWIN_INDEXOF_DWCHANNELMASK (PAWIN_SIZEOF_WAVEFORMATEX+2) +#define PAWIN_INDEXOF_SUBFORMAT (PAWIN_SIZEOF_WAVEFORMATEX+6) + + +/* + Valid values to pass for the waveFormatTag PaWin_InitializeWaveFormatEx and + PaWin_InitializeWaveFormatExtensible functions below. These must match + the standard Windows WAVE_FORMAT_* values. +*/ +#define PAWIN_WAVE_FORMAT_PCM (1) +#define PAWIN_WAVE_FORMAT_IEEE_FLOAT (3) +#define PAWIN_WAVE_FORMAT_DOLBY_AC3_SPDIF (0x0092) +#define PAWIN_WAVE_FORMAT_WMA_SPDIF (0x0164) + + +/* + returns PAWIN_WAVE_FORMAT_PCM or PAWIN_WAVE_FORMAT_IEEE_FLOAT + depending on the sampleFormat parameter. +*/ +int PaWin_SampleFormatToLinearWaveFormatTag( PaSampleFormat sampleFormat ); + +/* + Use the following two functions to initialize the waveformat structure. +*/ + +void PaWin_InitializeWaveFormatEx( PaWinWaveFormat *waveFormat, + int numChannels, PaSampleFormat sampleFormat, int waveFormatTag, double sampleRate ); + + +void PaWin_InitializeWaveFormatExtensible( PaWinWaveFormat *waveFormat, + int numChannels, PaSampleFormat sampleFormat, int waveFormatTag, double sampleRate, + PaWinWaveFormatChannelMask channelMask ); + + +/* Map a channel count to a speaker channel mask */ +PaWinWaveFormatChannelMask PaWin_DefaultChannelMask( int numChannels ); + + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + #endif /* PA_WIN_WAVEFORMAT_H */ \ No newline at end of file diff --git a/portaudio/include/pa_win_wmme.h b/portaudio/portaudio/include/pa_win_wmme.h similarity index 99% rename from portaudio/include/pa_win_wmme.h rename to portaudio/portaudio/include/pa_win_wmme.h index ac5efe782f..f84b68b892 100644 --- a/portaudio/include/pa_win_wmme.h +++ b/portaudio/portaudio/include/pa_win_wmme.h @@ -1,7 +1,7 @@ #ifndef PA_WIN_WMME_H #define PA_WIN_WMME_H /* - * $Id: pa_win_wmme.h 1592 2011-02-04 10:41:58Z rossb $ + * $Id$ * PortAudio Portable Real-Time Audio Library * MME specific extensions * diff --git a/portaudio/include/portaudio.h b/portaudio/portaudio/include/portaudio.h similarity index 95% rename from portaudio/include/portaudio.h rename to portaudio/portaudio/include/portaudio.h index 5e11dad017..738080d439 100644 --- a/portaudio/include/portaudio.h +++ b/portaudio/portaudio/include/portaudio.h @@ -1,7 +1,7 @@ #ifndef PORTAUDIO_H #define PORTAUDIO_H /* - * $Id: portaudio.h 1859 2012-09-01 00:10:13Z philburk $ + * $Id$ * PortAudio Portable Real-Time Audio Library * PortAudio API Header File * Latest version available at: http://www.portaudio.com/ @@ -50,18 +50,69 @@ extern "C" { #endif /* __cplusplus */ - -/** Retrieve the release number of the currently running PortAudio build, - eg 1900. +/** Retrieve the release number of the currently running PortAudio build. + For example, for version "19.5.1" this will return 0x00130501. + + @see paMakeVersionNumber */ int Pa_GetVersion( void ); - /** Retrieve a textual description of the current PortAudio build, - eg "PortAudio V19-devel 13 October 2002". + e.g. "PortAudio V19.5.0-devel, revision 1952M". + The format of the text may change in the future. Do not try to parse the + returned string. + + @deprecated As of 19.5.0, use Pa_GetVersionInfo()->versionText instead. */ const char* Pa_GetVersionText( void ); +/** + Generate a packed integer version number in the same format used + by Pa_GetVersion(). Use this to compare a specified version number with + the currently running version. For example: + + @code + if( Pa_GetVersion() < paMakeVersionNumber(19,5,1) ) {} + @endcode + + @see Pa_GetVersion, Pa_GetVersionInfo + @version Available as of 19.5.0. +*/ +#define paMakeVersionNumber(major, minor, subminor) \ + (((major)&0xFF)<<16 | ((minor)&0xFF)<<8 | ((subminor)&0xFF)) + + +/** + A structure containing PortAudio API version information. + @see Pa_GetVersionInfo, paMakeVersionNumber + @version Available as of 19.5.0. +*/ +typedef struct PaVersionInfo { + int versionMajor; + int versionMinor; + int versionSubMinor; + /** + This is currently the Git revision hash but may change in the future. + The versionControlRevision is updated by running a script before compiling the library. + If the update does not occur, this value may refer to an earlier revision. + */ + const char *versionControlRevision; + /** Version as a string, for example "PortAudio V19.5.0-devel, revision 1952M" */ + const char *versionText; +} PaVersionInfo; + +/** Retrieve version information for the currently running PortAudio build. + @return A pointer to an immutable PaVersionInfo structure. + + @note This function can be called at any time. It does not require PortAudio + to be initialized. The structure pointed to is statically allocated. Do not + attempt to free it or modify it. + + @see PaVersionInfo, paMakeVersionNumber + @version Available as of 19.5.0. +*/ +const PaVersionInfo* Pa_GetVersionInfo( void ); + /** Error codes returned by PortAudio functions. Note that with the exception of paNoError, all PaErrorCodes are negative. @@ -900,7 +951,7 @@ PaError Pa_CloseStream( PaStream *stream ); (ie once a call to Pa_StopStream() will not block). A stream will become inactive after the stream callback returns non-zero, or when Pa_StopStream or Pa_AbortStream is called. For a stream providing audio - output, if the stream callback returns paComplete, or Pa_StopStream is called, + output, if the stream callback returns paComplete, or Pa_StopStream() is called, the stream finished callback will not be called until all generated sample data has been played. @@ -1098,7 +1149,7 @@ PaError Pa_ReadStream( PaStream* stream, /** Write samples to an output stream. This function doesn't return until the - entire buffer has been consumed - this may involve waiting for the operating + entire buffer has been written - this may involve waiting for the operating system to consume the data. @param stream A pointer to an open stream previously created with Pa_OpenStream. diff --git a/portaudio/src/common/pa_allocation.c b/portaudio/portaudio/src/common/pa_allocation.c similarity index 99% rename from portaudio/src/common/pa_allocation.c rename to portaudio/portaudio/src/common/pa_allocation.c index c78c2cf7e2..51fe15aba8 100644 --- a/portaudio/src/common/pa_allocation.c +++ b/portaudio/portaudio/src/common/pa_allocation.c @@ -1,5 +1,5 @@ /* - * $Id: pa_allocation.c 1097 2006-08-26 08:27:53Z rossb $ + * $Id$ * Portable Audio I/O Library allocation group implementation * memory allocation group for tracking allocation groups * diff --git a/portaudio/src/common/pa_allocation.h b/portaudio/portaudio/src/common/pa_allocation.h similarity index 98% rename from portaudio/src/common/pa_allocation.h rename to portaudio/portaudio/src/common/pa_allocation.h index 811dd72e0e..bd1f4b0fd4 100644 --- a/portaudio/src/common/pa_allocation.h +++ b/portaudio/portaudio/src/common/pa_allocation.h @@ -1,7 +1,7 @@ #ifndef PA_ALLOCATION_H #define PA_ALLOCATION_H /* - * $Id: pa_allocation.h 1339 2008-02-15 07:50:33Z rossb $ + * $Id$ * Portable Audio I/O Library allocation context header * memory allocation context for tracking allocation groups * diff --git a/portaudio/src/common/pa_converters.c b/portaudio/portaudio/src/common/pa_converters.c similarity index 99% rename from portaudio/src/common/pa_converters.c rename to portaudio/portaudio/src/common/pa_converters.c index ef65b68a5c..2107f5e289 100644 --- a/portaudio/src/common/pa_converters.c +++ b/portaudio/portaudio/src/common/pa_converters.c @@ -1,5 +1,5 @@ /* - * $Id: pa_converters.c 1748 2011-09-01 22:08:32Z philburk $ + * $Id$ * Portable Audio I/O Library sample conversion mechanism * * Based on the Open Source API proposed by Ross Bencina diff --git a/portaudio/src/common/pa_converters.h b/portaudio/portaudio/src/common/pa_converters.h similarity index 99% rename from portaudio/src/common/pa_converters.h rename to portaudio/portaudio/src/common/pa_converters.h index 7ddfcaa3c2..469f075d6f 100644 --- a/portaudio/src/common/pa_converters.h +++ b/portaudio/portaudio/src/common/pa_converters.h @@ -1,7 +1,7 @@ #ifndef PA_CONVERTERS_H #define PA_CONVERTERS_H /* - * $Id: pa_converters.h 1097 2006-08-26 08:27:53Z rossb $ + * $Id$ * Portable Audio I/O Library sample conversion mechanism * * Based on the Open Source API proposed by Ross Bencina diff --git a/portaudio/src/common/pa_cpuload.c b/portaudio/portaudio/src/common/pa_cpuload.c similarity index 98% rename from portaudio/src/common/pa_cpuload.c rename to portaudio/portaudio/src/common/pa_cpuload.c index 4465a50b62..4adf21adc5 100644 --- a/portaudio/src/common/pa_cpuload.c +++ b/portaudio/portaudio/src/common/pa_cpuload.c @@ -1,5 +1,5 @@ /* - * $Id: pa_cpuload.c 1577 2011-02-01 13:03:45Z rossb $ + * $Id$ * Portable Audio I/O Library CPU Load measurement functions * Portable CPU load measurement facility. * diff --git a/portaudio/src/common/pa_cpuload.h b/portaudio/portaudio/src/common/pa_cpuload.h similarity index 97% rename from portaudio/src/common/pa_cpuload.h rename to portaudio/portaudio/src/common/pa_cpuload.h index 4a594430b8..2a323aa790 100644 --- a/portaudio/src/common/pa_cpuload.h +++ b/portaudio/portaudio/src/common/pa_cpuload.h @@ -1,7 +1,7 @@ #ifndef PA_CPULOAD_H #define PA_CPULOAD_H /* - * $Id: pa_cpuload.h 1097 2006-08-26 08:27:53Z rossb $ + * $Id$ * Portable Audio I/O Library CPU Load measurement functions * Portable CPU load measurement facility. * diff --git a/portaudio/src/common/pa_debugprint.c b/portaudio/portaudio/src/common/pa_debugprint.c similarity index 96% rename from portaudio/src/common/pa_debugprint.c rename to portaudio/portaudio/src/common/pa_debugprint.c index 67e414adb3..f34d4bbf98 100644 --- a/portaudio/src/common/pa_debugprint.c +++ b/portaudio/portaudio/src/common/pa_debugprint.c @@ -1,123 +1,123 @@ -/* - * $Id: pa_log.c $ - * Portable Audio I/O Library Multi-Host API front end - * Validate function parameters and manage multiple host APIs. - * - * Based on the Open Source API proposed by Ross Bencina - * Copyright (c) 1999-2006 Ross Bencina, Phil Burk - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF - * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -/* - * The text above constitutes the entire PortAudio license; however, - * the PortAudio community also makes the following non-binding requests: - * - * Any person wishing to distribute modifications to the Software is - * requested to send the modifications to the original developer so that - * they can be incorporated into the canonical version. It is also - * requested that these non-binding requests be included along with the - * license above. - */ - -/** @file - @ingroup common_src - - @brief Implements log function. - - PaUtil_SetLogPrintFunction can be user called to replace the provided - DefaultLogPrint function, which writes to stderr. - One can NOT pass var_args across compiler/dll boundaries as it is not - "byte code/abi portable". So the technique used here is to allocate a local - a static array, write in it, then callback the user with a pointer to its - start. -*/ - -#include -#include - -#include "pa_debugprint.h" - -// for OutputDebugStringA -#if defined(_MSC_VER) && defined(PA_ENABLE_MSVC_DEBUG_OUTPUT) - #define WIN32_LEAN_AND_MEAN // exclude rare headers - #include "windows.h" -#endif - -// User callback -static PaUtilLogCallback userCB = NULL; - -// Sets user callback -void PaUtil_SetDebugPrintFunction(PaUtilLogCallback cb) -{ - userCB = cb; -} - -/* - If your platform doesnt have vsnprintf, you are stuck with a - VERY dangerous alternative, vsprintf (with no n) -*/ -#if _MSC_VER - /* Some Windows Mobile SDKs don't define vsnprintf but all define _vsnprintf (hopefully). - According to MSDN "vsnprintf is identical to _vsnprintf". So we use _vsnprintf with MSC. - */ - #define VSNPRINTF _vsnprintf -#else - #define VSNPRINTF vsnprintf -#endif - -#define PA_LOG_BUF_SIZE 2048 - -void PaUtil_DebugPrint( const char *format, ... ) -{ - // Optional logging into Output console of Visual Studio -#if defined(_MSC_VER) && defined(PA_ENABLE_MSVC_DEBUG_OUTPUT) - { - char buf[PA_LOG_BUF_SIZE]; - va_list ap; - va_start(ap, format); - VSNPRINTF(buf, sizeof(buf), format, ap); - buf[sizeof(buf)-1] = 0; - OutputDebugStringA(buf); - va_end(ap); - } -#endif - - // Output to User-Callback - if (userCB != NULL) - { - char strdump[PA_LOG_BUF_SIZE]; - va_list ap; - va_start(ap, format); - VSNPRINTF(strdump, sizeof(strdump), format, ap); - strdump[sizeof(strdump)-1] = 0; - userCB(strdump); - va_end(ap); - } - else - // Standard output to stderr - { - va_list ap; - va_start(ap, format); - vfprintf(stderr, format, ap); - va_end(ap); - fflush(stderr); - } -} +/* + * $Id: pa_log.c $ + * Portable Audio I/O Library Multi-Host API front end + * Validate function parameters and manage multiple host APIs. + * + * Based on the Open Source API proposed by Ross Bencina + * Copyright (c) 1999-2006 Ross Bencina, Phil Burk + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files + * (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, + * publish, distribute, sublicense, and/or sell copies of the Software, + * and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +/* + * The text above constitutes the entire PortAudio license; however, + * the PortAudio community also makes the following non-binding requests: + * + * Any person wishing to distribute modifications to the Software is + * requested to send the modifications to the original developer so that + * they can be incorporated into the canonical version. It is also + * requested that these non-binding requests be included along with the + * license above. + */ + +/** @file + @ingroup common_src + + @brief Implements log function. + + PaUtil_SetLogPrintFunction can be user called to replace the provided + DefaultLogPrint function, which writes to stderr. + One can NOT pass var_args across compiler/dll boundaries as it is not + "byte code/abi portable". So the technique used here is to allocate a local + a static array, write in it, then callback the user with a pointer to its + start. +*/ + +#include +#include + +#include "pa_debugprint.h" + +// for OutputDebugStringA +#if defined(_MSC_VER) && defined(PA_ENABLE_MSVC_DEBUG_OUTPUT) + #define WIN32_LEAN_AND_MEAN // exclude rare headers + #include "windows.h" +#endif + +// User callback +static PaUtilLogCallback userCB = NULL; + +// Sets user callback +void PaUtil_SetDebugPrintFunction(PaUtilLogCallback cb) +{ + userCB = cb; +} + +/* + If your platform doesnt have vsnprintf, you are stuck with a + VERY dangerous alternative, vsprintf (with no n) +*/ +#if _MSC_VER + /* Some Windows Mobile SDKs don't define vsnprintf but all define _vsnprintf (hopefully). + According to MSDN "vsnprintf is identical to _vsnprintf". So we use _vsnprintf with MSC. + */ + #define VSNPRINTF _vsnprintf +#else + #define VSNPRINTF vsnprintf +#endif + +#define PA_LOG_BUF_SIZE 2048 + +void PaUtil_DebugPrint( const char *format, ... ) +{ + // Optional logging into Output console of Visual Studio +#if defined(_MSC_VER) && defined(PA_ENABLE_MSVC_DEBUG_OUTPUT) + { + char buf[PA_LOG_BUF_SIZE]; + va_list ap; + va_start(ap, format); + VSNPRINTF(buf, sizeof(buf), format, ap); + buf[sizeof(buf)-1] = 0; + OutputDebugStringA(buf); + va_end(ap); + } +#endif + + // Output to User-Callback + if (userCB != NULL) + { + char strdump[PA_LOG_BUF_SIZE]; + va_list ap; + va_start(ap, format); + VSNPRINTF(strdump, sizeof(strdump), format, ap); + strdump[sizeof(strdump)-1] = 0; + userCB(strdump); + va_end(ap); + } + else + // Standard output to stderr + { + va_list ap; + va_start(ap, format); + vfprintf(stderr, format, ap); + va_end(ap); + fflush(stderr); + } +} diff --git a/portaudio/src/common/pa_debugprint.h b/portaudio/portaudio/src/common/pa_debugprint.h similarity index 97% rename from portaudio/src/common/pa_debugprint.h rename to portaudio/portaudio/src/common/pa_debugprint.h index f333addbaa..5fba7667dc 100644 --- a/portaudio/src/common/pa_debugprint.h +++ b/portaudio/portaudio/src/common/pa_debugprint.h @@ -1,149 +1,149 @@ -#ifndef PA_LOG_H -#define PA_LOG_H -/* - * Log file redirector function - * Copyright (c) 1999-2006 Ross Bencina, Phil Burk - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF - * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -/* - * The text above constitutes the entire PortAudio license; however, - * the PortAudio community also makes the following non-binding requests: - * - * Any person wishing to distribute modifications to the Software is - * requested to send the modifications to the original developer so that - * they can be incorporated into the canonical version. It is also - * requested that these non-binding requests be included along with the - * license above. - */ - -/** @file - @ingroup common_src -*/ - - -#ifdef __cplusplus -extern "C" -{ -#endif /* __cplusplus */ - - - -void PaUtil_DebugPrint( const char *format, ... ); - - -/* - The basic format for log messages is described below. If you need to - add any log messages, please follow this format. - - Function entry (void function): - - "FunctionName called.\n" - - Function entry (non void function): - - "FunctionName called:\n" - "\tParam1Type param1: param1Value\n" - "\tParam2Type param2: param2Value\n" (etc...) - - - Function exit (no return value): - - "FunctionName returned.\n" - - Function exit (simple return value): - - "FunctionName returned:\n" - "\tReturnType: returnValue\n" - - If the return type is an error code, the error text is displayed in () - - If the return type is not an error code, but has taken a special value - because an error occurred, then the reason for the error is shown in [] - - If the return type is a struct ptr, the struct is dumped. - - See the code below for examples -*/ - -/** PA_DEBUG() provides a simple debug message printing facility. The macro - passes it's argument to a printf-like function called PaUtil_DebugPrint() - which prints to stderr and always flushes the stream after printing. - Because preprocessor macros cannot directly accept variable length argument - lists, calls to the macro must include an additional set of parenthesis, eg: - PA_DEBUG(("errorno: %d", 1001 )); -*/ - - -#ifdef PA_ENABLE_DEBUG_OUTPUT -#define PA_DEBUG(x) PaUtil_DebugPrint x ; -#else -#define PA_DEBUG(x) -#endif - - -#ifdef PA_LOG_API_CALLS -#define PA_LOGAPI(x) PaUtil_DebugPrint x - -#define PA_LOGAPI_ENTER(functionName) PaUtil_DebugPrint( functionName " called.\n" ) - -#define PA_LOGAPI_ENTER_PARAMS(functionName) PaUtil_DebugPrint( functionName " called:\n" ) - -#define PA_LOGAPI_EXIT(functionName) PaUtil_DebugPrint( functionName " returned.\n" ) - -#define PA_LOGAPI_EXIT_PAERROR( functionName, result ) \ - PaUtil_DebugPrint( functionName " returned:\n" ); \ - PaUtil_DebugPrint("\tPaError: %d ( %s )\n", result, Pa_GetErrorText( result ) ) - -#define PA_LOGAPI_EXIT_T( functionName, resultFormatString, result ) \ - PaUtil_DebugPrint( functionName " returned:\n" ); \ - PaUtil_DebugPrint("\t" resultFormatString "\n", result ) - -#define PA_LOGAPI_EXIT_PAERROR_OR_T_RESULT( functionName, positiveResultFormatString, result ) \ - PaUtil_DebugPrint( functionName " returned:\n" ); \ - if( result > 0 ) \ - PaUtil_DebugPrint("\t" positiveResultFormatString "\n", result ); \ - else \ - PaUtil_DebugPrint("\tPaError: %d ( %s )\n", result, Pa_GetErrorText( result ) ) -#else -#define PA_LOGAPI(x) -#define PA_LOGAPI_ENTER(functionName) -#define PA_LOGAPI_ENTER_PARAMS(functionName) -#define PA_LOGAPI_EXIT(functionName) -#define PA_LOGAPI_EXIT_PAERROR( functionName, result ) -#define PA_LOGAPI_EXIT_T( functionName, resultFormatString, result ) -#define PA_LOGAPI_EXIT_PAERROR_OR_T_RESULT( functionName, positiveResultFormatString, result ) -#endif - - -typedef void (*PaUtilLogCallback ) (const char *log); - -/** - Install user provided log function -*/ -void PaUtil_SetDebugPrintFunction(PaUtilLogCallback cb); - - - -#ifdef __cplusplus -} -#endif /* __cplusplus */ -#endif /* PA_LOG_H */ +#ifndef PA_LOG_H +#define PA_LOG_H +/* + * Log file redirector function + * Copyright (c) 1999-2006 Ross Bencina, Phil Burk + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files + * (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, + * publish, distribute, sublicense, and/or sell copies of the Software, + * and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +/* + * The text above constitutes the entire PortAudio license; however, + * the PortAudio community also makes the following non-binding requests: + * + * Any person wishing to distribute modifications to the Software is + * requested to send the modifications to the original developer so that + * they can be incorporated into the canonical version. It is also + * requested that these non-binding requests be included along with the + * license above. + */ + +/** @file + @ingroup common_src +*/ + + +#ifdef __cplusplus +extern "C" +{ +#endif /* __cplusplus */ + + + +void PaUtil_DebugPrint( const char *format, ... ); + + +/* + The basic format for log messages is described below. If you need to + add any log messages, please follow this format. + + Function entry (void function): + + "FunctionName called.\n" + + Function entry (non void function): + + "FunctionName called:\n" + "\tParam1Type param1: param1Value\n" + "\tParam2Type param2: param2Value\n" (etc...) + + + Function exit (no return value): + + "FunctionName returned.\n" + + Function exit (simple return value): + + "FunctionName returned:\n" + "\tReturnType: returnValue\n" + + If the return type is an error code, the error text is displayed in () + + If the return type is not an error code, but has taken a special value + because an error occurred, then the reason for the error is shown in [] + + If the return type is a struct ptr, the struct is dumped. + + See the code below for examples +*/ + +/** PA_DEBUG() provides a simple debug message printing facility. The macro + passes it's argument to a printf-like function called PaUtil_DebugPrint() + which prints to stderr and always flushes the stream after printing. + Because preprocessor macros cannot directly accept variable length argument + lists, calls to the macro must include an additional set of parenthesis, eg: + PA_DEBUG(("errorno: %d", 1001 )); +*/ + + +#ifdef PA_ENABLE_DEBUG_OUTPUT +#define PA_DEBUG(x) PaUtil_DebugPrint x ; +#else +#define PA_DEBUG(x) +#endif + + +#ifdef PA_LOG_API_CALLS +#define PA_LOGAPI(x) PaUtil_DebugPrint x + +#define PA_LOGAPI_ENTER(functionName) PaUtil_DebugPrint( functionName " called.\n" ) + +#define PA_LOGAPI_ENTER_PARAMS(functionName) PaUtil_DebugPrint( functionName " called:\n" ) + +#define PA_LOGAPI_EXIT(functionName) PaUtil_DebugPrint( functionName " returned.\n" ) + +#define PA_LOGAPI_EXIT_PAERROR( functionName, result ) \ + PaUtil_DebugPrint( functionName " returned:\n" ); \ + PaUtil_DebugPrint("\tPaError: %d ( %s )\n", result, Pa_GetErrorText( result ) ) + +#define PA_LOGAPI_EXIT_T( functionName, resultFormatString, result ) \ + PaUtil_DebugPrint( functionName " returned:\n" ); \ + PaUtil_DebugPrint("\t" resultFormatString "\n", result ) + +#define PA_LOGAPI_EXIT_PAERROR_OR_T_RESULT( functionName, positiveResultFormatString, result ) \ + PaUtil_DebugPrint( functionName " returned:\n" ); \ + if( result > 0 ) \ + PaUtil_DebugPrint("\t" positiveResultFormatString "\n", result ); \ + else \ + PaUtil_DebugPrint("\tPaError: %d ( %s )\n", result, Pa_GetErrorText( result ) ) +#else +#define PA_LOGAPI(x) +#define PA_LOGAPI_ENTER(functionName) +#define PA_LOGAPI_ENTER_PARAMS(functionName) +#define PA_LOGAPI_EXIT(functionName) +#define PA_LOGAPI_EXIT_PAERROR( functionName, result ) +#define PA_LOGAPI_EXIT_T( functionName, resultFormatString, result ) +#define PA_LOGAPI_EXIT_PAERROR_OR_T_RESULT( functionName, positiveResultFormatString, result ) +#endif + + +typedef void (*PaUtilLogCallback ) (const char *log); + +/** + Install user provided log function +*/ +void PaUtil_SetDebugPrintFunction(PaUtilLogCallback cb); + + + +#ifdef __cplusplus +} +#endif /* __cplusplus */ +#endif /* PA_LOG_H */ diff --git a/portaudio/src/common/pa_dither.c b/portaudio/portaudio/src/common/pa_dither.c similarity index 99% rename from portaudio/src/common/pa_dither.c rename to portaudio/portaudio/src/common/pa_dither.c index 7a1b13125b..140e480afb 100644 --- a/portaudio/src/common/pa_dither.c +++ b/portaudio/portaudio/src/common/pa_dither.c @@ -1,5 +1,5 @@ /* - * $Id: pa_dither.c 1418 2009-10-12 21:00:53Z philburk $ + * $Id$ * Portable Audio I/O Library triangular dither generator * * Based on the Open Source API proposed by Ross Bencina diff --git a/portaudio/src/common/pa_dither.h b/portaudio/portaudio/src/common/pa_dither.h similarity index 98% rename from portaudio/src/common/pa_dither.h rename to portaudio/portaudio/src/common/pa_dither.h index a5131b27fa..12ffc4fc67 100644 --- a/portaudio/src/common/pa_dither.h +++ b/portaudio/portaudio/src/common/pa_dither.h @@ -1,7 +1,7 @@ #ifndef PA_DITHER_H #define PA_DITHER_H /* - * $Id: pa_dither.h 1418 2009-10-12 21:00:53Z philburk $ + * $Id$ * Portable Audio I/O Library triangular dither generator * * Based on the Open Source API proposed by Ross Bencina diff --git a/portaudio/src/common/pa_endianness.h b/portaudio/portaudio/src/common/pa_endianness.h similarity index 98% rename from portaudio/src/common/pa_endianness.h rename to portaudio/portaudio/src/common/pa_endianness.h index 84e904ca7b..9e8e059624 100644 --- a/portaudio/src/common/pa_endianness.h +++ b/portaudio/portaudio/src/common/pa_endianness.h @@ -1,7 +1,7 @@ #ifndef PA_ENDIANNESS_H #define PA_ENDIANNESS_H /* - * $Id: pa_endianness.h 1324 2008-01-27 02:03:30Z bjornroche $ + * $Id$ * Portable Audio I/O Library current platform endianness macros * * Based on the Open Source API proposed by Ross Bencina diff --git a/portaudio/src/common/pa_front.c b/portaudio/portaudio/src/common/pa_front.c similarity index 96% rename from portaudio/src/common/pa_front.c rename to portaudio/portaudio/src/common/pa_front.c index 95d238b41e..9d30f4837a 100644 --- a/portaudio/src/common/pa_front.c +++ b/portaudio/portaudio/src/common/pa_front.c @@ -1,5 +1,5 @@ /* - * $Id: pa_front.c 1880 2012-12-04 18:39:48Z rbencina $ + * $Id$ * Portable Audio I/O Library Multi-Host API front end * Validate function parameters and manage multiple host APIs. * @@ -27,26 +27,26 @@ */ /* - * The text above constitutes the entire PortAudio license; however, + * The text above constitutes the entire PortAudio license; however, * the PortAudio community also makes the following non-binding requests: * * Any person wishing to distribute modifications to the Software is * requested to send the modifications to the original developer so that - * they can be incorporated into the canonical version. It is also - * requested that these non-binding requests be included along with the + * they can be incorporated into the canonical version. It is also + * requested that these non-binding requests be included along with the * license above. */ /** @file @ingroup common_src - @brief Implements PortAudio API functions defined in portaudio.h, checks + @brief Implements PortAudio API functions defined in portaudio.h, checks some errors, delegates platform-specific behavior to host API implementations. - - Implements the functions defined in the PortAudio API (portaudio.h), - validates some parameters and checks for state inconsistencies before - forwarding API requests to specific Host API implementations (via the - interface declared in pa_hostapi.h), and Streams (via the interface + + Implements the functions defined in the PortAudio API (portaudio.h), + validates some parameters and checks for state inconsistencies before + forwarding API requests to specific Host API implementations (via the + interface declared in pa_hostapi.h), and Streams (via the interface declared in pa_stream.h). This file manages initialization and termination of Host API @@ -65,6 +65,7 @@ #include #include #include +#include /* needed for strtol() */ #include /* needed by PA_VALIDATE_ENDIANNESS */ #include "portaudio.h" @@ -76,25 +77,63 @@ #include "pa_trace.h" /* still usefull?*/ #include "pa_debugprint.h" +#ifndef PA_GIT_REVISION +#include "pa_gitrevision.h" +#endif + +/** + * This is incremented if we make incompatible API changes. + * This version scheme is based loosely on http://semver.org/ + */ +#define paVersionMajor 19 + +/** + * This is incremented when we add functionality in a backwards-compatible manner. + * Or it is set to zero when paVersionMajor is incremented. + */ +#define paVersionMinor 6 -#define PA_VERSION_ 1899 -#define PA_VERSION_TEXT_ "PortAudio V19-devel (built " __DATE__ " " __TIME__ ")" +/** + * This is incremented when we make backwards-compatible bug fixes. + * Or it is set to zero when paVersionMinor changes. + */ +#define paVersionSubMinor 0 +/** + * This is a combination of paVersionMajor, paVersionMinor and paVersionSubMinor. + * It will always increase so that version numbers can be compared as integers to + * see which is later. + */ +#define paVersion paMakeVersionNumber(paVersionMajor, paVersionMinor, paVersionSubMinor) +#define STRINGIFY(x) #x +#define TOSTRING(x) STRINGIFY(x) +#define PA_VERSION_STRING_ TOSTRING(paVersionMajor) "." TOSTRING(paVersionMinor) "." TOSTRING(paVersionSubMinor) +#define PA_VERSION_TEXT_ "PortAudio V" PA_VERSION_STRING_ "-devel, revision " TOSTRING(PA_GIT_REVISION) int Pa_GetVersion( void ) { - return PA_VERSION_; + return paVersion; } - const char* Pa_GetVersionText( void ) { return PA_VERSION_TEXT_; } +static PaVersionInfo versionInfo_ = { + /*.versionMajor =*/ paVersionMajor, + /*.versionMinor =*/ paVersionMinor, + /*.versionSubMinor =*/ paVersionSubMinor, + /*.versionControlRevision =*/ TOSTRING(PA_GIT_REVISION), + /*.versionText =*/ PA_VERSION_TEXT_ +}; +const PaVersionInfo* Pa_GetVersionInfo( void ) +{ + return &versionInfo_; +} #define PA_LAST_HOST_ERROR_TEXT_LENGTH_ 1024 @@ -170,7 +209,7 @@ static PaError InitializeHostApis( void ) if( !hostApis_ ) { result = paInsufficientMemory; - goto error; + goto error; } hostApisCount_ = 0; @@ -196,11 +235,11 @@ static PaError InitializeHostApis( void ) assert( hostApi->info.defaultInputDevice < hostApi->info.deviceCount ); assert( hostApi->info.defaultOutputDevice < hostApi->info.deviceCount ); - /* the first successfully initialized host API with a default input *or* + /* the first successfully initialized host API with a default input *or* output device is used as the default host API. */ if( (defaultHostApiIndex_ == -1) && - ( hostApi->info.defaultInputDevice != paNoDevice + ( hostApi->info.defaultInputDevice != paNoDevice || hostApi->info.defaultOutputDevice != paNoDevice ) ) { defaultHostApiIndex_ = hostApisCount_; @@ -238,7 +277,7 @@ static PaError InitializeHostApis( void ) belongs and returns it. if is non-null, the host specific device index is returned in it. returns -1 if is out of range. - + */ static int FindHostApi( PaDeviceIndex device, int *hostSpecificDeviceIndex ) { @@ -328,7 +367,7 @@ PaError Pa_Initialize( void ) { PA_VALIDATE_TYPE_SIZES; PA_VALIDATE_ENDIANNESS; - + PaUtil_InitializeClock(); PaUtil_ResetTraceMessages(); @@ -351,7 +390,8 @@ PaError Pa_Terminate( void ) if( PA_IS_INITIALISED_ ) { - if( --initializationCount_ == 0 ) + // leave initializationCount_>0 so that Pa_CloseStream() can execute + if( initializationCount_ == 1 ) { CloseOpenStreams(); @@ -359,6 +399,7 @@ PaError Pa_Terminate( void ) PaUtil_DumpTraceMessages(); } + --initializationCount_; result = paNoError; } else @@ -415,11 +456,11 @@ const char *Pa_GetErrorText( PaError errorCode ) case paCanNotWriteToAnInputOnlyStream: result = "Can't write to an input only stream"; break; case paIncompatibleStreamHostApi: result = "Incompatible stream host API"; break; case paBadBufferPtr: result = "Bad buffer pointer"; break; - default: + default: if( errorCode > 0 ) - result = "Invalid error code (value greater than zero)"; + result = "Invalid error code (value greater than zero)"; else - result = "Invalid error code"; + result = "Invalid error code"; break; } return result; @@ -430,7 +471,7 @@ PaHostApiIndex Pa_HostApiTypeIdToHostApiIndex( PaHostApiTypeId type ) { PaHostApiIndex result; int i; - + PA_LOGAPI_ENTER_PARAMS( "Pa_HostApiTypeIdToHostApiIndex" ); PA_LOGAPI(("\tPaHostApiTypeId type: %d\n", type )); @@ -441,14 +482,14 @@ PaHostApiIndex Pa_HostApiTypeIdToHostApiIndex( PaHostApiTypeId type ) else { result = paHostApiNotFound; - + for( i=0; i < hostApisCount_; ++i ) { if( hostApis_[i]->info.type == type ) { result = i; break; - } + } } } @@ -463,7 +504,7 @@ PaError PaUtil_GetHostApiRepresentation( struct PaUtilHostApiRepresentation **ho { PaError result; int i; - + if( !PA_IS_INITIALISED_ ) { result = paNotInitialized; @@ -471,7 +512,7 @@ PaError PaUtil_GetHostApiRepresentation( struct PaUtilHostApiRepresentation **ho else { result = paHostApiNotFound; - + for( i=0; i < hostApisCount_; ++i ) { if( hostApis_[i]->info.type == type ) @@ -492,7 +533,7 @@ PaError PaUtil_DeviceIndexToHostApiDeviceIndex( { PaError result; PaDeviceIndex x; - + x = device - hostApi->privatePaFrontInfo.baseDeviceIndex; if( x < 0 || x >= hostApi->info.deviceCount ) @@ -577,7 +618,7 @@ const PaHostApiInfo* Pa_GetHostApiInfo( PaHostApiIndex hostApi ) else if( hostApi < 0 || hostApi >= hostApisCount_ ) { info = NULL; - + PA_LOGAPI(("Pa_GetHostApiInfo returned:\n" )); PA_LOGAPI(("\tPaHostApiInfo*: NULL [ hostApi out of range ]\n" )); @@ -686,7 +727,7 @@ PaDeviceIndex Pa_GetDefaultOutputDevice( void ) { PaHostApiIndex hostApi; PaDeviceIndex result; - + PA_LOGAPI_ENTER( "Pa_GetDefaultOutputDevice" ); hostApi = Pa_GetDefaultHostApi(); @@ -770,7 +811,7 @@ static int SampleFormatIsValid( PaSampleFormat format ) ValidateOpenStreamParameters() checks that parameters to Pa_OpenStream() conform to the expected values as described below. This function is also designed to be used with the proposed Pa_IsFormatSupported() function. - + There are basically two types of validation that could be performed: Generic conformance validation, and device capability mismatch validation. This function performs only generic conformance validation. @@ -779,21 +820,21 @@ static int SampleFormatIsValid( PaSampleFormat format ) combinations of parameters - for example, even if the sampleRate seems ok, it might not be for a duplex stream - we have no way of checking this in an API-neutral way, so we don't try. - + On success the function returns PaNoError and fills in hostApi, hostApiInputDeviceID, and hostApiOutputDeviceID fields. On failure the function returns an error code indicating the first encountered parameter error. - - + + If ValidateOpenStreamParameters() returns paNoError, the following assertions are guaranteed to be true. - + - at least one of inputParameters & outputParmeters is valid (not NULL) - if inputParameters & outputParameters are both valid, that inputParameters->device & outputParameters->device both use the same host api - + PaDeviceIndex inputParameters->device - is within range (0 to Pa_GetDeviceCount-1) Or: - is paUseHostApiSpecificDeviceSpecification and @@ -803,30 +844,30 @@ static int SampleFormatIsValid( PaSampleFormat format ) int inputParameters->channelCount - if inputParameters->device is not paUseHostApiSpecificDeviceSpecification, channelCount is > 0 - upper bound is NOT validated against device capabilities - + PaSampleFormat inputParameters->sampleFormat - is one of the sample formats defined in portaudio.h void *inputParameters->hostApiSpecificStreamInfo - if supplied its hostApi field matches the input device's host Api - + PaDeviceIndex outputParmeters->device - is within range (0 to Pa_GetDeviceCount-1) - + int outputParmeters->channelCount - if inputDevice is valid, channelCount is > 0 - upper bound is NOT validated against device capabilities - + PaSampleFormat outputParmeters->sampleFormat - is one of the sample formats defined in portaudio.h - + void *outputParmeters->hostApiSpecificStreamInfo - if supplied its hostApi field matches the output device's host Api - + double sampleRate - is not an 'absurd' rate (less than 1000. or greater than 384000.) - sampleRate is NOT validated against device capabilities - + PaStreamFlags streamFlags - unused platform neutral flags are zero - paNeverDropInput is only used for full-duplex callback streams with @@ -953,7 +994,7 @@ static PaError ValidateOpenStreamParameters( != (*hostApi)->info.type ) return paIncompatibleHostApiSpecificStreamInfo; } - } + } if( (inputParameters != NULL) && (outputParameters != NULL) ) { @@ -962,8 +1003,8 @@ static PaError ValidateOpenStreamParameters( return paBadIODeviceCombination; } } - - + + /* Check for absurd sample rates. */ if( (sampleRate < 1000.0) || (sampleRate > 384000.0) ) return paInvalidSampleRate; @@ -985,7 +1026,7 @@ static PaError ValidateOpenStreamParameters( if( framesPerBuffer != paFramesPerBufferUnspecified ) return paInvalidFlag; } - + return paNoError; } @@ -1025,7 +1066,7 @@ PaError Pa_IsFormatSupported( const PaStreamParameters *inputParameters, PA_LOGAPI(("\tPaTime outputParameters->suggestedLatency: %f\n", outputParameters->suggestedLatency )); PA_LOGAPI(("\tvoid *outputParameters->hostApiSpecificStreamInfo: 0x%p\n", outputParameters->hostApiSpecificStreamInfo )); } - + PA_LOGAPI(("\tdouble sampleRate: %g\n", sampleRate )); #endif @@ -1048,7 +1089,7 @@ PaError Pa_IsFormatSupported( const PaStreamParameters *inputParameters, PA_LOGAPI_EXIT_PAERROR( "Pa_IsFormatSupported", result ); return result; } - + if( inputParameters ) { @@ -1135,7 +1176,7 @@ PaError Pa_OpenStream( PaStream** stream, PA_LOGAPI(("\tPaTime outputParameters->suggestedLatency: %f\n", outputParameters->suggestedLatency )); PA_LOGAPI(("\tvoid *outputParameters->hostApiSpecificStreamInfo: 0x%p\n", outputParameters->hostApiSpecificStreamInfo )); } - + PA_LOGAPI(("\tdouble sampleRate: %g\n", sampleRate )); PA_LOGAPI(("\tunsigned long framesPerBuffer: %d\n", framesPerBuffer )); PA_LOGAPI(("\tPaStreamFlags streamFlags: 0x%x\n", streamFlags )); @@ -1182,7 +1223,7 @@ PaError Pa_OpenStream( PaStream** stream, PA_LOGAPI(("\tPaError: %d ( %s )\n", result, Pa_GetErrorText( result ) )); return result; } - + if( inputParameters ) { @@ -1256,8 +1297,8 @@ PaError Pa_OpenDefaultStream( PaStream** stream, { hostApiInputParameters.device = Pa_GetDefaultInputDevice(); if( hostApiInputParameters.device == paNoDevice ) - return paDeviceUnavailable; - + return paDeviceUnavailable; + hostApiInputParameters.channelCount = inputChannelCount; hostApiInputParameters.sampleFormat = sampleFormat; /* defaultHighInputLatency is used below instead of @@ -1265,7 +1306,7 @@ PaError Pa_OpenDefaultStream( PaStream** stream, stream to work reliably than it is for it to work with the lowest latency. */ - hostApiInputParameters.suggestedLatency = + hostApiInputParameters.suggestedLatency = Pa_GetDeviceInfo( hostApiInputParameters.device )->defaultHighInputLatency; hostApiInputParameters.hostApiSpecificStreamInfo = NULL; hostApiInputParametersPtr = &hostApiInputParameters; @@ -1279,7 +1320,7 @@ PaError Pa_OpenDefaultStream( PaStream** stream, { hostApiOutputParameters.device = Pa_GetDefaultOutputDevice(); if( hostApiOutputParameters.device == paNoDevice ) - return paDeviceUnavailable; + return paDeviceUnavailable; hostApiOutputParameters.channelCount = outputChannelCount; hostApiOutputParameters.sampleFormat = sampleFormat; @@ -1663,7 +1704,7 @@ PaError Pa_WriteStream( PaStream* stream, else if( result == 1 ) { result = paStreamIsStopped; - } + } } } diff --git a/portaudio/portaudio/src/common/pa_gitrevision.h b/portaudio/portaudio/src/common/pa_gitrevision.h new file mode 100644 index 0000000000..6c2e0f636d --- /dev/null +++ b/portaudio/portaudio/src/common/pa_gitrevision.h @@ -0,0 +1 @@ +#define PA_GIT_REVISION c0d239712d9afcd4b7ad58b6e1ba97a1d789d9eb diff --git a/portaudio/src/common/pa_hostapi.h b/portaudio/portaudio/src/common/pa_hostapi.h similarity index 99% rename from portaudio/src/common/pa_hostapi.h rename to portaudio/portaudio/src/common/pa_hostapi.h index d38b8fe916..54b527ea81 100644 --- a/portaudio/src/common/pa_hostapi.h +++ b/portaudio/portaudio/src/common/pa_hostapi.h @@ -1,7 +1,7 @@ #ifndef PA_HOSTAPI_H #define PA_HOSTAPI_H /* - * $Id: pa_hostapi.h 1880 2012-12-04 18:39:48Z rbencina $ + * $Id$ * Portable Audio I/O Library * host api representation * diff --git a/portaudio/src/common/pa_memorybarrier.h b/portaudio/portaudio/src/common/pa_memorybarrier.h similarity index 100% rename from portaudio/src/common/pa_memorybarrier.h rename to portaudio/portaudio/src/common/pa_memorybarrier.h diff --git a/portaudio/src/common/pa_process.c b/portaudio/portaudio/src/common/pa_process.c similarity index 99% rename from portaudio/src/common/pa_process.c rename to portaudio/portaudio/src/common/pa_process.c index f6052d141a..0faf8414cf 100644 --- a/portaudio/src/common/pa_process.c +++ b/portaudio/portaudio/src/common/pa_process.c @@ -1,5 +1,5 @@ /* - * $Id: pa_process.c 1913 2013-11-18 11:42:27Z gineera $ + * $Id$ * Portable Audio I/O Library * streamCallback <-> host buffer processing adapter * @@ -744,7 +744,7 @@ static unsigned long NonAdaptingProcess( PaUtilBufferProcessor *bp, destChannelStrideBytes = bp->bytesPerUserInputSample; /* process host buffer directly, or use temp buffer if formats differ or host buffer non-interleaved, - * or if the number of channels differs between the host (set in stride) and the user */ + * or if num channels differs between the host (set in stride) and the user (eg with some Alsa hw:) */ if( bp->userInputSampleFormatIsEqualToHost && bp->hostInputIsInterleaved && bp->hostInputChannels[0][0].data && bp->inputChannelCount == hostInputChannels[0].stride ) { @@ -834,8 +834,10 @@ static unsigned long NonAdaptingProcess( PaUtilBufferProcessor *bp, { if( bp->userOutputIsInterleaved ) { - /* process host buffer directly, or use temp buffer if formats differ or host buffer non-interleaved */ - if( bp->userOutputSampleFormatIsEqualToHost && bp->hostOutputIsInterleaved ) + /* process host buffer directly, or use temp buffer if formats differ or host buffer non-interleaved, + * or if num channels differs between the host (set in stride) and the user (eg with some Alsa hw:) */ + if( bp->userOutputSampleFormatIsEqualToHost && bp->hostOutputIsInterleaved + && bp->outputChannelCount == hostOutputChannels[0].stride ) { userOutput = hostOutputChannels[0].data; skipOutputConvert = 1; diff --git a/portaudio/src/common/pa_process.h b/portaudio/portaudio/src/common/pa_process.h similarity index 99% rename from portaudio/src/common/pa_process.h rename to portaudio/portaudio/src/common/pa_process.h index 4d5f56ad63..37b91d7218 100644 --- a/portaudio/src/common/pa_process.h +++ b/portaudio/portaudio/src/common/pa_process.h @@ -1,7 +1,7 @@ #ifndef PA_PROCESS_H #define PA_PROCESS_H /* - * $Id: pa_process.h 1668 2011-05-02 17:07:11Z rossb $ + * $Id$ * Portable Audio I/O Library callback buffer processing adapters * * Based on the Open Source API proposed by Ross Bencina diff --git a/portaudio/src/common/pa_ringbuffer.c b/portaudio/portaudio/src/common/pa_ringbuffer.c similarity index 99% rename from portaudio/src/common/pa_ringbuffer.c rename to portaudio/portaudio/src/common/pa_ringbuffer.c index 19c91497ce..93b3e430a5 100644 --- a/portaudio/src/common/pa_ringbuffer.c +++ b/portaudio/portaudio/src/common/pa_ringbuffer.c @@ -1,5 +1,5 @@ /* - * $Id: pa_ringbuffer.c 1738 2011-08-18 11:47:28Z rossb $ + * $Id$ * Portable Audio I/O Library * Ring Buffer utility. * diff --git a/portaudio/src/common/pa_ringbuffer.h b/portaudio/portaudio/src/common/pa_ringbuffer.h similarity index 99% rename from portaudio/src/common/pa_ringbuffer.h rename to portaudio/portaudio/src/common/pa_ringbuffer.h index 0cab3a58e0..9edba0dd65 100644 --- a/portaudio/src/common/pa_ringbuffer.h +++ b/portaudio/portaudio/src/common/pa_ringbuffer.h @@ -1,7 +1,7 @@ #ifndef PA_RINGBUFFER_H #define PA_RINGBUFFER_H /* - * $Id: pa_ringbuffer.h 1873 2012-10-07 19:00:11Z philburk $ + * $Id$ * Portable Audio I/O Library * Ring Buffer utility. * diff --git a/portaudio/src/common/pa_stream.c b/portaudio/portaudio/src/common/pa_stream.c similarity index 98% rename from portaudio/src/common/pa_stream.c rename to portaudio/portaudio/src/common/pa_stream.c index ea91821f8d..03a0ee6ee3 100644 --- a/portaudio/src/common/pa_stream.c +++ b/portaudio/portaudio/src/common/pa_stream.c @@ -1,5 +1,5 @@ /* - * $Id: pa_stream.c 1339 2008-02-15 07:50:33Z rossb $ + * $Id$ * Portable Audio I/O Library * stream interface * diff --git a/portaudio/src/common/pa_stream.h b/portaudio/portaudio/src/common/pa_stream.h similarity index 99% rename from portaudio/src/common/pa_stream.h rename to portaudio/portaudio/src/common/pa_stream.h index 8d707b79cf..678e2ad5ea 100644 --- a/portaudio/src/common/pa_stream.h +++ b/portaudio/portaudio/src/common/pa_stream.h @@ -1,7 +1,7 @@ #ifndef PA_STREAM_H #define PA_STREAM_H /* - * $Id: pa_stream.h 1339 2008-02-15 07:50:33Z rossb $ + * $Id$ * Portable Audio I/O Library * stream interface * diff --git a/portaudio/src/common/pa_trace.c b/portaudio/portaudio/src/common/pa_trace.c similarity index 99% rename from portaudio/src/common/pa_trace.c rename to portaudio/portaudio/src/common/pa_trace.c index 6a41cbb36a..818abffbee 100644 --- a/portaudio/src/common/pa_trace.c +++ b/portaudio/portaudio/src/common/pa_trace.c @@ -1,5 +1,5 @@ /* - * $Id: pa_trace.c 1916 2014-01-17 03:45:15Z philburk $ + * $Id$ * Portable Audio I/O Library Trace Facility * Store trace information in real-time for later printing. * diff --git a/portaudio/src/common/pa_trace.h b/portaudio/portaudio/src/common/pa_trace.h similarity index 98% rename from portaudio/src/common/pa_trace.h rename to portaudio/portaudio/src/common/pa_trace.h index 612dbf327d..6dfaeb79ec 100644 --- a/portaudio/src/common/pa_trace.h +++ b/portaudio/portaudio/src/common/pa_trace.h @@ -1,7 +1,7 @@ #ifndef PA_TRACE_H #define PA_TRACE_H /* - * $Id: pa_trace.h 1812 2012-02-14 09:32:57Z robiwan $ + * $Id$ * Portable Audio I/O Library Trace Facility * Store trace information in real-time for later printing. * diff --git a/portaudio/src/common/pa_types.h b/portaudio/portaudio/src/common/pa_types.h similarity index 100% rename from portaudio/src/common/pa_types.h rename to portaudio/portaudio/src/common/pa_types.h diff --git a/portaudio/src/common/pa_util.h b/portaudio/portaudio/src/common/pa_util.h similarity index 99% rename from portaudio/src/common/pa_util.h rename to portaudio/portaudio/src/common/pa_util.h index c454ea771d..ad5dac5287 100644 --- a/portaudio/src/common/pa_util.h +++ b/portaudio/portaudio/src/common/pa_util.h @@ -1,7 +1,7 @@ #ifndef PA_UTIL_H #define PA_UTIL_H /* - * $Id: pa_util.h 1584 2011-02-02 18:58:17Z rossb $ + * $Id$ * Portable Audio I/O Library implementation utilities header * common implementation utilities and interfaces * diff --git a/portaudio/src/hostapi/alsa/pa_linux_alsa.c b/portaudio/portaudio/src/hostapi/alsa/pa_linux_alsa.c similarity index 99% rename from portaudio/src/hostapi/alsa/pa_linux_alsa.c rename to portaudio/portaudio/src/hostapi/alsa/pa_linux_alsa.c index ad63837b59..584cde8901 100644 --- a/portaudio/src/hostapi/alsa/pa_linux_alsa.c +++ b/portaudio/portaudio/src/hostapi/alsa/pa_linux_alsa.c @@ -1,5 +1,5 @@ /* - * $Id: pa_linux_alsa.c 1911 2013-10-17 12:44:09Z gineera $ + * $Id$ * PortAudio Portable Real-Time Audio Library * Latest Version at: http://www.portaudio.com * ALSA implementation by Joshua Haberman and Arve Knudsen @@ -3805,8 +3805,23 @@ static PaError PaAlsaStream_WaitForFrames( PaAlsaStream *self, unsigned long *fr totalFds += self->playback.nfds; } +#ifdef PTHREAD_CANCELED + if( self->callbackMode ) + { + /* To allow 'Abort' to terminate the callback thread, enable cancelability just for poll() (& disable after) */ + pthread_setcancelstate( PTHREAD_CANCEL_ENABLE, NULL ); + } +#endif + pollResults = poll( self->pfds, totalFds, pollTimeout ); +#ifdef PTHREAD_CANCELED + if( self->callbackMode ) + { + pthread_setcancelstate( PTHREAD_CANCEL_DISABLE, NULL ); + } +#endif + if( pollResults < 0 ) { /* XXX: Depend on preprocessor condition? */ @@ -4175,12 +4190,18 @@ static void *CallbackThreadFunc( void *userData ) int streamStarted = 0; assert( stream ); + /* Not implemented */ + assert( !stream->primeBuffers ); /* Execute OnExit when exiting */ pthread_cleanup_push( &OnExit, stream ); - - /* Not implemented */ - assert( !stream->primeBuffers ); +#ifdef PTHREAD_CANCELED + /* 'Abort' will use thread cancellation to terminate the callback thread, but the Alsa-lib functions + * are NOT cancel-safe, (and can end up in an inconsistent state). So, disable cancelability for + * the thread here, and just re-enable it for the poll() in PaAlsaStream_WaitForFrames(). */ + pthread_testcancel(); + pthread_setcancelstate( PTHREAD_CANCEL_DISABLE, NULL ); +#endif /* @concern StreamStart If the output is being primed the output pcm needs to be prepared, otherwise the * stream is started immediately. The latter involves signaling the waiting main thread. @@ -4265,10 +4286,6 @@ static void *CallbackThreadFunc( void *userData ) { xrun = 0; -#ifdef PTHREAD_CANCELED - pthread_testcancel(); -#endif - /** @concern Xruns Under/overflows are to be reported to the callback */ if( stream->underrun > 0.0 ) { @@ -4299,11 +4316,12 @@ static void *CallbackThreadFunc( void *userData ) #if 0 CallbackUpdate( &stream->threading ); #endif + CalculateTimeInfo( stream, &timeInfo ); PaUtil_BeginBufferProcessing( &stream->bufferProcessor, &timeInfo, cbFlags ); cbFlags = 0; - /* CPU load measurement should include processing activivity external to the stream callback */ + /* CPU load measurement should include processing activity external to the stream callback */ PaUtil_BeginCpuLoadMeasurement( &stream->cpuLoadMeasurer ); framesGot = framesAvail; @@ -4334,7 +4352,6 @@ static void *CallbackThreadFunc( void *userData ) { /* Go back to polling for more frames */ break; - } if( paContinue != callbackResult ) diff --git a/portaudio/src/hostapi/asio/iasiothiscallresolver.cpp b/portaudio/portaudio/src/hostapi/asio/iasiothiscallresolver.cpp similarity index 100% rename from portaudio/src/hostapi/asio/iasiothiscallresolver.cpp rename to portaudio/portaudio/src/hostapi/asio/iasiothiscallresolver.cpp diff --git a/portaudio/src/hostapi/asio/iasiothiscallresolver.h b/portaudio/portaudio/src/hostapi/asio/iasiothiscallresolver.h similarity index 100% rename from portaudio/src/hostapi/asio/iasiothiscallresolver.h rename to portaudio/portaudio/src/hostapi/asio/iasiothiscallresolver.h diff --git a/portaudio/src/hostapi/asio/pa_asio.cpp b/portaudio/portaudio/src/hostapi/asio/pa_asio.cpp similarity index 100% rename from portaudio/src/hostapi/asio/pa_asio.cpp rename to portaudio/portaudio/src/hostapi/asio/pa_asio.cpp diff --git a/portaudio/src/hostapi/coreaudio/pa_mac_core.c b/portaudio/portaudio/src/hostapi/coreaudio/pa_mac_core.c similarity index 94% rename from portaudio/src/hostapi/coreaudio/pa_mac_core.c rename to portaudio/portaudio/src/hostapi/coreaudio/pa_mac_core.c index 14632d935d..257e9dedc3 100644 --- a/portaudio/src/hostapi/coreaudio/pa_mac_core.c +++ b/portaudio/portaudio/src/hostapi/coreaudio/pa_mac_core.c @@ -125,83 +125,78 @@ static bool ensureChannelNameSize( int size ) */ const char *PaMacCore_GetChannelName( int device, int channelIndex, bool input ) { - struct PaUtilHostApiRepresentation *hostApi; - PaError err; - OSStatus error; - err = PaUtil_GetHostApiRepresentation( &hostApi, paCoreAudio ); - assert(err == paNoError); - if( err != paNoError ) - return NULL; - PaMacAUHAL *macCoreHostApi = (PaMacAUHAL*)hostApi; - AudioDeviceID hostApiDevice = macCoreHostApi->devIds[device]; - - UInt32 size = 0; - - error = AudioDeviceGetPropertyInfo( hostApiDevice, - channelIndex + 1, - input, - kAudioDevicePropertyChannelName, - &size, - NULL ); - if( error ) { - //try the CFString - CFStringRef name; - bool isDeviceName = false; - size = sizeof( name ); - error = AudioDeviceGetProperty( hostApiDevice, - channelIndex + 1, - input, - kAudioDevicePropertyChannelNameCFString, - &size, - &name ); - if( error ) { //as a last-ditch effort, get the device name. Later we'll append the channel number. - size = sizeof( name ); - error = AudioDeviceGetProperty( hostApiDevice, - channelIndex + 1, - input, - kAudioDevicePropertyDeviceNameCFString, - &size, - &name ); - if( error ) - return NULL; - isDeviceName = true; - } - if( isDeviceName ) { - name = CFStringCreateWithFormat( NULL, NULL, CFSTR( "%@: %d"), name, channelIndex + 1 ); - } - - CFIndex length = CFStringGetLength(name); - while( ensureChannelNameSize( length * sizeof(UniChar) + 1 ) ) { - if( CFStringGetCString( name, channelName, channelNameSize, kCFStringEncodingUTF8 ) ) { - if( isDeviceName ) - CFRelease( name ); - return channelName; - } - if( length == 0 ) - ++length; - length *= 2; - } - if( isDeviceName ) - CFRelease( name ); - return NULL; - } - - //continue with C string: - if( !ensureChannelNameSize( size ) ) - return NULL; - - error = AudioDeviceGetProperty( hostApiDevice, - channelIndex + 1, - input, - kAudioDevicePropertyChannelName, - &size, - channelName ); - - if( error ) { - ERR( error ); - return NULL; - } - return channelName; + struct PaUtilHostApiRepresentation *hostApi; + PaError err; + OSStatus error; + err = PaUtil_GetHostApiRepresentation( &hostApi, paCoreAudio ); + assert(err == paNoError); + if( err != paNoError ) + return NULL; + PaMacAUHAL *macCoreHostApi = (PaMacAUHAL*)hostApi; + AudioDeviceID hostApiDevice = macCoreHostApi->devIds[device]; + CFStringRef nameRef; + + /* First try with CFString */ + UInt32 size = sizeof(nameRef); + error = AudioDeviceGetProperty( hostApiDevice, + channelIndex + 1, + input, + kAudioDevicePropertyChannelNameCFString, + &size, + &nameRef ); + if( error ) + { + /* try the C String */ + size = 0; + error = AudioDeviceGetPropertyInfo( hostApiDevice, + channelIndex + 1, + input, + kAudioDevicePropertyChannelName, + &size, + NULL); + if( !error ) + { + if( !ensureChannelNameSize( size ) ) + return NULL; + + error = AudioDeviceGetProperty( hostApiDevice, + channelIndex + 1, + input, + kAudioDevicePropertyChannelName, + &size, + channelName ); + + + if( !error ) + return channelName; + } + + /* as a last-ditch effort, we use the device name and append the channel number. */ + nameRef = CFStringCreateWithFormat( NULL, NULL, CFSTR( "%s: %d"), hostApi->deviceInfos[device]->name, channelIndex + 1 ); + + + size = CFStringGetMaximumSizeForEncoding(CFStringGetLength(nameRef), kCFStringEncodingUTF8);; + if( !ensureChannelNameSize( size ) ) + { + CFRelease( nameRef ); + return NULL; + } + CFStringGetCString( nameRef, channelName, size+1, kCFStringEncodingUTF8 ); + CFRelease( nameRef ); + } + else + { + size = CFStringGetMaximumSizeForEncoding(CFStringGetLength(nameRef), kCFStringEncodingUTF8);; + if( !ensureChannelNameSize( size ) ) + { + CFRelease( nameRef ); + return NULL; + } + CFStringGetCString( nameRef, channelName, size+1, kCFStringEncodingUTF8 ); + CFRelease( nameRef ); + } + + return channelName; } @@ -312,7 +307,7 @@ static PaError OpenAndSetupOneAudioUnit( /* for setting errors. */ #define PA_AUHAL_SET_LAST_HOST_ERROR( errorCode, errorText ) \ - PaUtil_SetLastHostErrorInfo( paInDevelopment, errorCode, errorText ) + PaUtil_SetLastHostErrorInfo( paCoreAudio, errorCode, errorText ) /* * Callback called when starting or stopping a stream. @@ -657,6 +652,7 @@ static PaError InitializeDeviceInfo( PaMacAUHAL *auhalHostApi, Float64 sampleRate; char *name; PaError err = paNoError; + CFStringRef nameRef; UInt32 propSize; VVDBUG(("InitializeDeviceInfo(): macCoreDeviceId=%ld\n", macCoreDeviceId)); @@ -665,18 +661,37 @@ static PaError InitializeDeviceInfo( PaMacAUHAL *auhalHostApi, deviceInfo->structVersion = 2; deviceInfo->hostApi = hostApiIndex; - - /* Get the device name. Fail if we can't get it. */ - err = ERR(AudioDeviceGetPropertyInfo(macCoreDeviceId, 0, 0, kAudioDevicePropertyDeviceName, &propSize, NULL)); - if (err) - return err; - - name = PaUtil_GroupAllocateMemory(auhalHostApi->allocations,propSize); - if ( !name ) - return paInsufficientMemory; - err = ERR(AudioDeviceGetProperty(macCoreDeviceId, 0, 0, kAudioDevicePropertyDeviceName, &propSize, name)); + + /* Get the device name using CFString */ + propSize = sizeof(nameRef); + err = ERR(AudioDeviceGetProperty(macCoreDeviceId, 0, 0, kAudioDevicePropertyDeviceNameCFString, &propSize, &nameRef)); if (err) - return err; + { + /* Get the device name using c string. Fail if we can't get it. */ + err = ERR(AudioDeviceGetPropertyInfo(macCoreDeviceId, 0, 0, kAudioDevicePropertyDeviceName, &propSize, NULL)); + if (err) + return err; + + name = PaUtil_GroupAllocateMemory(auhalHostApi->allocations,propSize+1); + if ( !name ) + return paInsufficientMemory; + err = ERR(AudioDeviceGetProperty(macCoreDeviceId, 0, 0, kAudioDevicePropertyDeviceName, &propSize, name)); + if (err) + return err; + } + else + { + /* valid CFString so we just allocate a c string big enough to contain the data */ + propSize = CFStringGetMaximumSizeForEncoding(CFStringGetLength(nameRef), kCFStringEncodingUTF8); + name = PaUtil_GroupAllocateMemory(auhalHostApi->allocations, propSize+1); + if ( !name ) + { + CFRelease(nameRef); + return paInsufficientMemory; + } + CFStringGetCString(nameRef, name, propSize+1, kCFStringEncodingUTF8); + CFRelease(nameRef); + } deviceInfo->name = name; /* Try to get the default sample rate. Don't fail if we can't get this. */ @@ -1906,14 +1921,13 @@ static PaError OpenStream( struct PaUtilHostApiRepresentation *hostApi, /* * If input and output devs are different or we are doing SR conversion, - * we also need a - * ring buffer to store inpt data while waiting for output - * data. + * we also need a ring buffer to store input data while waiting for + * output data. */ if( (stream->outputUnit && (stream->inputUnit != stream->outputUnit)) || stream->inputSRConverter ) { - /* May want the ringSize ot initial position in + /* May want the ringSize or initial position in ring buffer to depend somewhat on sample rate change */ void *data; @@ -1936,7 +1950,15 @@ static PaError OpenStream( struct PaUtilHostApiRepresentation *hostApi, } /* now we can initialize the ring buffer */ - PaUtil_InitializeRingBuffer( &stream->inputRingBuffer, szfl*inputParameters->channelCount, ringSize, data ) ; + result = PaUtil_InitializeRingBuffer( &stream->inputRingBuffer, szfl*inputParameters->channelCount, ringSize, data ); + if( result != 0 ) + { + /* The only reason this should fail is if ringSize is not a power of 2, which we do not anticipate happening. */ + result = paUnanticipatedHostError; + free(data); + goto error; + } + /* advance the read point a little, so we are reading from the middle of the buffer */ if( stream->outputUnit ) @@ -1958,12 +1980,11 @@ static PaError OpenStream( struct PaUtilHostApiRepresentation *hostApi, stream->outputFramesPerBuffer, sampleRate ); result = initializeBlioRingBuffers( &stream->blio, - inputParameters?inputParameters->sampleFormat:0 , - outputParameters?outputParameters->sampleFormat:0 , - MAX(stream->inputFramesPerBuffer,stream->outputFramesPerBuffer), + inputParameters ? inputParameters->sampleFormat : 0, + outputParameters ? outputParameters->sampleFormat : 0, ringSize, - inputParameters?inputChannelCount:0 , - outputParameters?outputChannelCount:0 ) ; + inputParameters ? inputChannelCount : 0, + outputParameters ? outputChannelCount : 0 ) ; if( result != paNoError ) goto error; @@ -2262,9 +2283,10 @@ static OSStatus AudioIOProc( void *inRefCon, INPUT_ELEMENT, inNumberFrames, &stream->inputAudioBufferList ); - /* FEEDBACK: I'm not sure what to do when this call fails. There's nothing in the PA API to - * do about failures in the callback system. */ - assert( !err ); + if(err != noErr) + { + goto stop_stream; + } PaUtil_SetInputFrameCount( &(stream->bufferProcessor), frames ); PaUtil_SetInterleavedInputChannels( &(stream->bufferProcessor), @@ -2344,7 +2366,7 @@ static OSStatus AudioIOProc( void *inRefCon, &size, (void *)&data ); if( err == RING_BUFFER_EMPTY ) - { /*the ring buffer callback underflowed */ + { /* the ring buffer callback underflowed */ err = 0; bzero( ((char *)data) + size, sizeof(data)-size ); /* The ring buffer can underflow normally when the stream is stopping. @@ -2355,8 +2377,11 @@ static OSStatus AudioIOProc( void *inRefCon, } } ERR( err ); - assert( !err ); - + if(err != noErr) + { + goto stop_stream; + } + PaUtil_SetInputFrameCount( &(stream->bufferProcessor), frames ); PaUtil_SetInterleavedInputChannels( &(stream->bufferProcessor), 0, @@ -2462,9 +2487,12 @@ static OSStatus AudioIOProc( void *inRefCon, if( err == -10874 ) inNumberFrames /= 2; } while( err == -10874 && inNumberFrames > 1 ); - /* FEEDBACK: I'm not sure what to do when this call fails */ ERR( err ); - assert( !err ); + if(err != noErr) + { + goto stop_stream; + } + if( stream->inputSRConverter || stream->outputUnit ) { /* If this is duplex or we use a converter, put the data @@ -2507,11 +2535,11 @@ static OSStatus AudioIOProc( void *inRefCon, * chunks, and let the BufferProcessor deal with the rest. * */ - /*This might be too big or small depending on SR conversion*/ + /* This might be too big or small depending on SR conversion. */ float data[ chan * inNumberFrames ]; OSStatus err; do - { /*Run the buffer processor until we are out of data*/ + { /* Run the buffer processor until we are out of data. */ UInt32 size; long f; @@ -2524,7 +2552,11 @@ static OSStatus AudioIOProc( void *inRefCon, (void *)data ); if( err != RING_BUFFER_EMPTY ) ERR( err ); - assert( err == 0 || err == RING_BUFFER_EMPTY ); + if( err != noErr && err != RING_BUFFER_EMPTY ) + { + goto stop_stream; + } + f = size / ( chan * sizeof(float) ); PaUtil_SetInputFrameCount( &(stream->bufferProcessor), f ); @@ -2547,23 +2579,23 @@ static OSStatus AudioIOProc( void *inRefCon, } } - switch( callbackResult ) - { - case paContinue: break; - case paComplete: - case paAbort: - stream->state = CALLBACK_STOPPED ; - if( stream->outputUnit ) - AudioOutputUnitStop(stream->outputUnit); - if( stream->inputUnit ) - AudioOutputUnitStop(stream->inputUnit); - break; - } + // Should we return successfully or fall through to stopping the stream? + if( callbackResult == paContinue ) + { + PaUtil_EndCpuLoadMeasurement( &stream->cpuLoadMeasurer, framesProcessed ); + return noErr; + } - PaUtil_EndCpuLoadMeasurement( &stream->cpuLoadMeasurer, framesProcessed ); - return noErr; -} +stop_stream: + stream->state = CALLBACK_STOPPED ; + if( stream->outputUnit ) + AudioOutputUnitStop(stream->outputUnit); + if( stream->inputUnit ) + AudioOutputUnitStop(stream->inputUnit); + PaUtil_EndCpuLoadMeasurement( &stream->cpuLoadMeasurer, framesProcessed ); + return noErr; +} /* When CloseStream() is called, the multi-api layer ensures that @@ -2692,18 +2724,10 @@ static ComponentResult BlockWhileAudioUnitIsRunning( AudioUnit audioUnit, AudioU return noErr; } -static PaError StopStream( PaStream *s ) +static PaError FinishStoppingStream( PaMacCoreStream *stream ) { - PaMacCoreStream *stream = (PaMacCoreStream*)s; OSStatus result = noErr; PaError paErr; - VVDBUG(("StopStream()\n")); - - VDBUG( ("Waiting for BLIO.\n") ); - waitUntilBlioWriteBufferIsFlushed( &stream->blio ); - VDBUG( ( "Stopping stream.\n" ) ); - - stream->state = STOPPING; #define ERR_WRAP(mac_err) do { result = mac_err ; if ( result != noErr ) return ERR(result) ; } while(0) /* -- stop and reset -- */ @@ -2755,12 +2779,34 @@ static PaError StopStream( PaStream *s ) #undef ERR_WRAP } +/* Block until buffer is empty then stop the stream. */ +static PaError StopStream( PaStream *s ) +{ + PaError paErr; + PaMacCoreStream *stream = (PaMacCoreStream*)s; + VVDBUG(("StopStream()\n")); + + /* Tell WriteStream to stop filling the buffer. */ + stream->state = STOPPING; + + if( stream->userOutChan > 0 ) /* Does this stream do output? */ + { + size_t maxHostFrames = MAX( stream->inputFramesPerBuffer, stream->outputFramesPerBuffer ); + VDBUG( ("Waiting for write buffer to be drained.\n") ); + paErr = waitUntilBlioWriteBufferIsEmpty( &stream->blio, stream->sampleRate, + maxHostFrames ); + VDBUG( ( "waitUntilBlioWriteBufferIsEmpty returned %d\n", paErr ) ); + } + return FinishStoppingStream( stream ); +} + +/* Immediately stop the stream. */ static PaError AbortStream( PaStream *s ) { - VVDBUG(("AbortStream()->StopStream()\n")); - VDBUG( ( "Aborting stream.\n" ) ); - /* We have nothing faster than StopStream. */ - return StopStream(s); + PaMacCoreStream *stream = (PaMacCoreStream*)s; + VDBUG( ( "AbortStream()\n" ) ); + stream->state = STOPPING; + return FinishStoppingStream( stream ); } diff --git a/portaudio/src/hostapi/coreaudio/pa_mac_core_blocking.c b/portaudio/portaudio/src/hostapi/coreaudio/pa_mac_core_blocking.c similarity index 69% rename from portaudio/src/hostapi/coreaudio/pa_mac_core_blocking.c rename to portaudio/portaudio/src/hostapi/coreaudio/pa_mac_core_blocking.c index 606a569570..679c6ba0ae 100644 --- a/portaudio/src/hostapi/coreaudio/pa_mac_core_blocking.c +++ b/portaudio/portaudio/src/hostapi/coreaudio/pa_mac_core_blocking.c @@ -1,593 +1,637 @@ -/* - * Implementation of the PortAudio API for Apple AUHAL - * - * PortAudio Portable Real-Time Audio Library - * Latest Version at: http://www.portaudio.com - * - * Written by Bjorn Roche of XO Audio LLC, from PA skeleton code. - * Portions copied from code by Dominic Mazzoni (who wrote a HAL implementation) - * - * Dominic's code was based on code by Phil Burk, Darren Gibbs, - * Gord Peters, Stephane Letz, and Greg Pfiel. - * - * The following people also deserve acknowledgements: - * - * Olivier Tristan for feedback and testing - * Glenn Zelniker and Z-Systems engineering for sponsoring the Blocking I/O - * interface. - * - * - * Based on the Open Source API proposed by Ross Bencina - * Copyright (c) 1999-2002 Ross Bencina, Phil Burk - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF - * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -/* - * The text above constitutes the entire PortAudio license; however, - * the PortAudio community also makes the following non-binding requests: - * - * Any person wishing to distribute modifications to the Software is - * requested to send the modifications to the original developer so that - * they can be incorporated into the canonical version. It is also - * requested that these non-binding requests be included along with the - * license above. - */ - -/** - @file - @ingroup hostapi_src - - This file contains the implementation - required for blocking I/O. It is separated from pa_mac_core.c simply to ease - development. -*/ - -#include "pa_mac_core_blocking.h" -#include "pa_mac_core_internal.h" -#include -#ifdef MOSX_USE_NON_ATOMIC_FLAG_BITS -# define OSAtomicOr32( a, b ) ( (*(b)) |= (a) ) -# define OSAtomicAnd32( a, b ) ( (*(b)) &= (a) ) -#else -# include -#endif - -/* - * This function determines the size of a particular sample format. - * if the format is not recognized, this returns zero. - */ -static size_t computeSampleSizeFromFormat( PaSampleFormat format ) -{ - switch( format & (~paNonInterleaved) ) { - case paFloat32: return 4; - case paInt32: return 4; - case paInt24: return 3; - case paInt16: return 2; - case paInt8: case paUInt8: return 1; - default: return 0; - } -} -/* - * Same as computeSampleSizeFromFormat, except that if - * the size is not a power of two, it returns the next power of two up - */ -static size_t computeSampleSizeFromFormatPow2( PaSampleFormat format ) -{ - switch( format & (~paNonInterleaved) ) { - case paFloat32: return 4; - case paInt32: return 4; - case paInt24: return 4; - case paInt16: return 2; - case paInt8: case paUInt8: return 1; - default: return 0; - } -} - - - -/* - * Functions for initializing, resetting, and destroying BLIO structures. - * - */ - -/* This should be called with the relevant info when initializing a stream for - callback. */ -PaError initializeBlioRingBuffers( - PaMacBlio *blio, - PaSampleFormat inputSampleFormat, - PaSampleFormat outputSampleFormat, - size_t framesPerBuffer, - long ringBufferSize, - int inChan, - int outChan ) -{ - void *data; - int result; - OSStatus err; - - /* zeroify things */ - bzero( blio, sizeof( PaMacBlio ) ); - /* this is redundant, but the buffers are used to check - if the bufffers have been initialized, so we do it explicitly. */ - blio->inputRingBuffer.buffer = NULL; - blio->outputRingBuffer.buffer = NULL; - - /* initialize simple data */ - blio->ringBufferFrames = ringBufferSize; - blio->inputSampleFormat = inputSampleFormat; - blio->inputSampleSizeActual = computeSampleSizeFromFormat(inputSampleFormat); - blio->inputSampleSizePow2 = computeSampleSizeFromFormatPow2(inputSampleFormat); - blio->outputSampleFormat = outputSampleFormat; - blio->outputSampleSizeActual = computeSampleSizeFromFormat(outputSampleFormat); - blio->outputSampleSizePow2 = computeSampleSizeFromFormatPow2(outputSampleFormat); - - blio->framesPerBuffer = framesPerBuffer; - blio->inChan = inChan; - blio->outChan = outChan; - blio->statusFlags = 0; - blio->errors = paNoError; -#ifdef PA_MAC_BLIO_MUTEX - blio->isInputEmpty = false; - blio->isOutputFull = false; -#endif - - /* setup ring buffers */ -#ifdef PA_MAC_BLIO_MUTEX - result = PaMacCore_SetUnixError( pthread_mutex_init(&(blio->inputMutex),NULL), 0 ); - if( result ) - goto error; - result = UNIX_ERR( pthread_cond_init( &(blio->inputCond), NULL ) ); - if( result ) - goto error; - result = UNIX_ERR( pthread_mutex_init(&(blio->outputMutex),NULL) ); - if( result ) - goto error; - result = UNIX_ERR( pthread_cond_init( &(blio->outputCond), NULL ) ); -#endif - if( inChan ) { - data = calloc( ringBufferSize, blio->inputSampleSizePow2*inChan ); - if( !data ) - { - result = paInsufficientMemory; - goto error; - } - - err = PaUtil_InitializeRingBuffer( - &blio->inputRingBuffer, - 1, ringBufferSize*blio->inputSampleSizePow2*inChan, - data ); - assert( !err ); - } - if( outChan ) { - data = calloc( ringBufferSize, blio->outputSampleSizePow2*outChan ); - if( !data ) - { - result = paInsufficientMemory; - goto error; - } - - err = PaUtil_InitializeRingBuffer( - &blio->outputRingBuffer, - 1, ringBufferSize*blio->outputSampleSizePow2*outChan, - data ); - assert( !err ); - } - - result = resetBlioRingBuffers( blio ); - if( result ) - goto error; - - return 0; - - error: - destroyBlioRingBuffers( blio ); - return result; -} - -#ifdef PA_MAC_BLIO_MUTEX -PaError blioSetIsInputEmpty( PaMacBlio *blio, bool isEmpty ) -{ - PaError result = paNoError; - if( isEmpty == blio->isInputEmpty ) - goto done; - - /* we need to update the value. Here's what we do: - * - Lock the mutex, so noone else can write. - * - update the value. - * - unlock. - * - broadcast to all listeners. - */ - result = UNIX_ERR( pthread_mutex_lock( &blio->inputMutex ) ); - if( result ) - goto done; - blio->isInputEmpty = isEmpty; - result = UNIX_ERR( pthread_mutex_unlock( &blio->inputMutex ) ); - if( result ) - goto done; - result = UNIX_ERR( pthread_cond_broadcast( &blio->inputCond ) ); - if( result ) - goto done; - - done: - return result; -} -PaError blioSetIsOutputFull( PaMacBlio *blio, bool isFull ) -{ - PaError result = paNoError; - if( isFull == blio->isOutputFull ) - goto done; - - /* we need to update the value. Here's what we do: - * - Lock the mutex, so noone else can write. - * - update the value. - * - unlock. - * - broadcast to all listeners. - */ - result = UNIX_ERR( pthread_mutex_lock( &blio->outputMutex ) ); - if( result ) - goto done; - blio->isOutputFull = isFull; - result = UNIX_ERR( pthread_mutex_unlock( &blio->outputMutex ) ); - if( result ) - goto done; - result = UNIX_ERR( pthread_cond_broadcast( &blio->outputCond ) ); - if( result ) - goto done; - - done: - return result; -} -#endif - -/* This should be called after stopping or aborting the stream, so that on next - start, the buffers will be ready. */ -PaError resetBlioRingBuffers( PaMacBlio *blio ) -{ -#ifdef PA_MAC__BLIO_MUTEX - int result; -#endif - blio->statusFlags = 0; - if( blio->outputRingBuffer.buffer ) { - PaUtil_FlushRingBuffer( &blio->outputRingBuffer ); - bzero( blio->outputRingBuffer.buffer, - blio->outputRingBuffer.bufferSize ); - /* Advance buffer */ - PaUtil_AdvanceRingBufferWriteIndex( &blio->outputRingBuffer, blio->ringBufferFrames*blio->outputSampleSizeActual*blio->outChan ); - //PaUtil_AdvanceRingBufferWriteIndex( &blio->outputRingBuffer, blio->outputRingBuffer.bufferSize ); - - /* Update isOutputFull. */ -#ifdef PA_MAC__BLIO_MUTEX - result = blioSetIsOutputFull( blio, toAdvance == blio->outputRingBuffer.bufferSize ); - if( result ) - goto error; -#endif -/* - printf( "------%d\n" , blio->framesPerBuffer ); - printf( "------%d\n" , blio->outChan ); - printf( "------%d\n" , blio->outputSampleSize ); - printf( "------%d\n" , blio->framesPerBuffer*blio->outChan*blio->outputSampleSize ); -*/ - } - if( blio->inputRingBuffer.buffer ) { - PaUtil_FlushRingBuffer( &blio->inputRingBuffer ); - bzero( blio->inputRingBuffer.buffer, - blio->inputRingBuffer.bufferSize ); - /* Update isInputEmpty. */ -#ifdef PA_MAC__BLIO_MUTEX - result = blioSetIsInputEmpty( blio, true ); - if( result ) - goto error; -#endif - } - return paNoError; -#ifdef PA_MAC__BLIO_MUTEX - error: - return result; -#endif -} - -/*This should be called when you are done with the blio. It can safely be called - multiple times if there are no exceptions. */ -PaError destroyBlioRingBuffers( PaMacBlio *blio ) -{ - PaError result = paNoError; - if( blio->inputRingBuffer.buffer ) { - free( blio->inputRingBuffer.buffer ); -#ifdef PA_MAC__BLIO_MUTEX - result = UNIX_ERR( pthread_mutex_destroy( & blio->inputMutex ) ); - if( result ) return result; - result = UNIX_ERR( pthread_cond_destroy( & blio->inputCond ) ); - if( result ) return result; -#endif - } - blio->inputRingBuffer.buffer = NULL; - if( blio->outputRingBuffer.buffer ) { - free( blio->outputRingBuffer.buffer ); -#ifdef PA_MAC__BLIO_MUTEX - result = UNIX_ERR( pthread_mutex_destroy( & blio->outputMutex ) ); - if( result ) return result; - result = UNIX_ERR( pthread_cond_destroy( & blio->outputCond ) ); - if( result ) return result; -#endif - } - blio->outputRingBuffer.buffer = NULL; - - return result; -} - -/* - * this is the BlioCallback function. It expects to recieve a PaMacBlio Object - * pointer as userData. - * - */ -int BlioCallback( const void *input, void *output, unsigned long frameCount, - const PaStreamCallbackTimeInfo* timeInfo, - PaStreamCallbackFlags statusFlags, - void *userData ) -{ - PaMacBlio *blio = (PaMacBlio*)userData; - long avail; - long toRead; - long toWrite; - long read; - long written; - - /* set flags returned by OS: */ - OSAtomicOr32( statusFlags, &blio->statusFlags ) ; - - /* --- Handle Input Buffer --- */ - if( blio->inChan ) { - avail = PaUtil_GetRingBufferWriteAvailable( &blio->inputRingBuffer ); - - /* check for underflow */ - if( avail < frameCount * blio->inputSampleSizeActual * blio->inChan ) - { - OSAtomicOr32( paInputOverflow, &blio->statusFlags ); - } - toRead = MIN( avail, frameCount * blio->inputSampleSizeActual * blio->inChan ); - - /* copy the data */ - /*printf( "reading %d\n", toRead );*/ - read = PaUtil_WriteRingBuffer( &blio->inputRingBuffer, input, toRead ); - assert( toRead == read ); -#ifdef PA_MAC__BLIO_MUTEX - /* Priority inversion. See notes below. */ - blioSetIsInputEmpty( blio, false ); -#endif - } - - - /* --- Handle Output Buffer --- */ - if( blio->outChan ) { - avail = PaUtil_GetRingBufferReadAvailable( &blio->outputRingBuffer ); - - /* check for underflow */ - if( avail < frameCount * blio->outputSampleSizeActual * blio->outChan ) - OSAtomicOr32( paOutputUnderflow, &blio->statusFlags ); - - toWrite = MIN( avail, frameCount * blio->outputSampleSizeActual * blio->outChan ); - - if( toWrite != frameCount * blio->outputSampleSizeActual * blio->outChan ) - bzero( ((char *)output)+toWrite, - frameCount * blio->outputSampleSizeActual * blio->outChan - toWrite ); - /* copy the data */ - /*printf( "writing %d\n", toWrite );*/ - written = PaUtil_ReadRingBuffer( &blio->outputRingBuffer, output, toWrite ); - assert( toWrite == written ); -#ifdef PA_MAC__BLIO_MUTEX - /* We have a priority inversion here. However, we will only have to - wait if this was true and is now false, which means we've got - some room in the buffer. - Hopefully problems will be minimized. */ - blioSetIsOutputFull( blio, false ); -#endif - } - - return paContinue; -} - -PaError ReadStream( PaStream* stream, - void *buffer, - unsigned long frames ) -{ - PaMacBlio *blio = & ((PaMacCoreStream*)stream) -> blio; - char *cbuf = (char *) buffer; - PaError ret = paNoError; - VVDBUG(("ReadStream()\n")); - - while( frames > 0 ) { - long avail; - long toRead; - do { - avail = PaUtil_GetRingBufferReadAvailable( &blio->inputRingBuffer ); -/* - printf( "Read Buffer is %%%g full: %ld of %ld.\n", - 100 * (float)avail / (float) blio->inputRingBuffer.bufferSize, - avail, blio->inputRingBuffer.bufferSize ); -*/ - if( avail == 0 ) { -#ifdef PA_MAC_BLIO_MUTEX - /**block when empty*/ - ret = UNIX_ERR( pthread_mutex_lock( &blio->inputMutex ) ); - if( ret ) - return ret; - while( blio->isInputEmpty ) { - ret = UNIX_ERR( pthread_cond_wait( &blio->inputCond, &blio->inputMutex ) ); - if( ret ) - return ret; - } - ret = UNIX_ERR( pthread_mutex_unlock( &blio->inputMutex ) ); - if( ret ) - return ret; -#else - Pa_Sleep( PA_MAC_BLIO_BUSY_WAIT_SLEEP_INTERVAL ); -#endif - } - } while( avail == 0 ); - toRead = MIN( avail, frames * blio->inputSampleSizeActual * blio->inChan ); - toRead -= toRead % blio->inputSampleSizeActual * blio->inChan ; - PaUtil_ReadRingBuffer( &blio->inputRingBuffer, (void *)cbuf, toRead ); - cbuf += toRead; - frames -= toRead / ( blio->inputSampleSizeActual * blio->inChan ); - - if( toRead == avail ) { -#ifdef PA_MAC_BLIO_MUTEX - /* we just emptied the buffer, so we need to mark it as empty. */ - ret = blioSetIsInputEmpty( blio, true ); - if( ret ) - return ret; - /* of course, in the meantime, the callback may have put some sats - in, so - so check for that, too, to avoid a race condition. */ - if( PaUtil_GetRingBufferReadAvailable( &blio->inputRingBuffer ) ) { - blioSetIsInputEmpty( blio, false ); - if( ret ) - return ret; - } -#endif - } - } - - /* Report either paNoError or paInputOverflowed. */ - /* may also want to report other errors, but this is non-standard. */ - ret = blio->statusFlags & paInputOverflow; - - /* report underflow only once: */ - if( ret ) { - OSAtomicAnd32( (uint32_t)(~paInputOverflow), &blio->statusFlags ); - ret = paInputOverflowed; - } - - return ret; -} - - -PaError WriteStream( PaStream* stream, - const void *buffer, - unsigned long frames ) -{ - PaMacBlio *blio = & ((PaMacCoreStream*)stream) -> blio; - char *cbuf = (char *) buffer; - PaError ret = paNoError; - VVDBUG(("WriteStream()\n")); - - while( frames > 0 ) { - long avail = 0; - long toWrite; - - do { - avail = PaUtil_GetRingBufferWriteAvailable( &blio->outputRingBuffer ); -/* - printf( "Write Buffer is %%%g full: %ld of %ld.\n", - 100 - 100 * (float)avail / (float) blio->outputRingBuffer.bufferSize, - avail, blio->outputRingBuffer.bufferSize ); -*/ - if( avail == 0 ) { -#ifdef PA_MAC_BLIO_MUTEX - /*block while full*/ - ret = UNIX_ERR( pthread_mutex_lock( &blio->outputMutex ) ); - if( ret ) - return ret; - while( blio->isOutputFull ) { - ret = UNIX_ERR( pthread_cond_wait( &blio->outputCond, &blio->outputMutex ) ); - if( ret ) - return ret; - } - ret = UNIX_ERR( pthread_mutex_unlock( &blio->outputMutex ) ); - if( ret ) - return ret; -#else - Pa_Sleep( PA_MAC_BLIO_BUSY_WAIT_SLEEP_INTERVAL ); -#endif - } - } while( avail == 0 ); - - toWrite = MIN( avail, frames * blio->outputSampleSizeActual * blio->outChan ); - toWrite -= toWrite % blio->outputSampleSizeActual * blio->outChan ; - PaUtil_WriteRingBuffer( &blio->outputRingBuffer, (void *)cbuf, toWrite ); - cbuf += toWrite; - frames -= toWrite / ( blio->outputSampleSizeActual * blio->outChan ); - -#ifdef PA_MAC_BLIO_MUTEX - if( toWrite == avail ) { - /* we just filled up the buffer, so we need to mark it as filled. */ - ret = blioSetIsOutputFull( blio, true ); - if( ret ) - return ret; - /* of course, in the meantime, we may have emptied the buffer, so - so check for that, too, to avoid a race condition. */ - if( PaUtil_GetRingBufferWriteAvailable( &blio->outputRingBuffer ) ) { - blioSetIsOutputFull( blio, false ); - if( ret ) - return ret; - } - } -#endif - } - - /* Report either paNoError or paOutputUnderflowed. */ - /* may also want to report other errors, but this is non-standard. */ - ret = blio->statusFlags & paOutputUnderflow; - - /* report underflow only once: */ - if( ret ) { - OSAtomicAnd32( (uint32_t)(~paOutputUnderflow), &blio->statusFlags ); - ret = paOutputUnderflowed; - } - - return ret; -} - -/* - * - */ -void waitUntilBlioWriteBufferIsFlushed( PaMacBlio *blio ) -{ - if( blio->outputRingBuffer.buffer ) { - long avail = PaUtil_GetRingBufferWriteAvailable( &blio->outputRingBuffer ); - while( avail != blio->outputRingBuffer.bufferSize ) { - if( avail == 0 ) - Pa_Sleep( PA_MAC_BLIO_BUSY_WAIT_SLEEP_INTERVAL ); - avail = PaUtil_GetRingBufferWriteAvailable( &blio->outputRingBuffer ); - } - } -} - - -signed long GetStreamReadAvailable( PaStream* stream ) -{ - PaMacBlio *blio = & ((PaMacCoreStream*)stream) -> blio; - VVDBUG(("GetStreamReadAvailable()\n")); - - return PaUtil_GetRingBufferReadAvailable( &blio->inputRingBuffer ) - / ( blio->inputSampleSizeActual * blio->inChan ); -} - - -signed long GetStreamWriteAvailable( PaStream* stream ) -{ - PaMacBlio *blio = & ((PaMacCoreStream*)stream) -> blio; - VVDBUG(("GetStreamWriteAvailable()\n")); - - return PaUtil_GetRingBufferWriteAvailable( &blio->outputRingBuffer ) - / ( blio->outputSampleSizeActual * blio->outChan ); -} - +/* + * Implementation of the PortAudio API for Apple AUHAL + * + * PortAudio Portable Real-Time Audio Library + * Latest Version at: http://www.portaudio.com + * + * Written by Bjorn Roche of XO Audio LLC, from PA skeleton code. + * Portions copied from code by Dominic Mazzoni (who wrote a HAL implementation) + * + * Dominic's code was based on code by Phil Burk, Darren Gibbs, + * Gord Peters, Stephane Letz, and Greg Pfiel. + * + * The following people also deserve acknowledgements: + * + * Olivier Tristan for feedback and testing + * Glenn Zelniker and Z-Systems engineering for sponsoring the Blocking I/O + * interface. + * + * + * Based on the Open Source API proposed by Ross Bencina + * Copyright (c) 1999-2002 Ross Bencina, Phil Burk + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files + * (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, + * publish, distribute, sublicense, and/or sell copies of the Software, + * and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +/* + * The text above constitutes the entire PortAudio license; however, + * the PortAudio community also makes the following non-binding requests: + * + * Any person wishing to distribute modifications to the Software is + * requested to send the modifications to the original developer so that + * they can be incorporated into the canonical version. It is also + * requested that these non-binding requests be included along with the + * license above. + */ + +/** + @file + @ingroup hostapi_src + + This file contains the implementation + required for blocking I/O. It is separated from pa_mac_core.c simply to ease + development. +*/ + +#include "pa_mac_core_blocking.h" +#include "pa_mac_core_internal.h" +#include +#ifdef MOSX_USE_NON_ATOMIC_FLAG_BITS +# define OSAtomicOr32( a, b ) ( (*(b)) |= (a) ) +# define OSAtomicAnd32( a, b ) ( (*(b)) &= (a) ) +#else +# include +#endif + +/* + * This function determines the size of a particular sample format. + * if the format is not recognized, this returns zero. + */ +static size_t computeSampleSizeFromFormat( PaSampleFormat format ) +{ + switch( format & (~paNonInterleaved) ) { + case paFloat32: return 4; + case paInt32: return 4; + case paInt24: return 3; + case paInt16: return 2; + case paInt8: case paUInt8: return 1; + default: return 0; + } +} +/* + * Same as computeSampleSizeFromFormat, except that if + * the size is not a power of two, it returns the next power of two up + */ +static size_t computeSampleSizeFromFormatPow2( PaSampleFormat format ) +{ + switch( format & (~paNonInterleaved) ) { + case paFloat32: return 4; + case paInt32: return 4; + case paInt24: return 4; + case paInt16: return 2; + case paInt8: case paUInt8: return 1; + default: return 0; + } +} + + + +/* + * Functions for initializing, resetting, and destroying BLIO structures. + * + */ + +/** + * This should be called with the relevant info when initializing a stream for callback. + * + * @param ringBufferSizeInFrames must be a power of 2 + */ +PaError initializeBlioRingBuffers( + PaMacBlio *blio, + PaSampleFormat inputSampleFormat, + PaSampleFormat outputSampleFormat, + long ringBufferSizeInFrames, + int inChan, + int outChan ) +{ + void *data; + int result; + OSStatus err; + + /* zeroify things */ + bzero( blio, sizeof( PaMacBlio ) ); + /* this is redundant, but the buffers are used to check + if the buffers have been initialized, so we do it explicitly. */ + blio->inputRingBuffer.buffer = NULL; + blio->outputRingBuffer.buffer = NULL; + + /* initialize simple data */ + blio->ringBufferFrames = ringBufferSizeInFrames; + blio->inputSampleFormat = inputSampleFormat; + blio->inputSampleSizeActual = computeSampleSizeFromFormat(inputSampleFormat); + blio->inputSampleSizePow2 = computeSampleSizeFromFormatPow2(inputSampleFormat); // FIXME: WHY? + blio->outputSampleFormat = outputSampleFormat; + blio->outputSampleSizeActual = computeSampleSizeFromFormat(outputSampleFormat); + blio->outputSampleSizePow2 = computeSampleSizeFromFormatPow2(outputSampleFormat); + + blio->inChan = inChan; + blio->outChan = outChan; + blio->statusFlags = 0; + blio->errors = paNoError; +#ifdef PA_MAC_BLIO_MUTEX + blio->isInputEmpty = false; + blio->isOutputFull = false; +#endif + + /* setup ring buffers */ +#ifdef PA_MAC_BLIO_MUTEX + result = PaMacCore_SetUnixError( pthread_mutex_init(&(blio->inputMutex),NULL), 0 ); + if( result ) + goto error; + result = UNIX_ERR( pthread_cond_init( &(blio->inputCond), NULL ) ); + if( result ) + goto error; + result = UNIX_ERR( pthread_mutex_init(&(blio->outputMutex),NULL) ); + if( result ) + goto error; + result = UNIX_ERR( pthread_cond_init( &(blio->outputCond), NULL ) ); +#endif + if( inChan ) { + data = calloc( ringBufferSizeInFrames, blio->inputSampleSizePow2 * inChan ); + if( !data ) + { + result = paInsufficientMemory; + goto error; + } + + err = PaUtil_InitializeRingBuffer( + &blio->inputRingBuffer, + blio->inputSampleSizePow2 * inChan, + ringBufferSizeInFrames, + data ); + assert( !err ); + } + if( outChan ) { + data = calloc( ringBufferSizeInFrames, blio->outputSampleSizePow2 * outChan ); + if( !data ) + { + result = paInsufficientMemory; + goto error; + } + + err = PaUtil_InitializeRingBuffer( + &blio->outputRingBuffer, + blio->outputSampleSizePow2 * outChan, + ringBufferSizeInFrames, + data ); + assert( !err ); + } + + result = resetBlioRingBuffers( blio ); + if( result ) + goto error; + + return 0; + + error: + destroyBlioRingBuffers( blio ); + return result; +} + +#ifdef PA_MAC_BLIO_MUTEX +PaError blioSetIsInputEmpty( PaMacBlio *blio, bool isEmpty ) +{ + PaError result = paNoError; + if( isEmpty == blio->isInputEmpty ) + goto done; + + /* we need to update the value. Here's what we do: + * - Lock the mutex, so noone else can write. + * - update the value. + * - unlock. + * - broadcast to all listeners. + */ + result = UNIX_ERR( pthread_mutex_lock( &blio->inputMutex ) ); + if( result ) + goto done; + blio->isInputEmpty = isEmpty; + result = UNIX_ERR( pthread_mutex_unlock( &blio->inputMutex ) ); + if( result ) + goto done; + result = UNIX_ERR( pthread_cond_broadcast( &blio->inputCond ) ); + if( result ) + goto done; + + done: + return result; +} +PaError blioSetIsOutputFull( PaMacBlio *blio, bool isFull ) +{ + PaError result = paNoError; + if( isFull == blio->isOutputFull ) + goto done; + + /* we need to update the value. Here's what we do: + * - Lock the mutex, so noone else can write. + * - update the value. + * - unlock. + * - broadcast to all listeners. + */ + result = UNIX_ERR( pthread_mutex_lock( &blio->outputMutex ) ); + if( result ) + goto done; + blio->isOutputFull = isFull; + result = UNIX_ERR( pthread_mutex_unlock( &blio->outputMutex ) ); + if( result ) + goto done; + result = UNIX_ERR( pthread_cond_broadcast( &blio->outputCond ) ); + if( result ) + goto done; + + done: + return result; +} +#endif + +/* This should be called after stopping or aborting the stream, so that on next + start, the buffers will be ready. */ +PaError resetBlioRingBuffers( PaMacBlio *blio ) +{ +#ifdef PA_MAC__BLIO_MUTEX + int result; +#endif + blio->statusFlags = 0; + if( blio->outputRingBuffer.buffer ) { + PaUtil_FlushRingBuffer( &blio->outputRingBuffer ); + /* Fill the buffer with zeros. */ + bzero( blio->outputRingBuffer.buffer, + blio->outputRingBuffer.bufferSize * blio->outputRingBuffer.elementSizeBytes ); + PaUtil_AdvanceRingBufferWriteIndex( &blio->outputRingBuffer, blio->ringBufferFrames ); + + /* Update isOutputFull. */ +#ifdef PA_MAC__BLIO_MUTEX + result = blioSetIsOutputFull( blio, toAdvance == blio->outputRingBuffer.bufferSize ); + if( result ) + goto error; +#endif +/* + printf( "------%d\n" , blio->outChan ); + printf( "------%d\n" , blio->outputSampleSize ); +*/ + } + if( blio->inputRingBuffer.buffer ) { + PaUtil_FlushRingBuffer( &blio->inputRingBuffer ); + bzero( blio->inputRingBuffer.buffer, + blio->inputRingBuffer.bufferSize * blio->inputRingBuffer.elementSizeBytes ); + /* Update isInputEmpty. */ +#ifdef PA_MAC__BLIO_MUTEX + result = blioSetIsInputEmpty( blio, true ); + if( result ) + goto error; +#endif + } + return paNoError; +#ifdef PA_MAC__BLIO_MUTEX + error: + return result; +#endif +} + +/*This should be called when you are done with the blio. It can safely be called + multiple times if there are no exceptions. */ +PaError destroyBlioRingBuffers( PaMacBlio *blio ) +{ + PaError result = paNoError; + if( blio->inputRingBuffer.buffer ) { + free( blio->inputRingBuffer.buffer ); +#ifdef PA_MAC__BLIO_MUTEX + result = UNIX_ERR( pthread_mutex_destroy( & blio->inputMutex ) ); + if( result ) return result; + result = UNIX_ERR( pthread_cond_destroy( & blio->inputCond ) ); + if( result ) return result; +#endif + } + blio->inputRingBuffer.buffer = NULL; + if( blio->outputRingBuffer.buffer ) { + free( blio->outputRingBuffer.buffer ); +#ifdef PA_MAC__BLIO_MUTEX + result = UNIX_ERR( pthread_mutex_destroy( & blio->outputMutex ) ); + if( result ) return result; + result = UNIX_ERR( pthread_cond_destroy( & blio->outputCond ) ); + if( result ) return result; +#endif + } + blio->outputRingBuffer.buffer = NULL; + + return result; +} + +/* + * this is the BlioCallback function. It expects to recieve a PaMacBlio Object + * pointer as userData. + * + */ +int BlioCallback( const void *input, void *output, unsigned long frameCount, + const PaStreamCallbackTimeInfo* timeInfo, + PaStreamCallbackFlags statusFlags, + void *userData ) +{ + PaMacBlio *blio = (PaMacBlio*)userData; + ring_buffer_size_t framesAvailable; + ring_buffer_size_t framesToTransfer; + ring_buffer_size_t framesTransferred; + + /* set flags returned by OS: */ + OSAtomicOr32( statusFlags, &blio->statusFlags ) ; + + /* --- Handle Input Buffer --- */ + if( blio->inChan ) { + framesAvailable = PaUtil_GetRingBufferWriteAvailable( &blio->inputRingBuffer ); + + /* check for underflow */ + if( framesAvailable < frameCount ) + { + OSAtomicOr32( paInputOverflow, &blio->statusFlags ); + framesToTransfer = framesAvailable; + } + else + { + framesToTransfer = (ring_buffer_size_t)frameCount; + } + + /* Copy the data from the audio input to the application ring buffer. */ + /*printf( "reading %d\n", toRead );*/ + framesTransferred = PaUtil_WriteRingBuffer( &blio->inputRingBuffer, input, framesToTransfer ); + assert( framesToTransfer == framesTransferred ); +#ifdef PA_MAC__BLIO_MUTEX + /* Priority inversion. See notes below. */ + blioSetIsInputEmpty( blio, false ); +#endif + } + + + /* --- Handle Output Buffer --- */ + if( blio->outChan ) { + framesAvailable = PaUtil_GetRingBufferReadAvailable( &blio->outputRingBuffer ); + + /* check for underflow */ + if( framesAvailable < frameCount ) + { + /* zero out the end of the output buffer that we do not have data for */ + framesToTransfer = framesAvailable; + + size_t bytesPerFrame = blio->outputSampleSizeActual * blio->outChan; + size_t offsetInBytes = framesToTransfer * bytesPerFrame; + size_t countInBytes = (frameCount - framesToTransfer) * bytesPerFrame; + bzero( ((char *)output) + offsetInBytes, countInBytes ); + + OSAtomicOr32( paOutputUnderflow, &blio->statusFlags ); + framesToTransfer = framesAvailable; + } + else + { + framesToTransfer = (ring_buffer_size_t)frameCount; + } + + /* copy the data */ + /*printf( "writing %d\n", toWrite );*/ + framesTransferred = PaUtil_ReadRingBuffer( &blio->outputRingBuffer, output, framesToTransfer ); + assert( framesToTransfer == framesTransferred ); +#ifdef PA_MAC__BLIO_MUTEX + /* We have a priority inversion here. However, we will only have to + wait if this was true and is now false, which means we've got + some room in the buffer. + Hopefully problems will be minimized. */ + blioSetIsOutputFull( blio, false ); +#endif + } + + return paContinue; +} + +PaError ReadStream( PaStream* stream, + void *buffer, + unsigned long framesRequested ) +{ + PaMacBlio *blio = & ((PaMacCoreStream*)stream) -> blio; + char *cbuf = (char *) buffer; + PaError ret = paNoError; + VVDBUG(("ReadStream()\n")); + + while( framesRequested > 0 ) { + ring_buffer_size_t framesAvailable; + ring_buffer_size_t framesToTransfer; + ring_buffer_size_t framesTransferred; + do { + framesAvailable = PaUtil_GetRingBufferReadAvailable( &blio->inputRingBuffer ); +/* + printf( "Read Buffer is %%%g full: %ld of %ld.\n", + 100 * (float)avail / (float) blio->inputRingBuffer.bufferSize, + framesAvailable, blio->inputRingBuffer.bufferSize ); +*/ + if( framesAvailable == 0 ) { +#ifdef PA_MAC_BLIO_MUTEX + /**block when empty*/ + ret = UNIX_ERR( pthread_mutex_lock( &blio->inputMutex ) ); + if( ret ) + return ret; + while( blio->isInputEmpty ) { + ret = UNIX_ERR( pthread_cond_wait( &blio->inputCond, &blio->inputMutex ) ); + if( ret ) + return ret; + } + ret = UNIX_ERR( pthread_mutex_unlock( &blio->inputMutex ) ); + if( ret ) + return ret; +#else + Pa_Sleep( PA_MAC_BLIO_BUSY_WAIT_SLEEP_INTERVAL ); +#endif + } + } while( framesAvailable == 0 ); + framesToTransfer = (ring_buffer_size_t) MIN( framesAvailable, framesRequested ); + framesTransferred = PaUtil_ReadRingBuffer( &blio->inputRingBuffer, (void *)cbuf, framesToTransfer ); + cbuf += framesTransferred * blio->inputSampleSizeActual * blio->inChan; + framesRequested -= framesTransferred; + + if( framesToTransfer == framesAvailable ) { +#ifdef PA_MAC_BLIO_MUTEX + /* we just emptied the buffer, so we need to mark it as empty. */ + ret = blioSetIsInputEmpty( blio, true ); + if( ret ) + return ret; + /* of course, in the meantime, the callback may have put some sats + in, so + so check for that, too, to avoid a race condition. */ + /* FIXME - this does not seem to fix any race condition. */ + if( PaUtil_GetRingBufferReadAvailable( &blio->inputRingBuffer ) ) { + blioSetIsInputEmpty( blio, false ); + /* FIXME - why check? ret has not been set? */ + if( ret ) + return ret; + } +#endif + } + } + + /* Report either paNoError or paInputOverflowed. */ + /* may also want to report other errors, but this is non-standard. */ + /* FIXME should not clobber ret, use if(blio->statusFlags & paInputOverflow) */ + ret = blio->statusFlags & paInputOverflow; + + /* report underflow only once: */ + if( ret ) { + OSAtomicAnd32( (uint32_t)(~paInputOverflow), &blio->statusFlags ); + ret = paInputOverflowed; + } + + return ret; +} + + +PaError WriteStream( PaStream* stream, + const void *buffer, + unsigned long framesRequested ) +{ + PaMacCoreStream *macStream = (PaMacCoreStream*)stream; + PaMacBlio *blio = &macStream->blio; + char *cbuf = (char *) buffer; + PaError ret = paNoError; + VVDBUG(("WriteStream()\n")); + + while( framesRequested > 0 && macStream->state != STOPPING ) { + ring_buffer_size_t framesAvailable; + ring_buffer_size_t framesToTransfer; + ring_buffer_size_t framesTransferred; + + do { + framesAvailable = PaUtil_GetRingBufferWriteAvailable( &blio->outputRingBuffer ); +/* + printf( "Write Buffer is %%%g full: %ld of %ld.\n", + 100 - 100 * (float)avail / (float) blio->outputRingBuffer.bufferSize, + framesAvailable, blio->outputRingBuffer.bufferSize ); +*/ + if( framesAvailable == 0 ) { +#ifdef PA_MAC_BLIO_MUTEX + /*block while full*/ + ret = UNIX_ERR( pthread_mutex_lock( &blio->outputMutex ) ); + if( ret ) + return ret; + while( blio->isOutputFull ) { + ret = UNIX_ERR( pthread_cond_wait( &blio->outputCond, &blio->outputMutex ) ); + if( ret ) + return ret; + } + ret = UNIX_ERR( pthread_mutex_unlock( &blio->outputMutex ) ); + if( ret ) + return ret; +#else + Pa_Sleep( PA_MAC_BLIO_BUSY_WAIT_SLEEP_INTERVAL ); +#endif + } + } while( framesAvailable == 0 && macStream->state != STOPPING ); + + if( macStream->state == STOPPING ) + { + break; + } + + framesToTransfer = MIN( framesAvailable, framesRequested ); + framesTransferred = PaUtil_WriteRingBuffer( &blio->outputRingBuffer, (void *)cbuf, framesToTransfer ); + cbuf += framesTransferred * blio->outputSampleSizeActual * blio->outChan; + framesRequested -= framesTransferred; + +#ifdef PA_MAC_BLIO_MUTEX + if( framesToTransfer == framesAvailable ) { + /* we just filled up the buffer, so we need to mark it as filled. */ + ret = blioSetIsOutputFull( blio, true ); + if( ret ) + return ret; + /* of course, in the meantime, we may have emptied the buffer, so + so check for that, too, to avoid a race condition. */ + if( PaUtil_GetRingBufferWriteAvailable( &blio->outputRingBuffer ) ) { + blioSetIsOutputFull( blio, false ); + /* FIXME remove or review this code, does not fix race, ret not set! */ + if( ret ) + return ret; + } + } +#endif + } + + if ( macStream->state == STOPPING ) + { + ret = paInternalError; + } + else if (ret == paNoError ) + { + /* Test for underflow. */ + ret = blio->statusFlags & paOutputUnderflow; + + /* report underflow only once: */ + if( ret ) + { + OSAtomicAnd32( (uint32_t)(~paOutputUnderflow), &blio->statusFlags ); + ret = paOutputUnderflowed; + } + } + + return ret; +} + +/* + * Wait until the data in the buffer has finished playing. + */ +PaError waitUntilBlioWriteBufferIsEmpty( PaMacBlio *blio, double sampleRate, + size_t framesPerBuffer ) +{ + PaError result = paNoError; + if( blio->outputRingBuffer.buffer ) { + ring_buffer_size_t framesLeft = PaUtil_GetRingBufferReadAvailable( &blio->outputRingBuffer ); + + /* Calculate when we should give up waiting. To be safe wait for two extra periods. */ + PaTime now = PaUtil_GetTime(); + PaTime startTime = now; + PaTime timeoutTime = startTime + (framesLeft + (2 * framesPerBuffer)) / sampleRate; + + long msecPerBuffer = 1 + (long)( 1000.0 * framesPerBuffer / sampleRate); + while( framesLeft > 0 && now < timeoutTime ) { + VDBUG(( "waitUntilBlioWriteBufferIsFlushed: framesLeft = %d, framesPerBuffer = %ld\n", + framesLeft, framesPerBuffer )); + Pa_Sleep( msecPerBuffer ); + framesLeft = PaUtil_GetRingBufferReadAvailable( &blio->outputRingBuffer ); + now = PaUtil_GetTime(); + } + + if( framesLeft > 0 ) + { + VDBUG(( "waitUntilBlioWriteBufferIsFlushed: TIMED OUT - framesLeft = %d\n", framesLeft )); + result = paTimedOut; + } + } + return result; +} + +signed long GetStreamReadAvailable( PaStream* stream ) +{ + PaMacBlio *blio = & ((PaMacCoreStream*)stream) -> blio; + VVDBUG(("GetStreamReadAvailable()\n")); + + return PaUtil_GetRingBufferReadAvailable( &blio->inputRingBuffer ); +} + + +signed long GetStreamWriteAvailable( PaStream* stream ) +{ + PaMacBlio *blio = & ((PaMacCoreStream*)stream) -> blio; + VVDBUG(("GetStreamWriteAvailable()\n")); + + return PaUtil_GetRingBufferWriteAvailable( &blio->outputRingBuffer ); +} + diff --git a/portaudio/src/hostapi/coreaudio/pa_mac_core_blocking.h b/portaudio/portaudio/src/hostapi/coreaudio/pa_mac_core_blocking.h similarity index 90% rename from portaudio/src/hostapi/coreaudio/pa_mac_core_blocking.h rename to portaudio/portaudio/src/hostapi/coreaudio/pa_mac_core_blocking.h index 971223b3cf..c994f0903a 100644 --- a/portaudio/src/hostapi/coreaudio/pa_mac_core_blocking.h +++ b/portaudio/portaudio/src/hostapi/coreaudio/pa_mac_core_blocking.h @@ -1,136 +1,134 @@ -/* - * Internal blocking interfaces for PortAudio Apple AUHAL implementation - * - * PortAudio Portable Real-Time Audio Library - * Latest Version at: http://www.portaudio.com - * - * Written by Bjorn Roche of XO Audio LLC, from PA skeleton code. - * Portions copied from code by Dominic Mazzoni (who wrote a HAL implementation) - * - * Dominic's code was based on code by Phil Burk, Darren Gibbs, - * Gord Peters, Stephane Letz, and Greg Pfiel. - * - * The following people also deserve acknowledgements: - * - * Olivier Tristan for feedback and testing - * Glenn Zelniker and Z-Systems engineering for sponsoring the Blocking I/O - * interface. - * - * - * Based on the Open Source API proposed by Ross Bencina - * Copyright (c) 1999-2002 Ross Bencina, Phil Burk - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF - * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -/* - * The text above constitutes the entire PortAudio license; however, - * the PortAudio community also makes the following non-binding requests: - * - * Any person wishing to distribute modifications to the Software is - * requested to send the modifications to the original developer so that - * they can be incorporated into the canonical version. It is also - * requested that these non-binding requests be included along with the - * license above. - */ - -/** - @file - @ingroup hostapi_src -*/ - -#ifndef PA_MAC_CORE_BLOCKING_H_ -#define PA_MAC_CORE_BLOCKING_H_ - -#include "pa_ringbuffer.h" -#include "portaudio.h" -#include "pa_mac_core_utilities.h" - -/* - * Number of miliseconds to busy wait whil waiting for data in blocking calls. - */ -#define PA_MAC_BLIO_BUSY_WAIT_SLEEP_INTERVAL (5) -/* - * Define exactly one of these blocking methods - * PA_MAC_BLIO_MUTEX is not actively maintained. - */ -#define PA_MAC_BLIO_BUSY_WAIT -/* -#define PA_MAC_BLIO_MUTEX -*/ - -typedef struct { - PaUtilRingBuffer inputRingBuffer; - PaUtilRingBuffer outputRingBuffer; - size_t ringBufferFrames; - PaSampleFormat inputSampleFormat; - size_t inputSampleSizeActual; - size_t inputSampleSizePow2; - PaSampleFormat outputSampleFormat; - size_t outputSampleSizeActual; - size_t outputSampleSizePow2; - - size_t framesPerBuffer; - - int inChan; - int outChan; - - //PaStreamCallbackFlags statusFlags; - uint32_t statusFlags; - PaError errors; - - /* Here we handle blocking, using condition variables. */ -#ifdef PA_MAC_BLIO_MUTEX - volatile bool isInputEmpty; - pthread_mutex_t inputMutex; - pthread_cond_t inputCond; - - volatile bool isOutputFull; - pthread_mutex_t outputMutex; - pthread_cond_t outputCond; -#endif -} -PaMacBlio; - -/* - * These functions operate on condition and related variables. - */ - -PaError initializeBlioRingBuffers( - PaMacBlio *blio, - PaSampleFormat inputSampleFormat, - PaSampleFormat outputSampleFormat, - size_t framesPerBuffer, - long ringBufferSize, - int inChan, - int outChan ); -PaError destroyBlioRingBuffers( PaMacBlio *blio ); -PaError resetBlioRingBuffers( PaMacBlio *blio ); - -int BlioCallback( - const void *input, void *output, - unsigned long frameCount, - const PaStreamCallbackTimeInfo* timeInfo, - PaStreamCallbackFlags statusFlags, - void *userData ); - -void waitUntilBlioWriteBufferIsFlushed( PaMacBlio *blio ); - -#endif /*PA_MAC_CORE_BLOCKING_H_*/ +/* + * Internal blocking interfaces for PortAudio Apple AUHAL implementation + * + * PortAudio Portable Real-Time Audio Library + * Latest Version at: http://www.portaudio.com + * + * Written by Bjorn Roche of XO Audio LLC, from PA skeleton code. + * Portions copied from code by Dominic Mazzoni (who wrote a HAL implementation) + * + * Dominic's code was based on code by Phil Burk, Darren Gibbs, + * Gord Peters, Stephane Letz, and Greg Pfiel. + * + * The following people also deserve acknowledgements: + * + * Olivier Tristan for feedback and testing + * Glenn Zelniker and Z-Systems engineering for sponsoring the Blocking I/O + * interface. + * + * + * Based on the Open Source API proposed by Ross Bencina + * Copyright (c) 1999-2002 Ross Bencina, Phil Burk + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files + * (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, + * publish, distribute, sublicense, and/or sell copies of the Software, + * and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +/* + * The text above constitutes the entire PortAudio license; however, + * the PortAudio community also makes the following non-binding requests: + * + * Any person wishing to distribute modifications to the Software is + * requested to send the modifications to the original developer so that + * they can be incorporated into the canonical version. It is also + * requested that these non-binding requests be included along with the + * license above. + */ + +/** + @file + @ingroup hostapi_src +*/ + +#ifndef PA_MAC_CORE_BLOCKING_H_ +#define PA_MAC_CORE_BLOCKING_H_ + +#include "pa_ringbuffer.h" +#include "portaudio.h" +#include "pa_mac_core_utilities.h" + +/* + * Number of milliseconds to busy wait while waiting for data in blocking calls. + */ +#define PA_MAC_BLIO_BUSY_WAIT_SLEEP_INTERVAL (5) +/* + * Define exactly one of these blocking methods + * PA_MAC_BLIO_MUTEX is not actively maintained. + */ +#define PA_MAC_BLIO_BUSY_WAIT +/* +#define PA_MAC_BLIO_MUTEX +*/ + +typedef struct { + PaUtilRingBuffer inputRingBuffer; + PaUtilRingBuffer outputRingBuffer; + ring_buffer_size_t ringBufferFrames; + PaSampleFormat inputSampleFormat; + size_t inputSampleSizeActual; + size_t inputSampleSizePow2; + PaSampleFormat outputSampleFormat; + size_t outputSampleSizeActual; + size_t outputSampleSizePow2; + + int inChan; + int outChan; + + //PaStreamCallbackFlags statusFlags; + uint32_t statusFlags; + PaError errors; + + /* Here we handle blocking, using condition variables. */ +#ifdef PA_MAC_BLIO_MUTEX + volatile bool isInputEmpty; + pthread_mutex_t inputMutex; + pthread_cond_t inputCond; + + volatile bool isOutputFull; + pthread_mutex_t outputMutex; + pthread_cond_t outputCond; +#endif +} +PaMacBlio; + +/* + * These functions operate on condition and related variables. + */ + +PaError initializeBlioRingBuffers( + PaMacBlio *blio, + PaSampleFormat inputSampleFormat, + PaSampleFormat outputSampleFormat, + long ringBufferSizeInFrames, + int inChan, + int outChan ); +PaError destroyBlioRingBuffers( PaMacBlio *blio ); +PaError resetBlioRingBuffers( PaMacBlio *blio ); + +int BlioCallback( + const void *input, void *output, + unsigned long frameCount, + const PaStreamCallbackTimeInfo* timeInfo, + PaStreamCallbackFlags statusFlags, + void *userData ); + +PaError waitUntilBlioWriteBufferIsEmpty( PaMacBlio *blio, double sampleRate, + size_t framesPerBuffer ); + +#endif /*PA_MAC_CORE_BLOCKING_H_*/ diff --git a/portaudio/src/hostapi/coreaudio/pa_mac_core_internal.h b/portaudio/portaudio/src/hostapi/coreaudio/pa_mac_core_internal.h similarity index 100% rename from portaudio/src/hostapi/coreaudio/pa_mac_core_internal.h rename to portaudio/portaudio/src/hostapi/coreaudio/pa_mac_core_internal.h diff --git a/portaudio/src/hostapi/coreaudio/pa_mac_core_utilities.c b/portaudio/portaudio/src/hostapi/coreaudio/pa_mac_core_utilities.c similarity index 100% rename from portaudio/src/hostapi/coreaudio/pa_mac_core_utilities.c rename to portaudio/portaudio/src/hostapi/coreaudio/pa_mac_core_utilities.c diff --git a/portaudio/src/hostapi/coreaudio/pa_mac_core_utilities.h b/portaudio/portaudio/src/hostapi/coreaudio/pa_mac_core_utilities.h similarity index 100% rename from portaudio/src/hostapi/coreaudio/pa_mac_core_utilities.h rename to portaudio/portaudio/src/hostapi/coreaudio/pa_mac_core_utilities.h diff --git a/portaudio/src/hostapi/wmme/pa_win_wmme.c b/portaudio/portaudio/src/hostapi/wmme/pa_win_wmme.c similarity index 95% rename from portaudio/src/hostapi/wmme/pa_win_wmme.c rename to portaudio/portaudio/src/hostapi/wmme/pa_win_wmme.c index 7c9f5f93a0..422c86714a 100644 --- a/portaudio/src/hostapi/wmme/pa_win_wmme.c +++ b/portaudio/portaudio/src/hostapi/wmme/pa_win_wmme.c @@ -1,5 +1,5 @@ /* - * $Id: pa_win_wmme.c 1874 2012-10-31 06:20:59Z rbencina $ + * $Id$ * pa_win_wmme.c * Implementation of PortAudio for Windows MultiMedia Extensions (WMME) * @@ -62,7 +62,7 @@ */ /** @file - @ingroup hostapi_src + @ingroup hostapi_src @brief Win32 host API implementation for the Windows MultiMedia Extensions (WMME) audio API. */ @@ -86,6 +86,7 @@ #include #include +#include #include #include #include @@ -201,31 +202,52 @@ static const char constInputMapperSuffix_[] = " - Input"; static const char constOutputMapperSuffix_[] = " - Output"; -/* -copies TCHAR string to explicit char string -*/ -char *StrTCpyToC(char *to, const TCHAR *from) +/********************************************************************/ + +/* Copy null-terminated TCHAR string to explicit char string using UTF8 encoding */ +static char *CopyTCharStringToUtf8CString(char *destination, size_t destLengthBytes, const TCHAR *source) { #if !defined(_UNICODE) && !defined(UNICODE) - return strcpy(to, from); + return strcpy(destination, source); #else - int count = wcslen(from); - if (count != 0) - if (WideCharToMultiByte(CP_ACP, 0, from, count, to, count, NULL, NULL) == 0) - return NULL; - return to; + /* The cbMultiByte parameter ["destLengthBytes" below] is: + """ + Size, in bytes, of the buffer indicated by lpMultiByteStr ["destination" below]. + If this parameter is set to 0, the function returns the required buffer + size for lpMultiByteStr and makes no use of the output parameter itself. + """ + Source: WideCharToMultiByte at MSDN: + http://msdn.microsoft.com/en-us/library/windows/desktop/dd374130(v=vs.85).aspx + */ + int intDestLengthBytes; /* cbMultiByte */ + /* intDestLengthBytes is an int, destLengthBytes is a size_t. Ensure that we don't overflow + intDestLengthBytes by only using at most INT_MAX bytes of destination buffer. + */ + if (destLengthBytes < INT_MAX) + { +#pragma warning (disable : 4267) /* "conversion from 'size_t' to 'int', possible loss of data" */ + intDestLengthBytes = (int)destLengthBytes; /* destLengthBytes is guaranteed < INT_MAX here */ +#pragma warning (default : 4267) + } + else + { + intDestLengthBytes = INT_MAX; + } + + if (WideCharToMultiByte(CP_UTF8, 0, source, -1, destination, /*cbMultiByte=*/intDestLengthBytes, NULL, NULL) == 0) + return NULL; + return destination; #endif } -/* -returns length of TCHAR string -*/ -size_t StrTLen(const TCHAR *str) +/* returns required length (in bytes) of destination buffer when + converting TCHAR string to UTF8 bytes, not including the terminating null. */ +static size_t TCharStringLen(const TCHAR *str) { #if !defined(_UNICODE) && !defined(UNICODE) - return strlen(str); + return strlen(str); #else - return wcslen(str); + return WideCharToMultiByte(CP_UTF8, 0, str, -1, NULL, 0, NULL, NULL); #endif } @@ -491,7 +513,7 @@ static UINT LocalDeviceIndexToWinMmeDeviceId( PaWinMmeHostApiRepresentation *hos { assert( device >= 0 && device < hostApi->inputDeviceCount + hostApi->outputDeviceCount ); - return hostApi->winMmeDeviceIds[ device ]; + return hostApi->winMmeDeviceIds[ device ]; } @@ -686,6 +708,7 @@ static PaError InitializeInputDeviceInfo( PaWinMmeHostApiRepresentation *winMmeH MMRESULT mmresult; WAVEINCAPS wic; PaDeviceInfo *deviceInfo = &winMmeDeviceInfo->inheritedDeviceInfo; + size_t len; *success = 0; @@ -705,31 +728,35 @@ static PaError InitializeInputDeviceInfo( PaWinMmeHostApiRepresentation *winMmeH return paNoError; } + /* NOTE: the WAVEOUTCAPS.szPname is a null-terminated array of 32 characters, + so we are limited to displaying only the first 31 characters of the device name. */ if( winMmeInputDeviceId == WAVE_MAPPER ) { + len = TCharStringLen( wic.szPname ) + 1 + sizeof(constInputMapperSuffix_); /* Append I/O suffix to WAVE_MAPPER device. */ - deviceName = (char *)PaUtil_GroupAllocateMemory( + deviceName = (char*)PaUtil_GroupAllocateMemory( winMmeHostApi->allocations, - (long) (StrTLen( wic.szPname ) + 1 + sizeof(constInputMapperSuffix_)) ); + (long)len ); if( !deviceName ) { result = paInsufficientMemory; goto error; } - StrTCpyToC( deviceName, wic.szPname ); + CopyTCharStringToUtf8CString( deviceName, len, wic.szPname ); strcat( deviceName, constInputMapperSuffix_ ); } else { + len = TCharStringLen( wic.szPname ) + 1; deviceName = (char*)PaUtil_GroupAllocateMemory( - winMmeHostApi->allocations, - (long) (StrTLen( wic.szPname ) + 1) ); + winMmeHostApi->allocations, + (long)len ); if( !deviceName ) { result = paInsufficientMemory; goto error; } - StrTCpyToC( deviceName, wic.szPname ); + CopyTCharStringToUtf8CString( deviceName, len, wic.szPname ); } deviceInfo->name = deviceName; @@ -811,6 +838,7 @@ static PaError InitializeOutputDeviceInfo( PaWinMmeHostApiRepresentation *winMme MMRESULT mmresult; WAVEOUTCAPS woc; PaDeviceInfo *deviceInfo = &winMmeDeviceInfo->inheritedDeviceInfo; + size_t len; #ifdef PAWIN_USE_WDMKS_DEVICE_INFO int wdmksDeviceOutputChannelCountIsKnown; #endif @@ -833,31 +861,35 @@ static PaError InitializeOutputDeviceInfo( PaWinMmeHostApiRepresentation *winMme return paNoError; } + /* NOTE: the WAVEOUTCAPS.szPname is a null-terminated array of 32 characters, + so we are limited to displaying only the first 31 characters of the device name. */ if( winMmeOutputDeviceId == WAVE_MAPPER ) { /* Append I/O suffix to WAVE_MAPPER device. */ - deviceName = (char *)PaUtil_GroupAllocateMemory( + len = TCharStringLen( woc.szPname ) + 1 + sizeof(constOutputMapperSuffix_); + deviceName = (char*)PaUtil_GroupAllocateMemory( winMmeHostApi->allocations, - (long) (StrTLen( woc.szPname ) + 1 + sizeof(constOutputMapperSuffix_)) ); + (long)len ); if( !deviceName ) { result = paInsufficientMemory; goto error; } - StrTCpyToC( deviceName, woc.szPname ); + CopyTCharStringToUtf8CString( deviceName, len, woc.szPname ); strcat( deviceName, constOutputMapperSuffix_ ); } else { + len = TCharStringLen( woc.szPname ) + 1; deviceName = (char*)PaUtil_GroupAllocateMemory( winMmeHostApi->allocations, - (long) (StrTLen( woc.szPname ) + 1) ); + (long)len ); if( !deviceName ) { result = paInsufficientMemory; goto error; } - StrTCpyToC( deviceName, woc.szPname ); + CopyTCharStringToUtf8CString( deviceName, len, woc.szPname ); } deviceInfo->name = deviceName; @@ -882,7 +914,7 @@ static PaError InitializeOutputDeviceInfo( PaWinMmeHostApiRepresentation *winMme #ifdef PAWIN_USE_WDMKS_DEVICE_INFO wdmksDeviceOutputChannelCountIsKnown = QueryWaveOutKSFilterMaxChannels( - winMmeOutputDeviceId, &deviceInfo->maxOutputChannels ); + winMmeOutputDeviceId, &deviceInfo->maxOutputChannels ); if( wdmksDeviceOutputChannelCountIsKnown && !winMmeDeviceInfo->deviceOutputChannelCountIsKnown ) winMmeDeviceInfo->deviceOutputChannelCountIsKnown = 1; #endif /* PAWIN_USE_WDMKS_DEVICE_INFO */ @@ -901,9 +933,19 @@ static PaError InitializeOutputDeviceInfo( PaWinMmeHostApiRepresentation *winMme static void GetDefaultLatencies( PaTime *defaultLowLatency, PaTime *defaultHighLatency ) { +/* +NOTE: GetVersionEx() is deprecated as of Windows 8.1 and can not be used to reliably detect +versions of Windows higher than Windows 8 (due to manifest requirements for reporting higher versions). +Microsoft recommends switching to VerifyVersionInfo (available on Win 2k and later), however GetVersionEx +is is faster, for now we just disable the deprecation warning. +See: https://msdn.microsoft.com/en-us/library/windows/desktop/ms724451(v=vs.85).aspx +See: http://www.codeproject.com/Articles/678606/Part-Overcoming-Windows-s-deprecation-of-GetVe +*/ +#pragma warning (disable : 4996) /* use of GetVersionEx */ + OSVERSIONINFO osvi; osvi.dwOSVersionInfoSize = sizeof( osvi ); - GetVersionEx( &osvi ); + GetVersionEx( &osvi ); /* Check for NT */ if( (osvi.dwMajorVersion == 4) && (osvi.dwPlatformId == 2) ) @@ -920,6 +962,8 @@ static void GetDefaultLatencies( PaTime *defaultLowLatency, PaTime *defaultHighL } *defaultHighLatency = *defaultLowLatency * 2; + +#pragma warning (default : 4996) } @@ -983,11 +1027,11 @@ PaError PaWinMme_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiInd inputDeviceCount = waveInGetNumDevs(); if( inputDeviceCount > 0 ) - maximumPossibleDeviceCount += inputDeviceCount + 1; /* assume there is a WAVE_MAPPER */ + maximumPossibleDeviceCount += inputDeviceCount + 1; /* assume there is a WAVE_MAPPER */ outputDeviceCount = waveOutGetNumDevs(); if( outputDeviceCount > 0 ) - maximumPossibleDeviceCount += outputDeviceCount + 1; /* assume there is a WAVE_MAPPER */ + maximumPossibleDeviceCount += outputDeviceCount + 1; /* assume there is a WAVE_MAPPER */ if( maximumPossibleDeviceCount > 0 ){ @@ -2157,29 +2201,29 @@ static PaError ValidateWinMmeSpecificStreamInfo( char *throttleProcessingThreadOnOverload, unsigned long *deviceCount ) { - if( streamInfo ) - { - if( streamInfo->size != sizeof( PaWinMmeStreamInfo ) - || streamInfo->version != 1 ) - { - return paIncompatibleHostApiSpecificStreamInfo; - } + if( streamInfo ) + { + if( streamInfo->size != sizeof( PaWinMmeStreamInfo ) + || streamInfo->version != 1 ) + { + return paIncompatibleHostApiSpecificStreamInfo; + } *winMmeSpecificFlags = streamInfo->flags; - if( streamInfo->flags & paWinMmeDontThrottleOverloadedProcessingThread ) - *throttleProcessingThreadOnOverload = 0; + if( streamInfo->flags & paWinMmeDontThrottleOverloadedProcessingThread ) + *throttleProcessingThreadOnOverload = 0; - if( streamInfo->flags & paWinMmeUseMultipleDevices ) - { - if( streamParameters->device != paUseHostApiSpecificDeviceSpecification ) - return paInvalidDevice; - - *deviceCount = streamInfo->deviceCount; - } - } + if( streamInfo->flags & paWinMmeUseMultipleDevices ) + { + if( streamParameters->device != paUseHostApiSpecificDeviceSpecification ) + return paInvalidDevice; + + *deviceCount = streamInfo->deviceCount; + } + } - return paNoError; + return paNoError; } static PaError RetrieveDevicesFromStreamParameters( @@ -2194,34 +2238,34 @@ static PaError RetrieveDevicesFromStreamParameters( int totalChannelCount; PaDeviceIndex hostApiDevice; - if( streamInfo && streamInfo->flags & paWinMmeUseMultipleDevices ) - { - totalChannelCount = 0; - for( i=0; i < deviceCount; ++i ) - { - /* validate that the device number is within range */ - result = PaUtil_DeviceIndexToHostApiDeviceIndex( &hostApiDevice, - streamInfo->devices[i].device, hostApi ); - if( result != paNoError ) - return result; - - devices[i].device = hostApiDevice; - devices[i].channelCount = streamInfo->devices[i].channelCount; - - totalChannelCount += devices[i].channelCount; - } - - if( totalChannelCount != streamParameters->channelCount ) - { - /* channelCount must match total channels specified by multiple devices */ - return paInvalidChannelCount; /* REVIEW use of this error code */ - } - } - else - { - devices[0].device = streamParameters->device; - devices[0].channelCount = streamParameters->channelCount; - } + if( streamInfo && streamInfo->flags & paWinMmeUseMultipleDevices ) + { + totalChannelCount = 0; + for( i=0; i < deviceCount; ++i ) + { + /* validate that the device number is within range */ + result = PaUtil_DeviceIndexToHostApiDeviceIndex( &hostApiDevice, + streamInfo->devices[i].device, hostApi ); + if( result != paNoError ) + return result; + + devices[i].device = hostApiDevice; + devices[i].channelCount = streamInfo->devices[i].channelCount; + + totalChannelCount += devices[i].channelCount; + } + + if( totalChannelCount != streamParameters->channelCount ) + { + /* channelCount must match total channels specified by multiple devices */ + return paInvalidChannelCount; /* REVIEW use of this error code */ + } + } + else + { + devices[0].device = streamParameters->device; + devices[0].channelCount = streamParameters->channelCount; + } return result; } @@ -2235,10 +2279,10 @@ static PaError ValidateInputChannelCounts( PaWinMmeDeviceInfo *inputDeviceInfo; PaError paerror; - for( i=0; i < deviceCount; ++i ) - { + for( i=0; i < deviceCount; ++i ) + { if( devices[i].channelCount < 1 ) - return paInvalidChannelCount; + return paInvalidChannelCount; inputDeviceInfo = (PaWinMmeDeviceInfo*)hostApi->deviceInfos[ devices[i].device ]; @@ -2246,7 +2290,7 @@ static PaError ValidateInputChannelCounts( paerror = IsInputChannelCountSupported( inputDeviceInfo, devices[i].channelCount ); if( paerror != paNoError ) return paerror; - } + } return paNoError; } @@ -2260,10 +2304,10 @@ static PaError ValidateOutputChannelCounts( PaWinMmeDeviceInfo *outputDeviceInfo; PaError paerror; - for( i=0; i < deviceCount; ++i ) - { + for( i=0; i < deviceCount; ++i ) + { if( devices[i].channelCount < 1 ) - return paInvalidChannelCount; + return paInvalidChannelCount; outputDeviceInfo = (PaWinMmeDeviceInfo*)hostApi->deviceInfos[ devices[i].device ]; @@ -2271,7 +2315,7 @@ static PaError ValidateOutputChannelCounts( paerror = IsOutputChannelCountSupported( outputDeviceInfo, devices[i].channelCount ); if( paerror != paNoError ) return paerror; - } + } return paNoError; } @@ -2320,28 +2364,28 @@ static PaError OpenStream( struct PaUtilHostApiRepresentation *hostApi, if( inputParameters ) { - inputChannelCount = inputParameters->channelCount; + inputChannelCount = inputParameters->channelCount; inputSampleFormat = inputParameters->sampleFormat; suggestedInputLatency = inputParameters->suggestedLatency; - inputDeviceCount = 1; + inputDeviceCount = 1; - /* validate input hostApiSpecificStreamInfo */ + /* validate input hostApiSpecificStreamInfo */ inputStreamInfo = (PaWinMmeStreamInfo*)inputParameters->hostApiSpecificStreamInfo; - result = ValidateWinMmeSpecificStreamInfo( inputParameters, inputStreamInfo, + result = ValidateWinMmeSpecificStreamInfo( inputParameters, inputStreamInfo, &winMmeSpecificInputFlags, - &throttleProcessingThreadOnOverload, - &inputDeviceCount ); - if( result != paNoError ) return result; + &throttleProcessingThreadOnOverload, + &inputDeviceCount ); + if( result != paNoError ) return result; - inputDevices = (PaWinMmeDeviceAndChannelCount*)alloca( sizeof(PaWinMmeDeviceAndChannelCount) * inputDeviceCount ); + inputDevices = (PaWinMmeDeviceAndChannelCount*)alloca( sizeof(PaWinMmeDeviceAndChannelCount) * inputDeviceCount ); if( !inputDevices ) return paInsufficientMemory; - result = RetrieveDevicesFromStreamParameters( hostApi, inputParameters, inputStreamInfo, inputDevices, inputDeviceCount ); - if( result != paNoError ) return result; + result = RetrieveDevicesFromStreamParameters( hostApi, inputParameters, inputStreamInfo, inputDevices, inputDeviceCount ); + if( result != paNoError ) return result; - result = ValidateInputChannelCounts( hostApi, inputDevices, inputDeviceCount ); - if( result != paNoError ) return result; + result = ValidateInputChannelCounts( hostApi, inputDevices, inputDeviceCount ); + if( result != paNoError ) return result; hostInputSampleFormat = PaUtil_SelectClosestAvailableFormat( paInt16 /* native formats */, inputSampleFormat ); @@ -2357,7 +2401,7 @@ static PaError OpenStream( struct PaUtilHostApiRepresentation *hostApi, else inputChannelMask = PaWin_DefaultChannelMask( inputDevices[0].channelCount ); } - } + } else { inputChannelCount = 0; @@ -2376,22 +2420,22 @@ static PaError OpenStream( struct PaUtilHostApiRepresentation *hostApi, outputDeviceCount = 1; - /* validate output hostApiSpecificStreamInfo */ + /* validate output hostApiSpecificStreamInfo */ outputStreamInfo = (PaWinMmeStreamInfo*)outputParameters->hostApiSpecificStreamInfo; - result = ValidateWinMmeSpecificStreamInfo( outputParameters, outputStreamInfo, + result = ValidateWinMmeSpecificStreamInfo( outputParameters, outputStreamInfo, &winMmeSpecificOutputFlags, - &throttleProcessingThreadOnOverload, - &outputDeviceCount ); - if( result != paNoError ) return result; + &throttleProcessingThreadOnOverload, + &outputDeviceCount ); + if( result != paNoError ) return result; - outputDevices = (PaWinMmeDeviceAndChannelCount*)alloca( sizeof(PaWinMmeDeviceAndChannelCount) * outputDeviceCount ); + outputDevices = (PaWinMmeDeviceAndChannelCount*)alloca( sizeof(PaWinMmeDeviceAndChannelCount) * outputDeviceCount ); if( !outputDevices ) return paInsufficientMemory; - result = RetrieveDevicesFromStreamParameters( hostApi, outputParameters, outputStreamInfo, outputDevices, outputDeviceCount ); - if( result != paNoError ) return result; + result = RetrieveDevicesFromStreamParameters( hostApi, outputParameters, outputStreamInfo, outputDevices, outputDeviceCount ); + if( result != paNoError ) return result; - result = ValidateOutputChannelCounts( hostApi, outputDevices, outputDeviceCount ); - if( result != paNoError ) return result; + result = ValidateOutputChannelCounts( hostApi, outputDevices, outputDeviceCount ); + if( result != paNoError ) return result; hostOutputSampleFormat = PaUtil_SelectClosestAvailableFormat( paInt16 /* native formats */, outputSampleFormat ); @@ -3219,9 +3263,9 @@ static PaError StartStream( PaStream *s ) MMRESULT mmresult; unsigned int i, j; int callbackResult; - unsigned int channel; - unsigned long framesProcessed; - PaStreamCallbackTimeInfo timeInfo = {0,0,0}; /** @todo implement this for stream priming */ + unsigned int channel; + unsigned long framesProcessed; + PaStreamCallbackTimeInfo timeInfo = {0,0,0}; /** @todo implement this for stream priming */ PaUtil_ResetBufferProcessor( &stream->bufferProcessor ); diff --git a/portaudio/src/os/unix/pa_unix_hostapis.c b/portaudio/portaudio/src/os/unix/pa_unix_hostapis.c similarity index 98% rename from portaudio/src/os/unix/pa_unix_hostapis.c rename to portaudio/portaudio/src/os/unix/pa_unix_hostapis.c index 4399b875b1..a9b4a05d7f 100644 --- a/portaudio/src/os/unix/pa_unix_hostapis.c +++ b/portaudio/portaudio/src/os/unix/pa_unix_hostapis.c @@ -1,5 +1,5 @@ /* - * $Id: pa_unix_hostapis.c 1740 2011-08-25 07:17:48Z philburk $ + * $Id$ * Portable Audio I/O Library UNIX initialization table * * Based on the Open Source API proposed by Ross Bencina diff --git a/portaudio/src/os/unix/pa_unix_util.c b/portaudio/portaudio/src/os/unix/pa_unix_util.c similarity index 99% rename from portaudio/src/os/unix/pa_unix_util.c rename to portaudio/portaudio/src/os/unix/pa_unix_util.c index 18f806c507..17664eabf0 100644 --- a/portaudio/src/os/unix/pa_unix_util.c +++ b/portaudio/portaudio/src/os/unix/pa_unix_util.c @@ -1,5 +1,5 @@ /* - * $Id: pa_unix_util.c 1510 2010-06-10 08:05:29Z dmitrykos $ + * $Id$ * Portable Audio I/O Library * UNIX platform-specific support functions * diff --git a/portaudio/src/os/unix/pa_unix_util.h b/portaudio/portaudio/src/os/unix/pa_unix_util.h similarity index 99% rename from portaudio/src/os/unix/pa_unix_util.h rename to portaudio/portaudio/src/os/unix/pa_unix_util.h index e900f87726..d73c99c8fa 100644 --- a/portaudio/src/os/unix/pa_unix_util.h +++ b/portaudio/portaudio/src/os/unix/pa_unix_util.h @@ -1,5 +1,5 @@ /* - * $Id: pa_unix_util.h 1241 2007-07-23 20:08:31Z aknudsen $ + * $Id$ * Portable Audio I/O Library * UNIX platform-specific support functions * diff --git a/portaudio/src/os/win/pa_win_coinitialize.c b/portaudio/portaudio/src/os/win/pa_win_coinitialize.c similarity index 95% rename from portaudio/src/os/win/pa_win_coinitialize.c rename to portaudio/portaudio/src/os/win/pa_win_coinitialize.c index e15b145e23..c4c6dde074 100644 --- a/portaudio/src/os/win/pa_win_coinitialize.c +++ b/portaudio/portaudio/src/os/win/pa_win_coinitialize.c @@ -1,144 +1,148 @@ -/* - * Microsoft COM initialization routines - * Copyright (c) 1999-2011 Ross Bencina, Dmitry Kostjuchenko - * - * Based on the Open Source API proposed by Ross Bencina - * Copyright (c) 1999-2011 Ross Bencina, Phil Burk - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF - * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -/* - * The text above constitutes the entire PortAudio license; however, - * the PortAudio community also makes the following non-binding requests: - * - * Any person wishing to distribute modifications to the Software is - * requested to send the modifications to the original developer so that - * they can be incorporated into the canonical version. It is also - * requested that these non-binding requests be included along with the - * license above. - */ - -/** @file - @ingroup win_src - - @brief Microsoft COM initialization routines. -*/ - -#include -#include - -#include "portaudio.h" -#include "pa_util.h" -#include "pa_debugprint.h" - -#include "pa_win_coinitialize.h" - - -#if (defined(WIN32) && (defined(_MSC_VER) && (_MSC_VER >= 1200))) && !defined(_WIN32_WCE) /* MSC version 6 and above */ -#pragma comment( lib, "ole32.lib" ) -#endif - - -/* use some special bit patterns here to try to guard against uninitialized memory errors */ -#define PAWINUTIL_COM_INITIALIZED (0xb38f) -#define PAWINUTIL_COM_NOT_INITIALIZED (0xf1cd) - - -PaError PaWinUtil_CoInitialize( PaHostApiTypeId hostApiType, PaWinUtilComInitializationResult *comInitializationResult ) -{ - HRESULT hr; - - comInitializationResult->state = PAWINUTIL_COM_NOT_INITIALIZED; - - /* - If COM is already initialized CoInitialize will either return - FALSE, or RPC_E_CHANGED_MODE if it was initialised in a different - threading mode. In either case we shouldn't consider it an error - but we need to be careful to not call CoUninitialize() if - RPC_E_CHANGED_MODE was returned. - */ - - hr = CoInitialize(0); /* use legacy-safe equivalent to CoInitializeEx(NULL, COINIT_APARTMENTTHREADED) */ - if( FAILED(hr) && hr != RPC_E_CHANGED_MODE ) - { - PA_DEBUG(("CoInitialize(0) failed. hr=%d\n", hr)); - - if( hr == E_OUTOFMEMORY ) - return paInsufficientMemory; - - { - char *lpMsgBuf; - FormatMessage( - FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, - NULL, - hr, - MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), - (LPTSTR) &lpMsgBuf, - 0, - NULL - ); - PaUtil_SetLastHostErrorInfo( hostApiType, hr, lpMsgBuf ); - LocalFree( lpMsgBuf ); - } - - return paUnanticipatedHostError; - } - - if( hr != RPC_E_CHANGED_MODE ) - { - comInitializationResult->state = PAWINUTIL_COM_INITIALIZED; - - /* - Memorize calling thread id and report warning on Uninitialize if - calling thread is different as CoInitialize must match CoUninitialize - in the same thread. - */ - comInitializationResult->initializingThreadId = GetCurrentThreadId(); - } - - return paNoError; -} - - -void PaWinUtil_CoUninitialize( PaHostApiTypeId hostApiType, PaWinUtilComInitializationResult *comInitializationResult ) -{ - if( comInitializationResult->state != PAWINUTIL_COM_NOT_INITIALIZED - && comInitializationResult->state != PAWINUTIL_COM_INITIALIZED ){ - - PA_DEBUG(("ERROR: PaWinUtil_CoUninitialize called without calling PaWinUtil_CoInitialize\n")); - } - - if( comInitializationResult->state == PAWINUTIL_COM_INITIALIZED ) - { - DWORD currentThreadId = GetCurrentThreadId(); - if( comInitializationResult->initializingThreadId != currentThreadId ) - { - PA_DEBUG(("ERROR: failed PaWinUtil_CoUninitialize calling thread[%d] does not match initializing thread[%d]\n", - currentThreadId, comInitializationResult->initializingThreadId)); - } - else - { - CoUninitialize(); - - comInitializationResult->state = PAWINUTIL_COM_NOT_INITIALIZED; - } - } +/* + * Microsoft COM initialization routines + * Copyright (c) 1999-2011 Ross Bencina, Dmitry Kostjuchenko + * + * Based on the Open Source API proposed by Ross Bencina + * Copyright (c) 1999-2011 Ross Bencina, Phil Burk + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files + * (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, + * publish, distribute, sublicense, and/or sell copies of the Software, + * and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +/* + * The text above constitutes the entire PortAudio license; however, + * the PortAudio community also makes the following non-binding requests: + * + * Any person wishing to distribute modifications to the Software is + * requested to send the modifications to the original developer so that + * they can be incorporated into the canonical version. It is also + * requested that these non-binding requests be included along with the + * license above. + */ + +/** @file + @ingroup win_src + + @brief Microsoft COM initialization routines. +*/ + +#include +#include + +#include "portaudio.h" +#include "pa_util.h" +#include "pa_debugprint.h" + +#include "pa_win_coinitialize.h" + + +#if (defined(WIN32) && (defined(_MSC_VER) && (_MSC_VER >= 1200))) && !defined(_WIN32_WCE) && !(defined(WINAPI_FAMILY) && (WINAPI_FAMILY == WINAPI_FAMILY_APP)) /* MSC version 6 and above */ +#pragma comment( lib, "ole32.lib" ) +#endif + + +/* use some special bit patterns here to try to guard against uninitialized memory errors */ +#define PAWINUTIL_COM_INITIALIZED (0xb38f) +#define PAWINUTIL_COM_NOT_INITIALIZED (0xf1cd) + + +PaError PaWinUtil_CoInitialize( PaHostApiTypeId hostApiType, PaWinUtilComInitializationResult *comInitializationResult ) +{ + HRESULT hr; + + comInitializationResult->state = PAWINUTIL_COM_NOT_INITIALIZED; + + /* + If COM is already initialized CoInitialize will either return + FALSE, or RPC_E_CHANGED_MODE if it was initialised in a different + threading mode. In either case we shouldn't consider it an error + but we need to be careful to not call CoUninitialize() if + RPC_E_CHANGED_MODE was returned. + */ + +#if !defined(WINAPI_FAMILY) || (WINAPI_FAMILY != WINAPI_FAMILY_APP) + hr = CoInitialize(0); /* use legacy-safe equivalent to CoInitializeEx(NULL, COINIT_APARTMENTTHREADED) */ +#else + hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED); +#endif + if( FAILED(hr) && hr != RPC_E_CHANGED_MODE ) + { + PA_DEBUG(("CoInitialize(0) failed. hr=%d\n", hr)); + + if( hr == E_OUTOFMEMORY ) + return paInsufficientMemory; + + { + char *lpMsgBuf; + FormatMessage( + FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, + NULL, + hr, + MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), + (LPTSTR) &lpMsgBuf, + 0, + NULL + ); + PaUtil_SetLastHostErrorInfo( hostApiType, hr, lpMsgBuf ); + LocalFree( lpMsgBuf ); + } + + return paUnanticipatedHostError; + } + + if( hr != RPC_E_CHANGED_MODE ) + { + comInitializationResult->state = PAWINUTIL_COM_INITIALIZED; + + /* + Memorize calling thread id and report warning on Uninitialize if + calling thread is different as CoInitialize must match CoUninitialize + in the same thread. + */ + comInitializationResult->initializingThreadId = GetCurrentThreadId(); + } + + return paNoError; +} + + +void PaWinUtil_CoUninitialize( PaHostApiTypeId hostApiType, PaWinUtilComInitializationResult *comInitializationResult ) +{ + if( comInitializationResult->state != PAWINUTIL_COM_NOT_INITIALIZED + && comInitializationResult->state != PAWINUTIL_COM_INITIALIZED ){ + + PA_DEBUG(("ERROR: PaWinUtil_CoUninitialize called without calling PaWinUtil_CoInitialize\n")); + } + + if( comInitializationResult->state == PAWINUTIL_COM_INITIALIZED ) + { + DWORD currentThreadId = GetCurrentThreadId(); + if( comInitializationResult->initializingThreadId != currentThreadId ) + { + PA_DEBUG(("ERROR: failed PaWinUtil_CoUninitialize calling thread[%d] does not match initializing thread[%d]\n", + currentThreadId, comInitializationResult->initializingThreadId)); + } + else + { + CoUninitialize(); + + comInitializationResult->state = PAWINUTIL_COM_NOT_INITIALIZED; + } + } } \ No newline at end of file diff --git a/portaudio/src/os/win/pa_win_coinitialize.h b/portaudio/portaudio/src/os/win/pa_win_coinitialize.h similarity index 97% rename from portaudio/src/os/win/pa_win_coinitialize.h rename to portaudio/portaudio/src/os/win/pa_win_coinitialize.h index a76337c088..687ab83187 100644 --- a/portaudio/src/os/win/pa_win_coinitialize.h +++ b/portaudio/portaudio/src/os/win/pa_win_coinitialize.h @@ -1,94 +1,94 @@ -/* - * Microsoft COM initialization routines - * Copyright (c) 1999-2011 Ross Bencina, Phil Burk - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF - * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -/* - * The text above constitutes the entire PortAudio license; however, - * the PortAudio community also makes the following non-binding requests: - * - * Any person wishing to distribute modifications to the Software is - * requested to send the modifications to the original developer so that - * they can be incorporated into the canonical version. It is also - * requested that these non-binding requests be included along with the - * license above. - */ - -/** @file - @ingroup win_src - - @brief Microsoft COM initialization routines. -*/ - -#ifndef PA_WIN_COINITIALIZE_H -#define PA_WIN_COINITIALIZE_H - -#ifdef __cplusplus -extern "C" -{ -#endif /* __cplusplus */ - - -/** - @brief Data type used to hold the result of an attempt to initialize COM - using PaWinUtil_CoInitialize. Must be retained between a call to - PaWinUtil_CoInitialize and a matching call to PaWinUtil_CoUninitialize. -*/ -typedef struct PaWinUtilComInitializationResult{ - int state; - int initializingThreadId; -} PaWinUtilComInitializationResult; - - -/** - @brief Initialize Microsoft COM subsystem on the current thread. - - @param hostApiType the host API type id of the caller. Used for error reporting. - - @param comInitializationResult An output parameter. The value pointed to by - this parameter stores information required by PaWinUtil_CoUninitialize - to correctly uninitialize COM. The value should be retained and later - passed to PaWinUtil_CoUninitialize. - - If PaWinUtil_CoInitialize returns paNoError, the caller must later call - PaWinUtil_CoUninitialize once. -*/ -PaError PaWinUtil_CoInitialize( PaHostApiTypeId hostApiType, PaWinUtilComInitializationResult *comInitializationResult ); - - -/** - @brief Uninitialize the Microsoft COM subsystem on the current thread using - the result of a previous call to PaWinUtil_CoInitialize. Must be called on the same - thread as PaWinUtil_CoInitialize. - - @param hostApiType the host API type id of the caller. Used for error reporting. - - @param comInitializationResult An input parameter. A pointer to a value previously - initialized by a call to PaWinUtil_CoInitialize. -*/ -void PaWinUtil_CoUninitialize( PaHostApiTypeId hostApiType, PaWinUtilComInitializationResult *comInitializationResult ); - - -#ifdef __cplusplus -} -#endif /* __cplusplus */ -#endif /* PA_WIN_COINITIALIZE_H */ +/* + * Microsoft COM initialization routines + * Copyright (c) 1999-2011 Ross Bencina, Phil Burk + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files + * (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, + * publish, distribute, sublicense, and/or sell copies of the Software, + * and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +/* + * The text above constitutes the entire PortAudio license; however, + * the PortAudio community also makes the following non-binding requests: + * + * Any person wishing to distribute modifications to the Software is + * requested to send the modifications to the original developer so that + * they can be incorporated into the canonical version. It is also + * requested that these non-binding requests be included along with the + * license above. + */ + +/** @file + @ingroup win_src + + @brief Microsoft COM initialization routines. +*/ + +#ifndef PA_WIN_COINITIALIZE_H +#define PA_WIN_COINITIALIZE_H + +#ifdef __cplusplus +extern "C" +{ +#endif /* __cplusplus */ + + +/** + @brief Data type used to hold the result of an attempt to initialize COM + using PaWinUtil_CoInitialize. Must be retained between a call to + PaWinUtil_CoInitialize and a matching call to PaWinUtil_CoUninitialize. +*/ +typedef struct PaWinUtilComInitializationResult{ + int state; + int initializingThreadId; +} PaWinUtilComInitializationResult; + + +/** + @brief Initialize Microsoft COM subsystem on the current thread. + + @param hostApiType the host API type id of the caller. Used for error reporting. + + @param comInitializationResult An output parameter. The value pointed to by + this parameter stores information required by PaWinUtil_CoUninitialize + to correctly uninitialize COM. The value should be retained and later + passed to PaWinUtil_CoUninitialize. + + If PaWinUtil_CoInitialize returns paNoError, the caller must later call + PaWinUtil_CoUninitialize once. +*/ +PaError PaWinUtil_CoInitialize( PaHostApiTypeId hostApiType, PaWinUtilComInitializationResult *comInitializationResult ); + + +/** + @brief Uninitialize the Microsoft COM subsystem on the current thread using + the result of a previous call to PaWinUtil_CoInitialize. Must be called on the same + thread as PaWinUtil_CoInitialize. + + @param hostApiType the host API type id of the caller. Used for error reporting. + + @param comInitializationResult An input parameter. A pointer to a value previously + initialized by a call to PaWinUtil_CoInitialize. +*/ +void PaWinUtil_CoUninitialize( PaHostApiTypeId hostApiType, PaWinUtilComInitializationResult *comInitializationResult ); + + +#ifdef __cplusplus +} +#endif /* __cplusplus */ +#endif /* PA_WIN_COINITIALIZE_H */ diff --git a/portaudio/src/os/win/pa_win_hostapis.c b/portaudio/portaudio/src/os/win/pa_win_hostapis.c similarity index 98% rename from portaudio/src/os/win/pa_win_hostapis.c rename to portaudio/portaudio/src/os/win/pa_win_hostapis.c index 5d22438799..9c9927ab77 100644 --- a/portaudio/src/os/win/pa_win_hostapis.c +++ b/portaudio/portaudio/src/os/win/pa_win_hostapis.c @@ -1,5 +1,5 @@ /* - * $Id: pa_win_hostapis.c 1728 2011-08-18 03:31:51Z rossb $ + * $Id$ * Portable Audio I/O Library Windows initialization table * * Based on the Open Source API proposed by Ross Bencina diff --git a/portaudio/src/os/win/pa_win_util.c b/portaudio/portaudio/src/os/win/pa_win_util.c similarity index 88% rename from portaudio/src/os/win/pa_win_util.c rename to portaudio/portaudio/src/os/win/pa_win_util.c index a9c55d0f8a..1cd35258bd 100644 --- a/portaudio/src/os/win/pa_win_util.c +++ b/portaudio/portaudio/src/os/win/pa_win_util.c @@ -1,5 +1,5 @@ /* - * $Id: pa_win_util.c 1584 2011-02-02 18:58:17Z rossb $ + * $Id$ * Portable Audio I/O Library * Win32 platform-specific support functions * @@ -44,14 +44,17 @@ */ #include -#include /* for timeGetTime() */ -#include "pa_util.h" - -#if (defined(WIN32) && (defined(_MSC_VER) && (_MSC_VER >= 1200))) && !defined(_WIN32_WCE) /* MSC version 6 and above */ -#pragma comment( lib, "winmm.lib" ) +#if defined(WINAPI_FAMILY) && (WINAPI_FAMILY == WINAPI_FAMILY_APP) + #include /* for _ftime_s() */ +#else + #include /* for timeGetTime() */ + #if (defined(WIN32) && (defined(_MSC_VER) && (_MSC_VER >= 1200))) && !defined(_WIN32_WCE) /* MSC version 6 and above */ + #pragma comment( lib, "winmm.lib" ) + #endif #endif +#include "pa_util.h" /* Track memory allocations to avoid leaks. @@ -144,8 +147,12 @@ double PaUtil_GetTime( void ) } else { -#ifndef UNDER_CE +#ifndef UNDER_CE + #if defined(WINAPI_FAMILY) && (WINAPI_FAMILY == WINAPI_FAMILY_APP) + return GetTickCount64() * .001; + #else return timeGetTime() * .001; + #endif #else return GetTickCount() * .001; #endif diff --git a/portaudio/src/os/win/pa_win_waveformat.c b/portaudio/portaudio/src/os/win/pa_win_waveformat.c similarity index 97% rename from portaudio/src/os/win/pa_win_waveformat.c rename to portaudio/portaudio/src/os/win/pa_win_waveformat.c index 2eb2334758..bd5addd407 100644 --- a/portaudio/src/os/win/pa_win_waveformat.c +++ b/portaudio/portaudio/src/os/win/pa_win_waveformat.c @@ -1,158 +1,162 @@ -/* - * PortAudio Portable Real-Time Audio Library - * Windows WAVEFORMAT* data structure utilities - * portaudio.h should be included before this file. - * - * Copyright (c) 2007 Ross Bencina - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF - * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -/* - * The text above constitutes the entire PortAudio license; however, - * the PortAudio community also makes the following non-binding requests: - * - * Any person wishing to distribute modifications to the Software is - * requested to send the modifications to the original developer so that - * they can be incorporated into the canonical version. It is also - * requested that these non-binding requests be included along with the - * license above. - */ - -#include -#include - -#include "portaudio.h" -#include "pa_win_waveformat.h" - - -#if !defined(WAVE_FORMAT_EXTENSIBLE) -#define WAVE_FORMAT_EXTENSIBLE 0xFFFE -#endif - -static GUID pawin_ksDataFormatSubtypeGuidBase = - { (USHORT)(WAVE_FORMAT_PCM), 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71 }; - - -int PaWin_SampleFormatToLinearWaveFormatTag( PaSampleFormat sampleFormat ) -{ - if( sampleFormat == paFloat32 ) - return PAWIN_WAVE_FORMAT_IEEE_FLOAT; - - return PAWIN_WAVE_FORMAT_PCM; -} - - -void PaWin_InitializeWaveFormatEx( PaWinWaveFormat *waveFormat, - int numChannels, PaSampleFormat sampleFormat, int waveFormatTag, double sampleRate ) -{ - WAVEFORMATEX *waveFormatEx = (WAVEFORMATEX*)waveFormat; - int bytesPerSample = Pa_GetSampleSize(sampleFormat); - unsigned long bytesPerFrame = numChannels * bytesPerSample; - - waveFormatEx->wFormatTag = waveFormatTag; - waveFormatEx->nChannels = (WORD)numChannels; - waveFormatEx->nSamplesPerSec = (DWORD)sampleRate; - waveFormatEx->nAvgBytesPerSec = waveFormatEx->nSamplesPerSec * bytesPerFrame; - waveFormatEx->nBlockAlign = (WORD)bytesPerFrame; - waveFormatEx->wBitsPerSample = bytesPerSample * 8; - waveFormatEx->cbSize = 0; -} - - -void PaWin_InitializeWaveFormatExtensible( PaWinWaveFormat *waveFormat, - int numChannels, PaSampleFormat sampleFormat, int waveFormatTag, double sampleRate, - PaWinWaveFormatChannelMask channelMask ) -{ - WAVEFORMATEX *waveFormatEx = (WAVEFORMATEX*)waveFormat; - int bytesPerSample = Pa_GetSampleSize(sampleFormat); - unsigned long bytesPerFrame = numChannels * bytesPerSample; - GUID guid; - - waveFormatEx->wFormatTag = WAVE_FORMAT_EXTENSIBLE; - waveFormatEx->nChannels = (WORD)numChannels; - waveFormatEx->nSamplesPerSec = (DWORD)sampleRate; - waveFormatEx->nAvgBytesPerSec = waveFormatEx->nSamplesPerSec * bytesPerFrame; - waveFormatEx->nBlockAlign = (WORD)bytesPerFrame; - waveFormatEx->wBitsPerSample = bytesPerSample * 8; - waveFormatEx->cbSize = 22; - - *((WORD*)&waveFormat->fields[PAWIN_INDEXOF_WVALIDBITSPERSAMPLE]) = - waveFormatEx->wBitsPerSample; - - *((DWORD*)&waveFormat->fields[PAWIN_INDEXOF_DWCHANNELMASK]) = channelMask; - - guid = pawin_ksDataFormatSubtypeGuidBase; - guid.Data1 = (USHORT)waveFormatTag; - *((GUID*)&waveFormat->fields[PAWIN_INDEXOF_SUBFORMAT]) = guid; -} - -PaWinWaveFormatChannelMask PaWin_DefaultChannelMask( int numChannels ) -{ - switch( numChannels ){ - case 1: - return PAWIN_SPEAKER_MONO; - case 2: - return PAWIN_SPEAKER_STEREO; - case 3: - return PAWIN_SPEAKER_FRONT_LEFT | PAWIN_SPEAKER_FRONT_CENTER | PAWIN_SPEAKER_FRONT_RIGHT; - case 4: - return PAWIN_SPEAKER_QUAD; - case 5: - return PAWIN_SPEAKER_QUAD | PAWIN_SPEAKER_FRONT_CENTER; - case 6: - /* The meaning of the PAWIN_SPEAKER_5POINT1 flag has changed over time: - http://msdn2.microsoft.com/en-us/library/aa474707.aspx - We use PAWIN_SPEAKER_5POINT1 (not PAWIN_SPEAKER_5POINT1_SURROUND) - because on some cards (eg Audigy) PAWIN_SPEAKER_5POINT1_SURROUND - results in a virtual mixdown placing the rear output in the - front _and_ rear speakers. - */ - return PAWIN_SPEAKER_5POINT1; - /* case 7: */ - case 8: - /* RoBi: PAWIN_SPEAKER_7POINT1_SURROUND fits normal surround sound setups better than PAWIN_SPEAKER_7POINT1, f.i. NVidia HDMI Audio - output is silent on channels 5&6 with NVidia drivers, and channel 7&8 with Micrsoft HD Audio driver using PAWIN_SPEAKER_7POINT1. - With PAWIN_SPEAKER_7POINT1_SURROUND both setups work OK. */ - return PAWIN_SPEAKER_7POINT1_SURROUND; - } - - /* Apparently some Audigy drivers will output silence - if the direct-out constant (0) is used. So this is not ideal. - - RoBi 2012-12-19: Also, NVidia driver seem to output garbage instead. Again not very ideal. - */ - return PAWIN_SPEAKER_DIRECTOUT; - - /* Note that Alec Rogers proposed the following as an alternate method to - generate the default channel mask, however it doesn't seem to be an improvement - over the above, since some drivers will matrix outputs mapping to non-present - speakers accross multiple physical speakers. - - if(nChannels==1) { - pwfFormat->dwChannelMask = SPEAKER_FRONT_CENTER; - } - else { - pwfFormat->dwChannelMask = 0; - for(i=0; idwChannelMask = (pwfFormat->dwChannelMask << 1) | 0x1; - } - */ -} +/* + * PortAudio Portable Real-Time Audio Library + * Windows WAVEFORMAT* data structure utilities + * portaudio.h should be included before this file. + * + * Copyright (c) 2007 Ross Bencina + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files + * (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, + * publish, distribute, sublicense, and/or sell copies of the Software, + * and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +/* + * The text above constitutes the entire PortAudio license; however, + * the PortAudio community also makes the following non-binding requests: + * + * Any person wishing to distribute modifications to the Software is + * requested to send the modifications to the original developer so that + * they can be incorporated into the canonical version. It is also + * requested that these non-binding requests be included along with the + * license above. + */ + +#include +#include +#if defined(WINAPI_FAMILY) && (WINAPI_FAMILY == WINAPI_FAMILY_APP) + #include /* for WAVEFORMATEX */ +#endif + +#include "portaudio.h" +#include "pa_win_waveformat.h" + + +#if !defined(WAVE_FORMAT_EXTENSIBLE) +#define WAVE_FORMAT_EXTENSIBLE 0xFFFE +#endif + + +static GUID pawin_ksDataFormatSubtypeGuidBase = + { (USHORT)(WAVE_FORMAT_PCM), 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71 }; + + +int PaWin_SampleFormatToLinearWaveFormatTag( PaSampleFormat sampleFormat ) +{ + if( sampleFormat == paFloat32 ) + return PAWIN_WAVE_FORMAT_IEEE_FLOAT; + + return PAWIN_WAVE_FORMAT_PCM; +} + + +void PaWin_InitializeWaveFormatEx( PaWinWaveFormat *waveFormat, + int numChannels, PaSampleFormat sampleFormat, int waveFormatTag, double sampleRate ) +{ + WAVEFORMATEX *waveFormatEx = (WAVEFORMATEX*)waveFormat; + int bytesPerSample = Pa_GetSampleSize(sampleFormat); + unsigned long bytesPerFrame = numChannels * bytesPerSample; + + waveFormatEx->wFormatTag = waveFormatTag; + waveFormatEx->nChannels = (WORD)numChannels; + waveFormatEx->nSamplesPerSec = (DWORD)sampleRate; + waveFormatEx->nAvgBytesPerSec = waveFormatEx->nSamplesPerSec * bytesPerFrame; + waveFormatEx->nBlockAlign = (WORD)bytesPerFrame; + waveFormatEx->wBitsPerSample = bytesPerSample * 8; + waveFormatEx->cbSize = 0; +} + + +void PaWin_InitializeWaveFormatExtensible( PaWinWaveFormat *waveFormat, + int numChannels, PaSampleFormat sampleFormat, int waveFormatTag, double sampleRate, + PaWinWaveFormatChannelMask channelMask ) +{ + WAVEFORMATEX *waveFormatEx = (WAVEFORMATEX*)waveFormat; + int bytesPerSample = Pa_GetSampleSize(sampleFormat); + unsigned long bytesPerFrame = numChannels * bytesPerSample; + GUID guid; + + waveFormatEx->wFormatTag = WAVE_FORMAT_EXTENSIBLE; + waveFormatEx->nChannels = (WORD)numChannels; + waveFormatEx->nSamplesPerSec = (DWORD)sampleRate; + waveFormatEx->nAvgBytesPerSec = waveFormatEx->nSamplesPerSec * bytesPerFrame; + waveFormatEx->nBlockAlign = (WORD)bytesPerFrame; + waveFormatEx->wBitsPerSample = bytesPerSample * 8; + waveFormatEx->cbSize = 22; + + *((WORD*)&waveFormat->fields[PAWIN_INDEXOF_WVALIDBITSPERSAMPLE]) = + waveFormatEx->wBitsPerSample; + + *((DWORD*)&waveFormat->fields[PAWIN_INDEXOF_DWCHANNELMASK]) = channelMask; + + guid = pawin_ksDataFormatSubtypeGuidBase; + guid.Data1 = (USHORT)waveFormatTag; + *((GUID*)&waveFormat->fields[PAWIN_INDEXOF_SUBFORMAT]) = guid; +} + +PaWinWaveFormatChannelMask PaWin_DefaultChannelMask( int numChannels ) +{ + switch( numChannels ){ + case 1: + return PAWIN_SPEAKER_MONO; + case 2: + return PAWIN_SPEAKER_STEREO; + case 3: + return PAWIN_SPEAKER_FRONT_LEFT | PAWIN_SPEAKER_FRONT_CENTER | PAWIN_SPEAKER_FRONT_RIGHT; + case 4: + return PAWIN_SPEAKER_QUAD; + case 5: + return PAWIN_SPEAKER_QUAD | PAWIN_SPEAKER_FRONT_CENTER; + case 6: + /* The meaning of the PAWIN_SPEAKER_5POINT1 flag has changed over time: + http://msdn2.microsoft.com/en-us/library/aa474707.aspx + We use PAWIN_SPEAKER_5POINT1 (not PAWIN_SPEAKER_5POINT1_SURROUND) + because on some cards (eg Audigy) PAWIN_SPEAKER_5POINT1_SURROUND + results in a virtual mixdown placing the rear output in the + front _and_ rear speakers. + */ + return PAWIN_SPEAKER_5POINT1; + /* case 7: */ + case 8: + /* RoBi: PAWIN_SPEAKER_7POINT1_SURROUND fits normal surround sound setups better than PAWIN_SPEAKER_7POINT1, f.i. NVidia HDMI Audio + output is silent on channels 5&6 with NVidia drivers, and channel 7&8 with Micrsoft HD Audio driver using PAWIN_SPEAKER_7POINT1. + With PAWIN_SPEAKER_7POINT1_SURROUND both setups work OK. */ + return PAWIN_SPEAKER_7POINT1_SURROUND; + } + + /* Apparently some Audigy drivers will output silence + if the direct-out constant (0) is used. So this is not ideal. + + RoBi 2012-12-19: Also, NVidia driver seem to output garbage instead. Again not very ideal. + */ + return PAWIN_SPEAKER_DIRECTOUT; + + /* Note that Alec Rogers proposed the following as an alternate method to + generate the default channel mask, however it doesn't seem to be an improvement + over the above, since some drivers will matrix outputs mapping to non-present + speakers accross multiple physical speakers. + + if(nChannels==1) { + pwfFormat->dwChannelMask = SPEAKER_FRONT_CENTER; + } + else { + pwfFormat->dwChannelMask = 0; + for(i=0; idwChannelMask = (pwfFormat->dwChannelMask << 1) | 0x1; + } + */ +} diff --git a/portaudio/src/hostapi/coreaudio/notes.txt b/portaudio/src/hostapi/coreaudio/notes.txt deleted file mode 100644 index 145afe1544..0000000000 --- a/portaudio/src/hostapi/coreaudio/notes.txt +++ /dev/null @@ -1,196 +0,0 @@ -Notes on status of CoreAudio Implementation of PortAudio - -Document Last Updated December 9, 2005 - -There are currently two implementations of PortAudio for Mac Core Audio. - -The original is in pa_mac_core_old.c, and the newer, default implementation -is in pa_mac_core.c. -Only pa_mac_core.c is currently developed and supported as it uses apple's -current core audio technology. To select use the old implementation, replace -pa_mac_core.c with pa_mac_core_old.c (eg. "cp pa_mac_core_auhal.c -pa_mac_core.c"), then run configure and make as usual. - -------------------------------------------- - -Notes on Newer/Default AUHAL implementation: - -by Bjorn Roche - -Last Updated December 9, 2005 - -Principle of Operation: - -This implementation uses AUHAL for audio I/O. To some extent, it also -operates at the "HAL" Layer, though this behavior can be limited by -platform specific flags (see pa_mac_core.h for details). The default -settings should be reasonable: they don't change the SR of the device and -don't cause interruptions if other devices are using the device. - -Major Software Elements Used: Apple's HAL AUs provide output SR -conversion transparently, however, only on output, so this -implementation uses AudioConverters to convert the sample rate on input. -A PortAudio ring buffer is used to buffer input when sample rate -conversion is required or when separate audio units are used for duplex -IO. Finally, a PortAudio buffer processor is used to convert formats and -provide additional buffers if needed. Internally, interleaved floating -point data streams are used exclusively - the audio unit converts from -the audio hardware's native format to interleaved float PCM and -PortAudio's Buffer processor is used for conversion to user formats. - -Simplex Input: Simplex input uses a single callback. If sample rate -conversion is required, a ring buffer and AudioConverter are used as -well. - -Simplex output: Simplex output uses a single callback. No ring buffer or -audio converter is used because AUHAL does its own output SR conversion. - -Duplex, one device (no SR conversion): When one device is used, a single -callback is used. This achieves very low latency. - -Duplex, separate devices or SR conversion: When SR conversion is -required, data must be buffered before it is converted and data is not -always available at the same times on input and output, so SR conversion -requires the same treatment as separate devices. The input callback -reads data and puts it in the ring buffer. The output callback reads the -data off the ring buffer, into an audio converter and finally to the -buffer processor. - -Platform Specific Options: - -By using the flags in pa_mac_core.h, the user may specify several options. -For example, the user can specify the sample-rate conversion quality, and -the extent to which PA will attempt to "play nice" and to what extent it -will interrupt other apps to improve performance. For example, if 44100 Hz -sample rate is requested but the device is set at 48000 Hz, PA can either -change the device for optimal playback ("Pro" mode), which may interrupt -other programs playing back audio, or simple use a sample-rate coversion, -which allows for friendlier sharing of the device ("Play Nice" mode). - -Additionally, the user may define a "channel mapping" by calling -paSetupMacCoreChannelMap() on their stream info structure before opening -the stream with it. See below for creating a channel map. - -Known issues: - -- Buffering: No buffering beyond that provided by core audio is provided -except where absolutely needed for the implementation to work. This may cause -issues with large framesPerBuffer settings and it also means that no additional -latency will be provided even if a large latency setting is selected. - -- Latency: Latency settings are generally ignored. They may be used as a -hint for buffer size in paHostFramesPerBufferUnspecified, or the value may -be used in cases where additional buffering is needed, such as doing input and -output on seperate devices. Latency settings are always automatically bound -to "safe" values, however, so setting extreme values here should not be -an issue. - -- Buffer Size: paHostFramesPerBufferUnspecified and specific host buffer sizes -are supported. paHostFramesPerBufferUnspecified works best in "pro" mode, -where the buffer size and sample rate of the audio device is most likely -to match the expected values. In the case of paHostFramesPerBuffer, an -appropriate framesPerBuffer value will be used that guarantees minimum -requested latency if that's possible. - -- Timing info. It reports on stream time, but I'm probably doing something -wrong since patest_sine_time often reports negative latency numbers. Also, -there are currently issues with some devices whehn plugging/unplugging -devices. - -- xrun detection: The only xrun detection performed is when reading -and writing the ring buffer. There is probably more that can be done. - -- abort/stop issues: stopping a stream is always a complete operation, -but latency should be low enough to make the lack of a separate abort -unnecessary. Apple clarifies its AudioOutputUnitStop() call here: -http://lists.apple.com/archives/coreaudio-api/2005/Dec/msg00055.html - -- blocking interface: should work fine. - -- multichannel: It has been tested successfully on multichannel hardware -from MOTU: traveler and 896HD. Also Presonus firepod and others. It is -believed to work with all Core Audio devices, including virtual devices -such as soundflower. - -- sample rate conversion quality: By default, SR conversion is the maximum -available. This can be tweaked using flags pa_mac_core.h. Note that the AU -render quyality property is used to set the sample rate conversion quality -as "documented" here: -http://lists.apple.com/archives/coreaudio-api/2004/Jan/msg00141.html - -- x86/Universal Binary: Universal binaries can be build. - - - -Creating a channel map: - -How to create the map array - Text taken From AUHAL.rtfd : -[3] Channel Maps -Clients can tell the AUHAL units which channels of the device they are interested in. For example, the client may be processing stereo data, but outputting to a six-channel device. This is done by using the kAudioOutputUnitProperty_ChannelMap property. To use this property: - -For Output: -Create an array of SInt32 that is the size of the number of channels of the device (Get the Format of the AUHAL's output Element == 0) -Initialize each of the array's values to -1 (-1 indicates that that channel is NOT to be presented in the conversion.) - -Next, for each channel of your app's output, set: -channelMapArray[deviceOutputChannel] = desiredAppOutputChannel. - -For example: we have a 6 channel output device and our application has a stereo source it wants to provide to the device. Suppose we want that stereo source to go to the 3rd and 4th channels of the device. The channel map would look like this: { -1, -1, 0, 1, -1, -1 } - -Where the formats are: -Input Element == 0: 2 channels (- client format - settable) -Output Element == 0: 6 channels (- device format - NOT settable) - -So channel 2 (zero-based) of the device will take the first channel of output and channel 3 will take the second channel of output. (This translates to the 3rd and 4th plugs of the 6 output plugs of the device of course!) - -For Input: -Create an array of SInt32 that is the size of the number of channels of the format you require for input. Get (or Set in this case as needed) the AUHAL's output Element == 1. - -Next, for each channel of input you require, set: -channelMapArray[desiredAppInputChannel] = deviceOutputChannel; - -For example: we have a 6 channel input device from which we wish to receive stereo input from the 3rd and 4th channels. The channel map looks like this: { 2, 3 } - -Where the formats are: -Input Element == 0: 2 channels (- device format - NOT settable) -Output Element == 0: 6 channels (- client format - settable) - - - ----------------------------------------- - -Notes on Original implementation: - -by Phil Burk and Darren Gibbs - -Last updated March 20, 2002 - -WHAT WORKS - -Output with very low latency, <10 msec. -Half duplex input or output. -Full duplex on the same CoreAudio device. -The paFLoat32, paInt16, paInt8, paUInt8 sample formats. -Pa_GetCPULoad() -Pa_StreamTime() - -KNOWN BUGS OR LIMITATIONS - -We do not yet support simultaneous input and output on different -devices. Note that some CoreAudio devices like the Roland UH30 look -like one device but are actually two different CoreAudio devices. The -Built-In audio is typically one CoreAudio device. - -Mono doesn't work. - -DEVICE MAPPING - -CoreAudio devices can support both input and output. But the sample -rates supported may be different. So we have map one or two PortAudio -device to each CoreAudio device depending on whether it supports -input, output or both. - -When we query devices, we first get a list of CoreAudio devices. Then -we scan the list and add a PortAudio device for each CoreAudio device -that supports input. Then we make a scan for output devices. - diff --git a/portaudio/src/hostapi/coreaudio/pa_mac_core_old.c b/portaudio/src/hostapi/coreaudio/pa_mac_core_old.c deleted file mode 100644 index 4ef89549b0..0000000000 --- a/portaudio/src/hostapi/coreaudio/pa_mac_core_old.c +++ /dev/null @@ -1,913 +0,0 @@ -/* - * $Id: pa_mac_core_old.c 1083 2006-08-23 07:30:49Z rossb $ - * pa_mac_core.c - * Implementation of PortAudio for Mac OS X CoreAudio - * - * PortAudio Portable Real-Time Audio Library - * Latest Version at: http://www.portaudio.com - * - * Authors: Ross Bencina and Phil Burk - * Copyright (c) 1999-2000 Ross Bencina and Phil Burk - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF - * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -/* - * The text above constitutes the entire PortAudio license; however, - * the PortAudio community also makes the following non-binding requests: - * - * Any person wishing to distribute modifications to the Software is - * requested to send the modifications to the original developer so that - * they can be incorporated into the canonical version. It is also - * requested that these non-binding requests be included along with the - * license above. - */ - -#include -#include -#include -#include -#include -#include - -#include "portaudio.h" -#include "pa_trace.h" -#include "pa_util.h" -#include "pa_allocation.h" -#include "pa_hostapi.h" -#include "pa_stream.h" -#include "pa_cpuload.h" -#include "pa_process.h" - -// ===== constants ===== - -// ===== structs ===== -#pragma mark structs - -// PaMacCoreHostApiRepresentation - host api datastructure specific to this implementation -typedef struct PaMacCore_HAR -{ - PaUtilHostApiRepresentation inheritedHostApiRep; - PaUtilStreamInterface callbackStreamInterface; - PaUtilStreamInterface blockingStreamInterface; - - PaUtilAllocationGroup *allocations; - AudioDeviceID *macCoreDeviceIds; -} -PaMacCoreHostApiRepresentation; - -typedef struct PaMacCore_DI -{ - PaDeviceInfo inheritedDeviceInfo; -} -PaMacCoreDeviceInfo; - -// PaMacCoreStream - a stream data structure specifically for this implementation -typedef struct PaMacCore_S -{ - PaUtilStreamRepresentation streamRepresentation; - PaUtilCpuLoadMeasurer cpuLoadMeasurer; - PaUtilBufferProcessor bufferProcessor; - - int primeStreamUsingCallback; - - AudioDeviceID inputDevice; - AudioDeviceID outputDevice; - - // Processing thread management -------------- -// HANDLE abortEvent; -// HANDLE processingThread; -// DWORD processingThreadId; - - char throttleProcessingThreadOnOverload; // 0 -> don't throtte, non-0 -> throttle - int processingThreadPriority; - int highThreadPriority; - int throttledThreadPriority; - unsigned long throttledSleepMsecs; - - int isStopped; - volatile int isActive; - volatile int stopProcessing; // stop thread once existing buffers have been returned - volatile int abortProcessing; // stop thread immediately - -// DWORD allBuffersDurationMs; // used to calculate timeouts -} -PaMacCoreStream; - -// Data needed by the CoreAudio callback functions -typedef struct PaMacCore_CD -{ - PaMacCoreStream *stream; - PaStreamCallback *callback; - void *userData; - PaUtilConverter *inputConverter; - PaUtilConverter *outputConverter; - void *inputBuffer; - void *outputBuffer; - int inputChannelCount; - int outputChannelCount; - PaSampleFormat inputSampleFormat; - PaSampleFormat outputSampleFormat; - PaUtilTriangularDitherGenerator *ditherGenerator; -} -PaMacClientData; - -// ===== CoreAudio-PortAudio bridge functions ===== -#pragma mark CoreAudio-PortAudio bridge functions - -// Maps CoreAudio OSStatus codes to PortAudio PaError codes -static PaError conv_err(OSStatus error) -{ - PaError result; - - switch (error) { - case kAudioHardwareNoError: - result = paNoError; break; - case kAudioHardwareNotRunningError: - result = paInternalError; break; - case kAudioHardwareUnspecifiedError: - result = paInternalError; break; - case kAudioHardwareUnknownPropertyError: - result = paInternalError; break; - case kAudioHardwareBadPropertySizeError: - result = paInternalError; break; - case kAudioHardwareIllegalOperationError: - result = paInternalError; break; - case kAudioHardwareBadDeviceError: - result = paInvalidDevice; break; - case kAudioHardwareBadStreamError: - result = paBadStreamPtr; break; - case kAudioHardwareUnsupportedOperationError: - result = paInternalError; break; - case kAudioDeviceUnsupportedFormatError: - result = paSampleFormatNotSupported; break; - case kAudioDevicePermissionsError: - result = paDeviceUnavailable; break; - default: - result = paInternalError; - } - - return result; -} - -/* This function is unused -static AudioStreamBasicDescription *InitializeStreamDescription(const PaStreamParameters *parameters, double sampleRate) -{ - struct AudioStreamBasicDescription *streamDescription = PaUtil_AllocateMemory(sizeof(AudioStreamBasicDescription)); - streamDescription->mSampleRate = sampleRate; - streamDescription->mFormatID = kAudioFormatLinearPCM; - streamDescription->mFormatFlags = 0; - streamDescription->mFramesPerPacket = 1; - - if (parameters->sampleFormat & paNonInterleaved) { - streamDescription->mFormatFlags |= kLinearPCMFormatFlagIsNonInterleaved; - streamDescription->mChannelsPerFrame = 1; - streamDescription->mBytesPerFrame = Pa_GetSampleSize(parameters->sampleFormat); - streamDescription->mBytesPerPacket = Pa_GetSampleSize(parameters->sampleFormat); - } - else { - streamDescription->mChannelsPerFrame = parameters->channelCount; - } - - streamDescription->mBytesPerFrame = Pa_GetSampleSize(parameters->sampleFormat) * streamDescription->mChannelsPerFrame; - streamDescription->mBytesPerPacket = streamDescription->mBytesPerFrame * streamDescription->mFramesPerPacket; - - if (parameters->sampleFormat & paFloat32) { - streamDescription->mFormatFlags |= kLinearPCMFormatFlagIsFloat; - streamDescription->mBitsPerChannel = 32; - } - else if (parameters->sampleFormat & paInt32) { - streamDescription->mFormatFlags |= kLinearPCMFormatFlagIsSignedInteger; - streamDescription->mBitsPerChannel = 32; - } - else if (parameters->sampleFormat & paInt24) { - streamDescription->mFormatFlags |= kLinearPCMFormatFlagIsSignedInteger; - streamDescription->mBitsPerChannel = 24; - } - else if (parameters->sampleFormat & paInt16) { - streamDescription->mFormatFlags |= kLinearPCMFormatFlagIsSignedInteger; - streamDescription->mBitsPerChannel = 16; - } - else if (parameters->sampleFormat & paInt8) { - streamDescription->mFormatFlags |= kLinearPCMFormatFlagIsSignedInteger; - streamDescription->mBitsPerChannel = 8; - } - else if (parameters->sampleFormat & paInt32) { - streamDescription->mBitsPerChannel = 8; - } - - return streamDescription; -} -*/ - -static PaStreamCallbackTimeInfo *InitializeTimeInfo(const AudioTimeStamp* now, const AudioTimeStamp* inputTime, const AudioTimeStamp* outputTime) -{ - PaStreamCallbackTimeInfo *timeInfo = PaUtil_AllocateMemory(sizeof(PaStreamCallbackTimeInfo)); - - timeInfo->inputBufferAdcTime = inputTime->mSampleTime; - timeInfo->currentTime = now->mSampleTime; - timeInfo->outputBufferDacTime = outputTime->mSampleTime; - - return timeInfo; -} - -// ===== support functions ===== -#pragma mark support functions - -static void CleanUp(PaMacCoreHostApiRepresentation *macCoreHostApi) -{ - if( macCoreHostApi->allocations ) - { - PaUtil_FreeAllAllocations( macCoreHostApi->allocations ); - PaUtil_DestroyAllocationGroup( macCoreHostApi->allocations ); - } - - PaUtil_FreeMemory( macCoreHostApi ); -} - -static PaError GetChannelInfo(PaDeviceInfo *deviceInfo, AudioDeviceID macCoreDeviceId, int isInput) -{ - UInt32 propSize; - PaError err = paNoError; - UInt32 i; - int numChannels = 0; - AudioBufferList *buflist; - - err = conv_err(AudioDeviceGetPropertyInfo(macCoreDeviceId, 0, isInput, kAudioDevicePropertyStreamConfiguration, &propSize, NULL)); - buflist = PaUtil_AllocateMemory(propSize); - err = conv_err(AudioDeviceGetProperty(macCoreDeviceId, 0, isInput, kAudioDevicePropertyStreamConfiguration, &propSize, buflist)); - if (!err) { - for (i = 0; i < buflist->mNumberBuffers; ++i) { - numChannels += buflist->mBuffers[i].mNumberChannels; - } - - if (isInput) - deviceInfo->maxInputChannels = numChannels; - else - deviceInfo->maxOutputChannels = numChannels; - - int frameLatency; - propSize = sizeof(UInt32); - err = conv_err(AudioDeviceGetProperty(macCoreDeviceId, 0, isInput, kAudioDevicePropertyLatency, &propSize, &frameLatency)); - if (!err) { - double secondLatency = frameLatency / deviceInfo->defaultSampleRate; - if (isInput) { - deviceInfo->defaultLowInputLatency = secondLatency; - deviceInfo->defaultHighInputLatency = secondLatency; - } - else { - deviceInfo->defaultLowOutputLatency = secondLatency; - deviceInfo->defaultHighOutputLatency = secondLatency; - } - } - } - PaUtil_FreeMemory(buflist); - - return err; -} - -static PaError InitializeDeviceInfo(PaMacCoreDeviceInfo *macCoreDeviceInfo, AudioDeviceID macCoreDeviceId, PaHostApiIndex hostApiIndex ) -{ - PaDeviceInfo *deviceInfo = &macCoreDeviceInfo->inheritedDeviceInfo; - deviceInfo->structVersion = 2; - deviceInfo->hostApi = hostApiIndex; - - PaError err = paNoError; - UInt32 propSize; - - err = conv_err(AudioDeviceGetPropertyInfo(macCoreDeviceId, 0, 0, kAudioDevicePropertyDeviceName, &propSize, NULL)); - // FIXME: this allocation should be part of the allocations group - char *name = PaUtil_AllocateMemory(propSize); - err = conv_err(AudioDeviceGetProperty(macCoreDeviceId, 0, 0, kAudioDevicePropertyDeviceName, &propSize, name)); - if (!err) { - deviceInfo->name = name; - } - - Float64 sampleRate; - propSize = sizeof(Float64); - err = conv_err(AudioDeviceGetProperty(macCoreDeviceId, 0, 0, kAudioDevicePropertyNominalSampleRate, &propSize, &sampleRate)); - if (!err) { - deviceInfo->defaultSampleRate = sampleRate; - } - - - // Get channel info - err = GetChannelInfo(deviceInfo, macCoreDeviceId, 1); - err = GetChannelInfo(deviceInfo, macCoreDeviceId, 0); - - return err; -} - -static PaError InitializeDeviceInfos( PaMacCoreHostApiRepresentation *macCoreHostApi, PaHostApiIndex hostApiIndex ) -{ - PaError result = paNoError; - PaUtilHostApiRepresentation *hostApi; - PaMacCoreDeviceInfo *deviceInfoArray; - - // initialise device counts and default devices under the assumption that there are no devices. These values are incremented below if and when devices are successfully initialized. - hostApi = &macCoreHostApi->inheritedHostApiRep; - hostApi->info.deviceCount = 0; - hostApi->info.defaultInputDevice = paNoDevice; - hostApi->info.defaultOutputDevice = paNoDevice; - - UInt32 propsize; - AudioHardwareGetPropertyInfo(kAudioHardwarePropertyDevices, &propsize, NULL); - int numDevices = propsize / sizeof(AudioDeviceID); - hostApi->info.deviceCount = numDevices; - if (numDevices > 0) { - hostApi->deviceInfos = (PaDeviceInfo**)PaUtil_GroupAllocateMemory( - macCoreHostApi->allocations, sizeof(PaDeviceInfo*) * numDevices ); - if( !hostApi->deviceInfos ) - { - return paInsufficientMemory; - } - - // allocate all device info structs in a contiguous block - deviceInfoArray = (PaMacCoreDeviceInfo*)PaUtil_GroupAllocateMemory( - macCoreHostApi->allocations, sizeof(PaMacCoreDeviceInfo) * numDevices ); - if( !deviceInfoArray ) - { - return paInsufficientMemory; - } - - macCoreHostApi->macCoreDeviceIds = PaUtil_GroupAllocateMemory(macCoreHostApi->allocations, propsize); - AudioHardwareGetProperty(kAudioHardwarePropertyDevices, &propsize, macCoreHostApi->macCoreDeviceIds); - - AudioDeviceID defaultInputDevice, defaultOutputDevice; - propsize = sizeof(AudioDeviceID); - AudioHardwareGetProperty(kAudioHardwarePropertyDefaultInputDevice, &propsize, &defaultInputDevice); - AudioHardwareGetProperty(kAudioHardwarePropertyDefaultOutputDevice, &propsize, &defaultOutputDevice); - - UInt32 i; - for (i = 0; i < numDevices; ++i) { - if (macCoreHostApi->macCoreDeviceIds[i] == defaultInputDevice) { - hostApi->info.defaultInputDevice = i; - } - if (macCoreHostApi->macCoreDeviceIds[i] == defaultOutputDevice) { - hostApi->info.defaultOutputDevice = i; - } - InitializeDeviceInfo(&deviceInfoArray[i], macCoreHostApi->macCoreDeviceIds[i], hostApiIndex); - hostApi->deviceInfos[i] = &(deviceInfoArray[i].inheritedDeviceInfo); - } - } - - return result; -} - -static OSStatus CheckFormat(AudioDeviceID macCoreDeviceId, const PaStreamParameters *parameters, double sampleRate, int isInput) -{ - UInt32 propSize = sizeof(AudioStreamBasicDescription); - AudioStreamBasicDescription *streamDescription = PaUtil_AllocateMemory(propSize); - - streamDescription->mSampleRate = sampleRate; - streamDescription->mFormatID = 0; - streamDescription->mFormatFlags = 0; - streamDescription->mBytesPerPacket = 0; - streamDescription->mFramesPerPacket = 0; - streamDescription->mBytesPerFrame = 0; - streamDescription->mChannelsPerFrame = 0; - streamDescription->mBitsPerChannel = 0; - streamDescription->mReserved = 0; - - OSStatus result = AudioDeviceGetProperty(macCoreDeviceId, 0, isInput, kAudioDevicePropertyStreamFormatSupported, &propSize, streamDescription); - PaUtil_FreeMemory(streamDescription); - return result; -} - -static OSStatus CopyInputData(PaMacClientData* destination, const AudioBufferList *source, unsigned long frameCount) -{ - int frameSpacing, channelSpacing; - if (destination->inputSampleFormat & paNonInterleaved) { - frameSpacing = 1; - channelSpacing = destination->inputChannelCount; - } - else { - frameSpacing = destination->inputChannelCount; - channelSpacing = 1; - } - - AudioBuffer const *inputBuffer = &source->mBuffers[0]; - void *coreAudioBuffer = inputBuffer->mData; - void *portAudioBuffer = destination->inputBuffer; - UInt32 i, streamNumber, streamChannel; - for (i = streamNumber = streamChannel = 0; i < destination->inputChannelCount; ++i, ++streamChannel) { - if (streamChannel >= inputBuffer->mNumberChannels) { - ++streamNumber; - inputBuffer = &source->mBuffers[streamNumber]; - coreAudioBuffer = inputBuffer->mData; - streamChannel = 0; - } - destination->inputConverter(portAudioBuffer, frameSpacing, coreAudioBuffer, inputBuffer->mNumberChannels, frameCount, destination->ditherGenerator); - coreAudioBuffer += sizeof(Float32); - portAudioBuffer += Pa_GetSampleSize(destination->inputSampleFormat) * channelSpacing; - } - return noErr; -} - -static OSStatus CopyOutputData(AudioBufferList* destination, PaMacClientData *source, unsigned long frameCount) -{ - int frameSpacing, channelSpacing; - if (source->outputSampleFormat & paNonInterleaved) { - frameSpacing = 1; - channelSpacing = source->outputChannelCount; - } - else { - frameSpacing = source->outputChannelCount; - channelSpacing = 1; - } - - AudioBuffer *outputBuffer = &destination->mBuffers[0]; - void *coreAudioBuffer = outputBuffer->mData; - void *portAudioBuffer = source->outputBuffer; - UInt32 i, streamNumber, streamChannel; - for (i = streamNumber = streamChannel = 0; i < source->outputChannelCount; ++i, ++streamChannel) { - if (streamChannel >= outputBuffer->mNumberChannels) { - ++streamNumber; - outputBuffer = &destination->mBuffers[streamNumber]; - coreAudioBuffer = outputBuffer->mData; - streamChannel = 0; - } - source->outputConverter(coreAudioBuffer, outputBuffer->mNumberChannels, portAudioBuffer, frameSpacing, frameCount, NULL); - coreAudioBuffer += sizeof(Float32); - portAudioBuffer += Pa_GetSampleSize(source->outputSampleFormat) * channelSpacing; - } - return noErr; -} - -static OSStatus AudioIOProc( AudioDeviceID inDevice, - const AudioTimeStamp* inNow, - const AudioBufferList* inInputData, - const AudioTimeStamp* inInputTime, - AudioBufferList* outOutputData, - const AudioTimeStamp* inOutputTime, - void* inClientData) -{ - PaMacClientData *clientData = (PaMacClientData *)inClientData; - PaStreamCallbackTimeInfo *timeInfo = InitializeTimeInfo(inNow, inInputTime, inOutputTime); - - PaUtil_BeginCpuLoadMeasurement( &clientData->stream->cpuLoadMeasurer ); - - AudioBuffer *outputBuffer = &outOutputData->mBuffers[0]; - unsigned long frameCount = outputBuffer->mDataByteSize / (outputBuffer->mNumberChannels * sizeof(Float32)); - - if (clientData->inputBuffer) { - CopyInputData(clientData, inInputData, frameCount); - } - PaStreamCallbackResult result = clientData->callback(clientData->inputBuffer, clientData->outputBuffer, frameCount, timeInfo, paNoFlag, clientData->userData); - if (clientData->outputBuffer) { - CopyOutputData(outOutputData, clientData, frameCount); - } - - PaUtil_EndCpuLoadMeasurement( &clientData->stream->cpuLoadMeasurer, frameCount ); - - if (result == paComplete || result == paAbort) { - Pa_StopStream(clientData->stream); - } - - PaUtil_FreeMemory( timeInfo ); - return noErr; -} - -// This is not for input-only streams, this is for streams where the input device is different from the output device -static OSStatus AudioInputProc( AudioDeviceID inDevice, - const AudioTimeStamp* inNow, - const AudioBufferList* inInputData, - const AudioTimeStamp* inInputTime, - AudioBufferList* outOutputData, - const AudioTimeStamp* inOutputTime, - void* inClientData) -{ - PaMacClientData *clientData = (PaMacClientData *)inClientData; - PaStreamCallbackTimeInfo *timeInfo = InitializeTimeInfo(inNow, inInputTime, inOutputTime); - - PaUtil_BeginCpuLoadMeasurement( &clientData->stream->cpuLoadMeasurer ); - - AudioBuffer const *inputBuffer = &inInputData->mBuffers[0]; - unsigned long frameCount = inputBuffer->mDataByteSize / (inputBuffer->mNumberChannels * sizeof(Float32)); - - CopyInputData(clientData, inInputData, frameCount); - PaStreamCallbackResult result = clientData->callback(clientData->inputBuffer, clientData->outputBuffer, frameCount, timeInfo, paNoFlag, clientData->userData); - - PaUtil_EndCpuLoadMeasurement( &clientData->stream->cpuLoadMeasurer, frameCount ); - if( result == paComplete || result == paAbort ) - Pa_StopStream(clientData->stream); - PaUtil_FreeMemory( timeInfo ); - return noErr; -} - -// This is not for output-only streams, this is for streams where the input device is different from the output device -static OSStatus AudioOutputProc( AudioDeviceID inDevice, - const AudioTimeStamp* inNow, - const AudioBufferList* inInputData, - const AudioTimeStamp* inInputTime, - AudioBufferList* outOutputData, - const AudioTimeStamp* inOutputTime, - void* inClientData) -{ - PaMacClientData *clientData = (PaMacClientData *)inClientData; - //PaStreamCallbackTimeInfo *timeInfo = InitializeTimeInfo(inNow, inInputTime, inOutputTime); - - PaUtil_BeginCpuLoadMeasurement( &clientData->stream->cpuLoadMeasurer ); - - AudioBuffer *outputBuffer = &outOutputData->mBuffers[0]; - unsigned long frameCount = outputBuffer->mDataByteSize / (outputBuffer->mNumberChannels * sizeof(Float32)); - - //clientData->callback(NULL, clientData->outputBuffer, frameCount, timeInfo, paNoFlag, clientData->userData); - - CopyOutputData(outOutputData, clientData, frameCount); - - PaUtil_EndCpuLoadMeasurement( &clientData->stream->cpuLoadMeasurer, frameCount ); - return noErr; -} - -static PaError SetSampleRate(AudioDeviceID device, double sampleRate, int isInput) -{ - PaError result = paNoError; - - double actualSampleRate; - UInt32 propSize = sizeof(double); - result = conv_err(AudioDeviceSetProperty(device, NULL, 0, isInput, kAudioDevicePropertyNominalSampleRate, propSize, &sampleRate)); - - result = conv_err(AudioDeviceGetProperty(device, 0, isInput, kAudioDevicePropertyNominalSampleRate, &propSize, &actualSampleRate)); - - if (result == paNoError && actualSampleRate != sampleRate) { - result = paInvalidSampleRate; - } - - return result; -} - -static PaError SetFramesPerBuffer(AudioDeviceID device, unsigned long framesPerBuffer, int isInput) -{ - PaError result = paNoError; - UInt32 preferredFramesPerBuffer = framesPerBuffer; - // while (preferredFramesPerBuffer > UINT32_MAX) { - // preferredFramesPerBuffer /= 2; - // } - - UInt32 actualFramesPerBuffer; - UInt32 propSize = sizeof(UInt32); - result = conv_err(AudioDeviceSetProperty(device, NULL, 0, isInput, kAudioDevicePropertyBufferFrameSize, propSize, &preferredFramesPerBuffer)); - - result = conv_err(AudioDeviceGetProperty(device, 0, isInput, kAudioDevicePropertyBufferFrameSize, &propSize, &actualFramesPerBuffer)); - - if (result != paNoError) { - // do nothing - } - else if (actualFramesPerBuffer > framesPerBuffer) { - result = paBufferTooSmall; - } - else if (actualFramesPerBuffer < framesPerBuffer) { - result = paBufferTooBig; - } - - return result; -} - -static PaError SetUpUnidirectionalStream(AudioDeviceID device, double sampleRate, unsigned long framesPerBuffer, int isInput) -{ - PaError err = paNoError; - err = SetSampleRate(device, sampleRate, isInput); - if( err == paNoError ) - err = SetFramesPerBuffer(device, framesPerBuffer, isInput); - return err; -} - -// ===== PortAudio functions ===== -#pragma mark PortAudio functions - -#ifdef __cplusplus -extern "C" -{ -#endif // __cplusplus - - PaError PaMacCore_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiIndex index ); - -#ifdef __cplusplus -} -#endif // __cplusplus - -static void Terminate( struct PaUtilHostApiRepresentation *hostApi ) -{ - PaMacCoreHostApiRepresentation *macCoreHostApi = (PaMacCoreHostApiRepresentation*)hostApi; - - CleanUp(macCoreHostApi); -} - -static PaError IsFormatSupported( struct PaUtilHostApiRepresentation *hostApi, - const PaStreamParameters *inputParameters, - const PaStreamParameters *outputParameters, - double sampleRate ) -{ - PaMacCoreHostApiRepresentation *macCoreHostApi = (PaMacCoreHostApiRepresentation*)hostApi; - PaDeviceInfo *deviceInfo; - - PaError result = paNoError; - if (inputParameters) { - deviceInfo = macCoreHostApi->inheritedHostApiRep.deviceInfos[inputParameters->device]; - if (inputParameters->channelCount > deviceInfo->maxInputChannels) - result = paInvalidChannelCount; - else if (CheckFormat(macCoreHostApi->macCoreDeviceIds[inputParameters->device], inputParameters, sampleRate, 1) != kAudioHardwareNoError) { - result = paInvalidSampleRate; - } - } - if (outputParameters && result == paNoError) { - deviceInfo = macCoreHostApi->inheritedHostApiRep.deviceInfos[outputParameters->device]; - if (outputParameters->channelCount > deviceInfo->maxOutputChannels) - result = paInvalidChannelCount; - else if (CheckFormat(macCoreHostApi->macCoreDeviceIds[outputParameters->device], outputParameters, sampleRate, 0) != kAudioHardwareNoError) { - result = paInvalidSampleRate; - } - } - - return result; -} - -static PaError OpenStream( struct PaUtilHostApiRepresentation *hostApi, - PaStream** s, - const PaStreamParameters *inputParameters, - const PaStreamParameters *outputParameters, - double sampleRate, - unsigned long framesPerBuffer, - PaStreamFlags streamFlags, - PaStreamCallback *streamCallback, - void *userData ) -{ - PaError err = paNoError; - PaMacCoreHostApiRepresentation *macCoreHostApi = (PaMacCoreHostApiRepresentation *)hostApi; - PaMacCoreStream *stream = PaUtil_AllocateMemory(sizeof(PaMacCoreStream)); - stream->isActive = 0; - stream->isStopped = 1; - stream->inputDevice = kAudioDeviceUnknown; - stream->outputDevice = kAudioDeviceUnknown; - - PaUtil_InitializeStreamRepresentation( &stream->streamRepresentation, - ( (streamCallback) - ? &macCoreHostApi->callbackStreamInterface - : &macCoreHostApi->blockingStreamInterface ), - streamCallback, userData ); - PaUtil_InitializeCpuLoadMeasurer( &stream->cpuLoadMeasurer, sampleRate ); - - *s = (PaStream*)stream; - PaMacClientData *clientData = PaUtil_AllocateMemory(sizeof(PaMacClientData)); - clientData->stream = stream; - clientData->callback = streamCallback; - clientData->userData = userData; - clientData->inputBuffer = 0; - clientData->outputBuffer = 0; - clientData->ditherGenerator = PaUtil_AllocateMemory(sizeof(PaUtilTriangularDitherGenerator)); - PaUtil_InitializeTriangularDitherState(clientData->ditherGenerator); - - if (inputParameters != NULL) { - stream->inputDevice = macCoreHostApi->macCoreDeviceIds[inputParameters->device]; - clientData->inputConverter = PaUtil_SelectConverter(paFloat32, inputParameters->sampleFormat, streamFlags); - clientData->inputBuffer = PaUtil_AllocateMemory(Pa_GetSampleSize(inputParameters->sampleFormat) * framesPerBuffer * inputParameters->channelCount); - clientData->inputChannelCount = inputParameters->channelCount; - clientData->inputSampleFormat = inputParameters->sampleFormat; - err = SetUpUnidirectionalStream(stream->inputDevice, sampleRate, framesPerBuffer, 1); - } - - if (err == paNoError && outputParameters != NULL) { - stream->outputDevice = macCoreHostApi->macCoreDeviceIds[outputParameters->device]; - clientData->outputConverter = PaUtil_SelectConverter(outputParameters->sampleFormat, paFloat32, streamFlags); - clientData->outputBuffer = PaUtil_AllocateMemory(Pa_GetSampleSize(outputParameters->sampleFormat) * framesPerBuffer * outputParameters->channelCount); - clientData->outputChannelCount = outputParameters->channelCount; - clientData->outputSampleFormat = outputParameters->sampleFormat; - err = SetUpUnidirectionalStream(stream->outputDevice, sampleRate, framesPerBuffer, 0); - } - - if (inputParameters == NULL || outputParameters == NULL || stream->inputDevice == stream->outputDevice) { - AudioDeviceID device = (inputParameters == NULL) ? stream->outputDevice : stream->inputDevice; - - AudioDeviceAddIOProc(device, AudioIOProc, clientData); - } - else { - // using different devices for input and output - AudioDeviceAddIOProc(stream->inputDevice, AudioInputProc, clientData); - AudioDeviceAddIOProc(stream->outputDevice, AudioOutputProc, clientData); - } - - return err; -} - -// Note: When CloseStream() is called, the multi-api layer ensures that the stream has already been stopped or aborted. -static PaError CloseStream( PaStream* s ) -{ - PaError err = paNoError; - PaMacCoreStream *stream = (PaMacCoreStream*)s; - - PaUtil_ResetCpuLoadMeasurer( &stream->cpuLoadMeasurer ); - - if (stream->inputDevice != kAudioDeviceUnknown) { - if (stream->outputDevice == kAudioDeviceUnknown || stream->outputDevice == stream->inputDevice) { - err = conv_err(AudioDeviceRemoveIOProc(stream->inputDevice, AudioIOProc)); - } - else { - err = conv_err(AudioDeviceRemoveIOProc(stream->inputDevice, AudioInputProc)); - err = conv_err(AudioDeviceRemoveIOProc(stream->outputDevice, AudioOutputProc)); - } - } - else { - err = conv_err(AudioDeviceRemoveIOProc(stream->outputDevice, AudioIOProc)); - } - - return err; -} - - -static PaError StartStream( PaStream *s ) -{ - PaError err = paNoError; - PaMacCoreStream *stream = (PaMacCoreStream*)s; - - if (stream->inputDevice != kAudioDeviceUnknown) { - if (stream->outputDevice == kAudioDeviceUnknown || stream->outputDevice == stream->inputDevice) { - err = conv_err(AudioDeviceStart(stream->inputDevice, AudioIOProc)); - } - else { - err = conv_err(AudioDeviceStart(stream->inputDevice, AudioInputProc)); - err = conv_err(AudioDeviceStart(stream->outputDevice, AudioOutputProc)); - } - } - else { - err = conv_err(AudioDeviceStart(stream->outputDevice, AudioIOProc)); - } - - stream->isActive = 1; - stream->isStopped = 0; - return err; -} - -static PaError AbortStream( PaStream *s ) -{ - PaError err = paNoError; - PaMacCoreStream *stream = (PaMacCoreStream*)s; - - if (stream->inputDevice != kAudioDeviceUnknown) { - if (stream->outputDevice == kAudioDeviceUnknown || stream->outputDevice == stream->inputDevice) { - err = conv_err(AudioDeviceStop(stream->inputDevice, AudioIOProc)); - } - else { - err = conv_err(AudioDeviceStop(stream->inputDevice, AudioInputProc)); - err = conv_err(AudioDeviceStop(stream->outputDevice, AudioOutputProc)); - } - } - else { - err = conv_err(AudioDeviceStop(stream->outputDevice, AudioIOProc)); - } - - stream->isActive = 0; - stream->isStopped = 1; - return err; -} - -static PaError StopStream( PaStream *s ) -{ - // TODO: this should be nicer than abort - return AbortStream(s); -} - -static PaError IsStreamStopped( PaStream *s ) -{ - PaMacCoreStream *stream = (PaMacCoreStream*)s; - - return stream->isStopped; -} - - -static PaError IsStreamActive( PaStream *s ) -{ - PaMacCoreStream *stream = (PaMacCoreStream*)s; - - return stream->isActive; -} - - -static PaTime GetStreamTime( PaStream *s ) -{ - OSStatus err; - PaTime result; - PaMacCoreStream *stream = (PaMacCoreStream*)s; - - AudioTimeStamp *timeStamp = PaUtil_AllocateMemory(sizeof(AudioTimeStamp)); - if (stream->inputDevice != kAudioDeviceUnknown) { - err = AudioDeviceGetCurrentTime(stream->inputDevice, timeStamp); - } - else { - err = AudioDeviceGetCurrentTime(stream->outputDevice, timeStamp); - } - - result = err ? 0 : timeStamp->mSampleTime; - PaUtil_FreeMemory(timeStamp); - - return result; -} - - -static double GetStreamCpuLoad( PaStream* s ) -{ - PaMacCoreStream *stream = (PaMacCoreStream*)s; - - return PaUtil_GetCpuLoad( &stream->cpuLoadMeasurer ); -} - - -// As separate stream interfaces are used for blocking and callback streams, the following functions can be guaranteed to only be called for blocking streams. - -static PaError ReadStream( PaStream* s, - void *buffer, - unsigned long frames ) -{ - return paInternalError; -} - - -static PaError WriteStream( PaStream* s, - const void *buffer, - unsigned long frames ) -{ - return paInternalError; -} - - -static signed long GetStreamReadAvailable( PaStream* s ) -{ - return paInternalError; -} - - -static signed long GetStreamWriteAvailable( PaStream* s ) -{ - return paInternalError; -} - -// HostAPI-specific initialization function -PaError PaMacCore_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiIndex hostApiIndex ) -{ - PaError result = paNoError; - PaMacCoreHostApiRepresentation *macCoreHostApi = (PaMacCoreHostApiRepresentation *)PaUtil_AllocateMemory( sizeof(PaMacCoreHostApiRepresentation) ); - if( !macCoreHostApi ) - { - result = paInsufficientMemory; - goto error; - } - - macCoreHostApi->allocations = PaUtil_CreateAllocationGroup(); - if( !macCoreHostApi->allocations ) - { - result = paInsufficientMemory; - goto error; - } - - *hostApi = &macCoreHostApi->inheritedHostApiRep; - (*hostApi)->info.structVersion = 1; - (*hostApi)->info.type = paCoreAudio; - (*hostApi)->info.name = "CoreAudio"; - - result = InitializeDeviceInfos(macCoreHostApi, hostApiIndex); - if (result != paNoError) { - goto error; - } - - // Set up the proper callbacks to this HostApi's functions - (*hostApi)->Terminate = Terminate; - (*hostApi)->OpenStream = OpenStream; - (*hostApi)->IsFormatSupported = IsFormatSupported; - - PaUtil_InitializeStreamInterface( &macCoreHostApi->callbackStreamInterface, CloseStream, StartStream, - StopStream, AbortStream, IsStreamStopped, IsStreamActive, - GetStreamTime, GetStreamCpuLoad, - PaUtil_DummyRead, PaUtil_DummyWrite, - PaUtil_DummyGetReadAvailable, PaUtil_DummyGetWriteAvailable ); - - PaUtil_InitializeStreamInterface( &macCoreHostApi->blockingStreamInterface, CloseStream, StartStream, - StopStream, AbortStream, IsStreamStopped, IsStreamActive, - GetStreamTime, PaUtil_DummyGetCpuLoad, - ReadStream, WriteStream, GetStreamReadAvailable, GetStreamWriteAvailable ); - - return result; - -error: - if( macCoreHostApi ) { - CleanUp(macCoreHostApi); - } - - return result; -} diff --git a/portaudio/src/hostapi/jack/pa_jack.c b/portaudio/src/hostapi/jack/pa_jack.c deleted file mode 100644 index 2a5dd33ea5..0000000000 --- a/portaudio/src/hostapi/jack/pa_jack.c +++ /dev/null @@ -1,1769 +0,0 @@ -/* - * $Id: pa_jack.c 1912 2013-11-15 12:27:07Z gineera $ - * PortAudio Portable Real-Time Audio Library - * Latest Version at: http://www.portaudio.com - * JACK Implementation by Joshua Haberman - * - * Copyright (c) 2004 Stefan Westerfeld - * Copyright (c) 2004 Arve Knudsen - * Copyright (c) 2002 Joshua Haberman - * - * Based on the Open Source API proposed by Ross Bencina - * Copyright (c) 1999-2002 Ross Bencina, Phil Burk - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF - * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -/* - * The text above constitutes the entire PortAudio license; however, - * the PortAudio community also makes the following non-binding requests: - * - * Any person wishing to distribute modifications to the Software is - * requested to send the modifications to the original developer so that - * they can be incorporated into the canonical version. It is also - * requested that these non-binding requests be included along with the - * license above. - */ - -/** - @file - @ingroup hostapi_src -*/ - -#include -#include -#include -#include -#include -#include -#include -#include /* EBUSY */ -#include /* sig_atomic_t */ -#include -#include - -#include -#include - -#include "pa_util.h" -#include "pa_hostapi.h" -#include "pa_stream.h" -#include "pa_process.h" -#include "pa_allocation.h" -#include "pa_cpuload.h" -#include "pa_ringbuffer.h" -#include "pa_debugprint.h" - -static pthread_t mainThread_; -static char *jackErr_ = NULL; -static const char* clientName_ = "PortAudio"; - -#define STRINGIZE_HELPER(expr) #expr -#define STRINGIZE(expr) STRINGIZE_HELPER(expr) - -/* Check PaError */ -#define ENSURE_PA(expr) \ - do { \ - PaError paErr; \ - if( (paErr = (expr)) < paNoError ) \ - { \ - if( (paErr) == paUnanticipatedHostError && pthread_self() == mainThread_ ) \ - { \ - const char *err = jackErr_; \ - if (! err ) err = "unknown error"; \ - PaUtil_SetLastHostErrorInfo( paJACK, -1, err ); \ - } \ - PaUtil_DebugPrint(( "Expression '" #expr "' failed in '" __FILE__ "', line: " STRINGIZE( __LINE__ ) "\n" )); \ - result = paErr; \ - goto error; \ - } \ - } while( 0 ) - -#define UNLESS(expr, code) \ - do { \ - if( (expr) == 0 ) \ - { \ - if( (code) == paUnanticipatedHostError && pthread_self() == mainThread_ ) \ - { \ - const char *err = jackErr_; \ - if (!err) err = "unknown error"; \ - PaUtil_SetLastHostErrorInfo( paJACK, -1, err ); \ - } \ - PaUtil_DebugPrint(( "Expression '" #expr "' failed in '" __FILE__ "', line: " STRINGIZE( __LINE__ ) "\n" )); \ - result = (code); \ - goto error; \ - } \ - } while( 0 ) - -#define ASSERT_CALL(expr, success) \ - do { \ - int err = (expr); \ - assert( err == success ); \ - } while( 0 ) - -/* - * Functions that directly map to the PortAudio stream interface - */ - -static void Terminate( struct PaUtilHostApiRepresentation *hostApi ); -static PaError IsFormatSupported( struct PaUtilHostApiRepresentation *hostApi, - const PaStreamParameters *inputParameters, - const PaStreamParameters *outputParameters, - double sampleRate ); -static PaError OpenStream( struct PaUtilHostApiRepresentation *hostApi, - PaStream** s, - const PaStreamParameters *inputParameters, - const PaStreamParameters *outputParameters, - double sampleRate, - unsigned long framesPerBuffer, - PaStreamFlags streamFlags, - PaStreamCallback *streamCallback, - void *userData ); -static PaError CloseStream( PaStream* stream ); -static PaError StartStream( PaStream *stream ); -static PaError StopStream( PaStream *stream ); -static PaError AbortStream( PaStream *stream ); -static PaError IsStreamStopped( PaStream *s ); -static PaError IsStreamActive( PaStream *stream ); -/*static PaTime GetStreamInputLatency( PaStream *stream );*/ -/*static PaTime GetStreamOutputLatency( PaStream *stream );*/ -static PaTime GetStreamTime( PaStream *stream ); -static double GetStreamCpuLoad( PaStream* stream ); - - -/* - * Data specific to this API - */ - -struct PaJackStream; - -typedef struct -{ - PaUtilHostApiRepresentation commonHostApiRep; - PaUtilStreamInterface callbackStreamInterface; - PaUtilStreamInterface blockingStreamInterface; - - PaUtilAllocationGroup *deviceInfoMemory; - - jack_client_t *jack_client; - int jack_buffer_size; - PaHostApiIndex hostApiIndex; - - pthread_mutex_t mtx; - pthread_cond_t cond; - unsigned long inputBase, outputBase; - - /* For dealing with the process thread */ - volatile int xrun; /* Received xrun notification from JACK? */ - struct PaJackStream * volatile toAdd, * volatile toRemove; - struct PaJackStream *processQueue; - volatile sig_atomic_t jackIsDown; -} -PaJackHostApiRepresentation; - -/* PaJackStream - a stream data structure specifically for this implementation */ - -typedef struct PaJackStream -{ - PaUtilStreamRepresentation streamRepresentation; - PaUtilBufferProcessor bufferProcessor; - PaUtilCpuLoadMeasurer cpuLoadMeasurer; - PaJackHostApiRepresentation *hostApi; - - /* our input and output ports */ - jack_port_t **local_input_ports; - jack_port_t **local_output_ports; - - /* the input and output ports of the client we are connecting to */ - jack_port_t **remote_input_ports; - jack_port_t **remote_output_ports; - - int num_incoming_connections; - int num_outgoing_connections; - - jack_client_t *jack_client; - - /* The stream is running if it's still producing samples. - * The stream is active if samples it produced are still being heard. - */ - volatile sig_atomic_t is_running; - volatile sig_atomic_t is_active; - /* Used to signal processing thread that stream should start or stop, respectively */ - volatile sig_atomic_t doStart, doStop, doAbort; - - jack_nframes_t t0; - - PaUtilAllocationGroup *stream_memory; - - /* These are useful in the process callback */ - - int callbackResult; - int isSilenced; - int xrun; - - /* These are useful for the blocking API */ - - int isBlockingStream; - PaUtilRingBuffer inFIFO; - PaUtilRingBuffer outFIFO; - volatile sig_atomic_t data_available; - sem_t data_semaphore; - int bytesPerFrame; - int samplesPerFrame; - - struct PaJackStream *next; -} -PaJackStream; - -/* In calls to jack_get_ports() this filter expression is used instead of "" - * to prevent any other types (eg Midi ports etc) being listed */ -#define JACK_PORT_TYPE_FILTER "audio" - -#define TRUE 1 -#define FALSE 0 - -/* - * Functions specific to this API - */ - -static int JackCallback( jack_nframes_t frames, void *userData ); - - -/* - * - * Implementation - * - */ - -/* ---- blocking emulation layer ---- */ - -/* Allocate buffer. */ -static PaError BlockingInitFIFO( PaUtilRingBuffer *rbuf, long numFrames, long bytesPerFrame ) -{ - long numBytes = numFrames * bytesPerFrame; - char *buffer = (char *) malloc( numBytes ); - if( buffer == NULL ) return paInsufficientMemory; - memset( buffer, 0, numBytes ); - return (PaError) PaUtil_InitializeRingBuffer( rbuf, 1, numBytes, buffer ); -} - -/* Free buffer. */ -static PaError BlockingTermFIFO( PaUtilRingBuffer *rbuf ) -{ - if( rbuf->buffer ) free( rbuf->buffer ); - rbuf->buffer = NULL; - return paNoError; -} - -static int -BlockingCallback( const void *inputBuffer, - void *outputBuffer, - unsigned long framesPerBuffer, - const PaStreamCallbackTimeInfo* timeInfo, - PaStreamCallbackFlags statusFlags, - void *userData ) -{ - struct PaJackStream *stream = (PaJackStream *)userData; - long numBytes = stream->bytesPerFrame * framesPerBuffer; - - /* This may get called with NULL inputBuffer during initial setup. */ - if( inputBuffer != NULL ) - { - PaUtil_WriteRingBuffer( &stream->inFIFO, inputBuffer, numBytes ); - } - if( outputBuffer != NULL ) - { - int numRead = PaUtil_ReadRingBuffer( &stream->outFIFO, outputBuffer, numBytes ); - /* Zero out remainder of buffer if we run out of data. */ - memset( (char *)outputBuffer + numRead, 0, numBytes - numRead ); - } - - if( !stream->data_available ) - { - stream->data_available = 1; - sem_post( &stream->data_semaphore ); - } - return paContinue; -} - -static PaError -BlockingBegin( PaJackStream *stream, int minimum_buffer_size ) -{ - long doRead = 0; - long doWrite = 0; - PaError result = paNoError; - long numFrames; - - doRead = stream->local_input_ports != NULL; - doWrite = stream->local_output_ports != NULL; - /* */ - stream->samplesPerFrame = 2; - stream->bytesPerFrame = sizeof(float) * stream->samplesPerFrame; - /* */ - numFrames = 32; - while (numFrames < minimum_buffer_size) - numFrames *= 2; - - if( doRead ) - { - ENSURE_PA( BlockingInitFIFO( &stream->inFIFO, numFrames, stream->bytesPerFrame ) ); - } - if( doWrite ) - { - long numBytes; - - ENSURE_PA( BlockingInitFIFO( &stream->outFIFO, numFrames, stream->bytesPerFrame ) ); - - /* Make Write FIFO appear full initially. */ - numBytes = PaUtil_GetRingBufferWriteAvailable( &stream->outFIFO ); - PaUtil_AdvanceRingBufferWriteIndex( &stream->outFIFO, numBytes ); - } - - stream->data_available = 0; - sem_init( &stream->data_semaphore, 0, 0 ); - -error: - return result; -} - -static void -BlockingEnd( PaJackStream *stream ) -{ - BlockingTermFIFO( &stream->inFIFO ); - BlockingTermFIFO( &stream->outFIFO ); - - sem_destroy( &stream->data_semaphore ); -} - -static PaError BlockingReadStream( PaStream* s, void *data, unsigned long numFrames ) -{ - PaError result = paNoError; - PaJackStream *stream = (PaJackStream *)s; - - long bytesRead; - char *p = (char *) data; - long numBytes = stream->bytesPerFrame * numFrames; - while( numBytes > 0 ) - { - bytesRead = PaUtil_ReadRingBuffer( &stream->inFIFO, p, numBytes ); - numBytes -= bytesRead; - p += bytesRead; - if( numBytes > 0 ) - { - /* see write for an explanation */ - if( stream->data_available ) - stream->data_available = 0; - else - sem_wait( &stream->data_semaphore ); - } - } - - return result; -} - -static PaError BlockingWriteStream( PaStream* s, const void *data, unsigned long numFrames ) -{ - PaError result = paNoError; - PaJackStream *stream = (PaJackStream *)s; - long bytesWritten; - char *p = (char *) data; - long numBytes = stream->bytesPerFrame * numFrames; - while( numBytes > 0 ) - { - bytesWritten = PaUtil_WriteRingBuffer( &stream->outFIFO, p, numBytes ); - numBytes -= bytesWritten; - p += bytesWritten; - if( numBytes > 0 ) - { - /* we use the following algorithm: - * (1) write data - * (2) if some data didn't fit into the ringbuffer, set data_available to 0 - * to indicate to the audio that if space becomes available, we want to know - * (3) retry to write data (because it might be that between (1) and (2) - * new space in the buffer became available) - * (4) if this failed, we are sure that the buffer is really empty and - * we will definitely receive a notification when it becomes available - * thus we can safely sleep - * - * if the algorithm bailed out in step (3) before, it leaks a count of 1 - * on the semaphore; however, it doesn't matter, because if we block in (4), - * we also do it in a loop - */ - if( stream->data_available ) - stream->data_available = 0; - else - sem_wait( &stream->data_semaphore ); - } - } - - return result; -} - -static signed long -BlockingGetStreamReadAvailable( PaStream* s ) -{ - PaJackStream *stream = (PaJackStream *)s; - - int bytesFull = PaUtil_GetRingBufferReadAvailable( &stream->inFIFO ); - return bytesFull / stream->bytesPerFrame; -} - -static signed long -BlockingGetStreamWriteAvailable( PaStream* s ) -{ - PaJackStream *stream = (PaJackStream *)s; - - int bytesEmpty = PaUtil_GetRingBufferWriteAvailable( &stream->outFIFO ); - return bytesEmpty / stream->bytesPerFrame; -} - -static PaError -BlockingWaitEmpty( PaStream *s ) -{ - PaJackStream *stream = (PaJackStream *)s; - - while( PaUtil_GetRingBufferReadAvailable( &stream->outFIFO ) > 0 ) - { - stream->data_available = 0; - sem_wait( &stream->data_semaphore ); - } - return 0; -} - -/* ---- jack driver ---- */ - -/* BuildDeviceList(): - * - * The process of determining a list of PortAudio "devices" from - * JACK's client/port system is fairly involved, so it is separated - * into its own routine. - */ - -static PaError BuildDeviceList( PaJackHostApiRepresentation *jackApi ) -{ - /* Utility macros for the repetitive process of allocating memory */ - - /* JACK has no concept of a device. To JACK, there are clients - * which have an arbitrary number of ports. To make this - * intelligible to PortAudio clients, we will group each JACK client - * into a device, and make each port of that client a channel */ - - PaError result = paNoError; - PaUtilHostApiRepresentation *commonApi = &jackApi->commonHostApiRep; - - const char **jack_ports = NULL; - char **client_names = NULL; - char *regex_pattern = NULL; - int port_index, client_index, i; - double globalSampleRate; - regex_t port_regex; - unsigned long numClients = 0, numPorts = 0; - char *tmp_client_name = NULL; - - commonApi->info.defaultInputDevice = paNoDevice; - commonApi->info.defaultOutputDevice = paNoDevice; - commonApi->info.deviceCount = 0; - - /* Parse the list of ports, using a regex to grab the client names */ - ASSERT_CALL( regcomp( &port_regex, "^[^:]*", REG_EXTENDED ), 0 ); - - /* since we are rebuilding the list of devices, free all memory - * associated with the previous list */ - PaUtil_FreeAllAllocations( jackApi->deviceInfoMemory ); - - regex_pattern = PaUtil_GroupAllocateMemory( jackApi->deviceInfoMemory, jack_client_name_size() + 3 ); - tmp_client_name = PaUtil_GroupAllocateMemory( jackApi->deviceInfoMemory, jack_client_name_size() ); - - /* We can only retrieve the list of clients indirectly, by first - * asking for a list of all ports, then parsing the port names - * according to the client_name:port_name convention (which is - * enforced by jackd) - * A: If jack_get_ports returns NULL, there's nothing for us to do */ - UNLESS( (jack_ports = jack_get_ports( jackApi->jack_client, "", JACK_PORT_TYPE_FILTER, 0 )) && jack_ports[0], paNoError ); - /* Find number of ports */ - while( jack_ports[numPorts] ) - ++numPorts; - /* At least there will be one port per client :) */ - UNLESS( client_names = PaUtil_GroupAllocateMemory( jackApi->deviceInfoMemory, numPorts * - sizeof (char *) ), paInsufficientMemory ); - - /* Build a list of clients from the list of ports */ - for( numClients = 0, port_index = 0; jack_ports[port_index] != NULL; port_index++ ) - { - int client_seen = FALSE; - regmatch_t match_info; - const char *port = jack_ports[port_index]; - - /* extract the client name from the port name, using a regex - * that parses the clientname:portname syntax */ - UNLESS( !regexec( &port_regex, port, 1, &match_info, 0 ), paInternalError ); - assert(match_info.rm_eo - match_info.rm_so < jack_client_name_size()); - memcpy( tmp_client_name, port + match_info.rm_so, - match_info.rm_eo - match_info.rm_so ); - tmp_client_name[match_info.rm_eo - match_info.rm_so] = '\0'; - - /* do we know about this port's client yet? */ - for( i = 0; i < numClients; i++ ) - { - if( strcmp( tmp_client_name, client_names[i] ) == 0 ) - client_seen = TRUE; - } - - if (client_seen) - continue; /* A: Nothing to see here, move along */ - - UNLESS( client_names[numClients] = (char*)PaUtil_GroupAllocateMemory( jackApi->deviceInfoMemory, - strlen(tmp_client_name) + 1), paInsufficientMemory ); - - /* The alsa_pcm client should go in spot 0. If this - * is the alsa_pcm client AND we are NOT about to put - * it in spot 0 put it in spot 0 and move whatever - * was already in spot 0 to the end. */ - if( strcmp( "alsa_pcm", tmp_client_name ) == 0 && numClients > 0 ) - { - /* alsa_pcm goes in spot 0 */ - strcpy( client_names[ numClients ], client_names[0] ); - strcpy( client_names[0], tmp_client_name ); - } - else - { - /* put the new client at the end of the client list */ - strcpy( client_names[ numClients ], tmp_client_name ); - } - ++numClients; - } - - /* Now we have a list of clients, which will become the list of - * PortAudio devices. */ - - /* there is one global sample rate all clients must conform to */ - - globalSampleRate = jack_get_sample_rate( jackApi->jack_client ); - UNLESS( commonApi->deviceInfos = (PaDeviceInfo**)PaUtil_GroupAllocateMemory( jackApi->deviceInfoMemory, - sizeof(PaDeviceInfo*) * numClients ), paInsufficientMemory ); - - assert( commonApi->info.deviceCount == 0 ); - - /* Create a PaDeviceInfo structure for every client */ - for( client_index = 0; client_index < numClients; client_index++ ) - { - PaDeviceInfo *curDevInfo; - const char **clientPorts = NULL; - - UNLESS( curDevInfo = (PaDeviceInfo*)PaUtil_GroupAllocateMemory( jackApi->deviceInfoMemory, - sizeof(PaDeviceInfo) ), paInsufficientMemory ); - UNLESS( curDevInfo->name = (char*)PaUtil_GroupAllocateMemory( jackApi->deviceInfoMemory, - strlen(client_names[client_index]) + 1 ), paInsufficientMemory ); - strcpy( (char *)curDevInfo->name, client_names[client_index] ); - - curDevInfo->structVersion = 2; - curDevInfo->hostApi = jackApi->hostApiIndex; - - /* JACK is very inflexible: there is one sample rate the whole - * system must run at, and all clients must speak IEEE float. */ - curDevInfo->defaultSampleRate = globalSampleRate; - - /* To determine how many input and output channels are available, - * we re-query jackd with more specific parameters. */ - - sprintf( regex_pattern, "%s:.*", client_names[client_index] ); - - /* ... what are your output ports (that we could input from)? */ - clientPorts = jack_get_ports( jackApi->jack_client, regex_pattern, - JACK_PORT_TYPE_FILTER, JackPortIsOutput); - curDevInfo->maxInputChannels = 0; - curDevInfo->defaultLowInputLatency = 0.; - curDevInfo->defaultHighInputLatency = 0.; - if( clientPorts ) - { - jack_port_t *p = jack_port_by_name( jackApi->jack_client, clientPorts[0] ); - curDevInfo->defaultLowInputLatency = curDevInfo->defaultHighInputLatency = - jack_port_get_latency( p ) / globalSampleRate; - - for( i = 0; clientPorts[i] != NULL; i++) - { - /* The number of ports returned is the number of output channels. - * We don't care what they are, we just care how many */ - curDevInfo->maxInputChannels++; - } - free(clientPorts); - } - - /* ... what are your input ports (that we could output to)? */ - clientPorts = jack_get_ports( jackApi->jack_client, regex_pattern, - JACK_PORT_TYPE_FILTER, JackPortIsInput); - curDevInfo->maxOutputChannels = 0; - curDevInfo->defaultLowOutputLatency = 0.; - curDevInfo->defaultHighOutputLatency = 0.; - if( clientPorts ) - { - jack_port_t *p = jack_port_by_name( jackApi->jack_client, clientPorts[0] ); - curDevInfo->defaultLowOutputLatency = curDevInfo->defaultHighOutputLatency = - jack_port_get_latency( p ) / globalSampleRate; - - for( i = 0; clientPorts[i] != NULL; i++) - { - /* The number of ports returned is the number of input channels. - * We don't care what they are, we just care how many */ - curDevInfo->maxOutputChannels++; - } - free(clientPorts); - } - - /* Add this client to the list of devices */ - commonApi->deviceInfos[client_index] = curDevInfo; - ++commonApi->info.deviceCount; - if( commonApi->info.defaultInputDevice == paNoDevice && curDevInfo->maxInputChannels > 0 ) - commonApi->info.defaultInputDevice = client_index; - if( commonApi->info.defaultOutputDevice == paNoDevice && curDevInfo->maxOutputChannels > 0 ) - commonApi->info.defaultOutputDevice = client_index; - } - -error: - regfree( &port_regex ); - free( jack_ports ); - return result; -} - -static void UpdateSampleRate( PaJackStream *stream, double sampleRate ) -{ - /* XXX: Maybe not the cleanest way of going about this? */ - stream->cpuLoadMeasurer.samplingPeriod = stream->bufferProcessor.samplePeriod = 1. / sampleRate; - stream->streamRepresentation.streamInfo.sampleRate = sampleRate; -} - -static void JackErrorCallback( const char *msg ) -{ - if( pthread_self() == mainThread_ ) - { - assert( msg ); - jackErr_ = realloc( jackErr_, strlen( msg ) + 1 ); - strcpy( jackErr_, msg ); - } -} - -static void JackOnShutdown( void *arg ) -{ - PaJackHostApiRepresentation *jackApi = (PaJackHostApiRepresentation *)arg; - PaJackStream *stream = jackApi->processQueue; - - PA_DEBUG(( "%s: JACK server is shutting down\n", __FUNCTION__ )); - for( ; stream; stream = stream->next ) - { - stream->is_active = 0; - } - - /* Make sure that the main thread doesn't get stuck waiting on the condition */ - ASSERT_CALL( pthread_mutex_lock( &jackApi->mtx ), 0 ); - jackApi->jackIsDown = 1; - ASSERT_CALL( pthread_cond_signal( &jackApi->cond ), 0 ); - ASSERT_CALL( pthread_mutex_unlock( &jackApi->mtx ), 0 ); - -} - -static int JackSrCb( jack_nframes_t nframes, void *arg ) -{ - PaJackHostApiRepresentation *jackApi = (PaJackHostApiRepresentation *)arg; - double sampleRate = (double)nframes; - PaJackStream *stream = jackApi->processQueue; - - /* Update all streams in process queue */ - PA_DEBUG(( "%s: Acting on change in JACK samplerate: %f\n", __FUNCTION__, sampleRate )); - for( ; stream; stream = stream->next ) - { - if( stream->streamRepresentation.streamInfo.sampleRate != sampleRate ) - { - PA_DEBUG(( "%s: Updating samplerate\n", __FUNCTION__ )); - UpdateSampleRate( stream, sampleRate ); - } - } - - return 0; -} - -static int JackXRunCb(void *arg) { - PaJackHostApiRepresentation *hostApi = (PaJackHostApiRepresentation *)arg; - assert( hostApi ); - hostApi->xrun = TRUE; - PA_DEBUG(( "%s: JACK signalled xrun\n", __FUNCTION__ )); - return 0; -} - -PaError PaJack_Initialize( PaUtilHostApiRepresentation **hostApi, - PaHostApiIndex hostApiIndex ) -{ - PaError result = paNoError; - PaJackHostApiRepresentation *jackHostApi; - int activated = 0; - jack_status_t jackStatus = 0; - *hostApi = NULL; /* Initialize to NULL */ - - UNLESS( jackHostApi = (PaJackHostApiRepresentation*) - PaUtil_AllocateMemory( sizeof(PaJackHostApiRepresentation) ), paInsufficientMemory ); - UNLESS( jackHostApi->deviceInfoMemory = PaUtil_CreateAllocationGroup(), paInsufficientMemory ); - - mainThread_ = pthread_self(); - ASSERT_CALL( pthread_mutex_init( &jackHostApi->mtx, NULL ), 0 ); - ASSERT_CALL( pthread_cond_init( &jackHostApi->cond, NULL ), 0 ); - - /* Try to become a client of the JACK server. If we cannot do - * this, then this API cannot be used. - * - * Without the JackNoStartServer option, the jackd server is started - * automatically which we do not want. - */ - - jackHostApi->jack_client = jack_client_open( clientName_, JackNoStartServer, &jackStatus ); - if( !jackHostApi->jack_client ) - { - /* the V19 development docs say that if an implementation - * detects that it cannot be used, it should return a NULL - * interface and paNoError */ - PA_DEBUG(( "%s: Couldn't connect to JACK, status: %d\n", __FUNCTION__, jackStatus )); - result = paNoError; - goto error; - } - - jackHostApi->hostApiIndex = hostApiIndex; - - *hostApi = &jackHostApi->commonHostApiRep; - (*hostApi)->info.structVersion = 1; - (*hostApi)->info.type = paJACK; - (*hostApi)->info.name = "JACK Audio Connection Kit"; - - /* Build a device list by querying the JACK server */ - ENSURE_PA( BuildDeviceList( jackHostApi ) ); - - /* Register functions */ - - (*hostApi)->Terminate = Terminate; - (*hostApi)->OpenStream = OpenStream; - (*hostApi)->IsFormatSupported = IsFormatSupported; - - PaUtil_InitializeStreamInterface( &jackHostApi->callbackStreamInterface, - CloseStream, StartStream, - StopStream, AbortStream, - IsStreamStopped, IsStreamActive, - GetStreamTime, GetStreamCpuLoad, - PaUtil_DummyRead, PaUtil_DummyWrite, - PaUtil_DummyGetReadAvailable, - PaUtil_DummyGetWriteAvailable ); - - PaUtil_InitializeStreamInterface( &jackHostApi->blockingStreamInterface, CloseStream, StartStream, - StopStream, AbortStream, IsStreamStopped, IsStreamActive, - GetStreamTime, PaUtil_DummyGetCpuLoad, - BlockingReadStream, BlockingWriteStream, - BlockingGetStreamReadAvailable, BlockingGetStreamWriteAvailable ); - - jackHostApi->inputBase = jackHostApi->outputBase = 0; - jackHostApi->xrun = 0; - jackHostApi->toAdd = jackHostApi->toRemove = NULL; - jackHostApi->processQueue = NULL; - jackHostApi->jackIsDown = 0; - - jack_on_shutdown( jackHostApi->jack_client, JackOnShutdown, jackHostApi ); - jack_set_error_function( JackErrorCallback ); - jackHostApi->jack_buffer_size = jack_get_buffer_size ( jackHostApi->jack_client ); - /* Don't check for error, may not be supported (deprecated in at least jackdmp) */ - jack_set_sample_rate_callback( jackHostApi->jack_client, JackSrCb, jackHostApi ); - UNLESS( !jack_set_xrun_callback( jackHostApi->jack_client, JackXRunCb, jackHostApi ), paUnanticipatedHostError ); - UNLESS( !jack_set_process_callback( jackHostApi->jack_client, JackCallback, jackHostApi ), paUnanticipatedHostError ); - UNLESS( !jack_activate( jackHostApi->jack_client ), paUnanticipatedHostError ); - activated = 1; - - return result; - -error: - if( activated ) - ASSERT_CALL( jack_deactivate( jackHostApi->jack_client ), 0 ); - - if( jackHostApi ) - { - if( jackHostApi->jack_client ) - ASSERT_CALL( jack_client_close( jackHostApi->jack_client ), 0 ); - - if( jackHostApi->deviceInfoMemory ) - { - PaUtil_FreeAllAllocations( jackHostApi->deviceInfoMemory ); - PaUtil_DestroyAllocationGroup( jackHostApi->deviceInfoMemory ); - } - - PaUtil_FreeMemory( jackHostApi ); - } - return result; -} - - -static void Terminate( struct PaUtilHostApiRepresentation *hostApi ) -{ - PaJackHostApiRepresentation *jackHostApi = (PaJackHostApiRepresentation*)hostApi; - - /* note: this automatically disconnects all ports, since a deactivated - * client is not allowed to have any ports connected */ - ASSERT_CALL( jack_deactivate( jackHostApi->jack_client ), 0 ); - - ASSERT_CALL( pthread_mutex_destroy( &jackHostApi->mtx ), 0 ); - ASSERT_CALL( pthread_cond_destroy( &jackHostApi->cond ), 0 ); - - ASSERT_CALL( jack_client_close( jackHostApi->jack_client ), 0 ); - - if( jackHostApi->deviceInfoMemory ) - { - PaUtil_FreeAllAllocations( jackHostApi->deviceInfoMemory ); - PaUtil_DestroyAllocationGroup( jackHostApi->deviceInfoMemory ); - } - - PaUtil_FreeMemory( jackHostApi ); - - free( jackErr_ ); - jackErr_ = NULL; -} - -static PaError IsFormatSupported( struct PaUtilHostApiRepresentation *hostApi, - const PaStreamParameters *inputParameters, - const PaStreamParameters *outputParameters, - double sampleRate ) -{ - int inputChannelCount = 0, outputChannelCount = 0; - PaSampleFormat inputSampleFormat, outputSampleFormat; - - if( inputParameters ) - { - inputChannelCount = inputParameters->channelCount; - inputSampleFormat = inputParameters->sampleFormat; - - /* unless alternate device specification is supported, reject the use of - paUseHostApiSpecificDeviceSpecification */ - - if( inputParameters->device == paUseHostApiSpecificDeviceSpecification ) - return paInvalidDevice; - - /* check that input device can support inputChannelCount */ - if( inputChannelCount > hostApi->deviceInfos[ inputParameters->device ]->maxInputChannels ) - return paInvalidChannelCount; - - /* validate inputStreamInfo */ - if( inputParameters->hostApiSpecificStreamInfo ) - return paIncompatibleHostApiSpecificStreamInfo; /* this implementation doesn't use custom stream info */ - } - else - { - inputChannelCount = 0; - } - - if( outputParameters ) - { - outputChannelCount = outputParameters->channelCount; - outputSampleFormat = outputParameters->sampleFormat; - - /* unless alternate device specification is supported, reject the use of - paUseHostApiSpecificDeviceSpecification */ - - if( outputParameters->device == paUseHostApiSpecificDeviceSpecification ) - return paInvalidDevice; - - /* check that output device can support inputChannelCount */ - if( outputChannelCount > hostApi->deviceInfos[ outputParameters->device ]->maxOutputChannels ) - return paInvalidChannelCount; - - /* validate outputStreamInfo */ - if( outputParameters->hostApiSpecificStreamInfo ) - return paIncompatibleHostApiSpecificStreamInfo; /* this implementation doesn't use custom stream info */ - } - else - { - outputChannelCount = 0; - } - - /* - The following check is not necessary for JACK. - - - if a full duplex stream is requested, check that the combination - of input and output parameters is supported - - - Because the buffer adapter handles conversion between all standard - sample formats, the following checks are only required if paCustomFormat - is implemented, or under some other unusual conditions. - - - check that input device can support inputSampleFormat, or that - we have the capability to convert from outputSampleFormat to - a native format - - - check that output device can support outputSampleFormat, or that - we have the capability to convert from outputSampleFormat to - a native format - */ - - /* check that the device supports sampleRate */ - -#define ABS(x) ( (x) > 0 ? (x) : -(x) ) - if( ABS(sampleRate - jack_get_sample_rate(((PaJackHostApiRepresentation *) hostApi)->jack_client )) > 1 ) - return paInvalidSampleRate; -#undef ABS - - return paFormatIsSupported; -} - -/* Basic stream initialization */ -static PaError InitializeStream( PaJackStream *stream, PaJackHostApiRepresentation *hostApi, int numInputChannels, - int numOutputChannels ) -{ - PaError result = paNoError; - assert( stream ); - - memset( stream, 0, sizeof (PaJackStream) ); - UNLESS( stream->stream_memory = PaUtil_CreateAllocationGroup(), paInsufficientMemory ); - stream->jack_client = hostApi->jack_client; - stream->hostApi = hostApi; - - if( numInputChannels > 0 ) - { - UNLESS( stream->local_input_ports = - (jack_port_t**) PaUtil_GroupAllocateMemory( stream->stream_memory, sizeof(jack_port_t*) * numInputChannels ), - paInsufficientMemory ); - memset( stream->local_input_ports, 0, sizeof(jack_port_t*) * numInputChannels ); - UNLESS( stream->remote_output_ports = - (jack_port_t**) PaUtil_GroupAllocateMemory( stream->stream_memory, sizeof(jack_port_t*) * numInputChannels ), - paInsufficientMemory ); - memset( stream->remote_output_ports, 0, sizeof(jack_port_t*) * numInputChannels ); - } - if( numOutputChannels > 0 ) - { - UNLESS( stream->local_output_ports = - (jack_port_t**) PaUtil_GroupAllocateMemory( stream->stream_memory, sizeof(jack_port_t*) * numOutputChannels ), - paInsufficientMemory ); - memset( stream->local_output_ports, 0, sizeof(jack_port_t*) * numOutputChannels ); - UNLESS( stream->remote_input_ports = - (jack_port_t**) PaUtil_GroupAllocateMemory( stream->stream_memory, sizeof(jack_port_t*) * numOutputChannels ), - paInsufficientMemory ); - memset( stream->remote_input_ports, 0, sizeof(jack_port_t*) * numOutputChannels ); - } - - stream->num_incoming_connections = numInputChannels; - stream->num_outgoing_connections = numOutputChannels; - -error: - return result; -} - -/*! - * Free resources associated with stream, and eventually stream itself. - * - * Frees allocated memory, and closes opened pcms. - */ -static void CleanUpStream( PaJackStream *stream, int terminateStreamRepresentation, int terminateBufferProcessor ) -{ - int i; - assert( stream ); - - if( stream->isBlockingStream ) - BlockingEnd( stream ); - - for( i = 0; i < stream->num_incoming_connections; ++i ) - { - if( stream->local_input_ports[i] ) - ASSERT_CALL( jack_port_unregister( stream->jack_client, stream->local_input_ports[i] ), 0 ); - } - for( i = 0; i < stream->num_outgoing_connections; ++i ) - { - if( stream->local_output_ports[i] ) - ASSERT_CALL( jack_port_unregister( stream->jack_client, stream->local_output_ports[i] ), 0 ); - } - - if( terminateStreamRepresentation ) - PaUtil_TerminateStreamRepresentation( &stream->streamRepresentation ); - if( terminateBufferProcessor ) - PaUtil_TerminateBufferProcessor( &stream->bufferProcessor ); - - if( stream->stream_memory ) - { - PaUtil_FreeAllAllocations( stream->stream_memory ); - PaUtil_DestroyAllocationGroup( stream->stream_memory ); - } - PaUtil_FreeMemory( stream ); -} - -static PaError WaitCondition( PaJackHostApiRepresentation *hostApi ) -{ - PaError result = paNoError; - int err = 0; - PaTime pt = PaUtil_GetTime(); - struct timespec ts; - - ts.tv_sec = (time_t) floor( pt + 10 * 60 /* 10 minutes */ ); - ts.tv_nsec = (long) ((pt - floor( pt )) * 1000000000); - /* XXX: Best enclose in loop, in case of spurious wakeups? */ - err = pthread_cond_timedwait( &hostApi->cond, &hostApi->mtx, &ts ); - - /* Make sure we didn't time out */ - UNLESS( err != ETIMEDOUT, paTimedOut ); - UNLESS( !err, paInternalError ); - -error: - return result; -} - -static PaError AddStream( PaJackStream *stream ) -{ - PaError result = paNoError; - PaJackHostApiRepresentation *hostApi = stream->hostApi; - /* Add to queue of streams that should be processed */ - ASSERT_CALL( pthread_mutex_lock( &hostApi->mtx ), 0 ); - if( !hostApi->jackIsDown ) - { - hostApi->toAdd = stream; - /* Unlock mutex and await signal from processing thread */ - result = WaitCondition( stream->hostApi ); - } - ASSERT_CALL( pthread_mutex_unlock( &hostApi->mtx ), 0 ); - ENSURE_PA( result ); - - UNLESS( !hostApi->jackIsDown, paDeviceUnavailable ); - -error: - return result; -} - -/* Remove stream from processing queue */ -static PaError RemoveStream( PaJackStream *stream ) -{ - PaError result = paNoError; - PaJackHostApiRepresentation *hostApi = stream->hostApi; - - /* Add to queue over streams that should be processed */ - ASSERT_CALL( pthread_mutex_lock( &hostApi->mtx ), 0 ); - if( !hostApi->jackIsDown ) - { - hostApi->toRemove = stream; - /* Unlock mutex and await signal from processing thread */ - result = WaitCondition( stream->hostApi ); - } - ASSERT_CALL( pthread_mutex_unlock( &hostApi->mtx ), 0 ); - ENSURE_PA( result ); - -error: - return result; -} - -/* Add stream to JACK callback processing queue */ -static PaError OpenStream( struct PaUtilHostApiRepresentation *hostApi, - PaStream** s, - const PaStreamParameters *inputParameters, - const PaStreamParameters *outputParameters, - double sampleRate, - unsigned long framesPerBuffer, - PaStreamFlags streamFlags, - PaStreamCallback *streamCallback, - void *userData ) -{ - PaError result = paNoError; - PaJackHostApiRepresentation *jackHostApi = (PaJackHostApiRepresentation*)hostApi; - PaJackStream *stream = NULL; - char *port_string = PaUtil_GroupAllocateMemory( jackHostApi->deviceInfoMemory, jack_port_name_size() ); - unsigned long regexSz = jack_client_name_size() + 3; - char *regex_pattern = PaUtil_GroupAllocateMemory( jackHostApi->deviceInfoMemory, regexSz ); - const char **jack_ports = NULL; - /* int jack_max_buffer_size = jack_get_buffer_size( jackHostApi->jack_client ); */ - int i; - int inputChannelCount, outputChannelCount; - const double jackSr = jack_get_sample_rate( jackHostApi->jack_client ); - PaSampleFormat inputSampleFormat = 0, outputSampleFormat = 0; - int bpInitialized = 0, srInitialized = 0; /* Initialized buffer processor and stream representation? */ - unsigned long ofs; - - /* validate platform specific flags */ - if( (streamFlags & paPlatformSpecificFlags) != 0 ) - return paInvalidFlag; /* unexpected platform specific flag */ - if( (streamFlags & paPrimeOutputBuffersUsingStreamCallback) != 0 ) - { - streamFlags &= ~paPrimeOutputBuffersUsingStreamCallback; - /*return paInvalidFlag;*/ /* This implementation does not support buffer priming */ - } - - if( framesPerBuffer != paFramesPerBufferUnspecified ) - { - /* Jack operates with power of two buffers, and we don't support non-integer buffer adaption (yet) */ - /*UNLESS( !(framesPerBuffer & (framesPerBuffer - 1)), paBufferTooBig );*/ /* TODO: Add descriptive error code? */ - } - - /* Preliminary checks */ - - if( inputParameters ) - { - inputChannelCount = inputParameters->channelCount; - inputSampleFormat = inputParameters->sampleFormat; - - /* unless alternate device specification is supported, reject the use of - paUseHostApiSpecificDeviceSpecification */ - - if( inputParameters->device == paUseHostApiSpecificDeviceSpecification ) - return paInvalidDevice; - - /* check that input device can support inputChannelCount */ - if( inputChannelCount > hostApi->deviceInfos[ inputParameters->device ]->maxInputChannels ) - return paInvalidChannelCount; - - /* validate inputStreamInfo */ - if( inputParameters->hostApiSpecificStreamInfo ) - return paIncompatibleHostApiSpecificStreamInfo; /* this implementation doesn't use custom stream info */ - } - else - { - inputChannelCount = 0; - } - - if( outputParameters ) - { - outputChannelCount = outputParameters->channelCount; - outputSampleFormat = outputParameters->sampleFormat; - - /* unless alternate device specification is supported, reject the use of - paUseHostApiSpecificDeviceSpecification */ - - if( outputParameters->device == paUseHostApiSpecificDeviceSpecification ) - return paInvalidDevice; - - /* check that output device can support inputChannelCount */ - if( outputChannelCount > hostApi->deviceInfos[ outputParameters->device ]->maxOutputChannels ) - return paInvalidChannelCount; - - /* validate outputStreamInfo */ - if( outputParameters->hostApiSpecificStreamInfo ) - return paIncompatibleHostApiSpecificStreamInfo; /* this implementation doesn't use custom stream info */ - } - else - { - outputChannelCount = 0; - } - - /* ... check that the sample rate exactly matches the ONE acceptable rate - * A: This rate isn't necessarily constant though? */ - -#define ABS(x) ( (x) > 0 ? (x) : -(x) ) - if( ABS(sampleRate - jackSr) > 1 ) - return paInvalidSampleRate; -#undef ABS - - UNLESS( stream = (PaJackStream*)PaUtil_AllocateMemory( sizeof(PaJackStream) ), paInsufficientMemory ); - ENSURE_PA( InitializeStream( stream, jackHostApi, inputChannelCount, outputChannelCount ) ); - - /* the blocking emulation, if necessary */ - stream->isBlockingStream = !streamCallback; - if( stream->isBlockingStream ) - { - float latency = 0.001; /* 1ms is the absolute minimum we support */ - int minimum_buffer_frames = 0; - - if( inputParameters && inputParameters->suggestedLatency > latency ) - latency = inputParameters->suggestedLatency; - else if( outputParameters && outputParameters->suggestedLatency > latency ) - latency = outputParameters->suggestedLatency; - - /* the latency the user asked for indicates the minimum buffer size in frames */ - minimum_buffer_frames = (int) (latency * jack_get_sample_rate( jackHostApi->jack_client )); - - /* we also need to be able to store at least three full jack buffers to avoid dropouts */ - if( jackHostApi->jack_buffer_size * 3 > minimum_buffer_frames ) - minimum_buffer_frames = jackHostApi->jack_buffer_size * 3; - - /* setup blocking API data structures (FIXME: can fail) */ - BlockingBegin( stream, minimum_buffer_frames ); - - /* install our own callback for the blocking API */ - streamCallback = BlockingCallback; - userData = stream; - - PaUtil_InitializeStreamRepresentation( &stream->streamRepresentation, - &jackHostApi->blockingStreamInterface, streamCallback, userData ); - } - else - { - PaUtil_InitializeStreamRepresentation( &stream->streamRepresentation, - &jackHostApi->callbackStreamInterface, streamCallback, userData ); - } - srInitialized = 1; - PaUtil_InitializeCpuLoadMeasurer( &stream->cpuLoadMeasurer, jackSr ); - - /* create the JACK ports. We cannot connect them until audio - * processing begins */ - - /* Register a unique set of ports for this stream - * TODO: Robust allocation of new port names */ - - ofs = jackHostApi->inputBase; - for( i = 0; i < inputChannelCount; i++ ) - { - snprintf( port_string, jack_port_name_size(), "in_%lu", ofs + i ); - UNLESS( stream->local_input_ports[i] = jack_port_register( - jackHostApi->jack_client, port_string, - JACK_DEFAULT_AUDIO_TYPE, JackPortIsInput, 0 ), paInsufficientMemory ); - } - jackHostApi->inputBase += inputChannelCount; - - ofs = jackHostApi->outputBase; - for( i = 0; i < outputChannelCount; i++ ) - { - snprintf( port_string, jack_port_name_size(), "out_%lu", ofs + i ); - UNLESS( stream->local_output_ports[i] = jack_port_register( - jackHostApi->jack_client, port_string, - JACK_DEFAULT_AUDIO_TYPE, JackPortIsOutput, 0 ), paInsufficientMemory ); - } - jackHostApi->outputBase += outputChannelCount; - - /* look up the jack_port_t's for the remote ports. We could do - * this at stream start time, but doing it here ensures the - * name lookup only happens once. */ - - if( inputChannelCount > 0 ) - { - int err = 0; - - /* Get output ports of our capture device */ - snprintf( regex_pattern, regexSz, "%s:.*", hostApi->deviceInfos[ inputParameters->device ]->name ); - UNLESS( jack_ports = jack_get_ports( jackHostApi->jack_client, regex_pattern, - JACK_PORT_TYPE_FILTER, JackPortIsOutput ), paUnanticipatedHostError ); - for( i = 0; i < inputChannelCount && jack_ports[i]; i++ ) - { - if( (stream->remote_output_ports[i] = jack_port_by_name( - jackHostApi->jack_client, jack_ports[i] )) == NULL ) - { - err = 1; - break; - } - } - free( jack_ports ); - UNLESS( !err, paInsufficientMemory ); - - /* Fewer ports than expected? */ - UNLESS( i == inputChannelCount, paInternalError ); - } - - if( outputChannelCount > 0 ) - { - int err = 0; - - /* Get input ports of our playback device */ - snprintf( regex_pattern, regexSz, "%s:.*", hostApi->deviceInfos[ outputParameters->device ]->name ); - UNLESS( jack_ports = jack_get_ports( jackHostApi->jack_client, regex_pattern, - JACK_PORT_TYPE_FILTER, JackPortIsInput ), paUnanticipatedHostError ); - for( i = 0; i < outputChannelCount && jack_ports[i]; i++ ) - { - if( (stream->remote_input_ports[i] = jack_port_by_name( - jackHostApi->jack_client, jack_ports[i] )) == 0 ) - { - err = 1; - break; - } - } - free( jack_ports ); - UNLESS( !err , paInsufficientMemory ); - - /* Fewer ports than expected? */ - UNLESS( i == outputChannelCount, paInternalError ); - } - - ENSURE_PA( PaUtil_InitializeBufferProcessor( - &stream->bufferProcessor, - inputChannelCount, - inputSampleFormat, - paFloat32 | paNonInterleaved, /* hostInputSampleFormat */ - outputChannelCount, - outputSampleFormat, - paFloat32 | paNonInterleaved, /* hostOutputSampleFormat */ - jackSr, - streamFlags, - framesPerBuffer, - 0, /* Ignored */ - paUtilUnknownHostBufferSize, /* Buffer size may vary on JACK's discretion */ - streamCallback, - userData ) ); - bpInitialized = 1; - - if( stream->num_incoming_connections > 0 ) - stream->streamRepresentation.streamInfo.inputLatency = (jack_port_get_latency( stream->remote_output_ports[0] ) - - jack_get_buffer_size( jackHostApi->jack_client ) /* One buffer is not counted as latency */ - + PaUtil_GetBufferProcessorInputLatencyFrames( &stream->bufferProcessor )) / sampleRate; - if( stream->num_outgoing_connections > 0 ) - stream->streamRepresentation.streamInfo.outputLatency = (jack_port_get_latency( stream->remote_input_ports[0] ) - - jack_get_buffer_size( jackHostApi->jack_client ) /* One buffer is not counted as latency */ - + PaUtil_GetBufferProcessorOutputLatencyFrames( &stream->bufferProcessor )) / sampleRate; - - stream->streamRepresentation.streamInfo.sampleRate = jackSr; - stream->t0 = jack_frame_time( jackHostApi->jack_client ); /* A: Time should run from Pa_OpenStream */ - - /* Add to queue of opened streams */ - ENSURE_PA( AddStream( stream ) ); - - *s = (PaStream*)stream; - - return result; - -error: - if( stream ) - CleanUpStream( stream, srInitialized, bpInitialized ); - - return result; -} - -/* - When CloseStream() is called, the multi-api layer ensures that - the stream has already been stopped or aborted. -*/ -static PaError CloseStream( PaStream* s ) -{ - PaError result = paNoError; - PaJackStream *stream = (PaJackStream*)s; - - /* Remove this stream from the processing queue */ - ENSURE_PA( RemoveStream( stream ) ); - -error: - CleanUpStream( stream, 1, 1 ); - return result; -} - -static PaError RealProcess( PaJackStream *stream, jack_nframes_t frames ) -{ - PaError result = paNoError; - PaStreamCallbackTimeInfo timeInfo = {0,0,0}; - int chn; - int framesProcessed; - const double sr = jack_get_sample_rate( stream->jack_client ); /* Shouldn't change during the process callback */ - PaStreamCallbackFlags cbFlags = 0; - - /* If the user has returned !paContinue from the callback we'll want to flush the internal buffers, - * when these are empty we can finally mark the stream as inactive */ - if( stream->callbackResult != paContinue && - PaUtil_IsBufferProcessorOutputEmpty( &stream->bufferProcessor ) ) - { - stream->is_active = 0; - if( stream->streamRepresentation.streamFinishedCallback ) - stream->streamRepresentation.streamFinishedCallback( stream->streamRepresentation.userData ); - PA_DEBUG(( "%s: Callback finished\n", __FUNCTION__ )); - - goto end; - } - - timeInfo.currentTime = (jack_frame_time( stream->jack_client ) - stream->t0) / sr; - if( stream->num_incoming_connections > 0 ) - timeInfo.inputBufferAdcTime = timeInfo.currentTime - jack_port_get_latency( stream->remote_output_ports[0] ) - / sr; - if( stream->num_outgoing_connections > 0 ) - timeInfo.outputBufferDacTime = timeInfo.currentTime + jack_port_get_latency( stream->remote_input_ports[0] ) - / sr; - - PaUtil_BeginCpuLoadMeasurement( &stream->cpuLoadMeasurer ); - - if( stream->xrun ) - { - /* XXX: Any way to tell which of these occurred? */ - cbFlags = paOutputUnderflow | paInputOverflow; - stream->xrun = FALSE; - } - PaUtil_BeginBufferProcessing( &stream->bufferProcessor, &timeInfo, - cbFlags ); - - if( stream->num_incoming_connections > 0 ) - PaUtil_SetInputFrameCount( &stream->bufferProcessor, frames ); - if( stream->num_outgoing_connections > 0 ) - PaUtil_SetOutputFrameCount( &stream->bufferProcessor, frames ); - - for( chn = 0; chn < stream->num_incoming_connections; chn++ ) - { - jack_default_audio_sample_t *channel_buf = (jack_default_audio_sample_t*) - jack_port_get_buffer( stream->local_input_ports[chn], - frames ); - - PaUtil_SetNonInterleavedInputChannel( &stream->bufferProcessor, - chn, - channel_buf ); - } - - for( chn = 0; chn < stream->num_outgoing_connections; chn++ ) - { - jack_default_audio_sample_t *channel_buf = (jack_default_audio_sample_t*) - jack_port_get_buffer( stream->local_output_ports[chn], - frames ); - - PaUtil_SetNonInterleavedOutputChannel( &stream->bufferProcessor, - chn, - channel_buf ); - } - - framesProcessed = PaUtil_EndBufferProcessing( &stream->bufferProcessor, - &stream->callbackResult ); - /* We've specified a host buffer size mode where every frame should be consumed by the buffer processor */ - assert( framesProcessed == frames ); - - PaUtil_EndCpuLoadMeasurement( &stream->cpuLoadMeasurer, framesProcessed ); - -end: - return result; -} - -/* Update the JACK callback's stream processing queue. */ -static PaError UpdateQueue( PaJackHostApiRepresentation *hostApi ) -{ - PaError result = paNoError; - int queueModified = 0; - const double jackSr = jack_get_sample_rate( hostApi->jack_client ); - int err; - - if( (err = pthread_mutex_trylock( &hostApi->mtx )) != 0 ) - { - assert( err == EBUSY ); - return paNoError; - } - - if( hostApi->toAdd ) - { - if( hostApi->processQueue ) - { - PaJackStream *node = hostApi->processQueue; - /* Advance to end of queue */ - while( node->next ) - node = node->next; - - node->next = hostApi->toAdd; - } - else - { - /* The only queue entry. */ - hostApi->processQueue = (PaJackStream *)hostApi->toAdd; - } - - /* If necessary, update stream state */ - if( hostApi->toAdd->streamRepresentation.streamInfo.sampleRate != jackSr ) - UpdateSampleRate( hostApi->toAdd, jackSr ); - - hostApi->toAdd = NULL; - queueModified = 1; - } - if( hostApi->toRemove ) - { - int removed = 0; - PaJackStream *node = hostApi->processQueue, *prev = NULL; - assert( hostApi->processQueue ); - - while( node ) - { - if( node == hostApi->toRemove ) - { - if( prev ) - prev->next = node->next; - else - hostApi->processQueue = (PaJackStream *)node->next; - - removed = 1; - break; - } - - prev = node; - node = node->next; - } - UNLESS( removed, paInternalError ); - hostApi->toRemove = NULL; - PA_DEBUG(( "%s: Removed stream from processing queue\n", __FUNCTION__ )); - queueModified = 1; - } - - if( queueModified ) - { - /* Signal that we've done what was asked of us */ - ASSERT_CALL( pthread_cond_signal( &hostApi->cond ), 0 ); - } - -error: - ASSERT_CALL( pthread_mutex_unlock( &hostApi->mtx ), 0 ); - - return result; -} - -/* Audio processing callback invoked periodically from JACK. */ -static int JackCallback( jack_nframes_t frames, void *userData ) -{ - PaError result = paNoError; - PaJackHostApiRepresentation *hostApi = (PaJackHostApiRepresentation *)userData; - PaJackStream *stream = NULL; - int xrun = hostApi->xrun; - hostApi->xrun = 0; - - assert( hostApi ); - - ENSURE_PA( UpdateQueue( hostApi ) ); - - /* Process each stream */ - stream = hostApi->processQueue; - for( ; stream; stream = stream->next ) - { - if( xrun ) /* Don't override if already set */ - stream->xrun = 1; - - /* See if this stream is to be started */ - if( stream->doStart ) - { - /* If we can't obtain a lock, we'll try next time */ - int err = pthread_mutex_trylock( &stream->hostApi->mtx ); - if( !err ) - { - if( stream->doStart ) /* Could potentially change before obtaining the lock */ - { - stream->is_active = 1; - stream->doStart = 0; - PA_DEBUG(( "%s: Starting stream\n", __FUNCTION__ )); - ASSERT_CALL( pthread_cond_signal( &stream->hostApi->cond ), 0 ); - stream->callbackResult = paContinue; - stream->isSilenced = 0; - } - - ASSERT_CALL( pthread_mutex_unlock( &stream->hostApi->mtx ), 0 ); - } - else - assert( err == EBUSY ); - } - else if( stream->doStop || stream->doAbort ) /* Should we stop/abort stream? */ - { - if( stream->callbackResult == paContinue ) /* Ok, make it stop */ - { - PA_DEBUG(( "%s: Stopping stream\n", __FUNCTION__ )); - stream->callbackResult = stream->doStop ? paComplete : paAbort; - } - } - - if( stream->is_active ) - ENSURE_PA( RealProcess( stream, frames ) ); - /* If we have just entered inactive state, silence output */ - if( !stream->is_active && !stream->isSilenced ) - { - int i; - - /* Silence buffer after entering inactive state */ - PA_DEBUG(( "Silencing the output\n" )); - for( i = 0; i < stream->num_outgoing_connections; ++i ) - { - jack_default_audio_sample_t *buffer = jack_port_get_buffer( stream->local_output_ports[i], frames ); - memset( buffer, 0, sizeof (jack_default_audio_sample_t) * frames ); - } - - stream->isSilenced = 1; - } - - if( stream->doStop || stream->doAbort ) - { - /* See if RealProcess has acted on the request */ - if( !stream->is_active ) /* Ok, signal to the main thread that we've carried out the operation */ - { - /* If we can't obtain a lock, we'll try next time */ - int err = pthread_mutex_trylock( &stream->hostApi->mtx ); - if( !err ) - { - stream->doStop = stream->doAbort = 0; - ASSERT_CALL( pthread_cond_signal( &stream->hostApi->cond ), 0 ); - ASSERT_CALL( pthread_mutex_unlock( &stream->hostApi->mtx ), 0 ); - } - else - assert( err == EBUSY ); - } - } - } - - return 0; -error: - return -1; -} - -static PaError StartStream( PaStream *s ) -{ - PaError result = paNoError; - PaJackStream *stream = (PaJackStream*)s; - int i; - - /* Ready the processor */ - PaUtil_ResetBufferProcessor( &stream->bufferProcessor ); - - /* Connect the ports. Note that the ports may already have been connected by someone else in - * the meantime, in which case JACK returns EEXIST. */ - - if( stream->num_incoming_connections > 0 ) - { - for( i = 0; i < stream->num_incoming_connections; i++ ) - { - int r = jack_connect( stream->jack_client, jack_port_name( stream->remote_output_ports[i] ), - jack_port_name( stream->local_input_ports[i] ) ); - UNLESS( 0 == r || EEXIST == r, paUnanticipatedHostError ); - } - } - - if( stream->num_outgoing_connections > 0 ) - { - for( i = 0; i < stream->num_outgoing_connections; i++ ) - { - int r = jack_connect( stream->jack_client, jack_port_name( stream->local_output_ports[i] ), - jack_port_name( stream->remote_input_ports[i] ) ); - UNLESS( 0 == r || EEXIST == r, paUnanticipatedHostError ); - } - } - - stream->xrun = FALSE; - - /* Enable processing */ - - ASSERT_CALL( pthread_mutex_lock( &stream->hostApi->mtx ), 0 ); - stream->doStart = 1; - - /* Wait for stream to be started */ - result = WaitCondition( stream->hostApi ); - /* - do - { - err = pthread_cond_timedwait( &stream->hostApi->cond, &stream->hostApi->mtx, &ts ); - } while( !stream->is_active && !err ); - */ - if( result != paNoError ) /* Something went wrong, call off the stream start */ - { - stream->doStart = 0; - stream->is_active = 0; /* Cancel any processing */ - } - ASSERT_CALL( pthread_mutex_unlock( &stream->hostApi->mtx ), 0 ); - - ENSURE_PA( result ); - - stream->is_running = TRUE; - PA_DEBUG(( "%s: Stream started\n", __FUNCTION__ )); - -error: - return result; -} - -static PaError RealStop( PaJackStream *stream, int abort ) -{ - PaError result = paNoError; - int i; - - if( stream->isBlockingStream ) - BlockingWaitEmpty ( stream ); - - ASSERT_CALL( pthread_mutex_lock( &stream->hostApi->mtx ), 0 ); - if( abort ) - stream->doAbort = 1; - else - stream->doStop = 1; - - /* Wait for stream to be stopped */ - result = WaitCondition( stream->hostApi ); - ASSERT_CALL( pthread_mutex_unlock( &stream->hostApi->mtx ), 0 ); - ENSURE_PA( result ); - - UNLESS( !stream->is_active, paInternalError ); - - PA_DEBUG(( "%s: Stream stopped\n", __FUNCTION__ )); - -error: - stream->is_running = FALSE; - - /* Disconnect ports belonging to this stream */ - - if( !stream->hostApi->jackIsDown ) /* XXX: Well? */ - { - for( i = 0; i < stream->num_incoming_connections; i++ ) - { - if( jack_port_connected( stream->local_input_ports[i] ) ) - { - UNLESS( !jack_port_disconnect( stream->jack_client, stream->local_input_ports[i] ), - paUnanticipatedHostError ); - } - } - for( i = 0; i < stream->num_outgoing_connections; i++ ) - { - if( jack_port_connected( stream->local_output_ports[i] ) ) - { - UNLESS( !jack_port_disconnect( stream->jack_client, stream->local_output_ports[i] ), - paUnanticipatedHostError ); - } - } - } - - return result; -} - -static PaError StopStream( PaStream *s ) -{ - assert(s); - return RealStop( (PaJackStream *)s, 0 ); -} - -static PaError AbortStream( PaStream *s ) -{ - assert(s); - return RealStop( (PaJackStream *)s, 1 ); -} - -static PaError IsStreamStopped( PaStream *s ) -{ - PaJackStream *stream = (PaJackStream*)s; - return !stream->is_running; -} - - -static PaError IsStreamActive( PaStream *s ) -{ - PaJackStream *stream = (PaJackStream*)s; - return stream->is_active; -} - - -static PaTime GetStreamTime( PaStream *s ) -{ - PaJackStream *stream = (PaJackStream*)s; - - /* A: Is this relevant?? --> TODO: what if we're recording-only? */ - return (jack_frame_time( stream->jack_client ) - stream->t0) / (PaTime)jack_get_sample_rate( stream->jack_client ); -} - - -static double GetStreamCpuLoad( PaStream* s ) -{ - PaJackStream *stream = (PaJackStream*)s; - return PaUtil_GetCpuLoad( &stream->cpuLoadMeasurer ); -} - -PaError PaJack_SetClientName( const char* name ) -{ - if( strlen( name ) > jack_client_name_size() ) - { - /* OK, I don't know any better error code */ - return paInvalidFlag; - } - clientName_ = name; - return paNoError; -} - -PaError PaJack_GetClientName(const char** clientName) -{ - PaError result = paNoError; - PaJackHostApiRepresentation* jackHostApi = NULL; - PaJackHostApiRepresentation** ref = &jackHostApi; - ENSURE_PA( PaUtil_GetHostApiRepresentation( (PaUtilHostApiRepresentation**)ref, paJACK ) ); - *clientName = jack_get_client_name( jackHostApi->jack_client ); - -error: - return result; -} diff --git a/portaudio/src/hostapi/oss/low_latency_tip.txt b/portaudio/src/hostapi/oss/low_latency_tip.txt deleted file mode 100644 index 2d982b79ba..0000000000 Binary files a/portaudio/src/hostapi/oss/low_latency_tip.txt and /dev/null differ diff --git a/portaudio/src/hostapi/oss/pa_unix_oss.c b/portaudio/src/hostapi/oss/pa_unix_oss.c deleted file mode 100644 index 96e8a4ea6f..0000000000 --- a/portaudio/src/hostapi/oss/pa_unix_oss.c +++ /dev/null @@ -1,2045 +0,0 @@ -/* - * $Id: pa_unix_oss.c 1894 2013-06-08 19:30:41Z gineera $ - * PortAudio Portable Real-Time Audio Library - * Latest Version at: http://www.portaudio.com - * OSS implementation by: - * Douglas Repetto - * Phil Burk - * Dominic Mazzoni - * Arve Knudsen - * - * Based on the Open Source API proposed by Ross Bencina - * Copyright (c) 1999-2002 Ross Bencina, Phil Burk - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF - * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -/* - * The text above constitutes the entire PortAudio license; however, - * the PortAudio community also makes the following non-binding requests: - * - * Any person wishing to distribute modifications to the Software is - * requested to send the modifications to the original developer so that - * they can be incorporated into the canonical version. It is also - * requested that these non-binding requests be included along with the - * license above. - */ - -/** - @file - @ingroup hostapi_src -*/ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#ifdef HAVE_SYS_SOUNDCARD_H -# include -# ifdef __NetBSD__ -# define DEVICE_NAME_BASE "/dev/audio" -# else -# define DEVICE_NAME_BASE "/dev/dsp" -# endif -#elif defined(HAVE_LINUX_SOUNDCARD_H) -# include -# define DEVICE_NAME_BASE "/dev/dsp" -#elif defined(HAVE_MACHINE_SOUNDCARD_H) -# include /* JH20010905 */ -# define DEVICE_NAME_BASE "/dev/audio" -#else -# error No sound card header file -#endif - -#include "portaudio.h" -#include "pa_util.h" -#include "pa_allocation.h" -#include "pa_hostapi.h" -#include "pa_stream.h" -#include "pa_cpuload.h" -#include "pa_process.h" -#include "pa_unix_util.h" -#include "pa_debugprint.h" - -static int sysErr_; -static pthread_t mainThread_; - -/* Check return value of system call, and map it to PaError */ -#define ENSURE_(expr, code) \ - do { \ - if( UNLIKELY( (sysErr_ = (expr)) < 0 ) ) \ - { \ - /* PaUtil_SetLastHostErrorInfo should only be used in the main thread */ \ - if( (code) == paUnanticipatedHostError && pthread_self() == mainThread_ ) \ - { \ - PaUtil_SetLastHostErrorInfo( paOSS, sysErr_, strerror( errno ) ); \ - } \ - \ - PaUtil_DebugPrint(( "Expression '" #expr "' failed in '" __FILE__ "', line: " STRINGIZE( __LINE__ ) "\n" )); \ - result = (code); \ - goto error; \ - } \ - } while( 0 ); - -#ifndef AFMT_S16_NE -#define AFMT_S16_NE Get_AFMT_S16_NE() -/********************************************************************* - * Some versions of OSS do not define AFMT_S16_NE. So check CPU. - * PowerPC is Big Endian. X86 is Little Endian. - */ -static int Get_AFMT_S16_NE( void ) -{ - long testData = 1; - char *ptr = (char *) &testData; - int isLittle = ( *ptr == 1 ); /* Does address point to least significant byte? */ - return isLittle ? AFMT_S16_LE : AFMT_S16_BE; -} -#endif - -/* PaOSSHostApiRepresentation - host api datastructure specific to this implementation */ - -typedef struct -{ - PaUtilHostApiRepresentation inheritedHostApiRep; - PaUtilStreamInterface callbackStreamInterface; - PaUtilStreamInterface blockingStreamInterface; - - PaUtilAllocationGroup *allocations; - - PaHostApiIndex hostApiIndex; -} -PaOSSHostApiRepresentation; - -/** Per-direction structure for PaOssStream. - * - * Aspect StreamChannels: In case the user requests to open the same device for both capture and playback, - * but with different number of channels we will have to adapt between the number of user and host - * channels for at least one direction, since the configuration space is the same for both directions - * of an OSS device. - */ -typedef struct -{ - int fd; - const char *devName; - int userChannelCount, hostChannelCount; - int userInterleaved; - void *buffer; - PaSampleFormat userFormat, hostFormat; - double latency; - unsigned long hostFrames, numBufs; - void **userBuffers; /* For non-interleaved blocking */ -} PaOssStreamComponent; - -/** Implementation specific representation of a PaStream. - * - */ -typedef struct PaOssStream -{ - PaUtilStreamRepresentation streamRepresentation; - PaUtilCpuLoadMeasurer cpuLoadMeasurer; - PaUtilBufferProcessor bufferProcessor; - - PaUtilThreading threading; - - int sharedDevice; - unsigned long framesPerHostBuffer; - int triggered; /* Have the devices been triggered yet (first start) */ - - int isActive; - int isStopped; - - int lastPosPtr; - double lastStreamBytes; - - int framesProcessed; - - double sampleRate; - - int callbackMode; - volatile int callbackStop, callbackAbort; - - PaOssStreamComponent *capture, *playback; - unsigned long pollTimeout; - sem_t semaphore; -} -PaOssStream; - -typedef enum { - StreamMode_In, - StreamMode_Out -} StreamMode; - -/* prototypes for functions declared in this file */ - -static void Terminate( struct PaUtilHostApiRepresentation *hostApi ); -static PaError IsFormatSupported( struct PaUtilHostApiRepresentation *hostApi, - const PaStreamParameters *inputParameters, - const PaStreamParameters *outputParameters, - double sampleRate ); -static PaError OpenStream( struct PaUtilHostApiRepresentation *hostApi, - PaStream** s, - const PaStreamParameters *inputParameters, - const PaStreamParameters *outputParameters, - double sampleRate, - unsigned long framesPerBuffer, - PaStreamFlags streamFlags, - PaStreamCallback *streamCallback, - void *userData ); -static PaError CloseStream( PaStream* stream ); -static PaError StartStream( PaStream *stream ); -static PaError StopStream( PaStream *stream ); -static PaError AbortStream( PaStream *stream ); -static PaError IsStreamStopped( PaStream *s ); -static PaError IsStreamActive( PaStream *stream ); -static PaTime GetStreamTime( PaStream *stream ); -static double GetStreamCpuLoad( PaStream* stream ); -static PaError ReadStream( PaStream* stream, void *buffer, unsigned long frames ); -static PaError WriteStream( PaStream* stream, const void *buffer, unsigned long frames ); -static signed long GetStreamReadAvailable( PaStream* stream ); -static signed long GetStreamWriteAvailable( PaStream* stream ); -static PaError BuildDeviceList( PaOSSHostApiRepresentation *hostApi ); - - -/** Initialize the OSS API implementation. - * - * This function will initialize host API datastructures and query host devices for information. - * - * Aspect DeviceCapabilities: Enumeration of host API devices is initiated from here - * - * Aspect FreeResources: If an error is encountered under way we have to free each resource allocated in this function, - * this happens with the usual "error" label. - */ -PaError PaOSS_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiIndex hostApiIndex ) -{ - PaError result = paNoError; - PaOSSHostApiRepresentation *ossHostApi = NULL; - - PA_UNLESS( ossHostApi = (PaOSSHostApiRepresentation*)PaUtil_AllocateMemory( sizeof(PaOSSHostApiRepresentation) ), - paInsufficientMemory ); - PA_UNLESS( ossHostApi->allocations = PaUtil_CreateAllocationGroup(), paInsufficientMemory ); - ossHostApi->hostApiIndex = hostApiIndex; - - /* Initialize host API structure */ - *hostApi = &ossHostApi->inheritedHostApiRep; - (*hostApi)->info.structVersion = 1; - (*hostApi)->info.type = paOSS; - (*hostApi)->info.name = "OSS"; - (*hostApi)->Terminate = Terminate; - (*hostApi)->OpenStream = OpenStream; - (*hostApi)->IsFormatSupported = IsFormatSupported; - - PA_ENSURE( BuildDeviceList( ossHostApi ) ); - - PaUtil_InitializeStreamInterface( &ossHostApi->callbackStreamInterface, CloseStream, StartStream, - StopStream, AbortStream, IsStreamStopped, IsStreamActive, - GetStreamTime, GetStreamCpuLoad, - PaUtil_DummyRead, PaUtil_DummyWrite, - PaUtil_DummyGetReadAvailable, - PaUtil_DummyGetWriteAvailable ); - - PaUtil_InitializeStreamInterface( &ossHostApi->blockingStreamInterface, CloseStream, StartStream, - StopStream, AbortStream, IsStreamStopped, IsStreamActive, - GetStreamTime, PaUtil_DummyGetCpuLoad, - ReadStream, WriteStream, GetStreamReadAvailable, GetStreamWriteAvailable ); - - mainThread_ = pthread_self(); - - return result; - -error: - if( ossHostApi ) - { - if( ossHostApi->allocations ) - { - PaUtil_FreeAllAllocations( ossHostApi->allocations ); - PaUtil_DestroyAllocationGroup( ossHostApi->allocations ); - } - - PaUtil_FreeMemory( ossHostApi ); - } - return result; -} - -PaError PaUtil_InitializeDeviceInfo( PaDeviceInfo *deviceInfo, const char *name, PaHostApiIndex hostApiIndex, int maxInputChannels, - int maxOutputChannels, PaTime defaultLowInputLatency, PaTime defaultLowOutputLatency, PaTime defaultHighInputLatency, - PaTime defaultHighOutputLatency, double defaultSampleRate, PaUtilAllocationGroup *allocations ) -{ - PaError result = paNoError; - - deviceInfo->structVersion = 2; - if( allocations ) - { - size_t len = strlen( name ) + 1; - PA_UNLESS( deviceInfo->name = PaUtil_GroupAllocateMemory( allocations, len ), paInsufficientMemory ); - strncpy( (char *)deviceInfo->name, name, len ); - } - else - deviceInfo->name = name; - - deviceInfo->hostApi = hostApiIndex; - deviceInfo->maxInputChannels = maxInputChannels; - deviceInfo->maxOutputChannels = maxOutputChannels; - deviceInfo->defaultLowInputLatency = defaultLowInputLatency; - deviceInfo->defaultLowOutputLatency = defaultLowOutputLatency; - deviceInfo->defaultHighInputLatency = defaultHighInputLatency; - deviceInfo->defaultHighOutputLatency = defaultHighOutputLatency; - deviceInfo->defaultSampleRate = defaultSampleRate; - -error: - return result; -} - -static int CalcHigherLogTwo( int n ) -{ - int log2 = 0; - while( (1<= 2 ) - break; - } - else - { - /* ioctl() worked but bail out if it does not support numChannels. - * We don't want to leave gaps in the numChannels supported. - */ - if( (numChannels > 2) && (temp != numChannels) ) - break; - if( temp > maxNumChannels ) - maxNumChannels = temp; /* Save maximum. */ - } - } - /* A: We're able to open a device for capture if it's busy playing back and vice versa, - * but we can't configure anything */ - if( 0 == maxNumChannels && busy ) - { - result = paDeviceUnavailable; - goto error; - } - - /* The above negotiation may fail for an old driver so try this older technique. */ - if( maxNumChannels < 1 ) - { - int stereo = 1; - if( ioctl( devHandle, SNDCTL_DSP_STEREO, &stereo ) < 0 ) - { - maxNumChannels = 1; - } - else - { - maxNumChannels = (stereo) ? 2 : 1; - } - PA_DEBUG(( "%s: use SNDCTL_DSP_STEREO, maxNumChannels = %d\n", __FUNCTION__, maxNumChannels )); - } - - /* During channel negotiation, the last ioctl() may have failed. This can - * also cause sample rate negotiation to fail. Hence the following, to return - * to a supported number of channels. SG20011005 */ - { - /* use most reasonable default value */ - numChannels = PA_MIN( maxNumChannels, 2 ); - ENSURE_( ioctl( devHandle, SNDCTL_DSP_CHANNELS, &numChannels ), paUnanticipatedHostError ); - } - - /* Get supported sample rate closest to 44100 Hz */ - if( *defaultSampleRate < 0 ) - { - sr = 44100; - ENSURE_( ioctl( devHandle, SNDCTL_DSP_SPEED, &sr ), paUnanticipatedHostError ); - - *defaultSampleRate = sr; - } - - *maxChannelCount = maxNumChannels; - - /* Attempt to set low latency with 4 frags-per-buffer, 128 frames-per-frag (total buffer 512 frames) - * since the ioctl sets bytes, multiply by numChannels, and base on 2 bytes-per-sample, */ - fragFrames = 128; - frgmt = (4 << 16) + (CalcHigherLogTwo( fragFrames * numChannels * 2 ) & 0xffff); - ENSURE_( ioctl( devHandle, SNDCTL_DSP_SETFRAGMENT, &frgmt ), paUnanticipatedHostError ); - - /* Use the value set by the ioctl to give the latency achieved */ - fragFrames = pow( 2, frgmt & 0xffff ) / (numChannels * 2); - *defaultLowLatency = ((frgmt >> 16) - 1) * fragFrames / *defaultSampleRate; - - /* Cannot now try setting a high latency (device would need closing and opening again). Make - * high-latency 4 times the low unless the fragFrames are significantly more than requested 128 */ - temp = (fragFrames < 256) ? 4 : (fragFrames < 512) ? 2 : 1; - *defaultHighLatency = temp * *defaultLowLatency; - -error: - if( devHandle >= 0 ) - close( devHandle ); - - return result; -} - -/** Query OSS device. - * - * This is where PaDeviceInfo objects are constructed and filled in with relevant information. - * - * Aspect DeviceCapabilities: The inferred device capabilities are recorded in a PaDeviceInfo object that is constructed - * in place. - */ -static PaError QueryDevice( char *deviceName, PaOSSHostApiRepresentation *ossApi, PaDeviceInfo **deviceInfo ) -{ - PaError result = paNoError; - double sampleRate = -1.; - int maxInputChannels, maxOutputChannels; - PaTime defaultLowInputLatency, defaultLowOutputLatency, defaultHighInputLatency, defaultHighOutputLatency; - PaError tmpRes = paNoError; - int busy = 0; - *deviceInfo = NULL; - - /* douglas: - we have to do this querying in a slightly different order. apparently - some sound cards will give you different info based on their settins. - e.g. a card might give you stereo at 22kHz but only mono at 44kHz. - the correct order for OSS is: format, channels, sample rate - */ - - /* Aspect StreamChannels: The number of channels supported for a device may depend on the mode it is - * opened in, it may have more channels available for capture than playback and vice versa. Therefore - * we will open the device in both read- and write-only mode to determine the supported number. - */ - if( (tmpRes = QueryDirection( deviceName, StreamMode_In, &sampleRate, &maxInputChannels, &defaultLowInputLatency, - &defaultHighInputLatency )) != paNoError ) - { - if( tmpRes != paDeviceUnavailable ) - { - PA_DEBUG(( "%s: Querying device %s for capture failed!\n", __FUNCTION__, deviceName )); - /* PA_ENSURE( tmpRes ); */ - } - ++busy; - } - if( (tmpRes = QueryDirection( deviceName, StreamMode_Out, &sampleRate, &maxOutputChannels, &defaultLowOutputLatency, - &defaultHighOutputLatency )) != paNoError ) - { - if( tmpRes != paDeviceUnavailable ) - { - PA_DEBUG(( "%s: Querying device %s for playback failed!\n", __FUNCTION__, deviceName )); - /* PA_ENSURE( tmpRes ); */ - } - ++busy; - } - assert( 0 <= busy && busy <= 2 ); - if( 2 == busy ) /* Both directions are unavailable to us */ - { - result = paDeviceUnavailable; - goto error; - } - - PA_UNLESS( *deviceInfo = PaUtil_GroupAllocateMemory( ossApi->allocations, sizeof (PaDeviceInfo) ), paInsufficientMemory ); - PA_ENSURE( PaUtil_InitializeDeviceInfo( *deviceInfo, deviceName, ossApi->hostApiIndex, maxInputChannels, maxOutputChannels, - defaultLowInputLatency, defaultLowOutputLatency, defaultHighInputLatency, defaultHighOutputLatency, sampleRate, - ossApi->allocations ) ); - -error: - return result; -} - -/** Query host devices. - * - * Loop over host devices and query their capabilitiesu - * - * Aspect DeviceCapabilities: This function calls QueryDevice on each device entry and receives a filled in PaDeviceInfo object - * per device, these are placed in the host api representation's deviceInfos array. - */ -static PaError BuildDeviceList( PaOSSHostApiRepresentation *ossApi ) -{ - PaError result = paNoError; - PaUtilHostApiRepresentation *commonApi = &ossApi->inheritedHostApiRep; - int i; - int numDevices = 0, maxDeviceInfos = 1; - PaDeviceInfo **deviceInfos = NULL; - - /* These two will be set to the first working input and output device, respectively */ - commonApi->info.defaultInputDevice = paNoDevice; - commonApi->info.defaultOutputDevice = paNoDevice; - - /* Find devices by calling QueryDevice on each - * potential device names. When we find a valid one, - * add it to a linked list. - * A: Set an arbitrary of 100 devices, should probably be a smarter way. */ - - for( i = 0; i < 100; i++ ) - { - char deviceName[32]; - PaDeviceInfo *deviceInfo; - int testResult; - - if( i == 0 ) - snprintf(deviceName, sizeof (deviceName), "%s", DEVICE_NAME_BASE); - else - snprintf(deviceName, sizeof (deviceName), "%s%d", DEVICE_NAME_BASE, i); - - /* PA_DEBUG(("%s: trying device %s\n", __FUNCTION__, deviceName )); */ - if( (testResult = QueryDevice( deviceName, ossApi, &deviceInfo )) != paNoError ) - { - if( testResult != paDeviceUnavailable ) - PA_ENSURE( testResult ); - - continue; - } - - ++numDevices; - if( !deviceInfos || numDevices > maxDeviceInfos ) - { - maxDeviceInfos *= 2; - PA_UNLESS( deviceInfos = (PaDeviceInfo **) realloc( deviceInfos, maxDeviceInfos * sizeof (PaDeviceInfo *) ), - paInsufficientMemory ); - } - { - int devIdx = numDevices - 1; - deviceInfos[devIdx] = deviceInfo; - - if( commonApi->info.defaultInputDevice == paNoDevice && deviceInfo->maxInputChannels > 0 ) - commonApi->info.defaultInputDevice = devIdx; - if( commonApi->info.defaultOutputDevice == paNoDevice && deviceInfo->maxOutputChannels > 0 ) - commonApi->info.defaultOutputDevice = devIdx; - } - } - - /* Make an array of PaDeviceInfo pointers out of the linked list */ - - PA_DEBUG(("PaOSS %s: Total number of devices found: %d\n", __FUNCTION__, numDevices)); - - commonApi->deviceInfos = (PaDeviceInfo**)PaUtil_GroupAllocateMemory( - ossApi->allocations, sizeof(PaDeviceInfo*) * numDevices ); - memcpy( commonApi->deviceInfos, deviceInfos, numDevices * sizeof (PaDeviceInfo *) ); - - commonApi->info.deviceCount = numDevices; - -error: - free( deviceInfos ); - - return result; -} - -static void Terminate( struct PaUtilHostApiRepresentation *hostApi ) -{ - PaOSSHostApiRepresentation *ossHostApi = (PaOSSHostApiRepresentation*)hostApi; - - if( ossHostApi->allocations ) - { - PaUtil_FreeAllAllocations( ossHostApi->allocations ); - PaUtil_DestroyAllocationGroup( ossHostApi->allocations ); - } - - PaUtil_FreeMemory( ossHostApi ); -} - -static PaError IsFormatSupported( struct PaUtilHostApiRepresentation *hostApi, - const PaStreamParameters *inputParameters, - const PaStreamParameters *outputParameters, - double sampleRate ) -{ - PaError result = paNoError; - PaDeviceIndex device; - PaDeviceInfo *deviceInfo; - char *deviceName; - int inputChannelCount, outputChannelCount; - int tempDevHandle = -1; - int flags; - PaSampleFormat inputSampleFormat, outputSampleFormat; - - if( inputParameters ) - { - inputChannelCount = inputParameters->channelCount; - inputSampleFormat = inputParameters->sampleFormat; - - /* unless alternate device specification is supported, reject the use of - paUseHostApiSpecificDeviceSpecification */ - - if( inputParameters->device == paUseHostApiSpecificDeviceSpecification ) - return paInvalidDevice; - - /* check that input device can support inputChannelCount */ - if( inputChannelCount > hostApi->deviceInfos[ inputParameters->device ]->maxInputChannels ) - return paInvalidChannelCount; - - /* validate inputStreamInfo */ - if( inputParameters->hostApiSpecificStreamInfo ) - return paIncompatibleHostApiSpecificStreamInfo; /* this implementation doesn't use custom stream info */ - } - else - { - inputChannelCount = 0; - } - - if( outputParameters ) - { - outputChannelCount = outputParameters->channelCount; - outputSampleFormat = outputParameters->sampleFormat; - - /* unless alternate device specification is supported, reject the use of - paUseHostApiSpecificDeviceSpecification */ - - if( outputParameters->device == paUseHostApiSpecificDeviceSpecification ) - return paInvalidDevice; - - /* check that output device can support inputChannelCount */ - if( outputChannelCount > hostApi->deviceInfos[ outputParameters->device ]->maxOutputChannels ) - return paInvalidChannelCount; - - /* validate outputStreamInfo */ - if( outputParameters->hostApiSpecificStreamInfo ) - return paIncompatibleHostApiSpecificStreamInfo; /* this implementation doesn't use custom stream info */ - } - else - { - outputChannelCount = 0; - } - - if (inputChannelCount == 0 && outputChannelCount == 0) - return paInvalidChannelCount; - - /* if full duplex, make sure that they're the same device */ - - if (inputChannelCount > 0 && outputChannelCount > 0 && - inputParameters->device != outputParameters->device) - return paInvalidDevice; - - /* if full duplex, also make sure that they're the same number of channels */ - - if (inputChannelCount > 0 && outputChannelCount > 0 && - inputChannelCount != outputChannelCount) - return paInvalidChannelCount; - - /* open the device so we can do more tests */ - - if( inputChannelCount > 0 ) - { - result = PaUtil_DeviceIndexToHostApiDeviceIndex(&device, inputParameters->device, hostApi); - if (result != paNoError) - return result; - } - else - { - result = PaUtil_DeviceIndexToHostApiDeviceIndex(&device, outputParameters->device, hostApi); - if (result != paNoError) - return result; - } - - deviceInfo = hostApi->deviceInfos[device]; - deviceName = (char *)deviceInfo->name; - - flags = O_NONBLOCK; - if (inputChannelCount > 0 && outputChannelCount > 0) - flags |= O_RDWR; - else if (inputChannelCount > 0) - flags |= O_RDONLY; - else - flags |= O_WRONLY; - - ENSURE_( tempDevHandle = open( deviceInfo->name, flags ), paDeviceUnavailable ); - - /* PaOssStream_Configure will do the rest of the checking for us */ - /* PA_ENSURE( PaOssStream_Configure( tempDevHandle, deviceName, outputChannelCount, &sampleRate ) ); */ - - /* everything succeeded! */ - - error: - if( tempDevHandle >= 0 ) - close( tempDevHandle ); - - return result; -} - -/** Validate stream parameters. - * - * Aspect StreamChannels: We verify that the number of channels is within the allowed range for the device - */ -static PaError ValidateParameters( const PaStreamParameters *parameters, const PaDeviceInfo *deviceInfo, StreamMode mode ) -{ - int maxChans; - - assert( parameters ); - - if( parameters->device == paUseHostApiSpecificDeviceSpecification ) - { - return paInvalidDevice; - } - - maxChans = (mode == StreamMode_In ? deviceInfo->maxInputChannels : - deviceInfo->maxOutputChannels); - if( parameters->channelCount > maxChans ) - { - return paInvalidChannelCount; - } - - return paNoError; -} - -static PaError PaOssStreamComponent_Initialize( PaOssStreamComponent *component, const PaStreamParameters *parameters, - int callbackMode, int fd, const char *deviceName ) -{ - PaError result = paNoError; - assert( component ); - - memset( component, 0, sizeof (PaOssStreamComponent) ); - - component->fd = fd; - component->devName = deviceName; - component->userChannelCount = parameters->channelCount; - component->userFormat = parameters->sampleFormat; - component->latency = parameters->suggestedLatency; - component->userInterleaved = !(parameters->sampleFormat & paNonInterleaved); - - if( !callbackMode && !component->userInterleaved ) - { - /* Pre-allocate non-interleaved user provided buffers */ - PA_UNLESS( component->userBuffers = PaUtil_AllocateMemory( sizeof (void *) * component->userChannelCount ), - paInsufficientMemory ); - } - -error: - return result; -} - -static void PaOssStreamComponent_Terminate( PaOssStreamComponent *component ) -{ - assert( component ); - - if( component->fd >= 0 ) - close( component->fd ); - if( component->buffer ) - PaUtil_FreeMemory( component->buffer ); - - if( component->userBuffers ) - PaUtil_FreeMemory( component->userBuffers ); - - PaUtil_FreeMemory( component ); -} - -static PaError ModifyBlocking( int fd, int blocking ) -{ - PaError result = paNoError; - int fflags; - - ENSURE_( fflags = fcntl( fd, F_GETFL ), paUnanticipatedHostError ); - - if( blocking ) - fflags &= ~O_NONBLOCK; - else - fflags |= O_NONBLOCK; - - ENSURE_( fcntl( fd, F_SETFL, fflags ), paUnanticipatedHostError ); - -error: - return result; -} - -/** Open input and output devices. - * - * @param idev: Returned input device file descriptor. - * @param odev: Returned output device file descriptor. - */ -static PaError OpenDevices( const char *idevName, const char *odevName, int *idev, int *odev ) -{ - PaError result = paNoError; - int flags = O_NONBLOCK, duplex = 0; - *idev = *odev = -1; - - if( idevName && odevName ) - { - duplex = 1; - flags |= O_RDWR; - } - else if( idevName ) - flags |= O_RDONLY; - else - flags |= O_WRONLY; - - /* open first in nonblocking mode, in case it's busy... - * A: then unset the non-blocking attribute */ - assert( flags & O_NONBLOCK ); - if( idevName ) - { - ENSURE_( *idev = open( idevName, flags ), paDeviceUnavailable ); - PA_ENSURE( ModifyBlocking( *idev, 1 ) ); /* Blocking */ - } - if( odevName ) - { - if( !idevName ) - { - ENSURE_( *odev = open( odevName, flags ), paDeviceUnavailable ); - PA_ENSURE( ModifyBlocking( *odev, 1 ) ); /* Blocking */ - } - else - { - ENSURE_( *odev = dup( *idev ), paUnanticipatedHostError ); - } - } - -error: - return result; -} - -static PaError PaOssStream_Initialize( PaOssStream *stream, const PaStreamParameters *inputParameters, const PaStreamParameters *outputParameters, - PaStreamCallback callback, void *userData, PaStreamFlags streamFlags, - PaOSSHostApiRepresentation *ossApi ) -{ - PaError result = paNoError; - int idev, odev; - PaUtilHostApiRepresentation *hostApi = &ossApi->inheritedHostApiRep; - const char *idevName = NULL, *odevName = NULL; - - assert( stream ); - - memset( stream, 0, sizeof (PaOssStream) ); - stream->isStopped = 1; - - PA_ENSURE( PaUtil_InitializeThreading( &stream->threading ) ); - - if( inputParameters && outputParameters ) - { - if( inputParameters->device == outputParameters->device ) - stream->sharedDevice = 1; - } - - if( inputParameters ) - idevName = hostApi->deviceInfos[inputParameters->device]->name; - if( outputParameters ) - odevName = hostApi->deviceInfos[outputParameters->device]->name; - PA_ENSURE( OpenDevices( idevName, odevName, &idev, &odev ) ); - if( inputParameters ) - { - PA_UNLESS( stream->capture = PaUtil_AllocateMemory( sizeof (PaOssStreamComponent) ), paInsufficientMemory ); - PA_ENSURE( PaOssStreamComponent_Initialize( stream->capture, inputParameters, callback != NULL, idev, idevName ) ); - } - if( outputParameters ) - { - PA_UNLESS( stream->playback = PaUtil_AllocateMemory( sizeof (PaOssStreamComponent) ), paInsufficientMemory ); - PA_ENSURE( PaOssStreamComponent_Initialize( stream->playback, outputParameters, callback != NULL, odev, odevName ) ); - } - - if( callback != NULL ) - { - PaUtil_InitializeStreamRepresentation( &stream->streamRepresentation, - &ossApi->callbackStreamInterface, callback, userData ); - stream->callbackMode = 1; - } - else - { - PaUtil_InitializeStreamRepresentation( &stream->streamRepresentation, - &ossApi->blockingStreamInterface, callback, userData ); - } - - ENSURE_( sem_init( &stream->semaphore, 0, 0 ), paInternalError ); - -error: - return result; -} - -static void PaOssStream_Terminate( PaOssStream *stream ) -{ - assert( stream ); - - PaUtil_TerminateStreamRepresentation( &stream->streamRepresentation ); - PaUtil_TerminateThreading( &stream->threading ); - - if( stream->capture ) - PaOssStreamComponent_Terminate( stream->capture ); - if( stream->playback ) - PaOssStreamComponent_Terminate( stream->playback ); - - sem_destroy( &stream->semaphore ); - - PaUtil_FreeMemory( stream ); -} - -/** Translate from PA format to OSS native. - * - */ -static PaError Pa2OssFormat( PaSampleFormat paFormat, int *ossFormat ) -{ - switch( paFormat ) - { - case paUInt8: - *ossFormat = AFMT_U8; - break; - case paInt8: - *ossFormat = AFMT_S8; - break; - case paInt16: - *ossFormat = AFMT_S16_NE; - break; - default: - return paInternalError; /* This shouldn't happen */ - } - - return paNoError; -} - -/** Return the PA-compatible formats that this device can support. - * - */ -static PaError GetAvailableFormats( PaOssStreamComponent *component, PaSampleFormat *availableFormats ) -{ - PaError result = paNoError; - int mask = 0; - PaSampleFormat frmts = 0; - - ENSURE_( ioctl( component->fd, SNDCTL_DSP_GETFMTS, &mask ), paUnanticipatedHostError ); - if( mask & AFMT_U8 ) - frmts |= paUInt8; - if( mask & AFMT_S8 ) - frmts |= paInt8; - if( mask & AFMT_S16_NE ) - frmts |= paInt16; - else - result = paSampleFormatNotSupported; - - *availableFormats = frmts; - -error: - return result; -} - -static unsigned int PaOssStreamComponent_FrameSize( PaOssStreamComponent *component ) -{ - return Pa_GetSampleSize( component->hostFormat ) * component->hostChannelCount; -} - -/** Buffer size in bytes. - * - */ -static unsigned long PaOssStreamComponent_BufferSize( PaOssStreamComponent *component ) -{ - return PaOssStreamComponent_FrameSize( component ) * component->hostFrames * component->numBufs; -} - -/** Configure stream component device parameters. - */ -static PaError PaOssStreamComponent_Configure( PaOssStreamComponent *component, double sampleRate, unsigned long - framesPerBuffer, StreamMode streamMode, PaOssStreamComponent *master ) -{ - PaError result = paNoError; - int temp, nativeFormat; - int sr = (int)sampleRate; - PaSampleFormat availableFormats = 0, hostFormat = 0; - int chans = component->userChannelCount; - int frgmt; - int numBufs; - int bytesPerBuf; - unsigned long bufSz; - unsigned long fragSz; - audio_buf_info bufInfo; - - /* We may have a situation where only one component (the master) is configured, if both point to the same device. - * In that case, the second component will copy settings from the other */ - if( !master ) - { - /* Aspect BufferSettings: If framesPerBuffer is unspecified we have to infer a suitable fragment size. - * The hardware need not respect the requested fragment size, so we may have to adapt. - */ - if( framesPerBuffer == paFramesPerBufferUnspecified ) - { - /* Aim for 4 fragments in the complete buffer; the latency comes from 3 of these */ - fragSz = (unsigned long)(component->latency * sampleRate / 3); - bufSz = fragSz * 4; - } - else - { - fragSz = framesPerBuffer; - bufSz = (unsigned long)(component->latency * sampleRate) + fragSz; /* Latency + 1 buffer */ - } - - PA_ENSURE( GetAvailableFormats( component, &availableFormats ) ); - hostFormat = PaUtil_SelectClosestAvailableFormat( availableFormats, component->userFormat ); - - /* OSS demands at least 2 buffers, and 16 bytes per buffer */ - numBufs = (int)PA_MAX( bufSz / fragSz, 2 ); - bytesPerBuf = PA_MAX( fragSz * Pa_GetSampleSize( hostFormat ) * chans, 16 ); - - /* The fragment parameters are encoded like this: - * Most significant byte: number of fragments - * Least significant byte: exponent of fragment size (i.e., for 256, 8) - */ - frgmt = (numBufs << 16) + (CalcHigherLogTwo( bytesPerBuf ) & 0xffff); - ENSURE_( ioctl( component->fd, SNDCTL_DSP_SETFRAGMENT, &frgmt ), paUnanticipatedHostError ); - - /* A: according to the OSS programmer's guide parameters should be set in this order: - * format, channels, rate */ - - /* This format should be deemed good before we get this far */ - PA_ENSURE( Pa2OssFormat( hostFormat, &temp ) ); - nativeFormat = temp; - ENSURE_( ioctl( component->fd, SNDCTL_DSP_SETFMT, &temp ), paUnanticipatedHostError ); - PA_UNLESS( temp == nativeFormat, paInternalError ); - - /* try to set the number of channels */ - ENSURE_( ioctl( component->fd, SNDCTL_DSP_CHANNELS, &chans ), paSampleFormatNotSupported ); /* XXX: Should be paInvalidChannelCount? */ - /* It's possible that the minimum number of host channels is greater than what the user requested */ - PA_UNLESS( chans >= component->userChannelCount, paInvalidChannelCount ); - - /* try to set the sample rate */ - ENSURE_( ioctl( component->fd, SNDCTL_DSP_SPEED, &sr ), paInvalidSampleRate ); - - /* reject if there's no sample rate within 1% of the one requested */ - if( (fabs( sampleRate - sr ) / sampleRate) > 0.01 ) - { - PA_DEBUG(("%s: Wanted %f, closest sample rate was %d\n", __FUNCTION__, sampleRate, sr )); - PA_ENSURE( paInvalidSampleRate ); - } - - ENSURE_( ioctl( component->fd, streamMode == StreamMode_In ? SNDCTL_DSP_GETISPACE : SNDCTL_DSP_GETOSPACE, &bufInfo ), - paUnanticipatedHostError ); - component->numBufs = bufInfo.fragstotal; - - /* This needs to be the last ioctl call before the first read/write, according to the OSS programmer's guide */ - ENSURE_( ioctl( component->fd, SNDCTL_DSP_GETBLKSIZE, &bytesPerBuf ), paUnanticipatedHostError ); - - component->hostFrames = bytesPerBuf / Pa_GetSampleSize( hostFormat ) / chans; - component->hostChannelCount = chans; - component->hostFormat = hostFormat; - } - else - { - component->hostFormat = master->hostFormat; - component->hostFrames = master->hostFrames; - component->hostChannelCount = master->hostChannelCount; - component->numBufs = master->numBufs; - } - - PA_UNLESS( component->buffer = PaUtil_AllocateMemory( PaOssStreamComponent_BufferSize( component ) ), - paInsufficientMemory ); - -error: - return result; -} - -static PaError PaOssStreamComponent_Read( PaOssStreamComponent *component, unsigned long *frames ) -{ - PaError result = paNoError; - size_t len = *frames * PaOssStreamComponent_FrameSize( component ); - ssize_t bytesRead; - - ENSURE_( bytesRead = read( component->fd, component->buffer, len ), paUnanticipatedHostError ); - *frames = bytesRead / PaOssStreamComponent_FrameSize( component ); - /* TODO: Handle condition where number of frames read doesn't equal number of frames requested */ - -error: - return result; -} - -static PaError PaOssStreamComponent_Write( PaOssStreamComponent *component, unsigned long *frames ) -{ - PaError result = paNoError; - size_t len = *frames * PaOssStreamComponent_FrameSize( component ); - ssize_t bytesWritten; - - ENSURE_( bytesWritten = write( component->fd, component->buffer, len ), paUnanticipatedHostError ); - *frames = bytesWritten / PaOssStreamComponent_FrameSize( component ); - /* TODO: Handle condition where number of frames written doesn't equal number of frames requested */ - -error: - return result; -} - -/** Configure the stream according to input/output parameters. - * - * Aspect StreamChannels: The minimum number of channels supported by the device may exceed that requested by - * the user, if so we'll record the actual number of host channels and adapt later. - */ -static PaError PaOssStream_Configure( PaOssStream *stream, double sampleRate, unsigned long framesPerBuffer, - double *inputLatency, double *outputLatency ) -{ - PaError result = paNoError; - int duplex = stream->capture && stream->playback; - unsigned long framesPerHostBuffer = 0; - - /* We should request full duplex first thing after opening the device */ - if( duplex && stream->sharedDevice ) - ENSURE_( ioctl( stream->capture->fd, SNDCTL_DSP_SETDUPLEX, 0 ), paUnanticipatedHostError ); - - if( stream->capture ) - { - PaOssStreamComponent *component = stream->capture; - PA_ENSURE( PaOssStreamComponent_Configure( component, sampleRate, framesPerBuffer, StreamMode_In, - NULL ) ); - - assert( component->hostChannelCount > 0 ); - assert( component->hostFrames > 0 ); - - *inputLatency = (component->hostFrames * (component->numBufs - 1)) / sampleRate; - } - if( stream->playback ) - { - PaOssStreamComponent *component = stream->playback, *master = stream->sharedDevice ? stream->capture : NULL; - PA_ENSURE( PaOssStreamComponent_Configure( component, sampleRate, framesPerBuffer, StreamMode_Out, - master ) ); - - assert( component->hostChannelCount > 0 ); - assert( component->hostFrames > 0 ); - - *outputLatency = (component->hostFrames * (component->numBufs - 1)) / sampleRate; - } - - if( duplex ) - framesPerHostBuffer = PA_MIN( stream->capture->hostFrames, stream->playback->hostFrames ); - else if( stream->capture ) - framesPerHostBuffer = stream->capture->hostFrames; - else if( stream->playback ) - framesPerHostBuffer = stream->playback->hostFrames; - - stream->framesPerHostBuffer = framesPerHostBuffer; - stream->pollTimeout = (int) ceil( 1e6 * framesPerHostBuffer / sampleRate ); /* Period in usecs, rounded up */ - - stream->sampleRate = stream->streamRepresentation.streamInfo.sampleRate = sampleRate; - -error: - return result; -} - -/* see pa_hostapi.h for a list of validity guarantees made about OpenStream parameters */ - -/** Open a PA OSS stream. - * - * Aspect StreamChannels: The number of channels is specified per direction (in/out), and can differ between the - * two. However, OSS doesn't support separate configuration spaces for capture and playback so if both - * directions are the same device we will demand the same number of channels. The number of channels can range - * from 1 to the maximum supported by the device. - * - * Aspect BufferSettings: If framesPerBuffer != paFramesPerBufferUnspecified the number of frames per callback - * must reflect this, in addition the host latency per device should approximate the corresponding - * suggestedLatency. Based on these constraints we need to determine a number of frames per host buffer that - * both capture and playback can agree on (they can be different devices), the buffer processor can adapt - * between host and user buffer size, but the ratio should preferably be integral. - */ -static PaError OpenStream( struct PaUtilHostApiRepresentation *hostApi, - PaStream** s, - const PaStreamParameters *inputParameters, - const PaStreamParameters *outputParameters, - double sampleRate, - unsigned long framesPerBuffer, - PaStreamFlags streamFlags, - PaStreamCallback *streamCallback, - void *userData ) -{ - PaError result = paNoError; - PaOSSHostApiRepresentation *ossHostApi = (PaOSSHostApiRepresentation*)hostApi; - PaOssStream *stream = NULL; - int inputChannelCount = 0, outputChannelCount = 0; - PaSampleFormat inputSampleFormat = 0, outputSampleFormat = 0, inputHostFormat = 0, outputHostFormat = 0; - const PaDeviceInfo *inputDeviceInfo = 0, *outputDeviceInfo = 0; - int bpInitialized = 0; - double inLatency = 0., outLatency = 0.; - int i = 0; - - /* validate platform specific flags */ - if( (streamFlags & paPlatformSpecificFlags) != 0 ) - return paInvalidFlag; /* unexpected platform specific flag */ - - if( inputParameters ) - { - /* unless alternate device specification is supported, reject the use of - paUseHostApiSpecificDeviceSpecification */ - inputDeviceInfo = hostApi->deviceInfos[inputParameters->device]; - PA_ENSURE( ValidateParameters( inputParameters, inputDeviceInfo, StreamMode_In ) ); - - inputChannelCount = inputParameters->channelCount; - inputSampleFormat = inputParameters->sampleFormat; - } - if( outputParameters ) - { - outputDeviceInfo = hostApi->deviceInfos[outputParameters->device]; - PA_ENSURE( ValidateParameters( outputParameters, outputDeviceInfo, StreamMode_Out ) ); - - outputChannelCount = outputParameters->channelCount; - outputSampleFormat = outputParameters->sampleFormat; - } - - /* Aspect StreamChannels: We currently demand that number of input and output channels are the same, if the same - * device is opened for both directions - */ - if( inputChannelCount > 0 && outputChannelCount > 0 ) - { - if( inputParameters->device == outputParameters->device ) - { - if( inputParameters->channelCount != outputParameters->channelCount ) - return paInvalidChannelCount; - } - } - - /* Round framesPerBuffer to the next power-of-two to make OSS happy. */ - if( framesPerBuffer != paFramesPerBufferUnspecified ) - { - framesPerBuffer &= INT_MAX; - for (i = 1; framesPerBuffer > i; i <<= 1) ; - framesPerBuffer = i; - } - - /* allocate and do basic initialization of the stream structure */ - PA_UNLESS( stream = (PaOssStream*)PaUtil_AllocateMemory( sizeof(PaOssStream) ), paInsufficientMemory ); - PA_ENSURE( PaOssStream_Initialize( stream, inputParameters, outputParameters, streamCallback, userData, streamFlags, ossHostApi ) ); - - PA_ENSURE( PaOssStream_Configure( stream, sampleRate, framesPerBuffer, &inLatency, &outLatency ) ); - - PaUtil_InitializeCpuLoadMeasurer( &stream->cpuLoadMeasurer, sampleRate ); - - if( inputParameters ) - { - inputHostFormat = stream->capture->hostFormat; - stream->streamRepresentation.streamInfo.inputLatency = inLatency + - PaUtil_GetBufferProcessorInputLatencyFrames( &stream->bufferProcessor ) / sampleRate; - } - if( outputParameters ) - { - outputHostFormat = stream->playback->hostFormat; - stream->streamRepresentation.streamInfo.outputLatency = outLatency + - PaUtil_GetBufferProcessorOutputLatencyFrames( &stream->bufferProcessor ) / sampleRate; - } - - /* Initialize buffer processor with fixed host buffer size. - * Aspect StreamSampleFormat: Here we commit the user and host sample formats, PA infrastructure will - * convert between the two. - */ - PA_ENSURE( PaUtil_InitializeBufferProcessor( &stream->bufferProcessor, - inputChannelCount, inputSampleFormat, inputHostFormat, outputChannelCount, outputSampleFormat, - outputHostFormat, sampleRate, streamFlags, framesPerBuffer, stream->framesPerHostBuffer, - paUtilFixedHostBufferSize, streamCallback, userData ) ); - bpInitialized = 1; - - *s = (PaStream*)stream; - - return result; - -error: - if( bpInitialized ) - PaUtil_TerminateBufferProcessor( &stream->bufferProcessor ); - if( stream ) - PaOssStream_Terminate( stream ); - - return result; -} - -/*! Poll on I/O filedescriptors. - - Poll till we've determined there's data for read or write. In the full-duplex case, - we don't want to hang around forever waiting for either input or output frames, so - whenever we have a timed out filedescriptor we check if we're nearing under/overrun - for the other direction (critical limit set at one buffer). If so, we exit the waiting - state, and go on with what we got. We align the number of frames on a host buffer - boundary because it is possible that the buffer size differs for the two directions and - the host buffer size is a compromise between the two. - */ -static PaError PaOssStream_WaitForFrames( PaOssStream *stream, unsigned long *frames ) -{ - PaError result = paNoError; - int pollPlayback = 0, pollCapture = 0; - int captureAvail = INT_MAX, playbackAvail = INT_MAX, commonAvail; - audio_buf_info bufInfo; - /* int ofs = 0, nfds = stream->nfds; */ - fd_set readFds, writeFds; - int nfds = 0; - struct timeval selectTimeval = {0, 0}; - unsigned long timeout = stream->pollTimeout; /* In usecs */ - int captureFd = -1, playbackFd = -1; - - assert( stream ); - assert( frames ); - - if( stream->capture ) - { - pollCapture = 1; - captureFd = stream->capture->fd; - /* stream->capture->pfd->events = POLLIN; */ - } - if( stream->playback ) - { - pollPlayback = 1; - playbackFd = stream->playback->fd; - /* stream->playback->pfd->events = POLLOUT; */ - } - - FD_ZERO( &readFds ); - FD_ZERO( &writeFds ); - - while( pollPlayback || pollCapture ) - { -#ifdef PTHREAD_CANCELED - pthread_testcancel(); -#else - /* avoid indefinite waiting on thread not supporting cancelation */ - if( stream->callbackStop || stream->callbackAbort ) - { - PA_DEBUG(( "Cancelling PaOssStream_WaitForFrames\n" )); - (*frames) = 0; - return paNoError; - } -#endif - - /* select may modify the timeout parameter */ - selectTimeval.tv_usec = timeout; - nfds = 0; - - if( pollCapture ) - { - FD_SET( captureFd, &readFds ); - nfds = captureFd + 1; - } - if( pollPlayback ) - { - FD_SET( playbackFd, &writeFds ); - nfds = PA_MAX( nfds, playbackFd + 1 ); - } - ENSURE_( select( nfds, &readFds, &writeFds, NULL, &selectTimeval ), paUnanticipatedHostError ); - /* - if( poll( stream->pfds + ofs, nfds, stream->pollTimeout ) < 0 ) - { - - ENSURE_( -1, paUnanticipatedHostError ); - } - */ -#ifdef PTHREAD_CANCELED - pthread_testcancel(); -#else - /* avoid indefinite waiting on thread not supporting cancelation */ - if( stream->callbackStop || stream->callbackAbort ) - { - PA_DEBUG(( "Cancelling PaOssStream_WaitForFrames\n" )); - (*frames) = 0; - return paNoError; - } -#endif - if( pollCapture ) - { - if( FD_ISSET( captureFd, &readFds ) ) - { - FD_CLR( captureFd, &readFds ); - pollCapture = 0; - } - /* - if( stream->capture->pfd->revents & POLLIN ) - { - --nfds; - ++ofs; - pollCapture = 0; - } - */ - else if( stream->playback ) /* Timed out, go on with playback? */ - { - /*PA_DEBUG(( "%s: Trying to poll again for capture frames, pollTimeout: %d\n", - __FUNCTION__, stream->pollTimeout ));*/ - } - } - if( pollPlayback ) - { - if( FD_ISSET( playbackFd, &writeFds ) ) - { - FD_CLR( playbackFd, &writeFds ); - pollPlayback = 0; - } - /* - if( stream->playback->pfd->revents & POLLOUT ) - { - --nfds; - pollPlayback = 0; - } - */ - else if( stream->capture ) /* Timed out, go on with capture? */ - { - /*PA_DEBUG(( "%s: Trying to poll again for playback frames, pollTimeout: %d\n\n", - __FUNCTION__, stream->pollTimeout ));*/ - } - } - } - - if( stream->capture ) - { - ENSURE_( ioctl( captureFd, SNDCTL_DSP_GETISPACE, &bufInfo ), paUnanticipatedHostError ); - captureAvail = bufInfo.fragments * stream->capture->hostFrames; - if( !captureAvail ) - PA_DEBUG(( "%s: captureAvail: 0\n", __FUNCTION__ )); - - captureAvail = captureAvail == 0 ? INT_MAX : captureAvail; /* Disregard if zero */ - } - if( stream->playback ) - { - ENSURE_( ioctl( playbackFd, SNDCTL_DSP_GETOSPACE, &bufInfo ), paUnanticipatedHostError ); - playbackAvail = bufInfo.fragments * stream->playback->hostFrames; - if( !playbackAvail ) - { - PA_DEBUG(( "%s: playbackAvail: 0\n", __FUNCTION__ )); - } - - playbackAvail = playbackAvail == 0 ? INT_MAX : playbackAvail; /* Disregard if zero */ - } - - commonAvail = PA_MIN( captureAvail, playbackAvail ); - if( commonAvail == INT_MAX ) - commonAvail = 0; - commonAvail -= commonAvail % stream->framesPerHostBuffer; - - assert( commonAvail != INT_MAX ); - assert( commonAvail >= 0 ); - *frames = commonAvail; - -error: - return result; -} - -/** Prepare stream for capture/playback. - * - * In order to synchronize capture and playback properly we use the SETTRIGGER command. - */ -static PaError PaOssStream_Prepare( PaOssStream *stream ) -{ - PaError result = paNoError; - int enableBits = 0; - - if( stream->triggered ) - return result; - - /* The OSS reference instructs us to clear direction bits before setting them.*/ - if( stream->playback ) - ENSURE_( ioctl( stream->playback->fd, SNDCTL_DSP_SETTRIGGER, &enableBits ), paUnanticipatedHostError ); - if( stream->capture ) - ENSURE_( ioctl( stream->capture->fd, SNDCTL_DSP_SETTRIGGER, &enableBits ), paUnanticipatedHostError ); - - if( stream->playback ) - { - size_t bufSz = PaOssStreamComponent_BufferSize( stream->playback ); - memset( stream->playback->buffer, 0, bufSz ); - - /* Looks like we have to turn off blocking before we try this, but if we don't fill the buffer - * OSS will complain. */ - PA_ENSURE( ModifyBlocking( stream->playback->fd, 0 ) ); - while (1) - { - if( write( stream->playback->fd, stream->playback->buffer, bufSz ) < 0 ) - break; - } - PA_ENSURE( ModifyBlocking( stream->playback->fd, 1 ) ); - } - - if( stream->sharedDevice ) - { - enableBits = PCM_ENABLE_INPUT | PCM_ENABLE_OUTPUT; - ENSURE_( ioctl( stream->capture->fd, SNDCTL_DSP_SETTRIGGER, &enableBits ), paUnanticipatedHostError ); - } - else - { - if( stream->capture ) - { - enableBits = PCM_ENABLE_INPUT; - ENSURE_( ioctl( stream->capture->fd, SNDCTL_DSP_SETTRIGGER, &enableBits ), paUnanticipatedHostError ); - } - if( stream->playback ) - { - enableBits = PCM_ENABLE_OUTPUT; - ENSURE_( ioctl( stream->playback->fd, SNDCTL_DSP_SETTRIGGER, &enableBits ), paUnanticipatedHostError ); - } - } - - /* Ok, we have triggered the stream */ - stream->triggered = 1; - -error: - return result; -} - -/** Stop audio processing - * - */ -static PaError PaOssStream_Stop( PaOssStream *stream, int abort ) -{ - PaError result = paNoError; - - /* Looks like the only safe way to stop audio without reopening the device is SNDCTL_DSP_POST. - * Also disable capture/playback till the stream is started again. - */ - int captureErr = 0, playbackErr = 0; - if( stream->capture ) - { - if( (captureErr = ioctl( stream->capture->fd, SNDCTL_DSP_POST, 0 )) < 0 ) - { - PA_DEBUG(( "%s: Failed to stop capture device, error: %d\n", __FUNCTION__, captureErr )); - } - } - if( stream->playback && !stream->sharedDevice ) - { - if( (playbackErr = ioctl( stream->playback->fd, SNDCTL_DSP_POST, 0 )) < 0 ) - { - PA_DEBUG(( "%s: Failed to stop playback device, error: %d\n", __FUNCTION__, playbackErr )); - } - } - - if( captureErr || playbackErr ) - { - result = paUnanticipatedHostError; - } - - return result; -} - -/** Clean up after thread exit. - * - * Aspect StreamState: If the user has registered a streamFinishedCallback it will be called here - */ -static void OnExit( void *data ) -{ - PaOssStream *stream = (PaOssStream *) data; - assert( data ); - - PaUtil_ResetCpuLoadMeasurer( &stream->cpuLoadMeasurer ); - - PaOssStream_Stop( stream, stream->callbackAbort ); - - PA_DEBUG(( "OnExit: Stoppage\n" )); - - /* Eventually notify user all buffers have played */ - if( stream->streamRepresentation.streamFinishedCallback ) - stream->streamRepresentation.streamFinishedCallback( stream->streamRepresentation.userData ); - - stream->callbackAbort = 0; /* Clear state */ - stream->isActive = 0; -} - -static PaError SetUpBuffers( PaOssStream *stream, unsigned long framesAvail ) -{ - PaError result = paNoError; - - if( stream->capture ) - { - PaUtil_SetInterleavedInputChannels( &stream->bufferProcessor, 0, stream->capture->buffer, - stream->capture->hostChannelCount ); - PaUtil_SetInputFrameCount( &stream->bufferProcessor, framesAvail ); - } - if( stream->playback ) - { - PaUtil_SetInterleavedOutputChannels( &stream->bufferProcessor, 0, stream->playback->buffer, - stream->playback->hostChannelCount ); - PaUtil_SetOutputFrameCount( &stream->bufferProcessor, framesAvail ); - } - - return result; -} - -/** Thread procedure for callback processing. - * - * Aspect StreamState: StartStream will wait on this to initiate audio processing, useful in case the - * callback should be used for buffer priming. When the stream is cancelled a separate function will - * take care of the transition to the Callback Finished state (the stream isn't considered Stopped - * before StopStream() or AbortStream() are called). - */ -static void *PaOSS_AudioThreadProc( void *userData ) -{ - PaError result = paNoError; - PaOssStream *stream = (PaOssStream*)userData; - unsigned long framesAvail = 0, framesProcessed = 0; - int callbackResult = paContinue; - int triggered = stream->triggered; /* See if SNDCTL_DSP_TRIGGER has been issued already */ - int initiateProcessing = triggered; /* Already triggered? */ - PaStreamCallbackFlags cbFlags = 0; /* We might want to keep state across iterations */ - PaStreamCallbackTimeInfo timeInfo = {0,0,0}; /* TODO: IMPLEMENT ME */ - - /* -#if ( SOUND_VERSION > 0x030904 ) - audio_errinfo errinfo; -#endif -*/ - - assert( stream ); - - pthread_cleanup_push( &OnExit, stream ); /* Execute OnExit when exiting */ - - /* The first time the stream is started we use SNDCTL_DSP_TRIGGER to accurately start capture and - * playback in sync, when the stream is restarted after being stopped we simply start by reading/ - * writing. - */ - PA_ENSURE( PaOssStream_Prepare( stream ) ); - - /* If we are to initiate processing implicitly by reading/writing data, we start off in blocking mode */ - if( initiateProcessing ) - { - /* Make sure devices are in blocking mode */ - if( stream->capture ) - ModifyBlocking( stream->capture->fd, 1 ); - if( stream->playback ) - ModifyBlocking( stream->playback->fd, 1 ); - } - - while( 1 ) - { -#ifdef PTHREAD_CANCELED - pthread_testcancel(); -#else - if( stream->callbackAbort ) /* avoid indefinite waiting on thread not supporting cancelation */ - { - PA_DEBUG(( "Aborting callback thread\n" )); - break; - } -#endif - if( stream->callbackStop && callbackResult == paContinue ) - { - PA_DEBUG(( "Setting callbackResult to paComplete\n" )); - callbackResult = paComplete; - } - - /* Aspect StreamState: Because of the messy OSS scheme we can't explicitly trigger device start unless - * the stream has been recently started, we will have to go right ahead and read/write in blocking - * fashion to trigger operation. Therefore we begin with processing one host buffer before we switch - * to non-blocking mode. - */ - if( !initiateProcessing ) - { - /* Wait on available frames */ - PA_ENSURE( PaOssStream_WaitForFrames( stream, &framesAvail ) ); - assert( framesAvail % stream->framesPerHostBuffer == 0 ); - } - else - { - framesAvail = stream->framesPerHostBuffer; - } - - while( framesAvail > 0 ) - { - unsigned long frames = framesAvail; - -#ifdef PTHREAD_CANCELED - pthread_testcancel(); -#else - if( stream->callbackStop ) - { - PA_DEBUG(( "Setting callbackResult to paComplete\n" )); - callbackResult = paComplete; - } - - if( stream->callbackAbort ) /* avoid indefinite waiting on thread not supporting cancelation */ - { - PA_DEBUG(( "Aborting callback thread\n" )); - break; - } -#endif - PaUtil_BeginCpuLoadMeasurement( &stream->cpuLoadMeasurer ); - - /* Read data */ - if ( stream->capture ) - { - PA_ENSURE( PaOssStreamComponent_Read( stream->capture, &frames ) ); - if( frames < framesAvail ) - { - PA_DEBUG(( "Read %lu less frames than requested\n", framesAvail - frames )); - framesAvail = frames; - } - } - -#if ( SOUND_VERSION >= 0x030904 ) - /* - Check with OSS to see if there have been any under/overruns - since last time we checked. - */ - /* - if( ioctl( stream->deviceHandle, SNDCTL_DSP_GETERROR, &errinfo ) >= 0 ) - { - if( errinfo.play_underruns ) - cbFlags |= paOutputUnderflow ; - if( errinfo.record_underruns ) - cbFlags |= paInputUnderflow ; - } - else - PA_DEBUG(( "SNDCTL_DSP_GETERROR command failed: %s\n", strerror( errno ) )); - */ -#endif - - PaUtil_BeginBufferProcessing( &stream->bufferProcessor, &timeInfo, - cbFlags ); - cbFlags = 0; - PA_ENSURE( SetUpBuffers( stream, framesAvail ) ); - - framesProcessed = PaUtil_EndBufferProcessing( &stream->bufferProcessor, - &callbackResult ); - assert( framesProcessed == framesAvail ); - PaUtil_EndCpuLoadMeasurement( &stream->cpuLoadMeasurer, framesProcessed ); - - if ( stream->playback ) - { - frames = framesAvail; - - PA_ENSURE( PaOssStreamComponent_Write( stream->playback, &frames ) ); - if( frames < framesAvail ) - { - /* TODO: handle bytesWritten != bytesRequested (slippage?) */ - PA_DEBUG(( "Wrote %lu less frames than requested\n", framesAvail - frames )); - } - } - - framesAvail -= framesProcessed; - stream->framesProcessed += framesProcessed; - - if( callbackResult != paContinue ) - break; - } - - if( initiateProcessing || !triggered ) - { - /* Non-blocking */ - if( stream->capture ) - PA_ENSURE( ModifyBlocking( stream->capture->fd, 0 ) ); - if( stream->playback && !stream->sharedDevice ) - PA_ENSURE( ModifyBlocking( stream->playback->fd, 0 ) ); - - initiateProcessing = 0; - sem_post( &stream->semaphore ); - } - - if( callbackResult != paContinue ) - { - stream->callbackAbort = callbackResult == paAbort; - if( stream->callbackAbort || PaUtil_IsBufferProcessorOutputEmpty( &stream->bufferProcessor ) ) - break; - } - } - - pthread_cleanup_pop( 1 ); - -error: - pthread_exit( NULL ); -} - -/** Close the stream. - * - */ -static PaError CloseStream( PaStream* s ) -{ - PaError result = paNoError; - PaOssStream *stream = (PaOssStream*)s; - - assert( stream ); - - PaUtil_TerminateBufferProcessor( &stream->bufferProcessor ); - PaOssStream_Terminate( stream ); - - return result; -} - -/** Start the stream. - * - * Aspect StreamState: After returning, the stream shall be in the Active state, implying that an eventual - * callback will be repeatedly called in a separate thread. If a separate thread is started this function - * will block untill it has started processing audio, otherwise audio processing is started directly. - */ -static PaError StartStream( PaStream *s ) -{ - PaError result = paNoError; - PaOssStream *stream = (PaOssStream*)s; - - stream->isActive = 1; - stream->isStopped = 0; - stream->lastPosPtr = 0; - stream->lastStreamBytes = 0; - stream->framesProcessed = 0; - - /* only use the thread for callback streams */ - if( stream->bufferProcessor.streamCallback ) - { - PA_ENSURE( PaUtil_StartThreading( &stream->threading, &PaOSS_AudioThreadProc, stream ) ); - sem_wait( &stream->semaphore ); - } - else - PA_ENSURE( PaOssStream_Prepare( stream ) ); - -error: - return result; -} - -static PaError RealStop( PaOssStream *stream, int abort ) -{ - PaError result = paNoError; - - if( stream->callbackMode ) - { - if( abort ) - stream->callbackAbort = 1; - else - stream->callbackStop = 1; - - PA_ENSURE( PaUtil_CancelThreading( &stream->threading, !abort, NULL ) ); - - stream->callbackStop = stream->callbackAbort = 0; - } - else - PA_ENSURE( PaOssStream_Stop( stream, abort ) ); - - stream->isStopped = 1; - -error: - return result; -} - -/** Stop the stream. - * - * Aspect StreamState: This will cause the stream to transition to the Stopped state, playing all enqueued - * buffers. - */ -static PaError StopStream( PaStream *s ) -{ - return RealStop( (PaOssStream *)s, 0 ); -} - -/** Abort the stream. - * - * Aspect StreamState: This will cause the stream to transition to the Stopped state, discarding all enqueued - * buffers. Note that the buffers are not currently correctly discarded, this is difficult without closing - * the OSS device. - */ -static PaError AbortStream( PaStream *s ) -{ - return RealStop( (PaOssStream *)s, 1 ); -} - -/** Is the stream in the Stopped state. - * - */ -static PaError IsStreamStopped( PaStream *s ) -{ - PaOssStream *stream = (PaOssStream*)s; - - return (stream->isStopped); -} - -/** Is the stream in the Active state. - * - */ -static PaError IsStreamActive( PaStream *s ) -{ - PaOssStream *stream = (PaOssStream*)s; - - return (stream->isActive); -} - -static PaTime GetStreamTime( PaStream *s ) -{ - PaOssStream *stream = (PaOssStream*)s; - count_info info; - int delta; - - if( stream->playback ) { - if( ioctl( stream->playback->fd, SNDCTL_DSP_GETOPTR, &info) == 0 ) { - delta = ( info.bytes - stream->lastPosPtr ) /* & 0x000FFFFF*/; - return (float)(stream->lastStreamBytes + delta) / PaOssStreamComponent_FrameSize( stream->playback ) / stream->sampleRate; - } - } - else { - if (ioctl( stream->capture->fd, SNDCTL_DSP_GETIPTR, &info) == 0) { - delta = (info.bytes - stream->lastPosPtr) /*& 0x000FFFFF*/; - return (float)(stream->lastStreamBytes + delta) / PaOssStreamComponent_FrameSize( stream->capture ) / stream->sampleRate; - } - } - - /* the ioctl failed, but we can still give a coarse estimate */ - - return stream->framesProcessed / stream->sampleRate; -} - - -static double GetStreamCpuLoad( PaStream* s ) -{ - PaOssStream *stream = (PaOssStream*)s; - - return PaUtil_GetCpuLoad( &stream->cpuLoadMeasurer ); -} - - -/* - As separate stream interfaces are used for blocking and callback - streams, the following functions can be guaranteed to only be called - for blocking streams. -*/ - - -static PaError ReadStream( PaStream* s, - void *buffer, - unsigned long frames ) -{ - PaError result = paNoError; - PaOssStream *stream = (PaOssStream*)s; - int bytesRequested, bytesRead; - unsigned long framesRequested; - void *userBuffer; - - /* If user input is non-interleaved, PaUtil_CopyInput will manipulate the channel pointers, - * so we copy the user provided pointers */ - if( stream->bufferProcessor.userInputIsInterleaved ) - userBuffer = buffer; - else /* Copy channels into local array */ - { - userBuffer = stream->capture->userBuffers; - memcpy( (void *)userBuffer, buffer, sizeof (void *) * stream->capture->userChannelCount ); - } - - while( frames ) - { - framesRequested = PA_MIN( frames, stream->capture->hostFrames ); - - bytesRequested = framesRequested * PaOssStreamComponent_FrameSize( stream->capture ); - ENSURE_( (bytesRead = read( stream->capture->fd, stream->capture->buffer, bytesRequested )), - paUnanticipatedHostError ); - if ( bytesRequested != bytesRead ) - { - PA_DEBUG(( "Requested %d bytes, read %d\n", bytesRequested, bytesRead )); - return paUnanticipatedHostError; - } - - PaUtil_SetInputFrameCount( &stream->bufferProcessor, stream->capture->hostFrames ); - PaUtil_SetInterleavedInputChannels( &stream->bufferProcessor, 0, stream->capture->buffer, stream->capture->hostChannelCount ); - PaUtil_CopyInput( &stream->bufferProcessor, &userBuffer, framesRequested ); - frames -= framesRequested; - } - -error: - return result; -} - - -static PaError WriteStream( PaStream *s, const void *buffer, unsigned long frames ) -{ - PaError result = paNoError; - PaOssStream *stream = (PaOssStream*)s; - int bytesRequested, bytesWritten; - unsigned long framesConverted; - const void *userBuffer; - - /* If user output is non-interleaved, PaUtil_CopyOutput will manipulate the channel pointers, - * so we copy the user provided pointers */ - if( stream->bufferProcessor.userOutputIsInterleaved ) - userBuffer = buffer; - else - { - /* Copy channels into local array */ - userBuffer = stream->playback->userBuffers; - memcpy( (void *)userBuffer, buffer, sizeof (void *) * stream->playback->userChannelCount ); - } - - while( frames ) - { - PaUtil_SetOutputFrameCount( &stream->bufferProcessor, stream->playback->hostFrames ); - PaUtil_SetInterleavedOutputChannels( &stream->bufferProcessor, 0, stream->playback->buffer, stream->playback->hostChannelCount ); - - framesConverted = PaUtil_CopyOutput( &stream->bufferProcessor, &userBuffer, frames ); - frames -= framesConverted; - - bytesRequested = framesConverted * PaOssStreamComponent_FrameSize( stream->playback ); - ENSURE_( (bytesWritten = write( stream->playback->fd, stream->playback->buffer, bytesRequested )), - paUnanticipatedHostError ); - - if ( bytesRequested != bytesWritten ) - { - PA_DEBUG(( "Requested %d bytes, wrote %d\n", bytesRequested, bytesWritten )); - return paUnanticipatedHostError; - } - } - -error: - return result; -} - - -static signed long GetStreamReadAvailable( PaStream* s ) -{ - PaError result = paNoError; - PaOssStream *stream = (PaOssStream*)s; - audio_buf_info info; - - ENSURE_( ioctl( stream->capture->fd, SNDCTL_DSP_GETISPACE, &info ), paUnanticipatedHostError ); - return info.fragments * stream->capture->hostFrames; - -error: - return result; -} - - -/* TODO: Compute number of allocated bytes somewhere else, can we use ODELAY with capture */ -static signed long GetStreamWriteAvailable( PaStream* s ) -{ - PaError result = paNoError; - PaOssStream *stream = (PaOssStream*)s; - int delay = 0; -#ifdef SNDCTL_DSP_GETODELAY - ENSURE_( ioctl( stream->playback->fd, SNDCTL_DSP_GETODELAY, &delay ), paUnanticipatedHostError ); -#endif - return (PaOssStreamComponent_BufferSize( stream->playback ) - delay) / PaOssStreamComponent_FrameSize( stream->playback ); - -/* Conditionally compile this to avoid warning about unused label */ -#ifdef SNDCTL_DSP_GETODELAY -error: - return result; -#endif -} - diff --git a/portaudio/src/hostapi/oss/recplay.c b/portaudio/src/hostapi/oss/recplay.c deleted file mode 100644 index 9d4c78cfa3..0000000000 --- a/portaudio/src/hostapi/oss/recplay.c +++ /dev/null @@ -1,114 +0,0 @@ -/* - * recplay.c - * Phil Burk - * Minimal record and playback test. - * - */ -#include -#include -#include -#ifndef __STDC__ -/* #include */ -#endif /* __STDC__ */ -#include -#ifdef __STDC__ -#include -#else /* __STDC__ */ -#include -#endif /* __STDC__ */ -#include - -#define NUM_BYTES (64*1024) -#define BLOCK_SIZE (4*1024) - -#define AUDIO "/dev/dsp" - -char buffer[NUM_BYTES]; - -int audioDev = 0; - -main (int argc, char *argv[]) -{ - int numLeft; - char *ptr; - int num; - int samplesize; - - /********** RECORD ********************/ - /* Open audio device. */ - audioDev = open (AUDIO, O_RDONLY, 0); - if (audioDev == -1) - { - perror (AUDIO); - exit (-1); - } - - /* Set to 16 bit samples. */ - samplesize = 16; - ioctl(audioDev, SNDCTL_DSP_SAMPLESIZE, &samplesize); - if (samplesize != 16) - { - perror("Unable to set the sample size."); - exit(-1); - } - - /* Record in blocks */ - printf("Begin recording.\n"); - numLeft = NUM_BYTES; - ptr = buffer; - while( numLeft >= BLOCK_SIZE ) - { - if ( (num = read (audioDev, ptr, BLOCK_SIZE)) < 0 ) - { - perror (AUDIO); - exit (-1); - } - else - { - printf("Read %d bytes\n", num); - ptr += num; - numLeft -= num; - } - } - - close( audioDev ); - - /********** PLAYBACK ********************/ - /* Open audio device for writing. */ - audioDev = open (AUDIO, O_WRONLY, 0); - if (audioDev == -1) - { - perror (AUDIO); - exit (-1); - } - - /* Set to 16 bit samples. */ - samplesize = 16; - ioctl(audioDev, SNDCTL_DSP_SAMPLESIZE, &samplesize); - if (samplesize != 16) - { - perror("Unable to set the sample size."); - exit(-1); - } - - /* Play in blocks */ - printf("Begin playing.\n"); - numLeft = NUM_BYTES; - ptr = buffer; - while( numLeft >= BLOCK_SIZE ) - { - if ( (num = write (audioDev, ptr, BLOCK_SIZE)) < 0 ) - { - perror (AUDIO); - exit (-1); - } - else - { - printf("Wrote %d bytes\n", num); - ptr += num; - numLeft -= num; - } - } - - close( audioDev ); -} diff --git a/portaudio/src/os/mac_osx/pa_mac_hostapis.c b/portaudio/src/os/mac_osx/pa_mac_hostapis.c deleted file mode 100644 index bdf63e1fe3..0000000000 --- a/portaudio/src/os/mac_osx/pa_mac_hostapis.c +++ /dev/null @@ -1,89 +0,0 @@ -/* - * $Id: pa_mac_hostapis.c 1097 2006-08-26 08:27:53Z rossb $ - * Portable Audio I/O Library Macintosh initialization table - * - * Based on the Open Source API proposed by Ross Bencina - * Copyright (c) 1999-2002 Ross Bencina, Phil Burk - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF - * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -/* - * The text above constitutes the entire PortAudio license; however, - * the PortAudio community also makes the following non-binding requests: - * - * Any person wishing to distribute modifications to the Software is - * requested to send the modifications to the original developer so that - * they can be incorporated into the canonical version. It is also - * requested that these non-binding requests be included along with the - * license above. - */ - -/** @file - @ingroup macosx_src -Mac OS host API initialization function table. -*/ - - -#include "pa_hostapi.h" - -#ifdef __cplusplus -extern "C" -{ -#endif /* __cplusplus */ - - PaError PaSkeleton_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiIndex index ); - PaError PaMacCore_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiIndex index ); - PaError PaMacSm_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiIndex index ); - PaError PaJack_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiIndex index ); - PaError PaMacAsio_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiIndex index ); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - - -PaUtilHostApiInitializer *paHostApiInitializers[] = -{ -#if PA_USE_COREAUDIO - PaMacCore_Initialize, -#endif - -#if PA_USE_SM - PaMacSm_Initialize, -#endif - -#if PA_USE_JACK - PaJack_Initialize, -#endif - -#if PA_USE_ASIO - PaMacAsio_Initialize, -#endif - -#if PA_USE_SKELETON - PaSkeleton_Initialize, /* just for testing */ -#endif - - 0 /* NULL terminated array */ -}; - - -int paDefaultHostApiIndex = 0; diff --git a/portaudio/src/os/win/pa_win_wdmks_utils.c b/portaudio/src/os/win/pa_win_wdmks_utils.c deleted file mode 100644 index 47e4f10b16..0000000000 --- a/portaudio/src/os/win/pa_win_wdmks_utils.c +++ /dev/null @@ -1,308 +0,0 @@ -/* - * PortAudio Portable Real-Time Audio Library - * Windows WDM KS utilities - * - * Copyright (c) 1999 - 2007 Andrew Baldwin, Ross Bencina - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF - * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -/* - * The text above constitutes the entire PortAudio license; however, - * the PortAudio community also makes the following non-binding requests: - * - * Any person wishing to distribute modifications to the Software is - * requested to send the modifications to the original developer so that - * they can be incorporated into the canonical version. It is also - * requested that these non-binding requests be included along with the - * license above. - */ - -#include -#include -#ifndef WAVE_FORMAT_IEEE_FLOAT - #define WAVE_FORMAT_IEEE_FLOAT 0x0003 // MinGW32 does not define this -#endif -#ifndef _WAVEFORMATEXTENSIBLE_ - #define _WAVEFORMATEXTENSIBLE_ // MinGW32 does not define this -#endif -#ifndef _INC_MMREG - #define _INC_MMREG // for STATIC_KSDATAFORMAT_SUBTYPE_IEEE_FLOAT -#endif -#include // MinGW32 does not define this automatically - -#if defined(__GNUC__) - -#include "../../hostapi/wasapi/mingw-include/ks.h" -#include "../../hostapi/wasapi/mingw-include/ksmedia.h" - -#else - -#include -#include - -#endif - -#include // just for some development printfs - -#include "portaudio.h" -#include "pa_util.h" -#include "pa_win_wdmks_utils.h" - -#if !defined(PA_WDMKS_NO_KSGUID_LIB) && !defined(PAWIN_WDMKS_NO_KSGUID_LIB) && !defined(__GNUC__) - #if (defined(WIN32) && (defined(_MSC_VER) && (_MSC_VER >= 1200))) /* MSC version 6 and above */ - #pragma comment( lib, "ksguid.lib" ) - #endif - #define pa_KSDATAFORMAT_TYPE_AUDIO KSDATAFORMAT_TYPE_AUDIO - #define pa_KSDATAFORMAT_SUBTYPE_IEEE_FLOAT KSDATAFORMAT_SUBTYPE_IEEE_FLOAT - #define pa_KSDATAFORMAT_SUBTYPE_PCM KSDATAFORMAT_SUBTYPE_PCM - #define pa_KSDATAFORMAT_SUBTYPE_WAVEFORMATEX KSDATAFORMAT_SUBTYPE_WAVEFORMATEX - #define pa_KSMEDIUMSETID_Standard KSMEDIUMSETID_Standard - #define pa_KSINTERFACESETID_Standard KSINTERFACESETID_Standard - #define pa_KSPROPSETID_Pin KSPROPSETID_Pin -#else - static const GUID pa_KSDATAFORMAT_TYPE_AUDIO = { STATIC_KSDATAFORMAT_TYPE_AUDIO }; - static const GUID pa_KSDATAFORMAT_SUBTYPE_IEEE_FLOAT = { STATIC_KSDATAFORMAT_SUBTYPE_IEEE_FLOAT }; - static const GUID pa_KSDATAFORMAT_SUBTYPE_PCM = { STATIC_KSDATAFORMAT_SUBTYPE_PCM }; - static const GUID pa_KSDATAFORMAT_SUBTYPE_WAVEFORMATEX = { STATIC_KSDATAFORMAT_SUBTYPE_WAVEFORMATEX }; - static const GUID pa_KSMEDIUMSETID_Standard = { STATIC_KSMEDIUMSETID_Standard }; - static const GUID pa_KSINTERFACESETID_Standard = { STATIC_KSINTERFACESETID_Standard }; - static const GUID pa_KSPROPSETID_Pin = { STATIC_KSPROPSETID_Pin }; -#endif - - -#define pa_IS_VALID_WAVEFORMATEX_GUID(Guid)\ - (!memcmp(((PUSHORT)&pa_KSDATAFORMAT_SUBTYPE_WAVEFORMATEX) + 1, ((PUSHORT)(Guid)) + 1, sizeof(GUID) - sizeof(USHORT))) - - - -static PaError WdmGetPinPropertySimple( - HANDLE handle, - unsigned long pinId, - unsigned long property, - void* value, - unsigned long valueSize ) -{ - DWORD bytesReturned; - KSP_PIN ksPProp; - ksPProp.Property.Set = pa_KSPROPSETID_Pin; - ksPProp.Property.Id = property; - ksPProp.Property.Flags = KSPROPERTY_TYPE_GET; - ksPProp.PinId = pinId; - ksPProp.Reserved = 0; - - if( DeviceIoControl( handle, IOCTL_KS_PROPERTY, &ksPProp, sizeof(KSP_PIN), - value, valueSize, &bytesReturned, NULL ) == 0 || bytesReturned != valueSize ) - { - return paUnanticipatedHostError; - } - else - { - return paNoError; - } -} - - -static PaError WdmGetPinPropertyMulti( - HANDLE handle, - unsigned long pinId, - unsigned long property, - KSMULTIPLE_ITEM** ksMultipleItem) -{ - unsigned long multipleItemSize = 0; - KSP_PIN ksPProp; - DWORD bytesReturned; - - *ksMultipleItem = 0; - - ksPProp.Property.Set = pa_KSPROPSETID_Pin; - ksPProp.Property.Id = property; - ksPProp.Property.Flags = KSPROPERTY_TYPE_GET; - ksPProp.PinId = pinId; - ksPProp.Reserved = 0; - - if( DeviceIoControl( handle, IOCTL_KS_PROPERTY, &ksPProp.Property, - sizeof(KSP_PIN), NULL, 0, &multipleItemSize, NULL ) == 0 && GetLastError() != ERROR_MORE_DATA ) - { - return paUnanticipatedHostError; - } - - *ksMultipleItem = (KSMULTIPLE_ITEM*)PaUtil_AllocateMemory( multipleItemSize ); - if( !*ksMultipleItem ) - { - return paInsufficientMemory; - } - - if( DeviceIoControl( handle, IOCTL_KS_PROPERTY, &ksPProp, sizeof(KSP_PIN), - (void*)*ksMultipleItem, multipleItemSize, &bytesReturned, NULL ) == 0 || bytesReturned != multipleItemSize ) - { - PaUtil_FreeMemory( ksMultipleItem ); - return paUnanticipatedHostError; - } - - return paNoError; -} - - -static int GetKSFilterPinCount( HANDLE deviceHandle ) -{ - DWORD result; - - if( WdmGetPinPropertySimple( deviceHandle, 0, KSPROPERTY_PIN_CTYPES, &result, sizeof(result) ) == paNoError ){ - return result; - }else{ - return 0; - } -} - - -static KSPIN_COMMUNICATION GetKSFilterPinPropertyCommunication( HANDLE deviceHandle, int pinId ) -{ - KSPIN_COMMUNICATION result; - - if( WdmGetPinPropertySimple( deviceHandle, pinId, KSPROPERTY_PIN_COMMUNICATION, &result, sizeof(result) ) == paNoError ){ - return result; - }else{ - return KSPIN_COMMUNICATION_NONE; - } -} - - -static KSPIN_DATAFLOW GetKSFilterPinPropertyDataflow( HANDLE deviceHandle, int pinId ) -{ - KSPIN_DATAFLOW result; - - if( WdmGetPinPropertySimple( deviceHandle, pinId, KSPROPERTY_PIN_DATAFLOW, &result, sizeof(result) ) == paNoError ){ - return result; - }else{ - return (KSPIN_DATAFLOW)0; - } -} - - -static int KSFilterPinPropertyIdentifiersInclude( - HANDLE deviceHandle, int pinId, unsigned long property, const GUID *identifierSet, unsigned long identifierId ) -{ - KSMULTIPLE_ITEM* item = NULL; - KSIDENTIFIER* identifier; - int i; - int result = 0; - - if( WdmGetPinPropertyMulti( deviceHandle, pinId, property, &item) != paNoError ) - return 0; - - identifier = (KSIDENTIFIER*)(item+1); - - for( i = 0; i < (int)item->Count; i++ ) - { - if( !memcmp( (void*)&identifier[i].Set, (void*)identifierSet, sizeof( GUID ) ) && - ( identifier[i].Id == identifierId ) ) - { - result = 1; - break; - } - } - - PaUtil_FreeMemory( item ); - - return result; -} - - -/* return the maximum channel count supported by any pin on the device. - if isInput is non-zero we query input pins, otherwise output pins. -*/ -int PaWin_WDMKS_QueryFilterMaximumChannelCount( void *wcharDevicePath, int isInput ) -{ - HANDLE deviceHandle; - ULONG i; - int pinCount, pinId; - int result = 0; - KSPIN_DATAFLOW requiredDataflowDirection = (isInput ? KSPIN_DATAFLOW_OUT : KSPIN_DATAFLOW_IN ); - - if( !wcharDevicePath ) - return 0; - - deviceHandle = CreateFileW( (LPCWSTR)wcharDevicePath, FILE_SHARE_READ|FILE_SHARE_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL ); - if( deviceHandle == INVALID_HANDLE_VALUE ) - return 0; - - pinCount = GetKSFilterPinCount( deviceHandle ); - for( pinId = 0; pinId < pinCount; ++pinId ) - { - KSPIN_COMMUNICATION communication = GetKSFilterPinPropertyCommunication( deviceHandle, pinId ); - KSPIN_DATAFLOW dataflow = GetKSFilterPinPropertyDataflow( deviceHandle, pinId ); - if( ( dataflow == requiredDataflowDirection ) && - (( communication == KSPIN_COMMUNICATION_SINK) || - ( communication == KSPIN_COMMUNICATION_BOTH)) - && ( KSFilterPinPropertyIdentifiersInclude( deviceHandle, pinId, - KSPROPERTY_PIN_INTERFACES, &pa_KSINTERFACESETID_Standard, KSINTERFACE_STANDARD_STREAMING ) - || KSFilterPinPropertyIdentifiersInclude( deviceHandle, pinId, - KSPROPERTY_PIN_INTERFACES, &pa_KSINTERFACESETID_Standard, KSINTERFACE_STANDARD_LOOPED_STREAMING ) ) - && KSFilterPinPropertyIdentifiersInclude( deviceHandle, pinId, - KSPROPERTY_PIN_MEDIUMS, &pa_KSMEDIUMSETID_Standard, KSMEDIUM_STANDARD_DEVIO ) ) - { - KSMULTIPLE_ITEM* item = NULL; - if( WdmGetPinPropertyMulti( deviceHandle, pinId, KSPROPERTY_PIN_DATARANGES, &item ) == paNoError ) - { - KSDATARANGE *dataRange = (KSDATARANGE*)(item+1); - - for( i=0; i < item->Count; ++i ){ - - if( pa_IS_VALID_WAVEFORMATEX_GUID(&dataRange->SubFormat) - || memcmp( (void*)&dataRange->SubFormat, (void*)&pa_KSDATAFORMAT_SUBTYPE_PCM, sizeof(GUID) ) == 0 - || memcmp( (void*)&dataRange->SubFormat, (void*)&pa_KSDATAFORMAT_SUBTYPE_IEEE_FLOAT, sizeof(GUID) ) == 0 - || ( ( memcmp( (void*)&dataRange->MajorFormat, (void*)&pa_KSDATAFORMAT_TYPE_AUDIO, sizeof(GUID) ) == 0 ) - && ( memcmp( (void*)&dataRange->SubFormat, (void*)&KSDATAFORMAT_SUBTYPE_WILDCARD, sizeof(GUID) ) == 0 ) ) ) - { - KSDATARANGE_AUDIO *dataRangeAudio = (KSDATARANGE_AUDIO*)dataRange; - - /* - printf( ">>> %d %d %d %d %S\n", isInput, dataflow, communication, dataRangeAudio->MaximumChannels, devicePath ); - - if( memcmp((void*)&dataRange->Specifier, (void*)&KSDATAFORMAT_SPECIFIER_WAVEFORMATEX, sizeof(GUID) ) == 0 ) - printf( "\tspecifier: KSDATAFORMAT_SPECIFIER_WAVEFORMATEX\n" ); - else if( memcmp((void*)&dataRange->Specifier, (void*)&KSDATAFORMAT_SPECIFIER_DSOUND, sizeof(GUID) ) == 0 ) - printf( "\tspecifier: KSDATAFORMAT_SPECIFIER_DSOUND\n" ); - else if( memcmp((void*)&dataRange->Specifier, (void*)&KSDATAFORMAT_SPECIFIER_WILDCARD, sizeof(GUID) ) == 0 ) - printf( "\tspecifier: KSDATAFORMAT_SPECIFIER_WILDCARD\n" ); - else - printf( "\tspecifier: ?\n" ); - */ - - /* - We assume that very high values for MaximumChannels are not useful and indicate - that the driver isn't prepared to tell us the real number of channels which it supports. - */ - if( dataRangeAudio->MaximumChannels < 0xFFFFUL && (int)dataRangeAudio->MaximumChannels > result ) - result = (int)dataRangeAudio->MaximumChannels; - } - - dataRange = (KSDATARANGE*)( ((char*)dataRange) + dataRange->FormatSize); - } - - PaUtil_FreeMemory( item ); - } - } - } - - CloseHandle( deviceHandle ); - return result; -} diff --git a/portaudio/src/os/win/pa_win_wdmks_utils.h b/portaudio/src/os/win/pa_win_wdmks_utils.h deleted file mode 100644 index f54035f451..0000000000 --- a/portaudio/src/os/win/pa_win_wdmks_utils.h +++ /dev/null @@ -1,65 +0,0 @@ -#ifndef PA_WIN_WDMKS_UTILS_H -#define PA_WIN_WDMKS_UTILS_H - -/* - * PortAudio Portable Real-Time Audio Library - * Windows WDM KS utilities - * - * Copyright (c) 1999 - 2007 Ross Bencina, Andrew Baldwin - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF - * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -/* - * The text above constitutes the entire PortAudio license; however, - * the PortAudio community also makes the following non-binding requests: - * - * Any person wishing to distribute modifications to the Software is - * requested to send the modifications to the original developer so that - * they can be incorporated into the canonical version. It is also - * requested that these non-binding requests be included along with the - * license above. - */ - -/** @file - @brief Utilities for working with the Windows WDM KS API -*/ - -#ifdef __cplusplus -extern "C" { -#endif - -/** - Query for the maximum number of channels supported by any pin of the - specified device. Returns 0 if the query fails for any reason. - - @param wcharDevicePath A system level PnP interface path, supplied as a WCHAR unicode string. - Declard as void* to avoid introducing a dependency on wchar_t here. - - @param isInput A flag specifying whether to query for input (non-zero) or output (zero) channels. -*/ -int PaWin_WDMKS_QueryFilterMaximumChannelCount( void *wcharDevicePath, int isInput ); - - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* PA_WIN_WDMKS_UTILS_H */ \ No newline at end of file diff --git a/portaudio/src/os/win/pa_x86_plain_converters.c b/portaudio/src/os/win/pa_x86_plain_converters.c deleted file mode 100644 index ae43d28cb6..0000000000 --- a/portaudio/src/os/win/pa_x86_plain_converters.c +++ /dev/null @@ -1,1218 +0,0 @@ -/* - * Plain Intel IA32 assembly implementations of PortAudio sample converter functions. - * Copyright (c) 1999-2002 Ross Bencina, Phil Burk - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF - * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -/* - * The text above constitutes the entire PortAudio license; however, - * the PortAudio community also makes the following non-binding requests: - * - * Any person wishing to distribute modifications to the Software is - * requested to send the modifications to the original developer so that - * they can be incorporated into the canonical version. It is also - * requested that these non-binding requests be included along with the - * license above. - */ - -/** @file - @ingroup win_src -*/ - -#include "pa_x86_plain_converters.h" - -#include "pa_converters.h" -#include "pa_dither.h" - -/* - the main reason these versions are faster than the equivalent C versions - is that float -> int casting is expensive in C on x86 because the rounding - mode needs to be changed for every cast. these versions only set - the rounding mode once outside the loop. - - small additional speed gains are made by the way that clamping is - implemented. - -TODO: - o- inline dither code - o- implement Dither only (no-clip) versions - o- implement int8 and uint8 versions - o- test thouroughly - - o- the packed 24 bit functions could benefit from unrolling and avoiding - byte and word sized register access. -*/ - -/* -------------------------------------------------------------------------- */ - -/* -#define PA_CLIP_( val, min, max )\ - { val = ((val) < (min)) ? (min) : (((val) > (max)) ? (max) : (val)); } -*/ - -/* - the following notes were used to determine whether a floating point - value should be saturated (ie >1 or <-1) by loading it into an integer - register. these should be rewritten so that they make sense. - - an ieee floating point value - - 1.xxxxxxxxxxxxxxxxxxxx? - - - is less than or equal to 1 and greater than or equal to -1 either: - - if the mantissa is 0 and the unbiased exponent is 0 - - OR - - if the unbiased exponent < 0 - - this translates to: - - if the mantissa is 0 and the biased exponent is 7F - - or - - if the biased exponent is less than 7F - - - therefore the value is greater than 1 or less than -1 if - - the mantissa is not 0 and the biased exponent is 7F - - or - - if the biased exponent is greater than 7F - - - in other words, if we mask out the sign bit, the value is - greater than 1 or less than -1 if its integer representation is greater than: - - 0 01111111 0000 0000 0000 0000 0000 000 - - 0011 1111 1000 0000 0000 0000 0000 0000 => 0x3F800000 -*/ - -#if defined(_WIN64) || defined(_WIN32_WCE) - -/* - -EMT64/AMD64 uses different asm - -VC2005 doesnt allow _WIN64 with inline assembly either! - */ -void PaUtil_InitializeX86PlainConverters( void ) -{ -} - -#else - -/* -------------------------------------------------------------------------- */ - -static const short fpuControlWord_ = 0x033F; /*round to nearest, 64 bit precision, all exceptions masked*/ -static const double int32Scaler_ = 0x7FFFFFFF; -static const double ditheredInt32Scaler_ = 0x7FFFFFFE; -static const double int24Scaler_ = 0x7FFFFF; -static const double ditheredInt24Scaler_ = 0x7FFFFE; -static const double int16Scaler_ = 0x7FFF; -static const double ditheredInt16Scaler_ = 0x7FFE; - -#define PA_DITHER_BITS_ (15) -/* Multiply by PA_FLOAT_DITHER_SCALE_ to get a float between -2.0 and +1.99999 */ -#define PA_FLOAT_DITHER_SCALE_ (1.0F / ((1< source ptr - // eax -> source byte stride - // edi -> destination ptr - // ebx -> destination byte stride - // ecx -> source end ptr - // edx -> temp - - mov esi, sourceBuffer - - mov edx, 4 // sizeof float32 and int32 - mov eax, sourceStride - imul eax, edx - - mov ecx, count - imul ecx, eax - add ecx, esi - - mov edi, destinationBuffer - - mov ebx, destinationStride - imul ebx, edx - - fwait - fstcw savedFpuControlWord - fldcw fpuControlWord_ - - fld int32Scaler_ // stack: (int)0x7FFFFFFF - - Float32_To_Int32_loop: - - // load unscaled value into st(0) - fld dword ptr [esi] // stack: value, (int)0x7FFFFFFF - add esi, eax // increment source ptr - //lea esi, [esi+eax] - fmul st(0), st(1) // st(0) *= st(1), stack: value*0x7FFFFFFF, (int)0x7FFFFFFF - /* - note: we could store to a temporary qword here which would cause - wraparound distortion instead of int indefinite 0x10. that would - be more work, and given that not enabling clipping is only advisable - when you know that your signal isn't going to clip it isn't worth it. - */ - fistp dword ptr [edi] // pop st(0) into dest, stack: (int)0x7FFFFFFF - - add edi, ebx // increment destination ptr - //lea edi, [edi+ebx] - - cmp esi, ecx // has src ptr reached end? - jne Float32_To_Int32_loop - - ffree st(0) - fincstp - - fwait - fnclex - fldcw savedFpuControlWord - } -} - -/* -------------------------------------------------------------------------- */ - -static void Float32_To_Int32_Clip( - void *destinationBuffer, signed int destinationStride, - void *sourceBuffer, signed int sourceStride, - unsigned int count, PaUtilTriangularDitherGenerator *ditherGenerator ) -{ -/* - float *src = (float*)sourceBuffer; - signed long *dest = (signed long*)destinationBuffer; - (void) ditherGenerator; // unused parameter - - while( count-- ) - { - // REVIEW - double scaled = *src * 0x7FFFFFFF; - PA_CLIP_( scaled, -2147483648., 2147483647. ); - *dest = (signed long) scaled; - - src += sourceStride; - dest += destinationStride; - } -*/ - - short savedFpuControlWord; - - (void) ditherGenerator; /* unused parameter */ - - __asm{ - // esi -> source ptr - // eax -> source byte stride - // edi -> destination ptr - // ebx -> destination byte stride - // ecx -> source end ptr - // edx -> temp - - mov esi, sourceBuffer - - mov edx, 4 // sizeof float32 and int32 - mov eax, sourceStride - imul eax, edx - - mov ecx, count - imul ecx, eax - add ecx, esi - - mov edi, destinationBuffer - - mov ebx, destinationStride - imul ebx, edx - - fwait - fstcw savedFpuControlWord - fldcw fpuControlWord_ - - fld int32Scaler_ // stack: (int)0x7FFFFFFF - - Float32_To_Int32_Clip_loop: - - mov edx, dword ptr [esi] // load floating point value into integer register - - and edx, 0x7FFFFFFF // mask off sign - cmp edx, 0x3F800000 // greater than 1.0 or less than -1.0 - - jg Float32_To_Int32_Clip_clamp - - // load unscaled value into st(0) - fld dword ptr [esi] // stack: value, (int)0x7FFFFFFF - add esi, eax // increment source ptr - //lea esi, [esi+eax] - fmul st(0), st(1) // st(0) *= st(1), stack: value*0x7FFFFFFF, (int)0x7FFFFFFF - fistp dword ptr [edi] // pop st(0) into dest, stack: (int)0x7FFFFFFF - jmp Float32_To_Int32_Clip_stored - - Float32_To_Int32_Clip_clamp: - mov edx, dword ptr [esi] // load floating point value into integer register - shr edx, 31 // move sign bit into bit 0 - add esi, eax // increment source ptr - //lea esi, [esi+eax] - add edx, 0x7FFFFFFF // convert to maximum range integers - mov dword ptr [edi], edx - - Float32_To_Int32_Clip_stored: - - //add edi, ebx // increment destination ptr - lea edi, [edi+ebx] - - cmp esi, ecx // has src ptr reached end? - jne Float32_To_Int32_Clip_loop - - ffree st(0) - fincstp - - fwait - fnclex - fldcw savedFpuControlWord - } -} - -/* -------------------------------------------------------------------------- */ - -static void Float32_To_Int32_DitherClip( - void *destinationBuffer, signed int destinationStride, - void *sourceBuffer, signed int sourceStride, - unsigned int count, PaUtilTriangularDitherGenerator *ditherGenerator ) -{ - /* - float *src = (float*)sourceBuffer; - signed long *dest = (signed long*)destinationBuffer; - - while( count-- ) - { - // REVIEW - double dither = PaUtil_GenerateFloatTriangularDither( ditherGenerator ); - // use smaller scaler to prevent overflow when we add the dither - double dithered = ((double)*src * (2147483646.0)) + dither; - PA_CLIP_( dithered, -2147483648., 2147483647. ); - *dest = (signed long) dithered; - - - src += sourceStride; - dest += destinationStride; - } - */ - - short savedFpuControlWord; - - // spill storage: - signed long sourceByteStride; - signed long highpassedDither; - - // dither state: - unsigned long ditherPrevious = ditherGenerator->previous; - unsigned long ditherRandSeed1 = ditherGenerator->randSeed1; - unsigned long ditherRandSeed2 = ditherGenerator->randSeed2; - - __asm{ - // esi -> source ptr - // eax -> source byte stride - // edi -> destination ptr - // ebx -> destination byte stride - // ecx -> source end ptr - // edx -> temp - - mov esi, sourceBuffer - - mov edx, 4 // sizeof float32 and int32 - mov eax, sourceStride - imul eax, edx - - mov ecx, count - imul ecx, eax - add ecx, esi - - mov edi, destinationBuffer - - mov ebx, destinationStride - imul ebx, edx - - fwait - fstcw savedFpuControlWord - fldcw fpuControlWord_ - - fld ditheredInt32Scaler_ // stack: int scaler - - Float32_To_Int32_DitherClip_loop: - - mov edx, dword ptr [esi] // load floating point value into integer register - - and edx, 0x7FFFFFFF // mask off sign - cmp edx, 0x3F800000 // greater than 1.0 or less than -1.0 - - jg Float32_To_Int32_DitherClip_clamp - - // load unscaled value into st(0) - fld dword ptr [esi] // stack: value, int scaler - add esi, eax // increment source ptr - //lea esi, [esi+eax] - fmul st(0), st(1) // st(0) *= st(1), stack: value*(int scaler), int scaler - - /* - // call PaUtil_GenerateFloatTriangularDither with C calling convention - mov sourceByteStride, eax // save eax - mov sourceEnd, ecx // save ecx - push ditherGenerator // pass ditherGenerator parameter on stack - call PaUtil_GenerateFloatTriangularDither // stack: dither, value*(int scaler), int scaler - pop edx // clear parameter off stack - mov ecx, sourceEnd // restore ecx - mov eax, sourceByteStride // restore eax - */ - - // generate dither - mov sourceByteStride, eax // save eax - mov edx, 196314165 - mov eax, ditherRandSeed1 - mul edx // eax:edx = eax * 196314165 - //add eax, 907633515 - lea eax, [eax+907633515] - mov ditherRandSeed1, eax - mov edx, 196314165 - mov eax, ditherRandSeed2 - mul edx // eax:edx = eax * 196314165 - //add eax, 907633515 - lea eax, [eax+907633515] - mov edx, ditherRandSeed1 - shr edx, PA_DITHER_SHIFT_ - mov ditherRandSeed2, eax - shr eax, PA_DITHER_SHIFT_ - //add eax, edx // eax -> current - lea eax, [eax+edx] - mov edx, ditherPrevious - neg edx - lea edx, [eax+edx] // highpass = current - previous - mov highpassedDither, edx - mov ditherPrevious, eax // previous = current - mov eax, sourceByteStride // restore eax - fild highpassedDither - fmul const_float_dither_scale_ - // end generate dither, dither signal in st(0) - - faddp st(1), st(0) // stack: dither + value*(int scaler), int scaler - fistp dword ptr [edi] // pop st(0) into dest, stack: int scaler - jmp Float32_To_Int32_DitherClip_stored - - Float32_To_Int32_DitherClip_clamp: - mov edx, dword ptr [esi] // load floating point value into integer register - shr edx, 31 // move sign bit into bit 0 - add esi, eax // increment source ptr - //lea esi, [esi+eax] - add edx, 0x7FFFFFFF // convert to maximum range integers - mov dword ptr [edi], edx - - Float32_To_Int32_DitherClip_stored: - - //add edi, ebx // increment destination ptr - lea edi, [edi+ebx] - - cmp esi, ecx // has src ptr reached end? - jne Float32_To_Int32_DitherClip_loop - - ffree st(0) - fincstp - - fwait - fnclex - fldcw savedFpuControlWord - } - - ditherGenerator->previous = ditherPrevious; - ditherGenerator->randSeed1 = ditherRandSeed1; - ditherGenerator->randSeed2 = ditherRandSeed2; -} - -/* -------------------------------------------------------------------------- */ - -static void Float32_To_Int24( - void *destinationBuffer, signed int destinationStride, - void *sourceBuffer, signed int sourceStride, - unsigned int count, PaUtilTriangularDitherGenerator *ditherGenerator ) -{ -/* - float *src = (float*)sourceBuffer; - unsigned char *dest = (unsigned char*)destinationBuffer; - signed long temp; - - (void) ditherGenerator; // unused parameter - - while( count-- ) - { - // convert to 32 bit and drop the low 8 bits - double scaled = *src * 0x7FFFFFFF; - temp = (signed long) scaled; - - dest[0] = (unsigned char)(temp >> 8); - dest[1] = (unsigned char)(temp >> 16); - dest[2] = (unsigned char)(temp >> 24); - - src += sourceStride; - dest += destinationStride * 3; - } -*/ - - short savedFpuControlWord; - - signed long tempInt32; - - (void) ditherGenerator; /* unused parameter */ - - __asm{ - // esi -> source ptr - // eax -> source byte stride - // edi -> destination ptr - // ebx -> destination byte stride - // ecx -> source end ptr - // edx -> temp - - mov esi, sourceBuffer - - mov edx, 4 // sizeof float32 - mov eax, sourceStride - imul eax, edx - - mov ecx, count - imul ecx, eax - add ecx, esi - - mov edi, destinationBuffer - - mov edx, 3 // sizeof int24 - mov ebx, destinationStride - imul ebx, edx - - fwait - fstcw savedFpuControlWord - fldcw fpuControlWord_ - - fld int24Scaler_ // stack: (int)0x7FFFFF - - Float32_To_Int24_loop: - - // load unscaled value into st(0) - fld dword ptr [esi] // stack: value, (int)0x7FFFFF - add esi, eax // increment source ptr - //lea esi, [esi+eax] - fmul st(0), st(1) // st(0) *= st(1), stack: value*0x7FFFFF, (int)0x7FFFFF - fistp tempInt32 // pop st(0) into tempInt32, stack: (int)0x7FFFFF - mov edx, tempInt32 - - mov byte ptr [edi], DL - shr edx, 8 - //mov byte ptr [edi+1], DL - //mov byte ptr [edi+2], DH - mov word ptr [edi+1], DX - - //add edi, ebx // increment destination ptr - lea edi, [edi+ebx] - - cmp esi, ecx // has src ptr reached end? - jne Float32_To_Int24_loop - - ffree st(0) - fincstp - - fwait - fnclex - fldcw savedFpuControlWord - } -} - -/* -------------------------------------------------------------------------- */ - -static void Float32_To_Int24_Clip( - void *destinationBuffer, signed int destinationStride, - void *sourceBuffer, signed int sourceStride, - unsigned int count, PaUtilTriangularDitherGenerator *ditherGenerator ) -{ -/* - float *src = (float*)sourceBuffer; - unsigned char *dest = (unsigned char*)destinationBuffer; - signed long temp; - - (void) ditherGenerator; // unused parameter - - while( count-- ) - { - // convert to 32 bit and drop the low 8 bits - double scaled = *src * 0x7FFFFFFF; - PA_CLIP_( scaled, -2147483648., 2147483647. ); - temp = (signed long) scaled; - - dest[0] = (unsigned char)(temp >> 8); - dest[1] = (unsigned char)(temp >> 16); - dest[2] = (unsigned char)(temp >> 24); - - src += sourceStride; - dest += destinationStride * 3; - } -*/ - - short savedFpuControlWord; - - signed long tempInt32; - - (void) ditherGenerator; /* unused parameter */ - - __asm{ - // esi -> source ptr - // eax -> source byte stride - // edi -> destination ptr - // ebx -> destination byte stride - // ecx -> source end ptr - // edx -> temp - - mov esi, sourceBuffer - - mov edx, 4 // sizeof float32 - mov eax, sourceStride - imul eax, edx - - mov ecx, count - imul ecx, eax - add ecx, esi - - mov edi, destinationBuffer - - mov edx, 3 // sizeof int24 - mov ebx, destinationStride - imul ebx, edx - - fwait - fstcw savedFpuControlWord - fldcw fpuControlWord_ - - fld int24Scaler_ // stack: (int)0x7FFFFF - - Float32_To_Int24_Clip_loop: - - mov edx, dword ptr [esi] // load floating point value into integer register - - and edx, 0x7FFFFFFF // mask off sign - cmp edx, 0x3F800000 // greater than 1.0 or less than -1.0 - - jg Float32_To_Int24_Clip_clamp - - // load unscaled value into st(0) - fld dword ptr [esi] // stack: value, (int)0x7FFFFF - add esi, eax // increment source ptr - //lea esi, [esi+eax] - fmul st(0), st(1) // st(0) *= st(1), stack: value*0x7FFFFF, (int)0x7FFFFF - fistp tempInt32 // pop st(0) into tempInt32, stack: (int)0x7FFFFF - mov edx, tempInt32 - jmp Float32_To_Int24_Clip_store - - Float32_To_Int24_Clip_clamp: - mov edx, dword ptr [esi] // load floating point value into integer register - shr edx, 31 // move sign bit into bit 0 - add esi, eax // increment source ptr - //lea esi, [esi+eax] - add edx, 0x7FFFFF // convert to maximum range integers - - Float32_To_Int24_Clip_store: - - mov byte ptr [edi], DL - shr edx, 8 - //mov byte ptr [edi+1], DL - //mov byte ptr [edi+2], DH - mov word ptr [edi+1], DX - - //add edi, ebx // increment destination ptr - lea edi, [edi+ebx] - - cmp esi, ecx // has src ptr reached end? - jne Float32_To_Int24_Clip_loop - - ffree st(0) - fincstp - - fwait - fnclex - fldcw savedFpuControlWord - } -} - -/* -------------------------------------------------------------------------- */ - -static void Float32_To_Int24_DitherClip( - void *destinationBuffer, signed int destinationStride, - void *sourceBuffer, signed int sourceStride, - unsigned int count, PaUtilTriangularDitherGenerator *ditherGenerator ) -{ -/* - float *src = (float*)sourceBuffer; - unsigned char *dest = (unsigned char*)destinationBuffer; - signed long temp; - - while( count-- ) - { - // convert to 32 bit and drop the low 8 bits - - // FIXME: the dither amplitude here appears to be too small by 8 bits - double dither = PaUtil_GenerateFloatTriangularDither( ditherGenerator ); - // use smaller scaler to prevent overflow when we add the dither - double dithered = ((double)*src * (2147483646.0)) + dither; - PA_CLIP_( dithered, -2147483648., 2147483647. ); - - temp = (signed long) dithered; - - dest[0] = (unsigned char)(temp >> 8); - dest[1] = (unsigned char)(temp >> 16); - dest[2] = (unsigned char)(temp >> 24); - - src += sourceStride; - dest += destinationStride * 3; - } -*/ - - short savedFpuControlWord; - - // spill storage: - signed long sourceByteStride; - signed long highpassedDither; - - // dither state: - unsigned long ditherPrevious = ditherGenerator->previous; - unsigned long ditherRandSeed1 = ditherGenerator->randSeed1; - unsigned long ditherRandSeed2 = ditherGenerator->randSeed2; - - signed long tempInt32; - - __asm{ - // esi -> source ptr - // eax -> source byte stride - // edi -> destination ptr - // ebx -> destination byte stride - // ecx -> source end ptr - // edx -> temp - - mov esi, sourceBuffer - - mov edx, 4 // sizeof float32 - mov eax, sourceStride - imul eax, edx - - mov ecx, count - imul ecx, eax - add ecx, esi - - mov edi, destinationBuffer - - mov edx, 3 // sizeof int24 - mov ebx, destinationStride - imul ebx, edx - - fwait - fstcw savedFpuControlWord - fldcw fpuControlWord_ - - fld ditheredInt24Scaler_ // stack: int scaler - - Float32_To_Int24_DitherClip_loop: - - mov edx, dword ptr [esi] // load floating point value into integer register - - and edx, 0x7FFFFFFF // mask off sign - cmp edx, 0x3F800000 // greater than 1.0 or less than -1.0 - - jg Float32_To_Int24_DitherClip_clamp - - // load unscaled value into st(0) - fld dword ptr [esi] // stack: value, int scaler - add esi, eax // increment source ptr - //lea esi, [esi+eax] - fmul st(0), st(1) // st(0) *= st(1), stack: value*(int scaler), int scaler - - /* - // call PaUtil_GenerateFloatTriangularDither with C calling convention - mov sourceByteStride, eax // save eax - mov sourceEnd, ecx // save ecx - push ditherGenerator // pass ditherGenerator parameter on stack - call PaUtil_GenerateFloatTriangularDither // stack: dither, value*(int scaler), int scaler - pop edx // clear parameter off stack - mov ecx, sourceEnd // restore ecx - mov eax, sourceByteStride // restore eax - */ - - // generate dither - mov sourceByteStride, eax // save eax - mov edx, 196314165 - mov eax, ditherRandSeed1 - mul edx // eax:edx = eax * 196314165 - //add eax, 907633515 - lea eax, [eax+907633515] - mov ditherRandSeed1, eax - mov edx, 196314165 - mov eax, ditherRandSeed2 - mul edx // eax:edx = eax * 196314165 - //add eax, 907633515 - lea eax, [eax+907633515] - mov edx, ditherRandSeed1 - shr edx, PA_DITHER_SHIFT_ - mov ditherRandSeed2, eax - shr eax, PA_DITHER_SHIFT_ - //add eax, edx // eax -> current - lea eax, [eax+edx] - mov edx, ditherPrevious - neg edx - lea edx, [eax+edx] // highpass = current - previous - mov highpassedDither, edx - mov ditherPrevious, eax // previous = current - mov eax, sourceByteStride // restore eax - fild highpassedDither - fmul const_float_dither_scale_ - // end generate dither, dither signal in st(0) - - faddp st(1), st(0) // stack: dither * value*(int scaler), int scaler - fistp tempInt32 // pop st(0) into tempInt32, stack: int scaler - mov edx, tempInt32 - jmp Float32_To_Int24_DitherClip_store - - Float32_To_Int24_DitherClip_clamp: - mov edx, dword ptr [esi] // load floating point value into integer register - shr edx, 31 // move sign bit into bit 0 - add esi, eax // increment source ptr - //lea esi, [esi+eax] - add edx, 0x7FFFFF // convert to maximum range integers - - Float32_To_Int24_DitherClip_store: - - mov byte ptr [edi], DL - shr edx, 8 - //mov byte ptr [edi+1], DL - //mov byte ptr [edi+2], DH - mov word ptr [edi+1], DX - - //add edi, ebx // increment destination ptr - lea edi, [edi+ebx] - - cmp esi, ecx // has src ptr reached end? - jne Float32_To_Int24_DitherClip_loop - - ffree st(0) - fincstp - - fwait - fnclex - fldcw savedFpuControlWord - } - - ditherGenerator->previous = ditherPrevious; - ditherGenerator->randSeed1 = ditherRandSeed1; - ditherGenerator->randSeed2 = ditherRandSeed2; -} - -/* -------------------------------------------------------------------------- */ - -static void Float32_To_Int16( - void *destinationBuffer, signed int destinationStride, - void *sourceBuffer, signed int sourceStride, - unsigned int count, PaUtilTriangularDitherGenerator *ditherGenerator ) -{ -/* - float *src = (float*)sourceBuffer; - signed short *dest = (signed short*)destinationBuffer; - (void)ditherGenerator; // unused parameter - - while( count-- ) - { - - short samp = (short) (*src * (32767.0f)); - *dest = samp; - - src += sourceStride; - dest += destinationStride; - } -*/ - - short savedFpuControlWord; - - (void) ditherGenerator; /* unused parameter */ - - __asm{ - // esi -> source ptr - // eax -> source byte stride - // edi -> destination ptr - // ebx -> destination byte stride - // ecx -> source end ptr - // edx -> temp - - mov esi, sourceBuffer - - mov edx, 4 // sizeof float32 - mov eax, sourceStride - imul eax, edx // source byte stride - - mov ecx, count - imul ecx, eax - add ecx, esi // source end ptr = count * source byte stride + source ptr - - mov edi, destinationBuffer - - mov edx, 2 // sizeof int16 - mov ebx, destinationStride - imul ebx, edx // destination byte stride - - fwait - fstcw savedFpuControlWord - fldcw fpuControlWord_ - - fld int16Scaler_ // stack: (int)0x7FFF - - Float32_To_Int16_loop: - - // load unscaled value into st(0) - fld dword ptr [esi] // stack: value, (int)0x7FFF - add esi, eax // increment source ptr - //lea esi, [esi+eax] - fmul st(0), st(1) // st(0) *= st(1), stack: value*0x7FFF, (int)0x7FFF - fistp word ptr [edi] // store scaled int into dest, stack: (int)0x7FFF - - add edi, ebx // increment destination ptr - //lea edi, [edi+ebx] - - cmp esi, ecx // has src ptr reached end? - jne Float32_To_Int16_loop - - ffree st(0) - fincstp - - fwait - fnclex - fldcw savedFpuControlWord - } -} - -/* -------------------------------------------------------------------------- */ - -static void Float32_To_Int16_Clip( - void *destinationBuffer, signed int destinationStride, - void *sourceBuffer, signed int sourceStride, - unsigned int count, PaUtilTriangularDitherGenerator *ditherGenerator ) -{ -/* - float *src = (float*)sourceBuffer; - signed short *dest = (signed short*)destinationBuffer; - (void)ditherGenerator; // unused parameter - - while( count-- ) - { - long samp = (signed long) (*src * (32767.0f)); - PA_CLIP_( samp, -0x8000, 0x7FFF ); - *dest = (signed short) samp; - - src += sourceStride; - dest += destinationStride; - } -*/ - - short savedFpuControlWord; - - (void) ditherGenerator; /* unused parameter */ - - __asm{ - // esi -> source ptr - // eax -> source byte stride - // edi -> destination ptr - // ebx -> destination byte stride - // ecx -> source end ptr - // edx -> temp - - mov esi, sourceBuffer - - mov edx, 4 // sizeof float32 - mov eax, sourceStride - imul eax, edx // source byte stride - - mov ecx, count - imul ecx, eax - add ecx, esi // source end ptr = count * source byte stride + source ptr - - mov edi, destinationBuffer - - mov edx, 2 // sizeof int16 - mov ebx, destinationStride - imul ebx, edx // destination byte stride - - fwait - fstcw savedFpuControlWord - fldcw fpuControlWord_ - - fld int16Scaler_ // stack: (int)0x7FFF - - Float32_To_Int16_Clip_loop: - - mov edx, dword ptr [esi] // load floating point value into integer register - - and edx, 0x7FFFFFFF // mask off sign - cmp edx, 0x3F800000 // greater than 1.0 or less than -1.0 - - jg Float32_To_Int16_Clip_clamp - - // load unscaled value into st(0) - fld dword ptr [esi] // stack: value, (int)0x7FFF - add esi, eax // increment source ptr - //lea esi, [esi+eax] - fmul st(0), st(1) // st(0) *= st(1), stack: value*0x7FFF, (int)0x7FFF - fistp word ptr [edi] // store scaled int into dest, stack: (int)0x7FFF - jmp Float32_To_Int16_Clip_stored - - Float32_To_Int16_Clip_clamp: - mov edx, dword ptr [esi] // load floating point value into integer register - shr edx, 31 // move sign bit into bit 0 - add esi, eax // increment source ptr - //lea esi, [esi+eax] - add dx, 0x7FFF // convert to maximum range integers - mov word ptr [edi], dx // store clamped into into dest - - Float32_To_Int16_Clip_stored: - - add edi, ebx // increment destination ptr - //lea edi, [edi+ebx] - - cmp esi, ecx // has src ptr reached end? - jne Float32_To_Int16_Clip_loop - - ffree st(0) - fincstp - - fwait - fnclex - fldcw savedFpuControlWord - } -} - -/* -------------------------------------------------------------------------- */ - -static void Float32_To_Int16_DitherClip( - void *destinationBuffer, signed int destinationStride, - void *sourceBuffer, signed int sourceStride, - unsigned int count, PaUtilTriangularDitherGenerator *ditherGenerator ) -{ -/* - float *src = (float*)sourceBuffer; - signed short *dest = (signed short*)destinationBuffer; - (void)ditherGenerator; // unused parameter - - while( count-- ) - { - - float dither = PaUtil_GenerateFloatTriangularDither( ditherGenerator ); - // use smaller scaler to prevent overflow when we add the dither - float dithered = (*src * (32766.0f)) + dither; - signed long samp = (signed long) dithered; - PA_CLIP_( samp, -0x8000, 0x7FFF ); - *dest = (signed short) samp; - - src += sourceStride; - dest += destinationStride; - } -*/ - - short savedFpuControlWord; - - // spill storage: - signed long sourceByteStride; - signed long highpassedDither; - - // dither state: - unsigned long ditherPrevious = ditherGenerator->previous; - unsigned long ditherRandSeed1 = ditherGenerator->randSeed1; - unsigned long ditherRandSeed2 = ditherGenerator->randSeed2; - - __asm{ - // esi -> source ptr - // eax -> source byte stride - // edi -> destination ptr - // ebx -> destination byte stride - // ecx -> source end ptr - // edx -> temp - - mov esi, sourceBuffer - - mov edx, 4 // sizeof float32 - mov eax, sourceStride - imul eax, edx // source byte stride - - mov ecx, count - imul ecx, eax - add ecx, esi // source end ptr = count * source byte stride + source ptr - - mov edi, destinationBuffer - - mov edx, 2 // sizeof int16 - mov ebx, destinationStride - imul ebx, edx // destination byte stride - - fwait - fstcw savedFpuControlWord - fldcw fpuControlWord_ - - fld ditheredInt16Scaler_ // stack: int scaler - - Float32_To_Int16_DitherClip_loop: - - mov edx, dword ptr [esi] // load floating point value into integer register - - and edx, 0x7FFFFFFF // mask off sign - cmp edx, 0x3F800000 // greater than 1.0 or less than -1.0 - - jg Float32_To_Int16_DitherClip_clamp - - // load unscaled value into st(0) - fld dword ptr [esi] // stack: value, int scaler - add esi, eax // increment source ptr - //lea esi, [esi+eax] - fmul st(0), st(1) // st(0) *= st(1), stack: value*(int scaler), int scaler - - /* - // call PaUtil_GenerateFloatTriangularDither with C calling convention - mov sourceByteStride, eax // save eax - mov sourceEnd, ecx // save ecx - push ditherGenerator // pass ditherGenerator parameter on stack - call PaUtil_GenerateFloatTriangularDither // stack: dither, value*(int scaler), int scaler - pop edx // clear parameter off stack - mov ecx, sourceEnd // restore ecx - mov eax, sourceByteStride // restore eax - */ - - // generate dither - mov sourceByteStride, eax // save eax - mov edx, 196314165 - mov eax, ditherRandSeed1 - mul edx // eax:edx = eax * 196314165 - //add eax, 907633515 - lea eax, [eax+907633515] - mov ditherRandSeed1, eax - mov edx, 196314165 - mov eax, ditherRandSeed2 - mul edx // eax:edx = eax * 196314165 - //add eax, 907633515 - lea eax, [eax+907633515] - mov edx, ditherRandSeed1 - shr edx, PA_DITHER_SHIFT_ - mov ditherRandSeed2, eax - shr eax, PA_DITHER_SHIFT_ - //add eax, edx // eax -> current - lea eax, [eax+edx] // current = randSeed1>>x + randSeed2>>x - mov edx, ditherPrevious - neg edx - lea edx, [eax+edx] // highpass = current - previous - mov highpassedDither, edx - mov ditherPrevious, eax // previous = current - mov eax, sourceByteStride // restore eax - fild highpassedDither - fmul const_float_dither_scale_ - // end generate dither, dither signal in st(0) - - faddp st(1), st(0) // stack: dither * value*(int scaler), int scaler - fistp word ptr [edi] // store scaled int into dest, stack: int scaler - jmp Float32_To_Int16_DitherClip_stored - - Float32_To_Int16_DitherClip_clamp: - mov edx, dword ptr [esi] // load floating point value into integer register - shr edx, 31 // move sign bit into bit 0 - add esi, eax // increment source ptr - //lea esi, [esi+eax] - add dx, 0x7FFF // convert to maximum range integers - mov word ptr [edi], dx // store clamped into into dest - - Float32_To_Int16_DitherClip_stored: - - add edi, ebx // increment destination ptr - //lea edi, [edi+ebx] - - cmp esi, ecx // has src ptr reached end? - jne Float32_To_Int16_DitherClip_loop - - ffree st(0) - fincstp - - fwait - fnclex - fldcw savedFpuControlWord - } - - ditherGenerator->previous = ditherPrevious; - ditherGenerator->randSeed1 = ditherRandSeed1; - ditherGenerator->randSeed2 = ditherRandSeed2; -} - -/* -------------------------------------------------------------------------- */ - -void PaUtil_InitializeX86PlainConverters( void ) -{ - paConverters.Float32_To_Int32 = Float32_To_Int32; - paConverters.Float32_To_Int32_Clip = Float32_To_Int32_Clip; - paConverters.Float32_To_Int32_DitherClip = Float32_To_Int32_DitherClip; - - paConverters.Float32_To_Int24 = Float32_To_Int24; - paConverters.Float32_To_Int24_Clip = Float32_To_Int24_Clip; - paConverters.Float32_To_Int24_DitherClip = Float32_To_Int24_DitherClip; - - paConverters.Float32_To_Int16 = Float32_To_Int16; - paConverters.Float32_To_Int16_Clip = Float32_To_Int16_Clip; - paConverters.Float32_To_Int16_DitherClip = Float32_To_Int16_DitherClip; -} - -#endif - -/* -------------------------------------------------------------------------- */ diff --git a/portaudio/src/os/win/pa_x86_plain_converters.h b/portaudio/src/os/win/pa_x86_plain_converters.h deleted file mode 100644 index 1623115d6b..0000000000 --- a/portaudio/src/os/win/pa_x86_plain_converters.h +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Plain Intel IA32 assembly implementations of PortAudio sample converter functions. - * Copyright (c) 1999-2002 Ross Bencina, Phil Burk - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF - * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -/* - * The text above constitutes the entire PortAudio license; however, - * the PortAudio community also makes the following non-binding requests: - * - * Any person wishing to distribute modifications to the Software is - * requested to send the modifications to the original developer so that - * they can be incorporated into the canonical version. It is also - * requested that these non-binding requests be included along with the - * license above. - */ - -/** @file - @ingroup win_src -*/ - -#ifndef PA_X86_PLAIN_CONVERTERS_H -#define PA_X86_PLAIN_CONVERTERS_H - -#ifdef __cplusplus -extern "C" -{ -#endif /* __cplusplus */ - - -/** - @brief Install optimized converter functions suitable for all IA32 processors - - It is recommended to call PaUtil_InitializeX86PlainConverters prior to calling Pa_Initialize -*/ -void PaUtil_InitializeX86PlainConverters( void ); - - -#ifdef __cplusplus -} -#endif /* __cplusplus */ -#endif /* PA_X86_PLAIN_CONVERTERS_H */ diff --git a/portaudio/update.sh b/portaudio/update.sh new file mode 100755 index 0000000000..3fa597e563 --- /dev/null +++ b/portaudio/update.sh @@ -0,0 +1,85 @@ +#! /bin/bash +# +# this script automatically downloads and copies the portaudio library for Pd +# +# uses git master version by default, set checkout branch/tag/commit using +# first argument: +# +# ./update.sh c0d239712d +# +# to see which git revision the portaudio code included with Pd is, +# see portaudio/src/common/pa_gitrevision.h +# +# Dan Wilcox danomatika.com 2018 +# + +# exit on error +set -e + +##### VARIABLES + +SRC=portaudio-git +DEST=portaudio + +# commandline arg: version can be a tag, commit, etc +# uses git master by default +VERSION="" + +##### FUNCTIONS + +# copy .h & .c files from $SRC to $DEST, ignore missing file errors +function copysrc { + mkdir -p $DEST/$1 + cp -v $SRC/$1/*.h $DEST/$1 2>/dev/null || : + cp -v $SRC/$1/*.c $DEST/$1 2>/dev/null || : +} + +##### GO + +if [ $# -gt 0 ] ; then + VERSION="$1" +fi + +# move to this scripts dir +cd $(dirname $0) + +# clone source +echo "==== Downloading portaudio $VERSION" +if [ -d $SRC ] ; then + rm -rf $SRC +fi +git clone https://git.assembla.com/portaudio.git $SRC +if [[ "$VERSION" != "" ]] ; then + cd $SRC && git checkout $VERSION && cd - +fi + +# set git revision +if [ -f $SRC/update_gitrevision.sh ] ; then + echo "==== Set git revision" + cd $SRC && ./update_gitrevision.sh && cd - +fi + +echo "==== Copying" + +# remove stuff we don't need +rm $SRC/include/pa_jack.h +rm $SRC/include/pa_win_ds.h +rm $SRC/include/pa_win_wasapi.h +rm $SRC/include/pa_win_wdmks.h +rm $SRC/src/hostapi/coreaudio/pa_mac_core_old.c +rm $SRC/src/os/win/pa_win_wdmks_utils.* +rm $SRC/src/os/win/pa_x86_plain_converters.* + +# copy what we need, namely the main headers and relevant sources +copysrc include +copysrc src/common +copysrc src/hostapi/alsa +copysrc src/hostapi/asio +copysrc src/hostapi/coreaudio +copysrc src/hostapi/wmme +copysrc src/os/unix +copysrc src/os/win +cp -v $SRC/LICENSE.txt $DEST/ + +# cleanup +rm -rf $SRC diff --git a/portmidi/CHANGELOG.txt b/portmidi/CHANGELOG.txt deleted file mode 100644 index c2a083a568..0000000000 --- a/portmidi/CHANGELOG.txt +++ /dev/null @@ -1,192 +0,0 @@ -/* CHANGELOG FOR PORTMIDI - * - * 19Oct09 Roger Dannenberg - * - Changes dynamic library names from portmidi_d to portmidi to - * be backward-compatible with programs expecting a library by - * the old name. - * - * 04Oct09 Roger Dannenberg - * - Converted to using Cmake. - * - Renamed static and dynamic library files to portmidi_s and portmidi_d - * - Eliminated VC9 and VC8 files (went back to simply test.vcproj, etc., - * use Cmake to switch from the provided VC9 files to VC8 or other) - * - Many small changes to prepare for 64-bit architectures (but only - * tested on 32-bit machines) - * - * 16Jun09 Roger Dannenberg - * - Started using Microsoft Visual C++ Version 9 (Express). Converted - * all *-VC9.vcproj file to *.vcproj and renamed old project files to - * *-VC8.proj. Previously, output from VC9 went to special VC9 files, - * that breaks any program or script looking for output in release or - * debug files, so now both compiler version output to the same folders. - * Now, debug version uses static linking with debug DLL runtime, and - * release version uses static linking with statically linked runtime. - * Converted to Inno Setup and worked on scripts to make things build - * properly, especially pmdefaults. - * - * 02Jan09 Roger Dannenberg - * - Created Java interface and wrote PmDefaults application to set - * values for Pm_GetDefaultInputDeviceID() and - * Pm_GetDefaultOutputDeviceID(). Other fixes. - * - * 19Jun08 Roger Dannenberg and Austin Sung - * - Removed USE_DLL_FOR_CLEANUP -- Windows 2000 through Vista seem to be - * fixed now, and can recover if MIDI ports are left open - * - Various other minor patches - * - * 17Jan07 Roger Dannenberg - * - Lots more help for Common Lisp user in pm_cl - * - Minor fix to eliminate a compiler warning - * - Went back to single library in OS X for both portmidi and porttime - * - * 16Jan07 Roger Dannenberg - * - OOPS! fixed bug where short messages all had zero data - * - Makefile.osx static library build now makes universal (i386 + ppc) - * binaries - * - * 15Jan07 Roger Dannenberg - * - multiple rewrites of sysex handling code to take care of - * error-handling, embedded messages, message filtering, - * driver bugs, and host limitations. - * - fixed windows to use dwBufferLength rather than - * dwBytesRecorded for long buffer output (fix by Nigel Brown) - * - Win32 MME code always appends an extra zero to long buffer - * output to work around a problem with earlier versions of Midi Yoke - * - Added mm, a command line Midi Monitor to pm_test suite - * - Revised copyright notice to match PortAudio/MIT license (requests - * are moved out of the license proper and into a separate paragraph) - * - * 18Oct06 Roger Dannenberg - * - replace FIFO in pmutil with Light Pipe-based multiprocessor-safe alg. - * - replace FIFO in portmidi.c with PmQueue from pmutil - * - * 07Oct06 cpr & Roger Dannenberg - * - overhaul of CoreMIDI input to handle running status and multiple - * - messages per packet, with additional error detection - * - added Leigh Smith and Rick Taube support for Common Lisp and - * - dynamic link libraries in OSX - * - initialize static global seq = NULL in pmlinuxalsa.c - * - * 05Sep06 Sebastien Frippiat - * - check if (ALSA) seq exists before closing it in pm_linuxalsa_term() - * - * 05Sep06 Andreas Micheler and Cecilio - * - fixed memory leak by freeing someo objects in pm_winmm_term() - * - and another leak by freeing descriptors in Pm_Terminate() - * - * 23Aug06 RBD - * - various minor fixes - * - * 04Nov05 Olivier Tristan - * - changes to OS X to properly retrieve real device name on CoreMidi - * - * 19Jul05 Roger Dannenberg - * - included pmBufferMaxSize in Pm_GetErrorText() - * - * 23Mar05 Torgier Strand Henriksen - * - cleaner termination of porttime thread under Linux - * - * 15Nov04 Ben Allison - * - sysex output now uses one buffer/message and reallocates buffer - * - if needed - * - filters expanded for many message types and channels - * - detailed changes are as follows: - * ------------- in pmwinmm.c -------------- - * - new #define symbol: OUTPUT_BYTES_PER_BUFFER - * - change SYSEX_BYTES_PER_BUFFER to 1024 - * - added MIDIHDR_BUFFER_LENGTH(x) to correctly count midihdr buffer length - * - change MIDIHDR_SIZE(x) to (MIDIHDR_BUFFER_LENGTH(x) + sizeof(MIDIHDR)) - * - change allocate_buffer to use new MIDIHDR_BUFFER_LENGTH macro - * - new macros for MIDIHDR_SYSEX_SIZE and MIDIHDR_SYSEX_BUFFER_LENGTH - * - similar to above, but counts appropriately for sysex messages - * - added the following members to midiwinmm_struct for sysex data: - * - LPMIDIHDR *sysex_buffers; ** pool of buffers for sysex data ** - * - int num_sysex_buffers; ** how many sysex buffers ** - * - int next_sysex_buffer; ** index of next sysexbuffer to send ** - * - HANDLE sysex_buffer_signal; ** to wait for free sysex buffer ** - * - duplicated allocate_buffer, alocate_buffers and get_free_output_buffer - * - into equivalent sysex_buffer form - * - changed winmm_in_open to initialize new midiwinmm_struct members and - * - to use the new allocate_sysex_buffer() function instead of - * - allocate_buffer() - * - changed winmm_out_open to initialize new members, create sysex buffer - * - signal, and allocate 2 sysex buffers - * - changed winmm_out_delete to free sysex buffers and shut down the sysex - * - buffer signal - * - create new function resize_sysex_buffer which resizes m->hdr to the - * - passed size, and corrects the midiwinmm_struct accordingly. - * - changed winmm_write_byte to use new resize_sysex_buffer function, - * - if resize fails, write current buffer to output and continue - * - changed winmm_out_callback to use buffer_signal or sysex_buffer_signal - * - depending on which buffer was finished - * ------------- in portmidi.h -------------- - * - added pmBufferMaxSize to PmError to indicate that the buffer would be - * - too large for the underlying API - * - added additional filters - * - added prototype, documentation, and helper macro for Pm_SetChannelMask - * ------------- in portmidi.c -------------- - * - added pm_status_filtered() and pm_realtime_filtered() functions to - * separate filtering logic from buffer logic in pm_read_short - * - added Pm_SetChannelMask function - * - added pm_channel_filtered() function - * ------------- in pminternal.h -------------- - * - added member to PortMidiStream for channel mask - * - * 25May04 RBD - * - removed support for MIDI THRU - * - moved filtering from Pm_Read to pm_enqueue to avoid buffer ovfl - * - extensive work on Mac OS X port, especially sysex and error handling - * - * 18May04 RBD - * - removed side-effects from assert() calls. Now you can disable assert(). - * - no longer check pm_hosterror everywhere, fixing a bug where an open - * failure could cause a write not to work on a previously opened port - * until you call Pm_GetHostErrorText(). - * 16May04 RBD and Chris Roberts - * - Some documentation wordsmithing in portmidi.h - * - Dynamically allocate port descriptor structures - * - Fixed parameter error in midiInPrepareBuffer and midiInAddBuffer. - * - * 09Oct03 RBD - * - Changed Thru handling. Now the client does all the work and the client - * must poll or read to keep thru messages flowing. - * - * 31May03 RBD - * - Fixed various bugs. - * - Added linux ALSA support with help from Clemens Ladisch - * - Added Mac OS X support, implemented by Jon Parise, updated and - * integrated by Andrew Zeldis and Zico Kolter - * - Added latency program to build histogram of system latency using PortTime. - * - * 30Jun02 RBD Extensive rewrite of sysex handling. It works now. - * Extensive reworking of error reporting and error text -- no - * longer use dictionary call to delete data; instead, Pm_Open - * and Pm_Close clean up before returning an error code, and - * error text is saved in a system-independent location. - * Wrote sysex.c to test sysex message handling. - * - * 15Jun02 BCT changes: - * - Added pmHostError text handling. - * - For robustness, check PortMidi stream args not NULL. - * - Re-C-ANSI-fied code (changed many C++ comments to C style) - * - Reorganized code in pmwinmm according to input/output functionality (made - * cleanup handling easier to reason about) - * - Fixed Pm_Write calls (portmidi.h says these should not return length but Pm_Error) - * - Cleaned up memory handling (now system specific data deleted via dictionary - * call in PortMidi, allows client to query host errors). - * - Added explicit asserts to verify various aspects of pmwinmm implementation behaves as - * logic implies it should. Specifically: verified callback routines not reentrant and - * all verified status for all unchecked Win32 MMedia API calls perform successfully - * - Moved portmidi initialization and clean-up routines into DLL to fix Win32 MMedia API - * bug (i.e. if devices not explicitly closed, must reboot to debug application further). - * With this change, clients no longer need explicitly call Pm_Initialize, Pm_Terminate, or - * explicitly Pm_Close open devices when using WinMM version of PortMidi. - * - * 23Jan02 RBD Fixed bug in pmwinmm.c thru handling - * - * 21Jan02 RBD Added tests in Pm_OpenInput() and Pm_OpenOutput() to prevent - * opening an input as output and vice versa. - * Added comments and documentation. - * Implemented Pm_Terminate(). - * - */ diff --git a/portmidi/CMakeLists.txt b/portmidi/CMakeLists.txt index 165da6a6fd..404ce66240 100644 --- a/portmidi/CMakeLists.txt +++ b/portmidi/CMakeLists.txt @@ -1,4 +1,3 @@ if(WITH_PORTMIDI) - include_directories(pm_common) - add_subdirectory(pm_common) + add_subdirectory(portmidi) endif() diff --git a/portmidi/Makefile.am b/portmidi/Makefile.am index 882832651f..1f94be16e9 100644 --- a/portmidi/Makefile.am +++ b/portmidi/Makefile.am @@ -1,46 +1,64 @@ -# this is built as a "libtool convenience library" -# http://sources.redhat.com/automake/automake.html#Libtool-Convenience-Libraries +# this is built as a static convenience library + +######################################### +##### Defaults & Paths ##### + AUTOMAKE_OPTIONS = foreign AM_CFLAGS = -DNEWBUFFER -INCLUDES = -Ipm_common -Iporttime +AM_CPPFLAGS += \ + -I$(top_srcdir)/portmidi/portmidi/pm_common \ + -I$(top_srcdir)/portmidi/portmidi/porttime -noinst_LTLIBRARIES = libportmidi.la +######################################### +##### Files, Binaries, & Libs ##### -libportmidi_la_SOURCES = pm_common/pmutil.c pm_common/portmidi.c +noinst_LIBRARIES = libportmidi.a + +libportmidi_a_SOURCES = \ + portmidi/pm_common/pmutil.c \ + portmidi/pm_common/portmidi.c if LINUX -INCLUDES += -Ipm_linux -libportmidi_la_SOURCES += porttime/ptlinux.c \ - pm_linux/pmlinux.c \ - pm_linux/pmlinuxalsa.c +AM_CPPFLAGS += -I$(top_srcdir)/portmidi/portmidi/pm_linux +libportmidi_a_SOURCES += \ + portmidi/porttime/ptlinux.c \ + portmidi/pm_linux/pmlinux.c \ + portmidi/pm_linux/pmlinuxalsa.c endif +# disable portmidi rate limiting on macos if MACOSX -INCLUDES += -Ipm_mac -libportmidi_la_SOURCES += porttime/ptmacosx_cf.c \ - pm_mac/pmmac.c \ - pm_mac/pmmacosxcm.c \ - pm_mac/finddefault.c \ - pm_mac/readbinaryplist.c +AM_CPPFLAGS += -I$(top_srcdir)/portmidi/portmidi/pm_mac -DLIMIT_RATE=0 +libportmidi_a_SOURCES += \ + portmidi/porttime/ptmacosx_mach.c \ + portmidi/pm_mac/pmmac.c \ + portmidi/pm_mac/pmmacosxcm.c \ + portmidi/pm_mac/finddefault.c \ + portmidi/pm_mac/readbinaryplist.c endif if WINDOWS -INCLUDES += -Ipm_win -libportmidi_la_SOURCES += porttime/porttime.c \ - porttime/ptwinmm.c \ - pm_win/pmwin.c \ - pm_win/pmwinmm.c +AM_CPPFLAGS += -I$(top_srcdir)/portmidi/portmidi/pm_win +libportmidi_a_SOURCES += \ + portmidi/porttime/ptwinmm.c \ + portmidi/pm_win/pmwin.c \ + portmidi/pm_win/pmwinmm.c endif +# empty var for headers list footer +empty= + # include the headers in the dist so you can build +# find portmidi -type file -name *.h | sort | awk '{print " ", $1, "\\"}'; echo ' $(empty)' nobase_noinst_HEADERS = \ - pm_common/pminternal.h \ - pm_common/pmutil.h \ - pm_common/portmidi.h \ - pm_linux/pmlinux.h \ - pm_linux/pmlinuxalsa.h \ - pm_mac/pmmac.h \ - pm_mac/pmmacosxcm.h \ - pm_win/pmdll.h \ - pm_win/pmwinmm.h \ - porttime/porttime.h + portmidi/pm_common/pminternal.h \ + portmidi/pm_common/pmutil.h \ + portmidi/pm_common/portmidi.h \ + portmidi/pm_linux/pmlinux.h \ + portmidi/pm_linux/pmlinuxalsa.h \ + portmidi/pm_mac/pmmac.h \ + portmidi/pm_mac/pmmacosxcm.h \ + portmidi/pm_mac/readbinaryplist.h \ + portmidi/pm_win/pmwinmm.h \ + portmidi/porttime/porttime.h \ + $(empty) diff --git a/portmidi/README.txt b/portmidi/README.txt old mode 100755 new mode 100644 index 32608231b5..b4733a9959 --- a/portmidi/README.txt +++ b/portmidi/README.txt @@ -1,84 +1,58 @@ -README for PortMidi - -Roger B. Dannenberg - -VERSION: please use "svn info" to get info. - -Documentation for PortMidi is found in pm_common/portmidi.h. - -Additional documentation: - - Windows: see pm_win/README_WIN.txt and pm_win/debugging_dlls.txt - - Linux: see pm_linux/README_LINUX.txt - - Mac OSX: see pm_mac/README_MAC.txt - - Common Lisp: see pm_cl/README_CL.txt - - Eclipse: see portmidi_cdt.zip (this was contributed as is; the dlls here - are now -- Sep 09 -- out of date. What is really needed is a script - to generate this release automatically so we can maintain it.) - - C-Sharp: see pm_csharp.zip (also contributed as is) - ----------- some notes on the design of PortMidi ---------- - -POINTERS VS DEVICE NUMBERS - -When you open a MIDI port, PortMidi allocates a structure to -maintain the state of the open device. Since every device is -also listed in a table, you might think it would be simpler to -use the table index rather than a pointer to identify a device. -This would also help with error checking (it's hard to make -sure a pointer is valid). PortMidi's design parallels that of -PortAudio. - -ERROR HANDLING - -Error handling turned out to be much more complicated than expected. -PortMidi functions return error codes that the caller can check. -In addition, errors may occur asynchronously due to MIDI input. -However, for Windows, there are virtually no errors that can -occur if the code is correct and not passing bogus values. One -exception is an error that the system is out of memory, but my -guess is that one is unlikely to recover gracefully from that. -Therefore, all errors in callbacks are guarded by assert(), which -means not guarded at all in release configurations. - -Ordinarily, the caller checks for an error code. If the error is -system-dependent, pmHostError is returned and the caller can -call Pm_GetHostErrorText to get a text description of the error. - -Host error codes are system-specific and are recorded in the -system-specific data allocated for each open MIDI port. -However, if an error occurs on open or close, -we cannot store the error with the device because there will be -no device data (assuming PortMidi cleans up after devices that -are not open). For open and close, we will convert the error -to text, copy it to a global string, and set pm_hosterror, a -global flag. - -Similarly, whenever a Read or Write operation returns pmHostError, -the corresponding error string is copied to a global string -and pm_hosterror is set. This makes getting error strings -simple and uniform, although it does cost a string copy and some -overhead even if the user does not want to look at the error data. - -The system-specific Read, Write, Poll, etc. implementations should -check for asynchronous errors and return immediately if one is -found so that these get reported. This happens in the Mac OS X -code, where lots of things are happening in callbacks, but again, -in Windows, there are no error codes recorded in callbacks. - -DEBUGGING - -If you are building a console application for research, we suggest -compiling with the option PM_CHECK_ERRORS. This will insert a -check for error return values at the end of each PortMidi -function. If an error is encountered, a text message is printed -using printf(), the user is asked to type ENTER, and then exit(-1) -is called to clean up and terminate the program. - -You should not use PM_CHECK_ERRORS if printf() does not work -(e.g. this is not a console application under Windows, or there -is no visible console on some other OS), and you should not use -PM_CHECK_ERRORS if you intend to recover from errors rather than -abruptly terminate the program. - -The Windows version (and perhaps others) also offers a DEBUG -compile-time option. See README_WIN.txt. +# PortMidi + +The cross-platform PortMidi library is included with the PureData distribution +so that Pd can be built without any main external dependencies. + +It is built as a libtool convenience library when using autotools to build Pd: + + ./configure + make + +For more info on PortMidi, see http://portmedia.sourceforge.net/portmidi + +## Updating + +If you want to update to a newer version of PortMidi, simply use the +"update.sh" script: + + cd portmidi + + # update to latest PortMidi svn trunk + ./update.sh + + # update to a specific trunk revision + ./update.sh 239 + +You *may* need to add or remove source file or header lines in the Makefile.am, +if the source or include files have changed in PortMidi. + +## System-installed PortMidi + +As a second option, you can build Pd using a system-installed PortMidi via: + + ./configure --without-local-portmidi + make + +## Patches + +There may be custom patches to apply to the PortMidi sources in the "patches" +directory which are applied by the "update.sh" script automatically using: + + patch -p0 < ../patches/some_unreleased_fix.patch + +To generate a patch file from a PortMidi svn checkout: + + svn diff > some_newfix.patch + +## macOS LIMIT_RATE + +Newer versions of Portmidi include automatic message rate limiting for macOS +which has a rather low buffer size when using the internal IAC virtual device +for message routing and could lead to messages being dropped. As this limit +may affect timing and cause issues when sending *large* amounts of MIDI data, +it is disabled when building the Portmidi sources included with Pd. + +If you want to re-enable the rate limit, set the LIMIT_RATE define before +building: + + ./configure CFLAGS="-DLIMIT_RATE=1" diff --git a/portmidi/patches/mac_limit_rate_override.patch b/portmidi/patches/mac_limit_rate_override.patch new file mode 100644 index 0000000000..6299943794 --- /dev/null +++ b/portmidi/patches/mac_limit_rate_override.patch @@ -0,0 +1,121 @@ +Index: pm_mac/pmmacosxcm.c +=================================================================== +--- pm_mac/pmmacosxcm.c (revision 234) ++++ pm_mac/pmmacosxcm.c (working copy) +@@ -63,7 +63,9 @@ + + Note that this distorts accurate timestamps somewhat. + */ ++#ifndef LIMIT_RATE + #define LIMIT_RATE 1 ++#endif + + #define SYSEX_BUFFER_SIZE 128 + +@@ -107,11 +109,13 @@ + /* allow for running status (is running status possible here? -rbd): -cpr */ + unsigned char last_command; + int32_t last_msg_length; ++#if LIMIT_RATE + /* limit midi data rate (a CoreMidi requirement): */ + UInt64 min_next_time; /* when can the next send take place? */ + int byte_count; /* how many bytes in the next packet list? */ + Float64 us_per_host_tick; /* host clock frequency, units of min_next_time */ + UInt64 host_ticks_per_byte; /* host clock units per byte at maximum rate */ ++#endif + } midi_macosxcm_node, *midi_macosxcm_type; + + /* private function declarations */ +@@ -427,11 +431,13 @@ + m->packet = NULL; + m->last_command = 0; + m->last_msg_length = 0; ++#if LIMIT_RATE + m->min_next_time = 0; + m->byte_count = 0; + m->us_per_host_tick = 1000000.0 / AudioGetHostClockFrequency(); + m->host_ticks_per_byte = (UInt64) (1000000.0 / + (m->us_per_host_tick * MAX_BYTES_PER_S)); ++#endif + return pmNoError; + } + +@@ -477,6 +483,7 @@ + assert(endpoint); + if (m->packet != NULL) { + /* out of space, send the buffer and start refilling it */ ++ #if LIMIT_RATE + /* before we can send, maybe delay to limit data rate. OS X allows + * 15KB/s. */ + UInt64 now = AudioGetCurrentHostTime(); +@@ -484,10 +491,11 @@ + usleep((useconds_t) + ((m->min_next_time - now) * m->us_per_host_tick)); + } ++ m->min_next_time = now + m->byte_count * m->host_ticks_per_byte; ++ m->byte_count = 0; ++ #endif + macHostError = MIDISend(portOut, endpoint, m->packetList); + m->packet = NULL; /* indicate no data in packetList now */ +- m->min_next_time = now + m->byte_count * m->host_ticks_per_byte; +- m->byte_count = 0; + if (macHostError != noErr) goto send_packet_error; + } + return pmNoError; +@@ -514,7 +522,9 @@ + m->packet = MIDIPacketListAdd(m->packetList, sizeof(m->packetBuffer), + m->packet, timestamp, messageLength, + message); ++#if LIMIT_RATE + m->byte_count += messageLength; ++#endif + if (m->packet == NULL) { + /* out of space, send the buffer and start refilling it */ + /* make midi->packet non-null to fool midi_write_flush into sending */ +@@ -567,13 +577,15 @@ + messageLength = midi_length(what); + + /* make sure we go foreward in time */ +- if (timestamp < m->min_next_time) timestamp = m->min_next_time; +- +- #ifdef LIMIT_RATE +- if (timestamp < m->last_time) +- timestamp = m->last_time; ++ if (timestamp < m->last_time) ++ timestamp = m->last_time; ++#if LIMIT_RATE ++ if (timestamp < m->min_next_time) ++ timestamp = m->min_next_time; + m->last_time = timestamp + messageLength * m->host_ticks_per_byte; +- #endif ++#else ++ m->last_time = timestamp; ++#endif + + /* Add this message to the packet list */ + return send_packet(midi, message, messageLength, timestamp); +@@ -613,15 +625,17 @@ + assert(m); + + /* make sure we go foreward in time */ ++ if (m->sysex_timestamp < m->last_time) ++ m->sysex_timestamp = m->last_time; ++ ++#if LIMIT_RATE + if (m->sysex_timestamp < m->min_next_time) + m->sysex_timestamp = m->min_next_time; +- +- #ifdef LIMIT_RATE +- if (m->sysex_timestamp < m->last_time) +- m->sysex_timestamp = m->last_time; +- m->last_time = m->sysex_timestamp + m->sysex_byte_count * +- m->host_ticks_per_byte; +- #endif ++ m->last_time = m->sysex_timestamp + m->sysex_byte_count * ++ m->host_ticks_per_byte; ++#else ++ m->last_time = m->sysex_timestamp; ++#endif + + /* now send what's in the buffer */ + err = send_packet(midi, m->sysex_buffer, m->sysex_byte_count, diff --git a/portmidi/patches/mac_midifix_and_nameencoding.patch b/portmidi/patches/mac_midifix_and_nameencoding.patch new file mode 100644 index 0000000000..9960296e5d --- /dev/null +++ b/portmidi/patches/mac_midifix_and_nameencoding.patch @@ -0,0 +1,99 @@ +Index: pm_mac/pmmacosxcm.c +=================================================================== +--- pm_mac/pmmacosxcm.c (revision 234) ++++ pm_mac/pmmacosxcm.c (working copy) +@@ -70,6 +70,7 @@ + #define VERBOSE_ON 1 + #define VERBOSE if (VERBOSE_ON) + ++#define MIDI_CLOCK 0xf8 + #define MIDI_SYSEX 0xf0 + #define MIDI_EOX 0xf7 + #define MIDI_STATUS_MASK 0x80 +@@ -199,9 +200,16 @@ + /* since there's no more data, we're done */ + return; + } +- m->last_msg_length = cur_message_length; +- m->last_command = cur_packet_data[0]; +- switch (cur_message_length) { ++ if (cur_packet_data[0] < MIDI_SYSEX) { ++ /* channel messages allow running status */ ++ m->last_command = cur_packet_data[0]; ++ m->last_msg_length = cur_message_length; ++ } else if(cur_packet_data[0] < MIDI_CLOCK) { ++ /* system messages clear running status */ ++ m->last_command = 0; ++ m->last_msg_length = 0; ++ } ++ switch (cur_message_length) { + case 1: + event->message = Pm_Message(cur_packet_data[0], 0, 0); + break; +@@ -220,8 +228,8 @@ + return; /* give up on packet if continued after assert */ + } + pm_read_short(midi, event); +- remaining_length -= m->last_msg_length; +- cur_packet_data += m->last_msg_length; ++ remaining_length -= cur_message_length; ++ cur_packet_data += cur_message_length; + } else if (m->last_msg_length > remaining_length + 1) { + /* we have running status, but not enough data */ + #ifdef DEBUG +@@ -836,49 +844,16 @@ + + char* cm_get_full_endpoint_name(MIDIEndpointRef endpoint) + { +-#ifdef OLDCODE +- MIDIEntityRef entity; +- MIDIDeviceRef device; +- +- CFStringRef endpointName = NULL; +- CFStringRef deviceName = NULL; +-#endif +- CFStringRef fullName = NULL; +- CFStringEncoding defaultEncoding; + char* newName; ++ CFStringRef fullName = ConnectedEndpointName(endpoint); + +- /* get the default string encoding */ +- defaultEncoding = CFStringGetSystemEncoding(); +- +- fullName = ConnectedEndpointName(endpoint); +- +-#ifdef OLDCODE +- /* get the entity and device info */ +- MIDIEndpointGetEntity(endpoint, &entity); +- MIDIEntityGetDevice(entity, &device); +- +- /* create the nicely formated name */ +- MIDIObjectGetStringProperty(endpoint, kMIDIPropertyName, &endpointName); +- MIDIObjectGetStringProperty(device, kMIDIPropertyName, &deviceName); +- if (deviceName != NULL) { +- fullName = CFStringCreateWithFormat(NULL, NULL, CFSTR("%@: %@"), +- deviceName, endpointName); +- } else { +- fullName = endpointName; +- } +-#endif + /* copy the string into our buffer */ +- newName = (char *) malloc(CFStringGetLength(fullName) + 1); +- CFStringGetCString(fullName, newName, CFStringGetLength(fullName) + 1, +- defaultEncoding); +- +- /* clean up */ +-#ifdef OLDCODE +- if (endpointName) CFRelease(endpointName); +- if (deviceName) CFRelease(deviceName); +-#endif +- if (fullName) CFRelease(fullName); ++ CFIndex length = CFStringGetLength(fullName) + 1; ++ const CFIndex maxSize = CFStringGetMaximumSizeForEncoding(length, kCFStringEncodingUTF8) + 1; ++ newName = (char *) malloc(maxSize); ++ CFStringGetCString(fullName, newName, maxSize, kCFStringEncodingUTF8); + ++ if (fullName) CFRelease(fullName); + return newName; + } + diff --git a/portmidi/pm_linux/README_LINUX.txt b/portmidi/pm_linux/README_LINUX.txt deleted file mode 100755 index cbc84bcaee..0000000000 --- a/portmidi/pm_linux/README_LINUX.txt +++ /dev/null @@ -1,168 +0,0 @@ -README_LINUX.txt for PortMidi -Roger Dannenberg -6 Dec 2012 - -Contents: - To make PortMidi - The pmdefaults program - Setting LD_LIBRARY_PATH - A note about amd64 - Using autoconf - Using configure - Changelog - - -To make PortMidi, you need cmake and the Java SDK. -Go back up to the portmidi directory and type: - -ccmake . - -Type 'c' (configure) and then 'g' (generate). You may have -to manually set JAVA_INCLUDE_PATH and JAVA_JVM_LIBRARY -by typing 't' (toggle to advanced mode) and using the -editor to change the fields. You can find possible values -for JAVA_INCLUDE_PATH by typing "locate jni.h", and for -JAVA_JVM_LIBRARY by typing locate libjvm". - -Alternatively, try - export JAVA_HOME=/usr/lib/jvm/java-8-oracle/ -before running ccmake ., and note that your JAVA_HOME -may be different. - -You also need JAVA_INCLUDE_PATH2, but this will normally -be set automatically after you set JAVA_INCLUDE_PATH and -run "configure" (type "c" to ccmake). Normally, -JAVA_INCLUDE_PATH2 is the linux subdirectory within -JAVA_INCLUDE_PATH. - -Notice that the CMAKE_BUILD_TYPE can be Debug or Release. -Stick with Release if you are not debugging. - -After successfully generating make files with ccmake, you -can run make: - -make - -The Makefile will build all test programs and the portmidi -library. For experimental software, -especially programs running from the command line, we -recommend using the Debug version -- it will terminate your -program and print a helpful message if any PortMidi -function returns an error code. (Released software should -check for error codes and handle them, but for quick, -non-critical projects, the automatic "print and die" -handling can save some work.) - -THE pmdefaults PROGRAM - -You should install pmdefaults. It provides a graphical interface -for selecting default MIDI IN and OUT devices so that you don't -have to build device selection interfaces into all your programs -and so users have a single place to set a preference. - -Follow the instructions above to run ccmake, making sure that -CMAKE_BUILD_TYPE is Release. Run make as described above. Then: - -sudo make install - -This will install PortMidi libraries and the pmdefault program. -You must alos have the environment variable LD_LIBRARY_PATH set -to include /usr/local/lib (where libpmjni.so is installed). - -Now, you can run pmdefault. - - -SETTING LD_LIBRARY_PATH - -pmdefaults will not work unless LD_LIBRARY_PATH includes a -directory (normally /usr/local/lib) containing libpmjni.so, -installed as described above. - -To set LD_LIBRARY_PATH, you might want to add this to your -~/.profile (if you use the bash shell): - -LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib -export LD_LIBRARY_PATH - - -A NOTE ABOUT AMD64: - -When compiling portmidi under linux on an AMD64, I had to add the -fPIC -flag to the gcc flags. - -Reason: when trying to build John Harrison's pyPortMidi gcc bailed out -with this error: - -./linux/libportmidi.a(pmlinux.o): relocation R_X86_64_32 against `a local symbol' can not be used when making a shared object; recompile with -fPIC -./linux/libportmidi.a: could not read symbols: Bad value -collect2: ld returned 1 exit status -error: command 'gcc' failed with exit status 1 - -What they said: -http://www.gentoo.org/proj/en/base/amd64/howtos/index.xml?part=1&chap=3 -On certain architectures (AMD64 amongst them), shared libraries *must* -be "PIC-enabled". - -USING AUTOCONF - -Audacity (the audio editor ) uses an autoconf-based build system, and -the files are also included in the PortMidi download. The associated -files are tested only in the context of building Audacity, but if you -really prefer autoconf to cmake or want to include portmidi in another -autoconf-based project (like Audacity), maybe this will be useful. - -The files are: configure.ac, portmidi-uninstalled.pc.in, portmidi.pc.in, - and everything in autotools/. - -To build from these files, run aclocal, which will produce - aclocal.m4 and autom4te.cache - -Run autoconf, which will produce - configure - -Run automake, which will produce - Makefile.in - -Now that you have a configure and Makefile.in, -continue with the next section. - - -USING CONFIGURE - -Run ./configure to produce: - config.status - Makefile - portmidi.pc - portmidi-uninstalled.pc - - -Finally, run make to create - - - -CHANGELOG - -6-dec-2012 Roger B. Dannenberg - Copied notes on Autoconf from Audacity sources - -22-jan-2010 Roger B. Dannenberg - Updated instructions about Java paths - -14-oct-2009 Roger B. Dannenberg - Using CMake now for building and configuration - -29-aug-2006 Roger B. Dannenberg - Fixed PortTime to join with time thread for clean exit. - -28-aug-2006 Roger B. Dannenberg - Updated this documentation. - -08-Jun-2004 Roger B. Dannenberg - Updated code to use new system abstraction. - -12-Apr-2003 Roger B. Dannenberg - Fixed pm_test/test.c to filter clocks and active messages. - Integrated changes from Clemens Ladisch: - cleaned up pmlinuxalsa.c - record timestamp on sysex input - deallocate some resources previously left open diff --git a/portmidi/pm_mac/Makefile.osx b/portmidi/pm_mac/Makefile.osx deleted file mode 100755 index 9f0c922201..0000000000 --- a/portmidi/pm_mac/Makefile.osx +++ /dev/null @@ -1,131 +0,0 @@ -# MAKEFILE FOR PORTMIDI - -# Roger B. Dannenberg -# Sep 2009 - -# NOTE: you can use -# make -f pm_osx/Makefile.osx configuration=Release -# to override the default Debug configuration -configuration=Release - -PF=/usr/local - -# For debugging, define PM_CHECK_ERRORS -ifeq ($(configuration),Release) - CONFIG = Release -else - CONFIG = Debug -endif - -current: all - -all: $(CONFIG)/CMakeCache.txt - cd $(CONFIG); make - -$(CONFIG)/CMakeCache.txt: - rm -f $(CONFIG)/CMakeCache.txt - mkdir -p $(CONFIG) - cd $(CONFIG); cmake .. -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=$(CONFIG) - - -**** For instructions: make -f pm_mac/Makefile.osx help ****\n' - -help: - echo $$'\n\n\ -This is help for portmidi/pm_mac/Makefile.osx\n\n\ -Installation path for dylib is $(PF)\n\ -To build Release version libraries and test applications,\n \ -make -f pm_mac/Makefile.osx\n\ -To build Debug version libraries and test applications,\n \ -make -f pm_mac/Makefile.osx configuration=Debug\n\ -To install universal dynamic library,\n \ -sudo make -f pm_mac/Makefile.osx install\n\ -To install universal dynamic library with xcode,\n \ -make -f pm_mac/Makefile.osx install-with-xcode\n\ -To make PmDefaults Java application,\n \ -make -f pm_mac/Makefile.osx pmdefaults\n\n \ -configuration = $(configuration)\n' - - -clean: - rm -f *.o *~ core* */*.o */*/*.o */*~ */core* pm_test/*/pm_dll.dll - rm -f *.opt *.ncb *.plg pm_win/Debug/pm_dll.lib pm_win/Release/pm_dll.lib - rm -f pm_test/*.opt pm_test/*.ncb - rm -f pm_java/pmjni/*.o pm_java/pmjni/*~ pm_java/*.h - rm -rf Release/CMakeFiles Debug/CMakeFiles - rm -rf pm_mac/pmdefaults/lib pm_mac/pmdefaults/src - -cleaner: clean - rm -rf pm_mac/build - rm -rf pm_mac/Debug pm_mac/Release pm_test/Debug pm_test/Release - rm -f Debug/*.dylib Release/*.dylib - rm -f pm_java/pmjni/Debug/*.jnilib - rm -f pm_java/pmjni/Release/*.jnilib - -cleanest: cleaner - rm -f Debug/CMakeCache.txt Release/CMakeCache.txt - rm -f CMakeCache.txt - rm -f Debug/libportmidi_s.a Release/libportmidi_s.a - rm -f pm_test/Debug/test pm_test/Debug/sysex pm_test/Debug/midithread - rm -f pm_test/Debug/latency pm_test/Debug/midithru - rm -f pm_test/Debug/qtest pm_test/Debug/mm - rm -f pm_test/Release/test pm_test/Release/sysex pm_test/Release/midithread - rm -f pm_test/Release/latency pm_test/Release/midithru - rm -f pm_test/Release/qtest pm_test/Release/mm - rm -f pm_java/*/*.class - rm -f pm_java/pmjni/jportmidi_JPortMidiApi_PortMidiStream.h - -backup: cleanest - cd ..; zip -r portmidi.zip portmidi - -install: porttime/porttime.h pm_common/portmidi.h \ - $(CONFIG)/libportmidi.dylib - install porttime/porttime.h $(PF)/include/ - install pm_common/portmidi.h $(PF)/include - install $(CONFIG)/libportmidi.dylib $(PF)/lib/ - -# note - this uses xcode to build and install portmidi universal binaries -install-with-xcode: - sudo xcodebuild -project pm_mac/pm_mac.xcodeproj \ - -configuration Release install DSTROOT=/ - -##### build pmdefault ###### - -pm_java/pmjni/jportmidi_JPortMidiApi.h: pm_java/jportmidi/JPortMidiApi.class - cd pm_java; javah jportmidi.JPortMidiApi - mv pm_java/jportmidi_JportMidiApi.h pm_java/pmjni - -JAVASRC = pmdefaults/PmDefaultsFrame.java \ - pmdefaults/PmDefaults.java \ - jportmidi/JPortMidiApi.java jportmidi/JPortMidi.java \ - jportmidi/JPortMidiException.java - -# this compiles ALL of the java code -pm_java/jportmidi/JPortMidiApi.class: $(JAVASRC:%=pm_java/%) - cd pm_java; javac $(JAVASRC) - -$(CONFIG)/libpmjni.dylib: - mkdir -p $(CONFIG) - cd $(CONFIG); make -f ../pm_mac/$(MAKEFILE) - -pmdefaults: $(CONFIG)/libpmjni.dylib pm_java/jportmidi/JPortMidiApi.class -ifeq ($(CONFIG),Debug) - echo "Error: you cannot build pmdefaults in a Debug configuration \n\ - You should use configuration=Release in the Makefile command line. " - @exit 2 -endif - xcodebuild -project pm_mac/pm_mac.xcodeproj \ - -configuration Release -target PmDefaults - echo "pmdefaults java application is made" - -###### test plist reader ####### -PLHDR = pm_mac/readbinaryplist.h -PLSRC = pm_mac/plisttest.c pm_mac/readbinaryplist.c -pm_mac/plisttest: $(PLHDR) $(PLSRC) - cc $(VFLAGS) -Ipm_mac \ - -I/Developer/Headers/FlatCarbon \ - -I/System/Library/Frameworks/CoreFoundation.framework/Headers \ - -I/System/Library/Frameworks/CoreServices.framework/Headers \ - $(PLSRC) -o pm_mac/$(CONFIG)/plisttest \ - -framework CoreFoundation -framework CoreServices - diff --git a/portmidi/pm_mac/README_MAC.txt b/portmidi/pm_mac/README_MAC.txt deleted file mode 100644 index 3541b512f3..0000000000 --- a/portmidi/pm_mac/README_MAC.txt +++ /dev/null @@ -1,166 +0,0 @@ -README_MAC.txt for PortMidi -Roger Dannenberg -20 nov 2009 -revised 20 Sep 2010 for Xcode 4.3.2 and CMake 2.8.8 - -To build PortMidi for Mac OS X, you must install Xcode and -CMake. - -CMake can build either command-line Makefiles or Xcode projects. -These approaches are described in separate sections below. - -==== CLEANING UP ==== -(Skip this for now, but later you might want start from a clean -slate.) - -Start in the portmedia/portmidi directory. - -make -f pm_mac/Makefile.osx clean - -will remove .o, CMakeFiles, and other intermediate files. - -Using "cleaner" instead of "clean" will also remove jni-related -intermediate files. - -Using "cleanest" instead of "clean" or "cleaner" will also remove -application binaries and the portmidi libraries. (It will not -uninstall anything, however.) - -==== USING CMAKE (AND COMMAND LINE TOOLS) ==== - -Start in the portmedia/portmidi directory. - -make -f pm_mac/Makefile.osx - -(Begin note: make will invoke cmake to build a Makefile and then make to -build portmidi. This extra level allows you to correctly build -both Release and Debug versions. Release is the default, so to get -the Debug version, use: - -make -f pm_mac/Makefile.osx configuration=Debug -) - -Release version executables and libraries are now in - portmedia/portmidi/Release - -Debug version executables and libraries are created in - portmedia/portmidi/Debug -The Debug versions are compiled with PM_CHECK_ERRORS which -prints an error message and aborts when an error code is returned -by PortMidi functions. This is useful for small command line -applications. Otherwise, you should check and handle error returns -in your program. - -You can install portmidi as follows: - -cd Release; sudo make install - -This will install /usr/local/include/{portmidi.h, porttime.h} -and /usr/local/lib/{libportmidi.dylib, libportmidi_s.a, libpmjni.dylib} - -You should now make the pmdefaults.app: - -make -f pm_mac/Makefile.osx pmdefaults - -NOTE: pmdefaults.app will be in pm_mac/Release/. - -Please copy pmdefaults.app to your Applications folder or wherever -you would normally expect to find it. - -==== USING CMAKE TO BUILD Xcode PROJECT ==== - -Before you can use Xcode, you need a portmidi.xcodeproj file, -and this is created with CMake. - -CMake builds a location-dependent Xcode project, so unfortunately -it is not easy to provide an Xcode project that is ready to use. -Therefore, you should make your own. Once you have it, you can -use it almost like any other Xcode project, and you will not have -to go back to CMake. - -(1) Install CMake if you do not have it already. - -(2) Open portmedia/portmidi/CMakeLists.txt with CMake - -(3) Use Configure and Generate buttons -- for CMAKE_OSX_SYSROOT, use - /Developer/SDKs/MacOSX10.6.sdk (rather than 10.7) - -(4) This creates portmedia/portmidi/portmidi.xcodeproj. - -Note: You will also use pm_mac/pm_mac.xcodeproj, which -is not generated by CMake. - -(5) Open portmidi/portmidi.xcodeproj with Xcode and -build what you need. The simplest thing is to build the -ALL_BUILD target. The default will be to build the Debug -version, but you may want to change this to Release. - -NOTE: ALL_BUILD may report errors. Try simply building again -or rebuilding specific targets that fail until they build -without errors. There appears to be a race condition or -missing dependencies in the build system. - -The Debug version is compiled with PM_CHECK_ERRORS, and the -Release version is not. PM_CHECK_ERRORS will print an error -message and exit your program if any error is returned from -a call into PortMidi. - -CMake (currently) also creates MinSizRel and RelWithDebInfo -versions, but only because I cannot figure out how to disable -them. - -You will probably want the application PmDefaults, which sets -default MIDI In and Out devices for PortMidi. You may also -want to build a Java application using PortMidi. Since I have -not figured out how to use CMake to make an OS X Java application, -use pm_mac/pm_mac.xcodeproj as follows: - -(6) open pm_mac/pm_mac.xcodeproj - -(7) pm_java/pmjni/portmidi_JportmidiApi.h is needed -by libpmjni.jnilib, the Java native interface library. Since -portmidi_JportmidiApi.h is included with PortMidi, you can skip -to step 8, but if you really want to rebuild everything from -scratch, build the JPortMidiHeaders project first, and continue -with step 8: - -(8) If you did not build libpmjni.dylib using portmidi.xcodeproj, -do it now. (It depends on portmidi_JportmidiApi.h, and the -PmDefaults project depends on libpmjni.dylib.) - -(9) Returning to pm_mac.xcodeproj, build the PmDefaults program. - -(10) If you wish, copy pm_mac/build/Deployment/PmDefaults.app to -your applications folder. - -(11) If you want to install libportmidi.dylib, first make it with -Xcode, then - sudo make -f pm_mac/Makefile.osx install -This command will install /usr/local/include/{porttime.h, portmidi.h} -and /usr/local/lib/libportmidi.dylib -Note that the "install" function of xcode creates portmidi/Release -and does not install the library to /usr/local/lib, so please use -the command line installer. - - -CHANGELOG - -20-Sep-2010 Roger B. Dannenberg - Adapted to Xcode 3.2.4 -20-Nov-2009 Roger B. Dannenberg - Added some install instructions -26-Sep-2009 Roger B. Dannenberg - More changes for using CMake, Makefiles, XCode -20-Sep-2009 Roger B. Dannenberg - Modifications for using CMake -14-Sep-2009 Roger B. Dannenberg - Modifications for using CMake -17-Jan-2007 Roger B. Dannenberg - Explicit instructions for Xcode -15-Jan-2007 Roger B. Dannenberg - Changed instructions because of changes to Makefile.osx -07-Oct-2006 Roger B. Dannenberg - Added directions for xcodebuild -29-aug-2006 Roger B. Dannenberg - Updated this documentation. - diff --git a/portmidi/pm_mac/pmdefaults/make/build.xml b/portmidi/pm_mac/pmdefaults/make/build.xml deleted file mode 100644 index bd08c68208..0000000000 --- a/portmidi/pm_mac/pmdefaults/make/build.xml +++ /dev/null @@ -1,87 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - "Nothing to do for install-headers phase" - - diff --git a/portmidi/pm_mac/pmdefaults/make/find-classrefs.sh b/portmidi/pm_mac/pmdefaults/make/find-classrefs.sh deleted file mode 100755 index 2217580d0d..0000000000 --- a/portmidi/pm_mac/pmdefaults/make/find-classrefs.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/bin/sh - -# Prints all class references made by all classes in a Jar file -# Depends on the output formatting of javap - -# create a temporary working directory -dir=`mktemp -d $TMPDIR/classrefs.XXXXXX` - -asm_dump="$dir/asm_dump" -all_classes="$dir/all_classes" - -# for each class in a Jar file, dump the full assembly -javap -c -classpath "$1" `/usr/bin/jar tf "$1" | grep "\.class" | sort | xargs | sed -e 's/\.class//g'` > $asm_dump - -# dump the initial list of all classes in the Jar file -/usr/bin/jar tf $1 | grep "\.class" | sed -e 's/\.class//g' >> $all_classes - -# dump all static class references -cat $asm_dump | grep //class | awk -F"//class " '{print $2}' | sort | uniq >> $all_classes - -# dump all references to classes made in methods -cat $asm_dump | grep //Method | awk -F"//Method " '{print $2}' | sort | uniq | grep "\." | awk -F"." '{print $1}' | sort | uniq >> $all_classes - -# dump all references to classes by direct field access -cat $asm_dump | grep //Field | awk -F"//Field " '{print $2}' | sort | uniq | grep "\:L" | awk -F"\:L" '{print $2}' | sort | uniq | awk -F"\;" '{print $1}' >> $all_classes - -# sort and reformat -sort $all_classes | uniq | grep -v "\"" | sed -e 's/\//\./g' - -# cleanup -rm -rf $dir diff --git a/portmidi/pm_mac/pmdefaults/resources/English.lproj/Credits.rtf b/portmidi/pm_mac/pmdefaults/resources/English.lproj/Credits.rtf deleted file mode 100644 index 18f83781e7..0000000000 --- a/portmidi/pm_mac/pmdefaults/resources/English.lproj/Credits.rtf +++ /dev/null @@ -1,14 +0,0 @@ -{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf320 -{\fonttbl\f0\fswiss\fcharset0 Helvetica;} -{\colortbl;\red255\green255\blue255;} -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural - -\f0\b\fs24 \cf0 Author: -\b0 \ - Roger B. Dannenberg\ -\ - -\b With special thanks to: -\b0 \ - National Science Foundation\ -} \ No newline at end of file diff --git a/portmidi/pm_mac/pmdefaults/resources/English.lproj/InfoPlist.strings b/portmidi/pm_mac/pmdefaults/resources/English.lproj/InfoPlist.strings deleted file mode 100644 index c7e5600f98..0000000000 Binary files a/portmidi/pm_mac/pmdefaults/resources/English.lproj/InfoPlist.strings and /dev/null differ diff --git a/portmidi/pm_mac/pmdefaults/resources/Info.plist b/portmidi/pm_mac/pmdefaults/resources/Info.plist deleted file mode 100644 index 58bedb4501..0000000000 --- a/portmidi/pm_mac/pmdefaults/resources/Info.plist +++ /dev/null @@ -1,40 +0,0 @@ - - - - - CFBundleDevelopmentRegion - English - CFBundleExecutable - JavaApplicationStub - CFBundleIconFile - pmdefaults.icns - CFBundleIdentifier - - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - PmDefaults - CFBundlePackageType - APPL - CFBundleSignature - ???? - CFBundleVersion - 1.0 - CFBundleShortVersionString - 1.0 - Java - - ClassPath - $JAVAROOT/pmdefaults.jar - JVMVersion - 1.5+ - MainClass - pmdefaults.PmDefaults - Properties - - apple.laf.useScreenMenuBar - true - - - - diff --git a/portmidi/pm_mac/pmdefaults/resources/Manifest b/portmidi/pm_mac/pmdefaults/resources/Manifest deleted file mode 100644 index 5dee9b0dc1..0000000000 --- a/portmidi/pm_mac/pmdefaults/resources/Manifest +++ /dev/null @@ -1 +0,0 @@ -Main-Class: pmdefaults/PmDefaults diff --git a/portmidi/pm_win/README_WIN.txt b/portmidi/pm_win/README_WIN.txt deleted file mode 100755 index abb3a08385..0000000000 --- a/portmidi/pm_win/README_WIN.txt +++ /dev/null @@ -1,346 +0,0 @@ -File: PortMidi Win32 Readme -Author: Belinda Thom, June 16 2002 -Revised by: Roger Dannenberg, June 2002, May 2004, June 2007, - Umpei Kurokawa, June 2007 - Roger Dannenberg Sep 2009 - -Contents: - Using Portmidi - To Install Portmidi - To Compile Portmidi - About Cmake - Using other versions of Visual C++ - To Create Your Own Portmidi Client Application - - - -============================================================================= -USING PORTMIDI: -============================================================================= - -Using Microsoft Visual C++ project files (provided with PortMidi), there -are two configurations of the PortMidi library. The Debug version is -intended for debugging, especially in a console application. The Debug -version enables some extra error checking and outputs some text as well -as a prompt to type ENTER so that you don't lose any debugging text when -the program exits. You can turn off this extra debugging info by taking -out the compile-time definition for DEBUG. (But leave _DEBUG, which I -think is important for compiling in Debug mode.) This debugging version also -defines PM_CHECK_ERRORS, which forces a check for error return codes from -every call to PortMidi. You can disable this checking (especially if you -want to handle error codes in your own way) by removing PM_CHECK_ERRORS -from the predefined symbols list in the Settings dialog box. - -PortMidi is designed to run without a console and should work perfectly -well within a graphical user interface application. The Release version -is both optimized and lacking the debugging printout code of the Debug -version. - -Read the portmidi.h file for PortMidi API details on using the PortMidi API. -See <...>\pm_test\test.c and other files in pm_test for usage examples. - -============================================================================= -TO INSTALL PORTMIDI: -============================================================================= -1) get current source from the portmedia project at SourceForge.net - -2) copy source into directory: <...>\portmidi - -============================================================================= -TO COMPILE PORTMIDI: -============================================================================= - -3) cd to or open the portmidi directory - -4) start or click on the portmidi.sln workspace (note, all Visual Studio - files are built by CMake. If you need a different version or have - problems with paths, try rebuilding the Visual Studio project files - using CMake -- See "Using other versions of visual C++" below.) - Apparently, CMake adds a linker option (see Properties:Configuration - Properties:Linker:Command Line:Additional Options) for the machine - type (x86 or x64) you may have to remove to avoid the compiler error: - "error LNK1112: module machine type 'X86' conflicts with target machine - type 'x64'" - -5) the following projects exist within this workspace: - - portmidi-static, portmidi-dynamic (versions of the PortMidi library) - - test (simple midi I/O testing) - - midithread (an example illustrating low-latency MIDI processing - using a dedicated low-latency thread) - - sysex (simple sysex message I/O testing) - - latency (uses porttime to measure system latency) - - midithru (an example illustrating software MIDI THRU) - - qtest (a test of the new multicore-safe queue implementation) - - mm (allows monitoring of midi messages) - - pmjni (a dll to provide an interface to PortMidi for Java) - -6) set the Java SDK path using one of two methods: - Method 1: open portmidi/CMakeLists.txt with CMake, configure, and - generate -- this should find the Java SDK path and update your - solution and project files - Method 2: (does not require CMake): - - open the pmjni project properties - - visit Configuration Properties, C/C++, General - - find Additional Include Directories property and open the editor (...) - - at the end of the list, you will find two paths mentioning Java - - these are absolute paths to the Java SDK; you'll need to install the - Java SDK (from Sun) and update these directories in order to build - this project. - - similarly, the Linker->Input->Additional Dependencies list has a - path to the jvm.lib file, which needs to be correct(ed). - -6) use Build->Batch Build ... to build everything in the project. If a - build fails, try building again. There seem to be some missing - dependencies, so you may have to "ALL_BUILD" several times before - everything builds successfully or build libraries first. - -7) The settings for these projects were distributed in the zip file, so - compile should just work. - -8) run test project; use the menu that shows up from the command prompt to - test that portMidi works on your system. tests include: - - verify midi output works - - verify midi input works - -9) run other projects if you wish: sysex, latency, midithread, mm, - qtest, midithru - -10) compile the java code: - - cd pm_java - - make.bat - + If there is a problem running javac, note that you must have - a path to javac.exe on your PATH environment variable. Edit - your path (in Vista) using Control Panel > User Accounts > - User Accounts > Change my environment variables; then select - Path and click Edit... After changing, you will have to - restart the command window to see any effect. - + In Vista, you may get a warning about running - UpdateRsrcJavaExe.exe. This is called by make.bat, and you - should allow the program to run. - + Note that make.bat does not build pmjni\jportmidi_JPortMidiApi.h - because it is included in the distribution. You can rebuild it - from sources as follows: - cd pm_java - javah jportmidi.JPortMidiApi - move jportmidi_JPortMidiApi pmjni\jportmidi_JPortMidiApi.h - -11) you might wish to move pm_java/win32 to another location; run the - pmdefaults.exe program from the (entire) win32 directory to use - PmDefaults. This program let's you select default input/output - midi devices for PortMidi applications. - -============================================================================ -ABOUT CMAKE -============================================================================ - -cmake was used to generate .vcproj files. cmake embeds absolute paths -into .vcproj files, which makes the files non-portable to other systems. -To work around this problem, pm_win\clean_up_vcproj.bat can be used to -replace absolute paths with relative paths. To use it, you will need to -install gawk and set your search path to allow you to execute gawk, e.g. -my path includes "C:\Program Files\GnuWin32\bin;". You will also need to -edit pm_win\clean_up_vcproj.awk, replacing C:\Users\rbd\portmidi with -whatever absolute path cmake uses in your vcproj files. - -This is not a general or robust fix, but it seems to work with the -vcproj files currently created by CMake. - -============================================================================ -USING OTHER VERSIONS OF VISUAL C++ -============================================================================ - -You can use cmake to make Visual Studio solution and project files. -If you do not want to use the provided Version 9 project files, install -cmake, run it, set the "Where is the source code" box to your portmidi -directory, and click on Configure. A menu will allow you to choose the -Visual Studio project version you want. Click Configure once again, then -Generate, and you should be all set to open portmidi.sln. - -============================================================================ -TO CREATE YOUR OWN PORTMIDI CLIENT APPLICATION: -============================================================================ - -NOTE: this section needs to be reviewed and tested. My suggestion would -be to copy the test project file (test.dsp) and modify it. -RBD - -The easiest way is to start a new project w/in the portMidi workspace: - -1) To open new project: - - File->New->Projects - - Location: <...>\portmidi\ - - check Add to current workspace - - select Win32 Console Application (recommended for now) - - do *NOT* select the "make dependency" box (you will explicitly do this - in the next step) - - Click OK - - Select "An Empty Project" and click Finish - - In Visual C++ 2005 Express Edition, - - File->New->Projects - - Location: <...>\portmidi\ - - select Add to solution - - select CLR Empty project in CLR - - select Win32 Console Application in Win32 - - select Empty project in General - -2) Now this project will be the active project. Make it explicitly depend - on PortMidi dll: - - Project->Dependencies - - Click pm_dll - -3) add whatever files you wish to add to your new project, using portMidi - calls as desired (see USING PORTMIDI at top of this readme) - -4) when you include portMidi files, do so like this: - - #include "..\pm_common\portmidi.h" - - etc. - -5) build and run your project - -============================================================================ -DESIGN NOTES -============================================================================ - -PortMidi for Win32 exists as a simple static library, -with Win32-specific code in pmwin.c and MM-specific code in pmwinmm.c. - -Orderly cleanup after errors are encountered is based on a fixed order of -steps and state changes to reflect each step. Here's the order: - -To open input: - initialize return value to NULL - - allocate the PmInternal strucure (representation of PortMidiStream) - return value is (non-null) PmInternal structure - - allocate midi buffer - set buffer field of PmInternal structure - - call system-dependent open code - - allocate midiwinmm_type for winmm dependent data - set descriptor field of PmInternal structure - - open device - set handle field of midiwinmm_type structure - - allocate buffers - - start device - - return - - return - -SYSEX HANDLING -- the most complex, least exercised, and therefore most - buggy part of PortMidi (but maybe bugs are finally gone) - -There are three cases: simple output, stream output, input -Each must deal with: - 1. Buffer Initialization (creating buffers) - 2. Buffer Allocation (finding a free buffer) - 3. Buffer Fill (putting bytes in the buffer) - 4. Buffer Preparation (midiOutPrepare, etc.) - 5. Buffer Send (to Midi device) - 6. Buffer Receive (in callback) - 7. Buffer Empty (removing bytes from buffer) - 8. Buffer Free (returning to the buffer pool) - 9. Buffer Finalization (returning to heap) - -Here's how simple output handles sysex: - 1. Buffer Initialization (creating buffers) - allocated when code tries to write first byte to a buffer - the test is "if (!m->sysex_buffers[0]) { ... }" - this field is initialized to NULL when device is opened - the size is SYSEX_BYTES_PER_BUFFER - allocate_sysex_buffers() does the initialization - note that the actual size of the allocation includes - additional space for a MIDIEVENT (3 longs) which are - not used in this case - 2. Buffer Allocation (finding a free buffer) - see get_free_sysex_buffer() - cycle through m->sysex_buffers[] using m->next_sysex_buffer - to determine where to look next - if nothing is found, wait by blocking on m->sysex_buffer_signal - this is signaled by the callback every time a message is - received - 3. Buffer Fill (putting bytes in the buffer) - essentially a state machine approach - hdr->dwBytesRecorded is a position in message pointed to by m->hdr - keep appending bytes until dwBytesRecorded >= SYSEX_BYTES_PER_BUFFER - then send the message, reseting the state to initial values - 4. Buffer Preparation (midiOutPrepare, etc.) - just before sending in winmm_end_sysex() - 5. Buffer Send (to Midi device) - message is padded with zero at end (since extra space was allocated - this is ok) -- the zero works around a bug in (an old version of) - MIDI YOKE drivers - dwBufferLength gets dwBytesRecorded, and dwBytesRecorded gets 0 - uses midiOutLongMsg() - 6. Buffer Receive (in callback) - 7. Buffer Empty (removing bytes from buffer) - not applicable for output - 8. Buffer Free (returning to the buffer pool) - unprepare message to indicate that it is free - SetEvent on m->buffer_signal in case client is waiting - 9. Buffer Finalization (returning to heap) - when device is closed, winmm_out_delete frees all sysex buffers - -Here's how stream output handles sysex: - 1. Buffer Initialization (creating buffers) - same code as simple output (see above) - 2. Buffer Allocation (finding a free buffer) - same code as simple output (see above) - 3. Buffer Fill (putting bytes in the buffer) - essentially a state machine approach - m->dwBytesRecorded is a position in message - keep appending bytes until buffer is full (one byte to spare) - 4. Buffer Preparation (midiOutPrepare, etc.) - done before sending message - dwBytesRecorded and dwBufferLength are set in winmm_end_sysex - 5. Buffer Send (to Midi device) - uses midiStreamOutMsg() - 6. Buffer Receive (in callback) - 7. Buffer Empty (removing bytes from buffer) - not applicable for output - 8. Buffer Free (returning to the buffer pool) - unprepare message to indicate that it is free - SetEvent on m->buffer_signal in case client is waiting - 9. Buffer Finalization (returning to heap) - when device is closed, winmm_out_delete frees all sysex buffers - - -Here's how input handles sysex: - 1. Buffer Initialization (creating buffers) - two buffers are allocated in winmm_in_open - 2. Buffer Allocation (finding a free buffer) - same code as simple output (see above) - 3. Buffer Fill (putting bytes in the buffer) - not applicable for input - 4. Buffer Preparation (midiOutPrepare, etc.) - done before sending message -- in winmm_in_open and in callback - 5. Buffer Send (to Midi device) - uses midiInAddbuffer in allocate_sysex_input_buffer (called from - winmm_in_open) and callback - 6. Buffer Receive (in callback) - 7. Buffer Empty (removing bytes from buffer) - done without pause in loop in callback - 8. Buffer Free (returning to the buffer pool) - done by midiInAddBuffer in callback, no pointer to buffers - is retained except by device - 9. Buffer Finalization (returning to heap) - when device is closed, empty buffers are delivered to callback, - which frees them - -IMPORTANT: In addition to the above, PortMidi now has -"shortcuts" to optimize the transfer of sysex data. To enable -the optimization for sysex output, the system-dependent code -sets fields in the pmInternal structure: fill_base, fill_offset_ptr, -and fill_length. When fill_base is non-null, the system-independent -part of PortMidi is allowed to directly copy sysex bytes to -"fill_base[*fill_offset_ptr++]" until *fill_offset_ptr reaches -fill_length. See the code for details. - ------------ - -Additional notes on using VS 2005 (maybe this is obsolete now?): - -1) Make sure "Configuration: All Configurations" is selected in all of the following Properties modifications! - -2) In my case the project defaulted to compiling all .c files with the C++ compiler, which was disastrous. I had to go to set Properties for each file, to wit: Expand Configuration Properties, Expand C/C++, Select Advanced, set the Compile As popup to Compile as C Code (/TC). (For better or worse, the project I inherited has a bunch of .c files that rely on C++ features, so I couldn't reliably set this the project properties level.) - -3) While you're there, make sure that the C/C++ -> General -> "Compile with Common Language Runtime support" is set to "No Common Language Runtime support" (the C compiler *can't* support CLR, but VS won't do anything useful like automatically set the two options to match)-. - -4) I never got VS precompiled header thing to work sensibly, so I took the path of least resistance and turned PCH's off for all my files. Properties -> Configuration Properties -> C/C++ -> Precompiled Headers -> Create/Use Precompiled Header popup set to "Not Using Precompiled Headers". The compiler is reasonably fast even if it has to parse all the header files, so unless someone wants to explain VS's PCHs to me, the hell with it, I say. - diff --git a/portmidi/pm_win/clean_cmake.bat b/portmidi/pm_win/clean_cmake.bat deleted file mode 100644 index 6bf4b68e00..0000000000 --- a/portmidi/pm_win/clean_cmake.bat +++ /dev/null @@ -1,6 +0,0 @@ -del /Q ..\CMakeFiles -del /Q ..\CMakeCache.txt -del /Q ..\pm_test\CMakeFiles -del /Q ..\pm_common\CMakeFiles -del /Q ..\pm_dylib\CMakeFiles - diff --git a/portmidi/pm_win/clean_up_vcproj.awk b/portmidi/pm_win/clean_up_vcproj.awk deleted file mode 100644 index a3eadfcb84..0000000000 --- a/portmidi/pm_win/clean_up_vcproj.awk +++ /dev/null @@ -1,70 +0,0 @@ -# gawk script to convert CMake-generated Visual Studio projects into -# stand-alone project files -# -# Roger Dannenberg, October 2009 -# -# the result uses relative path names (so you can install the project on -# any machine and use it) -# -# NOTE: to run this, you must assign base_relative to the relative path -# from the vcproj file to portmidi, e.g. base_relative=.. or base_relative=. - -BEGIN { - state = "normal"; - #=================IMPORTANT==================== - # change the following path to the path in which - # the CMakeLists.txt file resides: - base_path = "C:\\\\Users\\\\rbd\\\\portmedia\\\\portmidi"; - #============================================== - - base_path_2 = base_path; - gsub("\\\\\\\\", "/", base_path_2) - cmake_stuff = 0; # flag to print ... text -} -# this case removes CMake phases from project -state == "cmakelists" { - # print "IN CMAKELISTS " - file_text = file_text "\n" $0 # collect the ... section - if (index($0, "CMakeLists.txt") > 0) { - cmake_stuff = 1 # remember to delete this ... section - } - - if (index($0, "") > 0) { - state = "normal"; - if (cmake_stuff == 0) { - gsub(base_path, base_relative, file_text) - gsub(base_path_2, base_relative, file_text) - print file_text; - } - cmake_stuff = 0; - }; - next -} - -# this is the normal case, not in buildPhases list -state == "normal" { - # print "NOT IN BUILD PHASES" - # take out all the absolute paths - gsub(base_path, base_relative, $0); - gsub(base_path_2, base_relative, $0); - # special processing for ... text: - if ($0 ~ " portmidi-static.vcproj -del portmidi-static.vcproj-cmake -echo portmidi-static - -rename pmjni.vcproj pmjni.vcproj-cmake -gawk -f ..\pm_win\clean_up_vcproj.awk -v base_relative=.. pmjni.vcproj-cmake > pmjni.vcproj -del pmjni.vcproj-cmake -echo pmjni - -cd ../pm_dylib - -rename portmidi-dynamic.vcproj portmidi-dynamic.vcproj-cmake -gawk -f ..\pm_win\clean_up_vcproj.awk -v base_relative=.. portmidi-dynamic.vcproj-cmake > portmidi-dynamic.vcproj -del portmidi-dynamic.vcproj-cmake -echo portmidi-dynamic - -cd ..\pm_test - -rename latency.vcproj latency.vcproj-cmake -gawk -f ..\pm_win\clean_up_vcproj.awk -v base_relative=.. latency.vcproj-cmake > latency.vcproj -del latency.vcproj-cmake -echo latency - -rename midiclock.vcproj midiclock.vcproj-cmake -gawk -f ..\pm_win\clean_up_vcproj.awk -v base_relative=.. midiclock.vcproj-cmake > midiclock.vcproj -del midiclock.vcproj-cmake -echo midiclock - -rename midithread.vcproj midithread.vcproj-cmake -gawk -f ..\pm_win\clean_up_vcproj.awk -v base_relative=.. midithread.vcproj-cmake > midithread.vcproj -del midithread.vcproj-cmake -echo midithread - -rename midithru.vcproj midithru.vcproj-cmake -gawk -f ..\pm_win\clean_up_vcproj.awk -v base_relative=.. midithru.vcproj-cmake > midithru.vcproj -del midithru.vcproj-cmake -echo midithru - -rename mm.vcproj mm.vcproj-cmake -gawk -f ..\pm_win\clean_up_vcproj.awk -v base_relative=.. mm.vcproj-cmake > mm.vcproj -del mm.vcproj-cmake -echo mm - -rename qtest.vcproj qtest.vcproj-cmake -gawk -f ..\pm_win\clean_up_vcproj.awk -v base_relative=.. qtest.vcproj-cmake > qtest.vcproj -del qtest.vcproj-cmake -echo qtest - -rename sysex.vcproj sysex.vcproj-cmake -gawk -f ..\pm_win\clean_up_vcproj.awk -v base_relative=.. sysex.vcproj-cmake > sysex.vcproj -del sysex.vcproj-cmake -echo sysex - -rename test.vcproj test.vcproj-cmake -gawk -f ..\pm_win\clean_up_vcproj.awk -v base_relative=.. test.vcproj-cmake > test.vcproj -del test.vcproj-cmake - -cd .. -echo test - -rename ALL_BUILD.vcproj ALL_BUILD.vcproj-cmake -gawk -f pm_win\clean_up_vcproj.awk -v base_relative=. ALL_BUILD.vcproj-cmake > ALL_BUILD.vcproj -del ALL_BUILD.vcproj-cmake -echo ALL_BUILD - -rename ZERO_CHECK.vcproj ZERO_CHECK.vcproj-cmake -gawk -f pm_win\clean_up_vcproj.awk -v base_relative=. ZERO_CHECK.vcproj-cmake > ZERO_CHECK.vcproj -del ZERO_CHECK.vcproj-cmake -echo ZERO_CHECK - -cd pm_win diff --git a/portmidi/pm_win/debugging_dlls.txt b/portmidi/pm_win/debugging_dlls.txt deleted file mode 100755 index 82b81a5b57..0000000000 --- a/portmidi/pm_win/debugging_dlls.txt +++ /dev/null @@ -1,145 +0,0 @@ -======================================================================================================================== -Methods for Debugging DLLs -======================================================================================================================== -If you have the source for both the DLL and the calling program, open the project for the calling executable file and -debug the DLL from there. If you load a DLL dynamically, you must specify it in the Additional DLLs category of the -Debug tab in the Project Settings dialog box. - -If you have the source for the DLL only, open the project that builds the DLL. Use the Debug tab in the Project -Settings dialog box to specify the executable file that calls the DLL. - -You can also debug a DLL without a project. For example, maybe you just picked up a DLL and source code but you -dont have an associated project or workspace. You can use the Open command on the File menu to select the .DLL -file you want to debug. The debug information should be in either the .DLL or the related .PDB file. After -Visual C++ opens the file, on the Build menu click Start Debug and Go to begin debugging. - -To debug a DLL using the project for the executable file - -From the Project menu, click Settings. -The Project Settings dialog box appears. - -Choose the Debug tab. - - -In the Category drop-down list box, select General. - - -In the Program Arguments text box, type any command-line arguments required by the executable file. - - -In the Category drop-down list box, select Additional DLLs. - - -In the Local Name column, type the names of DLLs to debug. -If you are debugging remotely, the Remote Name column appears. In this column, type the complete path for the -remote module to map to the local module name. - -In the Preload column, select the check box if you want to load the module before debugging begins. - - -Click OK to store the information in your project. - - -From the Build menu, click Start Debug and Go to start the debugger. -You can set breakpoints in the DLL or the calling program. You can open a source file for the DLL and set breakpoints -in that file, even though it is not a part of the executable files project. - -To debug a DLL using the project for the DLL - -From the Project menu, click Settings. -The Project Settings dialog box appears. - -Choose the Debug tab. - - -In the Category drop-down list box, select General. - - -In the Executable For Debug Session text box, type the name of the executable file that calls the DLL. - - -In the Category list box, select Additional DLLs. - - -In the Local Module Name column, type the name of the DLLs you want to debug. - - -Click OK to store the information in your project. - - -Set breakpoints as required in your DLL source files or on function symbols in the DLL. - - -From the Build menu, click Start Debug and Go to start the debugger. -To debug a DLL created with an external project - -From the Project menu, click Settings. -The Project Settings dialog box appears. - -Choose the Debug tab. - - -In the Category drop-down list box, select General. - - -In the Executable For Debug Session text box, type the name of the DLL that your external makefile builds. - - -Click OK to store the information in your project. - - -Build a debug version of the DLL with symbolic debugging information, if you dont already have one. - - -Follow one of the two procedures immediately preceding this one to debug the DLL. - -======================================================================================================================== -Why Dont My DLL Breakpoints Work? -======================================================================================================================== -Some reasons why your breakpoints dont work as expected are listed here, along with solutions or work-arounds for each. -If you follow the instructions in one topic and are still having breakpoint problems, look at some of the other topics. -Often breakpoint problems result from a combination of conditions. - -You can't set a breakpoint in a source file when the corresponding symbolic information isn't loaded into memory by -the debugger. -You cannot set a breakpoint in any source file when the corresponding symbolic information will not be loaded into memory -by the debugger. -Symptoms include messages such as "the breakpoint cannot be set" or a simple, noninformational beep. - -When setting breakpoints before the code to be debugged has been started, the debugger uses a breakpoint list to keep -track of how and where to set breakpoints. When you actually begin the debugging session, the debugger loads the symbolic -information for all the code to be debugged and then walks through its breakpoint list, attempting to set the -breakpoints. - -However, if one or more of the code modules have not been designated to the debugger, there will be no symbolic -information for the debugger to use when walking through its breakpoint list. Situations where this is likely to -occur include: - -Attempts to set breakpoints in a DLL before the call to LoadLibrary. - -Setting a breakpoint in an ActiveX server before the container has started the server. - -Other similar cases. - -To prevent this behavior in Visual C++, specify all additional DLLs and COM servers in the Additional DLLs field -in the Debug/Options dialog box to notify the debugger that you want it to load symbolic debug information for -additional .DLL files. When this has been done, breakpoints set in code that has not yet been loaded into memory -will be "virtual" breakpoints. When the code is actually loaded into memory by the loader, these become physical -breakpoints. Make sure that these additional debugging processes are not already running when you start your -debugging session. The debugging process and these additional processes must be sychronized at the same beginning -point to work correctly, hitting all breakpoints. - -Breakpoints are missed when more than one copy of a DLL is on your hard disk. -Having more than one copy of a DLL on your hard drive, especially if it is in your Windows directory, can cause -debugger confusion. The debugger will load the symbolic information for the DLL specified to it at run time (with the -Additional DLLs field in the Debug/Options dialog box), while Windows has actually loaded a different copy of the -DLL itself into memory. Because there is no way to force the debugger to load a specific DLL, it is a good idea to -keep only one version of a DLL at a time in your path, current directory, and Windows directory. - -You cant set "Break When Expression Has Changed" breakpoints on a variable local to a DLL. -Setting a "Break When Expression Has Changed" breakpoint on a variable local to a DLL function before the call -to LoadLibrary causes the breakpoint to be virtual (there are no physical addresses for the DLL in memory yet). -Virtual breakpoints involving expressions pose a special problem. The DLL must be specified to the debugger at -startup (causing its symbolic information to be loaded). In addition, the DLL's executable code must also be loaded -into memory before this kind of breakpoint can be set. This means that the calling application's code must be -executed to the point after its call to LoadLibrary before the debugger will allow this type of breakpoint to be set. diff --git a/portmidi/pm_win/static.cmake b/portmidi/pm_win/static.cmake deleted file mode 100644 index 583b713f06..0000000000 --- a/portmidi/pm_win/static.cmake +++ /dev/null @@ -1,16 +0,0 @@ -# static.cmake -- change flags to link with static runtime libraries - -if(MSVC) - foreach(flag_var - CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE - CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO - CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE - CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO) - if(${flag_var} MATCHES "/MD") - string(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}") - endif(${flag_var} MATCHES "/MD") - endforeach(flag_var) - - message(STATUS - "Note: overriding CMAKE_*_FLAGS_* to use Visual C static multithread library") -endif(MSVC) diff --git a/portmidi/portmidi/CMakeLists.txt b/portmidi/portmidi/CMakeLists.txt new file mode 100644 index 0000000000..9510fdf321 --- /dev/null +++ b/portmidi/portmidi/CMakeLists.txt @@ -0,0 +1,2 @@ +include_directories(${CMAKE_CURRENT_SOURCE_DIR}/pm_common) +add_subdirectory(pm_common) diff --git a/portmidi/license.txt b/portmidi/portmidi/license.txt similarity index 100% rename from portmidi/license.txt rename to portmidi/portmidi/license.txt diff --git a/portmidi/pm_common/CMakeLists.txt b/portmidi/portmidi/pm_common/CMakeLists.txt similarity index 98% rename from portmidi/pm_common/CMakeLists.txt rename to portmidi/portmidi/pm_common/CMakeLists.txt index fe55154a73..9998a29a8a 100644 --- a/portmidi/pm_common/CMakeLists.txt +++ b/portmidi/portmidi/pm_common/CMakeLists.txt @@ -1,6 +1,6 @@ # pm_common -# set the build directory for libportmidi.a to be in portmidi, not in +# set the build directory for libportmidi.a to be in portmidi, not in # portmidi/pm_common if(APPLE OR WIN32) set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}) @@ -32,7 +32,7 @@ macro(prepend_path RESULT PATH) endforeach() endmacro() -set(CMAKE_C_FLAGS_DEBUG +set(CMAKE_C_FLAGS_DEBUG "${DEFAULT_DEBUG_FLAGS} -DPM_CHECK_ERRORS=1 -DDEBUG ${LINUX_FLAGS}" CACHE STRING "enable extra checks for debugging" FORCE) @@ -80,7 +80,6 @@ else(UNIX) if(WIN32) # /MDd is multithread debug DLL, /MTd is multithread debug # /MD is multithread DLL, /MT is multithread. Change to static: - include(../pm_win/static.cmake) include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../porttime) set(WINSRC pmwin pmwinmm) diff --git a/portmidi/pm_common/pminternal.h b/portmidi/portmidi/pm_common/pminternal.h similarity index 100% rename from portmidi/pm_common/pminternal.h rename to portmidi/portmidi/pm_common/pminternal.h diff --git a/portmidi/pm_common/pmutil.c b/portmidi/portmidi/pm_common/pmutil.c similarity index 100% rename from portmidi/pm_common/pmutil.c rename to portmidi/portmidi/pm_common/pmutil.c diff --git a/portmidi/pm_common/pmutil.h b/portmidi/portmidi/pm_common/pmutil.h similarity index 100% rename from portmidi/pm_common/pmutil.h rename to portmidi/portmidi/pm_common/pmutil.h diff --git a/portmidi/pm_common/portmidi.c b/portmidi/portmidi/pm_common/portmidi.c similarity index 100% rename from portmidi/pm_common/portmidi.c rename to portmidi/portmidi/pm_common/portmidi.c diff --git a/portmidi/pm_common/portmidi.h b/portmidi/portmidi/pm_common/portmidi.h similarity index 100% rename from portmidi/pm_common/portmidi.h rename to portmidi/portmidi/pm_common/portmidi.h diff --git a/portmidi/pm_linux/finddefault.c b/portmidi/portmidi/pm_linux/finddefault.c similarity index 100% rename from portmidi/pm_linux/finddefault.c rename to portmidi/portmidi/pm_linux/finddefault.c diff --git a/portmidi/pm_linux/pmlinux.c b/portmidi/portmidi/pm_linux/pmlinux.c similarity index 100% rename from portmidi/pm_linux/pmlinux.c rename to portmidi/portmidi/pm_linux/pmlinux.c diff --git a/portmidi/pm_linux/pmlinux.h b/portmidi/portmidi/pm_linux/pmlinux.h similarity index 100% rename from portmidi/pm_linux/pmlinux.h rename to portmidi/portmidi/pm_linux/pmlinux.h diff --git a/portmidi/pm_linux/pmlinuxalsa.c b/portmidi/portmidi/pm_linux/pmlinuxalsa.c similarity index 100% rename from portmidi/pm_linux/pmlinuxalsa.c rename to portmidi/portmidi/pm_linux/pmlinuxalsa.c diff --git a/portmidi/pm_linux/pmlinuxalsa.h b/portmidi/portmidi/pm_linux/pmlinuxalsa.h similarity index 100% rename from portmidi/pm_linux/pmlinuxalsa.h rename to portmidi/portmidi/pm_linux/pmlinuxalsa.h diff --git a/portmidi/pm_mac/finddefault.c b/portmidi/portmidi/pm_mac/finddefault.c similarity index 100% rename from portmidi/pm_mac/finddefault.c rename to portmidi/portmidi/pm_mac/finddefault.c diff --git a/portmidi/pm_mac/pmmac.c b/portmidi/portmidi/pm_mac/pmmac.c similarity index 100% rename from portmidi/pm_mac/pmmac.c rename to portmidi/portmidi/pm_mac/pmmac.c diff --git a/portmidi/pm_mac/pmmac.h b/portmidi/portmidi/pm_mac/pmmac.h similarity index 100% rename from portmidi/pm_mac/pmmac.h rename to portmidi/portmidi/pm_mac/pmmac.h diff --git a/portmidi/pm_mac/pmmacosxcm.c b/portmidi/portmidi/pm_mac/pmmacosxcm.c similarity index 93% rename from portmidi/pm_mac/pmmacosxcm.c rename to portmidi/portmidi/pm_mac/pmmacosxcm.c index cb5ae92e99..be55ad6958 100755 --- a/portmidi/pm_mac/pmmacosxcm.c +++ b/portmidi/portmidi/pm_mac/pmmacosxcm.c @@ -1,13 +1,13 @@ /* * Platform interface to the MacOS X CoreMIDI framework - * + * * Jon Parise * and subsequent work by Andrew Zeldis and Zico Kolter * and Roger B. Dannenberg * * $Id: pmmacosx.c,v 1.17 2002/01/27 02:40:40 jon Exp $ */ - + /* Notes: since the input and output streams are represented by MIDIEndpointRef values and almost no other state, we store the MIDIEndpointRef on @@ -16,7 +16,7 @@ the error text. We use a structure with two kinds of host error: "error" and "callback_error". That way, asynchronous callbacks do not interfere with other error information. - + OS X does not seem to have an error-code-to-text function, so we will just use text messages instead of error codes. */ @@ -45,21 +45,21 @@ #define MAX_BYTES_PER_S 14000 /* Apple reports that packets are dropped when the MIDI bytes/sec - exceeds 15000. This is computed by "tracking the number of MIDI + exceeds 15000. This is computed by "tracking the number of MIDI bytes scheduled into 1-second buckets over the last six seconds - and averaging these counts." + and averaging these counts." - This is apparently based on timestamps, not on real time, so + This is apparently based on timestamps, not on real time, so we have to avoid constructing packets that schedule high speed output even if the actual writes are delayed (which was my first solution). - The LIMIT_RATE symbol, if defined, enables code to modify + The LIMIT_RATE symbol, if defined, enables code to modify timestamps as follows: After each packet is formed, the next allowable timestamp is computed as this_packet_time + this_packet_len * delay_per_byte - This is the minimum timestamp allowed in the next packet. + This is the minimum timestamp allowed in the next packet. Note that this distorts accurate timestamps somewhat. */ @@ -70,6 +70,7 @@ #define VERBOSE_ON 1 #define VERBOSE if (VERBOSE_ON) +#define MIDI_CLOCK 0xf8 #define MIDI_SYSEX 0xf0 #define MIDI_EOX 0xf7 #define MIDI_STATUS_MASK 0x80 @@ -105,7 +106,7 @@ typedef struct midi_macosxcm_struct { Byte sysex_buffer[SYSEX_BUFFER_SIZE]; /* temp storage for sysex data */ MIDITimeStamp sysex_timestamp; /* timestamp to use with sysex data */ /* allow for running status (is running status possible here? -rbd): -cpr */ - unsigned char last_command; + unsigned char last_command; int32_t last_msg_length; /* limit midi data rate (a CoreMidi requirement): */ UInt64 min_next_time; /* when can the next send take place? */ @@ -144,11 +145,11 @@ midi_length(int32_t msg) static PmTimestamp midi_synchronize(PmInternal *midi) { midi_macosxcm_type m = (midi_macosxcm_type) midi->descriptor; - UInt64 pm_stream_time_2 = + UInt64 pm_stream_time_2 = AudioConvertHostTimeToNanos(AudioGetCurrentHostTime()); PmTimestamp real_time; UInt64 pm_stream_time; - /* if latency is zero and this is an output, there is no + /* if latency is zero and this is an output, there is no time reference and midi_synchronize should never be called */ assert(midi->time_proc); assert(!(midi->write_flag && midi->latency == 0)); @@ -166,7 +167,7 @@ static PmTimestamp midi_synchronize(PmInternal *midi) static void -process_packet(MIDIPacket *packet, PmEvent *event, +process_packet(MIDIPacket *packet, PmEvent *event, PmInternal *midi, midi_macosxcm_type m) { /* handle a packet of MIDI messages from CoreMIDI */ @@ -179,8 +180,8 @@ process_packet(MIDIPacket *packet, PmEvent *event, (m->last_command == 0 && !(cur_packet_data[0] & MIDI_STATUS_MASK))) { m->last_command = 0; /* no running status */ - unsigned int amt = pm_read_bytes(midi, cur_packet_data, - remaining_length, + unsigned int amt = pm_read_bytes(midi, cur_packet_data, + remaining_length, event->timestamp); remaining_length -= amt; cur_packet_data += amt; @@ -199,19 +200,26 @@ process_packet(MIDIPacket *packet, PmEvent *event, /* since there's no more data, we're done */ return; } - m->last_msg_length = cur_message_length; - m->last_command = cur_packet_data[0]; - switch (cur_message_length) { + if (cur_packet_data[0] < MIDI_SYSEX) { + /* channel messages allow running status */ + m->last_command = cur_packet_data[0]; + m->last_msg_length = cur_message_length; + } else if(cur_packet_data[0] < MIDI_CLOCK) { + /* system messages clear running status */ + m->last_command = 0; + m->last_msg_length = 0; + } + switch (cur_message_length) { case 1: event->message = Pm_Message(cur_packet_data[0], 0, 0); - break; + break; case 2: - event->message = Pm_Message(cur_packet_data[0], + event->message = Pm_Message(cur_packet_data[0], cur_packet_data[1], 0); break; case 3: event->message = Pm_Message(cur_packet_data[0], - cur_packet_data[1], + cur_packet_data[1], cur_packet_data[2]); break; default: @@ -220,8 +228,8 @@ process_packet(MIDIPacket *packet, PmEvent *event, return; /* give up on packet if continued after assert */ } pm_read_short(midi, event); - remaining_length -= m->last_msg_length; - cur_packet_data += m->last_msg_length; + remaining_length -= cur_message_length; + cur_packet_data += cur_message_length; } else if (m->last_msg_length > remaining_length + 1) { /* we have running status, but not enough data */ #ifdef DEBUG @@ -235,12 +243,12 @@ process_packet(MIDIPacket *packet, PmEvent *event, event->message = Pm_Message(m->last_command, 0, 0); break; case 2: - event->message = Pm_Message(m->last_command, + event->message = Pm_Message(m->last_command, cur_packet_data[0], 0); break; case 3: - event->message = Pm_Message(m->last_command, - cur_packet_data[0], + event->message = Pm_Message(m->last_command, + cur_packet_data[0], cur_packet_data[1]); break; default: @@ -267,7 +275,7 @@ readProc(const MIDIPacketList *newPackets, void *refCon, void *connRefCon) unsigned int packetIndex; uint32_t now; unsigned int status; - + #ifdef CM_DEBUG printf("readProc: numPackets %d: ", newPackets->numPackets); #endif @@ -276,22 +284,22 @@ readProc(const MIDIPacketList *newPackets, void *refCon, void *connRefCon) midi = (PmInternal *) connRefCon; m = (midi_macosxcm_type) midi->descriptor; assert(m); - + /* synchronize time references every 100ms */ now = (*midi->time_proc)(midi->time_info); - if (m->first_message || m->sync_time + 100 /*ms*/ < now) { + if (m->first_message || m->sync_time + 100 /*ms*/ < now) { /* time to resync */ now = midi_synchronize(midi); m->first_message = FALSE; } - + packet = (MIDIPacket *) &newPackets->packet[0]; - /* printf("readproc packet status %x length %d\n", packet->data[0], + /* printf("readproc packet status %x length %d\n", packet->data[0], packet->length); */ for (packetIndex = 0; packetIndex < newPackets->numPackets; packetIndex++) { /* Set the timestamp and dispatch this message */ event.timestamp = (PmTimestamp) /* explicit conversion */ ( - (AudioConvertHostTimeToNanos(packet->timeStamp) - m->delta) / + (AudioConvertHostTimeToNanos(packet->timeStamp) - m->delta) / (UInt64) 1000000); status = packet->data[0]; /* process packet as sysex data if it begins with MIDI_SYSEX, or @@ -299,7 +307,7 @@ readProc(const MIDIPacketList *newPackets, void *refCon, void *connRefCon) #ifdef CM_DEBUG printf(" %d", packet->length); #endif - if (status == MIDI_SYSEX || status == MIDI_EOX || + if (status == MIDI_SYSEX || status == MIDI_EOX || ((!(status & MIDI_STATUS_MASK)) && !m->last_command)) { /* previously was: !(status & MIDI_STATUS_MASK)) { * but this could mistake running status for sysex data @@ -325,10 +333,10 @@ midi_in_open(PmInternal *midi, void *driverInfo) MIDIEndpointRef endpoint; midi_macosxcm_type m; OSStatus macHostError; - + /* insure that we have a time_proc for timing */ if (midi->time_proc == NULL) { - if (!Pt_Started()) + if (!Pt_Started()) Pt_Start(1, 0, 0); /* time_get does not take a parameter, so coerce */ midi->time_proc = (PmTimeProcPtr) Pt_Time; @@ -360,14 +368,14 @@ midi_in_open(PmInternal *midi, void *driverInfo) macHostError = MIDIPortConnectSource(portIn, endpoint, midi); if (macHostError != noErr) { pm_hosterror = macHostError; - sprintf(pm_hosterror_text, + sprintf(pm_hosterror_text, "Host error %ld: MIDIPortConnectSource() in midi_in_open()", (long) macHostError); midi->descriptor = NULL; pm_free(m); return pmHostError; } - + return pmNoError; } @@ -377,29 +385,29 @@ midi_in_close(PmInternal *midi) MIDIEndpointRef endpoint; OSStatus macHostError; PmError err = pmNoError; - + midi_macosxcm_type m = (midi_macosxcm_type) midi->descriptor; - + if (!m) return pmBadPtr; endpoint = (MIDIEndpointRef) (long) descriptors[midi->device_id].descriptor; if (endpoint == NULL_REF) { pm_hosterror = pmBadPtr; } - + /* shut off the incoming messages before freeing data structures */ macHostError = MIDIPortDisconnectSource(portIn, endpoint); if (macHostError != noErr) { pm_hosterror = macHostError; - sprintf(pm_hosterror_text, + sprintf(pm_hosterror_text, "Host error %ld: MIDIPortDisconnectSource() in midi_in_close()", (long) macHostError); err = pmHostError; } - + midi->descriptor = NULL; pm_free(midi->descriptor); - + return err; } @@ -430,7 +438,7 @@ midi_out_open(PmInternal *midi, void *driverInfo) m->min_next_time = 0; m->byte_count = 0; m->us_per_host_tick = 1000000.0 / AudioGetHostClockFrequency(); - m->host_ticks_per_byte = (UInt64) (1000000.0 / + m->host_ticks_per_byte = (UInt64) (1000000.0 / (m->us_per_host_tick * MAX_BYTES_PER_S)); return pmNoError; } @@ -441,10 +449,10 @@ midi_out_close(PmInternal *midi) { midi_macosxcm_type m = (midi_macosxcm_type) midi->descriptor; if (!m) return pmBadPtr; - + midi->descriptor = NULL; pm_free(midi->descriptor); - + return pmNoError; } @@ -471,7 +479,7 @@ midi_write_flush(PmInternal *midi, PmTimestamp timestamp) { OSStatus macHostError; midi_macosxcm_type m = (midi_macosxcm_type) midi->descriptor; - MIDIEndpointRef endpoint = + MIDIEndpointRef endpoint = (MIDIEndpointRef) (long) descriptors[midi->device_id].descriptor; assert(m); assert(endpoint); @@ -481,7 +489,7 @@ midi_write_flush(PmInternal *midi, PmTimestamp timestamp) * 15KB/s. */ UInt64 now = AudioGetCurrentHostTime(); if (now < m->min_next_time) { - usleep((useconds_t) + usleep((useconds_t) ((m->min_next_time - now) * m->us_per_host_tick)); } macHostError = MIDISend(portOut, endpoint, m->packetList); @@ -491,10 +499,10 @@ midi_write_flush(PmInternal *midi, PmTimestamp timestamp) if (macHostError != noErr) goto send_packet_error; } return pmNoError; - + send_packet_error: pm_hosterror = macHostError; - sprintf(pm_hosterror_text, + sprintf(pm_hosterror_text, "Host error %ld: MIDISend() in midi_write()", (long) macHostError); return pmHostError; @@ -503,37 +511,37 @@ midi_write_flush(PmInternal *midi, PmTimestamp timestamp) static PmError -send_packet(PmInternal *midi, Byte *message, unsigned int messageLength, +send_packet(PmInternal *midi, Byte *message, unsigned int messageLength, MIDITimeStamp timestamp) { PmError err; midi_macosxcm_type m = (midi_macosxcm_type) midi->descriptor; assert(m); - + /* printf("add %d to packet %p len %d\n", message[0], m->packet, messageLength); */ - m->packet = MIDIPacketListAdd(m->packetList, sizeof(m->packetBuffer), - m->packet, timestamp, messageLength, + m->packet = MIDIPacketListAdd(m->packetList, sizeof(m->packetBuffer), + m->packet, timestamp, messageLength, message); m->byte_count += messageLength; if (m->packet == NULL) { /* out of space, send the buffer and start refilling it */ /* make midi->packet non-null to fool midi_write_flush into sending */ - m->packet = (MIDIPacket *) 4; + m->packet = (MIDIPacket *) 4; /* timestamp is 0 because midi_write_flush ignores timestamp since * timestamps are already in packets. The timestamp parameter is here - * because other API's need it. midi_write_flush can be called + * because other API's need it. midi_write_flush can be called * from system-independent code that must be cross-API. */ if ((err = midi_write_flush(midi, 0)) != pmNoError) return err; m->packet = MIDIPacketListInit(m->packetList); assert(m->packet); /* if this fails, it's a programming error */ m->packet = MIDIPacketListAdd(m->packetList, sizeof(m->packetBuffer), - m->packet, timestamp, messageLength, + m->packet, timestamp, messageLength, message); - assert(m->packet); /* can't run out of space on first message */ + assert(m->packet); /* can't run out of space on first message */ } return pmNoError; -} +} static PmError @@ -549,11 +557,11 @@ midi_write_short(PmInternal *midi, PmEvent *event) if (m->packet == NULL) { m->packet = MIDIPacketListInit(m->packetList); - /* this can never fail, right? failure would indicate something + /* this can never fail, right? failure would indicate something unrecoverable */ assert(m->packet); } - + /* compute timestamp */ if (when == 0) when = midi->now; /* if latency == 0, midi->now is not valid. We will just set it to zero */ @@ -565,29 +573,29 @@ midi_write_short(PmInternal *midi, PmEvent *event) message[1] = Pm_MessageData1(what); message[2] = Pm_MessageData2(what); messageLength = midi_length(what); - - /* make sure we go foreward in time */ - if (timestamp < m->min_next_time) timestamp = m->min_next_time; - #ifdef LIMIT_RATE - if (timestamp < m->last_time) - timestamp = m->last_time; - m->last_time = timestamp + messageLength * m->host_ticks_per_byte; - #endif + /* make sure we go foreward in time */ + if (timestamp < m->last_time) + timestamp = m->last_time; +#if LIMIT_RATE + if (timestamp < m->min_next_time) + timestamp = m->min_next_time; + m->last_time = timestamp + messageLength * m->host_ticks_per_byte; +#endif /* Add this message to the packet list */ return send_packet(midi, message, messageLength, timestamp); } -static PmError +static PmError midi_begin_sysex(PmInternal *midi, PmTimestamp when) { UInt64 when_ns; midi_macosxcm_type m = (midi_macosxcm_type) midi->descriptor; assert(m); m->sysex_byte_count = 0; - + /* compute timestamp */ if (when == 0) when = midi->now; /* if latency == 0, midi->now is not valid. We will just set it to zero */ @@ -597,7 +605,7 @@ midi_begin_sysex(PmInternal *midi, PmTimestamp when) if (m->packet == NULL) { m->packet = MIDIPacketListInit(m->packetList); - /* this can never fail, right? failure would indicate something + /* this can never fail, right? failure would indicate something unrecoverable */ assert(m->packet); } @@ -611,18 +619,17 @@ midi_end_sysex(PmInternal *midi, PmTimestamp when) PmError err; midi_macosxcm_type m = (midi_macosxcm_type) midi->descriptor; assert(m); - + /* make sure we go foreward in time */ - if (m->sysex_timestamp < m->min_next_time) - m->sysex_timestamp = m->min_next_time; + if (m->sysex_timestamp < m->last_time) + m->sysex_timestamp = m->last_time; + +#if LIMIT_RATE - #ifdef LIMIT_RATE - if (m->sysex_timestamp < m->last_time) - m->sysex_timestamp = m->last_time; - m->last_time = m->sysex_timestamp + m->sysex_byte_count * + m->last_time = m->sysex_timestamp + m->sysex_byte_count * m->host_ticks_per_byte; - #endif - +#endif + /* now send what's in the buffer */ err = send_packet(midi, m->sysex_buffer, m->sysex_byte_count, m->sysex_timestamp); @@ -712,7 +719,7 @@ CFStringRef EndpointName(MIDIEndpointRef endpoint, bool isExternal) { CFMutableStringRef result = CFStringCreateMutable(NULL, 0); CFStringRef str; - + // begin with the endpoint's name str = NULL; MIDIObjectGetStringProperty(endpoint, kMIDIPropertyName, &str); @@ -720,13 +727,13 @@ CFStringRef EndpointName(MIDIEndpointRef endpoint, bool isExternal) CFStringAppend(result, str); CFRelease(str); } - + MIDIEntityRef entity = NULL_REF; MIDIEndpointGetEntity(endpoint, &entity); if (entity == NULL_REF) // probably virtual return result; - + if (CFStringGetLength(result) == 0) { // endpoint name has zero length -- try the entity str = NULL; @@ -741,7 +748,7 @@ CFStringRef EndpointName(MIDIEndpointRef endpoint, bool isExternal) MIDIEntityGetDevice(entity, &device); if (device == NULL_REF) return result; - + str = NULL; MIDIObjectGetStringProperty(device, kMIDIPropertyName, &str); if (CFStringGetLength(result) == 0) { @@ -785,7 +792,7 @@ static CFStringRef ConnectedEndpointName(MIDIEndpointRef endpoint) CFStringRef str; OSStatus err; long i; - + // Does the endpoint have connections? CFDataRef connections = NULL; long nConnected = 0; @@ -838,18 +845,18 @@ char* cm_get_full_endpoint_name(MIDIEndpointRef endpoint) { char* newName; CFStringRef fullName = ConnectedEndpointName(endpoint); - + /* copy the string into our buffer */ CFIndex length = CFStringGetLength(fullName) + 1; const CFIndex maxSize = CFStringGetMaximumSizeForEncoding(length, kCFStringEncodingUTF8) + 1; newName = (char *) malloc(maxSize); - CFStringGetCString(fullName, newName, maxSize, kCFStringEncodingUTF8); - CFRelease(fullName); + + if (fullName) CFRelease(fullName); return newName; } - + pm_fns_node pm_macosx_in_dictionary = { none_write_short, @@ -921,7 +928,7 @@ PmError pm_macosxcm_init(void) error_text = "MIDIInputPortCreate() in pm_macosxcm_init()"; goto error_return; } - + /* Create the output port */ macHostError = MIDIOutputPortCreate(client, CFSTR("Output port"), &portOut); if (macHostError != noErr) { @@ -939,7 +946,7 @@ PmError pm_macosxcm_init(void) /* set the first input we see to the default */ if (pm_default_input_device_id == -1) pm_default_input_device_id = pm_descriptor_index; - + /* Register this device with PortMidi */ pm_add_device("CoreMIDI", cm_get_full_endpoint_name(endpoint), TRUE, (void *) (long) endpoint, &pm_macosx_in_dictionary); @@ -962,10 +969,10 @@ PmError pm_macosxcm_init(void) &pm_macosx_out_dictionary); } return pmNoError; - + error_return: pm_hosterror = macHostError; - sprintf(pm_hosterror_text, "Host error %ld: %s\n", (long) macHostError, + sprintf(pm_hosterror_text, "Host error %ld: %s\n", (long) macHostError, error_text); pm_macosxcm_term(); /* clear out any opened ports */ return pmHostError; diff --git a/portmidi/pm_mac/pmmacosxcm.h b/portmidi/portmidi/pm_mac/pmmacosxcm.h similarity index 100% rename from portmidi/pm_mac/pmmacosxcm.h rename to portmidi/portmidi/pm_mac/pmmacosxcm.h diff --git a/portmidi/pm_mac/readbinaryplist.c b/portmidi/portmidi/pm_mac/readbinaryplist.c similarity index 100% rename from portmidi/pm_mac/readbinaryplist.c rename to portmidi/portmidi/pm_mac/readbinaryplist.c diff --git a/portmidi/pm_mac/readbinaryplist.h b/portmidi/portmidi/pm_mac/readbinaryplist.h similarity index 100% rename from portmidi/pm_mac/readbinaryplist.h rename to portmidi/portmidi/pm_mac/readbinaryplist.h diff --git a/portmidi/pm_win/pmwin.c b/portmidi/portmidi/pm_win/pmwin.c similarity index 100% rename from portmidi/pm_win/pmwin.c rename to portmidi/portmidi/pm_win/pmwin.c diff --git a/portmidi/pm_win/pmwinmm.c b/portmidi/portmidi/pm_win/pmwinmm.c similarity index 100% rename from portmidi/pm_win/pmwinmm.c rename to portmidi/portmidi/pm_win/pmwinmm.c diff --git a/portmidi/pm_win/pmwinmm.h b/portmidi/portmidi/pm_win/pmwinmm.h similarity index 100% rename from portmidi/pm_win/pmwinmm.h rename to portmidi/portmidi/pm_win/pmwinmm.h diff --git a/portmidi/porttime/porttime.c b/portmidi/portmidi/porttime/porttime.c similarity index 100% rename from portmidi/porttime/porttime.c rename to portmidi/portmidi/porttime/porttime.c diff --git a/portmidi/porttime/porttime.h b/portmidi/portmidi/porttime/porttime.h similarity index 100% rename from portmidi/porttime/porttime.h rename to portmidi/portmidi/porttime/porttime.h diff --git a/portmidi/porttime/ptlinux.c b/portmidi/portmidi/porttime/ptlinux.c similarity index 100% rename from portmidi/porttime/ptlinux.c rename to portmidi/portmidi/porttime/ptlinux.c diff --git a/portmidi/porttime/ptmacosx_cf.c b/portmidi/portmidi/porttime/ptmacosx_cf.c similarity index 100% rename from portmidi/porttime/ptmacosx_cf.c rename to portmidi/portmidi/porttime/ptmacosx_cf.c diff --git a/portmidi/porttime/ptmacosx_mach.c b/portmidi/portmidi/porttime/ptmacosx_mach.c similarity index 100% rename from portmidi/porttime/ptmacosx_mach.c rename to portmidi/portmidi/porttime/ptmacosx_mach.c diff --git a/portmidi/porttime/ptwinmm.c b/portmidi/portmidi/porttime/ptwinmm.c similarity index 100% rename from portmidi/porttime/ptwinmm.c rename to portmidi/portmidi/porttime/ptwinmm.c diff --git a/portmidi/porttime/porttime.dsp b/portmidi/porttime/porttime.dsp deleted file mode 100755 index 364373c971..0000000000 --- a/portmidi/porttime/porttime.dsp +++ /dev/null @@ -1,104 +0,0 @@ -# Microsoft Developer Studio Project File - Name="porttime" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Static Library" 0x0104 - -CFG=porttime - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "porttime.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "porttime.mak" CFG="porttime - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "porttime - Win32 Release" (based on "Win32 (x86) Static Library") -!MESSAGE "porttime - Win32 Debug" (based on "Win32 (x86) Static Library") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "porttime - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c -# ADD CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LIB32=link.exe -lib -# ADD BASE LIB32 /nologo -# ADD LIB32 /nologo - -!ELSEIF "$(CFG)" == "porttime - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c -# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "_LIB" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "USE_DLL_FOR_CLEANUP" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LIB32=link.exe -lib -# ADD BASE LIB32 /nologo -# ADD LIB32 /nologo - -!ENDIF - -# Begin Target - -# Name "porttime - Win32 Release" -# Name "porttime - Win32 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\porttime.c -# End Source File -# Begin Source File - -SOURCE=.\ptwinmm.c -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# Begin Source File - -SOURCE=.\porttime.h -# End Source File -# End Group -# End Target -# End Project diff --git a/portmidi/update.sh b/portmidi/update.sh new file mode 100755 index 0000000000..17ced5833e --- /dev/null +++ b/portmidi/update.sh @@ -0,0 +1,75 @@ +#! /bin/bash +# +# this script automatically downloads and copies the portmidi library for Pd +# +# uses svn trunk version by default, set checkout revision # using +# first argument: +# +# ./update.sh 239 +# +# Dan Wilcox danomatika.com 2018 +# + +# exit on error +set -e + +##### VARIABLES + +SRC=portmidi-svn +DEST=portmidi + +# commandline arg: version is svn revision # +VERSION="" + +##### FUNCTIONS + +# copy .h & .c files from $SRC to $DEST, ignore missing file errors +function copysrc { + mkdir -p $DEST/$1 + cp -v $SRC/$1/*.h $DEST/$1 2>/dev/null || : + cp -v $SRC/$1/*.c $DEST/$1 2>/dev/null || : +} + +##### GO + +# append revision number to checkout rule ala @### +if [ $# -gt 0 ] ; then + VERSION="@$1" +fi + +# move to this scripts dir +cd $(dirname $0) + +# checkout source +echo "==== Downloading portmidi $VERSION" +if [ -d $SRC ] ; then + rm -rf $SRC +fi +svn checkout https://svn.code.sf.net/p/portmedia/code/portmidi/trunk${VERSION} $SRC + +# apply patches, note: this probably can't handle filenames with spaces +# temp disable exit on error since the exit value of patch --dry-run is used +echo "==== Applying any patches" +for p in $(find ./patches -type f -name "*.patch") ; do + cd $SRC + set +e + (patch -p0 -N --silent --dry-run --input "../${p}" > /dev/null 2>&1) + set -e + if [[ $? == 0 ]] ; then + patch -p0 < "../${p}" + fi + cd ../ +done + +echo "==== Copying" + +# copy what we need, namely the main headers and relevant sources +copysrc pm_common +copysrc pm_linux +copysrc pm_mac +copysrc pm_win +copysrc porttime +cp -v $SRC/license.txt $DEST/ + +# cleanup +rm -rf $SRC diff --git a/snap/snapcraft.yaml b/snap/snapcraft.yaml index f0a2954859..7ba32351b3 100644 --- a/snap/snapcraft.yaml +++ b/snap/snapcraft.yaml @@ -1,5 +1,5 @@ name: pd-ceammc -version: "2019.04" +version: "2020.02" license: "GPL-3.0" summary: "Pure Data CEAMMC distribution" description: | diff --git a/src/.dir-locals.el b/src/.dir-locals.el new file mode 100644 index 0000000000..113532ddc0 --- /dev/null +++ b/src/.dir-locals.el @@ -0,0 +1,12 @@ +; see also https://github.com/erdc-cm/petsc-dev/blob/master/.dir-locals.el +( + (nil . ((indent-tabs-mode . nil) + (tab-width . 4) + (fill-column . 80))) + ;; Warn about spaces used for indentation: + (c-mode . ((c-file-style . "bsd") + (c-basic-offset . 4) + (c-comment-only-line-offset . 4) + )) + (haskell-mode . ((eval . (highlight-regexp "^ *")))) + (java-mode . ((c-file-style . "bsd")))) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index ad28a52418..66b9b834ff 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -145,8 +145,8 @@ if(WITH_MMIO) endif() if(WITH_PORTMIDI) - include_directories(${PROJECT_SOURCE_DIR}/portmidi/pm_common) - include_directories(${PROJECT_SOURCE_DIR}/portmidi/porttime) + include_directories(${PROJECT_SOURCE_DIR}/portmidi/portmidi/pm_common) + include_directories(${PROJECT_SOURCE_DIR}/portmidi/portmidi/porttime) list(APPEND S_SRC s_midi_pm.c) list(APPEND PD_NEEDED_LIBS portmidi-static) endif() diff --git a/src/Makefile.am b/src/Makefile.am index b987cff948..5ea860438b 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -1,164 +1,411 @@ +######################################### +##### Defaults & Paths ##### + AUTOMAKE_OPTIONS = foreign +CLEANFILES= + +bin_SCRIPTS = +noinst_SCRIPTS = -pd_CFLAGS = -DPD -DINSTALL_PREFIX=\"$(prefix)\" +pd_CFLAGS = -DPD -DINSTALL_PREFIX=\"$(prefix)\" -DPD_INTERNAL pd_LDFLAGS = +pd_LDADD = + +# there are pd_* and pd_*_core variables as we need different flags on Windows +# for the DLL and the EXE, other OSes simply set pd_* = $(pd_*_core) later +# also, the "_core" suffix is used as this keeps automake from thinking these +# are library or binary variables since we only need them as placeholders +pd_LDFLAGS_core = +pd_LDADD_core = -pdsend_CFLAGS = -pdreceive_CFLAGS = -pd_watchdog_CFLAGS = +pdsend_CFLAGS = +pdreceive_CFLAGS = +pd_watchdog_CFLAGS = LIBS = @LIBS@ -INCLUDES = @INCLUDES@ SUFFIXES = .@EXTENSION@ .@SHARED_LIB@ +######################################### +##### Files, Binaries, & Libs ##### + +# pd core & utils bin_PROGRAMS = pd pdsend pdreceive + pdsend_SOURCES = u_pdsend.c pdreceive_SOURCES = u_pdreceive.c pd_watchdog_SOURCES = s_watchdog.c -pd_LDADD = -pd_SOURCES = g_canvas.c g_graph.c g_text.c g_rtext.c g_array.c g_template.c \ - g_io.c g_scalar.c g_traversal.c g_guiconnect.c g_readwrite.c g_editor.c \ + +# on Windows, pd.exe contains only s_entry.c and links against pd.dll +# (where all the logic resides), that's why we have to split the sources +# (only to later merge them again for non-Windows systems) +pd_SOURCES = s_entry.c +pd_SOURCES_core = \ + d_arithmetic.c \ + d_array.c \ + d_ctl.c \ + d_dac.c \ + d_delay.c \ + d_fft.c \ + d_filter.c \ + d_global.c \ + d_math.c \ + d_misc.c \ + d_osc.c \ + d_resample.c \ + d_soundfile.c \ + d_ugen.c \ + g_all_guis.c \ + g_array.c \ + g_bang.c \ + g_canvas.c \ g_clone.c \ - g_all_guis.c g_bang.c g_hdial.c g_hslider.c g_mycanvas.c g_numbox.c \ - g_toggle.c g_vdial.c g_vslider.c g_vumeter.c \ - m_pd.c m_class.c m_obj.c m_atom.c m_memory.c m_binbuf.c \ - m_conf.c m_glob.c m_sched.c \ - s_main.c s_inter.c s_file.c s_print.c \ - s_loader.c s_path.c s_entry.c s_audio.c s_midi.c \ + g_editor.c \ + g_editor_extras.c \ + g_graph.c \ + g_guiconnect.c \ + g_hdial.c \ + g_hslider.c \ + g_io.c \ + g_mycanvas.c \ + g_numbox.c \ + g_readwrite.c \ + g_rtext.c \ + g_scalar.c \ + g_template.c \ + g_text.c \ + g_toggle.c \ + g_traversal.c \ + g_undo.c \ + g_vdial.c \ + g_vslider.c \ + g_vumeter.c \ + m_atom.c \ + m_binbuf.c \ + m_class.c \ + m_conf.c \ + m_glob.c \ + m_memory.c \ + m_obj.c \ + m_pd.c \ + m_sched.c \ + s_audio.c \ + s_file.c \ + s_inter.c \ + s_loader.c \ + s_main.c \ + s_midi.c \ + s_path.c \ + s_print.c \ s_utf8.c \ - d_ugen.c d_ctl.c d_arithmetic.c d_osc.c d_filter.c d_dac.c d_misc.c \ - d_math.c d_fft.c d_array.c d_global.c \ - d_delay.c d_resample.c d_soundfile.c \ - x_arithmetic.c x_connective.c x_interface.c x_midi.c x_misc.c \ - x_time.c x_acoustics.c x_net.c x_text.c x_gui.c x_list.c x_array.c \ - x_scalar.c x_vexp.c x_vexp_if.c x_vexp_fun.c -nodist_EXTRA_pd_SOURCES = - -pd_includedir = ${includedir}/pd -pd_include_HEADERS = m_pd.h m_imp.h g_canvas.h s_stuff.h g_all_guis.h + x_acoustics.c \ + x_arithmetic.c \ + x_array.c \ + x_connective.c \ + x_gui.c \ + x_interface.c \ + x_list.c \ + x_midi.c \ + x_misc.c \ + x_net.c \ + x_scalar.c \ + x_text.c \ + x_time.c \ + x_vexp.c \ + x_vexp_fun.c \ + x_vexp_if.c + +# pd-watchdog and "local" pd symlink location for tcl scripts +libpdbindir = $(pkglibdir)/bin + +# these install to ${includedir}/pd +pkginclude_HEADERS = m_pd.h m_imp.h g_canvas.h g_undo.h g_all_guis.h s_stuff.h x_vexp.h # compatibility: m_pd.h also goes into ${includedir}/ include_HEADERS = m_pd.h -noinst_HEADERS = g_all_guis.h s_audio_alsa.h s_audio_paring.h s_utf8.h +noinst_HEADERS = s_audio_alsa.h s_audio_paring.h s_utf8.h # we want these in the dist tarball -EXTRA_DIST = CHANGELOG.txt notes.txt \ - pd.ico pd.rc \ - makefile.gnu makefile.mac makefile.mingw makefile.msvc \ - s_audio_dummy.c s_audio_audiounit.c s_audio_esd.c +EXTRA_DIST = CHANGELOG.txt notes.txt pd.rc \ + makefile.gnu makefile.mac makefile.mingw makefile.msvc \ + s_audio_audiounit.c s_audio_esd.c + +# add WISH define if it's set +WISH=@WISH@ +WISHDEFINE=$(if $(WISH),-DWISH='"$(WISH)"') +pd_CFLAGS += $(WISHDEFINE) +######################################### +##### Configurations Per Library ##### -# configurations per library +##### Advanced Linux Sound Architecture ##### if ALSA pd_CFLAGS += -DUSEAPI_ALSA -pd_LDADD += @ALSA_LIBS@ -pd_SOURCES += s_audio_alsa.c s_audio_alsamm.c s_midi_alsa.c +pd_LDADD_core += @ALSA_LIBS@ +pd_SOURCES_core += s_audio_alsa.c s_audio_alsamm.c s_midi_alsa.c endif +##### OSX CoreAudio ##### +# needed by PortAudio on OSX if COREAUDIO LIBS += -framework CoreAudio -framework CoreMIDI \ - -framework AudioUnit -framework AudioToolbox -endif - -if FFTW -pd_SOURCES += d_fft_fftw.c -else -pd_SOURCES += d_fft_fftsg.c + -framework AudioUnit -framework AudioToolbox endif +##### Jack Audio Connection Kit ##### # TODO support Jack xrun if JACK pd_CFLAGS += -DUSEAPI_JACK -DJACK_XRUN -pd_SOURCES += s_audio_jack.c -if MACOSX -pd_LDFLAGS += -weak_framework Jackmp +pd_SOURCES_core += s_audio_jack.c + +if JACK_FRAMEWORK +# link to Jackmp.framework on macOS +pd_LDFLAGS_core += -weak_framework Jackmp else -pd_LDADD += @JACK_LIBS@ +# link to Jack discovered by configure +pd_LDADD_core += @JACK_LIBS@ endif + endif -# Cygwin has a function OSS /dev/dsp, but not MIDI, and Pd is only set up to -# handle a single MIDI API +##### GNU/Linux Open Sound System ##### if OSS -if !WINDOWS pd_CFLAGS += -DUSEAPI_OSS -pd_SOURCES += s_audio_oss.c s_midi_oss.c +pd_SOURCES_core += s_audio_oss.c s_midi_oss.c endif + +##### Windows MultiMedia (File) I/O ##### +if MMIO +pd_CFLAGS += -DUSEAPI_MMIO +pd_SOURCES_core += s_audio_mmio.c endif +##### PortAudio ##### if PORTAUDIO -pd_CFLAGS += -DUSEAPI_PORTAUDIO -I$(top_srcdir)/portaudio/include -pd_LDADD += $(top_builddir)/portaudio/lib/libportaudio.la -pd_SOURCES += s_audio_pa.c s_audio_paring.c +pd_CFLAGS += -DUSEAPI_PORTAUDIO +pd_SOURCES_core += s_audio_pa.c s_audio_paring.c + +if LOCAL_PORTAUDIO +# link the included portaudio which is built as a static lib +AM_CPPFLAGS += -I$(top_srcdir)/portaudio/portaudio/include +pd_LDADD_core += $(top_builddir)/portaudio/libportaudio.a +else +# link the system's portaudio +pd_LDADD_core += -lportaudio +endif + +# need Carbon framework for PA on Mac +if MACOSX +LIBS += -framework Carbon endif +endif + +##### ASIO ##### # ASIO needs to go after PORTAUDIO in order for it to link properly if ASIO -pd_LDADD += $(top_builddir)/asio/libasio.la -nodist_EXTRA_pd_SOURCES += dummy.cxx +# always Windows +pd_LDADD_core += $(top_builddir)/asio/libasio.a endif +##### PortMidi ##### if PORTMIDI -INCLUDES += -I$(top_srcdir)/portmidi/pm_common -I$(top_srcdir)/portmidi/porttime -pd_LDADD += $(top_builddir)/portmidi/libportmidi.la -pd_SOURCES += s_midi_pm.c +pd_SOURCES_core += s_midi_pm.c + +if LOCAL_PORTMIDI +# link the included portmidi which is built as a static lib +AM_CPPFLAGS += \ + -I$(top_srcdir)/portmidi/portmidi/pm_common \ + -I$(top_srcdir)/portmidi/portmidi/porttime +pd_LDADD_core += $(top_builddir)/portmidi/libportmidi.a +else +# link the system's portmidi +pd_LDADD_core += -lportmidi endif +# need Carbon framework for PM on Mac +if MACOSX +LIBS += -framework CoreFoundation -framework Carbon +endif + +endif -# FIXXXME -# GNU/HURD, IPHONEOS, ... have no MIDI (not even OSS) -# i think it would be better to add s_midi_dummy.c only if no other midi API can be found -# (without OS-specific checks) -# even better would be, to allow Pd to have simply have no MIDI (nor AUDIO) -if IPHONEOS -pd_SOURCES += s_midi_dummy.c +##### NO API? ##### +# if no audio or midi api was detected/specified, fall back to dummy apis +# ie. GNU/HURD, IPHONEOS, ... have no MIDI (not even OSS) +if AUDIO_DUMMY +pd_CFLAGS += -DUSEAPI_DUMMY +pd_SOURCES_core += s_audio_dummy.c endif +if MIDI_DUMMY +pd_CFLAGS += -DUSEAPI_MIDIDUMMY +pd_SOURCES_core += s_midi_dummy.c +endif + +##### FFTW fft library ##### +if FFTW +pd_SOURCES_core += d_fft_fftw.c +else +pd_SOURCES_core += d_fft_fftsg.c +endif + +######################################### +##### Configurations Per Platform ##### +##### GNU/Hurd ##### if HURD -libpdbindir = $(pkglibdir)/bin -libpdbin_DATA = -libpdbin_PROGRAMS = pd-watchdog pd + +# install watchdog to $(libdir)/pd/bin as it's not a user facing program +libpdbin_PROGRAMS = pd-watchdog + # this flag has to have a single leading "-" for libtool, even though ld uses # --export-dynamic, and libtool sends -Wl,--export-dynamic to ld... -pd_LDFLAGS += -export-dynamic +pd_LDFLAGS_core += -export-dynamic + # on Ubuntu/Karmic 9.10, it doesn't seem to find libm, so force it -pd_LDFLAGS += $(LIBM) +pd_LDFLAGS_core += $(LIBM) + # force linking to pthread, which should really be done with some autotools way -pd_LDFLAGS += -lpthread +pd_LDFLAGS_core += -lpthread + # force linking to dl, which should really be done with some autotools way -pd_LDFLAGS += -ldl +pd_LDFLAGS_core += -ldl + endif -if LINUX -libpdbindir = $(pkglibdir)/bin -libpdbin_DATA = -libpdbin_PROGRAMS = pd-watchdog pd +##### GNU/Linux ##### +if LINUX + +# install watchdog to $(libdir)/pd/bin as it's not a user facing program +libpdbin_PROGRAMS = pd-watchdog + # this flag has to have a single leading "-" for libtool, even though ld uses # --export-dynamic, and libtool sends -Wl,--export-dynamic to ld... -pd_LDFLAGS += -export-dynamic +pd_LDFLAGS_core += -export-dynamic + # on Ubuntu/Karmic 9.10, it doesn't seem to find libm, so force it -pd_LDFLAGS += $(LIBM) +pd_LDFLAGS_core += $(LIBM) + endif +##### Apple Mac OSX ##### if MACOSX -LIBS += -framework Carbon -pd_CFLAGS += -DMACOSX #kludge, should use auto macro __APPLE__ -bin_SCRIPTS = -bin_PROGRAMS += pd-watchdog + +# install watchdog to $(libdir)/pd/bin as it's not a user facing program +libpdbin_PROGRAMS = pd-watchdog + +# kludge, should use auto macro __APPLE__ +# but who knows what externals rely on this +pd_CFLAGS += -DMACOSX + +# for dynamic loading & threading +LIBS += -ldl -lm -lpthread + endif +##### Windows ##### if WINDOWS -LIBS += -lwsock32 -lwinmm -lole32 -pd_CFLAGS += -DUSEAPI_MMIO -DPD_INTERNAL -pd_SOURCES += s_audio_mmio.c s_midi_mmio.c -bin_SCRIPTS = + +# win32 sockets, multimedia, and all that +LIBS += -lwsock32 -lwinmm -lole32 -static-libgcc -static-libstdc++ + +bin_SCRIPTS += pd.dll pd.lib pd.def pd.com +CLEANFILES += pd.dll pd.lib pd.def pd.com +noinst_SCRIPTS += libpd.a +CLEANFILES += libpd.a +CLEANFILES += pd.res + +# hide the console +pd_LDFLAGS += -mwindows +# link with ressources and pd.dll import library +pd_LDADD += pd.res pd.lib + +pd_OBJECTS_core = $(pd_SOURCES_core:.c=.o) + +# the variables are taken from the automake Makefile +$(pd_OBJECTS_core) : %.o : %.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(pd_CFLAGS) $(CFLAGS) -c -o $@ $< + +pd.res: pd.rc + $(WINDRES) $< -O coff -o $@ + +# import library for pd.dll. also works with MSVC! +pd.lib: pd.dll + +# another import library (when linking with -lpd), the same as pd.lib. +libpd.a: pd.lib + cp $< $@ + +pd.def: pd.dll + +pd.dll: $(pd_OBJECTS_core) + $(CXX) -shared $(pd_LDFLAGS_core) -o pd.dll \ + $(pd_OBJECTS_core) $(pd_LDADD_core) $(LIBS) \ + -Wl,--export-all-symbols -Wl,--out-implib=pd.lib -Wl,--output-def=pd.def + +# same as pd.exe but without -mwindows and resources +# NOTE: this is a bit ugly. I couldn't figure out how to get automake to build +# two programs with the same basename but different suffix. +pd.com: pd-s_entry.o pd.lib + $(CXX) $(LDFLAGS) -o pd.com pd-s_entry.o $(LIBS) pd.lib + +else +# for other OS, join pd_* with pd_*_core +pd_SOURCES += $(pd_SOURCES_core) +pd_LDADD += $(pd_LDADD_core) +pd_LDFLAGS += $(pd_LDFLAGS_core) endif +##### Windows MinGW ##### if MINGW -# To use SetDllDirectory() in s_loader.c, we need a minium of Windows -# XP SP1. WINVER isnt' fine-grained enough for that, so we use the +# To use SetDllDirectory() in s_loader.c, we need a minimum of Windows +# XP SP1. WINVER isnt' fine-grained enough for that, so we use the # next minor version of Windows, 5.2. That gives us -DWINVER=0x0502 -pd_CFLAGS += -DWISHAPP='"wish85.exe"' -DWINVER=0x0502 +pd_CFLAGS += -DWINVER=0x0502 -D_WIN32_WINNT=0x0502 endif +######################################### +##### Targets ##### + +.PHONY: convenience-links + +all-local: convenience-links + +# create a bin folder & symlinks to the binaries in order to +# replicate the src/makefile.* build result +convenience-links: $(libpdbin_PROGRAMS) $(bin_PROGRAMS) + $(MKDIR_P) $(top_builddir)/bin + rm -rf $(top_builddir)/bin/pd* + $(LN_S) $(top_builddir)/src/pd$(EXEEXT) $(top_builddir)/bin/pd$(EXEEXT) + $(LN_S) $(top_builddir)/src/pdsend$(EXEEXT) $(top_builddir)/bin/pdsend$(EXEEXT) + $(LN_S) $(top_builddir)/src/pdreceive$(EXEEXT) $(top_builddir)/bin/pdreceive$(EXEEXT) + $(LN_S) $(top_srcdir)/tcl/pd-gui.in $(top_builddir)/bin/pd-gui + test -e $(top_builddir)/src/pd-watchdog$(EXEEXT) && $(LN_S) $(top_builddir)/src/pd-watchdog$(EXEEXT) $(top_builddir)/bin/pd-watchdog$(EXEEXT) || true + +clean-local: + rm -rf $(top_builddir)/bin + +# link to $(libdir)/pd/bin so the tcl scripts can +# launch the core if the gui is started first +# +# We have to make the dir just in case as it may not exist yet & +# we remove any existing symlink if doing a repeated install. +install-exec-hook: + $(MKDIR_P) $(DESTDIR)$(libpdbindir) + rm -f $(DESTDIR)$(libpdbindir)/pd + $(LN_S) $(DESTDIR)$(bindir)/pd $(DESTDIR)$(libpdbindir)/pd + +# remove the $(libdir)/pd/bin link +# & +# remove the leftover $(includedir)/pd dir, fail silently on any non-empty dirs +# +# The "|| true" ensures that if the dir is *not* empty, then rmdir does not throw +# an error and stop make. +uninstall-hook: + rm -f $(DESTDIR)$(libpdbindir)/pd + if test -d $(DESTDIR)$(pkgincludedir) ; then \ + rmdir $(DESTDIR)$(pkgincludedir) 2>/dev/null || true ; \ + fi + +# generate Emacs tags etags: TAGS etags --append --language=none --regex="/proc[ \t]+\([^ \t]+\)/\1/" *.tcl diff --git a/src/d_ctl.c b/src/d_ctl.c index cf265624c3..5e5e667b92 100644 --- a/src/d_ctl.c +++ b/src/d_ctl.c @@ -690,7 +690,7 @@ static void env_tilde_ff(t_sigenv *x) /* cleanup on free */ } -void env_tilde_setup(void ) +void env_tilde_setup(void) { env_tilde_class = class_new(gensym("env~"), (t_newmethod)env_tilde_new, (t_method)env_tilde_ff, sizeof(t_sigenv), 0, A_DEFFLOAT, A_DEFFLOAT, 0); @@ -819,7 +819,7 @@ static void threshold_tilde_ff(t_threshold_tilde *x) clock_free(x->x_clock); } -static void threshold_tilde_setup( void) +static void threshold_tilde_setup(void) { threshold_tilde_class = class_new(gensym("threshold~"), (t_newmethod)threshold_tilde_new, (t_method)threshold_tilde_ff, diff --git a/src/d_delay.c b/src/d_delay.c index 7198e02215..1424c11cab 100644 --- a/src/d_delay.c +++ b/src/d_delay.c @@ -9,7 +9,7 @@ extern int ugen_getsortno(void); #define DEFDELVS 64 /* LATER get this from canvas at DSP time */ -static const int delread_zero = 0; /* four bytes of zero for delread~, vd~*/ +static const int delread_zero = 0; /* four bytes of zero for delread~, vd~/delread4~*/ /* ----------------------------- delwrite~ ----------------------------- */ static t_class *sigdelwrite_class; @@ -244,7 +244,7 @@ static void sigdelread_setup(void) } -/* ----------------------------- vd~ ----------------------------- */ +/* ----------------------------- vd~ / delread4~ ----------------------------- */ static t_class *sigvd_class; typedef struct _sigvd @@ -330,10 +330,10 @@ static void sigvd_dsp(t_sigvd *x, t_signal **sp) &delwriter->x_cspace, x, sp[0]->s_n); /* check block size - but only if delwriter has been initialized */ if (delwriter->x_cspace.c_n > 0 && sp[0]->s_n > delwriter->x_cspace.c_n) - pd_error(x, "vd~ %s: blocksize larger than delwrite~ buffer", x->x_sym->s_name); + pd_error(x, "delread4~ %s: blocksize larger than delwrite~ buffer", x->x_sym->s_name); } else if (*x->x_sym->s_name) - pd_error(x, "vd~: %s: no such delwrite~",x->x_sym->s_name); + pd_error(x, "delread4~: %s: no such delwrite~",x->x_sym->s_name); } static void sigvd_setup(void) diff --git a/src/d_fft.c b/src/d_fft.c index 010018179f..21ce19a2fc 100644 --- a/src/d_fft.c +++ b/src/d_fft.c @@ -12,6 +12,7 @@ linked in. The configure script can be used to select which one. */ /* ------------------ initialization and cleanup -------------------------- */ + void mayer_init( void); void mayer_term( void); @@ -134,6 +135,7 @@ static void sigfft_setup(void) { sigfft_class = class_new(gensym("fft~"), sigfft_new, 0, sizeof(t_sigfft), 0, 0); + class_setfreefn(sigfft_class, fftclass_cleanup); CLASS_MAINSIGNALIN(sigfft_class, t_sigfft, x_f); class_addmethod(sigfft_class, (t_method)sigfft_dsp, gensym("dsp"), A_CANT, 0); @@ -141,6 +143,7 @@ static void sigfft_setup(void) sigifft_class = class_new(gensym("ifft~"), sigifft_new, 0, sizeof(t_sigfft), 0, 0); + class_setfreefn(sigifft_class, fftclass_cleanup); CLASS_MAINSIGNALIN(sigifft_class, t_sigfft, x_f); class_addmethod(sigifft_class, (t_method)sigifft_dsp, gensym("dsp"), A_CANT, 0); @@ -200,6 +203,7 @@ static void sigrfft_setup(void) { sigrfft_class = class_new(gensym("rfft~"), sigrfft_new, 0, sizeof(t_sigrfft), 0, 0); + class_setfreefn(sigrfft_class, fftclass_cleanup); CLASS_MAINSIGNALIN(sigrfft_class, t_sigrfft, x_f); class_addmethod(sigrfft_class, (t_method)sigrfft_dsp, gensym("dsp"), A_CANT, 0); @@ -262,6 +266,7 @@ static void sigrifft_setup(void) { sigrifft_class = class_new(gensym("rifft~"), sigrifft_new, 0, sizeof(t_sigrifft), 0, 0); + class_setfreefn(sigrifft_class, fftclass_cleanup); CLASS_MAINSIGNALIN(sigrifft_class, t_sigrifft, x_f); class_addmethod(sigrifft_class, (t_method)sigrifft_dsp, gensym("dsp"), A_CANT, 0); @@ -352,6 +357,7 @@ static void sigframp_setup(void) { sigframp_class = class_new(gensym("framp~"), sigframp_new, 0, sizeof(t_sigframp), 0, 0); + class_setfreefn(sigframp_class, fftclass_cleanup); CLASS_MAINSIGNALIN(sigframp_class, t_sigframp, x_f); class_addmethod(sigframp_class, (t_method)sigframp_dsp, gensym("dsp"), A_CANT, 0); diff --git a/src/d_fft_fftsg.c b/src/d_fft_fftsg.c index 833ed3b3c1..03ed53ec38 100644 --- a/src/d_fft_fftsg.c +++ b/src/d_fft_fftsg.c @@ -79,28 +79,27 @@ static int ooura_init( int n) return (1); } -static void ooura_term() { - if (!ooura_maxn) - return; - t_freebytes(ooura_bitrev, ooura_bitrevsize); - t_freebytes(ooura_costab, ooura_maxn * sizeof(FFTFLT)/2); - ooura_maxn = 0; - ooura_bitrev = 0; - ooura_bitrevsize = 0; - ooura_costab = 0; +static void ooura_term( void) +{ + if (!ooura_maxn) + return; + t_freebytes(ooura_bitrev, ooura_bitrevsize); + t_freebytes(ooura_costab, ooura_maxn * sizeof(FFTFLT)/2); + ooura_maxn = 0; + ooura_bitrev = 0; + ooura_bitrevsize = 0; + ooura_costab = 0; } /* -------- initialization and cleanup -------- */ static int mayer_refcount = 0; -void mayer_init() +void mayer_init( void) { - if (mayer_refcount == 0) - /* nothing to do */; mayer_refcount++; } -void mayer_term() +void mayer_term( void) { if (--mayer_refcount == 0) /* clean up */ ooura_term(); diff --git a/src/d_fft_fftw.c b/src/d_fft_fftw.c index 10d1ce403f..0bec1c83c3 100644 --- a/src/d_fft_fftw.c +++ b/src/d_fft_fftw.c @@ -7,6 +7,7 @@ /* changes and additions for FFTW3 by Thomas Grill */ #include "m_pd.h" +#include "m_imp.h" #include int ilog2(int n); @@ -250,4 +251,3 @@ void pd_fft(t_float *buf, int npoints, int inverse) for (i = 0, fz = (float *)(p->out); i < 2 * npoints; i++) buf[i] = *fz++; } - diff --git a/src/d_filter.c b/src/d_filter.c index c3ea6dffb7..c36acfc3a9 100644 --- a/src/d_filter.c +++ b/src/d_filter.c @@ -1064,6 +1064,114 @@ void sigczero_rev_setup(void) gensym("dsp"), A_CANT, 0); } +/* ---------------- slop~ - slewing low-pass filter ----------------- */ + +typedef struct slop_tilde +{ + t_object x_obj; + t_sample x_f; + t_sample x_coef; + t_sample x_last; + t_sample x_sigin; + t_sample x_freqin; + t_sample x_poslimitin; + t_sample x_posfreqin; + t_sample x_neglimitin; + t_sample x_negfreqin; +} t_slop_tilde; + +t_class *slop_tilde_class; + +static void *slop_tilde_new(t_symbol *s, int argc, t_atom *argv) +{ + t_slop_tilde *x = (t_slop_tilde *)pd_new(slop_tilde_class); + signalinlet_new(&x->x_obj, atom_getfloatarg(0, argc, argv)); + signalinlet_new(&x->x_obj, atom_getfloatarg(1, argc, argv)); + signalinlet_new(&x->x_obj, atom_getfloatarg(2, argc, argv)); + signalinlet_new(&x->x_obj, atom_getfloatarg(3, argc, argv)); + signalinlet_new(&x->x_obj, atom_getfloatarg(4, argc, argv)); + outlet_new(&x->x_obj, &s_signal); + x->x_coef = 0; + return (x); +} + +static void slop_tilde_set(t_slop_tilde *x, t_floatarg q) +{ + x->x_last = q; +} + +static t_int *slop_tilde_perform(t_int *w) +{ + t_slop_tilde *x = (t_slop_tilde *)(w[1]); + t_sample *sigin = (t_sample *)(w[2]); + t_sample *freqin = (t_sample *)(w[3]); + t_sample *neglimit = (t_sample *)(w[4]); + t_sample *negfreqin = (t_sample *)(w[5]); + t_sample *poslimit = (t_sample *)(w[6]); + t_sample *posfreqin = (t_sample *)(w[7]); + t_sample coef = x->x_coef; + t_sample *out = (t_sample *)(w[8]); + int n = (int)w[9]; + int i; + t_sample last = x->x_last; + for (i = 0; i < n; i++) + { + t_sample diff = *sigin++ - last; + t_sample inc = *freqin++ * coef, diffinc; + t_sample posinc = *posfreqin++ * coef; + t_sample neginc = *negfreqin++ * coef; + t_sample maxdiff = *poslimit++; + t_sample mindiff = *neglimit++; + if (inc < 0.f) + inc = 0.f; + else if (inc > 1.f) + inc = 1.f; + if (posinc < 0.f) + posinc = 0.f; + else if (posinc > 1.f) + posinc = 1.f; + if (neginc < 0.f) + neginc = 0.f; + else if (neginc > 1.f) + neginc = 1.f; + if (maxdiff < 0) + maxdiff = 0; + if (mindiff < 0) + mindiff = 0; + if (diff > maxdiff) + diffinc = posinc * (diff- maxdiff) + inc * maxdiff; + else if (diff < -mindiff) + diffinc = neginc * (diff + mindiff) - inc * mindiff; + else diffinc = inc * diff; + last = *out++ = last + diffinc; + } + if (PD_BIGORSMALL(last)) + last = 0; + x->x_last = last; + return (w+10); +} + +static void slop_tilde_dsp(t_slop_tilde *x, t_signal **sp) +{ + x->x_coef = (2 * 3.14159) / sp[0]->s_sr; + dsp_add(slop_tilde_perform, 9, + x, sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec, sp[3]->s_vec, sp[4]->s_vec, + sp[5]->s_vec, sp[6]->s_vec, sp[0]->s_n); + +} + +void slop_tilde_setup(void) +{ + slop_tilde_class = class_new(gensym("slop~"), (t_newmethod)slop_tilde_new, 0, + sizeof(t_slop_tilde), 0, A_GIMME, 0); + CLASS_MAINSIGNALIN(slop_tilde_class, t_slop_tilde, x_f); + class_addmethod(slop_tilde_class, (t_method)slop_tilde_dsp, + gensym("dsp"), A_CANT, 0); + class_addmethod(slop_tilde_class, (t_method)slop_tilde_set, gensym("set"), + A_FLOAT, 0); +} + + /* ------------------------ setup routine ------------------------- */ void d_filter_setup(void) @@ -1079,4 +1187,5 @@ void d_filter_setup(void) sigcpole_setup(); sigczero_setup(); sigczero_rev_setup(); + slop_tilde_setup(); } diff --git a/src/d_global.c b/src/d_global.c index 1837c29561..0dac8904c5 100644 --- a/src/d_global.c +++ b/src/d_global.c @@ -317,11 +317,7 @@ static void sigthrow_set(t_sigthrow *x, t_symbol *s) x->x_whereto = 0; } } - else - { - pd_error(x, "throw~ %s: no matching catch", x->x_sym->s_name); - x->x_whereto = 0; - } + else x->x_whereto = 0; /* no match: now no longer considered an error */ } static void sigthrow_dsp(t_sigthrow *x, t_signal **sp) diff --git a/src/d_math.c b/src/d_math.c index b96c11e026..430bbdfc35 100644 --- a/src/d_math.c +++ b/src/d_math.c @@ -138,7 +138,7 @@ static void *sigrsqrt_new(void) static t_int *sigrsqrt_perform(t_int *w) { t_sample *in = (t_sample *)w[1], *out = (t_sample *)w[2]; - t_int n = *(t_int *)(w+3); + int n = (int)w[3]; while (n--) { t_sample f = *in++; @@ -197,7 +197,7 @@ static void *sigsqrt_new(void) t_int *sigsqrt_perform(t_int *w) /* not static; also used in d_fft.c */ { t_sample *in = (t_sample *)w[1], *out = (t_sample *)w[2]; - t_int n = *(t_int *)(w+3); + int n = (int)w[3]; while (n--) { t_sample f = *in++; @@ -253,7 +253,7 @@ static void *sigwrap_new(void) static t_int *sigwrap_perform(t_int *w) { t_sample *in = (t_sample *)w[1], *out = (t_sample *)w[2]; - t_int n = (t_int)w[3]; + int n = (int)w[3]; while (n--) { t_sample f = *in++; @@ -268,7 +268,7 @@ static t_int *sigwrap_perform(t_int *w) static t_int *sigwrap_old_perform(t_int *w) { t_sample *in = (t_sample *)w[1], *out = (t_sample *)w[2]; - t_int n = (t_int)w[3]; + int n = (int)w[3]; while (n--) { t_sample f = *in++; @@ -316,7 +316,7 @@ static void *mtof_tilde_new(void) static t_int *mtof_tilde_perform(t_int *w) { t_sample *in = (t_sample *)w[1], *out = (t_sample *)w[2]; - t_int n = (t_int)w[3]; + int n = (int)w[3]; for (; n--; in++, out++) { t_sample f = *in; @@ -365,7 +365,7 @@ static void *ftom_tilde_new(void) static t_int *ftom_tilde_perform(t_int *w) { t_sample *in = (t_sample *)w[1], *out = (t_sample *)w[2]; - t_int n = (t_int)w[3]; + int n = (int)w[3]; for (; n--; in++, out++) { t_sample f = *in; @@ -409,7 +409,7 @@ static void *dbtorms_tilde_new(void) static t_int *dbtorms_tilde_perform(t_int *w) { t_sample *in = (t_sample *)w[1], *out = (t_sample *)w[2]; - t_int n = (t_int)w[3]; + int n = (int)w[3]; for (; n--; in++, out++) { t_sample f = *in; @@ -459,7 +459,7 @@ static void *rmstodb_tilde_new(void) static t_int *rmstodb_tilde_perform(t_int *w) { t_sample *in = (t_sample *)w[1], *out = (t_sample *)w[2]; - t_int n = (t_int)w[3]; + int n = (int)w[3]; for (; n--; in++, out++) { t_sample f = *in; @@ -508,7 +508,7 @@ static void *dbtopow_tilde_new(void) static t_int *dbtopow_tilde_perform(t_int *w) { t_sample *in = (t_sample *)w[1], *out = (t_sample *)w[2]; - t_int n = (t_int)w[3]; + int n = (int)w[3]; for (; n--; in++, out++) { t_sample f = *in; @@ -558,7 +558,7 @@ static void *powtodb_tilde_new(void) static t_int *powtodb_tilde_perform(t_int *w) { t_sample *in = (t_sample *)w[1], *out = (t_sample *)w[2]; - t_int n = (t_int)w[3]; + int n = (int)w[3]; for (; n--; in++, out++) { t_sample f = *in; @@ -645,7 +645,7 @@ typedef struct _exp_tilde t_float x_f; } t_exp_tilde; -static void *exp_tilde_new( void) +static void *exp_tilde_new(void) { t_exp_tilde *x = (t_exp_tilde *)pd_new(exp_tilde_class); outlet_new(&x->x_obj, &s_signal); @@ -739,7 +739,7 @@ typedef struct _abs_tilde t_float x_f; } t_abs_tilde; -static void *abs_tilde_new( void) +static void *abs_tilde_new(void) { t_abs_tilde *x = (t_abs_tilde *)pd_new(abs_tilde_class); outlet_new(&x->x_obj, &s_signal); diff --git a/src/d_osc.c b/src/d_osc.c index e32b89f3eb..091103045f 100644 --- a/src/d_osc.c +++ b/src/d_osc.c @@ -219,10 +219,17 @@ static void cos_maketable(void) bug("cos~: unexpected machine alignment"); } +static void cos_cleanup(t_class *c) +{ + freebytes(cos_table, sizeof(float) * (COSTABSIZE+1)); + cos_table = 0; +} + static void cos_setup(void) { cos_class = class_new(gensym("cos~"), (t_newmethod)cos_new, 0, sizeof(t_cos), 0, A_DEFFLOAT, 0); + class_setfreefn(cos_class, cos_cleanup); CLASS_MAINSIGNALIN(cos_class, t_cos, x_f); class_addmethod(cos_class, (t_method)cos_dsp, gensym("dsp"), A_CANT, 0); cos_maketable(); diff --git a/src/d_ugen.c b/src/d_ugen.c index f5f12b1316..24282d0eba 100644 --- a/src/d_ugen.c +++ b/src/d_ugen.c @@ -49,7 +49,7 @@ struct _instanceugen #define THIS (pd_this->pd_ugen) -void d_ugen_newpdinstance( void) +void d_ugen_newpdinstance(void) { THIS = getbytes(sizeof(*THIS)); THIS->u_dspchain = 0; @@ -57,7 +57,7 @@ void d_ugen_newpdinstance( void) THIS->u_signals = 0; } -void d_ugen_freepdinstance( void) +void d_ugen_freepdinstance(void) { freebytes(THIS, sizeof(*THIS)); } @@ -387,7 +387,7 @@ int ilog2(int n) /* call this when DSP is stopped to free all the signals */ -void signal_cleanup(void) +static void signal_cleanup(void) { t_signal *sig; int i; @@ -454,7 +454,7 @@ void signal_makereusable(t_signal *sig) signal whose buffer and size will be obtained later via signal_setborrowed(). */ -t_signal *signal_new(int n, t_float sr) +static t_signal *signal_new(int n, t_float sr) { int logn, vecsize = 0; t_signal *ret, **whichlist; @@ -517,7 +517,7 @@ void signal_setborrowed(t_signal *sig, t_signal *sig2) if (THIS->u_loud) post("set borrowed %lx: %lx", sig, sig->s_vec); } -int signal_compatible(t_signal *s1, t_signal *s2) +static int signal_compatible(t_signal *s1, t_signal *s2) { return (s1->s_n == s2->s_n && s1->s_sr == s2->s_sr); } @@ -1177,7 +1177,7 @@ void ugen_done_graph(t_dspcontext *dc) } -t_signal *ugen_getiosig(int index, int inout) +static t_signal *ugen_getiosig(int index, int inout) { if (!THIS->u_context) bug("ugen_getiosig"); if (THIS->u_context->dc_toplevel) return (0); diff --git a/src/g_all_guis.c b/src/g_all_guis.c index 42ea1fbce4..668ed079c4 100644 --- a/src/g_all_guis.c +++ b/src/g_all_guis.c @@ -787,4 +787,3 @@ external GUI object uses obsolete Pd function iemgui_all_colfromload()"); iemgui->x_lcol = iemgui_color_hex[bflcol[2]]; } } - diff --git a/src/g_array.c b/src/g_array.c index 7376045de5..e5f54f5513 100644 --- a/src/g_array.c +++ b/src/g_array.c @@ -131,7 +131,7 @@ canvas 0 0 458 153 10;\n\ /* create invisible, built-in canvases to supply templates for floats and float-arrays. */ -void garray_init( void) +void garray_init(void) { t_binbuf *b; b = binbuf_new(); diff --git a/src/g_bang.c b/src/g_bang.c index b9b0a73f7e..ccf35ce742 100644 --- a/src/g_bang.c +++ b/src/g_bang.c @@ -72,7 +72,7 @@ void bng_draw_move(t_bng* x, t_glist* glist) void bng_draw_erase(t_bng* x, t_glist* glist) { - t_canvas* canvas = glist_getcanvas(glist); + t_canvas *canvas = glist_getcanvas(glist); g_iem_box_erase(canvas, &x->x_gui); g_figure_erase(canvas, x, "BTN"); @@ -131,8 +131,8 @@ void bng_draw(t_bng* x, t_glist* glist, int mode) /* ------------------------ bng widgetbehaviour----------------------------- */ -static void bng_getrect(t_gobj* z, t_glist* glist, - int* xp1, int* yp1, int* xp2, int* yp2) +static void bng_getrect(t_gobj *z, t_glist *glist, + int *xp1, int *yp1, int *xp2, int *yp2) { t_bng* x = (t_bng*)z; @@ -149,15 +149,15 @@ static void bng_save(t_gobj* z, t_binbuf* b) t_symbol* srl[3]; iemgui_save(&x->x_gui, srl, bflcol); - binbuf_addv(b, "ssiisiiiisssiiiisss", gensym("#X"), gensym("obj"), - (int)x->x_gui.x_obj.te_xpix, (int)x->x_gui.x_obj.te_ypix, - gensym("bng"), x->x_gui.x_w / IEMGUI_ZOOM(x), - x->x_flashtime_hold, x->x_flashtime_break, - iem_symargstoint(&x->x_gui.x_isa), - srl[0], srl[1], srl[2], - x->x_gui.x_ldx, x->x_gui.x_ldy, - iem_fstyletoint(&x->x_gui.x_fsf), x->x_gui.x_fontsize, - bflcol[0], bflcol[1], bflcol[2]); + binbuf_addv(b, "ssiisiiiisssiiiisss", gensym("#X"),gensym("obj"), + (int)x->x_gui.x_obj.te_xpix, (int)x->x_gui.x_obj.te_ypix, + gensym("bng"), x->x_gui.x_w/IEMGUI_ZOOM(x), + x->x_flashtime_hold, x->x_flashtime_break, + iem_symargstoint(&x->x_gui.x_isa), + srl[0], srl[1], srl[2], + x->x_gui.x_ldx, x->x_gui.x_ldy, + iem_fstyletoint(&x->x_gui.x_fsf), x->x_gui.x_fontsize, + bflcol[0], bflcol[1], bflcol[2]); binbuf_addv(b, ";"); } @@ -193,13 +193,13 @@ static void bng_properties(t_gobj* z, t_glist* owner) %s %d %d \ %d %d \ #%06x #%06x #%06x\n", - x->x_gui.x_w / IEMGUI_ZOOM(x), IEM_GUI_MINSIZE, - x->x_flashtime_break, x->x_flashtime_hold, 2, /*min_max_schedule+clip*/ - -1, x->x_gui.x_isa.x_loadinit, -1, -1, /*no linlog, no multi*/ - srl[0]->s_name, srl[1]->s_name, - srl[2]->s_name, x->x_gui.x_ldx, x->x_gui.x_ldy, - x->x_gui.x_fsf.x_font_style, x->x_gui.x_fontsize, - 0xffffff & x->x_gui.x_bcol, 0xffffff & x->x_gui.x_fcol, 0xffffff & x->x_gui.x_lcol); + x->x_gui.x_w/IEMGUI_ZOOM(x), IEM_GUI_MINSIZE, + x->x_flashtime_break, x->x_flashtime_hold, 2,/*min_max_schedule+clip*/ + -1, x->x_gui.x_isa.x_loadinit, -1, -1,/*no linlog, no multi*/ + srl[0]->s_name, srl[1]->s_name, + srl[2]->s_name, x->x_gui.x_ldx, x->x_gui.x_ldy, + x->x_gui.x_fsf.x_font_style, x->x_gui.x_fontsize, + 0xffffff & x->x_gui.x_bcol, 0xffffff & x->x_gui.x_fcol, 0xffffff & x->x_gui.x_lcol); gfxstub_new(&x->x_gui.x_obj.ob_pd, x, buf); } @@ -217,7 +217,7 @@ static void bng_set(t_bng* x) clock_delay(x->x_clock_hld, holdtime); } -static void bng_bout1(t_bng* x) /*wird nur mehr gesendet, wenn snd != rcv*/ +static void bng_bout1(t_bng *x) /*wird nur mehr gesendet, wenn snd != rcv*/ { if (!x->x_gui.x_fsf.x_put_in2out) { x->x_gui.x_isa.x_locked = 1; @@ -228,7 +228,7 @@ static void bng_bout1(t_bng* x) /*wird nur mehr gesendet, wenn snd != rcv*/ pd_bang(x->x_gui.x_snd->s_thing); } -static void bng_bout2(t_bng* x) /*wird immer gesendet, wenn moeglich*/ +static void bng_bout2(t_bng *x) /*wird immer gesendet, wenn moeglich*/ { if (!x->x_gui.x_fsf.x_put_in2out) { x->x_gui.x_isa.x_locked = 1; @@ -239,7 +239,7 @@ static void bng_bout2(t_bng* x) /*wird immer gesendet, wenn moeglich*/ pd_bang(x->x_gui.x_snd->s_thing); } -static void bng_bang(t_bng* x) /*wird nur mehr gesendet, wenn snd != rcv*/ +static void bng_bang(t_bng *x) /*wird nur mehr gesendet, wenn snd != rcv*/ { if (!x->x_gui.x_isa.x_locked) { bng_set(x); @@ -247,7 +247,7 @@ static void bng_bang(t_bng* x) /*wird nur mehr gesendet, wenn snd != rcv*/ } } -static void bng_bang2(t_bng* x) /*wird immer gesendet, wenn moeglich*/ +static void bng_bang2(t_bng *x) /*wird immer gesendet, wenn moeglich*/ { if (!x->x_gui.x_isa.x_locked) { bng_set(x); @@ -257,7 +257,7 @@ static void bng_bang2(t_bng* x) /*wird immer gesendet, wenn moeglich*/ static void bng_dialog(t_bng* x, t_symbol* s, int argc, t_atom* argv) { - t_symbol* srl[3]; + t_symbol *srl[3]; int a = (int)atom_getfloatarg(0, argc, argv); int fthold = (int)atom_getfloatarg(2, argc, argv); int ftbreak = (int)atom_getfloatarg(3, argc, argv); @@ -338,7 +338,7 @@ static void bng_pos(t_bng* x, t_symbol* s, int ac, t_atom* av) static void bng_flashtime(t_bng* x, t_symbol* s, int ac, t_atom* av) { bng_check_minmax(x, (int)atom_getfloatarg(0, ac, av), - (int)atom_getfloatarg(1, ac, av)); + (int)atom_getfloatarg(1, ac, av)); } static void bng_color(t_bng* x, t_symbol* s, int ac, t_atom* av) @@ -389,7 +389,7 @@ static void bng_tick_lck(t_bng* x) static void* bng_new(t_symbol* s, int argc, t_atom* argv) { - t_bng* x = (t_bng*)pd_new(bng_class); + t_bng *x = (t_bng *)pd_new(bng_class); int a = IEM_GUI_DEFAULTSIZE; int ldx = 17, ldy = 7; int fs = 10; @@ -403,14 +403,15 @@ static void* bng_new(t_symbol* s, int argc, t_atom* argv) x->x_gui.x_fcol = 0x00; x->x_gui.x_lcol = 0x00; - if ((argc == 14) && IS_A_FLOAT(argv, 0) - && IS_A_FLOAT(argv, 1) && IS_A_FLOAT(argv, 2) - && IS_A_FLOAT(argv, 3) - && (IS_A_SYMBOL(argv, 4) || IS_A_FLOAT(argv, 4)) - && (IS_A_SYMBOL(argv, 5) || IS_A_FLOAT(argv, 5)) - && (IS_A_SYMBOL(argv, 6) || IS_A_FLOAT(argv, 6)) - && IS_A_FLOAT(argv, 7) && IS_A_FLOAT(argv, 8) - && IS_A_FLOAT(argv, 9) && IS_A_FLOAT(argv, 10)) { + if((argc == 14)&&IS_A_FLOAT(argv,0) + &&IS_A_FLOAT(argv,1)&&IS_A_FLOAT(argv,2) + &&IS_A_FLOAT(argv,3) + &&(IS_A_SYMBOL(argv,4)||IS_A_FLOAT(argv,4)) + &&(IS_A_SYMBOL(argv,5)||IS_A_FLOAT(argv,5)) + &&(IS_A_SYMBOL(argv,6)||IS_A_FLOAT(argv,6)) + &&IS_A_FLOAT(argv,7)&&IS_A_FLOAT(argv,8) + &&IS_A_FLOAT(argv,9)&&IS_A_FLOAT(argv,10)) + { a = (int)atom_getfloatarg(0, argc, argv); fthold = (int)atom_getfloatarg(1, argc, argv); diff --git a/src/g_canvas.c b/src/g_canvas.c index bb9c347b4f..1cec4df465 100644 --- a/src/g_canvas.c +++ b/src/g_canvas.c @@ -75,7 +75,7 @@ void canvas_declare(t_canvas *x, t_symbol *s, int argc, t_atom *argv); /* maintain the list of visible toplevels for the GUI's "windows" menu */ -void canvas_updatewindowlist( void) +void canvas_updatewindowlist(void) { /* not if we're in a reload */ if (!THISGUI->i_reloadingabstraction) @@ -151,7 +151,7 @@ t_canvasenvironment *canvas_getenv(const t_canvas *x) return (x->gl_env); } -int canvas_getdollarzero( void) +int canvas_getdollarzero(void) { t_canvas *x = canvas_getcurrent(); t_canvasenvironment *env = (x ? canvas_getenv(x) : 0); @@ -221,13 +221,13 @@ void canvas_rename(t_canvas *x, t_symbol *s, t_symbol *dir) canvas_unbind(x); x->gl_name = s; canvas_bind(x); - if (x->gl_havewindow) - canvas_reflecttitle(x); if (dir && dir != &s_) { t_canvasenvironment *e = canvas_getenv(x); e->ce_dir = dir; } + if (x->gl_havewindow) + canvas_reflecttitle(x); } /* --------------- traversing the set of lines in a canvas ----------- */ @@ -324,6 +324,7 @@ void glist_init(t_glist *x) x->gl_valid = ++glist_valid; x->gl_xlabel = (t_symbol **)t_getbytes(0); x->gl_ylabel = (t_symbol **)t_getbytes(0); + x->gl_privatedata = getbytes(sizeof(t_canvas_private)); } /* make a new glist. It will either be a "root" canvas or else @@ -382,9 +383,7 @@ t_canvas *canvas_new(void *dummy, t_symbol *sel, int argc, t_atom *argv) else x->gl_env = 0; /* initialize private data, like the undo-queue */ - private = getbytes(sizeof(*private)); - x->gl_privatedata = private; - private->undo.u_queue = canvas_undo_init(x); + canvas_undo_init(x); x->gl_x1 = 0; x->gl_y1 = 0; @@ -413,7 +412,7 @@ t_canvas *canvas_new(void *dummy, t_symbol *sel, int argc, t_atom *argv) x->gl_willvis = vis; x->gl_edit = !strncmp(x->gl_name->s_name, "Untitled", 8); x->gl_font = sys_nearestfontsize(font); - x->gl_zoom = 1; + x->gl_zoom = (owner ? owner->gl_zoom : 1); pd_pushsym(&x->gl_pd); return(x); } @@ -422,6 +421,9 @@ void canvas_setgraph(t_glist *x, int flag, int nogoprect); static void canvas_coords(t_glist *x, t_symbol *s, int argc, t_atom *argv) { + /* FIXME: this is a stopgap - we should always be using + glist_getzoom() and never gl_zoom in rest of code. */ + x->gl_zoom = glist_getzoom(x); x->gl_x1 = atom_getfloatarg(0, argc, argv); x->gl_y1 = atom_getfloatarg(1, argc, argv); x->gl_x2 = atom_getfloatarg(2, argc, argv); @@ -491,7 +493,7 @@ t_glist *glist_addglist(t_glist *g, t_symbol *sym, x->gl_pixheight = py2 - py1; x->gl_font = (canvas_getcurrent() ? canvas_getcurrent()->gl_font : sys_defaultfont); - x->gl_zoom = 1; + x->gl_zoom = g->gl_zoom; x->gl_screenx1 = 0; x->gl_screeny1 = GLIST_DEFCANVASYLOC; x->gl_screenx2 = 450; @@ -501,6 +503,9 @@ t_glist *glist_addglist(t_glist *g, t_symbol *sym, x->gl_isgraph = 1; x->gl_goprect = 0; x->gl_obj.te_binbuf = binbuf_new(); + /* initialize private data, like the undo-queue */ + canvas_undo_init(x); + binbuf_addv(x->gl_obj.te_binbuf, "s", gensym("graph")); if (!menu) pd_pushsym(&x->gl_pd); @@ -561,13 +566,13 @@ static void canvas_dosetbounds(t_canvas *x, int x1, int y1, int x2, int y2) parent. */ t_float diff = x->gl_y1 - x->gl_y2; t_gobj *y; - x->gl_y1 = heightwas * diff; + x->gl_y1 = heightwas * diff/x->gl_zoom; x->gl_y2 = x->gl_y1 - diff; /* and move text objects accordingly; they should stick to the bottom, not the top. */ for (y = x->gl_list; y; y = y->g_next) if (pd_checkobject(&y->g_pd)) - gobj_displace(y, x, 0, heightchange); + gobj_displace(y, x, 0, heightchange/x->gl_zoom); canvas_redraw(x); } } @@ -599,6 +604,11 @@ void canvas_reflecttitle(t_canvas *x) { char namebuf[MAXPDSTRING]; t_canvasenvironment *env = canvas_getenv(x); + if (!x->gl_havewindow) + { + bug("canvas_reflecttitle"); + return; + } if (env->ce_argc) { int i; @@ -683,6 +693,11 @@ void canvas_map(t_canvas *x, t_floatarg f) { if (glist_isvisible(x)) { + if (!x->gl_havewindow) + { + bug("canvas_map"); + return; + } /* just clear out the whole canvas */ g_delete_all(x); x->gl_mapped = 0; @@ -816,7 +831,7 @@ void canvas_fixlinesfor(t_canvas *x, t_text *text) { t_linetraverser t; t_outconnect *oc; - + linetraverser_start(&t, x); t_canvas* canvas = glist_getcanvas(x); while ((oc = linetraverser_next(&t))) @@ -1462,7 +1477,7 @@ static void canvas_completepath(const char *from, char *to, int bufsize, { /* append canvas dir */ const char *dir = canvas_getdir(x)->s_name; - int dirlen = strlen(dir); + int dirlen = (int)strlen(dir); strncpy(to, dir, bufsize-dirlen); to[bufsize-dirlen-1] = '\0'; strcat(to, "/"); @@ -2030,7 +2045,7 @@ void canvas_add_for_class(t_class *c) /* g_graph_setup_class(c); */ } -void g_canvas_newpdinstance( void) +void g_canvas_newpdinstance(void) { THISGUI = getbytes(sizeof(*THISGUI)); THISGUI->i_newfilename = THISGUI->i_newdirectory = &s_; @@ -2043,7 +2058,7 @@ void g_canvas_newpdinstance( void) g_template_newpdinstance(); } -void g_canvas_freepdinstance( void) +void g_canvas_freepdinstance(void) { g_editor_freepdinstance(); g_template_freepdinstance(); diff --git a/src/g_canvas.h b/src/g_canvas.h index e0719b2ca0..31cc59a9a2 100644 --- a/src/g_canvas.h +++ b/src/g_canvas.h @@ -272,10 +272,10 @@ struct _instancecanvas t_float i_graph_lastxpix, i_graph_lastypix; }; -void g_editor_newpdinstance( void); -void g_template_newpdinstance( void); -void g_editor_freepdinstance( void); -void g_template_freepdinstance( void); +void g_editor_newpdinstance(void); +void g_template_newpdinstance(void); +void g_editor_freepdinstance(void); +void g_template_freepdinstance(void); #define THISGUI (pd_this->pd_gui) #define EDITOR (pd_this->pd_gui->i_editor) @@ -504,7 +504,7 @@ typedef int (*t_canvasapply)(t_canvas *x, t_int x1, t_int x2, t_int x3); EXTERN void canvas_resortinlets(t_canvas *x); EXTERN void canvas_resortoutlets(t_canvas *x); EXTERN void canvas_free(t_canvas *x); -EXTERN void canvas_updatewindowlist( void); +EXTERN void canvas_updatewindowlist(void); EXTERN void canvas_editmode(t_canvas *x, t_floatarg state); EXTERN int canvas_isabstraction(const t_canvas *x); EXTERN int canvas_istable(const t_canvas *x); diff --git a/src/g_editor.c b/src/g_editor.c index 82b12cb095..647f938e34 100644 --- a/src/g_editor.c +++ b/src/g_editor.c @@ -234,64 +234,65 @@ static void glist_checkanddeselectall(t_glist *gl, t_gobj *g) void glist_deselect(t_glist *x, t_gobj *y) { int fixdsp = 0; - if (x->gl_editor) + t_selection *sel, *sel2; + t_rtext *z = 0; + + if (!x->gl_editor) + return; + + if (!glist_isselected(x, y)) bug("glist_deselect"); + if (x->gl_editor->e_textedfor) { - t_selection *sel, *sel2; - t_rtext *z = 0; - if (!glist_isselected(x, y)) bug("glist_deselect"); - if (x->gl_editor->e_textedfor) + t_rtext *fuddy = glist_findrtext(x, (t_text *)y); + if (x->gl_editor->e_textedfor == fuddy) { - t_rtext *fuddy = glist_findrtext(x, (t_text *)y); - if (x->gl_editor->e_textedfor == fuddy) + if (x->gl_editor->e_textdirty) { - if (x->gl_editor->e_textdirty) - { - z = fuddy; - canvas_undo_add(x, UNDO_SEQUENCE_START, "typing", 0); - canvas_undo_add(x, UNDO_ARRANGE, "arrange", - canvas_undo_set_arrange(x, y, 1)); - canvas_stowconnections(glist_getcanvas(x)); - glist_checkanddeselectall(x, y); - } - gobj_activate(y, x, 0); + z = fuddy; + canvas_undo_add(x, UNDO_SEQUENCE_START, "typing", 0); + canvas_undo_add(x, UNDO_ARRANGE, "arrange", + canvas_undo_set_arrange(x, y, 1)); + canvas_stowconnections(glist_getcanvas(x)); + glist_checkanddeselectall(x, y); } - if (zgetfn(&y->g_pd, gensym("dsp"))) - fixdsp = canvas_suspend_dsp(); - } - if ((sel = x->gl_editor->e_selection)->sel_what == y) - { - x->gl_editor->e_selection = x->gl_editor->e_selection->sel_next; - gobj_select(sel->sel_what, x, 0); - freebytes(sel, sizeof(*sel)); + gobj_activate(y, x, 0); } - else + if (zgetfn(&y->g_pd, gensym("dsp"))) + fixdsp = canvas_suspend_dsp(); + } + if ((sel = x->gl_editor->e_selection)->sel_what == y) + { + x->gl_editor->e_selection = x->gl_editor->e_selection->sel_next; + gobj_select(sel->sel_what, x, 0); + freebytes(sel, sizeof(*sel)); + } + else + { + for (sel = x->gl_editor->e_selection; (sel2 = sel->sel_next); + sel = sel2) { - for (sel = x->gl_editor->e_selection; (sel2 = sel->sel_next); - sel = sel2) + if (sel2->sel_what == y) { - if (sel2->sel_what == y) - { - sel->sel_next = sel2->sel_next; - gobj_select(sel2->sel_what, x, 0); - freebytes(sel2, sizeof(*sel2)); - break; - } + sel->sel_next = sel2->sel_next; + gobj_select(sel2->sel_what, x, 0); + freebytes(sel2, sizeof(*sel2)); + break; } } - if (z) - { - char *buf; - int bufsize; + } + if (z) + { + char *buf; + int bufsize; - rtext_gettext(z, &buf, &bufsize); - text_setto((t_text *)y, x, buf, bufsize); - canvas_fixlinesfor(x, (t_text *)y); - x->gl_editor->e_textedfor = 0; - canvas_undo_add(x, UNDO_SEQUENCE_END, "typing", 0); - } - if (fixdsp) - canvas_resume_dsp(1); + rtext_gettext(z, &buf, &bufsize); + text_setto((t_text *)y, x, buf, bufsize); + canvas_fixlinesfor(x, (t_text *)y); + x->gl_editor->e_textedfor = 0; + canvas_undo_add(x, UNDO_SEQUENCE_END, "typing", 0); } + if (fixdsp) + canvas_resume_dsp(1); } void glist_noselect(t_glist *x) @@ -760,7 +761,8 @@ int canvas_undo_cut(t_canvas *x, void *z, int action) } } /* LATER disable redrawing here */ - canvas_redraw(x); + if (x->gl_havewindow) + canvas_redraw(x); if (x->gl_owner && glist_isvisible(x->gl_owner)) { gobj_vis((t_gobj *)x, x->gl_owner, 0); @@ -1085,7 +1087,7 @@ int canvas_undo_apply(t_canvas *x, void *z, int action) /* connections should stay the same */ canvas_applybinbuf(x, buf->u_reconnectbuf); /* now we need to reposition the object to its original place */ - if (canvas_apply_restore_original_position(x, buf->u_index)) + if (canvas_apply_restore_original_position(x, buf->u_index) && x->gl_havewindow) canvas_redraw(x); } else if (action == UNDO_FREE) @@ -1263,9 +1265,6 @@ int canvas_undo_arrange(t_canvas *x, void *z, int action) y->g_next = next; x->gl_list = y; } - - /* and finally redraw canvas */ - canvas_redraw(x); } else { /* if it is the first object */ @@ -1283,10 +1282,10 @@ int canvas_undo_arrange(t_canvas *x, void *z, int action) /* now readjust pointers */ prev->g_next = y; y->g_next = next; - - /* and finally redraw canvas */ - canvas_redraw(x); } + /* and finally redraw canvas */ + if (x->gl_havewindow) + canvas_redraw(x); break; case UNDO_REDO: { @@ -1450,7 +1449,8 @@ int canvas_undo_canvas_apply(t_canvas *x, void *z, int action) glist_noselect(x); gobj_vis(&x->gl_gobj, x->gl_owner, 0); gobj_vis(&x->gl_gobj, x->gl_owner, 1); - canvas_redraw(x->gl_owner); + if (x->gl_owner->gl_havewindow) + canvas_redraw(x->gl_owner); } } @@ -1633,7 +1633,7 @@ int canvas_undo_recreate(t_canvas *x, void *z, int action) /* reposition object to its original place */ if (action == UNDO_UNDO) - if (canvas_apply_restore_original_position(x, buf->u_index)) + if (canvas_apply_restore_original_position(x, buf->u_index) && x->gl_havewindow) canvas_redraw(x); /* send a loadbang */ @@ -1772,6 +1772,7 @@ static void glist_doreload(t_glist *gl, t_symbol *name, t_symbol *dir, { canvas_cut(gl); canvas_undo_undo(gl); + canvas_undo_rebranch(gl); glist_noselect(gl); } @@ -1794,11 +1795,21 @@ void canvas_reload(t_symbol *name, t_symbol *dir, t_glist *except) { t_canvas *x; int dspwas = canvas_suspend_dsp(); + t_binbuf*b = 0; + if(EDITOR->copy_binbuf) + b = binbuf_duplicate(EDITOR->copy_binbuf); + THISGUI->i_reloadingabstraction = except; /* find all root canvases */ for (x = pd_getcanvaslist(); x; x = x->gl_next) glist_doreload(x, name, dir, &except->gl_gobj); THISGUI->i_reloadingabstraction = 0; + if(b) + { + if(EDITOR->copy_binbuf) + binbuf_free(EDITOR->copy_binbuf); + EDITOR->copy_binbuf = b; + } canvas_resume_dsp(dspwas); } @@ -1881,7 +1892,7 @@ static t_gobj *canvas_findhitbox(t_canvas *x, int xpos, int ypos, static void canvas_rightclick(t_canvas *x, int xpos, int ypos, t_gobj *y) { int canprop, canopen; - canprop = (!y || (y && class_getpropertiesfn(pd_class(&y->g_pd)))); + canprop = (!y || class_getpropertiesfn(pd_class(&y->g_pd))); canopen = (y && zgetfn(&y->g_pd, gensym("menu-open"))); // ceammc: open dialog at specified position t_canvas* cnv = glist_getcanvas(x); @@ -1967,7 +1978,6 @@ void canvas_vis(t_canvas *x, t_floatarg f) else { char cbuf[MAXPDSTRING]; - int cbuflen; t_canvas *c = x; t_undo *undo = canvas_undo_get(x); t_undo_action *udo = undo ? undo->u_last : 0; @@ -1980,6 +1990,7 @@ void canvas_vis(t_canvas *x, t_floatarg f) snprintf(cbuf, MAXPDSTRING - 2, "pdtk_canvas_setparents .x%lx", (unsigned long)c); while (c->gl_owner) { + int cbuflen; c = c->gl_owner; cbuflen = (int)strlen(cbuf); snprintf(cbuf + cbuflen, @@ -1988,8 +1999,8 @@ void canvas_vis(t_canvas *x, t_floatarg f) } strcat(cbuf, "\n"); sys_gui(cbuf); - canvas_reflecttitle(x); x->gl_havewindow = 1; + canvas_reflecttitle(x); canvas_updatewindowlist(); sys_vgui("pdtk_undomenu .x%lx %s %s\n", x, udo?(udo->name):"no", (udo && udo->next)?(udo->next->name):"no"); } @@ -2136,18 +2147,9 @@ static void canvas_donecanvasdialog(t_glist *x, argument supplied. */ if (fromgui && (!(graphme & 1))) graphme = 0; - /* parent windows are treated differently than applies to - individual objects */ - if (glist_getcanvas(x) != x && !canvas_isabstraction(x)) - { - /* JMZ: i don't know how to trigger this path */ - t_canvas*x2 = glist_getcanvas(x); - canvas_undo_add(x2, UNDO_APPLY, "apply", canvas_undo_set_apply(x2, glist_getindex(x2, &x->gl_gobj))); - } - else - { - canvas_undo_add(x, UNDO_CANVAS_APPLY, "apply", canvas_undo_set_canvas(x)); - } + /* parent windows are treated the same as + applies to individual objects */ + canvas_undo_add(x, UNDO_CANVAS_APPLY, "apply", canvas_undo_set_canvas(x)); x->gl_pixwidth = xpix * x->gl_zoom; x->gl_pixheight = ypix * x->gl_zoom; @@ -2288,7 +2290,7 @@ static void canvas_done_popup(t_canvas *x, t_float which, #define DCLICKINTERVAL 0.25 /* mouse click */ -void canvas_doclick(t_canvas *x, int xpos, int ypos, int which, +static void canvas_doclick(t_canvas *x, int xpos, int ypos, int which, int mod, int doit) { t_gobj *y; @@ -2357,7 +2359,7 @@ void canvas_doclick(t_canvas *x, int xpos, int ypos, int which, /* if not a runmode left click, fall here. */ if ((y = canvas_findhitbox(x, xpos, ypos, &x1, &y1, &x2, &y2))) { - t_object *ob = pd_checkobject(&y->g_pd); + t_object *ob; /* check you're in the rectangle */ ob = pd_checkobject(&y->g_pd); if (rightclick) @@ -2647,7 +2649,7 @@ static int tryconnect(t_canvas*x, t_object*src, int nout, t_object*sink, int nin return 0; } -void canvas_doconnect(t_canvas *x, int xpos, int ypos, int which, int doit) +static void canvas_doconnect(t_canvas *x, int xpos, int ypos, int mod, int doit) { int x11=0, y11=0, x12=0, y12=0; t_gobj *y1; @@ -2656,9 +2658,8 @@ void canvas_doconnect(t_canvas *x, int xpos, int ypos, int which, int doit) int xwas = x->gl_editor->e_xwas, ywas = x->gl_editor->e_ywas; #if 0 - post("canvas_doconnect(%p, %d, %d, %d, %d)", x, xpos, ypos, which, doit); + post("canvas_doconnect(%p, %d, %d, %d, %d)", x, xpos, ypos, mod, doit); #endif - if (doit) g_selection_clear(x); else @@ -2714,13 +2715,14 @@ void canvas_doconnect(t_canvas *x, int xpos, int ypos, int which, int doit) if (doit) { t_selection *sel; - int selmode; + int selmode = 0; canvas_undo_add(x, UNDO_SEQUENCE_START, "connect", 0); tryconnect(x, ob1, closest1, ob2, closest2); canvas_dirty(x, 1); /* now find out if either ob1 xor ob2 are part of the selection, * and if so, connect the rest of the selection as well */ - selmode = glist_isselected(x, &ob1->ob_g) + 2 * glist_isselected(x, &ob2->ob_g); + if(mod & SHIFTMOD) /* intelligent patching needs to be activated by modifier key */ + selmode = glist_isselected(x, &ob1->ob_g) + 2 * glist_isselected(x, &ob2->ob_g); switch(selmode) { case 3: /* both source and sink are selected */ /* if only the source & sink are selected, keep connecting them */ @@ -2889,11 +2891,13 @@ static void canvas_doregion(t_canvas *x, int xpos, int ypos, int doit) } void canvas_mouseup(t_canvas *x, - t_floatarg fxpos, t_floatarg fypos, t_floatarg fwhich) + t_floatarg fxpos, t_floatarg fypos, t_floatarg fwhich, + t_floatarg fmod) { int xpos = fxpos, ypos = fypos, which = fwhich; + int mod = fmod; #if 0 - post("mouseup %d %d %d", xpos, ypos, which); + post("mouseup %d %d %d %d", xpos, ypos, which, mod); #endif if (!x->gl_editor) { @@ -2906,7 +2910,7 @@ void canvas_mouseup(t_canvas *x, EDITOR->canvas_upy = ypos; if (x->gl_editor->e_onmotion == MA_CONNECT) - canvas_doconnect(x, xpos, ypos, which, 1); + canvas_doconnect(x, xpos, ypos, mod, 1); else if (x->gl_editor->e_onmotion == MA_REGION) canvas_doregion(x, xpos, ypos, 1); else if (x->gl_editor->e_onmotion == MA_MOVE || @@ -3148,11 +3152,12 @@ void canvas_key(t_canvas *x, t_symbol *s, int ac, t_atom *av) static void delay_move(t_canvas *x) { - canvas_displaceselection(x, - x->gl_editor->e_xnew - x->gl_editor->e_xwas, - x->gl_editor->e_ynew - x->gl_editor->e_ywas); - x->gl_editor->e_xwas = x->gl_editor->e_xnew; - x->gl_editor->e_ywas = x->gl_editor->e_ynew; + int incx = (x->gl_editor->e_xnew - x->gl_editor->e_xwas)/x->gl_zoom, + incy = (x->gl_editor->e_ynew - x->gl_editor->e_ywas)/x->gl_zoom; + if (incx || incy) + canvas_displaceselection(x, incx, incy); + x->gl_editor->e_xwas += incx * x->gl_zoom; + x->gl_editor->e_ywas += incy * x->gl_zoom; } void canvas_motion(t_canvas *x, t_floatarg xpos, t_floatarg ypos, @@ -3181,7 +3186,7 @@ void canvas_motion(t_canvas *x, t_floatarg xpos, t_floatarg ypos, canvas_doregion(x, xpos, ypos, 0); else if (x->gl_editor->e_onmotion == MA_CONNECT) { - canvas_doconnect(x, xpos, ypos, 0, 0); + canvas_doconnect(x, xpos, ypos, mod, 0); x->gl_editor->e_xnew = xpos; x->gl_editor->e_ynew = ypos; } @@ -3262,18 +3267,20 @@ void canvas_print(t_canvas *x, t_symbol *s) else sys_vgui(".x%lx.c postscript -file x.ps\n", x); } - /* find a dirty sub-glist, if any, of this one (including itself) */ + /* find the innermost dirty sub-glist, if any, of this one (including itself) */ static t_glist *glist_finddirty(t_glist *x) { t_gobj *g; t_glist *g2; - if (x->gl_env && x->gl_dirty) - return (x); for (g = x->gl_list; g; g = g->g_next) if (pd_class(&g->g_pd) == canvas_class && (g2 = glist_finddirty((t_glist *)g))) return (g2); - return (0); + + if (x->gl_env && x->gl_dirty) + return (x); + else + return (0); } /* quit, after calling glist_finddirty() on all toplevels and verifying @@ -3338,7 +3345,7 @@ void canvas_menuclose(t_canvas *x, t_floatarg fforce) { vmess(&g->gl_pd, gensym("menu-open"), ""); sys_vgui("pdtk_canvas_menuclose .x%lx {.x%lx menuclose 2;\n}\n", - canvas_getrootfor(x), g); + canvas_getrootfor(g), g); return; } else pd_free(&x->gl_pd); @@ -3362,7 +3369,7 @@ static void canvas_menufont(t_canvas *x) typedef void (*t_zoomfn)(void *x, t_floatarg arg1); -#define REZOOM(x, y) ((x) = ((y) == 2 ? (x)*2 : (x)/2)) +/* LATER, if canvas is flipped, re-scroll to preserve bottom left corner */ static void canvas_zoom(t_canvas *x, t_floatarg zoom) { if (zoom != x->gl_zoom && (zoom == 1 || zoom == 2)) @@ -3371,24 +3378,28 @@ static void canvas_zoom(t_canvas *x, t_floatarg zoom) t_object *obj; for (g = x->gl_list; g; g = g->g_next) if ((obj = pd_checkobject(&g->g_pd))) - { - t_gotfn zoommethod; - REZOOM(obj->te_xpix, zoom); - REZOOM(obj->te_ypix, zoom); - /* pass zoom message on to all objects, except canvases - that aren't GOP */ - if ((zoommethod = zgetfn(&obj->te_pd, gensym("zoom"))) && - (!(pd_class(&obj->te_pd) == canvas_class) || - (((t_glist *)obj)->gl_isgraph))) + { + /* pass zoom message on to all objects, except canvases + that aren't GOP */ + t_gotfn zoommethod; + if ((zoommethod = zgetfn(&obj->te_pd, gensym("zoom"))) && + (!(pd_class(&obj->te_pd) == canvas_class) || + (((t_glist *)obj)->gl_isgraph))) (*(t_zoomfn)zoommethod)(&obj->te_pd, zoom); - } + } x->gl_zoom = zoom; - REZOOM(x->gl_xmargin, zoom); - REZOOM(x->gl_ymargin, zoom); - REZOOM(x->gl_pixwidth, zoom); - REZOOM(x->gl_pixheight, zoom); if (x->gl_havewindow) + { + if (!glist_isgraph(x) && (x->gl_y2 < x->gl_y1)) + { + /* if it's flipped so that y grows upward, + fix so that zero is bottom edge as in canvas_dosetbounds() */ + t_float diff = x->gl_y1 - x->gl_y2; + x->gl_y1 = (x->gl_screeny2 - x->gl_screeny1) * diff/x->gl_zoom; + x->gl_y2 = x->gl_y1 - diff; + } canvas_redraw(x); + } } } @@ -4091,6 +4102,9 @@ static void canvas_duplicate(t_canvas *x) if (x->gl_editor->e_onmotion == MA_NONE && x->gl_editor->e_selection) { t_selection *y; + t_binbuf*b = 0; + if(EDITOR->copy_binbuf) + b = binbuf_duplicate(EDITOR->copy_binbuf); canvas_copy(x); canvas_undo_add(x, UNDO_PASTE, "duplicate", (void *)canvas_undo_set_paste(x, 0, 1, PASTE_OFFSET)); @@ -4098,6 +4112,12 @@ static void canvas_duplicate(t_canvas *x) for (y = x->gl_editor->e_selection; y; y = y->sel_next) gobj_displace(y->sel_what, x, PASTE_OFFSET, PASTE_OFFSET); + if(b) + { + if(EDITOR->copy_binbuf) + binbuf_free(EDITOR->copy_binbuf); + EDITOR->copy_binbuf = b; + } canvas_dirty(x, 1); } } @@ -4119,6 +4139,129 @@ static void canvas_selectall(t_canvas *x) } } +static void canvas_deselectall(t_canvas *x) +{ + if(x)glist_noselect(x); +} +static void canvas_cycleselect(t_canvas*x, t_float foffset) +{ + /* select (currentselection+offset)%objectcount */ + int offset = (int)foffset; + if (!x->gl_editor) + return; + + if (x->gl_editor->e_onmotion == MA_CONNECT) + { + /* during connection, cycle through inlets/outlets */ + int xwas = x->gl_editor->e_xwas, + ywas = x->gl_editor->e_ywas; + int xpos = EDITOR->canvas_last_glist_x, + ypos = EDITOR->canvas_last_glist_y; + t_object *src, *snk; + t_gobj*gobj; + int srcX1=0, srcY1=0, srcX2=0, srcY2=0; + int snkX1=0, snkY1=0, snkX2=0, snkY2=0; + if(EDITOR->canvas_last_glist != x) + /* we don't know the current mouse coordinates in this canvas, so return... */ + return; + gobj = canvas_findhitbox(x, xwas, ywas, &srcX1, &srcY1, &srcX2, &srcY2); + src = gobj?pd_checkobject(&gobj->g_pd):0; + gobj = canvas_findhitbox(x, xpos, ypos, &snkX1, &snkY1, &snkX2, &snkY2); + snk = gobj?pd_checkobject(&gobj->g_pd):0; + + if(!src) /* this should never happen */ + return; + + /* are we hovering over an object? + * - if so, cycle through inlets + * - else, cycle through outlets + */ + if(snk && snk != src) { + /* cycle inlets */ + int width = snkX2 - snkX1, hotspot, closest; + int nios = obj_ninlets(snk); + if (nios <= 1) /* no use cycling */ + return; + closest = ((xpos-snkX1) * (nios-1) + width/2)/width; + closest = ((closest + offset) % nios + nios) % nios; + hotspot = snkX1 + (width - IOWIDTH) * closest / (nios-1.0) + IOWIDTH*0.5; + sys_vgui("::pdtk_canvas::setmouse .x%lx.c %d %d\n", + glist_getcanvas(x), hotspot, ypos); + } else { + /* cycle outlets */ + int width = srcX2 - srcX1, hotspot, closest; + int nios = obj_noutlets(src); + if (nios <= 1) /* no use cycling */ + return; + closest = ((xwas-srcX1) * (nios-1) + width/2)/width; + closest = ((closest + offset) % nios + nios) % nios; + hotspot = srcX1 + (width - IOWIDTH) * closest / (nios-1.0) + IOWIDTH*0.5; + x->gl_editor->e_xwas = hotspot; + canvas_doconnect(x, xpos, ypos, 0, 0); + } + return; + } + if (x->gl_editor->e_selection) + { + /* cycle the selection to the next object */ + int newindex; + int objectcount = glist_getindex(x, 0); + /* only cycle selection if the current selection contains exactly 1 item */ + t_gobj* y = x->gl_editor->e_selection->sel_next ? 0 : x->gl_editor->e_selection->sel_what; + if(!y)return; + newindex = (glist_getindex(x, y) + offset) % objectcount; + if (newindex < 0) newindex += objectcount; + glist_deselect(x, y); + glist_select(x, glist_nth(x, newindex)); + return; + } + if (x->gl_editor->e_selectedline) + { + /* if (only) a line is selected, cycle to next line */ + int connectioncount = 0; + int foundit = 0; + t_linetraverser t; + t_outconnect *oc = 0; + + linetraverser_start(&t, x); + while (offset && (oc = linetraverser_next(&t))) + { + connectioncount++; + if(!foundit) { + int srcno = glist_getindex(x, &t.tr_ob->ob_g); + int sinkno = glist_getindex(x, &t.tr_ob2->ob_g); + if((srcno == x->gl_editor->e_selectline_index1) && + (t.tr_outno == x->gl_editor->e_selectline_outno) && + (sinkno == x->gl_editor->e_selectline_index2) && + (t.tr_inno == x->gl_editor->e_selectline_inno)) { + foundit = connectioncount; + } + } else + offset--; + } + + /* if the offset is non-0, wrap it... */ + if (offset) + { + offset = (((offset - 1) % connectioncount) + connectioncount) + % connectioncount; + /* ... and start from the beginning */ + linetraverser_start(&t, x); + while ((oc = linetraverser_next(&t))) + { + if(!offset)break; + offset--; + } + } + if (oc) + glist_selectline(x, oc, + glist_getindex(x, &t.tr_ob->ob_g), t.tr_outno, + glist_getindex(x, &t.tr_ob2->ob_g), t.tr_inno); + return; + } +} + + static void canvas_reselect(t_canvas *x) { t_gobj *g, *gwas; @@ -4212,7 +4355,7 @@ static void canvas_tidy(t_canvas *x) othewise just the selection */ int all = (x->gl_editor ? (x->gl_editor->e_selection == 0) : 1); - canvas_undo_add(x, UNDO_MOTION, "motion", canvas_undo_set_move(x, 1)); + canvas_undo_add(x, UNDO_MOTION, "{tidy up}", canvas_undo_set_move(x, !all)); /* tidy horizontally */ for (y = x->gl_list; y; y = y->g_next) @@ -4267,7 +4410,7 @@ static void canvas_tidy(t_canvas *x) bestdist = i; } } - post("best vertical distance %d", bestdist); + logpost(NULL, 3, "tidy: best vertical distance %d", bestdist); for (y = x->gl_list; y; y = y->g_next) if (all || glist_isselected(x, y)) { @@ -4361,21 +4504,23 @@ static int canvas_try_bypassobj1(t_canvas* x, canvas_connect_with_undo(x, A, out0, C, in2); return 1; } -static int canvas_try_insert(t_canvas *x, - t_object* obj00, int in00, int out00, - t_object* obj11, int in11, int out11, - t_object* obj22, int in22, int out22) +static int canvas_try_insert(t_canvas *x + , t_object* obj00, int in00, int out00 /* source */ + , t_object* obj11, int in11, int out11 /* sink */ + , t_object* obj22, int in22, int out22 /* insert */ + ) { + int out21 = 0, in02 = 0; /* iolets of the insert-objects */ int A, B, C; + /* check connections (obj00->obj11, but not obj22) */ if(out00<0 || out22>=0 || out11>=0 || in00>=0 || in22>=0 || in11<0) return 0; /* check whether the connection types match */ - A = obj_issignaloutlet(obj00, out00); - B = obj_issignalinlet(obj22, in11); - C = obj_issignaloutlet(obj22, out00); - if(!((A && B && C) || !(A || B || C))) + if((obj_issignaloutlet(obj00, out00) && !obj_issignalinlet(obj22, in02))) + return 0; + if((obj_issignaloutlet(obj22, out21) && !obj_issignalinlet(obj11, in11))) return 0; /* then connect them */ @@ -4384,10 +4529,10 @@ static int canvas_try_insert(t_canvas *x, C = glist_getindex(x, &obj22->te_g); canvas_disconnect_with_undo(x, A, out00, B, in11); - if (!canvas_isconnected(x, obj00, out00, obj22, in11)) - canvas_connect_with_undo(x, A, out00, C, in11); - if (!canvas_isconnected(x, obj22, out00, obj11, in11)) - canvas_connect_with_undo(x, C, out00, B, in11); + if (!canvas_isconnected (x, obj00, out00, obj22, in02)) + canvas_connect_with_undo(x, A, out00, C, in02); + if (!canvas_isconnected (x, obj22, out21, obj11, in11)) + canvas_connect_with_undo(x, C, out21, B, in11); return 1; } /* If we have two selected objects on the canvas, try to connect @@ -4479,18 +4624,23 @@ static void canvas_connect_selection(t_canvas *x) objsink = objsrc; objsrc = obj; } - + if (!objsrc || !objsink) + return; if (obj_noutlets(objsrc)) { - int out = 0, in=0; + int noutlets = obj_noutlets(objsrc); + int ninlets = obj_ninlets(objsink); + int fanout = (noutlets == 1) && obj_issignaloutlet(objsrc, 0); + int out = 0, in = 0; while(!tryconnect(x, objsrc, out, objsink, in)) { - if (!objsrc || obj_noutlets(objsrc ) <= out) + if (noutlets <= out) return; - if (!objsink || obj_ninlets (objsink) <= in ) + if (ninlets <= in ) return; in++; - out++; + if(!fanout) + out++; } } return; @@ -4588,7 +4738,7 @@ void canvas_editmode(t_canvas *x, t_floatarg state) g_commentbar_erase_all(glist_getcanvas(x)); } } - if (glist_isvisible(x)) + if (glist_isvisible(x) && x->gl_havewindow) { sys_vgui("pdtk_canvas_editmode .x%lx %d\n", glist_getcanvas(x), x->gl_edit); @@ -4669,7 +4819,7 @@ void g_editor_setup(void) class_addmethod(canvas_class, (t_method)canvas_mouse, gensym("mouse"), A_FLOAT, A_FLOAT, A_FLOAT, A_FLOAT, A_NULL); class_addmethod(canvas_class, (t_method)canvas_mouseup, gensym("mouseup"), - A_FLOAT, A_FLOAT, A_FLOAT, A_NULL); + A_FLOAT, A_FLOAT, A_FLOAT, A_DEFFLOAT, A_NULL); class_addmethod(canvas_class, (t_method)canvas_key, gensym("key"), A_GIMME, A_NULL); class_addmethod(canvas_class, (t_method)canvas_motion, gensym("motion"), @@ -4690,8 +4840,12 @@ void g_editor_setup(void) gensym("duplicate"), A_NULL); class_addmethod(canvas_class, (t_method)canvas_selectall, gensym("selectall"), A_NULL); + class_addmethod(canvas_class, (t_method)canvas_deselectall, + gensym("deselectall"), A_NULL); class_addmethod(canvas_class, (t_method)canvas_reselect, gensym("reselect"), A_NULL); + class_addmethod(canvas_class, (t_method)canvas_cycleselect, + gensym("cycleselect"), A_FLOAT, A_NULL); class_addmethod(canvas_class, (t_method)canvas_undo_undo, gensym("undo"), A_NULL); class_addmethod(canvas_class, (t_method)canvas_undo_redo, @@ -4747,7 +4901,7 @@ void canvas_editor_for_class(t_class *c) class_addmethod(c, (t_method)canvas_key, gensym("key"), A_GIMME, A_NULL); class_addmethod(c, (t_method)canvas_motion, gensym("motion"), - A_FLOAT, A_FLOAT, A_FLOAT, A_NULL); + A_FLOAT, A_FLOAT, A_FLOAT, A_DEFFLOAT, A_NULL); /* ------------------------ menu actions ---------------------------- */ class_addmethod(c, (t_method)canvas_menuclose, @@ -4756,12 +4910,12 @@ void canvas_editor_for_class(t_class *c) gensym("findparent"), A_NULL); } -void g_editor_newpdinstance( void) +void g_editor_newpdinstance(void) { EDITOR = getbytes(sizeof(*EDITOR)); } -void g_editor_freepdinstance( void) +void g_editor_freepdinstance(void) { if (EDITOR->copy_binbuf) binbuf_free(EDITOR->copy_binbuf); diff --git a/src/g_editor_extras.c b/src/g_editor_extras.c index fd86f61c19..276895691d 100644 --- a/src/g_editor_extras.c +++ b/src/g_editor_extras.c @@ -14,6 +14,12 @@ void *canvas_undo_set_pastebinbuf(t_canvas *x, t_binbuf *b, int numpasted, int duplicate, int d_offset); /* ------------ utilities ---------- */ +typedef struct _triggerize_return { + /* data to return from triggerize */ + t_gobj*tr_editgobj; /* if set, immediately switch this object to being edited */ +} t_triggerize_return; + + static t_gobj*o2g(t_object*obj) { return &(obj->te_g); @@ -235,8 +241,7 @@ static int triggerize_fanout(t_glist*x, t_object*obj) const int yoffset = 5; int obj_nout=obj_noutlets(obj); int nout; - int posX, posY; - t_binbuf*b=binbuf_new(); + int posX = 0, posY; int didit=0; int _x; /* dummy variable */ @@ -273,6 +278,7 @@ static int triggerize_fanout(t_glist*x, t_object*obj) /* need to get the coordinates of the fanning outlet */ t_linetraverser t; + t_binbuf*b=binbuf_new(); linetraverser_start(&t, x); while((conn = linetraverser_next(&t))) { @@ -295,6 +301,7 @@ static int triggerize_fanout(t_glist*x, t_object*obj) canvas_undo_add(x, UNDO_PASTE, "paste", canvas_undo_set_pastebinbuf(x, b, 0, 0, 0)); stub=triggerize_createobj(x, b); + binbuf_free(b); stub_i = canvas_getindex(x, o2g(stub)); conn=obj_starttraverseoutlet(obj, &out, nout); triggerize_defanout(x, count-1, conn, obj, stub, nout); @@ -302,10 +309,9 @@ static int triggerize_fanout(t_glist*x, t_object*obj) canvas_undo_add(x, UNDO_CONNECT, "connect", canvas_undo_set_connect(x, obj_i, nout, stub_i, 0)); glist_select(x, o2g(stub)); + didit++; } - didit++; } - binbuf_free(b); return didit; } static int triggerize_fanouts(t_glist*cnv) @@ -314,26 +320,30 @@ static int triggerize_fanouts(t_glist*cnv) t_gobj*gobj = NULL; int count=0; canvas_undo_add(cnv, UNDO_SEQUENCE_START, "triggerize", 0); - for(gobj=cnv->gl_list; gobj; gobj=gobj->g_next) + for(gobj=cnv->gl_list; gobj; ) { + t_gobj*next=gobj->g_next; t_object*obj=g2o(gobj); if(obj && glist_isselected(cnv, gobj) && triggerize_fanout(cnv, obj)) count++; + gobj = next; } canvas_undo_add(cnv, UNDO_SEQUENCE_END, "triggerize", 0); return count; } -static int triggerize_line(t_glist*x) +static int triggerize_line(t_glist*x, t_triggerize_return*tr) { /* triggerize a single selected line, by inserting a [t a] object - * (or it's signal equivalen) */ + * (or it's signal equivalent) */ t_editor*ed=x->gl_editor; int src_obj, src_out, dst_obj, dst_in, new_obj; t_gobj *src = 0, *dst = 0; t_binbuf*b=0; int posx=100, posy=100; t_object*stub=0; + int sigline = 0; + int dspstate = 0; if(!ed->e_selectedline) return 0; @@ -354,14 +364,33 @@ static int triggerize_line(t_glist*x) t_object*obj2=g2o(dst); if(obj1 && obj2) { - posx=(obj1->te_xpix+obj2->te_xpix)>>1; + float posSource, posSink; + int nio; + int _x; /* dummy variable */ + int posLeft, posRight; + + /* get real x-position of the outlet */ + gobj_getrect(src, x, &posLeft, &_x, &posRight, &_x); + nio = obj_noutlets(obj1); + posSource = posLeft + (posRight - posLeft - IOWIDTH * x->gl_zoom) * src_out / ((nio==1)?1.:(nio-1.)); + + /* get real x-position of the inlet */ + gobj_getrect(dst, x, &posLeft, &_x, &posRight, &_x); + nio = obj_ninlets(obj2); + posSink = posLeft + (posRight - posLeft - IOWIDTH * x->gl_zoom) * dst_in / ((nio==1)?1.:(nio-1.)); + + posx=(posSource + posSink)*0.5; posy=(obj1->te_ypix+obj2->te_ypix)>>1; } } + sigline = obj_issignaloutlet(g2o(src), src_out); + if(sigline) + dspstate = canvas_suspend_dsp(); + canvas_undo_add(x, UNDO_SEQUENCE_START, "{insert object}", 0); b=binbuf_new(); - if(obj_issignaloutlet(g2o(src), src_out)) + if(sigline) { binbuf_addv(b, "ssiiiisi;", gensym("#N"), gensym("canvas"), 200, 100, 190, 200, gensym("nop~"), 0); @@ -400,6 +429,11 @@ static int triggerize_line(t_glist*x) glist_select(x, o2g(stub)); canvas_undo_add(x, UNDO_SEQUENCE_END, "{insert object}", 0); + /* remember the inserted object, so we can select/edit it later */ + if(tr) + tr->tr_editgobj = o2g(stub); + if(sigline) + canvas_resume_dsp(dspstate); return 1; bad: return 0; @@ -490,6 +524,8 @@ static int expand_trigger(t_glist*cnv, t_object*obj) binbuf_add(b, 1, argv); binbuf_addv(b, "s", gensym("a")); binbuf_add(b, argc-1, argv+1); + canvas_undo_add(cnv, UNDO_PASTE, "paste", + canvas_undo_set_pastebinbuf(cnv, b, 0, 0, 0)); stub=triggerize_createobj(cnv, b); stub_i = canvas_getindex(cnv, o2g(stub)); for(nout=0; noutgl_list; gobj; gobj=gobj->g_next) + for(gobj=cnv->gl_list; gobj;) { + t_gobj*next=gobj->g_next; t_object*obj=g2o(gobj); if(obj && glist_isselected(cnv, gobj)) { @@ -533,6 +570,7 @@ static int with_triggers(t_glist*cnv, t_fun_withobject fun) if((s_trigger == c_name) && fun(cnv, obj)) count++; } + gobj=next; } return count; } @@ -565,7 +603,7 @@ static int triggerize_triggers(t_glist*cnv) return 0; } -static void canvas_do_triggerize(t_glist*cnv) +static int canvas_do_triggerize(t_glist*cnv, t_triggerize_return*tr) { /* * selected msg-connection: insert [t a] (->triggerize_line) @@ -576,23 +614,27 @@ static void canvas_do_triggerize(t_glist*cnv) * selected [trigger]: else, add left-most "a" outlet (->triggerize_triggers) */ - if(triggerize_line(cnv) - || triggerize_fanouts(cnv) - || triggerize_triggers(cnv)) - canvas_dirty(cnv, 1); + return(triggerize_line(cnv, tr) + || triggerize_fanouts(cnv) + || triggerize_triggers(cnv)); } void canvas_triggerize(t_glist*cnv) { - int dspstate; - if(NULL == cnv)return; - - /* suspend system */ - dspstate = canvas_suspend_dsp(); - - canvas_do_triggerize(cnv); - - /* restore state */ - canvas_redraw(cnv); - glist_redraw(cnv); - canvas_resume_dsp(dspstate); + int count = 0; + t_triggerize_return*tr; + if(!cnv || !cnv->gl_editor) + return; + if(!cnv->gl_editor->e_selection && !cnv->gl_editor->e_selectedline) + return; + tr = getbytes(sizeof(*tr)); + if(count = canvas_do_triggerize(cnv, tr)) { + canvas_dirty(cnv, 1); + /* fix display of connections, objects,... */ + canvas_redraw(cnv); + glist_redraw(cnv); + /* if we inserted an object, allow the user to change it now */ + if(tr->tr_editgobj) + gobj_activate(tr->tr_editgobj, cnv, 1); + } + freebytes(tr, sizeof(*tr)); } diff --git a/src/g_graph.c b/src/g_graph.c index 5c70d70632..9cd3322631 100644 --- a/src/g_graph.c +++ b/src/g_graph.c @@ -515,7 +515,7 @@ t_float glist_pixelstox(t_glist *x, t_float xpix) coordinates (x1, etc.) specifies the coordinate range of a one-pixel square at top left of the window. */ if (!x->gl_isgraph) - return (x->gl_x1 + (x->gl_x2 - x->gl_x1) * xpix); + return (x->gl_x1 + (x->gl_x2 - x->gl_x1) * xpix / x->gl_zoom); /* if we're a graph when shown on parent, but own our own window right now, our range in our coordinates (x1, etc.) is spread @@ -540,7 +540,7 @@ t_float glist_pixelstox(t_glist *x, t_float xpix) t_float glist_pixelstoy(t_glist *x, t_float ypix) { if (!x->gl_isgraph) - return (x->gl_y1 + (x->gl_y2 - x->gl_y1) * ypix); + return (x->gl_y1 + (x->gl_y2 - x->gl_y1) * ypix / x->gl_zoom); else if (x->gl_isgraph && x->gl_havewindow) return (x->gl_y1 + (x->gl_y2 - x->gl_y1) * (ypix) / (x->gl_screeny2 - x->gl_screeny1)); @@ -559,7 +559,7 @@ t_float glist_pixelstoy(t_glist *x, t_float ypix) t_float glist_xtopixels(t_glist *x, t_float xval) { if (!x->gl_isgraph) - return ((xval - x->gl_x1) / (x->gl_x2 - x->gl_x1)); + return (((xval - x->gl_x1) * x->gl_zoom) / (x->gl_x2 - x->gl_x1)); else if (x->gl_isgraph && x->gl_havewindow) return (x->gl_screenx2 - x->gl_screenx1) * (xval - x->gl_x1) / (x->gl_x2 - x->gl_x1); @@ -576,7 +576,7 @@ t_float glist_xtopixels(t_glist *x, t_float xval) t_float glist_ytopixels(t_glist *x, t_float yval) { if (!x->gl_isgraph) - return ((yval - x->gl_y1) / (x->gl_y2 - x->gl_y1)); + return (((yval - x->gl_y1) * x->gl_zoom) / (x->gl_y2 - x->gl_y1)); else if (x->gl_isgraph && x->gl_havewindow) return (x->gl_screeny2 - x->gl_screeny1) * (yval - x->gl_y1) / (x->gl_y2 - x->gl_y1); @@ -612,10 +612,10 @@ t_float glist_dpixtody(t_glist *x, t_float dypix) int text_xpix(t_text *x, t_glist *glist) { if (glist->gl_havewindow || !glist->gl_isgraph) - return (x->te_xpix); + return (x->te_xpix * glist->gl_zoom); else if (glist->gl_goprect) return (glist_xtopixels(glist, glist->gl_x1) + - x->te_xpix - glist->gl_xmargin); + glist->gl_zoom * (x->te_xpix - glist->gl_xmargin)); else return (glist_xtopixels(glist, glist->gl_x1 + (glist->gl_x2 - glist->gl_x1) * x->te_xpix / (glist->gl_screenx2 - glist->gl_screenx1))); @@ -624,10 +624,10 @@ int text_xpix(t_text *x, t_glist *glist) int text_ypix(t_text *x, t_glist *glist) { if (glist->gl_havewindow || !glist->gl_isgraph) - return (x->te_ypix); + return (x->te_ypix * glist->gl_zoom); else if (glist->gl_goprect) return (glist_ytopixels(glist, glist->gl_y1) + - x->te_ypix - glist->gl_ymargin); + glist->gl_zoom * (x->te_ypix - glist->gl_ymargin)); else return (glist_ytopixels(glist, glist->gl_y1 + (glist->gl_y2 - glist->gl_y1) * x->te_ypix / (glist->gl_screeny2 - glist->gl_screeny1))); @@ -871,8 +871,8 @@ static void graph_graphrect(t_gobj *z, t_glist *glist, int x1 = text_xpix(&x->gl_obj, glist); int y1 = text_ypix(&x->gl_obj, glist); int x2, y2; - x2 = x1 + x->gl_pixwidth; - y2 = y1 + x->gl_pixheight; + x2 = x1 + x->gl_zoom * x->gl_pixwidth; + y2 = y1 + x->gl_zoom * x->gl_pixheight; *xp1 = x1; *yp1 = y1; diff --git a/src/g_mycanvas.c b/src/g_mycanvas.c index 0686582ff3..d07f04678d 100644 --- a/src/g_mycanvas.c +++ b/src/g_mycanvas.c @@ -259,7 +259,7 @@ static void *my_canvas_new(t_symbol *s, int argc, t_atom *argv) { t_my_canvas *x = (t_my_canvas *)pd_new(my_canvas_class); int a = IEM_GUI_DEFAULTSIZE, w = 100, h = 60; - int ldx = 10, ldy = 12, f = 2, i = 0; + int ldx = 20, ldy = 12, f = 2, i = 0; int fs = 14; iem_inttosymargs(&x->x_gui.x_isa, 0); diff --git a/src/g_readwrite.c b/src/g_readwrite.c index f18bc6ec46..b4300f261f 100644 --- a/src/g_readwrite.c +++ b/src/g_readwrite.c @@ -663,14 +663,7 @@ void canvas_saveto(t_canvas *x, t_binbuf *b) t_gobj *y; t_linetraverser t; t_outconnect *oc; - int zoomwas = x->gl_zoom; - if (zoomwas > 1) - { - t_zoomfn zoommethod = (t_zoomfn)zgetfn(&x->gl_pd, gensym("zoom")); - if (zoommethod) - (*zoommethod)(&x->gl_pd, (t_floatarg)1); - } /* subpatch */ if (x->gl_owner && !x->gl_env) { @@ -732,12 +725,6 @@ void canvas_saveto(t_canvas *x, t_binbuf *b) (t_float)x->gl_pixwidth, (t_float)x->gl_pixheight, (t_float)x->gl_isgraph); } - if (zoomwas > 1) - { - t_zoomfn zoommethod = (t_zoomfn)zgetfn(&x->gl_pd, gensym("zoom")); - if (zoommethod) - (*zoommethod)(&x->gl_pd, (t_floatarg)zoomwas); - } } /* call this recursively to collect all the template names for @@ -797,6 +784,7 @@ static void canvas_savetemplatesto(t_canvas *x, t_binbuf *b, int wholething) } binbuf_addsemi(b); } + freebytes(templatevec, ntemplates * sizeof(*templatevec)); } void canvas_reload(t_symbol *name, t_symbol *dir, t_glist *except); diff --git a/src/g_rtext.c b/src/g_rtext.c index 76fa0df17b..d467e03e83 100644 --- a/src/g_rtext.c +++ b/src/g_rtext.c @@ -192,6 +192,8 @@ static void rtext_senditup(t_rtext *x, int action, int *widthp, int *heightp, int inindex_c = 0; int selstart_b = 0, selend_b = 0; int x_bufsize_c = u8_charnum(x->x_buf, x->x_bufsize); + char smallescbuf[400], *escbuf = 0; + size_t escchars = 0; /* if we're a GOP (the new, "goprect" style) borrow the font size from the inside to preserve the spacing */ if (pd_class(&x->x_text->te_pd) == canvas_class && @@ -315,6 +317,8 @@ static void rtext_senditup(t_rtext *x, int action, int *widthp, int *heightp, x->x_text->te_width = widthwas; else x->x_text->te_width = 0; } + escbuf = (tempbuf == smallbuf)?smallescbuf:t_getbytes(2 * outchars_b + 1); + pdgui_strnescape(escbuf, 2 * outchars_b + 1, tempbuf, outchars_b); if (action == SEND_FIRST) { int lmargin = LMARGIN, tmargin = TMARGIN; @@ -328,18 +332,18 @@ static void rtext_senditup(t_rtext *x, int action, int *widthp, int *heightp, character is an unescaped backslash ('\') which would have confused tcl/tk by escaping the close brace otherwise. The GUI code drops the last character in the string. */ - sys_vgui("pdtk_text_new .x%lx.c {%s %s text} %f %f {%.*s } %d %s\n", + sys_vgui("pdtk_text_new .x%lx.c {%s %s text} %f %f {%s } %d %s\n", canvas, x->x_tag, rtext_gettype(x)->s_name, dispx + lmargin, dispy + tmargin, - outchars_b, tempbuf, + escbuf, sys_hostfontsize(font, glist_getzoom(x->x_glist)), (glist_isselected(x->x_glist, &x->x_glist->gl_gobj)? "blue" : "black")); } else if (action == SEND_UPDATE) { - sys_vgui("pdtk_text_set .x%lx.c %s {%.*s }\n", - canvas, x->x_tag, outchars_b, tempbuf); + sys_vgui("pdtk_text_set .x%lx.c %s {%s }\n", + canvas, x->x_tag, escbuf); if (pixwide != x->x_drawnwidth || pixhigh != x->x_drawnheight) text_drawborder(x->x_text, x->x_glist, x->x_tag, pixwide, pixhigh, 0); @@ -369,6 +373,8 @@ static void rtext_senditup(t_rtext *x, int action, int *widthp, int *heightp, *heightp = pixhigh; if (tempbuf != smallbuf) t_freebytes(tempbuf, 2 * x->x_bufsize + 1); + if(escbuf != smallescbuf) + t_freebytes(escbuf, 2 * outchars_b + 1); } void rtext_retext(t_rtext *x) diff --git a/src/g_scalar.c b/src/g_scalar.c index aa181717cb..8bac4a531a 100644 --- a/src/g_scalar.c +++ b/src/g_scalar.c @@ -262,10 +262,10 @@ static void scalar_displace(t_gobj *z, t_glist *glist, int dx, int dy) goty = 0; if (gotx) *(t_float *)(((char *)(x->sc_vec)) + xonset) += - dx * (glist_pixelstox(glist, 1) - glist_pixelstox(glist, 0)); + glist->gl_zoom * dx * (glist_pixelstox(glist, 1) - glist_pixelstox(glist, 0)); if (goty) *(t_float *)(((char *)(x->sc_vec)) + yonset) += - dy * (glist_pixelstoy(glist, 1) - glist_pixelstoy(glist, 0)); + glist->gl_zoom * dy * (glist_pixelstoy(glist, 1) - glist_pixelstoy(glist, 0)); gpointer_init(&gp); gpointer_setglist(&gp, glist, x); SETPOINTER(&at[0], &gp); @@ -348,14 +348,15 @@ int scalar_doclick(t_word *data, t_template *template, t_scalar *sc, int hit = 0; t_canvas *templatecanvas = template_findcanvas(template); t_gobj *y; - t_atom at[2]; + t_atom at[3]; t_float basex = template_getfloat(template, gensym("x"), data, 0); t_float basey = template_getfloat(template, gensym("y"), data, 0); - SETFLOAT(at, basex + xloc); - SETFLOAT(at+1, basey + yloc); + SETFLOAT(at, 0); /* unused - this is later bashed to the gpointer */ + SETFLOAT(at+1, basex + xloc); + SETFLOAT(at+2, basey + yloc); if (doit) template_notifyforscalar(template, owner, - sc, gensym("click"), 2, at); + sc, gensym("click"), 3, at); for (y = templatecanvas->gl_list; y; y = y->g_next) { const t_parentwidgetbehavior *wb = pd_getparentwidget(&y->g_pd); diff --git a/src/g_template.c b/src/g_template.c index 0a58922c6d..8a9beeeaba 100644 --- a/src/g_template.c +++ b/src/g_template.c @@ -2032,7 +2032,8 @@ static void array_motion(void *z, t_floatarg dx, t_floatarg dy) fielddesc_getcoord(TEMPLATE->array_motion_yfield, TEMPLATE->array_motion_template, thisword, 1) : 0); fielddesc_setcoord(TEMPLATE->array_motion_xfield, - TEMPLATE->array_motion_template, thisword, xwas + dx, 1); + TEMPLATE->array_motion_template, thisword, + xwas + dx * TEMPLATE->array_motion_xperpix, 1); if (TEMPLATE->array_motion_yfield) { if (TEMPLATE->array_motion_fatten) @@ -2333,6 +2334,8 @@ static int array_doclick(t_array *array, t_glist *glist, t_scalar *sc, fielddesc_getcoord(wfield, TEMPLATE->array_motion_template, (t_word *)(elem + i * elemsize), 1); + if (TEMPLATE->array_motion_yperpix < 0) + TEMPLATE->array_motion_yperpix *= -1; TEMPLATE->array_motion_yperpix *= -TEMPLATE->array_motion_fatten; } @@ -2357,8 +2360,7 @@ static int array_doclick(t_array *array, t_glist *glist, t_scalar *sc, return (CURSOR_EDITMODE_DISCONNECT); else return (CURSOR_RUNMODE_ADDPOINT); } - else return (TEMPLATE->array_motion_fatten ? - CURSOR_RUNMODE_THICKEN : CURSOR_RUNMODE_CLICKME); + else return (CURSOR_RUNMODE_THICKEN); /* thicken or drag */ } } } @@ -2809,12 +2811,12 @@ void g_template_setup(void) drawnumber_setup(); } -void g_template_newpdinstance( void) +void g_template_newpdinstance(void) { TEMPLATE = getbytes(sizeof(*TEMPLATE)); } -void g_template_freepdinstance( void) +void g_template_freepdinstance(void) { freebytes(TEMPLATE, sizeof(*TEMPLATE)); } diff --git a/src/g_text.c b/src/g_text.c index 1632e278ce..c6c35f8d23 100644 --- a/src/g_text.c +++ b/src/g_text.c @@ -72,8 +72,8 @@ void glist_text(t_glist *gl, t_symbol *s, int argc, t_atom *argv) SETSYMBOL(&at, gensym("comment")); glist_noselect(gl); glist_getnextxy(gl, &xpix, &ypix); - x->te_xpix = xpix-1; - x->te_ypix = ypix-1; + x->te_xpix = xpix/gl->gl_zoom - 1; + x->te_ypix = ypix/gl->gl_zoom - 1; binbuf_restore(x->te_binbuf, 1, &at); glist_add(gl, &x->te_g); glist_noselect(gl); @@ -161,8 +161,8 @@ static void canvas_howputnew(t_canvas *x, int *connectp, int *xpixp, int *ypixp, { gobj_getrect(g, x, &x1, &y1, &x2, &y2); indx = nobj; - *xpixp = x1; - *ypixp = y2 + 5; + *xpixp = x1 / x->gl_zoom; + *ypixp = y2 / x->gl_zoom + 5.5; /* 5 pixels down, rounded */ } glist_noselect(x); /* search back for 'selected' and if it isn't on the list, @@ -181,8 +181,8 @@ static void canvas_howputnew(t_canvas *x, int *connectp, int *xpixp, int *ypixp, else { glist_getnextxy(x, xpixp, ypixp); - *xpixp -= 3; - *ypixp -= 3; + *xpixp = *xpixp/x->gl_zoom - 3; + *ypixp = *ypixp/x->gl_zoom - 3; glist_noselect(x); } *connectp = connectme; @@ -226,6 +226,7 @@ void canvas_obj(t_glist *gl, t_symbol *s, int argc, t_atom *argv) /* make an object box for an object that's already there. */ +// ceammc void canvas_ceammcgui(t_glist *gl, t_symbol *guiobjname) { t_atom at; @@ -237,8 +238,10 @@ void canvas_ceammcgui(t_glist *gl, t_symbol *guiobjname) SETSYMBOL(&at, guiobjname); binbuf_restore(b, 1, &at); glist_getnextxy(gl, &xpix, &ypix); - canvas_objtext(gl, xpix, ypix, 0, 1, b); + canvas_objtext(gl, xpix/gl->gl_zoom, ypix/gl->gl_zoom, 0, 1, b); canvas_startmotion(glist_getcanvas(gl)); + canvas_undo_add(glist_getcanvas(gl), UNDO_CREATE, "create", + (void *)canvas_undo_set_create(glist_getcanvas(gl))); } void canvas_knob(t_glist *gl, t_symbol *s, int argc, t_atom *argv) @@ -285,6 +288,7 @@ void canvas_preset(t_glist *gl, t_symbol *s, int argc, t_atom *argv) { canvas_ceammcgui(gl, gensym("ui.preset")); } +// ceammc end /* iemlib */ @@ -299,7 +303,7 @@ void canvas_iemguis(t_glist *gl, t_symbol *guiobjname) SETSYMBOL(&at, guiobjname); binbuf_restore(b, 1, &at); glist_getnextxy(gl, &xpix, &ypix); - canvas_objtext(gl, xpix, ypix, 0, 1, b); + canvas_objtext(gl, xpix/gl->gl_zoom, ypix/gl->gl_zoom, 0, 1, b); canvas_startmotion(glist_getcanvas(gl)); canvas_undo_add(glist_getcanvas(gl), UNDO_CREATE, "create", (void *)canvas_undo_set_create(glist_getcanvas(gl))); @@ -502,7 +506,6 @@ static void message_click(t_message *x, t_floatarg xpos, t_floatarg ypos, t_floatarg shift, t_floatarg ctrl, t_floatarg alt) { - message_float(x, 0); if (glist_isvisible(x->m_glist)) { /* not zooming click width for now as it gets too fat */ @@ -510,6 +513,7 @@ static void message_click(t_message *x, g_message_click(glist_getcanvas(x->m_glist), rtext_gettag(y)); clock_delay(x->m_clock, 120); } + message_float(x, 0); } static void message_tick(t_message *x) @@ -1136,7 +1140,7 @@ static void text_displace(t_gobj *z, t_glist *glist, if (glist_isvisible(glist)) { t_rtext *y = glist_findrtext(glist, x); - rtext_displace(y, dx, dy); + rtext_displace(y, glist->gl_zoom * dx, glist->gl_zoom * dy); text_drawborder(x, glist, rtext_gettag(y), rtext_width(y), rtext_height(y), 0); canvas_fixlinesfor(glist, x); diff --git a/src/g_undo.c b/src/g_undo.c index 9d1f7e0b12..bd33536d75 100644 --- a/src/g_undo.c +++ b/src/g_undo.c @@ -14,6 +14,13 @@ void canvas_undo_set_name(const char*name); + +static void canvas_show_undomenu(t_canvas*x, const char* undo_action, const char* redo_action) +{ + if (glist_isvisible(x) && glist_istoplevel(x)) + sys_vgui("pdtk_undomenu .x%lx %s %s\n", x, undo_action, redo_action); +} + static void canvas_undo_docleardirty(t_canvas *x) { t_undo *udo = canvas_undo_get(x); @@ -79,8 +86,7 @@ t_undo_action *canvas_undo_init(t_canvas *x) a->prev = NULL; a->name = "no"; - if (glist_isvisible(x) && glist_istoplevel(x)) - sys_vgui("pdtk_undomenu .x%lx no no\n", x); + canvas_show_undomenu(x, "no", "no"); } else { @@ -112,8 +118,7 @@ t_undo_action *canvas_undo_add(t_canvas *x, t_undo_type type, const char *name, canvas_undo_rebranch(x); udo->u_last->next = 0; canvas_undo_set_name(udo->u_last->name); - if (glist_isvisible(x) && glist_istoplevel(x)) - sys_vgui("pdtk_undomenu .x%lx %s no\n", x, udo->u_last->name); + canvas_show_undomenu(x, udo->u_last->name, "no"); return 0; } @@ -123,9 +128,7 @@ t_undo_action *canvas_undo_add(t_canvas *x, t_undo_type type, const char *name, a->data = (void *)data; a->name = (char *)name; canvas_undo_set_name(name); - if (glist_isvisible(x) && glist_istoplevel(x)) - sys_vgui("pdtk_undomenu .x%lx %s no\n", x, a->name); - + canvas_show_undomenu(x, a->name, "no"); DEBUG_UNDO(post("%s: done!", __FUNCTION__)); return(a); } @@ -210,11 +213,7 @@ void canvas_undo_undo(t_canvas *x) /* here we call updating of all unpaired hubs and nodes since their regular call will fail in case their position needed to be updated by undo/redo first to reflect the old one */ - if (glist_isvisible(x) && glist_istoplevel(x)) - { - if (glist_isvisible(x) && glist_istoplevel(x)) - sys_vgui("pdtk_undomenu .x%lx %s %s\n", x, undo_action, redo_action); - } + canvas_show_undomenu(x, undo_action, redo_action); canvas_dirty(x, canvas_undo_isdirty(x)); } } @@ -269,11 +268,7 @@ void canvas_undo_redo(t_canvas *x) /* here we call updating of all unpaired hubs and nodes since their regular call will fail in case their position needed to be updated by undo/redo first to reflect the old one */ - if (glist_isvisible(x) && glist_istoplevel(x)) - { - if (glist_isvisible(x) && glist_istoplevel(x)) - sys_vgui("pdtk_undomenu .x%lx %s %s\n", x, undo_action, redo_action); - } + canvas_show_undomenu(x, undo_action, redo_action); canvas_dirty(x, canvas_undo_isdirty(x)); } canvas_resume_dsp(dspwas); @@ -295,7 +290,9 @@ void canvas_undo_rebranch(t_canvas *x) freebytes(a1, sizeof(*a1)); a1 = a2; } + udo->u_last->next = 0; } + canvas_show_undomenu(x, udo->u_last->name, "no"); canvas_resume_dsp(dspwas); } diff --git a/src/g_undo.h b/src/g_undo.h index f1525a9c83..782d80589e 100644 --- a/src/g_undo.h +++ b/src/g_undo.h @@ -4,6 +4,7 @@ /* Infinite undo by Ivica Ico Bukvic Dec. 2011 +Modified for Pd-vanilla by IOhannes m zmölnig Jun. 2018 This is the home of infinite undo queue. Each root canvas has one of these. Only canvas that is root will instantiate the pointer to t_undo_action struct. @@ -80,7 +81,7 @@ struct _undo t_undo_action *u_queue; t_undo_action *u_last; void *u_cleanstate; /* pointer to non-dirty state */ - int u_doing; /* currently undoing */ + int u_doing; /* currently undoing */ }; #define t_undo struct _undo diff --git a/src/m_binbuf.c b/src/m_binbuf.c index 287652429f..629884c3f2 100644 --- a/src/m_binbuf.c +++ b/src/m_binbuf.c @@ -475,7 +475,7 @@ int binbuf_resize(t_binbuf *x, int newsize) return (new != 0); } -int canvas_getdollarzero( void); +int canvas_getdollarzero(void); /* JMZ: * s points to the first character after the $ @@ -574,7 +574,7 @@ t_symbol *binbuf_realizedollsym(t_symbol *s, int ac, const t_atom *av, int tonew substr=strchr(str, '$'); if(substr) { - int n = substr-str; + unsigned long n = substr-str; if(n>MAXPDSTRING-strlen(buf2)-1) n=MAXPDSTRING-strlen(buf2)-1; strncat(buf2, str, n); str=substr+1; diff --git a/src/m_class.c b/src/m_class.c index 4a65b6ef0e..54a7b3bc94 100644 --- a/src/m_class.c +++ b/src/m_class.c @@ -3,10 +3,10 @@ * WARRANTIES, see the file, "LICENSE.txt," in this distribution. */ #define PD_CLASS_DEF -#include "g_canvas.h" -#include "m_imp.h" #include "m_pd.h" +#include "m_imp.h" #include "s_stuff.h" +#include "g_canvas.h" #include #ifdef HAVE_UNISTD_H #include @@ -16,48 +16,49 @@ #endif #include -#include #include +#include -#ifdef _MSC_VER /* This is only for Microsoft's compiler, not cygwin, e.g. */ +#ifdef _MSC_VER /* This is only for Microsoft's compiler, not cygwin, e.g. */ #define snprintf _snprintf #endif -static t_symbol* class_loadsym; /* name under which an extern is invoked */ -static void pd_defaultfloat(t_pd* x, t_float f); -static void pd_defaultlist(t_pd* x, t_symbol* s, int argc, t_atom* argv); -t_pd pd_objectmaker; /* factory for creating "object" boxes */ -t_pd pd_canvasmaker; /* factory for creating canvases */ +static t_symbol *class_loadsym; /* name under which an extern is invoked */ +static void pd_defaultfloat(t_pd *x, t_float f); +static void pd_defaultlist(t_pd *x, t_symbol *s, int argc, t_atom *argv); +t_pd pd_objectmaker; /* factory for creating "object" boxes */ +t_pd pd_canvasmaker; /* factory for creating canvases */ -static t_symbol* class_extern_dir; +static t_symbol *class_extern_dir; #ifdef PDINSTANCE -static t_class* class_list = 0; -PERTHREAD t_pdinstance* pd_this; -t_pdinstance** pd_instances; +static t_class *class_list = 0; +PERTHREAD t_pdinstance *pd_this; +t_pdinstance **pd_instances; int pd_ninstances; #else t_symbol s_pointer, s_float, s_symbol, s_bang, s_list, s_anything, - s_signal, s__N, s__X, s_x, s_y, s_; + s_signal, s__N, s__X, s_x, s_y, s_; #endif t_pdinstance pd_maininstance; -static t_symbol* dogensym(const char* s, t_symbol* oldsym, - t_pdinstance* pdinstance); -void x_midi_newpdinstance(void); -void x_midi_freepdinstance(void); -void s_inter_newpdinstance(void); -void s_inter_freepdinstance(void); -void g_canvas_newpdinstance(void); -void g_canvas_freepdinstance(void); -void d_ugen_newpdinstance(void); -void d_ugen_freepdinstance(void); -void new_anything(void* dummy, t_symbol* s, int argc, t_atom* argv); +static t_symbol *dogensym(const char *s, t_symbol *oldsym, + t_pdinstance *pdinstance); +void x_midi_newpdinstance( void); +void x_midi_freepdinstance( void); +void s_inter_newpdinstance( void); +void s_inter_free(t_instanceinter *inter); +void g_canvas_newpdinstance( void); +void g_canvas_freepdinstance( void); +void d_ugen_newpdinstance( void); +void d_ugen_freepdinstance( void); +void new_anything(void *dummy, t_symbol *s, int argc, t_atom *argv); void s_stuff_newpdinstance(void) { STUFF = getbytes(sizeof(*STUFF)); - STUFF->st_externlist = STUFF->st_searchpath = STUFF->st_staticpath = STUFF->st_helppath = STUFF->st_temppath = 0; + STUFF->st_externlist = STUFF->st_searchpath = + STUFF->st_staticpath = STUFF->st_helppath = STUFF->st_temppath = 0; STUFF->st_schedblocksize = STUFF->st_blocksize = DEFDACBLKSIZE; } @@ -66,7 +67,7 @@ void s_stuff_freepdinstance(void) freebytes(STUFF, sizeof(*STUFF)); } -static t_pdinstance* pdinstance_init(t_pdinstance* x) +static t_pdinstance *pdinstance_init(t_pdinstance *x) { int i; x->pd_systime = 0; @@ -77,32 +78,32 @@ static t_pdinstance* pdinstance_init(t_pdinstance* x) for (i = 0; i < SYMTABHASHSIZE; i++) x->pd_symhash[i] = 0; #ifdef PDINSTANCE - dogensym("pointer", &x->pd_s_pointer, x); - dogensym("float", &x->pd_s_float, x); - dogensym("symbol", &x->pd_s_symbol, x); - dogensym("bang", &x->pd_s_bang, x); - dogensym("list", &x->pd_s_list, x); - dogensym("anything", &x->pd_s_anything, x); - dogensym("signal", &x->pd_s_signal, x); - dogensym("#N", &x->pd_s__N, x); - dogensym("#X", &x->pd_s__X, x); - dogensym("x", &x->pd_s_x, x); - dogensym("y", &x->pd_s_y, x); - dogensym("", &x->pd_s_, x); + dogensym("pointer", &x->pd_s_pointer, x); + dogensym("float", &x->pd_s_float, x); + dogensym("symbol", &x->pd_s_symbol, x); + dogensym("bang", &x->pd_s_bang, x); + dogensym("list", &x->pd_s_list, x); + dogensym("anything", &x->pd_s_anything, x); + dogensym("signal", &x->pd_s_signal, x); + dogensym("#N", &x->pd_s__N, x); + dogensym("#X", &x->pd_s__X, x); + dogensym("x", &x->pd_s_x, x); + dogensym("y", &x->pd_s_y, x); + dogensym("", &x->pd_s_, x); pd_this = x; #else - dogensym("pointer", &s_pointer, x); - dogensym("float", &s_float, x); - dogensym("symbol", &s_symbol, x); - dogensym("bang", &s_bang, x); - dogensym("list", &s_list, x); - dogensym("anything", &s_anything, x); - dogensym("signal", &s_signal, x); - dogensym("#N", &s__N, x); - dogensym("#X", &s__X, x); - dogensym("x", &s_x, x); - dogensym("y", &s_y, x); - dogensym("", &s_, x); + dogensym("pointer", &s_pointer, x); + dogensym("float", &s_float, x); + dogensym("symbol", &s_symbol, x); + dogensym("bang", &s_bang, x); + dogensym("list", &s_list, x); + dogensym("anything", &s_anything, x); + dogensym("signal", &s_signal, x); + dogensym("#N", &s__N, x); + dogensym("#X", &s__X, x); + dogensym("x", &s_x, x); + dogensym("y", &s_y, x); + dogensym("", &s_, x); #endif x_midi_newpdinstance(); g_canvas_newpdinstance(); @@ -111,25 +112,25 @@ static t_pdinstance* pdinstance_init(t_pdinstance* x) return (x); } -static void class_addmethodtolist(t_class* c, t_methodentry** methodlist, - int nmethod, t_gotfn fn, t_symbol* sel, t_atomtype* args, - t_pdinstance* pdinstance) +static void class_addmethodtolist(t_class *c, t_methodentry **methodlist, + int nmethod, t_gotfn fn, t_symbol *sel, t_atomtype *args, + t_pdinstance *pdinstance) { int i; - t_methodentry* m; + t_methodentry *m; for (i = 0; i < nmethod; i++) - if ((*methodlist)[i].me_name == sel) { - char nbuf[80]; - snprintf(nbuf, 80, "%s_aliased", sel->s_name); - nbuf[79] = 0; - (*methodlist)[i].me_name = dogensym(nbuf, 0, pdinstance); - if (c == pd_objectmaker) - verbose(1, "warning: class '%s' overwritten; old one renamed '%s'", - sel->s_name, nbuf); - else - verbose(1, "warning: old method '%s' for class '%s' renamed '%s'", - sel->s_name, c->c_name->s_name, nbuf); - } + if ((*methodlist)[i].me_name == sel) + { + char nbuf[80]; + snprintf(nbuf, 80, "%s_aliased", sel->s_name); + nbuf[79] = 0; + (*methodlist)[i].me_name = dogensym(nbuf, 0, pdinstance); + if (c == pd_objectmaker) + verbose(1, "warning: class '%s' overwritten; old one renamed '%s'", + sel->s_name, nbuf); + else verbose(1, "warning: old method '%s' for class '%s' renamed '%s'", + sel->s_name, c->c_name->s_name, nbuf); + } (*methodlist) = t_resizebytes((*methodlist), nmethod * sizeof(**methodlist), (nmethod + 1) * sizeof(**methodlist)); @@ -142,7 +143,7 @@ static void class_addmethodtolist(t_class* c, t_methodentry** methodlist, } #ifdef PDINSTANCE -EXTERN void pd_setinstance(t_pdinstance* x) +EXTERN void pd_setinstance(t_pdinstance *x) { pd_this = x; } @@ -157,22 +158,23 @@ static void pdinstance_renumber(void) extern void text_template_init(void); extern void garray_init(void); -EXTERN t_pdinstance* pdinstance_new(void) +EXTERN t_pdinstance *pdinstance_new(void) { - t_pdinstance* x = (t_pdinstance*)getbytes(sizeof(t_pdinstance)); - t_class* c; + t_pdinstance *x = (t_pdinstance *)getbytes(sizeof(t_pdinstance)); + t_class *c; int i; pd_this = x; s_inter_newpdinstance(); pdinstance_init(x); sys_lock(); pd_globallock(); - pd_instances = (t_pdinstance**)resizebytes(pd_instances, + pd_instances = (t_pdinstance **)resizebytes(pd_instances, pd_ninstances * sizeof(*pd_instances), - (pd_ninstances + 1) * sizeof(*pd_instances)); + (pd_ninstances+1) * sizeof(*pd_instances)); pd_instances[pd_ninstances] = x; - for (c = class_list; c; c = c->c_next) { - c->c_methods = (t_methodentry**)t_resizebytes(c->c_methods, + for (c = class_list; c; c = c->c_next) + { + c->c_methods = (t_methodentry **)t_resizebytes(c->c_methods, pd_ninstances * sizeof(*c->c_methods), (pd_ninstances + 1) * sizeof(*c->c_methods)); c->c_methods[pd_ninstances] = t_getbytes(0); @@ -180,7 +182,7 @@ EXTERN t_pdinstance* pdinstance_new(void) class_addmethodtolist(c, &c->c_methods[pd_ninstances], i, c->c_methods[0][i].me_fun, dogensym(c->c_methods[0][i].me_name->s_name, 0, x), - c->c_methods[0][i].me_arg, x); + c->c_methods[0][i].me_arg, x); } pd_ninstances++; pdinstance_renumber(); @@ -192,53 +194,71 @@ EXTERN t_pdinstance* pdinstance_new(void) return (x); } -EXTERN void pdinstance_free(t_pdinstance* x) +EXTERN void pdinstance_free(t_pdinstance *x) { - t_symbol* s; - t_canvas* canvas; + t_symbol *s; + t_canvas *canvas; int i, instanceno = x->pd_instanceno; - t_class* c; + t_class *c; + t_instanceinter *inter = x->pd_inter; pd_setinstance(x); sys_lock(); pd_globallock(); canvas_suspend_dsp(); while (x->pd_canvaslist) - pd_free((t_pd*)x->pd_canvaslist); + pd_free((t_pd *)x->pd_canvaslist); while (x->pd_templatelist) - pd_free((t_pd*)x->pd_templatelist); - for (c = class_list; c; c = c->c_next) { + pd_free((t_pd *)x->pd_templatelist); + for (c = class_list; c; c = c->c_next) + { freebytes(c->c_methods[instanceno], - c->c_nmethod * sizeof(*c->c_methods)); - for (i = instanceno; i < pd_ninstances - 1; i++) - c->c_methods[i] = c->c_methods[i + 1]; - c->c_methods = (t_methodentry**)t_resizebytes(c->c_methods, + c->c_nmethod * sizeof(**c->c_methods)); + for (i = instanceno; i < pd_ninstances-1; i++) + c->c_methods[i] = c->c_methods[i+1]; + c->c_methods = (t_methodentry **)t_resizebytes(c->c_methods, pd_ninstances * sizeof(*c->c_methods), (pd_ninstances - 1) * sizeof(*c->c_methods)); } - for (i = 0; i < SYMTABHASHSIZE; i++) { - while ((s = x->pd_symhash[i])) { + for (i =0; i < SYMTABHASHSIZE; i++) + { + while ((s = x->pd_symhash[i])) + { x->pd_symhash[i] = s->s_next; - if (s != &x->pd_s_pointer && s != &x->pd_s_float && s != &x->pd_s_symbol && s != &x->pd_s_bang && s != &x->pd_s_list && s != &x->pd_s_anything && s != &x->pd_s_signal && s != &x->pd_s__N && s != &x->pd_s__X && s != &x->pd_s_x && s != &x->pd_s_y && s != &x->pd_s_) + if(s != &x->pd_s_pointer && + s != &x->pd_s_float && + s != &x->pd_s_symbol && + s != &x->pd_s_bang && + s != &x->pd_s_list && + s != &x->pd_s_anything && + s != &x->pd_s_signal && + s != &x->pd_s__N && + s != &x->pd_s__X && + s != &x->pd_s_x && + s != &x->pd_s_y && + s != &x->pd_s_) + { + freebytes(s->s_name, strlen(s->s_name)+1); freebytes(s, sizeof(*s)); + } } } - freebytes(x->pd_symhash, SYMTABHASHSIZE * sizeof(*x->pd_symhash)); + freebytes(x->pd_symhash, SYMTABHASHSIZE * sizeof (*x->pd_symhash)); x_midi_freepdinstance(); g_canvas_freepdinstance(); d_ugen_freepdinstance(); s_stuff_freepdinstance(); - s_inter_freepdinstance(); - for (i = instanceno; i < pd_ninstances - 1; i++) - pd_instances[i] = pd_instances[i + 1]; - pd_instances = (t_pdinstance**)resizebytes(pd_instances, + for (i = instanceno; i < pd_ninstances-1; i++) + pd_instances[i] = pd_instances[i+1]; + pd_instances = (t_pdinstance **)resizebytes(pd_instances, pd_ninstances * sizeof(*pd_instances), - (pd_ninstances - 1) * sizeof(*pd_instances)); + (pd_ninstances-1) * sizeof(*pd_instances)); pd_ninstances--; pdinstance_renumber(); pd_globalunlock(); sys_unlock(); pd_setinstance(&pd_maininstance); + s_inter_free(inter); /* must happen after sys_unlock() */ } #endif /* PDINSTANCE */ @@ -267,117 +287,133 @@ void mess_init(void) sys_unlock(); } -static void pd_defaultanything(t_pd* x, t_symbol* s, int argc, t_atom* argv) +static void pd_defaultanything(t_pd *x, t_symbol *s, int argc, t_atom *argv) { pd_error(x, "%s: no method for '%s'", (*x)->c_name->s_name, s->s_name); } -static void pd_defaultbang(t_pd* x) +static void pd_defaultbang(t_pd *x) { if (*(*x)->c_listmethod != pd_defaultlist) (*(*x)->c_listmethod)(x, 0, 0, 0); - else - (*(*x)->c_anymethod)(x, &s_bang, 0, 0); + else (*(*x)->c_anymethod)(x, &s_bang, 0, 0); } -/* am empty list calls the 'bang' method unless it's the default + /* am empty list calls the 'bang' method unless it's the default bang method -- that might turn around and call our 'list' method which could be an infinite recorsion. Fall through to calling our 'anything' method. That had better not turn around and call us with an empty list. */ -void pd_emptylist(t_pd* x) +void pd_emptylist(t_pd *x) { if (*(*x)->c_bangmethod != pd_defaultbang) (*(*x)->c_bangmethod)(x); - else - (*(*x)->c_anymethod)(x, &s_bang, 0, 0); + else (*(*x)->c_anymethod)(x, &s_bang, 0, 0); } -static void pd_defaultpointer(t_pd* x, t_gpointer* gp) +static void pd_defaultpointer(t_pd *x, t_gpointer *gp) { - if (*(*x)->c_listmethod != pd_defaultlist) { + if (*(*x)->c_listmethod != pd_defaultlist) + { t_atom at; SETPOINTER(&at, gp); (*(*x)->c_listmethod)(x, 0, 1, &at); - } else { + } + else + { t_atom at; SETPOINTER(&at, gp); (*(*x)->c_anymethod)(x, &s_pointer, 1, &at); } } -static void pd_defaultfloat(t_pd* x, t_float f) +static void pd_defaultfloat(t_pd *x, t_float f) { - if (*(*x)->c_listmethod != pd_defaultlist) { + if (*(*x)->c_listmethod != pd_defaultlist) + { t_atom at; SETFLOAT(&at, f); (*(*x)->c_listmethod)(x, 0, 1, &at); - } else { + } + else + { t_atom at; SETFLOAT(&at, f); (*(*x)->c_anymethod)(x, &s_float, 1, &at); } } -static void pd_defaultsymbol(t_pd* x, t_symbol* s) +static void pd_defaultsymbol(t_pd *x, t_symbol *s) { - if (*(*x)->c_listmethod != pd_defaultlist) { + if (*(*x)->c_listmethod != pd_defaultlist) + { t_atom at; SETSYMBOL(&at, s); (*(*x)->c_listmethod)(x, 0, 1, &at); - } else { + } + else + { t_atom at; SETSYMBOL(&at, s); (*(*x)->c_anymethod)(x, &s_symbol, 1, &at); } } -void obj_list(t_object* x, t_symbol* s, int argc, t_atom* argv); -static void class_nosavefn(t_gobj* z, t_binbuf* b); +void obj_list(t_object *x, t_symbol *s, int argc, t_atom *argv); +static void class_nosavefn(t_gobj *z, t_binbuf *b); -/* handle "list" messages to Pds without explicit list methods defined. */ -static void pd_defaultlist(t_pd* x, t_symbol* s, int argc, t_atom* argv) + /* handle "list" messages to Pds without explicit list methods defined. */ +static void pd_defaultlist(t_pd *x, t_symbol *s, int argc, t_atom *argv) { - /* a list with no elements is handled by the 'bang' method if + /* a list with no elements is handled by the 'bang' method if one exists. */ - if (argc == 0 && *(*x)->c_bangmethod != pd_defaultbang) { + if (argc == 0 && *(*x)->c_bangmethod != pd_defaultbang) + { (*(*x)->c_bangmethod)(x); return; } - /* a list with one element which is a number can be handled by a + /* a list with one element which is a number can be handled by a "float" method if any is defined; same for "symbol", "pointer". */ - if (argc == 1) { - if (argv->a_type == A_FLOAT && *(*x)->c_floatmethod != pd_defaultfloat) { + if (argc == 1) + { + if (argv->a_type == A_FLOAT && + *(*x)->c_floatmethod != pd_defaultfloat) + { (*(*x)->c_floatmethod)(x, argv->a_w.w_float); return; - } else if (argv->a_type == A_SYMBOL && *(*x)->c_symbolmethod != pd_defaultsymbol) { + } + else if (argv->a_type == A_SYMBOL && + *(*x)->c_symbolmethod != pd_defaultsymbol) + { (*(*x)->c_symbolmethod)(x, argv->a_w.w_symbol); return; - } else if (argv->a_type == A_POINTER && *(*x)->c_pointermethod != pd_defaultpointer) { + } + else if (argv->a_type == A_POINTER && + *(*x)->c_pointermethod != pd_defaultpointer) + { (*(*x)->c_pointermethod)(x, argv->a_w.w_gpointer); return; } } - /* Next try for an "anything" method */ + /* Next try for an "anything" method */ if ((*x)->c_anymethod != pd_defaultanything) (*(*x)->c_anymethod)(x, &s_list, argc, argv); - /* if the object is patchable (i.e., can have proper inlets) + /* if the object is patchable (i.e., can have proper inlets) send it on to obj_list which will unpack the list into the inlets */ else if ((*x)->c_patchable) - obj_list((t_object*)x, s, argc, argv); - /* otherwise gove up and complain. */ - else - pd_defaultanything(x, &s_list, argc, argv); + obj_list((t_object *)x, s, argc, argv); + /* otherwise gove up and complain. */ + else pd_defaultanything(x, &s_list, argc, argv); } -/* for now we assume that all "gobjs" are text unless explicitly + /* for now we assume that all "gobjs" are text unless explicitly overridden later by calling class_setbehavior(). I'm not sure how to deal with Pds that aren't gobjs; shouldn't there be a way to check that at run time? Perhaps the presence of a "newmethod" should be our cue, or perhaps the "tiny" flag. */ -/* another matter. This routine does two unrelated things: it creates + /* another matter. This routine does two unrelated things: it creates a Pd class, but also adds a "new" method to create an instance of it. These are combined for historical reasons and for brevity in writing objects. To avoid adding a "new" method send a null function pointer. @@ -386,23 +422,24 @@ static void pd_defaultlist(t_pd* x, t_symbol* s, int argc, t_atom* argv) argument form, one for the multiple one; see select_setup() to find out how this is handled. */ -extern void text_save(t_gobj* z, t_binbuf* b); +extern void text_save(t_gobj *z, t_binbuf *b); -t_class* class_new(t_symbol* s, t_newmethod newmethod, t_method freemethod, +t_class *class_new(t_symbol *s, t_newmethod newmethod, t_method freemethod, size_t size, int flags, t_atomtype type1, ...) { va_list ap; - t_atomtype vec[MAXPDARG + 1], *vp = vec; + t_atomtype vec[MAXPDARG+1], *vp = vec; int count = 0, i; - t_class* c; + t_class *c; int typeflag = flags & CLASS_TYPEMASK; - if (!typeflag) - typeflag = CLASS_PATCHABLE; + if (!typeflag) typeflag = CLASS_PATCHABLE; *vp = type1; va_start(ap, type1); - while (*vp) { - if (count == MAXPDARG) { + while (*vp) + { + if (count == MAXPDARG) + { error("class %s: sorry: only %d args typechecked; use A_GIMME", s->s_name, MAXPDARG); break; @@ -413,15 +450,17 @@ t_class* class_new(t_symbol* s, t_newmethod newmethod, t_method freemethod, } va_end(ap); - if (pd_objectmaker && newmethod) { - /* add a "new" method by the name specified by the object */ + if (pd_objectmaker && newmethod) + { + /* add a "new" method by the name specified by the object */ class_addmethod(pd_objectmaker, (t_method)newmethod, s, vec[0], vec[1], vec[2], vec[3], vec[4], vec[5]); - if (class_loadsym) { - /* if we're loading an extern it might have been invoked by a + if (class_loadsym) + { + /* if we're loading an extern it might have been invoked by a longer file name; in this case, make this an admissible name too. */ - const char* loadstring = class_loadsym->s_name; + const char *loadstring = class_loadsym->s_name; size_t l1 = strlen(s->s_name), l2 = strlen(loadstring); if (l2 > l1 && !strcmp(s->s_name, loadstring + (l2 - l1))) class_addmethod(pd_objectmaker, (t_method)newmethod, @@ -429,7 +468,7 @@ t_class* class_new(t_symbol* s, t_newmethod newmethod, t_method freemethod, vec[0], vec[1], vec[2], vec[3], vec[4], vec[5]); } } - c = (t_class*)t_getbytes(sizeof(*c)); + c = (t_class *)t_getbytes(sizeof(*c)); c->c_name = c->c_helpname = s; c->c_size = size; c->c_nmethod = 0; @@ -449,8 +488,9 @@ t_class* class_new(t_symbol* s, t_newmethod newmethod, t_method freemethod, c->c_floatsignalin = 0; c->c_externdir = class_extern_dir; c->c_savefn = (typeflag == CLASS_PATCHABLE ? text_save : class_nosavefn); + c->c_classfreefn = 0; #if PDINSTANCE - c->c_methods = (t_methodentry**)t_getbytes( + c->c_methods = (t_methodentry **)t_getbytes( pd_ninstances * sizeof(*c->c_methods)); for (i = 0; i < pd_ninstances; i++) c->c_methods[i] = t_getbytes(0); @@ -459,28 +499,69 @@ t_class* class_new(t_symbol* s, t_newmethod newmethod, t_method freemethod, #else c->c_methods = t_getbytes(0); #endif -#if 0 /* enable this if you want to see a list of all classes */ +#if 0 /* enable this if you want to see a list of all classes */ post("class: %s", c->c_name->s_name); #endif return (c); } -/* add a creation method, which is a function that returns a Pd object +void class_free(t_class *c) +{ + int i; +#if PDINSTANCE + t_class *prev; + if (class_list == c) + class_list = c->c_next; + else + { + prev = class_list; + while (prev->c_next != c) + prev = prev->c_next; + prev->c_next = c->c_next; + } +#endif + if (c->c_classfreefn) + c->c_classfreefn(c); +#if PDINSTANCE + for (i = 0; i < pd_ninstances; i++) + freebytes(c->c_methods[i], c->c_nmethod * sizeof(*c->c_methods[i])); + freebytes(c->c_methods, pd_ninstances * sizeof(*c->c_methods)); +#else + freebytes(c->c_methods, c->c_nmethod * sizeof(*c->c_methods)); +#endif + freebytes(c, sizeof(*c)); +} + +void class_setfreefn(t_class *c, t_classfreefn fn) +{ + c->c_classfreefn = fn; +} + +#if PDINSTANCE +t_class *class_getfirst(void) +{ + return class_list; +} +#endif + + /* add a creation method, which is a function that returns a Pd object suitable for putting in an object box. We presume you've got a class it can belong to, but this won't be used until the newmethod is actually called back (and the new method explicitly takes care of this.) */ -void class_addcreator(t_newmethod newmethod, t_symbol* s, +void class_addcreator(t_newmethod newmethod, t_symbol *s, t_atomtype type1, ...) { va_list ap; - t_atomtype vec[MAXPDARG + 1], *vp = vec; + t_atomtype vec[MAXPDARG+1], *vp = vec; int count = 0; *vp = type1; va_start(ap, type1); - while (*vp) { - if (count == MAXPDARG) { + while (*vp) + { + if (count == MAXPDARG) + { error("class %s: sorry: only %d creation args allowed", s->s_name, MAXPDARG); break; @@ -494,50 +575,57 @@ void class_addcreator(t_newmethod newmethod, t_symbol* s, vec[0], vec[1], vec[2], vec[3], vec[4], vec[5]); } -void class_addmethod(t_class* c, t_method fn, t_symbol* sel, +void class_addmethod(t_class *c, t_method fn, t_symbol *sel, t_atomtype arg1, ...) { va_list ap; - t_methodentry* m; t_atomtype argtype = arg1; int nargs, i; - if (!c) + if(!c) return; va_start(ap, arg1); - /* "signal" method specifies that we take audio signals but + /* "signal" method specifies that we take audio signals but that we don't want automatic float to signal conversion. This is obsolete; you should now use the CLASS_MAINSIGNALIN macro. */ - if (sel == &s_signal) { + if (sel == &s_signal) + { if (c->c_floatsignalin) post("warning: signal method overrides class_mainsignalin"); c->c_floatsignalin = -1; } - /* check for special cases. "Pointer" is missing here so that + /* check for special cases. "Pointer" is missing here so that pd_objectmaker's pointer method can be typechecked differently. */ - if (sel == &s_bang) { - if (argtype) - goto phooey; + if (sel == &s_bang) + { + if (argtype) goto phooey; class_addbang(c, fn); - } else if (sel == &s_float) { - if (argtype != A_FLOAT || va_arg(ap, t_atomtype)) - goto phooey; + } + else if (sel == &s_float) + { + if (argtype != A_FLOAT || va_arg(ap, t_atomtype)) goto phooey; class_doaddfloat(c, fn); - } else if (sel == &s_symbol) { - if (argtype != A_SYMBOL || va_arg(ap, t_atomtype)) - goto phooey; + } + else if (sel == &s_symbol) + { + if (argtype != A_SYMBOL || va_arg(ap, t_atomtype)) goto phooey; class_addsymbol(c, fn); - } else if (sel == &s_list) { - if (argtype != A_GIMME) - goto phooey; + } + else if (sel == &s_list) + { + if (argtype != A_GIMME) goto phooey; class_addlist(c, fn); - } else if (sel == &s_anything) { - if (argtype != A_GIMME) - goto phooey; + } + else if (sel == &s_anything) + { + if (argtype != A_GIMME) goto phooey; class_addanything(c, fn); - } else { - t_atomtype argvec[MAXPDARG + 1]; + } + else + { + t_atomtype argvec[MAXPDARG+1]; nargs = 0; - while (argtype != A_NULL && nargs < MAXPDARG) { + while (argtype != A_NULL && nargs < MAXPDARG) + { argvec[nargs++] = argtype; argtype = va_arg(ap, t_atomtype); } @@ -546,10 +634,11 @@ void class_addmethod(t_class* c, t_method fn, t_symbol* sel, c->c_name->s_name, sel->s_name); argvec[nargs] = 0; #ifdef PDINSTANCE - for (i = 0; i < pd_ninstances; i++) { + for (i = 0; i < pd_ninstances; i++) + { class_addmethodtolist(c, &c->c_methods[i], c->c_nmethod, (t_gotfn)fn, dogensym(sel->s_name, 0, pd_instances[i]), - argvec, pd_instances[i]); + argvec, pd_instances[i]); } #else class_addmethodtolist(c, &c->c_methods, c->c_nmethod, @@ -566,120 +655,120 @@ void class_addmethod(t_class* c, t_method fn, t_symbol* sel, return; } -/* Instead of these, see the "class_addfloat", etc., macros in m_pd.h */ -void class_addbang(t_class* c, t_method fn) + /* Instead of these, see the "class_addfloat", etc., macros in m_pd.h */ +void class_addbang(t_class *c, t_method fn) { - if (!c) + if(!c) return; c->c_bangmethod = (t_bangmethod)fn; } -void class_addpointer(t_class* c, t_method fn) +void class_addpointer(t_class *c, t_method fn) { - if (!c) + if(!c) return; c->c_pointermethod = (t_pointermethod)fn; } -void class_doaddfloat(t_class* c, t_method fn) +void class_doaddfloat(t_class *c, t_method fn) { - if (!c) + if(!c) return; c->c_floatmethod = (t_floatmethod)fn; } -void class_addsymbol(t_class* c, t_method fn) +void class_addsymbol(t_class *c, t_method fn) { - if (!c) + if(!c) return; c->c_symbolmethod = (t_symbolmethod)fn; } -void class_addlist(t_class* c, t_method fn) +void class_addlist(t_class *c, t_method fn) { - if (!c) + if(!c) return; c->c_listmethod = (t_listmethod)fn; } -void class_addanything(t_class* c, t_method fn) +void class_addanything(t_class *c, t_method fn) { - if (!c) + if(!c) return; c->c_anymethod = (t_anymethod)fn; } -void class_setwidget(t_class* c, const t_widgetbehavior* w) +void class_setwidget(t_class *c, const t_widgetbehavior *w) { - if (!c) + if(!c) return; c->c_wb = w; } -void class_setparentwidget(t_class* c, const t_parentwidgetbehavior* pw) +void class_setparentwidget(t_class *c, const t_parentwidgetbehavior *pw) { - if (!c) + if(!c) return; c->c_pwb = pw; } -const char* class_getname(const t_class* c) +const char *class_getname(const t_class *c) { - if (!c) + if(!c) return 0; return (c->c_name->s_name); } -const char* class_gethelpname(const t_class* c) +const char *class_gethelpname(const t_class *c) { - if (!c) + if(!c) return 0; return (c->c_helpname->s_name); } -void class_sethelpsymbol(t_class* c, t_symbol* s) +void class_sethelpsymbol(t_class *c, t_symbol *s) { - if (!c) + if(!c) return; c->c_helpname = s; } -const t_parentwidgetbehavior* pd_getparentwidget(t_pd* x) +const t_parentwidgetbehavior *pd_getparentwidget(t_pd *x) { return ((*x)->c_pwb); } -void class_setdrawcommand(t_class* c) +void class_setdrawcommand(t_class *c) { - if (!c) + if(!c) return; c->c_drawcommand = 1; } -int class_isdrawcommand(const t_class* c) +int class_isdrawcommand(const t_class *c) { - if (!c) + if(!c) return 0; return (c->c_drawcommand); } -static void pd_floatforsignal(t_pd* x, t_float f) +static void pd_floatforsignal(t_pd *x, t_float f) { int offset = (*x)->c_floatsignalin; if (offset > 0) - *(t_float*)(((char*)x) + offset) = f; + *(t_float *)(((char *)x) + offset) = f; else pd_error(x, "%s: float unexpected for signal input", (*x)->c_name->s_name); } -void class_domainsignalin(t_class* c, int onset) +void class_domainsignalin(t_class *c, int onset) { - if (!c) + if(!c) return; - if (onset <= 0) - onset = -1; - else { + if (onset <= 0) onset = -1; + else + { if (c->c_floatmethod != pd_defaultfloat) post("warning: %s: float method overwritten", c->c_name->s_name); c->c_floatmethod = (t_floatmethod)pd_floatforsignal; @@ -687,47 +776,47 @@ void class_domainsignalin(t_class* c, int onset) c->c_floatsignalin = onset; } -void class_set_extern_dir(t_symbol* s) +void class_set_extern_dir(t_symbol *s) { class_extern_dir = s; } -const char* class_gethelpdir(const t_class* c) +const char *class_gethelpdir(const t_class *c) { - if (!c) + if(!c) return 0; return (c->c_externdir->s_name); } -static void class_nosavefn(t_gobj* z, t_binbuf* b) +static void class_nosavefn(t_gobj *z, t_binbuf *b) { bug("save function called but not defined"); } -void class_setsavefn(t_class* c, t_savefn f) +void class_setsavefn(t_class *c, t_savefn f) { - if (!c) + if(!c) return; c->c_savefn = f; } -t_savefn class_getsavefn(const t_class* c) +t_savefn class_getsavefn(const t_class *c) { - if (!c) + if(!c) return 0; return (c->c_savefn); } -void class_setpropertiesfn(t_class* c, t_propertiesfn f) +void class_setpropertiesfn(t_class *c, t_propertiesfn f) { - if (!c) + if(!c) return; c->c_propertiesfn = f; } -t_propertiesfn class_getpropertiesfn(const t_class* c) +t_propertiesfn class_getpropertiesfn(const t_class *c) { - if (!c) + if(!c) return 0; return (c->c_propertiesfn); } @@ -744,84 +833,82 @@ t_symbol** pd_ceammc_gensym_hash_table() } // end ceammc -/* ---------------- the symbol table ------------------------ */ - -static t_symbol* dogensym(const char* s, t_symbol* oldsym, - t_pdinstance* pdinstance) +static t_symbol *dogensym(const char *s, t_symbol *oldsym, + t_pdinstance *pdinstance) { - char* sym = 0; - t_symbol **sym1, *sym2; + char *symname = 0; + t_symbol **symhashloc, *sym2; unsigned int hash = 5381; int length = 0; - const char* s2 = s; + const char *s2 = s; while (*s2) /* djb2 hash algo */ { hash = ((hash << 5) + hash) + *s2; length++; s2++; } - sym1 = pdinstance->pd_symhash + (hash & (SYMTABHASHSIZE - 1)); - while ((sym2 = *sym1)) { + symhashloc = pdinstance->pd_symhash + (hash & (SYMTABHASHSIZE-1)); + while ((sym2 = *symhashloc)) + { if (!strcmp(sym2->s_name, s)) - return (sym2); - sym1 = &sym2->s_next; + return(sym2); + symhashloc = &sym2->s_next; } if (oldsym) sym2 = oldsym; - else - sym2 = (t_symbol*)t_getbytes(sizeof(*sym2)); - sym = t_getbytes(length + 1); + else sym2 = (t_symbol *)t_getbytes(sizeof(*sym2)); + symname = t_getbytes(length+1); sym2->s_next = 0; sym2->s_thing = 0; - strcpy(sym, s); - sym2->s_name = sym; - *sym1 = sym2; + strcpy(symname, s); + sym2->s_name = symname; + *symhashloc = sym2; return (sym2); } -t_symbol* gensym(const char* s) +t_symbol *gensym(const char *s) { - return (dogensym(s, 0, pd_this)); + return(dogensym(s, 0, pd_this)); } -static t_symbol* addfileextent(t_symbol* s) +static t_symbol *addfileextent(t_symbol *s) { char namebuf[MAXPDSTRING]; - const char* str = s->s_name; + const char *str = s->s_name; int ln = (int)strlen(str); - if (!strcmp(str + ln - 3, ".pd")) - return (s); + if (!strcmp(str + ln - 3, ".pd")) return (s); strcpy(namebuf, str); - strcpy(namebuf + ln, ".pd"); + strcpy(namebuf+ln, ".pd"); return (gensym(namebuf)); } #define MAXOBJDEPTH 1000 static int tryingalready; -void canvas_popabstraction(t_canvas* x); +void canvas_popabstraction(t_canvas *x); -t_symbol* pathsearch(t_symbol* s, char* ext); -int pd_setloadingabstraction(t_symbol* sym); +t_symbol* pathsearch(t_symbol *s,char* ext); +int pd_setloadingabstraction(t_symbol *sym); -/* this routine is called when a new "object" is requested whose class Pd + /* this routine is called when a new "object" is requested whose class Pd doesn't know. Pd tries to load it as an extern, then as an abstraction. */ -void new_anything(void* dummy, t_symbol* s, int argc, t_atom* argv) +void new_anything(void *dummy, t_symbol *s, int argc, t_atom *argv) { int fd; char dirbuf[MAXPDSTRING], classslashclass[MAXPDSTRING], *nameptr; - if (tryingalready > MAXOBJDEPTH) { - error("maximum object loading depth %d reached", MAXOBJDEPTH); - return; + if (tryingalready>MAXOBJDEPTH){ + error("maximum object loading depth %d reached", MAXOBJDEPTH); + return; } - if (s == &s_anything) { - error("object name \"%s\" not allowed", s->s_name); - return; + if (s == &s_anything){ + error("object name \"%s\" not allowed", s->s_name); + return; } pd_this->pd_newest = 0; class_loadsym = s; pd_globallock(); - if (sys_load_lib(canvas_getcurrent(), s->s_name)) { + if (sys_load_lib(canvas_getcurrent(), s->s_name)) + { tryingalready++; typedmess(dummy, s, argc, argv); tryingalready--; @@ -833,64 +920,66 @@ void new_anything(void* dummy, t_symbol* s, int argc, t_atom* argv) /* This is externally available, but note that it might later disappear; the whole "newest" thing is a hack which needs to be redesigned. */ -t_pd* pd_newest(void) +t_pd *pd_newest(void) { return (pd_this->pd_newest); } -/* horribly, we need prototypes for each of the artificial function + /* horribly, we need prototypes for each of the artificial function calls in typedmess(), to keep the compiler quiet. */ -typedef t_pd* (*t_newgimme)(t_symbol* s, int argc, t_atom* argv); -typedef void (*t_messgimme)(t_pd* x, t_symbol* s, int argc, t_atom* argv); +typedef t_pd *(*t_newgimme)(t_symbol *s, int argc, t_atom *argv); +typedef void(*t_messgimme)(t_pd *x, t_symbol *s, int argc, t_atom *argv); -typedef t_pd* (*t_fun0)( +typedef t_pd *(*t_fun0)( t_floatarg d1, t_floatarg d2, t_floatarg d3, t_floatarg d4, t_floatarg d5); -typedef t_pd* (*t_fun1)(t_int i1, +typedef t_pd *(*t_fun1)(t_int i1, t_floatarg d1, t_floatarg d2, t_floatarg d3, t_floatarg d4, t_floatarg d5); -typedef t_pd* (*t_fun2)(t_int i1, t_int i2, +typedef t_pd *(*t_fun2)(t_int i1, t_int i2, t_floatarg d1, t_floatarg d2, t_floatarg d3, t_floatarg d4, t_floatarg d5); -typedef t_pd* (*t_fun3)(t_int i1, t_int i2, t_int i3, +typedef t_pd *(*t_fun3)(t_int i1, t_int i2, t_int i3, t_floatarg d1, t_floatarg d2, t_floatarg d3, t_floatarg d4, t_floatarg d5); -typedef t_pd* (*t_fun4)(t_int i1, t_int i2, t_int i3, t_int i4, +typedef t_pd *(*t_fun4)(t_int i1, t_int i2, t_int i3, t_int i4, t_floatarg d1, t_floatarg d2, t_floatarg d3, t_floatarg d4, t_floatarg d5); -typedef t_pd* (*t_fun5)(t_int i1, t_int i2, t_int i3, t_int i4, t_int i5, +typedef t_pd *(*t_fun5)(t_int i1, t_int i2, t_int i3, t_int i4, t_int i5, t_floatarg d1, t_floatarg d2, t_floatarg d3, t_floatarg d4, t_floatarg d5); -typedef t_pd* (*t_fun6)(t_int i1, t_int i2, t_int i3, t_int i4, t_int i5, t_int i6, +typedef t_pd *(*t_fun6)(t_int i1, t_int i2, t_int i3, t_int i4, t_int i5, t_int i6, t_floatarg d1, t_floatarg d2, t_floatarg d3, t_floatarg d4, t_floatarg d5); -void pd_typedmess(t_pd* x, t_symbol* s, int argc, t_atom* argv) +void pd_typedmess(t_pd *x, t_symbol *s, int argc, t_atom *argv) { - t_method* f; - t_class* c = *x; + t_method *f; + t_class *c = *x; t_methodentry *m, *mlist; t_atomtype *wp, wanttype; int i; - t_int ai[MAXPDARG + 1], *ap = ai; - t_floatarg ad[MAXPDARG + 1], *dp = ad; + t_int ai[MAXPDARG+1], *ap = ai; + t_floatarg ad[MAXPDARG+1], *dp = ad; int narg = 0; - t_pd* bonzo; + t_pd *bonzo; - /* check for messages that are handled by fixed slots in the class + /* check for messages that are handled by fixed slots in the class structure. We don't catch "pointer" though so that sending "pointer" to pd_objectmaker doesn't require that we supply a pointer value. */ - if (s == &s_float) { - if (!argc) - (*c->c_floatmethod)(x, 0.); + if (s == &s_float) + { + if (!argc) (*c->c_floatmethod)(x, 0.); else if (argv->a_type == A_FLOAT) (*c->c_floatmethod)(x, argv->a_w.w_float); - else - goto badarg; + else goto badarg; return; } - if (s == &s_bang) { + if (s == &s_bang) + { (*c->c_bangmethod)(x); return; } - if (s == &s_list) { + if (s == &s_list) + { (*c->c_listmethod)(x, s, argc, argv); return; } - if (s == &s_symbol) { + if (s == &s_symbol) + { if (argc && argv->a_type == A_SYMBOL) (*c->c_symbolmethod)(x, argv->a_w.w_symbol); else @@ -903,111 +992,101 @@ void pd_typedmess(t_pd* x, t_symbol* s, int argc, t_atom* argv) mlist = c->c_methods; #endif for (i = c->c_nmethod, m = mlist; i--; m++) - if (m->me_name == s) { - wp = m->me_arg; - if (*wp == A_GIMME) { - if (x == &pd_objectmaker) - pd_this->pd_newest = (*((t_newgimme)(m->me_fun)))(s, argc, argv); + if (m->me_name == s) + { + wp = m->me_arg; + if (*wp == A_GIMME) + { + if (x == &pd_objectmaker) + pd_this->pd_newest = + (*((t_newgimme)(m->me_fun)))(s, argc, argv); + else (*((t_messgimme)(m->me_fun)))(x, s, argc, argv); + return; + } + if (argc > MAXPDARG) argc = MAXPDARG; + if (x != &pd_objectmaker) *(ap++) = (t_int)x, narg++; + while ((wanttype = *wp++)) + { + switch (wanttype) + { + case A_POINTER: + if (!argc) goto badarg; else - (*((t_messgimme)(m->me_fun)))(x, s, argc, argv); - return; - } - if (argc > MAXPDARG) - argc = MAXPDARG; - if (x != &pd_objectmaker) - *(ap++) = (t_int)x, narg++; - while ((wanttype = *wp++)) { - switch (wanttype) { - case A_POINTER: - if (!argc) - goto badarg; - else { - if (argv->a_type == A_POINTER) - *ap = (t_int)(argv->a_w.w_gpointer); - else - goto badarg; - argc--; - argv++; - } - narg++; - ap++; - break; - case A_FLOAT: - if (!argc) - goto badarg; /* falls through */ - case A_DEFFLOAT: - if (!argc) - *dp = 0; - else { - if (argv->a_type == A_FLOAT) - *dp = argv->a_w.w_float; - else - goto badarg; - argc--; - argv++; - } - dp++; - break; - case A_SYMBOL: - if (!argc) - goto badarg; /* falls through */ - case A_DEFSYM: - if (!argc) - *ap = (t_int)(&s_); - else { - if (argv->a_type == A_SYMBOL) - *ap = (t_int)(argv->a_w.w_symbol); - /* if it's an unfilled "dollar" argument it appears + { + if (argv->a_type == A_POINTER) + *ap = (t_int)(argv->a_w.w_gpointer); + else goto badarg; + argc--; + argv++; + } + narg++; + ap++; + break; + case A_FLOAT: + if (!argc) goto badarg; /* falls through */ + case A_DEFFLOAT: + if (!argc) *dp = 0; + else + { + if (argv->a_type == A_FLOAT) + *dp = argv->a_w.w_float; + else goto badarg; + argc--; + argv++; + } + dp++; + break; + case A_SYMBOL: + if (!argc) goto badarg; /* falls through */ + case A_DEFSYM: + if (!argc) *ap = (t_int)(&s_); + else + { + if (argv->a_type == A_SYMBOL) + *ap = (t_int)(argv->a_w.w_symbol); + /* if it's an unfilled "dollar" argument it appears as zero here; cheat and bash it to the null symbol. Unfortunately, this lets real zeros pass as symbols too, which seems wrong... */ - else if (x == &pd_objectmaker && argv->a_type == A_FLOAT - && argv->a_w.w_float == 0) - *ap = (t_int)(&s_); - else - goto badarg; - argc--; - argv++; - } - narg++; - ap++; - break; - default: - goto badarg; + else if (x == &pd_objectmaker && argv->a_type == A_FLOAT + && argv->a_w.w_float == 0) + *ap = (t_int)(&s_); + else goto badarg; + argc--; + argv++; } - } - switch (narg) { - case 0: - bonzo = (*(t_fun0)(m->me_fun))(ad[0], ad[1], ad[2], ad[3], ad[4]); - break; - case 1: - bonzo = (*(t_fun1)(m->me_fun))(ai[0], ad[0], ad[1], ad[2], ad[3], ad[4]); - break; - case 2: - bonzo = (*(t_fun2)(m->me_fun))(ai[0], ai[1], ad[0], ad[1], ad[2], ad[3], ad[4]); - break; - case 3: - bonzo = (*(t_fun3)(m->me_fun))(ai[0], ai[1], ai[2], ad[0], ad[1], ad[2], ad[3], ad[4]); - break; - case 4: - bonzo = (*(t_fun4)(m->me_fun))(ai[0], ai[1], ai[2], ai[3], - ad[0], ad[1], ad[2], ad[3], ad[4]); - break; - case 5: - bonzo = (*(t_fun5)(m->me_fun))(ai[0], ai[1], ai[2], ai[3], ai[4], - ad[0], ad[1], ad[2], ad[3], ad[4]); - break; - case 6: - bonzo = (*(t_fun6)(m->me_fun))(ai[0], ai[1], ai[2], ai[3], ai[4], ai[5], - ad[0], ad[1], ad[2], ad[3], ad[4]); + narg++; + ap++; break; default: - bonzo = 0; + goto badarg; } - if (x == &pd_objectmaker) - pd_this->pd_newest = bonzo; - return; } + switch (narg) + { + case 0 : bonzo = (*(t_fun0)(m->me_fun)) + (ad[0], ad[1], ad[2], ad[3], ad[4]); break; + case 1 : bonzo = (*(t_fun1)(m->me_fun)) + (ai[0], ad[0], ad[1], ad[2], ad[3], ad[4]); break; + case 2 : bonzo = (*(t_fun2)(m->me_fun)) + (ai[0], ai[1], ad[0], ad[1], ad[2], ad[3], ad[4]); break; + case 3 : bonzo = (*(t_fun3)(m->me_fun)) + (ai[0], ai[1], ai[2], ad[0], ad[1], ad[2], ad[3], ad[4]); break; + case 4 : bonzo = (*(t_fun4)(m->me_fun)) + (ai[0], ai[1], ai[2], ai[3], + ad[0], ad[1], ad[2], ad[3], ad[4]); break; + case 5 : bonzo = (*(t_fun5)(m->me_fun)) + (ai[0], ai[1], ai[2], ai[3], ai[4], + ad[0], ad[1], ad[2], ad[3], ad[4]); break; + case 6 : bonzo = (*(t_fun6)(m->me_fun)) + (ai[0], ai[1], ai[2], ai[3], ai[4], ai[5], + ad[0], ad[1], ad[2], ad[3], ad[4]); break; + default: bonzo = 0; + } + if (x == &pd_objectmaker) + pd_this->pd_newest = bonzo; + return; + } (*c->c_anymethod)(x, s, argc, argv); return; badarg: @@ -1015,37 +1094,31 @@ void pd_typedmess(t_pd* x, t_symbol* s, int argc, t_atom* argv) s->s_name, c->c_name->s_name); } -/* convenience routine giving a stdarg interface to typedmess(). Only + /* convenience routine giving a stdarg interface to typedmess(). Only ten args supported; it seems unlikely anyone will need more since longer messages are likely to be programmatically generated anyway. */ -void pd_vmess(t_pd* x, t_symbol* sel, const char* fmt, ...) +void pd_vmess(t_pd *x, t_symbol *sel, const char *fmt, ...) { va_list ap; t_atom arg[10], *at = arg; int nargs = 0; - const char* fp = fmt; + char *fp = fmt; va_start(ap, fmt); - while (1) { - if (nargs >= 10) { + while (1) + { + if (nargs >= 10) + { pd_error(x, "pd_vmess: only 10 allowed"); break; } - switch (*fp++) { - case 'f': - SETFLOAT(at, va_arg(ap, double)); - break; - case 's': - SETSYMBOL(at, va_arg(ap, t_symbol*)); - break; - case 'i': - SETFLOAT(at, va_arg(ap, t_int)); - break; - case 'p': - SETPOINTER(at, va_arg(ap, t_gpointer*)); - break; - default: - goto done; + switch(*fp++) + { + case 'f': SETFLOAT(at, va_arg(ap, double)); break; + case 's': SETSYMBOL(at, va_arg(ap, t_symbol *)); break; + case 'i': SETFLOAT(at, va_arg(ap, t_int)); break; + case 'p': SETPOINTER(at, va_arg(ap, t_gpointer *)); break; + default: goto done; } at++; nargs++; @@ -1055,32 +1128,32 @@ void pd_vmess(t_pd* x, t_symbol* sel, const char* fmt, ...) typedmess(x, sel, nargs, arg); } -void pd_forwardmess(t_pd* x, int argc, t_atom* argv) +void pd_forwardmess(t_pd *x, int argc, t_atom *argv) { - if (argc) { + if (argc) + { t_atomtype t = argv->a_type; - if (t == A_SYMBOL) - pd_typedmess(x, argv->a_w.w_symbol, argc - 1, argv + 1); - else if (t == A_POINTER) { - if (argc == 1) - pd_pointer(x, argv->a_w.w_gpointer); - else - pd_list(x, &s_list, argc, argv); - } else if (t == A_FLOAT) { - if (argc == 1) - pd_float(x, argv->a_w.w_float); - else - pd_list(x, &s_list, argc, argv); - } else - bug("pd_forwardmess"); + if (t == A_SYMBOL) pd_typedmess(x, argv->a_w.w_symbol, argc-1, argv+1); + else if (t == A_POINTER) + { + if (argc == 1) pd_pointer(x, argv->a_w.w_gpointer); + else pd_list(x, &s_list, argc, argv); + } + else if (t == A_FLOAT) + { + if (argc == 1) pd_float(x, argv->a_w.w_float); + else pd_list(x, &s_list, argc, argv); + } + else bug("pd_forwardmess"); } + } void nullfn(void) {} -t_gotfn getfn(const t_pd* x, t_symbol* s) +t_gotfn getfn(const t_pd *x, t_symbol *s) { - const t_class* c = *x; + const t_class *c = *x; t_methodentry *m, *mlist; int i; @@ -1090,15 +1163,14 @@ t_gotfn getfn(const t_pd* x, t_symbol* s) mlist = c->c_methods; #endif for (i = c->c_nmethod, m = mlist; i--; m++) - if (m->me_name == s) - return (m->me_fun); + if (m->me_name == s) return(m->me_fun); pd_error(x, "%s: no method for message '%s'", c->c_name->s_name, s->s_name); - return ((t_gotfn)nullfn); + return((t_gotfn)nullfn); } -t_gotfn zgetfn(const t_pd* x, t_symbol* s) +t_gotfn zgetfn(const t_pd *x, t_symbol *s) { - const t_class* c = *x; + const t_class *c = *x; t_methodentry *m, *mlist; int i; @@ -1108,18 +1180,17 @@ t_gotfn zgetfn(const t_pd* x, t_symbol* s) mlist = c->c_methods; #endif for (i = c->c_nmethod, m = mlist; i--; m++) - if (m->me_name == s) - return (m->me_fun); - return (0); + if (m->me_name == s) return(m->me_fun); + return(0); } -void c_extern(t_externclass* cls, t_newmethod newroutine, - t_method freeroutine, t_symbol* name, size_t size, int tiny, +void c_extern(t_externclass *cls, t_newmethod newroutine, + t_method freeroutine, t_symbol *name, size_t size, int tiny, \ t_atomtype arg1, ...) { bug("'c_extern' not implemented."); } -void c_addmess(t_method fn, t_symbol* sel, t_atomtype arg1, ...) +void c_addmess(t_method fn, t_symbol *sel, t_atomtype arg1, ...) { bug("'c_addmess' not implemented."); } diff --git a/src/m_glob.c b/src/m_glob.c index 4e1a9a7949..362e6fa0a6 100644 --- a/src/m_glob.c +++ b/src/m_glob.c @@ -65,7 +65,7 @@ void glob_foo(void *dummy, t_symbol *s, int argc, t_atom *argv); void glob_foo(void *dummy, t_symbol *s, int argc, t_atom *argv) { #ifdef USEAPI_ALSA - void alsa_printstate( void); + void alsa_printstate(void); alsa_printstate(); #endif } diff --git a/src/m_imp.h b/src/m_imp.h index 9a0c6b67c0..72fdfa8e57 100644 --- a/src/m_imp.h +++ b/src/m_imp.h @@ -57,6 +57,7 @@ struct _class char c_patchable; /* true if we have a t_object header */ char c_firstin; /* if patchable, true if draw first inlet */ char c_drawcommand; /* a drawing command for a template */ + t_classfreefn c_classfreefn; /* function to call before freeing class */ }; /* m_pd.c */ @@ -86,8 +87,8 @@ EXTERN int obj_siginletindex(const t_object *x, int m); EXTERN int obj_sigoutletindex(const t_object *x, int m); /* s_inter.c */ -void pd_globallock( void); -void pd_globalunlock( void); +void pd_globallock(void); +void pd_globalunlock(void); /* misc */ #define SYMTABHASHSIZE 1024 diff --git a/src/m_memory.c b/src/m_memory.c index e2776a3927..5ff5d160a6 100644 --- a/src/m_memory.c +++ b/src/m_memory.c @@ -42,7 +42,7 @@ void *copybytes(const void *src, size_t nbytes) { void *ret; ret = getbytes(nbytes); - if (nbytes) + if (nbytes && ret) memcpy(ret, src, nbytes); return (ret); } diff --git a/src/m_obj.c b/src/m_obj.c index 072212ad6c..6d9d938cf3 100644 --- a/src/m_obj.c +++ b/src/m_obj.c @@ -313,7 +313,7 @@ void outlet_setstacklim(void) } /* get a number unique to the (clock, MIDI, GUI, etc.) event we're on */ -int sched_geteventno( void) +int sched_geteventno(void) { return (outlet_eventno); } diff --git a/src/m_pd.c b/src/m_pd.c index ad9231d78f..81ceb77477 100644 --- a/src/m_pd.c +++ b/src/m_pd.c @@ -256,7 +256,7 @@ void pd_popsym(t_pd *x) } } -void pd_doloadbang( void) +void pd_doloadbang(void) { if (lastpopped) pd_vmess(lastpopped, gensym("loadbang"), "f", LB_LOAD); @@ -302,11 +302,14 @@ void ooura_term(void); void pd_init(void) { +#ifndef PDINSTANCE static int initted = 0; if (initted) return; initted = 1; -#ifdef PDINSTANCE +#else + if (pd_instances) + return; pd_instances = (t_pdinstance **)getbytes(sizeof(*pd_instances)); pd_instances[0] = &pd_maininstance; pd_ninstances = 1; @@ -326,7 +329,6 @@ EXTERN void pd_init_systems(void) { EXTERN void pd_term_systems(void) { sys_lock(); - /* ooura_term(); oops - this doesn't seem to have got merged from PR */ sys_unlock(); } diff --git a/src/m_pd.h b/src/m_pd.h index 5d8fbb6273..6d46bd1954 100644 --- a/src/m_pd.h +++ b/src/m_pd.h @@ -9,7 +9,7 @@ extern "C" { #endif #define PD_MAJOR_VERSION 0 -#define PD_MINOR_VERSION 49 +#define PD_MINOR_VERSION 50 #define PD_BUGFIX_VERSION 1 #define PD_TEST_VERSION "" extern int pd_compatibilitylevel; /* e.g., 43 for pd 0.43 compatibility */ @@ -255,7 +255,7 @@ typedef struct _text t_object; #define ob_g te_g typedef void (*t_method)(void); -typedef void *(*t_newmethod)( void); +typedef void *(*t_newmethod)(void); /* in ARM 64 a varargs prototype generates a different function call sequence from a fixed one, so in that special case we make a more restrictive @@ -465,12 +465,18 @@ EXTERN const t_parentwidgetbehavior *pd_getparentwidget(t_pd *x); #define CLASS_TYPEMASK 3 - EXTERN t_class *class_new(t_symbol *name, t_newmethod newmethod, t_method freemethod, size_t size, int flags, t_atomtype arg1, ...); + EXTERN t_class *class_new64(t_symbol *name, t_newmethod newmethod, t_method freemethod, size_t size, int flags, t_atomtype arg1, ...); +EXTERN void class_free(t_class *c); + +#if PDINSTANCE +EXTERN t_class *class_getfirst(void); +#endif + EXTERN void class_addcreator(t_newmethod newmethod, t_symbol *s, t_atomtype type1, ...); EXTERN void class_addmethod(t_class *c, t_method fn, t_symbol *sel, @@ -505,6 +511,9 @@ typedef void (*t_propertiesfn)(t_gobj *x, struct _glist *glist); EXTERN void class_setpropertiesfn(t_class *c, t_propertiesfn f); EXTERN t_propertiesfn class_getpropertiesfn(const t_class *c); +typedef void (*t_classfreefn)(t_class *); +EXTERN void class_setfreefn(t_class *c, t_classfreefn fn); + #ifndef PD_CLASS_DEF #define class_addbang(x, y) class_addbang((x), (t_method)(y)) #define class_addpointer(x, y) class_addpointer((x), (t_method)(y)) @@ -848,7 +857,7 @@ EXTERN t_pdinstance pd_maininstance; /* m_pd.c */ #ifdef PDINSTANCE -EXTERN t_pdinstance *pdinstance_new( void); +EXTERN t_pdinstance *pdinstance_new(void); EXTERN void pd_setinstance(t_pdinstance *x); EXTERN void pdinstance_free(t_pdinstance *x); #endif /* PDINSTANCE */ diff --git a/src/m_sched.c b/src/m_sched.c index 23ae264155..a07c73c8e1 100644 --- a/src/m_sched.c +++ b/src/m_sched.c @@ -125,13 +125,13 @@ void clock_setunit(t_clock *x, double timeunit, int sampflag) /* get current logical time. We don't specify what units this is in; use clock_gettimesince() to measure intervals from time of this call. */ -double clock_getlogicaltime( void) +double clock_getlogicaltime(void) { return (pd_this->pd_systime); } /* OBSOLETE (misleading) function name kept for compatibility */ -double clock_getsystime( void) { return (pd_this->pd_systime); } +double clock_getsystime(void) { return (pd_this->pd_systime); } /* elapsed time in milliseconds since the given system time */ double clock_gettimesince(double prevsystime) @@ -175,7 +175,7 @@ static int sys_histogram[NHIST][NBIN]; static double sys_histtime; static int sched_diddsp, sched_didpoll, sched_didnothing; -void sys_clearhist( void) +void sys_clearhist(void) { unsigned int i, j; for (i = 0; i < NHIST; i++) @@ -184,7 +184,7 @@ void sys_clearhist( void) sched_diddsp = sched_didpoll = sched_didnothing = 0; } -void sys_printhist( void) +void sys_printhist(void) { unsigned int i, j; for (i = 0; i < NHIST; i++) @@ -298,7 +298,7 @@ static int sched_lastinclip, sched_lastoutclip, void glob_watchdog(t_pd *dummy); -static void sched_pollformeters( void) +static void sched_pollformeters(void) { int inclip, outclip, indb, outdb; static int sched_nextmeterpolltime, sched_nextpingtime; @@ -397,7 +397,7 @@ void sched_set_using_audio(int flag) } /* take the scheduler forward one DSP tick, also handling clock timeouts */ -void sched_tick( void) +void sched_tick(void) { double next_sys_time = pd_this->pd_systime + (STUFF->st_schedblocksize/STUFF->st_dacsr) * TIMEUNITPERSECOND; @@ -434,15 +434,15 @@ call. This call returns true if samples were transferred; false means that the audio I/O system is still busy with previous transfers. */ -void sys_pollmidiqueue( void); -void sys_initmidiqueue( void); +void sys_pollmidiqueue(void); +void sys_initmidiqueue(void); /* sys_idlehook is a hook the user can fill in to grab idle time. Return nonzero if you actually used the time; otherwise we're really really idle and will now sleep. */ int (*sys_idlehook)(void); -static void m_pollingscheduler( void) +static void m_pollingscheduler(void) { int idlecount = 0; diff --git a/src/makefile.gnu b/src/makefile.gnu index 3ea304db6f..f9c91a46fc 100644 --- a/src/makefile.gnu +++ b/src/makefile.gnu @@ -12,7 +12,7 @@ # tags: tags file # install: install to /usr/local (or elsewhere by setting "prefix" variable) # -# You can get jack support ($ make -f makfile.gnu JACK=TRUE) or compile in +# You can get jack support ($ make -f makefile.gnu JACK=TRUE) or compile in # the portaudio library (PA=TRUE). By default, both ALSA and OSS (BSD style) # audio APIs are compiled in. You can disable them (e.g., OSS=FALSE). In # Gnu/linux, you can also just install "alsa-oss." diff --git a/src/pd.ico b/src/pd.ico deleted file mode 100755 index 2da5c24362..0000000000 Binary files a/src/pd.ico and /dev/null differ diff --git a/src/s_audio.c b/src/s_audio.c index cae8c8e230..97bf0bff38 100644 --- a/src/s_audio.c +++ b/src/s_audio.c @@ -142,7 +142,7 @@ void sys_save_audio_params( void oss_init(void); #endif -static void audio_init( void) +static void audio_init(void) { static int initted = 0; if (initted) @@ -417,7 +417,7 @@ void sys_close_audio(void) } /* open audio using whatever parameters were last used */ -void sys_reopen_audio( void) +void sys_reopen_audio(void) { int naudioindev, audioindev[MAXAUDIOINDEV], chindev[MAXAUDIOINDEV]; int naudiooutdev, audiooutdev[MAXAUDIOOUTDEV], choutdev[MAXAUDIOOUTDEV]; @@ -620,7 +620,7 @@ void sys_reportidle(void) /* this could later be set by a preference but for now it seems OK to just keep jack audio open but close unused audio devices for any other API */ -int audio_shouldkeepopen( void) +int audio_shouldkeepopen(void) { return (sys_audioapi == API_JACK); } @@ -709,7 +709,7 @@ static void audio_getdevs(char *indevlist, int *nindevs, } -static void sys_listaudiodevs(void ) +static void sys_listaudiodevs(void) { char indevlist[MAXNDEV*DEVDESCSIZE], outdevlist[MAXNDEV*DEVDESCSIZE]; int nindevs = 0, noutdevs = 0, i, canmulti = 0, cancallback = 0; @@ -881,7 +881,7 @@ void sys_set_audio_settings_reopen(int naudioindev, int *audioindev, int nchinde else sched_reopenmeplease(); } -void sys_listdevs(void ) +void sys_listdevs(void) { #ifdef USEAPI_PORTAUDIO if (sys_audioapi == API_PORTAUDIO) @@ -1069,7 +1069,7 @@ void sys_get_audio_apis(char *buf) #ifdef USEAPI_ALSA void alsa_putzeros(int n); void alsa_getzeros(int n); -void alsa_printstate( void); +void alsa_printstate(void); #endif /* convert a device name to a (1-based) device number. (Output device if @@ -1085,6 +1085,11 @@ int sys_audiodevnametonumber(int output, const char *name) if (output) { + /* try first for exact match */ + for (i = 0; i < noutdevs; i++) + if (!strcmp(name, outdevlist + i * DEVDESCSIZE)) + return (i); + /* failing that, a match up to end of shorter string */ for (i = 0; i < noutdevs; i++) { unsigned long comp = strlen(name); @@ -1096,6 +1101,9 @@ int sys_audiodevnametonumber(int output, const char *name) } else { + for (i = 0; i < nindevs; i++) + if (!strcmp(name, indevlist + i * DEVDESCSIZE)) + return (i); for (i = 0; i < nindevs; i++) { unsigned long comp = strlen(name); diff --git a/src/s_audio_alsa.c b/src/s_audio_alsa.c index 26c1158e09..37da0ba2f6 100644 --- a/src/s_audio_alsa.c +++ b/src/s_audio_alsa.c @@ -36,7 +36,7 @@ #define ALSAAPI9 #endif -static void alsa_checkiosync( void); +static void alsa_checkiosync(void); static void alsa_numbertoname(int iodev, char *devname, int nchar); static int alsa_jittermax; #define ALSA_DEFJITTERMAX 5 @@ -692,7 +692,7 @@ int alsa_send_dacs(void) return (SENDDACS_YES); } -void alsa_printstate( void) +void alsa_printstate(void) { int i, result, iodev = 0; snd_pcm_sframes_t indelay = 0, inavail = 0, outdelay = 0, outavail = 0; @@ -757,7 +757,7 @@ void alsa_getzeros(int iodev, int n) } /* call this only if both input and output are open */ -static void alsa_checkiosync( void) +static void alsa_checkiosync(void) { int i, result, giveup = 50, alreadylogged = 0, iodev = 0, err; snd_pcm_sframes_t minphase, maxphase, thisphase, outdelay; diff --git a/src/s_audio_audiounit.c b/src/s_audio_audiounit.c index 6510bc71e2..79d7059524 100644 --- a/src/s_audio_audiounit.c +++ b/src/s_audio_audiounit.c @@ -35,7 +35,7 @@ void audiounit_getdevs(char *indevlist, int *nindevs, post("device getting not implemented for AudioUnit yet\n"); } -void audiounit_listdevs( void) +void audiounit_listdevs(void) { post("device listing not implemented for AudioUnit yet\n"); } diff --git a/src/s_audio_dummy.c b/src/s_audio_dummy.c index 2543bb3e82..39731c7aa5 100644 --- a/src/s_audio_dummy.c +++ b/src/s_audio_dummy.c @@ -13,11 +13,11 @@ int dummy_open_audio(int nin, int nout, int sr) { return 0; } -int dummy_close_audio( void) { +int dummy_close_audio(void) { return 0; } -int dummy_send_dacs( void) { +int dummy_send_dacs(void) { return 0; } @@ -29,7 +29,7 @@ void dummy_getdevs(char *indevlist, int *nindevs, char *outdevlist, *canmulti = 0; } -void dummy_listdevs( void) { +void dummy_listdevs(void) { // do nothing } diff --git a/src/s_audio_esd.c b/src/s_audio_esd.c index 652d8af66f..e2a1e21d61 100644 --- a/src/s_audio_esd.c +++ b/src/s_audio_esd.c @@ -58,7 +58,7 @@ int esd_open_audio(int nindev, int *indev, int nchin, int *chin, return (0); } -void esd_close_audio( void) +void esd_close_audio(void) { close(esd_socket_out); close(esd_socket_in); @@ -113,7 +113,7 @@ int esd_send_dacs(void) return (SENDDACS_YES); } -void esd_listdevs( void) +void esd_listdevs(void) { post("device listing not implemented for ESD yet\n"); } diff --git a/src/s_audio_jack.c b/src/s_audio_jack.c index 2907e87da0..99a927df05 100644 --- a/src/s_audio_jack.c +++ b/src/s_audio_jack.c @@ -547,7 +547,7 @@ void jack_getdevs(char *indevlist, int *nindevs, *nindevs = *noutdevs = ndev; } -void jack_listdevs( void) +void jack_listdevs(void) { post("device listing not implemented for jack yet\n"); } diff --git a/src/s_audio_mmio.c b/src/s_audio_mmio.c index e1b5946a3d..98ccaa3911 100644 --- a/src/s_audio_mmio.c +++ b/src/s_audio_mmio.c @@ -16,7 +16,7 @@ /* ------------------------- audio -------------------------- */ static void nt_close_midiin(void); -static void nt_noresync( void); +static void nt_noresync(void); static void postflags(void); @@ -218,7 +218,7 @@ int mmio_do_open_audio(void) return (0); } -void mmio_close_audio( void) +void mmio_close_audio(void) { int errcode; int nda, nad; @@ -395,7 +395,7 @@ reason the sync testing below gives false positives. */ static int nt_resync_cancelled; -static void nt_noresync( void) +static void nt_noresync(void) { nt_resync_cancelled = 1; } diff --git a/src/s_audio_oss.c b/src/s_audio_oss.c index c597f07632..e829491fa4 100644 --- a/src/s_audio_oss.c +++ b/src/s_audio_oss.c @@ -481,7 +481,7 @@ int oss_open_audio(int nindev, int *indev, int nchin, int *chin, return (0); } -void oss_close_audio( void) +void oss_close_audio(void) { int i; for (i=0;i /* for Sleep() */ #endif -/* max number of unsuccessful polls before trying to reopen the device */ -#ifndef MAX_NUM_POLLS -#define MAX_NUM_POLLS 2000 +/* max time (in ms) before trying to reopen the device */ +#ifndef POLL_TIMEOUT +#define POLL_TIMEOUT 2000 #endif #endif /* THREADSIGNAL */ #endif /* FAKEBLOCKING */ @@ -468,7 +468,7 @@ int pa_open_audio(int inchans, int outchans, int rate, t_sample *soundin, return (0); } -void pa_close_audio( void) +void pa_close_audio(void) { if (pa_stream) { @@ -496,6 +496,7 @@ int pa_send_dacs(void) int j, k; int rtnval = SENDDACS_YES; int locked = 0; + double timebefore; #ifdef FAKEBLOCKING #ifdef THREADSIGNAL struct timespec ts; @@ -513,11 +514,10 @@ int pa_send_dacs(void) ts.tv_sec = (long long)timeout; ts.tv_nsec = (timeout - (double)ts.tv_sec) * 1e9; #else - int counter = MAX_NUM_POLLS; #endif /* THREADSIGNAL */ -#else - double timebefore; #endif /* FAKEBLOCKING */ + timebefore = sys_getrealtime(); + if ((!STUFF->st_inchannels && !STUFF->st_outchannels) || !pa_stream) return (SENDDACS_NO); conversionbuf = (float *)alloca((STUFF->st_inchannels > STUFF->st_outchannels? @@ -540,18 +540,15 @@ int pa_send_dacs(void) break; } #else - if (Pa_IsStreamActive(&pa_stream) < 0) - counter--; - if (!counter) + if (Pa_IsStreamActive(&pa_stream) < 0 && + (sys_getrealtime() - timebefore) > (POLL_TIMEOUT * 0.001)) { locked = 1; break; } -#ifdef _WIN32 - Sleep(1); -#else - usleep(1000); -#endif /* _WIN32 */ + sys_microsleep(sys_sleepgrain); + if (!pa_stream) /* sys_microsleep() may have closed device */ + return SENDDACS_NO; #endif /* THREADSIGNAL */ } #ifdef THREADSIGNAL @@ -585,18 +582,15 @@ int pa_send_dacs(void) break; } #else - if (Pa_IsStreamActive(&pa_stream) < 0) - counter--; - if (!counter) + if (Pa_IsStreamActive(&pa_stream) < 0 && + (sys_getrealtime() - timebefore) > (POLL_TIMEOUT * 0.001)) { locked = 1; break; } -#ifdef _WIN32 - Sleep(1); -#else - usleep(1000); -#endif /* _WIN32 */ + sys_microsleep(sys_sleepgrain); + if (!pa_stream) /* sys_microsleep() may have closed device */ + return SENDDACS_NO; #endif /* THREADSIGNAL */ } #ifdef THREADSIGNAL @@ -615,7 +609,6 @@ int pa_send_dacs(void) } #else /* FAKEBLOCKING */ - timebefore = sys_getrealtime(); /* write output */ if (STUFF->st_outchannels) { @@ -673,14 +666,14 @@ int pa_send_dacs(void) if (audio_isopen()) error("successfully reopened audio device"); else + { error("audio device not responding - closing audio"); - #ifdef _WIN32 - error("reconnect and try reselecting the device in the settings"); - #endif + error("reconnect and reselect it in the settings (or toggle DSP)"); + } #endif return SENDDACS_NO; - } else - return (rtnval); + } + else return (rtnval); } /* scanning for devices */ diff --git a/src/s_file.c b/src/s_file.c index ce3e217bfb..8b1473c620 100644 --- a/src/s_file.c +++ b/src/s_file.c @@ -33,7 +33,7 @@ #define snprintf _snprintf #endif -void sys_doflags( void); +void sys_doflags(void); static PERTHREAD char *sys_prefbuf; static PERTHREAD int sys_prefbufsize; @@ -106,7 +106,7 @@ static int sys_getpreference_file(const char *key, char *value, int size) return (1); } -static void sys_doneloadpreferences_file( void) +static void sys_doneloadpreferences_file(void) { if (sys_prefbuf) free(sys_prefbuf); @@ -125,7 +125,7 @@ static void sys_putpreference_file(const char *key, const char *value) key, value); } -static void sys_donesavepreferences_file( void) +static void sys_donesavepreferences_file(void) { if (sys_prefsavefp) { @@ -138,7 +138,7 @@ static void sys_donesavepreferences_file( void) /***** linux/android/BSD etc: read and write to ~/.pd_ceammc_settings file ******/ #if !defined(_WIN32) && !defined(__APPLE__) -static void sys_initloadpreferences( void) +static void sys_initloadpreferences(void) { char filenamebuf[MAXPDSTRING], *homedir = getenv("HOME"); int fd, length; @@ -165,12 +165,12 @@ static int sys_getpreference(const char *key, char *value, int size) return (sys_getpreference_file(key, value, size)); } -static void sys_doneloadpreferences( void) +static void sys_doneloadpreferences(void) { sys_doneloadpreferences_file(); } -static void sys_initsavepreferences( void) +static void sys_initsavepreferences(void) { char filenamebuf[MAXPDSTRING], *homedir = getenv("HOME"); @@ -188,14 +188,14 @@ static void sys_putpreference(const char *key, const char *value) sys_putpreference_file(key, value); } -static void sys_donesavepreferences( void) +static void sys_donesavepreferences(void) { sys_donesavepreferences_file(); } #else /* !defined(_WIN32) && !defined(__APPLE__) */ -static void sys_initloadpreferences( void) +static void sys_initloadpreferences(void) { if (sys_prefbuf) bug("sys_initloadpreferences"); diff --git a/src/s_inter.c b/src/s_inter.c index f7aeb91ae8..5b6dcd2d1a 100644 --- a/src/s_inter.c +++ b/src/s_inter.c @@ -145,7 +145,7 @@ void sys_set_searchpath(void); void sys_set_temppath(void); void sys_set_extrapath(void); void sys_set_startup(void); -void sys_stopgui( void); +void sys_stopgui(void); /* ----------- functions for timing, signals, priorities, etc --------- */ @@ -201,14 +201,18 @@ double sys_getrealtime(void) extern int sys_nosleep; +/* sleep (but cancel the sleeping if pollem is set and any file descriptors are +ready - in that case, dispatch any resulting Pd messages and return. Called +with sys_lock() set. We will temporarily release the lock if we actually +sleep. */ static int sys_domicrosleep(int microsec, int pollem) { struct timeval timout; int i, didsomething = 0; t_fdpoll *fp; timout.tv_sec = 0; - timout.tv_usec = (sys_nosleep ? 0 : microsec); - if (pollem) + timout.tv_usec = 0; + if (pollem && pd_this->pd_inter->i_nfdpoll) { fd_set readset, writeset, exceptset; FD_ZERO(&writeset); @@ -217,45 +221,40 @@ static int sys_domicrosleep(int microsec, int pollem) for (fp = pd_this->pd_inter->i_fdpoll, i = pd_this->pd_inter->i_nfdpoll; i--; fp++) FD_SET(fp->fdp_fd, &readset); -#ifdef _WIN32 - if (pd_this->pd_inter->i_maxfd == 0) - Sleep(microsec/1000); - else -#endif if(select(pd_this->pd_inter->i_maxfd+1, &readset, &writeset, &exceptset, &timout) < 0) perror("microsleep select"); for (i = 0; i < pd_this->pd_inter->i_nfdpoll; i++) if (FD_ISSET(pd_this->pd_inter->i_fdpoll[i].fdp_fd, &readset)) { -#ifdef THREAD_LOCKING - sys_lock(); -#endif (*pd_this->pd_inter->i_fdpoll[i].fdp_fn) (pd_this->pd_inter->i_fdpoll[i].fdp_ptr, pd_this->pd_inter->i_fdpoll[i].fdp_fd); -#ifdef THREAD_LOCKING - sys_unlock(); -#endif didsomething = 1; } - return (didsomething); + if (didsomething) + return (1); } - else + if (microsec) { + sys_unlock(); #ifdef _WIN32 - if (pd_this->pd_inter->i_maxfd == 0) - Sleep(microsec/1000); - else + Sleep(microsec/1000); +#else + usleep(microsec); #endif - select(0, 0, 0, 0, &timout); - return (0); + sys_lock(); } + return (0); } + /* sleep (but if any incoming or to-gui sending to do, do that instead.) + Call with the PD unstance lock UNSET - we set it here. */ void sys_microsleep(int microsec) { + sys_lock(); sys_domicrosleep(microsec, 1); + sys_unlock(); } #if !defined(_WIN32) && !defined(__CYGWIN__) @@ -318,7 +317,7 @@ void sys_setalarm(int microsec) #endif /* NOT _WIN32 && NOT __CYGWIN__ */ /* on startup, set various signal handlers */ -void sys_setsignalhandlers( void) +void sys_setsignalhandlers(void) { #if !defined(_WIN32) && !defined(__CYGWIN__) signal(SIGHUP, sys_huphandler); @@ -683,7 +682,7 @@ static void sys_trytogetmoreguibuf(int newsize) } } -int sys_havegui( void) +int sys_havegui(void) { return (pd_this->pd_inter->i_havegui); } @@ -797,7 +796,7 @@ void glob_ping(t_pd *dummy) pd_this->pd_inter->i_waitingforping = 0; } -static int sys_flushqueue(void ) +static int sys_flushqueue(void) { int wherestop = pd_this->pd_inter->i_bytessincelastping + GUI_UPDATESLICE; if (wherestop + (GUI_UPDATESLICE >> 1) > GUI_BYTESPERPING) @@ -901,9 +900,20 @@ void sys_unqueuegui(void *client) } } + /* poll for any incoming packets, or for GUI updates to send. call with + the PD instance lock set. */ int sys_pollgui(void) { - return (sys_domicrosleep(0, 1) || sys_poll_togui()); + static double lasttime = 0; + double now = 0; + int didsomething = sys_domicrosleep(0, 1); + if (!didsomething || (now = sys_getrealtime()) > lasttime + 0.5) + { + didsomething |= sys_poll_togui(); + if (now) + lasttime = now; + } + return (didsomething); } void sys_init_fdpoll(void) @@ -931,7 +941,7 @@ void glob_watchdog(t_pd *dummy) } #endif -static void sys_init_deken( void) +static void sys_init_deken(void) { const char*os = #if defined __linux__ @@ -1486,7 +1496,7 @@ int sys_startgui(const char *libdir) /* more work needed here - for some reason we can't restart the gui after shutting it down this way. I think the second 'init' message never makes it because the to-gui buffer isn't re-initialized. */ -void sys_stopgui( void) +void sys_stopgui(void) { t_canvas *x; for (x = pd_getcanvaslist(); x; x = x->gl_next) @@ -1503,7 +1513,7 @@ void sys_stopgui( void) /* ----------- mutexes for thread safety --------------- */ -void s_inter_newpdinstance( void) +void s_inter_newpdinstance(void) { pd_this->pd_inter = getbytes(sizeof(*pd_this->pd_inter)); #if PDTHREADS @@ -1528,7 +1538,7 @@ void s_inter_free(t_instanceinter *inter) freebytes(inter, sizeof(*inter)); } -void s_inter_freepdinstance( void) +void s_inter_freepdinstance(void) { s_inter_free(pd_this->pd_inter); } @@ -1551,7 +1561,7 @@ current instance of Pd is currently locked via sys_lock() below; this gains read access to the class and instance lists which must be released for the write-lock to be available. */ -void pd_globallock( void) +void pd_globallock(void) { #ifdef PDINSTANCE if (!pd_this->pd_islocked) @@ -1561,7 +1571,7 @@ void pd_globallock( void) #endif /* PDINSTANCE */ } -void pd_globalunlock( void) +void pd_globalunlock(void) { #ifdef PDINSTANCE pthread_rwlock_unlock(&sys_rwlock); @@ -1572,7 +1582,7 @@ void pd_globalunlock( void) /* routines to lock/unlock a Pd instance for thread safety. Call pd_setinsance first. The "pd_this" variable can be written and read thread-safely as it is defined as per-thread storage. */ -void sys_lock( void) +void sys_lock(void) { #ifdef PDINSTANCE pthread_mutex_lock(&pd_this->pd_inter->i_mutex); @@ -1583,7 +1593,7 @@ void sys_lock( void) #endif } -void sys_unlock( void) +void sys_unlock(void) { #ifdef PDINSTANCE pd_this->pd_islocked = 0; @@ -1594,7 +1604,7 @@ void sys_unlock( void) #endif } -int sys_trylock( void) +int sys_trylock(void) { #ifdef PDINSTANCE int ret; @@ -1616,9 +1626,24 @@ int sys_trylock( void) #else /* PDTHREADS */ -void sys_lock( void) {} -void sys_unlock( void) {} -void pd_globallock( void) {} -void pd_globalunlock( void) {} +#ifdef TEST_LOCKING /* run standalone Pd with this to find deadlocks */ +static int amlocked; +void sys_lock(void) +{ + if (amlocked) bug("duplicate lock"); + amlocked = 1; +} + +void sys_unlock(void) +{ + if (!amlocked) bug("duplicate unlock"); + amlocked = 0; +} +#else +void sys_lock(void) {} +void sys_unlock(void) {} +#endif +void pd_globallock(void) {} +void pd_globalunlock(void) {} #endif /* PDTHREADS */ diff --git a/src/s_loader.c b/src/s_loader.c index 5bf37dbf14..846774802a 100644 --- a/src/s_loader.c +++ b/src/s_loader.c @@ -355,7 +355,7 @@ int sys_load_lib(t_canvas *canvas, const char *classname) sys_loadlib_iter(dirbuf, &data); } data.classname = classname; - if(!data.ok) + if(!data.ok && !sys_isabsolutepath(classname)) /* don't iterate if classname is absolute */ canvas_path_iterate(canvas, (t_canvas_path_iterator)sys_loadlib_iter, &data); diff --git a/src/s_main.c b/src/s_main.c index 478abfbb67..3cd3b679c0 100644 --- a/src/s_main.c +++ b/src/s_main.c @@ -28,9 +28,9 @@ #define stringify(s) str(s) #define str(s) #s -char *pd_version = "Pd-" stringify(PD_MAJOR_VERSION) "." - stringify(PD_MINOR_VERSION) "." stringify(PD_BUGFIX_VERSION) - " (" stringify(PD_TEST_VERSION) ")"; +char *pd_version = "Pd-" stringify(PD_MAJOR_VERSION) "." \ +stringify(PD_MINOR_VERSION) "." stringify(PD_BUGFIX_VERSION) "\ + (" stringify(PD_TEST_VERSION) ")"; char pd_compiletime[] = __TIME__; char pd_compiledate[] = __DATE__; @@ -38,7 +38,7 @@ char pd_compiledate[] = __DATE__; void pd_init(void); int sys_argparse(int argc, char **argv); void sys_findprogdir(char *progname); -void sys_setsignalhandlers( void); +void sys_setsignalhandlers(void); int sys_startgui(const char *guipath); void sys_setrealtime(const char *guipath); int m_mainloop(void); @@ -77,8 +77,8 @@ char sys_font[100] = "Monaco"; // end ceammc char sys_fontweight[10] = "normal"; #else -char sys_font[100] = "DejaVu Sans Mono"; char sys_fontweight[10] = "bold"; +char sys_font[100] = "DejaVu Sans Mono"; #endif static int sys_main_srate; static int sys_main_advance; @@ -503,7 +503,7 @@ static char *(usagemessage[]) = { "-stdpath -- search standard directory (true by default)\n", "-helppath -- add to help file search path\n", "-open -- open file(s) on startup\n", -"-lib -- load object library(s)\n", +"-lib -- load object library(s) (omit file extensions)\n", "-font-size -- specify default font size in points\n", "-font-face -- specify default font\n", "-font-weight -- specify default font weight (normal or bold)\n", @@ -529,7 +529,7 @@ static char *(usagemessage[]) = { #endif "-sleep -- sleep when idle, don't spin (true by default)\n", "-nosleep -- spin, don't sleep (may lower latency on multi-CPUs)\n", -"-schedlib -- plug in external scheduler\n", +"-schedlib -- plug in external scheduler (omit file extensions)\n", "-extraflags -- string argument to send schedlib\n", "-batch -- run off-line as a batch process\n", "-nobatch -- run interactively (true by default)\n", diff --git a/src/s_midi_dummy.c b/src/s_midi_dummy.c index 0ab463efc5..0397804ff8 100644 --- a/src/s_midi_dummy.c +++ b/src/s_midi_dummy.c @@ -12,7 +12,7 @@ void sys_do_open_midi(int nmidiin, int *midiinvec, { } -void sys_close_midi( void) +void sys_close_midi(void) { } diff --git a/src/s_midi_pm.c b/src/s_midi_pm.c index d39948571d..bc8f9a5960 100644 --- a/src/s_midi_pm.c +++ b/src/s_midi_pm.c @@ -64,7 +64,7 @@ void sys_do_open_midi(int nmidiin, int *midiinvec, if (devno == midiinvec[i]) { err = Pm_OpenInput(&mac_midiindevlist[mac_nmidiindev], - j, NULL, 100, NULL, NULL); + j, NULL, 1024, NULL, NULL); if (err) post("could not open midi input %d (%s): %s", j, info->name, Pm_GetErrorText(err)); @@ -113,7 +113,7 @@ void sys_do_open_midi(int nmidiin, int *midiinvec, } } -void sys_close_midi( void) +void sys_close_midi(void) { int i; for (i = 0; i < mac_nmidiindev; i++) @@ -273,11 +273,10 @@ void sys_poll_midi(void) PmEvent buffer; for (i = 0; i < mac_nmidiindev; i++) { - if(Pm_Poll(mac_midiindevlist[i])) + while((nmess = Pm_Read(mac_midiindevlist[i], &buffer, 1))) { if (!throttle--) goto overload; - nmess = Pm_Read(mac_midiindevlist[i], &buffer, 1); if (nmess > 0) { int status = Pm_MessageStatus(buffer.message); @@ -326,8 +325,12 @@ void sys_poll_midi(void) break; } } - else if (nmess != pmBufferOverflow) - break; + else + { + error("%s", Pm_GetErrorText(nmess)); + if (nmess != pmBufferOverflow) + break; + } } } overload: ; diff --git a/src/s_path.c b/src/s_path.c index fc8df7bee8..b10ce9491c 100644 --- a/src/s_path.c +++ b/src/s_path.c @@ -535,7 +535,7 @@ void open_via_helppath(const char *name, const char *dir) } int sys_argparse(int argc, char **argv); -void sys_doflags( void) +void sys_doflags(void) { int i, beginstring = 0, state = 0, len; int rcargc = 0; @@ -615,7 +615,7 @@ t_symbol *sys_decodedialog(t_symbol *s) } /* send the user-specified search path to pd-gui */ -void sys_set_searchpath( void) +void sys_set_searchpath(void) { int i; t_namelist *nl; @@ -639,7 +639,7 @@ void sys_set_temppath(void) } /* send the hard-coded search path to pd-gui */ -void sys_set_extrapath( void) +void sys_set_extrapath(void) { int i; t_namelist *nl; @@ -692,7 +692,7 @@ void glob_addtopath(t_pd *dummy, t_symbol *path, t_float saveit) } /* set the global list vars for startup libraries and flags */ -void sys_set_startup( void) +void sys_set_startup(void) { int i; t_namelist *nl; @@ -731,5 +731,3 @@ void glob_startup_dialog(t_pd *dummy, t_symbol *s, int argc, t_atom *argv) namelist_append_files(STUFF->st_externlist, s->s_name); } } - - diff --git a/src/s_print.c b/src/s_print.c index 71b998ace2..54d8fe230b 100644 --- a/src/s_print.c +++ b/src/s_print.c @@ -18,25 +18,34 @@ t_printhook sys_printhook; int sys_printtostderr; /* escape characters for tcl/tk */ -static char* strnescape(char *dest, const char *src, size_t len) +char* pdgui_strnescape(char *dst, size_t dstlen, const char *src, size_t srclen) { - int ptin = 0; - unsigned ptout = 0; - for(; ptout < len; ptin++, ptout++) + unsigned ptin = 0, ptout = 0; + if(!dst || !src)return 0; + while(1) { int c = src[ptin]; - if (c == '\\' || c == '{' || c == '}') - dest[ptout++] = '\\'; - dest[ptout] = src[ptin]; + if (c == '\\' || c == '{' || c == '}') { + dst[ptout++] = '\\'; + if (dstlen && ptout >= dstlen){ + dst[ptout-1] = 0; + break; + } + } + dst[ptout] = c; + ptin++; + ptout++; if (c==0) break; + if (srclen && ptin >= srclen) break; + if (dstlen && ptout >= dstlen) break; } - if(ptout < len) - dest[ptout]=0; + if(!dstlen || ptout < dstlen) + dst[ptout]=0; else - dest[len-1]=0; + dst[dstlen-1]=0; - return dest; + return dst; } static char* strnpointerid(char *dest, const void *pointer, size_t len) @@ -60,7 +69,7 @@ static void dopost(const char *s) else { char upbuf[MAXPDSTRING]; - sys_vgui("::pdwindow::post {%s}\n", strnescape(upbuf, s, MAXPDSTRING)); + sys_vgui("::pdwindow::post {%s}\n", pdgui_strnescape(upbuf, MAXPDSTRING, s, 0)); } } @@ -82,7 +91,7 @@ static void doerror(const void *object, const char *s) char obuf[MAXPDSTRING]; sys_vgui("::pdwindow::logpost {%s} 1 {%s}\n", strnpointerid(obuf, object, MAXPDSTRING), - strnescape(upbuf, s, MAXPDSTRING)); + pdgui_strnescape(upbuf, MAXPDSTRING, s, 0)); } } @@ -106,7 +115,7 @@ static void dologpost(const void *object, const int level, const char *s) char obuf[MAXPDSTRING]; sys_vgui("::pdwindow::logpost {%s} %d {%s}\n", strnpointerid(obuf, object, MAXPDSTRING), - level, strnescape(upbuf, s, MAXPDSTRING)); + level, pdgui_strnescape(upbuf, MAXPDSTRING, s, 0)); } } diff --git a/src/s_stuff.h b/src/s_stuff.h index d162b12a3e..00ca52973b 100644 --- a/src/s_stuff.h +++ b/src/s_stuff.h @@ -39,7 +39,7 @@ extern t_symbol *sys_flags; extern int sys_debuglevel; extern int sys_verbose; extern int sys_noloadbang; -EXTERN int sys_havegui( void); +EXTERN int sys_havegui(void); extern char *sys_guicmd; EXTERN int sys_nearestfontsize(int fontsize); @@ -73,11 +73,11 @@ EXTERN void sys_set_audio_settings_reopen(int naudioindev, int *audioindev, int nchindev, int *chindev, int naudiooutdev, int *audiooutdev, int nchoutdev, int *choutdev, int srate, int advance, int callback, int blocksize); -EXTERN void sys_reopen_audio( void); +EXTERN void sys_reopen_audio(void); EXTERN void sys_close_audio(void); /* return true if the interface prefers always being open (ala jack) : */ -EXTERN int audio_shouldkeepopen( void); -EXTERN int audio_isopen( void); /* true if audio interface is open */ +EXTERN int audio_shouldkeepopen(void); +EXTERN int audio_isopen(void); /* true if audio interface is open */ EXTERN int sys_audiodevnametonumber(int output, const char *name); EXTERN void sys_audiodevnumbertoname(int output, int devno, char *name, int namesize); @@ -117,8 +117,8 @@ EXTERN int sys_mididevnametonumber(int output, const char *name); EXTERN void sys_mididevnumbertoname(int output, int devno, char *name, int namesize); -EXTERN void sys_reopen_midi( void); -EXTERN void sys_close_midi( void); +EXTERN void sys_reopen_midi(void); +EXTERN void sys_close_midi(void); EXTERN void sys_putmidimess(int portno, int a, int b, int c); EXTERN void sys_putmidibyte(int portno, int a); EXTERN void sys_poll_midi(void); @@ -135,7 +135,7 @@ void sys_do_open_midi(int nmidiindev, int *midiindev, EXTERN void sys_alsa_putmidimess(int portno, int a, int b, int c); EXTERN void sys_alsa_putmidibyte(int portno, int a); EXTERN void sys_alsa_poll_midi(void); -EXTERN void sys_alsa_close_midi( void); +EXTERN void sys_alsa_close_midi(void); /* implemented in the system dependent MIDI code (s_midi_pm.c, etc. ) */ @@ -296,7 +296,7 @@ void jack_autoconnect(int); int mmio_open_audio(int naudioindev, int *audioindev, int nchindev, int *chindev, int naudiooutdev, int *audiooutdev, int nchoutdev, int *choutdev, int rate, int blocksize); -void mmio_close_audio( void); +void mmio_close_audio(void); void mmio_reportidle(void); int mmio_send_dacs(void); void mmio_getdevs(char *indevlist, int *nindevs, @@ -324,11 +324,11 @@ void esd_getdevs(char *indevlist, int *nindevs, int maxndev, int devdescsize); int dummy_open_audio(int nin, int nout, int sr); -int dummy_close_audio( void); -int dummy_send_dacs( void); +int dummy_close_audio(void); +int dummy_send_dacs(void); void dummy_getdevs(char *indevlist, int *nindevs, char *outdevlist, int *noutdevs, int *canmulti, int maxndev, int devdescsize); -void dummy_listdevs( void); +void dummy_listdevs(void); void sys_listmididevs(void); EXTERN void sys_set_midi_api(int whichapi); @@ -337,7 +337,7 @@ EXTERN int sys_audioapi; EXTERN void sys_set_audio_state(int onoff); /* API dependent audio flags and settings */ -void oss_set32bit( void); +void oss_set32bit(void); void linux_alsa_devname(char *devname); EXTERN void sys_get_audio_params( @@ -359,21 +359,21 @@ extern int sys_printtostderr; EXTERN int sys_externalschedlib; -EXTERN t_sample* get_sys_soundout(void ) ; -EXTERN t_sample* get_sys_soundin(void ) ; -EXTERN int* get_sys_main_advance(void ) ; -EXTERN double* get_sys_time_per_dsp_tick(void ) ; -EXTERN int* get_sys_schedblocksize(void ) ; -EXTERN double* get_sys_time(void ) ; -EXTERN t_float* get_sys_dacsr(void ) ; -EXTERN int* get_sys_sleepgrain(void ) ; -EXTERN int* get_sys_schedadvance(void ) ; - -EXTERN void sys_clearhist(void ); -EXTERN void sys_initmidiqueue(void ); +EXTERN t_sample* get_sys_soundout(void); +EXTERN t_sample* get_sys_soundin(void); +EXTERN int* get_sys_main_advance(void); +EXTERN double* get_sys_time_per_dsp_tick(void); +EXTERN int* get_sys_schedblocksize(void); +EXTERN double* get_sys_time(void); +EXTERN t_float* get_sys_dacsr(void); +EXTERN int* get_sys_sleepgrain(void); +EXTERN int* get_sys_schedadvance(void); + +EXTERN void sys_clearhist(void); +EXTERN void sys_initmidiqueue(void); EXTERN int sys_addhist(int phase); -EXTERN void sched_tick( void); -EXTERN void sys_pollmidiqueue(void ); +EXTERN void sched_tick(void); +EXTERN void sys_pollmidiqueue(void); EXTERN void sys_setchsr(int chin, int chout, int sr); EXTERN void inmidi_realtimein(int portno, int cmd); @@ -412,3 +412,13 @@ struct _instancestuff }; #define STUFF (pd_this->pd_stuff) + +/* escape characters for tcl/tk + * escapes special characters ("{}\") in the string 'src', which + * has a maximum length of 'srclen' and might be 0-terminated, + * and writes them into the 'dstlen' sized output buffer 'dst' + * the result is zero-terminated; if the 'dst' buffer cannot hold the + * fully escaped 'src' string, the result might be incomplete. + * 'srclen' can be 0, in which case the 'src' string must be 0-terminated. + */ +EXTERN char*pdgui_strnescape(char* dst, size_t dstlen, const char*src, size_t srclen); diff --git a/src/x_array.c b/src/x_array.c index 4a7b1b7c73..52e79f1b99 100644 --- a/src/x_array.c +++ b/src/x_array.c @@ -865,7 +865,7 @@ void canvas_add_for_class(t_class *c); /* ---------------- global setup function -------------------- */ -void x_array_setup(void ) +void x_array_setup(void) { array_define_class = class_new(gensym("array define"), 0, (t_method)canvas_free, sizeof(t_canvas), 0, 0); diff --git a/src/x_connective.c b/src/x_connective.c index 28714f4b4d..a2ee0aad8b 100644 --- a/src/x_connective.c +++ b/src/x_connective.c @@ -30,18 +30,18 @@ static void *pdint_new(t_floatarg f) static void pdint_bang(t_pdint *x) { - outlet_float(x->x_obj.ob_outlet, (t_float)(int)(x->x_f)); + outlet_float(x->x_obj.ob_outlet, (t_float)(int64_t)(x->x_f)); } static void pdint_float(t_pdint *x, t_float f) { - outlet_float(x->x_obj.ob_outlet, (t_float)(int)(x->x_f = f)); + outlet_float(x->x_obj.ob_outlet, (t_float)(int64_t)(x->x_f = f)); } static void pdint_send(t_pdint *x, t_symbol *s) { if (s->s_thing) - pd_float(s->s_thing, (t_float)(int)x->x_f); + pd_float(s->s_thing, (t_float)(int64_t)x->x_f); else pd_error(x, "%s: no such object", s->s_name); } diff --git a/src/x_gui.c b/src/x_gui.c index 0b801547cb..8c5d711e5c 100644 --- a/src/x_gui.c +++ b/src/x_gui.c @@ -6,11 +6,15 @@ away before the panel does... */ #include "m_pd.h" +#include "g_canvas.h" #include #include #ifdef HAVE_UNISTD_H #include #endif +#ifdef _MSC_VER +#define snprintf _snprintf /* for pdcontrol object */ +#endif /* --------------------- graphics responder ---------------- */ @@ -190,7 +194,7 @@ typedef struct _openpanel t_symbol *x_s; } t_openpanel; -static void *openpanel_new( void) +static void *openpanel_new(void) { char buf[50]; t_openpanel *x = (t_openpanel *)pd_new(openpanel_class); @@ -245,7 +249,7 @@ typedef struct _savepanel t_symbol *x_s; } t_savepanel; -static void *savepanel_new( void) +static void *savepanel_new(void) { char buf[50]; t_savepanel *x = (t_savepanel *)pd_new(savepanel_class); @@ -298,7 +302,7 @@ typedef struct _key t_object x_obj; } t_key; -static void *key_new( void) +static void *key_new(void) { t_key *x = (t_key *)pd_new(key_class); outlet_new(&x->x_obj, &s_float); @@ -321,7 +325,7 @@ typedef struct _keyup t_object x_obj; } t_keyup; -static void *keyup_new( void) +static void *keyup_new(void) { t_keyup *x = (t_keyup *)pd_new(keyup_class); outlet_new(&x->x_obj, &s_float); @@ -346,7 +350,7 @@ typedef struct _keyname t_outlet *x_outlet2; } t_keyname; -static void *keyname_new( void) +static void *keyname_new(void) { t_keyname *x = (t_keyname *)pd_new(keyname_class); x->x_outlet1 = outlet_new(&x->x_obj, &s_float); @@ -386,6 +390,98 @@ static void key_setup(void) class_sethelpsymbol(keyname_class, gensym("key")); } +/* ------------------------ pdcontrol --------------------------------- */ + +static t_class *pdcontrol_class; + +typedef struct _pdcontrol +{ + t_object x_obj; + t_canvas *x_canvas; + t_outlet *x_outlet; +} t_pdcontrol; + +static void *pdcontrol_new( void) +{ + t_pdcontrol *x = (t_pdcontrol *)pd_new(pdcontrol_class); + x->x_canvas = canvas_getcurrent(); + x->x_outlet = outlet_new(&x->x_obj, 0); + return (x); +} + + /* output containing directory of patch. optional args: + 1. a number, zero for this patch, one for the parent, etc.; + 2. a symbol to concatenate onto the directory; */ + +static void pdcontrol_dir(t_pdcontrol *x, t_symbol *s, t_floatarg f) +{ + t_canvas *c = x->x_canvas; + int i; + for (i = 0; i < (int)f; i++) + { + while (!c->gl_env) /* back up to containing canvas or abstraction */ + c = c->gl_owner; + if (c->gl_owner) /* back up one more into an owner if any */ + c = c->gl_owner; + } + if (*s->s_name) + { + char buf[MAXPDSTRING]; + snprintf(buf, MAXPDSTRING, "%s/%s", + canvas_getdir(c)->s_name, s->s_name); + buf[MAXPDSTRING-1] = 0; + outlet_symbol(x->x_outlet, gensym(buf)); + } + else outlet_symbol(x->x_outlet, canvas_getdir(c)); +} + +static void pdcontrol_args(t_pdcontrol *x, t_floatarg f) +{ + t_canvas *c = x->x_canvas; + int i; + int argc; + t_atom *argv; + for (i = 0; i < (int)f; i++) + { + while (!c->gl_env) /* back up to containing canvas or abstraction */ + c = c->gl_owner; + if (c->gl_owner) /* back up one more into an owner if any */ + c = c->gl_owner; + } + canvas_setcurrent(c); + canvas_getargs(&argc, &argv); + canvas_unsetcurrent(c); + outlet_list(x->x_outlet, &s_list, argc, argv); +} + +static void pdcontrol_browse(t_pdcontrol *x, t_symbol *s) +{ + char buf[MAXPDSTRING]; + snprintf(buf, MAXPDSTRING, "::pd_menucommands::menu_openfile {%s}\n", + s->s_name); + buf[MAXPDSTRING-1] = 0; + sys_gui(buf); +} + +static void pdcontrol_isvisible(t_pdcontrol *x) +{ + outlet_float(x->x_outlet, glist_isvisible(x->x_canvas)); +} + +static void pdcontrol_setup(void) +{ + pdcontrol_class = class_new(gensym("pdcontrol"), + (t_newmethod)pdcontrol_new, 0, sizeof(t_pdcontrol), 0, 0); + class_addmethod(pdcontrol_class, (t_method)pdcontrol_dir, + gensym("dir"), A_DEFFLOAT, A_DEFSYMBOL, 0); + class_addmethod(pdcontrol_class, (t_method)pdcontrol_args, + gensym("args"), A_DEFFLOAT, 0); + class_addmethod(pdcontrol_class, (t_method)pdcontrol_browse, + gensym("browse"), A_SYMBOL, 0); + class_addmethod(pdcontrol_class, (t_method)pdcontrol_isvisible, + gensym("isvisible"), 0); +} + /* -------------------------- setup routine ------------------------------ */ void x_gui_setup(void) @@ -394,4 +490,5 @@ void x_gui_setup(void) openpanel_setup(); savepanel_setup(); key_setup(); + pdcontrol_setup(); } diff --git a/src/x_interface.c b/src/x_interface.c index 16ac8595dd..4af7d8bd0d 100644 --- a/src/x_interface.c +++ b/src/x_interface.c @@ -61,7 +61,16 @@ static void print_float(t_print *x, t_float f) static void print_list(t_print *x, t_symbol *s, int argc, t_atom *argv) { - if (argc && argv->a_type != A_SYMBOL) startpost("%s:", x->x_sym->s_name); + if (argc && argv->a_type == A_FLOAT) + { + if(*x->x_sym->s_name) + startpost("%s:", x->x_sym->s_name); + else { + /* print first (numeric) atom, to avoid a trailing space */ + startpost("%g", atom_getfloat(argv)); + argc--; argv++; + } + } else startpost("%s%s%s", x->x_sym->s_name, (*x->x_sym->s_name ? ": " : ""), (argc > 1 ? s_list.s_name : (argc == 1 ? s_symbol.s_name : diff --git a/src/x_list.c b/src/x_list.c index 746db06e6f..0d1913d105 100644 --- a/src/x_list.c +++ b/src/x_list.c @@ -609,7 +609,7 @@ typedef struct _list_trim t_object x_obj; } t_list_trim; -static void *list_trim_new( void) +static void *list_trim_new(void) { t_list_trim *x = (t_list_trim *)pd_new(list_trim_class); outlet_new(&x->x_obj, &s_list); @@ -650,7 +650,7 @@ typedef struct _list_length t_object x_obj; } t_list_length; -static void *list_length_new( void) +static void *list_length_new(void) { t_list_length *x = (t_list_length *)pd_new(list_length_class); outlet_new(&x->x_obj, &s_float); @@ -688,7 +688,7 @@ typedef struct _list_fromsymbol t_object x_obj; } t_list_fromsymbol; -static void *list_fromsymbol_new( void) +static void *list_fromsymbol_new(void) { t_list_fromsymbol *x = (t_list_fromsymbol *)pd_new(list_fromsymbol_class); outlet_new(&x->x_obj, &s_list); @@ -723,7 +723,7 @@ typedef struct _list_tosymbol t_object x_obj; } t_list_tosymbol; -static void *list_tosymbol_new( void) +static void *list_tosymbol_new(void) { t_list_tosymbol *x = (t_list_tosymbol *)pd_new(list_tosymbol_class); outlet_new(&x->x_obj, &s_symbol); diff --git a/src/x_scalar.c b/src/x_scalar.c index c0d107adb0..99983e84c8 100644 --- a/src/x_scalar.c +++ b/src/x_scalar.c @@ -185,7 +185,7 @@ void canvas_add_for_class(t_class *c); /* ---------------- global setup function -------------------- */ -void x_scalar_setup(void ) +void x_scalar_setup(void) { scalar_define_class = class_new(gensym("scalar define"), 0, (t_method)canvas_free, sizeof(t_canvas), 0, 0); @@ -199,5 +199,4 @@ void x_scalar_setup(void ) class_setsavefn(scalar_define_class, scalar_define_save); class_addcreator((t_newmethod)scalarobj_new, gensym("scalar"), A_GIMME, 0); - } diff --git a/src/x_text.c b/src/x_text.c index 13d0d2a73c..52f38bcdf1 100644 --- a/src/x_text.c +++ b/src/x_text.c @@ -9,6 +9,8 @@ moment it also defines "text" but it may later be better to split this off. */ #include "g_canvas.h" /* just for glist_getfont, bother */ #include #include +#define __USE_GNU /* needed so stdlib will define qsort_r */ +#include #ifdef HAVE_UNISTD_H #include #endif @@ -25,6 +27,10 @@ static t_class *text_define_class; # include /* BSDs for example */ #endif +#ifdef _WIN32 +#define qsort_r qsort_s /* of course Microsoft decides to be different */ +#endif + #ifndef HAVE_ALLOCA /* can work without alloca() but we never need it */ #define HAVE_ALLOCA 1 #endif @@ -205,7 +211,7 @@ static void textbuf_free(t_textbuf *x) pd_unbind(x2, gensym("#A")); } - /* random helper function */ + /* random helper function to find the nth line in a text buffer */ static int text_nthline(int n, t_atom *vec, int line, int *startp, int *endp) { int i, cnt = 0; @@ -351,6 +357,7 @@ void text_define_bang(t_text_define *x) /* set from a list */ void text_define_set(t_text_define *x, t_symbol *s, int argc, t_atom *argv) { + binbuf_clear(x->x_binbuf); binbuf_restore(x->x_binbuf, argc, argv); textbuf_senditup(&x->x_textbuf); } @@ -384,6 +391,201 @@ static void text_define_send(t_text_define *x, t_symbol *s) } } +typedef struct _keyinfo +{ + int ki_forward; /* one if forward, -1 if reversed */ + int ki_onset; /* number of fields to skip over */ +} t_keyinfo; + + /* apple products seem to have their own prototypes for qsort_r (?) */ +#ifdef __APPLE__ +static int text_sortcompare(void *zkeyinfo, const void *z1, const void *z2) +#else +static int text_sortcompare(const void *z1, const void *z2, void *zkeyinfo) +#endif +{ + const t_atom *a1 = *(t_atom **)z1, *a2 = *(t_atom **)z2; + t_keyinfo *k = (t_keyinfo *)zkeyinfo; + int count; + /* advance first line by key onset and react if we run out early */ + for (count = k->ki_onset; count--; a1++) + { + if (a1->a_type == A_SEMI || a1->a_type == A_COMMA) + { + /* if second line runs out early too consider them equal */ + for (count = k->ki_onset; count--; a2++) + if (a2->a_type == A_SEMI || a2->a_type == A_COMMA) + goto equal; + return (-k->ki_forward); + } + } + for (count = k->ki_onset; count--; a2++) + if (a2->a_type == A_SEMI || a2->a_type == A_COMMA) + return (-k->ki_forward); + /* compare remaining fields */ + for (; ; a1++, a2++) + { + if (a1->a_type == A_SEMI || a1->a_type == A_COMMA) + { + /* hit end of first line */ + if (a2->a_type == A_SEMI || a2->a_type == A_COMMA) + goto equal; + else return (-k->ki_forward); + } + else if (a2->a_type == A_SEMI || a2->a_type == A_COMMA) + return (k->ki_forward); /* hit end of second line */ + + /* otherwise if they're different return something, and + if not proceed to next field */ + else if (a1->a_type == A_FLOAT) + { + if (a2->a_type == A_FLOAT) + { + if (a1->a_w.w_float < a2->a_w.w_float) + return (-k->ki_forward); + else if (a1->a_w.w_float > a2->a_w.w_float) + return (k->ki_forward); + } + else return (-k->ki_forward); + } + else if (a1->a_type == A_SYMBOL) + { + if (a2->a_type == A_SYMBOL) + { + int z = strcmp(a1->a_w.w_symbol->s_name, + a2->a_w.w_symbol->s_name); + if (z) + return (z * k->ki_forward); + } + else return (k->ki_forward); + } + } +equal: + /* ran out of both lines at same time, so we're "equal". + in this case compare pointers so that "equal" lines (which + might not be identical because of a nonzero onset) stay in the + same order as before. */ + if (a1 < a2) + return (-1); + else return (1); +} + +/* I can't seem to get to qsort_s on W2K - clicking on Pd complains it isn't +found in msvcrt (which indeed it isn't in). Rather than waste more time +on this, just call qsort if we're Microsoft and single-instance. I hope nobody +will try to compile multi-instance Pd for 32-bit windows, but if they +do, they might run into my qsort_s problem again. */ +#if defined(_WIN32) && !defined(PDINSTANCE) +#define MICROSOFT_STUPID_SORT +static void *stupid_zkeyinfo; +static int stupid_sortcompare(const void *z1, const void *z2) { + return (text_sortcompare(z1, z2, stupid_zkeyinfo)); } +#endif + + /* sort the contents */ +static void text_define_sort(t_text_define *x, t_symbol *s, + int argc, t_atom *argv) +{ + int nlines, unique = 0, natom = binbuf_getnatom(x->x_binbuf), i, + thisline, startline; + t_atom *vec = binbuf_getvec(x->x_binbuf), **sortbuf, *a1, *a2; + t_binbuf *newb; + t_keyinfo k; + k.ki_forward = 1; + k.ki_onset = 0; + while (argc && argv->a_type == A_SYMBOL && + *argv->a_w.w_symbol->s_name == '-') + { + if (!strcmp(argv->a_w.w_symbol->s_name, "-u")) + unique = 1; + else if (!strcmp(argv->a_w.w_symbol->s_name, "-r")) + k.ki_forward = -1; + else if (!strcmp(argv->a_w.w_symbol->s_name, "-k") && argc > 1 + && argv[1].a_type == A_FLOAT) + { + if ((k.ki_onset = argv[1].a_w.w_float) < 0) + k.ki_onset = 0; + argc--; argv++; + } + else + { + pd_error(x, "text define sort: unknown flag ..."); + postatom(argc, argv); endpost(); + } + argc--; argv++; + } + if (argc) + { + post("warning: text define sort ignoring extra argument: "); + postatom(argc, argv); endpost(); + } + if (!natom) + return; + /* last thing in buffer should be a terminator */ + if (vec[natom-1].a_type != A_SEMI && + vec[natom-1].a_type != A_COMMA) + binbuf_addsemi(x->x_binbuf), + vec = binbuf_getvec(x->x_binbuf), + natom = binbuf_getnatom(x->x_binbuf), + nlines++; + for (i = nlines = 0; i < natom; i++) + if (vec[i].a_type == A_SEMI || vec[i].a_type == A_COMMA) + nlines++; + sortbuf = (t_atom **)getbytes(nlines * sizeof(*sortbuf)); + for (i = thisline = 0, startline = 1; i < natom; i++) + { + if (startline) + { + if (thisline >= nlines) + bug("text_define_sort"); + sortbuf[thisline++] = vec+i; + } + startline = (vec[i].a_type == A_SEMI || vec[i].a_type == A_COMMA); + } +#ifdef MICROSOFT_STUPID_SORT + stupid_zkeyinfo = &k; + qsort(sortbuf, nlines, sizeof(*sortbuf), stupid_sortcompare); +#else +#ifdef __APPLE__ + qsort_r(sortbuf, nlines, sizeof(*sortbuf), &k, text_sortcompare); +#else /* __APPLE__ */ + qsort_r(sortbuf, nlines, sizeof(*sortbuf), text_sortcompare, &k); +#endif /* __APPLE__ */ +#endif /* MICROSOFT_STUPID_SORT */ + newb = binbuf_new(); + for (thisline = 0; thisline < nlines; thisline++) + { + if (unique && thisline > 0) /* check for duplicates */ + { + for (a1 = sortbuf[thisline-1], a2 = sortbuf[thisline]; ; a1++, a2++) + { + if (a1->a_type == A_SEMI || a1->a_type == A_COMMA) + { + if (a1->a_type == a2->a_type) + goto skipit; /* duplicate line, don't copy */ + else goto doit; + } + else if (a1->a_type != a2->a_type || + a1->a_type == A_FLOAT && + a1->a_w.w_float != a2->a_w.w_float || + a1->a_type == A_SYMBOL && + a1->a_w.w_symbol != a2->a_w.w_symbol) + goto doit; + } + } + doit: + for (i = 0, a1 = sortbuf[thisline]; + a1->a_type != A_SEMI && a1->a_type != A_COMMA; i++, a1++) + ; + binbuf_add(newb, i+1, sortbuf[thisline]); + skipit: ; + } + binbuf_free(x->x_binbuf); + x->x_binbuf = newb; + freebytes(sortbuf, nlines * sizeof(*sortbuf)); + textbuf_senditup(&x->x_textbuf); +} + /* notification from GUI that we've been updated */ static void text_define_notify(t_text_define *x) { @@ -1034,6 +1236,8 @@ typedef struct _text_search t_text_client x_tc; t_outlet *x_out1; /* line indices */ int x_nkeys; + int x_onset; /* first line to include in search */ + int x_range; /* max number of lines to search */ t_key *x_keyvec; } t_text_search; @@ -1049,6 +1253,8 @@ static void *text_search_new(t_symbol *s, int argc, t_atom *argv) if (nkey == 0) nkey = 1; x->x_nkeys = nkey; + x->x_onset = 0; + x->x_range = 0x7fffffff; x->x_keyvec = (t_key *)getbytes(nkey * sizeof(*x->x_keyvec)); if (!argc) x->x_keyvec[0].k_field = 0, x->x_keyvec[0].k_binop = KB_EQ; @@ -1110,8 +1316,14 @@ static void text_search_list(t_text_search *x, { if (vec[i].a_type == A_SEMI || vec[i].a_type == A_COMMA || i == n-1) { - int thisn = i - thisstart, j, field = x->x_keyvec[0].k_field, - binop = x->x_keyvec[0].k_binop; + int thisn, j, field, binop; + if (lineno < x->x_onset) + goto nomatch; + if (lineno >= x->x_onset + x->x_range) + break; + thisn = i - thisstart; + field = x->x_keyvec[0].k_field; + binop = x->x_keyvec[0].k_binop; /* do we match? */ for (j = 0; j < argc; ) { @@ -1258,6 +1470,13 @@ static void text_search_list(t_text_search *x, outlet_float(x->x_out1, bestline); } +static void text_search_range(t_text_search *x, t_floatarg onset, + t_floatarg range) +{ + x->x_onset = (onset >= 0x7fffffff ? 0x7ffffff : (onset < 0 ? 0 : onset)); + x->x_range = (range >= 0x7fffffff ? 0x7ffffff : (range < 0 ? 0 : range)); +} + /* ---------------- text_sequence object - sequencer ----------- */ t_class *text_sequence_class; @@ -1667,7 +1886,7 @@ static void qlist_tick(t_qlist *x); static t_class *qlist_class; -static void *qlist_new( void) +static void *qlist_new(void) { t_qlist *x = (t_qlist *)pd_new(qlist_class); textbuf_init(&x->x_textbuf, gensym("qlist")); @@ -1895,7 +2114,7 @@ static void qlist_free(t_qlist *x) static t_class *textfile_class; -static void *textfile_new( void) +static void *textfile_new(void) { t_qlist *x = (t_qlist *)pd_new(textfile_class); textbuf_init(&x->x_textbuf, gensym("textfile")); @@ -1957,7 +2176,7 @@ field named 't'. I don't know how to make this not break pre-0.45 patches using templates named 'text'... perhaps this is a minor enough incompatibility that I'll just get away with it. */ -void text_template_init( void) +void text_template_init(void) { t_binbuf *b; b = binbuf_new(); @@ -1971,7 +2190,7 @@ void text_template_init( void) binbuf_free(b); } -void x_qlist_setup(void ) +void x_qlist_setup(void) { text_template_init(); text_define_class = class_new(gensym("text define"), @@ -1995,6 +2214,8 @@ void x_qlist_setup(void ) gensym("read"), A_GIMME, 0); class_addmethod(text_define_class, (t_method)text_define_send, gensym("send"), A_SYMBOL, 0); + class_addmethod(text_define_class, (t_method)text_define_sort, + gensym("sort"), A_GIMME, 0); class_setsavefn(text_define_class, text_define_save); class_addbang(text_define_class, text_define_bang); class_sethelpsymbol(text_define_class, gensym("text-object")); @@ -2048,6 +2269,8 @@ void x_qlist_setup(void ) (t_newmethod)text_search_new, (t_method)text_client_free, sizeof(t_text_search), 0, A_GIMME, 0); class_addlist(text_search_class, text_search_list); + class_addmethod(text_search_class, (t_method)text_search_range, + gensym("range"), A_FLOAT, A_FLOAT, 0); class_sethelpsymbol(text_search_class, gensym("text-object")); text_sequence_class = class_new(gensym("text sequence"), diff --git a/src/x_vexp.c b/src/x_vexp.c index bff93ac846..db1c78b16f 100644 --- a/src/x_vexp.c +++ b/src/x_vexp.c @@ -2198,5 +2198,5 @@ ex_print(struct ex_ex *eptr) } #ifdef _WIN32 -void ABORT( void) {bug("expr");} +void ABORT(void) {bug("expr");} #endif diff --git a/tcl/dialog_array.tcl b/tcl/dialog_array.tcl index 26e19979c9..9b1a5da6d0 100644 --- a/tcl/dialog_array.tcl +++ b/tcl/dialog_array.tcl @@ -318,18 +318,18 @@ proc ::dialog_array::create_dialog {mytoplevel newone xabs yabs} { # buttons frame $mytoplevel.buttonframe - pack $mytoplevel.buttonframe -side bottom -expand 1 -fill x -pady 2m + pack $mytoplevel.buttonframe -side bottom -pady 2m button $mytoplevel.buttonframe.cancel -text [_ "Cancel"] \ -command "::dialog_array::cancel $mytoplevel" - pack $mytoplevel.buttonframe.cancel -side left -expand 1 -fill x -padx 10 + pack $mytoplevel.buttonframe.cancel -side left -expand 1 -fill x -padx 15 -ipadx 10 if {$newone == 0 && $::windowingsystem ne "aqua"} { button $mytoplevel.buttonframe.apply -text [_ "Apply"] \ -command "::dialog_array::apply $mytoplevel" - pack $mytoplevel.buttonframe.apply -side left -expand 1 -fill x -padx 10 + pack $mytoplevel.buttonframe.apply -side left -expand 1 -fill x -padx 15 -ipadx 10 } button $mytoplevel.buttonframe.ok -text [_ "OK"]\ -command "::dialog_array::ok $mytoplevel" -default active - pack $mytoplevel.buttonframe.ok -side left -expand 1 -fill x -padx 10 + pack $mytoplevel.buttonframe.ok -side left -expand 1 -fill x -padx 15 -ipadx 10 # live widget updates on OSX in lieu of Apply button if {$::windowingsystem eq "aqua"} { diff --git a/tcl/dialog_audio.tcl b/tcl/dialog_audio.tcl index 85dae77e90..f791d96a59 100644 --- a/tcl/dialog_audio.tcl +++ b/tcl/dialog_audio.tcl @@ -251,8 +251,8 @@ proc ::dialog_audio::pdtk_audio_dialog {mytoplevel \ pack $mytoplevel.inputs.in4f -side top checkbutton $mytoplevel.inputs.in4f.x0 -variable audio_inenable4 \ - -text [_ "4:"] -anchor e - button $mytoplevel.inputs.in4f.x1 -text [lindex $audio_indevlist $audio_indev4] -width 20 \ + -text "4:" -anchor e + button $mytoplevel.inputs.in4f.x1 -text [lindex $audio_indevlist $audio_indev4] \ -command [list audio_popup $mytoplevel $mytoplevel.inputs.in4f.x1 audio_indev4 \ $audio_indevlist] label $mytoplevel.inputs.in4f.l2 -text [_ "Channels:"] @@ -271,7 +271,7 @@ proc ::dialog_audio::pdtk_audio_dialog {mytoplevel \ pack $mytoplevel.outputs.out1f -side top -fill x checkbutton $mytoplevel.outputs.out1f.x0 -variable audio_outenable1 \ - -text [_ "1:"] -anchor e + -text "1:" -anchor e if {$multi == 0} { label $mytoplevel.outputs.out1f.l1 \ -text [_ "(same as input device)..."] @@ -346,8 +346,8 @@ proc ::dialog_audio::pdtk_audio_dialog {mytoplevel \ # restart with longform set. if {$longform == 0 && $multi > 1} { frame $mytoplevel.longbutton - pack $mytoplevel.longbutton -side top - button $mytoplevel.longbutton.b -text [_ "Use multiple devices"] \ + pack $mytoplevel.longbutton -side top -fill x + button $mytoplevel.longbutton.b -text [_ "Use Multiple Devices"] \ -command {pdsend "pd audio-properties 1"} pack $mytoplevel.longbutton.b -expand 1 -ipadx 10 -pady 5 } @@ -359,7 +359,7 @@ proc ::dialog_audio::pdtk_audio_dialog {mytoplevel \ # buttons frame $mytoplevel.buttonframe - pack $mytoplevel.buttonframe -side top -after $mytoplevel.saveall -fill x -pady 2m + pack $mytoplevel.buttonframe -side top -after $mytoplevel.saveall -pady 2m button $mytoplevel.buttonframe.cancel -text [_ "Cancel"] \ -command "::dialog_audio::cancel $mytoplevel" pack $mytoplevel.buttonframe.cancel -side left -expand 1 -fill x -padx 15 -ipadx 10 diff --git a/tcl/dialog_canvas.tcl b/tcl/dialog_canvas.tcl index 41e13e9e85..de36212443 100644 --- a/tcl/dialog_canvas.tcl +++ b/tcl/dialog_canvas.tcl @@ -150,7 +150,7 @@ proc ::dialog_canvas::create_dialog {mytoplevel x y} { labelframe $mytoplevel.scale -text [_ "Scale"] -borderwidth 1 pack $mytoplevel.scale -side top -fill x - frame $mytoplevel.scale.x -pady 2 -borderwidth 1 + frame $mytoplevel.scale.x -pady 2 pack $mytoplevel.scale.x -side top label $mytoplevel.scale.x.label -text [_ "X units per pixel:"] entry $mytoplevel.scale.x.entry -width 10 @@ -166,11 +166,11 @@ proc ::dialog_canvas::create_dialog {mytoplevel x y} { checkbutton $mytoplevel.parent.graphme -text [_ "Graph-On-Parent"] \ -anchor w -variable graphme_button($mytoplevel) \ -command [concat ::dialog_canvas::checkcommand $mytoplevel] - pack $mytoplevel.parent.graphme -side top -fill x -padx 40 + pack $mytoplevel.parent.graphme -side top -anchor w -padx 40 checkbutton $mytoplevel.parent.hidetext -text [_ "Hide object name and arguments"] \ -anchor w -variable hidetext_button($mytoplevel) \ -command [concat ::dialog_canvas::checkcommand $mytoplevel] - pack $mytoplevel.parent.hidetext -side top -fill x -padx 40 + pack $mytoplevel.parent.hidetext -side top -anchor w -padx 40 labelframe $mytoplevel.range -text [_ "Range and size"] -borderwidth 1 pack $mytoplevel.range -side top -fill x @@ -206,18 +206,18 @@ proc ::dialog_canvas::create_dialog {mytoplevel x y} { -side left frame $mytoplevel.buttons - pack $mytoplevel.buttons -side bottom -fill x -expand 1 -pady 2m + pack $mytoplevel.buttons -side bottom -pady 2m button $mytoplevel.buttons.cancel -text [_ "Cancel"] \ -command "::dialog_canvas::cancel $mytoplevel" - pack $mytoplevel.buttons.cancel -side left -expand 1 -fill x -padx 10 + pack $mytoplevel.buttons.cancel -side left -expand 1 -fill x -padx 15 -ipadx 10 if {$::windowingsystem ne "aqua"} { button $mytoplevel.buttons.apply -text [_ "Apply"] \ -command "::dialog_canvas::apply $mytoplevel" - pack $mytoplevel.buttons.apply -side left -expand 1 -fill x -padx 10 + pack $mytoplevel.buttons.apply -side left -expand 1 -fill x -padx 15 -ipadx 10 } button $mytoplevel.buttons.ok -text [_ "OK"] \ -command "::dialog_canvas::ok $mytoplevel" -default active - pack $mytoplevel.buttons.ok -side left -expand 1 -fill x -padx 10 + pack $mytoplevel.buttons.ok -side left -expand 1 -fill x -padx 15 -ipadx 10 # live checkbutton & entry Return updates on OSX if {$::windowingsystem eq "aqua"} { diff --git a/tcl/dialog_data.tcl b/tcl/dialog_data.tcl index 9f6608610e..e032643cc1 100644 --- a/tcl/dialog_data.tcl +++ b/tcl/dialog_data.tcl @@ -39,7 +39,7 @@ proc ::dialog_data::pdtk_data_dialog {mytoplevel stuff} { $mytoplevel configure -padx 0 -pady 0 frame $mytoplevel.buttonframe - pack $mytoplevel.buttonframe -side bottom -fill x -pady 2m + pack $mytoplevel.buttonframe -side bottom -pady 2m button $mytoplevel.buttonframe.send -text [_ "Send ($modkeyname-S)"] \ -command "::dialog_data::send $mytoplevel" button $mytoplevel.buttonframe.ok -text [_ "Done ($modkeyname-D)"] \ diff --git a/tcl/dialog_font.tcl b/tcl/dialog_font.tcl index e7efc28986..1303657bed 100644 --- a/tcl/dialog_font.tcl +++ b/tcl/dialog_font.tcl @@ -114,7 +114,7 @@ proc ::dialog_font::create_dialog {gfxstub} { bind .font "::dialog_font::arrow_fontchange 1" frame .font.buttonframe - pack .font.buttonframe -side bottom -fill x -pady 2m + pack .font.buttonframe -side bottom -pady 2m button .font.buttonframe.ok -text [_ "OK"] \ -command "::dialog_font::ok $gfxstub" -default active pack .font.buttonframe.ok -side left -expand 1 -fill x -ipadx 10 diff --git a/tcl/dialog_gatom.tcl b/tcl/dialog_gatom.tcl index 3ae93e6ecb..aaebb38d2d 100644 --- a/tcl/dialog_gatom.tcl +++ b/tcl/dialog_gatom.tcl @@ -160,7 +160,7 @@ proc ::dialog_gatom::create_dialog {mytoplevel} { pack $mytoplevel.s_r.receive.entry $mytoplevel.s_r.receive.label -side right frame $mytoplevel.buttonframe -pady 5 - pack $mytoplevel.buttonframe -side top -fill x -expand 1 -pady 2m + pack $mytoplevel.buttonframe -side top -pady 2m button $mytoplevel.buttonframe.cancel -text [_ "Cancel"] \ -command "::dialog_gatom::cancel $mytoplevel" -highlightcolor green pack $mytoplevel.buttonframe.cancel -side left -expand 1 -fill x -padx 15 -ipadx 10 diff --git a/tcl/dialog_message.tcl b/tcl/dialog_message.tcl index be42771e2a..92d48a15ab 100644 --- a/tcl/dialog_message.tcl +++ b/tcl/dialog_message.tcl @@ -17,7 +17,7 @@ namespace eval ::dialog_message:: { proc ::dialog_message::get_history {direction} { variable message_history variable history_position - + incr history_position $direction if {$history_position < 0} {set history_position 0} if {$history_position > [llength $message_history]} { diff --git a/tcl/pd-gui.tcl b/tcl/pd-gui.tcl index bb84bdbdd7..f349bf5c04 100755 --- a/tcl/pd-gui.tcl +++ b/tcl/pd-gui.tcl @@ -321,7 +321,7 @@ proc init_for_platform {} { # trying loading icon in the GUI directory if {$::tcl_version >= 8.5} { set icon [file join $::sys_guidir pd.gif] - if {[file readable $icon]} { + if {[file readable $icon]} { catch { wm iconphoto . -default [image create photo -file "$icon"] } diff --git a/tcl/pd.ico b/tcl/pd.ico old mode 100755 new mode 100644 diff --git a/tcl/pd_bindings.tcl b/tcl/pd_bindings.tcl index a36af0085b..f46eff9963 100644 --- a/tcl/pd_bindings.tcl +++ b/tcl/pd_bindings.tcl @@ -1,5 +1,5 @@ -package provide pd_bindings 0.1 +package provide pd_bindings 0.1 package require pd_menucommands package require dialog_find @@ -7,7 +7,9 @@ namespace eval ::pd_bindings:: { namespace export global_bindings namespace export dialog_bindings namespace export patch_bindings + variable key2iso } +set ::pd_bindings::key2iso "" # TODO rename pd_bindings to window_bindings after merge is done @@ -113,6 +115,7 @@ proc ::pd_bindings::global_bindings {} { bind all <$::modifier-Shift-Key-v> {menu_send %W vslider} bind all <$::modifier-Shift-Key-w> {::pd_bindings::window_close %W 1} bind all <$::modifier-Shift-Key-z> {menu_redo} + bind all {menu_send %W deselectall; ::pd_bindings::sendkey %W 1 %K %A 1 %k} # OS-specific bindings if {$::windowingsystem eq "aqua"} { @@ -122,6 +125,16 @@ proc ::pd_bindings::global_bindings {} { bind all <$::modifier-Key-m> {menu_minimize %W} bind all <$::modifier-quoteleft> {menu_raisenextwindow} } + # BackSpace/Delete report the wrong isos (unicode representations) on OSX, + # so we set them to the empty string and let ::pd_bindings::sendkey guess the correct values + bind all {::pd_bindings::sendkey %W 1 %K "" 1 %k} + bind all {::pd_bindings::sendkey %W 0 %K "" 1 %k} + bind all {::pd_bindings::sendkey %W 1 %K "" 1 %k} + bind all {::pd_bindings::sendkey %W 0 %K "" 1 %k} + bind all {::pd_bindings::sendkey %W 1 %K "" 1 %k} + bind all {::pd_bindings::sendkey %W 0 %K "" 1 %k} + bind all {::pd_bindings::sendkey %W 1 %K "" 1 %k} + bind all {::pd_bindings::sendkey %W 0 %K "" 1 %k} } else { bind all <$::modifier-Key-q> {pdsend "pd verifyquit"} bind all <$::modifier-Key-m> {menu_minimize %W} @@ -133,10 +146,10 @@ proc ::pd_bindings::global_bindings {} { bind all <$::modifier-less> {menu_raisepreviouswindow} } - bind all {::pd_bindings::sendkey %W 1 %K %A 0} - bind all {::pd_bindings::sendkey %W 0 %K %A 0} - bind all {::pd_bindings::sendkey %W 1 %K %A 1} - bind all {::pd_bindings::sendkey %W 0 %K %A 1} + bind all {::pd_bindings::sendkey %W 1 %K %A 0 %k} + bind all {::pd_bindings::sendkey %W 0 %K %A 0 %k} + bind all {::pd_bindings::sendkey %W 1 %K %A 1 %k} + bind all {::pd_bindings::sendkey %W 0 %K %A 1 %k} } # bindings for .pdwindow are found in ::pdwindow::pdwindow_bindings in pdwindow.tcl @@ -152,7 +165,7 @@ proc ::pd_bindings::dialog_bindings {mytoplevel dialogname} { bind $mytoplevel <$::modifier-Key-w> "dialog_${dialogname}::cancel $mytoplevel" # these aren't supported in the dialog, so alert the user, then break so # that no other key bindings are run - if {$mytoplevel ne".find"} { + if {$mytoplevel ne ".find"} { bind $mytoplevel <$::modifier-Key-s> {bell; break} bind $mytoplevel <$::modifier-Shift-Key-s> {bell; break} bind $mytoplevel <$::modifier-Shift-Key-S> {bell; break} @@ -209,7 +222,22 @@ proc ::pd_bindings::patch_bindings {mytoplevel} { bind $tkcanvas <$::modifier-$alt-Shift-ButtonPress-1> \ "pdtk_canvas_mouse %W %x %y %b 7" - bind $tkcanvas "pdtk_canvas_mouseup %W %x %y %b" + bind $tkcanvas \ + "pdtk_canvas_mouseup %W %x %y %b 0" + bind $tkcanvas \ + "pdtk_canvas_mouseup %W %x %y %b 1" + bind $tkcanvas <$::modifier-ButtonRelease-1> \ + "pdtk_canvas_mouseup %W %x %y %b 2" + bind $tkcanvas <$::modifier-Shift-ButtonRelease-1> \ + "pdtk_canvas_mouseup %W %x %y %b 3" + bind $tkcanvas <$alt-ButtonRelease-1> \ + "pdtk_canvas_mouseup %W %x %y %b 4" + bind $tkcanvas <$alt-Shift-ButtonRelease-1> \ + "pdtk_canvas_mouseup %W %x %y %b 5" + bind $tkcanvas <$::modifier-$alt-ButtonRelease-1> \ + "pdtk_canvas_mouseup %W %x %y %b 6" + bind $tkcanvas <$::modifier-$alt-Shift-ButtonRelease-1> \ + "pdtk_canvas_mouseup %W %x %y %b 7" if {$::windowingsystem eq "x11"} { # from http://wiki.tcl.tk/3893 @@ -226,7 +254,7 @@ proc ::pd_bindings::patch_bindings {mytoplevel} { bind $tkcanvas {::pdtk_canvas::scroll %W x %D} # "right clicks" are defined differently on each platform - switch -- $::windowingsystem { + switch -- $::windowingsystem { "aqua" { bind $tkcanvas "pdtk_canvas_rightclick %W %x %y %b" # on Mac OS X, make a rightclick with Ctrl-click for 1 button mice @@ -240,6 +268,13 @@ proc ::pd_bindings::patch_bindings {mytoplevel} { } } + # key to cycle through selection + # bind $tkcanvas "::pd_bindings::canvas_cycle %W 1 %K %A 0 %k" + # bind $tkcanvas "::pd_bindings::canvas_cycle %W -1 %K %A 1 %k" + # on X11, is a different key by the name 'ISO_Left_Tab'... + # other systems (at least aqua) do not like this name, so we 'catch' any errors + # catch {bind $tkcanvas "::pd_bindings::canvas_cycle %W -1 %K %A 1 %k" } stderr + # window protocol bindings wm protocol $mytoplevel WM_DELETE_WINDOW "pdsend \"$mytoplevel menuclose 0\"" bind $tkcanvas "::pd_bindings::patch_destroy %W" @@ -258,7 +293,7 @@ proc ::pd_bindings::window_focusin {mytoplevel} { ::pd_menucommands::set_filenewdir $mytoplevel ::dialog_font::update_font_dialog $mytoplevel if {$mytoplevel eq ".pdwindow"} { - ::pd_menus::configure_for_pdwindow + ::pd_menus::configure_for_pdwindow } else { ::pd_menus::configure_for_canvas $mytoplevel } @@ -306,7 +341,7 @@ proc ::pd_bindings::patch_configure {mytoplevel width height x y} { # left top right bottom pdsend "$mytoplevel setbounds $x $y [expr $x + $width] [expr $y + $height]" } - + proc ::pd_bindings::patch_destroy {window} { set mytoplevel [winfo toplevel $window] unset ::editmode($mytoplevel) @@ -329,6 +364,12 @@ proc ::pd_bindings::dialog_focusin {mytoplevel} { if {$mytoplevel eq ".find"} {::dialog_find::focus_find} } +# (Shift-)Tab for cycling through selection +proc ::pd_bindings::canvas_cycle {mytoplevel cycledir key iso shift {keycode ""}} { + menu_send_float $mytoplevel cycleselect $cycledir + ::pd_bindings::sendkey $mytoplevel 1 $key $iso $shift $keycode +} + #------------------------------------------------------------------------------# # key usage @@ -336,28 +377,75 @@ proc ::pd_bindings::dialog_focusin {mytoplevel} { # are local to each patch. Therefore, key messages are not send for the # dialog panels, the Pd window, help browser, etc. so we need to filter those # events out. -proc ::pd_bindings::sendkey {window state key iso shift} { - # TODO canvas_key on the C side should be refactored with this proc as well - switch -- $key { - "BackSpace" { set iso ""; set key 8 } - "Tab" { set iso ""; set key 9 } - "Return" { set iso ""; set key 10 } - "Escape" { set iso ""; set key 27 } - "Space" { set iso ""; set key 32 } - "Delete" { set iso ""; set key 127 } - "KP_Delete" { set iso ""; set key 127 } +proc ::pd_bindings::sendkey {window state key iso shift {keycode ""} } { + #::pdwindow::error "::pd_bindings::sendkey .${state}. .${key}. .${iso}. .${shift}. .${keycode}.\n" + + # state: 1=keypress, 0=keyrelease + # key (%K): the keysym corresponding to the event, substituted as a textual string + # iso (%A): substitutes the UNICODE character corresponding to the event, or the empty string if the event does not correspond to a UNICODE character (e.g. the shift key was pressed) + # shift: 1=shift, 0=no-shift + # keycode (%k): keyboard code + + if { "$keycode" eq "" } { + # old fashioned code fails to add %k-parameter; substitute... + set keycode $key + } + # iso: + # - 1-character: use it! + # - multi-character: can happen with dead-keys (where an accent turns out to not be an accent after all...; e.g. "^" + "1" -> "^1") + # : turn it into multiple key-events (one per character)! + # - 0-character: we need to calculate iso + # : if there's one stored in key2iso, use it (in the case of KeyRelease) + # : do some substitution based on $key + # : else use $key + + if { [string length $iso] == 0 && $state == 0 } { + catch {set iso [dict get $::pd_bindings::key2iso $keycode] } } - if {$iso ne ""} { - scan $iso %c key + + switch -- [string length $iso] { + 0 { + switch -- $key { + "BackSpace" { set key 8 } + "Tab" { set key 9 } + "Return" { set key 10 } + "Escape" { set key 27 } + "Space" { set key 32 } + "space" { set key 32 } + "Delete" { set key 127 } + "KP_Delete" { set key 127 } + "KP_Enter" { set key 10 } + default { } + } + } + 1 { + scan $iso %c key + if { "$key" eq "13" } { set key 10 } + catch { + if { "" eq "${::pd_bindings::key2iso}" } { + set ::pd_bindings::key2iso [dict create] + } + # store the key2iso mapping + dict set ::pd_bindings::key2iso $keycode $iso + } + } + default { + # split a multi-char $iso in single chars + foreach k [split $iso {}] { + ::pd_bindings::sendkey $window $state $key $k $shift $keycode + } + return + } } + # some pop-up panels also bind to keys like the enter, but then disappear, # so ignore their events. The inputbox in the Startup dialog does this. if {! [winfo exists $window]} {return} + # $window might be a toplevel or canvas, [winfo toplevel] does the right thing set mytoplevel [winfo toplevel $window] - if {[winfo class $mytoplevel] eq "PatchWindow"} { - pdsend "$mytoplevel key $state $key $shift" - } else { - pdsend "pd key $state $key $shift" + if {[winfo class $mytoplevel] ne "PatchWindow"} { + set mytoplevel pd } + pdsend "$mytoplevel key $state $key $shift" } diff --git a/tcl/pd_guiprefs.tcl b/tcl/pd_guiprefs.tcl index a7f728cce8..2e16a40926 100644 --- a/tcl/pd_guiprefs.tcl +++ b/tcl/pd_guiprefs.tcl @@ -324,7 +324,11 @@ proc ::pd_guiprefs::prepare_domain {{domain {}}} { file mkdir $fullconfigdir } }]} { - ::pdwindow::error "$::pd_guiprefs::domain was *NOT* created in $confdir.\n" + set absconfdir ${::pd_guiprefs::configdir} + catch { set absconfdir [file normalize ${::pd_guiprefs::configdir} ] } + + ::pdwindow::error [format [_ "Couldn't create preferences \"%1\$s\" in %2\$s" ] $domain $absconfdir] + ::pdwindow::error "\n" } return $domain } diff --git a/tcl/pdtk_canvas.tcl b/tcl/pdtk_canvas.tcl index a832c6962f..00ec557532 100644 --- a/tcl/pdtk_canvas.tcl +++ b/tcl/pdtk_canvas.tcl @@ -210,9 +210,9 @@ proc pdtk_canvas_mouse {tkcanvas x y b f} { pdsend "$mytoplevel mouse [$tkcanvas canvasx $x] [$tkcanvas canvasy $y] $b $f" } -proc pdtk_canvas_mouseup {tkcanvas x y b} { +proc pdtk_canvas_mouseup {tkcanvas x y b {f 0}} { set mytoplevel [winfo toplevel $tkcanvas] - pdsend "$mytoplevel mouseup [$tkcanvas canvasx $x] [$tkcanvas canvasy $y] $b" + pdsend "$mytoplevel mouseup [$tkcanvas canvasx $x] [$tkcanvas canvasy $y] $b $f" } proc pdtk_canvas_rightclick {tkcanvas x y b} { @@ -223,7 +223,7 @@ proc pdtk_canvas_rightclick {tkcanvas x y b} { # on X11, button 2 pastes from X11 clipboard, so simulate normal paste actions proc pdtk_canvas_clickpaste {tkcanvas x y b} { pdtk_canvas_mouse $tkcanvas $x $y $b 0 - pdtk_canvas_mouseup $tkcanvas $x $y $b + pdtk_canvas_mouseup $tkcanvas $x $y $b 0 if { [catch {set pdtk_pastebuffer [selection get]}] } { # no selection... do nothing } else { @@ -287,6 +287,16 @@ proc ::pdtk_canvas::pdtk_canvas_popup {mytoplevel xcanvas ycanvas hasproperties tk_popup .popup $xpopup $ypopup 0 } +if {[tk windowingsystem] eq "aqua" } { + # I don't know how to move the mouse on OSX, so skip it + proc ::pdtk_canvas::setmouse {tkcanvas x y} { } +} else { + proc ::pdtk_canvas::setmouse {tkcanvas x y} { + # set the mouse to the given position + # (same coordinate system as reported by pdtk_canvas_motion) + event generate $tkcanvas -warp 1 -x $x -y $y + } +} #------------------------------------------------------------------------------# # procs for when file loading starts/finishes diff --git a/tcl/pdtk_text.tcl b/tcl/pdtk_text.tcl index 96e5439c8d..ebbc48567d 100644 --- a/tcl/pdtk_text.tcl +++ b/tcl/pdtk_text.tcl @@ -4,6 +4,13 @@ package provide pdtk_text 0.1 # these procs are currently all in the global namespace because all of them # are used by 'pd' and therefore need to be in the global namespace. +namespace eval ::pdtk_text:: { +# proc to sanitize the 'text' + proc unescape {text} { + return [string range [subst -nocommands -novariables $text] 0 end-1] + } +} + # create a new text object (ie. obj, msg, comment) # the initializing string ends in an extra space. This is done in case # the last character should have been a backslash ('\') which would have @@ -11,7 +18,7 @@ package provide pdtk_text 0.1 # character in the string to compensate via [string range]. proc pdtk_text_new {tkcanvas tags x y text font_size color} { $tkcanvas create text $x $y -tags $tags \ - -text [string range $text 0 end-1] \ + -text [::pdtk_text::unescape $text] \ -fill $color -anchor nw -font [get_font_for_size $font_size] set mytag [lindex $tags 0] $tkcanvas bind $mytag "$tkcanvas icursor $mytag 0" @@ -27,7 +34,7 @@ proc pdtk_text_new {tkcanvas tags x y text font_size color} { # change the text in an existing text box proc pdtk_text_set {tkcanvas tag text} { - $tkcanvas itemconfig $tag -text [string range $text 0 end-1] + $tkcanvas itemconfig $tag -text [::pdtk_text::unescape $text] } # paste into an existing text box by literally "typing" the contents of the diff --git a/tcl/pdwindow.tcl b/tcl/pdwindow.tcl index 80c1ab0570..921789857c 100644 --- a/tcl/pdwindow.tcl +++ b/tcl/pdwindow.tcl @@ -60,6 +60,7 @@ proc ::pdwindow::buffer_message {object_id level message} { } proc ::pdwindow::insert_log_line {object_id level message} { + set message [subst -nocommands -novariables $message] if {$object_id eq ""} { .pdwindow.text.internal insert end $message log$level } else { @@ -160,7 +161,7 @@ proc ::pdwindow::save_logbuffer_to_file {} { puts $f "Pd $::PD_MAJOR_VERSION.$::PD_MINOR_VERSION-$::PD_BUGFIX_VERSION$::PD_TEST_VERSION on $::tcl_platform(os) $::tcl_platform(machine)" puts $f "--------------------------------------------------------------------------------" foreach {object_id level message} $logbuffer { - puts $f [string trimright $message] + puts -nonewline $f $message } ::pdwindow::post "saved console to: $filename\n" close $f